是否有可能使轨道i18n locales相互回落?

时间:2011-10-29 23:53:41

标签: 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 }

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

5 个答案:

答案 0 :(得分: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/

答案 1 :(得分:1)

如果您传递一组区域设置,则会将其设置为所有区域设置的默认回退。

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

不幸的是,我还没有找到一种方法来设置两个区域设置以相互回落。

答案 2 :(得分: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

答案 3 :(得分:0)

这似乎已改为:

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

来自官方文档: https://github.com/globalize/globalize#fallback-locales-to-each-other

答案 4 :(得分:0)

在最新的i18n gem(0.7.0)中,我发现有必要定义这样的回退语言环境(在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