I18n locale无视后备

我问过一个关于区域设置的问题 。 我正试图将各种挪威语言的后备设置为挪威语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&no的浏览器,这不起作用 – 它会回退到以下的默认语言环境:en。 这是请求标头:

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

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

我在这个过程中缺少什么?

您需要根据浏览器设置设置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(/^[az]{2}/).first end 

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