我尝试测试Rails插件,以确保在启用或未启用fallbacks
的情况下执行正确的操作。在我的虚拟应用程序配置中,我有:
module Dummy
class Application < Rails::Application
config.i18n.fallbacks = true
end
end
如何将其转回false
进行特定测试?到目前为止,我已经尝试过:
Dummy::Application.config.i18n.fallbacks = false
Dummy::Application.configure do |app|
app.config.i18n.fallbacks = false
end
Rails.application.config.i18n.fallbacks = false
一切都无济于事。
答案 0 :(得分:2)
这是一个有趣的问题,实际上一旦应用程序在开始时初始化,您就无法更改i18n配置,因为它已经记录了这些codes:
# Setup i18n configuration.
def self.initialize_i18n(app)
return if @i18n_inited
...
@i18n_inited = true
end
此line
设置了I18n.fallbacks
I18n.fallbacks = I18n::Locale::Fallbacks.new(*args)
如果您将callbacks
指定为true,则I18n.fallbacks
的值为
[1] pry(main)> I18n.fallbacks
=> {}
[2] pry(main)> I18n.fallbacks.class
=> I18n::Locale::Fallbacks
此way中使用了I18n.fallbacks
:
locales.concat(I18n.fallbacks[I18n.locale]) if I18n.respond_to? :fallbacks
只要I18n.respond_to? :fallbacks
,该应用就会始终启用后备功能。
该方法在I18n中定义为here:
def fallbacks
@@fallbacks ||= I18n::Locale::Fallbacks.new
end
要关闭后备功能,唯一的方法是让I18n.respond_to? :fallbacks
返回false
。
你走了:
class << I18n
remove_method :fallbacks
end