【问题标题】:Temporary disable i18n fallback in Rails在 Rails 中临时禁用 i18n 回退
【发布时间】:2011-04-10 14:47:00
【问题描述】:

I18n 后备已加载:

 I18n::Backend::Simple.send(:include, I18n::Backend::Fallbacks)

现在有什么想法可以暂时禁用它吗?我有表单,我想在其中编辑各种语言版本,如果给定的翻译尚不存在,我会通过后备获得默认语言的字段。

【问题讨论】:

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


    【解决方案1】:

    您可以将fallback: true 选项传递给I18n.t,这将阻止I18n 查找其他语言环境(see implementation here)。但它可能不是公共 API 的一部分......

    【讨论】:

    • fallback: false 为我工作
    【解决方案2】:

    您可以在 I18n.translate 调用中传递 :fallback => 'false',但这不是公共 API 的一部分。

    您可能想尝试的另一种方法如下:

    I18n.available_locales.each do
      |al| I18n.fallbacks.merge!({al => [al]})
    end
    

    这基本上将使每个可用语言环境的回退仅包括其自身。所以,如果翻译本身没有找到,那么就没有回退到回退。

    但是,你需要找到一种方法来恢复到默认的回退。

    例如,您可以使用以下语句来做到这一点:

    I18n.available_locales.each do
      |al| I18n.fallbacks.merge!({al => [al, I18n.default_locale]})
    end
    

    【讨论】:

      【解决方案3】:

      如果有人仍然想知道如何做到这一点,您可以随时更改 I18n.fallbacks

      def foo
        I18n.fallbacks[:at] = [:at]
        # do stuff with I18n#t
      ensure
        I18n.fallbacks[:at] = [:at, :de] # or whatever is was before
      end
      

      但不确定这有多安全。

      【讨论】:

        【解决方案4】:

        你在使用全球化吗?

        我对系统字符串使用 I18n 后备,对属性翻译使用 globalize3。我希望系统字符串回退,而不是属性。我只是用一个小猴子补丁禁用了全球化的后备:

        config/initializers/i18n.rb:

        require "i18n/backend/fallbacks" 
        I18n::Backend::Simple.send(:include, I18n::Backend::Fallbacks)
        
        # monkey patch globalize3 to not use fallbacks
        module Globalize
          def self.fallbacks?
            false
          end
        end
        

        【讨论】:

          猜你喜欢
          • 2011-04-05
          • 2018-06-14
          • 1970-01-01
          • 1970-01-01
          • 2011-01-09
          • 2012-09-18
          • 1970-01-01
          • 1970-01-01
          • 2017-07-19
          相关资源
          最近更新 更多