ruby-on-rails – 动态加载从gem到磁盘引擎的I18n转换

我创建了一个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应用程序控制器或视图中执行#store_dynamic_translations,它就可以运行.有没有办法在app启动时设置它?

编辑:我已经设置了example repository which contains the current setup.

>一个Gem,它动态地将翻译存储到I18n后端.
>一个加载gem的Rails引擎,应该可以使用它的翻译

the test in question中取消注释MyI18n :: Translations.store_dynamic_translations指令使测试通过.但我觉得应该可以在engine initializer内完成吗?

根据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

转载注明原文:ruby-on-rails – 动态加载从gem到磁盘引擎的I18n转换 - 代码日志