我想知道HTTP_ACCEPT_LANGUAGE
的字符串是如何确定的。
如果用户具有以下字符串:
"HTTP_ACCEPT_LANGUAGE" => "en-US,en;q=0.9,he;q=0.8"
SideQuestion:获取操作系统语言的HTTP请求是否有任何部分?
我浏览了谷歌,但我无法理解q=n
质量价值,请,请不要复制谷歌或PHP.NET,我也可以搜索和阅读,我会喜欢理解并充分利用http请求的大部分内容。
谢谢, 芽
答案 0 :(得分:1)
字符串由客户端软件确定。客户可以根据需要请求任何语言。服务器没有义务遵守。
可以找到描述字符串格式的规则here。
quality value表示优先级,首先排序更高的值。根据您的示例,回答此请求的服务器应尝试提供英语作为首选,然后是希伯来语。
您可能不需要自己解析这个问题。您可以使用类似locale_accept_from_http()的内容。
答案 1 :(得分:1)
一般来说,Accept-Language
可以使用以下形式之一:
Accept-Language: *
,表示您已准备好接受任何语言。Accept-Language: <language>
,其中<language>
代表语言代码,通常为2个字母。Accept-Language: <language-locale>
,其中<language-locale>
可以被视为<language>
的扩展形式,"en-US,en;q=0.9,he;q=0.8"
。如何确定这些逗号分隔参数(操作系统,浏览器,IP-&gt; geo?)
浏览器从操作系统语言设置中检索默认值。
用户可以从浏览器的设置面板手动设置首选语言。如果设置了多种语言,则其顺序为Accept-Language
中的顺序。
这些参数是什么意思?
它们是<quality>-<language>
对的列表,以;
分隔。
默认质量为1,因此您的Accept-Language
值实际为:
q=1,en-US,en;q=0.9,he;q=0.8,rest of languages...
是否有HTTP请求的任何部分来获取操作系统语言?
没有
我无法理解q = n质量值。
正如所解释的那样。
答案 2 :(得分:1)
将@q的值添加到@Yuankun的答案中,然后查看RFC7231 section-5.3.5(已淘汰RFC 2616)似乎不太正确。
应为<language-range>;<quality>, ...
,以使示例字符串
en,en-US,en-AU;q=0.8,fr;q=0.6,en-GB;q=0.4
最终显示为
en;q=1
en-US;q=1
en-AU;q=0.8
fr;q=0.6
en-GB;q=0.4