我一直在尝试使用JavaScript检测浏览器语言首选项。

如果我在IE的“工具>Internet选项>常规>语言”中设置浏览器语言,如何使用JavaScript读取此值?

火狐也有同样的问题。我无法检测工具>选项>内容>语言使用导航器.language的设置。

使用导航器。userLanguage,它检测设置通过 打开>ControlPanel>RegionalandLanguageOptions>Regional Options选项卡。

我已经用navigator测试过了。browserLanguage和navigator。systemLanguage但都不返回第一个设置的值(Tools>InternetOptions>General>Languages)

我找到了一个详细讨论这个问题的链接,但这个问题仍然没有答案:(


当前回答

var language = window.navigator.userLanguage || window.navigator.language;
alert(language); //works IE/SAFARI/CHROME/FF

Window .navigator. userlanguage仅适用于IE,并且它是Windows控制面板-区域选项中设置的语言,而不是浏览器语言,但是你可以假设使用窗口区域设置为法国的机器的用户可能是法国用户。

导航器。语言是火狐和所有其他浏览器。

一些语言代码:'it' =意大利语,'en-US' =英语美国,等等。


正如rcoup和The WebMacheter在下面的评论中指出的那样,当用户使用IE以外的浏览器浏览网站时,这种解决方法不会让你区分英语方言。

window.navigator.language (Chrome/FF/Safari)总是返回浏览器语言,而不是浏览器的首选语言,但是:“对于说英语的人(gb, au, nz等)来说,有一个en-us版本的Firefox/Chrome/Safari是很常见的。”因此,window.navigator.language仍然会返回en-US,即使用户首选的语言是en-GB。

其他回答

Let lang = window.navigator.languages ?window.navigator。[0]: null; || window.navigator.language || window.navigator.browserLanguage || window.navigator.userLanguage; let shortLang = lang; if (shortLang.indexOf('-') !== -1) shortLang = shortLang.split('-')[0]; if (shortLang.indexOf('_') !== -1) shortLang = shortLang.split('_')[0]; console.log(朗,shortLang);

我只需要主组件来满足我的需要,但是您可以轻松地使用完整的字符串。适用于最新的Chrome, Firefox, Safari和IE10+。

I can't find a single reference that state that it's possible without involving the serverside.

MSDN上:

navigator.browserLanguage navigator.systemLanguage navigator.userLanguage

从browserLanguage:

In Microsoft Internet Explorer 4.0 and earlier, the browserLanguage property reflects the language of the installed browser's user interface. For example, if you install a Japanese version of Windows Internet Explorer on an English operating system, browserLanguage would be ja. In Internet Explorer 5 and later, however, the browserLanguage property reflects the language of the operating system regardless of the installed language version of Internet Explorer. However, if Microsoft Windows 2000 MultiLanguage version is installed, the browserLanguage property indicates the language set in the operating system's current menus and dialogs, as found in the Regional Options of the Control Panel. For example, if you install a Japanese version of Internet Explorer 5 on an English (United Kingdom) operating system, browserLanguage would be en-gb. If you install Windows 2000 MultiLanguage version and set the language of the menus and dialogs to French, browserLanguage would be fr, even though you have a Japanese version of Internet Explorer. Note This property does not indicate the language or languages set by the user in Language Preferences, located in the Internet Options dialog box.

此外,它看起来像是browserLanguage被弃用了,因为IE8没有列出它

导航器。用于IE的userLanguage

窗口.导航员.萤火虫/歌剧/safari语言

我想分享我的代码,因为它的工作,它是不同于其他给出的答案。 在这个例子中,如果你说法语(法国,比利时或其他法语语言),你会被重定向到法语页面,否则会重定向到英语页面,这取决于浏览器的配置:

<脚本type = " text / javascript”> 美元(文档)。Ready (function () { var userLang = navigator。||导航语言; if (userLang.startsWith("fr")) { Window.location.href = '../fr/index.html'; } 其他{ Window.location.href = '../en/index.html'; } }); > < /脚本

我有一个黑客,我认为使用很少的代码,是相当可靠的。

把网站的文件放到子目录中。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";
}