不应在视图、模型或控制器里添加语言相关的设置,应在
config/locales目录下进行设置。当 ActiveRecord 模型的标签需要被翻译时,应使用
activerecordscope:en:activerecord:models:user: Memberattributes:user:name: "Full name"
然后
User.model_name.human会返回 “Member” ,而User.human_attribute_name("name")会返回 “Full name”。这些属性的翻译会作为视图中的标签。
把在视图中使用的文字与 ActiveRecord 的属性翻译分开。把模型使用的语言文件放在
models目录下,把视图使用的文字放在views目录下。当使用额外目录来设置语言文件时,应在
application.rb文件里列出这些目录以加载设置。# config/application.rbconfig.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获取:= t '.title'
应在控制器与模型中使用点分隔的键,而非指定
:scope选项。点分隔的调用更容易阅读,也更易追踪层级关系。# 差I18n.t :record_invalid, :scope => [:activerecord, :errors, :messages]# 好I18n.t 'activerecord.errors.messages.record_invalid'
更详细的 Rails i18n 信息可以在 Rails Guides 找到。
