我认为这里的主要问题是浏览器设置实际上并不影响通过javascript获得的navigator.language
属性.
它们影响的是HTTP"Accept Language"头,但这个值似乎根本无法通过javascript获得.(可能是@anddoutoi说他找不到不涉及服务器端的引用的原因.)
我已经编写了一个变通方法:我已经编写了一个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);
}
});
希望有人觉得这个有用.
编辑:我在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()
编辑3:我在这里开源了应用程序引擎代码:https://github.com/dansingerman/app-engine-headers