I18n locale无视后备

时间:2015-02-04 17:54:06

标签: ruby-on-rails rails-i18n

我问previous question regarding locale-setting。我试图将各种挪威语言的后备设置为挪威语Bokmal(:nb)。期望的行为是,如果浏览器传递nn或no作为区域设置请求,则I18n.locale将设置为:nn或:no,然后在没有这些区域设置的翻译的情况下,:nb将被提供给浏览器

根据我上一个问题的答案,我在我的应用程序初始化程序中有这一行:

  config.i18n.default_locale    = :en
  config.i18n.fallbacks = {:nn => [:nb], :no => [:nb]}

在rails控制台中,这给了我以下结果:

> I18n.fallbacks
  => {:en=>[:en]} 

> I18n.fallbacks[:nn]
  => [:nn, :nb, :en] 

> I18n.fallbacks[:no]
  => [:no, :nb, :en] 

使用只有nn&的浏览器在语言列表中没有,这不起作用 - 它会回退到以下的默认语言环境:en。这是请求标题:

Accept-Language: "nn,no;q=0.5"

如果我将:nb添加到浏览器语言堆栈,我正确地提供了挪威语内容。

这个过程中是否有我遗漏的东西?

1 个答案:

答案 0 :(得分:0)

您需要根据浏览器设置设置I18n.locale

def set_locale
  I18n.locale = extract_locale_from_accept_language_header
end

private

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

取自:http://guides.rubyonrails.org/i18n.html#setting-the-locale-from-the-client-supplied-information