8

我创建了一个 gem (TranslationsGem),我在多个项目(一个引擎和一个 Rails 应用程序)中使用它。这个 gem 设置了几个哈希值,这些哈希值被加载到 I18n 后端。

一个方法#store_dynamic_translations设置了几个哈希值,这些哈希值被加载到 I18n 后端。它基本上是这样工作的:

I18n.backend.store_translations(:en, { test: { property: 'value' } })

我的测试确认方法和翻译加载正常。但是,我无法让它在主机引擎和 Rails 应用程序中工作。在我的测试环境中,我必须执行我的方法test_helper以确保正确加载翻译。在测试环境之外,我似乎无法让它正常工作。我可以验证该方法是否已执行,但未加载翻译。

我已经尝试了好几个小时,比如在引擎初始化程序中执行方法和使用 ActiveSupport 钩子。在主机 Rails 应用程序中,我尝试#store_dynamic_translations在初始化程序中执行,但无济于事。

奇怪的是,如果我#store_dynamic_translations在我的 Rails 应用程序控制器或视图中执行它,它就可以工作。有没有办法在应用程序启动时进行设置?


编辑:我已经设置了一个包含当前设置的示例存储库

  1. 将翻译动态存储到 I18n 后端的 Gem。

  2. 一个 Rails 引擎,它加载 gem 并且应该有它的翻译可用

有问题的测试中,取消注释MyI18n::Translations.store_dynamic_translations指令使测试通过。但是我认为应该可以在引擎初始化程序中进行操作?

4

1 回答 1

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
于 2016-07-07T14:38:50.510 回答