視圖、模型與控制器裡不應使用語言相關設定與字串。這些文字應搬到在 config/locales 下的語言檔案裡。
當 ActiveRecord 模型的標籤需要被翻譯時,使用activerecord 範圍:
en: activerecord: models: user: Member attributes: user: name: "Full name"
然後 User.model_name.human 會返回 "Member" ,而 User.human_attribute_name("name") 會返回 "Full name"。這些屬性的翻譯會被視圖作為標籤使用。
把在視圖使用的文字與 ActiveRecord 的屬性翻譯分開。 把給模型使用的語言檔案放在名為 models 的檔案夾,給視圖使用的文字放在名為 views 的檔案夾。
當使用額外目錄的語言檔案組織完成時,為了要載入這些目錄,要在 application.rb 檔案裡描述這些目錄。
# config/application.rb config.i18n.load_path += Dir[Rails.root.join('config', 'locales', '**', '*.{rb,yml}')]
把共用的本土化選項,像是日期或貨幣格式,放在 locales 的根目錄下。
使用精簡形式的 I18n 方法: I18n.t 來取代 I18n.translate 以及使用 I18n.l 取代 I18n.localize。
使用 "懶惰" 查詢檢視中使用的文字。假設我們有以下結構:
en: users: show: title: "User details page"
users.show.title 的數值能這樣被 app/views/users/show.html.haml 查詢:
在控制器與模型使用點分隔的鍵,來取代指定 :scope 選項。點分隔的調用更容易閱讀及追蹤層級。
# 這樣子調用I18n.t 'activerecord.errors.messages.record_invalid'# 而不是這樣I18n.t :record_invalid, :scope => [:activerecord, :errors, :messages]