【问题标题】:Temporary disable i18n fallback in Rails在 Rails 中临时禁用 i18n 回退
【发布时间】:2011-04-10 14:47:00
【问题描述】:
I18n 后备已加载:
I18n::Backend::Simple.send(:include, I18n::Backend::Fallbacks)
现在有什么想法可以暂时禁用它吗?我有表单,我想在其中编辑各种语言版本,如果给定的翻译尚不存在,我会通过后备获得默认语言的字段。
【问题讨论】:
标签:
ruby-on-rails
internationalization
ruby-on-rails-3
globalize2
【解决方案2】:
您可以在 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
【解决方案3】:
如果有人仍然想知道如何做到这一点,您可以随时更改 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
但不确定这有多安全。
【解决方案4】:
你在使用全球化吗?
我对系统字符串使用 I18n 后备,对属性翻译使用 globalize3。我希望系统字符串回退,而不是属性。我只是用一个小猴子补丁禁用了全球化的后备:
config/initializers/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