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

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

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

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

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

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


当前回答

如果你使用的是ASP . net MVC,你想从JavaScript中获得accept - languages头,那么这里有一个不涉及任何异步请求的变通例子。

在你的.cshtml文件中,将头部安全地存储在div的data- attribute中:

<div data-languages="@Json.Encode(HttpContext.Current.Request.UserLanguages)"></div>

然后你的JavaScript代码可以访问这些信息,例如使用JQuery:

<script type="text/javascript">
$('[data-languages]').each(function () {
    var languages = $(this).data("languages");
    for (var i = 0; i < languages.length; i++) {
        var regex = /[-;]/;
        console.log(languages[i].split(regex)[0]);
    }
});
</script>

当然,您也可以像其他人提到的那样,对其他服务器技术使用类似的方法。

其他回答

如果你使用的是ASP . net MVC,你想从JavaScript中获得accept - languages头,那么这里有一个不涉及任何异步请求的变通例子。

在你的.cshtml文件中,将头部安全地存储在div的data- attribute中:

<div data-languages="@Json.Encode(HttpContext.Current.Request.UserLanguages)"></div>

然后你的JavaScript代码可以访问这些信息,例如使用JQuery:

<script type="text/javascript">
$('[data-languages]').each(function () {
    var languages = $(this).data("languages");
    for (var i = 0; i < languages.length; i++) {
        var regex = /[-;]/;
        console.log(languages[i].split(regex)[0]);
    }
});
</script>

当然,您也可以像其他人提到的那样,对其他服务器技术使用类似的方法。

I came across this piece of code to detect browser's language in Angular Translate module, which you can find the source here. I slightly modified the code by replacing angular.isArray with Array.isArray to make it independent of Angular library. var getFirstBrowserLanguage = function () { var nav = window.navigator, browserLanguagePropertyKeys = ['language', 'browserLanguage', 'systemLanguage', 'userLanguage'], i, language; // support for HTML 5.1 "navigator.languages" if (Array.isArray(nav.languages)) { for (i = 0; i < nav.languages.length; i++) { language = nav.languages[i]; if (language && language.length) { return language; } } } // support for other well known properties in browsers for (i = 0; i < browserLanguagePropertyKeys.length; i++) { language = nav[browserLanguagePropertyKeys[i]]; if (language && language.length) { return language; } } return null; }; console.log(getFirstBrowserLanguage());

基于这里的答案,在JavaScript中访问网页的HTTP头文件,我构建了以下脚本来获得浏览器语言:

var req = new XMLHttpRequest();
req.open('GET', document.location, false);
req.send(null);
var headers = req.getAllResponseHeaders().toLowerCase();
var contentLanguage = headers.match( /^content-language\:(.*)$/gm );
if(contentLanguage[0]) {
    return contentLanguage[0].split(":")[1].trim().toUpperCase();
}

我刚想到这个。它结合了较新的JS解构语法和一些标准操作来检索语言和区域设置。

var [lang, locale] = (
    (
        (
            navigator.userLanguage || navigator.language
        ).replace(
            '-', '_'
        )
    ).toLowerCase()
).split('_');

希望它能帮助到别人

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。