我认为这里的主要问题是浏览器设置实际上并不影响navigator.language
通过 javascript 获取的属性。
它们确实影响的是 HTTP 'Accept-Language' 标头,但该值似乎根本无法通过 javascript 获得。(可能是为什么@anddoutoi 说他找不到不涉及服务器端的参考。)
我编写了一个解决方法:我在http://ajaxhttpheaders.appspot.com上编写了一个谷歌应用引擎脚本,它将通过 JSONP 返回 HTTP 请求标头。
(注意:如果您没有可用的后端可以为您执行此操作,则仅可使用此技巧。通常,除非您有非常高的对主机的信任程度。)
我打算将它永久保留在那里,因此请随时在您的代码中使用它。
这是一些示例代码(在 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