我有一个I18n前面的模块:
require 'rails-i18n'
module I18nExtension
def translate_localization_format(locale, object, format, options)
puts __method__
...
end
end
I18n::Backend::Base.prepend(I18nExtension)
这在开发和控制台中按预期工作:
irb(main):002:0>I18n.l Time.now
translate_localization_format
=> "October 30, 2018 16:01 PDT"
它居住在lib/i18n_ext
中。
但是,在测试环境中,扩展方法未调用:
describe I18n do
specify "success" do
puts I18n.l Time.now
end
end
此代码不会 不 打印方法或调用I18nExtension#translate_localization_format
。
但是,在这两种环境中都将模块置于前面。
irb(main):002:0> I18n::Backend::Base.ancestors.inspect
=> "[I18nExtension, I18n::Backend::Base, I18n::Backend::Transliterator]"
测试环境:
[I18nExtension, I18n::Backend::Base, I18n::Backend::Transliterator]
那么,扩展名怎么可能是前缀但未被调用?开发和测试环境有什么区别?
导轨4.2.10
rails-i18n 4.0.9
rspec 3.7.0