一直在尝试使用JavaScript来检测浏览器语言首选项。
如果我在IE中设置浏览器语言,Tools>Internet Options>General>Languages
我该如何使用JavaScript读取这个值?
Firefox的同样的问题。我无法检测到tools>options>content>languages使用的设置navigator.language。
使用 navigator.userLanguage 它会检测通过Start>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控制面板 - 区域选项而不是浏览器语言中设置的语言,但是您可以假设使用窗口区域设置为法国的机器的用户可能是法国用户。
navigator.language 是FireFox和所有其他浏览器。
一些语言代码:'it'=意大利,'en-US'=美国英文等。
正如rcoup和WebMacheter在下面评论中所指出的那样,这个解决方法不会让用户在IE浏览器以外的浏览器中查看网站时,在英文方言之间进行区分。
window.navigator.language(Chrome / FF / Safari)总是返回浏览器语言,而不是浏览器的首选语言,但是:“英语用户(gb,au,nz等)拥有Firefox / Chrome / Safari的en-us版本是很常见的。因此,即使用户首选语言window.navigator.language仍然会返回。en-USen-GB
认为这里的主要问题是,浏览器设置实际上并不影响navigator.language通过JavaScript获得的属性。
他们的影响是HTTP'Accept-Language'标题,但是看起来这个值根本不可用。
我已经编写了一个解决方法:我在http://ajaxhttpheaders.appspot.com上打开了一个Google应用程序引擎脚本,它将通过JSONP返回HTTP请求标头。
(注意:这只是一个黑客,如果你没有可用的后台可用,一般情况下,你不应该打电话给页面中的第三方托管的JavaScript文件,除非你有很高的对主机的信任程度。)
我打算永远把它留在那里,所以随时在你的代码中使用它。
以下是一些示例代码(在jQuery中),以便您如何使用它
$.ajax({
url: "http://ajaxhttpheaders.appspot.com",
dataType: 'jsonp',
success: function(headers) {
language = headers['Accept-Language'];
nowDoSomethingWithIt(language);
}
});
希望有人认为这有用。
编辑:我写了一个小的jQuery插件github包装这个功能: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()