【问题标题】:How to getting browser current locale preference using javascript?如何使用 javascript 获取浏览器当前的区域设置偏好?
【发布时间】:2011-02-10 07:36:21
【问题描述】:

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

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

我可以通过以下 sn-p 代码在 IE 中获取它:

var browserCulture = this.clientInformation.browserLanguage;

任何信息都会很棒!

【问题讨论】:

  • “文化”是指在浏览器中设置的当前区域设置首选项吗? (我以前从未听说过所谓的“文化”,但我没有文化。)
  • 是的,这正是我的意思。我习惯于使用 asp 本地化,这就是所谓的。因此,我将其称为“文化”的范围是有限的。难怪我很难在网上找到这些信息!
  • 这是一个相关问题:stackoverflow.com/questions/1043339/…

标签: javascript internet-explorer firefox google-chrome culture


【解决方案1】:

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

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

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

它们都不反映用户在浏览器的“首选语言”用户界面中实际配置的语言设置,而且用户很难更改。如果没有额外的简单手动方式来切换语言,则使用这些值中的任何一个都会让您感到非常沮丧。

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

很遗憾,此属性在 JavaScript 中不可用!

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

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

【讨论】:

  • 参见developer.mozilla.org/en-US/docs/Web/API/… ...所有浏览器都在此处使用 Accept-Language 中的值作为其语言属性。别再担心了。
  • @timdream 小心,“所有浏览器”这句话似乎有点误导,因为您链接到的文档说window.navigator.language 在 IE 中不受支持,需要专有的 IE 选项。
  • 我认为该文档对 Chrome 的看法也是错误的——我总是将浏览器语言而不是作为第一个设置语言。我看到第一种设置语言的唯一浏览器是 Firefox,远非“所有浏览器”。即使这样,它也不是最理想的,因为你只得到第一种语言:如果用户说“给我英语作为偏好,如果你没有那个,给我法语”但你只有法语和德语,第二个偏好不会是捡起来。
  • 我创建了这个库acceptedlanguages.js,它为您提供了一个简单的函数调用并且是轻量级的:github.com/leighmcculloch/acceptedlanguages.js
  • 2017 注意:对 Chrome 和 Firefox 使用 navigator.languages 以获取用户首选语言列表(由用户在浏览器中定义;请注意,navigator.languages[0] 可能与 navigator.language 完全不同)。然后 navigator.language 在 IE11+ 和其余部分中工作。然后navigator.userLanguage 与旧的 IE 兼容。在 IE11 中navigator.language === navigator.userLanguageuserLanguage 的值可以由用户在 Windows 上的控制面板 > 区域和语言中更改。
【解决方案2】:

试试这个:

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,所以这段代码应该可以正常工作。
【解决方案3】:

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

它与navigator.language 不同,我的意思是navigator.language 不一定匹配navigator.languages[0]

只是为了清楚。

【讨论】:

    【解决方案4】:

    要在 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);
    

    【讨论】:

      猜你喜欢
      • 2013-06-05
      • 2018-04-19
      • 1970-01-01
      • 1970-01-01
      • 2010-12-05
      • 1970-01-01
      • 2014-04-13
      相关资源
      最近更新 更多