Rails I18n嵌套翻译键

Bri*_*Ray 5 ruby ruby-on-rails internationalization

有没有办法嵌套翻译查找?像这样的东西:

en:
  uh_oh: 'Uh Oh!'
  error1: :'uh_oh' + ' There was a big error!'
  error2: :'uh_oh' + ' There was another big error!'
Run Code Online (Sandbox Code Playgroud)
I18n.t('error1') #=> 'Uh Oh! There was a big error!'
I18n.t('error2') #=> 'Uh Oh! There was another big error!'
Run Code Online (Sandbox Code Playgroud)

我尝试了很多变种,并尝试使用Ruby翻译文件而不是YAML.请注意,这确实有效:

en:
  uh_oh: 'Uh Oh!'
  error1: :'uh_oh'
Run Code Online (Sandbox Code Playgroud)
I18n.t('error1') #=> 'Uh Oh!'
Run Code Online (Sandbox Code Playgroud)

但是,如果我添加其他文本error1,uh_oh不会被翻译.

基本上我想避免总是传递通用术语,如下所示:

en:
  uh_oh: 'Uh Oh!'
  error1: '%{uh_oh} There was a big error!'
Run Code Online (Sandbox Code Playgroud)
I18n.t('error1', {uh_oh: I18n.t('uh_oh')})
Run Code Online (Sandbox Code Playgroud)

对于常见的术语uh_oh,插值对于每次调用error1(以及任何其他使用的键uh_oh)都是相同的,因此必须传入要插入的字符串并没有多大意义.取而代之的是更容易完成以下操作并让error1翻译处理公共密钥翻译:

I18n.t('error1')
Run Code Online (Sandbox Code Playgroud)

chr*_*mcg 5

我不会回答你的问题(我认为 i18n gem 不可能,但可能是错误的)。我要说的是,您不应该采用这种方法并将链接 [1] 作为背景。作为开发人员,很自然地看到模式并提取通用代码以保持干燥。在处理多种语言时,这一步太过分了,因为它会阻止正确的翻译。并非所有语言都遵循与英语相同的句子结构,您替换的内容可能需要更改以与句子的其余部分一致。

在我工作的网站上,我们在法语方面遇到了这个问题。我们有包含地点名称的句子,这在英语中很简单。“%{location_name} 属性”适用于任何位置名称。但是,在法语中,根据位置是城镇、省、地区以及名称是否以元音开头,您需要不同的结构。

[1] http://www.multilingual.com/articleDetail.php?id=594