2. 修改config/environment.rb文件,加入代碼:
3.在ApplicationController的類聲明後加入對init_gettext的調用。參數是一個字符串,一般取項目名稱(後面要用到的po和mo文件的文件名)。如:
init_gettext "depot"
end
4.新建lib/tasks/gettext.rake文件,代碼如下:
task :updatepo do
require 'gettext/utils'
GetText.update_pofiles("depot", Dir.glob("{app,lib,bin}/**/*.{rb,rhtml}"), "depot 1.0.0")
end
desc "Create mo-files"
task :makemo do
require 'gettext/utils'
GetText.create_mofiles(true, "po", "locale")
end
5. 修改rb和rhtml文件,用“_()”調用代替裸字符串。無論是在rb還是rhtml文件中,都通過“_()”函數得到多語言化的字符串。
_()函數的參數可以是任意的英文句子
model中validation的錯誤信息:
- validates_presence_of :title, :message => N_(“can’t be empty!”)
作爲主語的屬性名稱不用寫,gettext會自動將屬性名加在開頭。否則,可以用"%{fn}”代入屬性名。GetText會查詢數據庫,自動產生屬性名稱的字符串,產生規則是:"類名|屬性名"。如果屬性名是由下劃線分隔的多個單詞,則將下劃線替換爲空格,第一個單詞的首字母大寫,其餘單詞全部小寫。
例如User類的name屬性,對應的是"User|Name","created_at”屬性對應"User|Created at"。
在錯誤信息中還可以用"%d"代表validates_*中的某些參數,如:
- alidates_length_of :description, :minimum => 10, :message => N_(“%{fn} is too short (min is %d characters)”)
6.在項目的根目錄下創建目錄"po”,然後在"po"目錄下爲沒一種語言創建一個目錄(中文一般用"zh")。如果選擇語言的過程完全由應用自己控制的話,目錄名不遵循標準也沒有關係。
7.執行rake任務,生成pot和po文件。
8.翻譯po文件。可使用poedit
9.執行rake任務,生成mo文件。
10.設置語言。
request參數lang
http://localhost:3000/admin/?lang=zh
Cookie lang的值
before_init_gettext :default_locale
def default_locale
if (cookies["lang"].nil? or cookies["lang"].empty?)
set_locale "zh"
else
set_locale cookies["lang"]
end
end
init_gettext "depot"
end
設置GetText.locale
GetText.locale = "zh"
init_gettext "depot"
end
在view中使用set_locale方法