我们的应用程序尝试支持 ES 变体。
为此,我们从 ApplicationController 中的传入请求中捕获 user_preferred_language。
class ApplicationController < ActionController::Base
before_filter :set_i18n_locale_for_unauthenticated
...
def set_i18n_locale_for_unauthenticated
users_preferred_languages = request.user_preferred_languages
... # Do something with the array of loacle codes
end
end
通常这可以正常工作,并且区域设置代码数组与客户端浏览器中设置的首选项相匹配。例如检查user_preferred_languages
数组可能看起来像
[
[0] "pt-BR",
[1] "pt",
[2] "en-GB",
[3] "en",
[4] "en-US",
[5] "es",
[6] "es-419"
]
但是,如果es-419
(Lantin America Spanish) 区域设置在除最后一个位置之外的任何位置,那么user_preferred_languages
将返回任何空数组?
我猜这是 Rails(或 Rack)的问题,或者可能是两个问题:
解析器没有正确处理这种
es-419
情况,因为它不符合典型xx-YY
格式。不知何故,当它是列表中最后一个首选语言时,它设法通过了。
我没有试图挖掘出它的来源,因为我希望有人之前碰到过它并可以建议如何最好地处理这个问题。或者也许有一个不支持的原因?
进一步的背景 我使用 Chromium 作为我的浏览器。查看请求标头似乎可以毫无问题地传递语言设置:
Request Headers
Accept:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Encoding:gzip,deflate,sdch
Accept-Language:pt-BR,pt;q=0.8,en-GB;q=0.6,en;q=0.4,en-US;q=0.2,es-419;q=0.2,es;q=0.2
Cache-Control:no-cache
Connection:keep-alive