【问题标题】:Is it possible to make rails i18n locales fallback to each other?是否可以让 rails i18n 语言环境相互回退?
【发布时间】:2011-12-18 01:15:03
【问题描述】:

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

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

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

我试过了

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

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

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3 internationalization globalization globalize2


    【解决方案1】:

    在最新的 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/environments/*.rb 文件中设置config.i18n.fallbacks = true

    【讨论】:

      【解决方案2】:

      这似乎变成了这样:

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

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

      【讨论】:

        【解决方案3】:

        我正在改变我的答案。

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

        【讨论】:

          【解决方案4】:

          最后我猴子修补了 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
          

          【讨论】:

            【解决方案5】:

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

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

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

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2016-02-22
              • 2014-01-29
              • 1970-01-01
              • 1970-01-01
              • 2019-04-23
              • 1970-01-01
              相关资源
              最近更新 更多