一尘不染

用于检测浏览器语言偏好的JavaScript

javascript

我一直在尝试使用JavaScript检测浏览器的语言偏好。

如果我在中的IE中设置了浏览器语言Tools>Internet Options>General>Languages,如何使用JavaScript读取此值?

Firefox也有同样的问题。我无法检测到tools>options>content>languages使用的设置navigator.language

使用 navigator.userLanguage
,它通过Start>ControlPanel>RegionalandLanguageOptions>Regional Options选项卡检测完成的设置

我已经测试过navigator.browserLanguagenavigator.systemLanguage但均未返回第一个设置的值(Tools>InternetOptions>General>Languages


阅读 444

收藏
2020-04-23

共1个答案

一尘不染

我认为这里的主要问题是浏览器设置实际上不会影响navigator.language通过javascript获取的属性。

它们确实会影响HTTP’Accept-
Language’标头,但看来此值根本无法通过javascript使用。(可能是为什么@anddoutoi指出他找不到不涉及服务器端的引用)。

(注意:这是一种hack,仅当您没有可用的后端可以使用时才能使用。通常,除非您的浏览器具有很高的访问权限,否则您不应在页面中调用第三方托管的javascript文件对主机的信任级别。)

我打算将其永久保留在那里,请随时在您的代码中使用它。

这是一些使用jQuery的示例代码

$.ajax({ 
    url: "http://ajaxhttpheaders.appspot.com", 
    dataType: 'jsonp', 
    success: function(headers) {
        language = headers['Accept-Language'];
        nowDoSomethingWithIt(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()
2020-04-23