将 gem 中的 I18n 翻译动态加载到 Rails 引擎中
Dynamically loading I18n translations from gem into Rails Engine
我创建了一个 gem(翻译Gem),我在多个项目(一个引擎和一个 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
,它会起作用。有什么方法可以在应用程序启动时进行设置吗?
编辑:我设置了 example repository which contains the current setup。
A Gem 将翻译动态存储到 I18n 后端。
一个 Rails 引擎加载 gem 并且应该有它的翻译可用
我觉得在the test in question uncommenting the MyI18n::Translations.store_dynamic_translations
directive makes the test pass. But it should be possible to do from within an 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
我创建了一个 gem(翻译Gem),我在多个项目(一个引擎和一个 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
,它会起作用。有什么方法可以在应用程序启动时进行设置吗?
编辑:我设置了 example repository which contains the current setup。
A Gem 将翻译动态存储到 I18n 后端。
一个 Rails 引擎加载 gem 并且应该有它的翻译可用
我觉得在the test in question uncommenting the MyI18n::Translations.store_dynamic_translations
directive makes the test pass. But it should be possible to do from within an 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