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