我知道答案已经被接受,但是这个问题为我提供了一些思考的食物,我想我会分享 Rails i18n yml 文件的另一种结构供您考虑/批评。
鉴于我想
- 保留默认的应用程序结构,这样我就可以
t('.some_translation')
在我的视图中使用速记“惰性”查找,
- 避免尽可能多的字符串重复,特别是使用不仅相同而且具有相同上下文/含义的单词,
- 只需更改一次密钥,即可在所引用的任何地方反映出来,
对于看起来像这样的config/locales/en.yml文件:
activerecord:
attributes:
user:
email: Email
name: Name
password: Password
password_confirmation: Confirmation
models:
user: User
users:
fields:
email: Email
name: Name
password: Password
confirmation: Confirmation
sessions:
new:
email: Email
password: Password
我可以看到有很多重复,并且“电子邮件”和“密码”等词的上下文是明确的,并且在它们各自的视图中具有相同的含义。如果我决定将“电子邮件”更改为“电子邮件”,则必须全部更改它们会有点烦人,所以我想重构字符串以引用某种字典。那么,如何将字典哈希添加到文件顶部,并带有一些&
锚点,如下所示:
dictionary:
email: &email Email
name: &name Name
password: &password Password
confirmation: &confirmation Confirmation
activerecord:
attributes:
user:
email: *email
name: *name
password: *password
password_confirmation: *confirmation
models:
user: User
users:
fields:
email: *email
name: *name
password: *password
confirmation: *confirmation
sessions:
new:
email: *email
password: *password
每当您在视图中获得多个完全相同的单词/短语的实例时,您可以将其重构到字典中。如果基础语言中的键的字典翻译对目标语言没有意义,那么只需将目标语言中的引用值更改为静态字符串或将其作为额外条目添加到目标语言的字典中。我敢肯定,如果每种语言的字典变得太大且笨拙,都可以将它们重构到另一个文件中。
这种构建 i18n yaml 文件的方式似乎适用于我尝试过的一些本地测试应用程序。我希望精彩的Localeapp将来能为这种锚定/引用提供支持。但是无论如何,所有这些字典讨论都不可能是一个原创的想法,那么 YAML 中的锚引用是否还有其他问题,或者可能只是整个“字典”概念?还是完全删除默认后端并用Redis或其他东西替换它会更好?