我创建了一个gem(TranslationsGem),我在多个项目(引擎和Rails应用程序)中使用它。这个gem设置了几个加载到I18n后端的哈希值。
方法#store_dynamic_translations
设置加载到I18n后端的几个哈希值。它基本上是这样的:
I18n.backend.store_translations(:en, { test: { property: 'value' } })
我的测试确认方法和翻译加载正常。但我不能让它在主机引擎和Rails应用程序中工作。
在我的测试环境中,我必须在test_helper
中执行该方法,以确保正确加载翻译。在测试环境之外,我似乎无法使其正常工作。我可以验证该方法是否已执行,但翻译未加载。
我已经尝试了好几个小时,比如在Engine initializer中执行方法并使用ActiveSupport挂钩。在主机Rails应用程序中,我尝试在初始化程序中执行#store_dynamic_translations
,但无济于事。
奇怪的是,如果我在我的Rails app控制器或视图中执行#store_dynamic_translations
,它就可以了。有没有办法在app启动时设置它?
编辑:我已经设置了example repository which contains the current setup。
一个动态存储翻译到I18n后端的Gem。
加载gem并且应该有其翻译的Rails引擎
在the test in question取消注释MyI18n::Translations.store_dynamic_translations
指令使测试通过。但我认为应该可以在engine initializer范围内做到吗?
答案 0 :(得分:0)
根据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