Rails I8n:当请求的语言环境(来自HTTP标头)不可用时使用默认语言环境?

时间:2010-02-26 15:18:16

标签: ruby-on-rails ruby internationalization

嗨:在我的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

2 个答案:

答案 0 :(得分:4)

我现在所做的是(随意发表评论并发布更多红宝石版本; 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。

答案 1 :(得分:0)

在Rails 2.3中,您可以在模块available_locales中使用I18n方法(从后端调用相同的方法,如I18n::Backend::Simple.available_locales)。

如果你还在2.2,你自己要实现它。看到: http://guides.rubyonrails.org/i18n.html