这个 StackOverflow的问题给我吃了什么是国际化的Rails文件结构好想法,所以我想我会分享另一种结构重构Rails的国际化阳明文件供大家参考/批评。
鉴于我想
- 保持默认的应用程序结构,使我可以像使用速记“懒”查找
t('.some_translation')
在我的看法,以及具有地方翻译在应用程序中使用的想法, - 避免尽可能多串的重复成为可能,尤其是与不是一样的,但也有相同的背景/含义的词语,
- 只需要改变一下按键有它处处体现出它的引用,
对于配置/区域设置/ 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
你仍然可以继续使用静态字符串(如“用户”以上),但每当你在你的观点得到完全相同的词/短语的多个实例,你可以重构它到字典中。 如果基本语言的一个关键的字典翻译不使一个目标语感,然后就在目标语言的参考价值变出一个静态字符串或将其添加为一个额外的进入目标语言的字典。 我敢肯定,每种语言的字典可重构出到另一个文件,如果他们得到过大而笨重(只要再得到在翻译文件的顶部重新导入所以引用工作)。
结构化国际化YAML文件,这种方式似乎与一些本地测试应用程序我想它在很好地工作。 我希望精彩Localeapp将提供这种锚定/在未来引用的支持。 但无论如何,这一切字典谈话不可能是原来的想法,所以与锚YAML引用,或者只是与一般的整个“字典”的概念有其他问题? 或者只是最好只撕裂了默认的后台完全,取而代之的是Redis的什么的,如果你有超越Rails的默认国际化惯例的需求?
编辑 :
我想尝试和地址凶猛的工作流程例如在下面在这里,而不是如下面他的回答其他评论的评论中提及。 请原谅我,如果我不似乎越来越被提出的观点,或者如果我只是天真:
要点1:你有一个一般的“名称”属性ActiveRecord的模式,他们都只是指向通用字典的名称:
dictionary:
name: &name Name
activerecord:
attributes:
name: *name
user:
name: *name
product:
name: *name
要点2:名称为用户模型只需要改变。 其他名称保持不变。
选项1:保持模型的字段名称相同的后端,只是改变前端翻译它指向。
dictionary:
name: &name Name
full_name: &full_name Full Name
activerecord:
attributes:
name: *name
user:
name: *full_name
product:
name: *name
选项2:更改用户模型字段的名称为好。 这需要改变任何引用到这个按键代码和change_table
/ rename_column
迁移。
dictionary:
name: &name Name
full_name: &full_name Full Name
activerecord:
attributes:
name: *name
user:
full_name: *full_name
product:
name: *name
方案三 :如果你想成为非常彻底,重构包含在“名称”信息出到单独的数据库/ activemodel的领域,这将需要新的字典条目和迁移。 你可以在你的意见决定,你会想如何“全名”,以显示:
dictionary:
name: &name Name
name_prefix: &name_prefix Prefix
first_name: &first_name First
middle_name: &middle_name Middle
last_name: &last_name Last
name_suffix: &name_suffix Suffix
activerecord:
attributes:
name: *name
user:
name_prefix: *name_prefix
first_name: *first_name
middle_name: *middle_name
last_name: *last_name
name_suffix: *name_suffix
product:
name: *name
要点3:任何人以任何理由需要一个翻译变化,市场在这种情况下。 我会从点2选1的例子遵循
选项1:产品型号字段名称相同,只是改变了前端的翻译。
dictionary:
name: &name Name
full_name: &full_name Full Name
funky_name: &funky_name Ur Phunky Phresh Naym
activerecord:
attributes:
name: *name
user:
name: *full_name
product:
name: *name
sessions: # Sign up page keys
new:
name: *funky_name
选项2:“时髦的名字”迫切需要被保存到数据库中,也出于某种原因。 让我们把它叫做一个username
,如果没有一个对象(或funky_name
如果由于某种原因,市场营销坚持)。
dictionary:
name: &name Name
full_name: &full_name Full Name
funky_name: &funky_name Ur Phunky Phresh Naym
activerecord:
attributes:
name: *name
user:
name: *full_name
username: *funky_name
product:
name: *name
sessions: # Sign up page keys
new:
name: *name
funky_name: *funky_name
右,所以我承认我根本不知道我在做什么,但是,我愿意是为了理解为什么在国际化Haml的这种工作方式是在一个Rails应用程序是一个坏主意公开击落。 难读? 维护的噩梦? 难道真的认为“黑客文件格式”如果我使用(我认为是)语言的功能?
再次感谢暴躁的驾驶我得到这一切了。