我遇到了解析HTTP_ACCEPT_LANGUAGE的脚本:http://www.thefutureoftheweb.com/blog/use-accept-language-header
此脚本返回包含可接受语言的ORDERED数组:
阵 ( [it] => 1 [ar] => 0.8 [ja] => 0.6 [cn] => 0.4 [de] => 0.2 )
现在,我想创建一个包含可用语言的数组:
$ av_lang = array('en','fr','de','it'); (无序数组)
然后我想遍历第一个数组并获取第二个数组中的第一个键。
例如,它从第一个数组中取出'en'并检查第二个数组中是否存在,如果不存在,则转到下一个键'ar'并检查它。如果没有,则返回一个默认的lang,如'en'。
最后,我想在$ av_lang中获得一个可用的lang。
感谢。
答案 0 :(得分:8)
我个人使用这样的东西:
$lang = $_SERVER['HTTP_ACCEPT_LANGUAGE'];
preg_match_all('/(\W|^)([a-z]{2})([^a-z]|$)/six', $lang, $m, PREG_PATTERN_ORDER);
$user_langs = $m[2];
你得到的是一系列双字母语言,然后你可以遍历它们并找到你支持的语言,即
$supported_langs = array('en', 'fr', 'de', 'it');
$user_lang = 'en'; // Default
foreach($user_langs AS $tmp){
if(in_array($tmp, $supported_langs)){
$user_lang = $tmp;
break;
}
}
此时$user_lang
现在将包含标题中支持的第一种语言(或默认值)
答案 1 :(得分:6)
尝试这样的事情:
$lang = array('it' => 1, 'ar' => 0.8, 'ja' => 0.6, 'cn' => 0.4, 'de' => 0.2);
$preferred = array('en', 'ja');
$intersect = array_values(array_intersect(array_keys($lang), $preferred));
if (isset($intersect[0])) {
echo $intersect[0]; // returns ja
}