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

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

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

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

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

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


当前回答

Var语言=导航器。语言和导航器。// Chrome / Firefox . languages[0] || 导航器。language || //所有浏览器 navigator.userLanguage;// IE <= 10 console.log(语言);

https://developer.mozilla.org/en-US/docs/Web/API/NavigatorLanguage/languages https://developer.mozilla.org/en-US/docs/Web/API/NavigatorLanguage/language

尝试PWA模板https://github.com/StartPolymer/progressive-web-app-template

其他回答

导航器。用于IE的userLanguage

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

我认为这里的主要问题是浏览器设置实际上并不影响导航器。通过javascript获得的语言属性。

它们所影响的是HTTP 'Accept-Language'报头,但似乎这个值在javascript中根本不可用。(可能是为什么@anddoutoi说他找不到一个不涉及服务器端的参考。)

我已经编写了一个解决方案:我已经在http://ajaxhttpheaders.appspot.com上创建了一个谷歌应用程序引擎脚本,它将通过JSONP返回HTTP请求头。

(注意:这是一个黑客,只有当你没有一个可用的后端,可以为你这样做。一般来说,你不应该在你的页面中调用第三方托管的javascript文件,除非你对主机有很高的信任。)

我打算把它永久地留在那里,所以在你的代码中可以自由地使用它。

下面是一些示例代码(使用jQuery),告诉您如何使用它

$.ajax({ 
    url: "http://ajaxhttpheaders.appspot.com", 
    dataType: 'jsonp', 
    success: function(headers) {
        language = headers['Accept-Language'];
        nowDoSomethingWithIt(language);
    }
});

希望有人觉得这有用。

编辑:我在github上写了一个小的jQuery插件,它包装了这个功能:https://github.com/dansingerman/jQuery-Browser-Language

编辑2:以下是在AppEngine上运行的代码(真的非常简单):

class MainPage(webapp.RequestHandler):
    def get(self):
        headers = self.request.headers
        callback = self.request.get('callback')

        if callback:
          self.response.headers['Content-Type'] = 'application/javascript'
          self.response.out.write(callback + "(")
          self.response.out.write(headers)
          self.response.out.write(")")
        else:
          self.response.headers['Content-Type'] = 'text/plain'
          self.response.out.write("I need a callback=")

application = webapp.WSGIApplication(
                                     [('/', MainPage)],
                                     debug=False)

def main():
    run_wsgi_app(application)

if __name__ == "__main__":
    main()

Edit3:在这里开放应用引擎代码:https://github.com/dansingerman/app-engine-headers

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

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

希望它能帮助到别人

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方法:

var language = window.navigator.userLanguage || window.navigator.language;//returns value like 'en-us'

如果你正在使用jQuery。I18n插件,你可以使用:

jQuery.i18n.browserLang();//returns value like '"en-US"'