如何使用javascript获取浏览器当前的语言环境首选项?

IT技术 javascript internet-explorer firefox google-chrome culture
2021-02-05 02:27:17

有谁知道如何使用 javascript 从 Firefox 和 Google Chrome 获取浏览器文化?注意:这是一个 asp.net 3.5 Web 应用程序。

要求是尝试根据浏览器文化设置应用程序的显示文化。我发现其他浏览器的信息很少,但它们似乎不起作用。

我可以使用以下代码片段在 IE 中获取它:

var browserCulture = this.clientInformation.browserLanguage;

任何信息都会很棒!

4个回答

navigator对象上存在以下属性clientInformation在 IE 上也可以称为它,但没有理由使用该名称):

  • language (非 IE,浏览器安装语言)
  • browserLanguage (IE,浏览器安装语言)
  • userLanguage (IE,用户级操作系统范围的语言设置)
  • systemLanguage (IE、OS安装语言)

但!你永远不应该使用这些属性中的任何一个!在许多情况下,它们将是错误的语言。

它们都没有反映用户在浏览器的“首选语言”用户界面中实际配置的语言设置,并且用户很难更改它们。如果使用这些值中的任何一个,而没有额外的简单的手动切换语言的方法,将会给您带来很大的挫败感。

您应该嗅探以决定默认使用哪种语言的正确位置(由普通浏览器 UI 配置)是Accept-Language在 HTTP 请求中传递给您的服务器标头。这是您可以从中选择的首选语言的排名列表,如果您使用它,它就是 ASP.NET 用来猜测自动客户端文化的内容。

不幸的是,此属性在 JavaScript 中不可用!

您通常做的是使用服务器端解析Accept-Language标头并从中选择一种合适的语言来使用。在 ASP.NET 中,您可以从HttpRequest.UserLanguages获取预先排序的列表并选择您喜欢的第一个列表

然后,您将该语言名称吐出到一个<script>元素中,以将语言信息传递给客户端。

我认为那个文档也只是关于 Chrome 的错误——我总是得到浏览器语言而不是第一个设置语言。我看到第一种设置语言的唯一浏览器是 Firefox,到目前为止还不是“所有浏览器”。即便如此,它也是次优的,因为你只得到第一语言:如果用户说“给我英语优先,如果你没有法语,”但你只有法语和德语,第二个偏好不会是已接。
2021-03-23 02:27:17
2017 年注释:navigator.languages用于 Chrome 和 Firefox 以获取用户首选语言的列表(由用户在浏览器中定义;但请注意,这navigator.languages[0]可能与 完全不同navigator.language)。然后navigator.language在 IE11+ 和其余部分工作。然后navigator.userLanguage为了与旧的 IE 兼容。在 IE11 中navigator.language === navigator.userLanguageuserLanguage用户可以在 Windows 上的控制面板 > 区域和语言中更改的值
2021-04-04 02:27:17
@timdream 小心,“所有浏览器”这个短语似乎有点误导,因为您链接到的文档说window.navigator.languageIE 不支持,并且需要专有的 IE 选项。
2021-04-05 02:27:17
我创建了这个库acceptedlanguages.js,它为您提供了一个简单的函数调用并且是轻量级的:github.com/leighmcculloch/acceptedlanguages.js
2021-04-09 02:27:17
请参阅developer.mozilla.org/en-US/docs/Web/API/ ... ... 从那时起,所有浏览器都使用 Accept-Language 中的值作为其语言属性。别再担心了。
2021-04-12 02:27:17

试试这个:

var l_lang;
  if (navigator.userLanguage) // Explorer
    l_lang = navigator.userLanguage;
  else if (navigator.language) // FF
    l_lang = navigator.language;
  else
    l_lang = "en";

来源:http : //forums.digitalpoint.com/showthread.php?t=631706

意识到这有点旧,但是对于现在遇到这个问题的任何人(比如我自己)navigator.language 适用于 IE 11,所以这段代码应该可以正常工作。
2021-03-24 02:27:17

navigator.languages是一个数组,按顺序包含所有选定的语言。并且仅适用于 Chrome 和 Firefox。

它是不一样的navigator.language,并通过我的意思是navigator.language不需要匹配navigator.languages[0]

只是要清楚。

要在 IE 中获取语言环境,您需要编写服务器端代码。我尝试使用 servlet 并获得了 IE 的接受语言。它显示了用户选择的语言。在客户端调用 servlet 并获取语言环境。

String name=request.getHeader("accept-language");
        AcceptClass ac=new AcceptClass();
        ac.setAccLang(name);
        Gson gs=new Gson();
          String json = gs.toJson(ac);
          response.setContentType("application/json");
          response.getWriter().write(json);