5

我正在创建我的第一个 Rails 应用程序,它将获得国际化支持。

我已经阅读了i18n 指南,它是一个很好的来源。它甚至建议本地化文件的文件组织,这是一个很好的起点:

|-defaults
|---es.rb
|---en.rb
|-models
|---book
|-----es.rb
|-----en.rb
|-views
|---defaults
|-----es.rb
|-----en.rb
|---books
|-----es.rb
|-----en.rb
|---users
|-----es.rb
|-----en.rb
|---navigation
|-----es.rb
|-----en.rb

但是,我不确定保存一些通常在表格中找到的额外(国际化)信息的最佳位置是什么,例如:

  • 输入占位符
  • 帮助文本(在输入旁边,有更详细的信息)

问题是:此信息与视图有关(与模型无关)。但是,它经常在每个模型、每个属性的基础上进行描述——这使我倾向于将它们放在模型文件中的 activerecord 属性下。

我的问题:放置这些本地化数据的最佳位置是什么?就文件组织(哪个文件夹)和文件内部的组织而言。

4

1 回答 1

5

我认为这个问题没有“正确”的答案。

我个人倾向于不同意指南建议的组织。i18n 本质上完全属于视图层的领域。将“views”文件夹放在那里有点令人困惑,并且可能导致不止一个开发人员遇到您现在遇到的确切问题。

我建议丢弃这些views/book文件并将与模型有关的所有内容保存在同一个文件中。所有翻译都是针对“视图”的,将与单个模型有关的所有翻译保存在一个地方可能更干净且不易出错。

# locale/models/model.en (or es, etc)

# all the activerecord translations
activerecord:
  models:
    # ...
  attributes:
    # ...
  errors:
    # ...
# then your form translations.
helpers:
  label:
    # Here you might add overrides for activerecord attribute lookups, but
    # do so with care (see note below).

  # then below are your custom view fields
  placeholders:
    model:
      attribute: 'translation'
  details:
    model:
      attribute: 'translation'

关于helpers.labelvs的注释activerecord.attributes

Rails 本身目前在两个地方寻找标签翻译。第一的:

helpers:
  label:
    model:
      attribute: 'translation'

回退到 activerecord 翻译:

activerecord:
  attributes:
    model:
      attribute: 'translation'

这有点像一个陷阱,因为这意味着表单标签和活动记录错误(以及其他翻译)会有所不同。这很好,例如,如果您希望表单标签更像是一个提示(例如,属性“body”的“Enter the body”),但如果您helper.label没有明显提到activerecord 翻译,例如(属性“body”的“Enter the message”)。所以要小心覆盖。

于 2012-11-08T15:43:10.393 回答