9

加载 I18n 后备:

 I18n::Backend::Simple.send(:include, I18n::Backend::Fallbacks)

现在有什么想法可以暂时禁用它吗?我有表单,我想在其中编辑各种语言版本,如果给定的翻译尚未出现,我将获得默认语言的字段。

4

4 回答 4

4

您可以将fallback: true选项传递给I18n.t,这将阻止 I18n 查找其他语言环境(请参阅此处的实现)。但它可能不是公共 API 的一部分......

于 2013-04-02T08:18:27.723 回答
2

您可以传递: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
于 2014-04-29T16:20:22.897 回答
1

如果有人仍然想知道如何做到这一点,您可以随时更改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

不知道这有多安全。

于 2016-04-26T10:03:33.653 回答
0

你在使用全球化吗?

我为我的系统字符串使用 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
于 2011-01-11T18:46:24.760 回答