Ruby on rails 是否有可能使rails i18n区域设置相互回退?

Ruby on rails 是否有可能使rails i18n区域设置相互回退?,ruby-on-rails,ruby-on-rails-3,internationalization,globalization,globalize2,Ruby On Rails,Ruby On Rails 3,Internationalization,Globalization,Globalize2,我正在使用Rails 3和Globalize3 0.2.0.beta4 理想情况下,我需要:fr回退到:en,反之亦然 有些情况下,只有法语翻译可用,即使语言环境为:en,我也需要显示它 我试过了 config.i18n.fallbacks = { :fr => :en, :en => :fr } 但毫不奇怪,它会导致堆栈级别的错误太深。如果您传递一个区域设置数组,它们将被设置为所有区域设置的默认回退 config.i18n.fallbacks = [:en, :fr] 不幸的是

我正在使用Rails 3和Globalize3 0.2.0.beta4

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

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

我试过了

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

但毫不奇怪,它会导致堆栈级别的错误太深。

如果您传递一个区域设置数组,它们将被设置为所有区域设置的默认回退

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

不幸的是,我还没有找到一种方法,只设置两个区域设置,以便相互依赖。

最后我用monkey修补了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
模块全球化

同学们我正在改变我的答案

要启用回退,请将以下内容添加到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语言环境,然后反过来检查。运行此命令时,我没有收到任何错误


来源:

这似乎已经改变为:

Globalize.fallbacks = {:en => [:en, :fr], :fr => [:fr, :en]}
从官方文件中获得:

在最新的i18n gem(0.7.0)中,我发现有必要这样定义后备区域设置(在
config/application.rb
中):

您还需要在所有
config/environments/*.rb
文件中设置
config.i18n.fallbacks=true

# Custom I18n fallbacks
config.after_initialize do
  I18n.fallbacks = I18n::Locale::Fallbacks.new(at: :"de-DE", ch: :"de-DE", gb: :"en-US")
end