ThinkChat🤖让你学习和工作更高效,注册即送10W Token,即刻开启你的AI之旅 广告
## 国际化 * <a name="locale-texts"></a> 不应在视图、模型或控制器里添加语言相关的设置,应在 `config/locales` 目录下进行设置。 <sup>[[link](#locale-texts)]</sup> * <a name="translated-labels"></a> 当 ActiveRecord 模型的标签需要被翻译时,应使用`activerecord` scope: <sup>[[link](#translated-labels)]</sup> ``` en: activerecord: models: user: Member attributes: user: name: "Full name" ``` 然后 `User.model_name.human` 会返回 "Member" ,而 `User.human_attribute_name("name")` 会返回 "Full name"。这些属性的翻译会作为视图中的标签。 * <a name="organize-locale-files"></a> 把在视图中使用的文字与 ActiveRecord 的属性翻译分开。把模型使用的语言文件放在 `models` 目录下,把视图使用的文字放在 `views` 目录下。 <sup>[[link](#organize-locale-files)]</sup> * 当使用额外目录来设置语言文件时,应在 `application.rb` 文件里列出这些目录以加载设置。 ```Ruby # config/application.rb config.i18n.load_path += Dir[Rails.root.join('config', 'locales', '**', '*.{rb,yml}')] ``` * <a name="shared-localization"></a> 把共享的本地化选项,如日期或货币格式,放在 `locales` 的根目录下。 <sup>[[link](#shared-localization)]</sup> * <a name="short-i18n"></a> 应使用精简形式的 I18n 方法: 使用 `I18n.t` 而非 `I18n.translate`; 使用 `I18n.l` 而非 `I18n.localize`。 <sup>[[link](#short-i18n)]</sup> * <a name="lazy-lookup"></a> 应使用 "懒惰" 查询来获取视图中使用的文本。假设我们有以下结构: <sup>[[link](#lazy-lookup)]</sup> ``` en: users: show: title: "User details page" ``` `users.show.title` 的数值能这样被 `app/views/users/show.html.haml` 获取: ```Ruby = t '.title' ``` * <a name="dot-separated-keys"></a> 应在控制器与模型中使用点分隔的键,而非指定 `:scope` 选项。点分隔的调用更容易阅读,也更易追踪层级关系。 <sup>[[link](#dot-separated-keys)]</sup> ```Ruby # 差 I18n.t :record_invalid, :scope => [:activerecord, :errors, :messages] # 好 I18n.t 'activerecord.errors.messages.record_invalid' ``` * <a name="i18n-guides"></a> 更详细的 Rails i18n 信息可以在 [Rails Guides](http://guides.rubyonrails.org/i18n.html) 找到。 <sup>[[link](#i18n-guides)]</sup>