【问题标题】:Rails I8n: Use default locale when the requested locale (from HTTP header) is not available?Rails I8n:当请求的语言环境(来自 HTTP 标头)不可用时使用默认语言环境?
【发布时间】:2010-02-26 15:18:16
【问题描述】:

嗨:在我的 Rails ApplicationController 中,我添加了以下方法(来自 rails 指南文档)以支持基于 http 接受语言头信息的 I8n。有没有办法检查请求的语言环境是否可用,如果没有,请使用 environment.rb 中标记的“英语”默认语言环境?否则,当使用未知语言环境时,我会得到“翻译缺失”。

def set_locale
   logger.debug "* Accept-Language: #{request.env['HTTP_ACCEPT_LANGUAGE']}"
   I18n.locale = extract_locale_from_accept_language_header
   logger.debug "* Locale set to '#{I18n.locale}'"
end  

private

def extract_locale_from_accept_language_header
    request.env['HTTP_ACCEPT_LANGUAGE'].scan(/^[a-z]{2}/).first
end

【问题讨论】:

    标签: ruby-on-rails ruby internationalization


    【解决方案1】:

    我现在所做的是(随时发表评论并发布更红宝石的版本;o)):

    def set_locale
      if (I18n.available_locales.any?{|loc| loc.to_s == extract_locale_from_accept_language_header})
      I18n.locale = extract_locale_from_accept_language_header
      end
    end  
    

    新的区域设置现在仅在可用时设置。我在 environment.rb 中的默认语言环境是 :en。

    【讨论】:

      【解决方案2】:

      在 Rails 2.3 中,您在模块 I18n 中提供了一个 available_locales 方法(从后端调用相同的方法,例如 I18n::Backend::Simple.available_locales)。

      如果您仍在使用 2.2,则必须自己实施。看: http://guides.rubyonrails.org/i18n.html

      【讨论】:

      • 我发现就在同一秒;)请参阅上面的答案。
      猜你喜欢
      • 1970-01-01
      • 2020-04-05
      • 2017-03-20
      • 2016-07-13
      • 2014-03-31
      • 2011-10-29
      • 2016-09-07
      • 2014-03-09
      相关资源
      最近更新 更多