我一直在尝试使用JavaScript检测浏览器语言首选项。
如果我在IE的“工具>Internet选项>常规>语言”中设置浏览器语言,如何使用JavaScript读取此值?
火狐也有同样的问题。我无法检测工具>选项>内容>语言使用导航器.language的设置。
使用导航器。userLanguage,它检测设置通过
打开>ControlPanel>RegionalandLanguageOptions>Regional Options选项卡。
我已经用navigator测试过了。browserLanguage和navigator。systemLanguage但都不返回第一个设置的值(Tools>InternetOptions>General>Languages)
我找到了一个详细讨论这个问题的链接,但这个问题仍然没有答案:(
2014年更新。
现在有一种方法可以使用导航器在Firefox和Chrome中获得Accept-Languages。语言(适用于Chrome >= 32和Firefox >= 32)
另外,导航器。这些年来Firefox的语言反映了最受欢迎的内容语言,而不是UI语言。但是由于这个概念还没有得到其他浏览器的支持,所以它并不是很有用。
所以,尽可能获得最受欢迎的内容语言,并使用UI语言作为后备:
navigator.languages
? navigator.languages[0]
: (navigator.language || navigator.userLanguage)
对于这个问题,DanSingerman有一个很好的解决方案。
该语言的唯一可靠来源是http请求头。
因此,您需要一个服务器端脚本来回复请求报头,或者至少是Accept-Language字段。
这是一个非常简单的Node.js服务器,它应该与DanSingermans的jQuery插件兼容。
var http = require('http');
http.createServer(function (req, res) {
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end(JSON.stringify(req.headers));
}).listen(80,'0.0.0.0');
我有一个黑客,我认为使用很少的代码,是相当可靠的。
把网站的文件放到子目录中。SSL到您的服务器中,并创建到存储文件的子目录的符号链接,该子目录指示您的语言。
就像这样:
ln -s /var/www/yourhtml /var/www/en
ln -s /var/www/yourhtml /var/www/sp
ln -s /var/www/yourhtml /var/www/it
使用您的web服务器读取HTTP_ACCEPT_LANGUAGE并根据它提供的语言值重定向到这些“不同的子目录”。
现在您可以使用Javascript的window.location.href来获取url,并在条件中使用它来可靠地识别首选语言。
url_string = window.location.href;
if (url_string = "http://yoursite.com/it/index.html") {
document.getElementById("page-wrapper").className = "italian";
}
如果您不想依赖外部服务器,并且您有自己的服务器,您可以使用一个简单的PHP脚本来实现与@DanSingerman answer相同的行为。
languageDetector.php:
<?php
$lang = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2);
echo json_encode($lang);
?>
只需从jQuery脚本中更改这几行:
url: "languageDetector.php",
dataType: 'json',
success: function(language) {
nowDoSomethingWithIt(language);
}