如何在Rails中使用自定义值覆盖区域设置值?

时间:2011-09-26 19:07:26

标签: ruby-on-rails locale

在我的en.yml语言环境文件(config / locales / en.yml)中,我有

en:
  settings:
    updated: 'Your settings have been updated.'

有时,我想覆盖settings.updated with other text但仍然使用en locale。

我尝试过以下操作,但是setup.updated没有被覆盖:

locale_overrides = {"settings"=>{"updated"=>"override text"}}
I18n.backend.store_translations(I18n.locale, {"settings"=>{"updated"=>"override text"}})

p locale_overrides['settings']['updated']
p I18n.t('settings.updated')

assert I18n.t('settings.updated') == locale_overrides['settings']['updated']

以下打印到控制台:

"override text"
"Your settings have been updated."

任何想法我做错了什么或如何正确覆盖区域设置?

更新

看起来这种情况正在发生,因为正如文档所述,

The backend will lazy-load these translations when a translation
is looked up for the first time.

1 个答案:

答案 0 :(得分:0)

我最终使用KeyValue后端使用Chaining:

key_value_i18n_backend = I18n::Backend::KeyValue.new(locale_overrides_hash)
I18n.backend = I18n::Backend::Chain.new(key_value_i18n_backend, I18n.backend)