ruby-on-rails - Rails I18n 嵌套翻译键

标签 ruby-on-rails ruby internationalization

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

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

我已经尝试了很多变体,还尝试使用 Ruby 翻译文件而不是 YAML。请注意,这确实有效:

en:
  uh_oh: 'Uh Oh!'
  error1: :'uh_oh'
I18n.t('error1') #=> 'Uh Oh!'

但是如果我向 error1 添加额外的文本,uh_oh 不会被翻译。

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

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

对于像 uh_oh 这样的常用术语,每次调用 error1(以及任何其他使用 uh_oh 的键)的插值都是相同的,因此,必须传入要插入的字符串并没有什么意义。相反,执行以下操作并让 error1 翻译负责公共(public)键翻译会更容易:

I18n.t('error1')

最佳答案

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

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

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

关于ruby-on-rails - Rails I18n 嵌套翻译键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6793948/

相关文章:

ruby-on-rails - 生成一个随机字符串以保存为 id,但在每次页面刷新时继续更改?

ruby-on-rails - 如何检查 gem 是否在工作?

python - 将 ruby​​ 变量导出到父进程

arrays - 另一个数组中字符串长度的数组

django i18n 不工作

javascript - Nuxt i18n 在语言切换时重置数据对象

iphone - 如何获取存在 Localized.strings 文件的语言列表?

ruby-on-rails - 按换行符 AND 逗号 AND 分号分割

ruby-on-rails - 重定向或渲染后不显示 Flash 消息

ruby-on-rails - 安装 rails 时出错 : Error building native extension (-Wl insilde ld call)