的I18n后退时被加载:临时禁用国际化后备
I18n::Backend::Simple.send(:include, I18n::Backend::Fallbacks)
任何想法,现在要暂时禁用它?我有表单,我想在其中编辑各种语言版本,并且如果给定翻译尚未出现,则使用默认语言获取字段。
的I18n后退时被加载:临时禁用国际化后备
I18n::Backend::Simple.send(:include, I18n::Backend::Fallbacks)
任何想法,现在要暂时禁用它?我有表单,我想在其中编辑各种语言版本,并且如果给定翻译尚未出现,则使用默认语言获取字段。
您使用全球化吗?
我为我的系统字符串使用了I18n后备,而我的属性翻译使用了globalize3。我想系统字符串回退,但不是属性。对于我只是全球化时代禁用回退只小猴子补丁:
配置/初始化/ i18n.rb:
require "i18n/backend/fallbacks"
I18n::Backend::Simple.send(:include, I18n::Backend::Fallbacks)
# monkey patch globalize3 to not use fallbacks
module Globalize
def self.fallbacks?
false
end
end
您可以通过fallback: true
选项I18n.t
,这将阻止从的I18n查找其他语言环境(see implementation here)。但它可能不是公共API的一部分...
您可以在I18n.translate
呼叫上传递:fallback => 'false'
,但这不是公共API的一部分。
你可能想尝试另一种方式是:
I18n.available_locales.each do
|al| I18n.fallbacks.merge!({al => [al]})
end
这基本上使后备每个可用区域只包括本身。所以,如果翻译本身没有找到,那么没有后退回落到。
但是,您需要找到恢复默认回退的方法。
你可以做,例如与像声明:
I18n.available_locales.each do
|al| I18n.fallbacks.merge!({al => [al, I18n.default_locale]})
end
是否有人仍然不知道如何做到这一点,你可以在飞行中改变I18n.fallbacks
:
def foo
I18n.fallbacks[:at] = [:at]
# do stuff with I18n#t
ensure
I18n.fallbacks[:at] = [:at, :de] # or whatever is was before
end
不知道尽管如此安全。