我想知道,有没有办法从PHP / javascript获取当前的客户端操作系统语言。我尝试使用$_SERVER["HTTP_ACCEPT_LANGUAGE"]
,但有时会得到错误的语言。
例如,在Google Chrome中:
使用$_SERVER["HTTP_ACCEPT_LANGUAGE"]
我得到了这个结果:
HTTP_ACCEPT_LANGUAGE: zh,en-US;q=0.8,en;q=0.6
它说“zh”是我的主要语言。
有没有其他方法可以获得客户端操作系统语言?因为这是我想要的,而不是浏览器语言设置。感谢
答案 0 :(得分:4)
尝试此功能
function getUserLanguage() {
$langs = array();
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);
}
}
//extract most important (first)
foreach ($langs as $lang => $val) { break; }
//if complex language simplify it
if (stristr($lang,"-")) {$tmp = explode("-",$lang); $lang = $tmp[0]; }
return $lang;
}
答案 1 :(得分:2)
在IE上通过javascript发送吗?
navigator.browserLanguage
:浏览器语言navigator.systemLanguage
:Windows系统语言navigator.userLanguage
:Windows用户特定语言感谢:Is there anyway to detect OS language using javascript?
除了你提到的那个获得客户端操作系统的语言之外,这是唯一的方法,PHP由服务器运行,没有别的。
构建PHP排序功能。
HTTP_ACCEPT_LANGUAGE: zh,en-US;q=0.8,en;q=0.6
zh
和en-US
共享相同的q=
值,这意味着您可以对最高语言值进行排序,如果两种语言的质量相同,则默认为en-US。
注意到@Quentin在编辑前一分钟在评论部分提到了这一点,干得好!先生!
样机:
$languages = $_SERVER['HTTP_ACCEPT_LANGUAGE'];
$default = 'en-US';
/*
* magic split and structure the language into a array sorted by quality
*
* $languages_sorted_by_quality = array(0.8 => ('zh', 'en-US'));
*/
$top_languages = max($languages_sorted_by_quality);
if (isset($top_languages[$default])) {
$language = $default;
else
$language = $top_languages[0];
答案 2 :(得分:0)