加载 I18n 后备:
I18n::Backend::Simple.send(:include, I18n::Backend::Fallbacks)
现在有什么想法可以暂时禁用它吗?我有表单,我想在其中编辑各种语言版本,如果给定的翻译尚未出现,我将获得默认语言的字段。
加载 I18n 后备:
I18n::Backend::Simple.send(:include, I18n::Backend::Fallbacks)
现在有什么想法可以暂时禁用它吗?我有表单,我想在其中编辑各种语言版本,如果给定的翻译尚未出现,我将获得默认语言的字段。
您可以将fallback: true
选项传递给I18n.t
,这将阻止 I18n 查找其他语言环境(请参阅此处的实现)。但它可能不是公共 API 的一部分......
您可以传递:fallback => 'false'
您的I18n.translate
调用,但这不是公共 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
不知道这有多安全。
你在使用全球化吗?
我为我的系统字符串使用 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