动态添加到I18N的翻译

时间:2013-06-12 18:13:39

标签: ruby-on-rails internationalization ruby-on-rails-3.2 rails-i18n

我添加了人工资金访问者,如下所述:Decimals and commas when entering a number into a Ruby on Rails form

现在我的模型中有两个属性用于相同类型的数据:原始版本和人类可读版本。问题:由于我使用的是activerecord-translation-yml-files,我必须为原始属性和humanized_attribute添加相同的翻译,因为我的表单显示了humanized_attribute的名称,但是在验证错误时,原始名称属性显示。

是否可以动态添加翻译?这样我可以在调用humanized_accessor-class-method时为字段的人性化版本添加翻译,从yml文件中获取原始翻译字符串,而不是将它们(具有相同的值)写入yml -file,只是为了让DRY更多。

2 个答案:

答案 0 :(得分:1)

您可能想查看globalize3 gem。你有railscast教程http://railscasts.com/episodes/338-globalize3?view=asciicast

答案 1 :(得分:0)

这取决于I18n gem的内部API没有变化,但可以使用I18n.backend.store_translations

这个人为的例子表明:

I18n.with_locale(:fake_locale) { I18n.t('some_word') }
  => "translation missing: fake_locale.some_word"

I18n.backend.store_translations(:fake_locale, some_word: 'fake translation')

I18n.with_locale(:fake_locale) { I18n.t('some_word') }
  => "fake translation"

重要提示:这只在内存中完成。当您重新部署/重新启动服务器时,需要一些持久性或重新生成机制来防止它们消失。