8

我正在使用带有 Globalize3 0.2.0.beta4 的 Rails 3

理想情况下,我需要 :fr 回退到 :en ,反之亦然。

在某些情况下,只有法语翻译可用,即使语言环境是 :en,我也需要显示它。

我试过了

config.i18n.fallbacks = { :fr => :en, :en => :fr }

但不出所料,它会导致堆栈级别太深的错误。

4

5 回答 5

5

我正在改变我的答案。

要启用回退,请将以下内容添加到您的 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/

于 2012-12-18T03:53:44.280 回答
1

最后我猴子修补了 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
于 2011-11-10T19:01:37.797 回答
1

如果您传递一组语言环境,它们将被设置为所有语言环境的默认后备。

config.i18n.fallbacks = [:en, :fr]

不幸的是,我还没有找到一种方法来设置两个语言环境来相互回退。

于 2011-11-10T16:27:27.540 回答
0

这似乎已经变成了这样:

Globalize.fallbacks = {:en => [:en, :fr], :fr => [:fr, :en]}

从官方文档获得: https ://github.com/globalize/globalize#fallback-locales-to-each-other

于 2013-11-19T11:28:25.277 回答
0

在最新的 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文件中进行设置。

于 2015-02-06T16:40:22.197 回答