需要一个有关如何从Accept-Language请求标头中获取首选语言的示例

我需要一个代码示例或库来解析Accept-Language标头并返回我的首选语言。

RFC2616指出:

Accept-Language请求标头字段类似于Accept,但是限制了首选自然语言集作为对请求的响应。语言标签在3.10节中定义。

   Accept-Language = "Accept-Language" ":"

1#( language-range [ ";" "q" "=" qvalue ] )

language-range = ( ( 1*8ALPHA *( "-" 1*8ALPHA ) ) | "*" )

可以给每个语言范围一个相关的质量值,该质量值表示用户对该范围指定的语言的偏好的估计。质量值默认为“ q = 1”。

进一步的阅读显示,太多的“可选”,“应该”,“可能”和其他语音方式阻止了我重新发明轮子-我只想知道用户喜欢哪种语言,任何浏览器都会回答这个问题十亿次。一天。

任何语言的任何代码片段(请使用Lisp和Assembler除外)都将有所帮助。

提前谢谢了!

回答:

试试这个,它在PHP中,但是使用相同的正则表达式,我确定它可以适应任何语言:

$langs = array(); // used to store values

if (isset($_SERVER['HTTP_ACCEPT_LANGUAGE'])) {

// break up string into pieces (languages and q factors)

preg_match_all('/([a-z]{1,8}(-[a-z]{1,8})?)\s*(;\s*q\s*=\s*(1|0\.[0-9]+))?/i', $_SERVER['HTTP_ACCEPT_LANGUAGE'], $lang_parse);

if (count($lang_parse[1])) {

// create a list like "en" => 0.8

$langs = array_combine($lang_parse[1], $lang_parse[4]);

// set default to 1 for any without q factor

foreach ($langs as $lang => $val) {

if ($val === '') $langs[$lang] = 1;

}

// sort list based on value

arsort($langs, SORT_NUMERIC);

}

}

首先产生具有首选语言的排序数组:

Array

(

[en-ca] => 1

[en] => 0.8

[en-us] => 0.6

[de-de] => 0.4

[de] => 0.2

)

从示例ACCEPT_LANGUAGE标题:en-ca,en;q=0.8,en-us;q=0.6,de-de;q=0.4,de;q=0.2

这里的工作示例

以上是 需要一个有关如何从Accept-Language请求标头中获取首选语言的示例 的全部内容, 来源链接: utcz.com/qa/407502.html

回到顶部