我一直在try 使用JavaScript检测浏览器语言偏好.

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

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

使用navigator.userLanguage时,它会检测通过以下方式完成的设置 Start>ControlPanel>RegionalandLanguageOptions>Regional Options表.

我已经用navigator.browserLanguagenavigator.systemLanguage进行了测试,但都没有返回第一个设置(Tools>InternetOptions>General>Languages)的值

我找到了一个详细讨论这个问题的link,但这个问题仍然没有回答:

推荐答案

我认为这里的主要问题是浏览器设置实际上并不影响通过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

Javascript相关问答推荐

Angular 拦截器错误处理删除方法问题

如何使用React渲染器放置根dis?

积分计算和 colored颜色 判断错误

如何用显示网格平滑地将元素从一个地方移动到另一个地方?

React Code不在装载上渲染数据,但在渲染上工作

Rehype将hashtag呈现为URL

在网页上添加谷歌亵渎词

将现场录音发送到后端

在grafana情节,避免冲突的情节和传说

如何从html元素创建树 struct ?

在Java中寻找三次Bezier曲线上的点及其Angular

变量在导入到Vite中的另一个js文件时成为常量.

如何在HTMX提示符中设置默认值?

触发异步函数后不能显示数据

如何在一个对象Java脚本中获取不同键的重复值?

在SuperBase JS客户端中寻址JSON数据

用另一个带有类名的div包装元素

我不知道如何纠正这一点.

我的NavLink活动类在REACT-ROUTER-V6中出现问题

脚本语法错误只是一个字符串,而不是一个对象?