2010-02-26 49 views
1

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

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 

回答

0

在Rails 2.3您在模块I18n可用available_locales方法(调用从后端同样的方法,像I18n::Backend::Simple.available_locales)。

如果你仍然在2.2你必须自己实现它。请参阅: http://guides.rubyonrails.org/i18n.html

+0

我发现,只是在同一秒;)看到我上面的答案。 – Sney 2010-02-26 15:41:47

4

什么我现在做的是(随意评论和发布更加rubyish版本; 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。