feg*_*emo 5 ruby-on-rails internationalization
我正在创建我的第一个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
Run Code Online (Sandbox Code Playgroud)
但是,我不确定在表格中通常可以找到一些额外(国际化)信息的最佳位置,例如:
问题是:这些信息与视图(而不是模型)有关.但是,它经常在每个模型中描述,每个属性基础 - 这使我倾向于将它们放在模块文件中,在activerecord属性下.
我的问题:放置本地化数据的最佳位置是什么?无论是文件组织(文件夹)还是文件内部的组织.
我认为这个问题没有“正确”的答案。
我个人倾向于不同意指南建议的组织。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'
Run Code Online (Sandbox Code Playgroud)
关于helpers.labelvs的注释activerecord.attributes:
Rails 本身目前在两个地方寻找标签翻译。第一的:
helpers:
label:
model:
attribute: 'translation'
Run Code Online (Sandbox Code Playgroud)
回到 activerecord 翻译:
activerecord:
attributes:
model:
attribute: 'translation'
Run Code Online (Sandbox Code Playgroud)
这有点像陷阱,因为这意味着表单标签和 activerecord 错误(和其他翻译)会有所不同。例如,如果您希望表单标签更像是一个提示(例如,属性“body”的“输入正文”),这很好,但如果您helper.label没有明显地指的是activerecord 翻译,例如(属性“body”的“输入消息”)。所以要小心覆盖。