3

我想知道,有什么方法可以从 PHP/javascript 获取当前的客户端操作系统语言。我尝试使用$_SERVER["HTTP_ACCEPT_LANGUAGE"],但有时会使用错误的语言。例如在谷歌浏览器中:

  1. 我的操作系统:Windows 7
  2. 英语语言

使用$_SERVER["HTTP_ACCEPT_LANGUAGE"]我得到了这个结果:

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

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

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

4

3 回答 3

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;
}
于 2013-05-07T13:28:57.017 回答
2

在 IE 上通过 javascript 发送?

  • navigator.browserLanguage: 浏览器语言
  • navigator.systemLanguage: Windows 系统语言
  • navigator.userLanguage: Windows 用户特定语言

感谢:有没有使用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];
于 2013-05-07T13:19:03.307 回答
0

have your tried http_negotiate_language

于 2013-05-07T13:19:59.510 回答