PHP获取当前的客户端OS语言

时间:2013-05-07 13:15:13

标签: php language-detection

我想知道,有没有办法从PHP / javascript获取当前的客户端操作系统语言。我尝试使用$_SERVER["HTTP_ACCEPT_LANGUAGE"],但有时会得到错误的语言。 例如,在Google Chrome中:

  1. 我的操作系统:Windows 7
  2. 语言:英语
  3. 使用$_SERVER["HTTP_ACCEPT_LANGUAGE"]我得到了这个结果:

    HTTP_ACCEPT_LANGUAGE: zh,en-US;q=0.8,en;q=0.6
    

    它说“zh”是我的主要语言。

    有没有其他方法可以获得客户端操作系统语言?因为这是我想要的,而不是浏览器语言设置。感谢

3 个答案:

答案 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

zhen-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)