我正在使用带有 Globalize3 0.2.0.beta4 的 Rails 3
理想情况下,我需要 :fr 回退到 :en ,反之亦然。
在某些情况下,只有法语翻译可用,即使语言环境是 :en,我也需要显示它。
我试过了
config.i18n.fallbacks = { :fr => :en, :en => :fr }
但不出所料,它会导致堆栈级别太深的错误。
我正在使用带有 Globalize3 0.2.0.beta4 的 Rails 3
理想情况下,我需要 :fr 回退到 :en ,反之亦然。
在某些情况下,只有法语翻译可用,即使语言环境是 :en,我也需要显示它。
我试过了
config.i18n.fallbacks = { :fr => :en, :en => :fr }
但不出所料,它会导致堆栈级别太深的错误。
我正在改变我的答案。
要启用回退,请将以下内容添加到您的 environment.rb 文件中:
#support for locale fallbacks
require "i18n/backend/fallbacks"
I18n::Backend::Simple.send(:include, I18n::Backend::Fallbacks)
然后,您可以像尝试那样启用循环回退,例如:
config.i18n.fallbacks = {'en' => 'fr', 'fr' => 'en'}
在这种情况下,如果 en 语言环境中缺少某些内容,它将检查 fr 语言环境,然后反过来。运行这个我没有得到任何错误。
资料来源:http ://batsov.com/articles/2012/09/12/setting-up-fallback-locale-s-in-rails-3/
最后我猴子修补了 Globalize3。不是很好,因为每当站点需要新的语言环境时我都必须更新补丁,但是嘿,它起作用了。
module Globalize
class << self
def fallbacks(locale = self.locale)
case locale
when :en then [:en, :fr]
when :fr then [:fr, :en]
end
end
end
end
如果您传递一组语言环境,它们将被设置为所有语言环境的默认后备。
config.i18n.fallbacks = [:en, :fr]
不幸的是,我还没有找到一种方法来设置两个语言环境来相互回退。
这似乎已经变成了这样:
Globalize.fallbacks = {:en => [:en, :fr], :fr => [:fr, :en]}
从官方文档获得: https ://github.com/globalize/globalize#fallback-locales-to-each-other
在最新的 i18n gem (0.7.0) 中,我发现有必要定义这样的后备语言环境(in config/application.rb
):
# Custom I18n fallbacks
config.after_initialize do
I18n.fallbacks = I18n::Locale::Fallbacks.new(at: :"de-DE", ch: :"de-DE", gb: :"en-US")
end
您还需要config.i18n.fallbacks = true
在所有config/environments/*.rb
文件中进行设置。