ric*_*ard 8 ruby ruby-on-rails internationalization i18n-gem
我创建了一个gem(TranslationsGem),我在多个项目(引擎和Rails应用程序)中使用它.这个宝石设置了几个加载到I18n后端的哈希.
一种方法#store_dynamic_translations设置了几个加载到I18n后端的哈希值.它基本上是这样的:
I18n.backend.store_translations(:en, { test: { property: 'value' } })
Run Code Online (Sandbox Code Playgroud)
我的测试确认方法和翻译加载正常.但是我不能让它在主机引擎和Rails应用程序中工作.在我的测试环境中,我必须在my中执行该方法test_helper以确保正确加载转换.在测试环境之外,我似乎无法使其正常工作.我可以验证该方法是否已执行,但未加载转换.
我已经尝试了好几个小时,比如在Engine初始化程序中执行方法并使用ActiveSupport挂钩.在主机Rails应用程序中,我尝试#store_dynamic_translations在初始化程序中执行,但无济于事.
奇怪的是,如果我#store_dynamic_translations在我的Rails应用程序控制器或视图中执行它,它就可以工作.有没有办法在app启动时设置它?
一个Gem,它动态地将翻译存储到I18n后端.
一个Rails引擎加载gem并且应该有它的翻译
在有问题的测试中,取消注释该MyI18n::Translations.store_dynamic_translations指令使测试通过.但我认为应该可以在引擎初始化程序中做到吗?
根据 Emill Kampp 的建议,正确的钩子是after_initialize。我在以下位置指定了这一点engine.rb:
module Blorgh
class Engine < ::Rails::Engine
isolate_namespace Blorgh
config.after_initialize do
MyI18n::Translations.store_dynamic_translations
end
end
end
Run Code Online (Sandbox Code Playgroud)