在我的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.
答案 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)