15

我需要使用 javascript 检测操作系统语言,以便我可以根据语言查看我的页面。

我知道我们可以检测浏览器语言,但这对我来说还不够。

我需要操作系统语言

提前致谢

4

5 回答 5

22

没有跨浏览器的方法可以做到这一点。Internet Explorer 支持以下内容:

  • navigator.browserLanguage: 浏览器语言
  • navigator.systemLanguage: Windows 系统语言
  • navigator.userLanguage: Windows 用户特定语言

但是没有办法从任何其他浏览器(我可以告诉)访问这些设置,所以不要使用它们navigator.language:如果你想维护跨浏览器功能,请坚持标准(对应于浏览器语言)。如果您确实使用它们,您会将您的网站绑定到特定的操作系统系列(即 Windows)和特定的浏览器(即 Internet Explorer)。你真的想这样做吗?

为什么浏览器语言不适合您的应用程序?

于 2010-10-08T21:44:12.083 回答
5

考虑到几个因素,您可能只是猜测操作系统语言:

视窗操作系统

IE浏览器

  • navigator.browserLanguage: IE 语言(菜单、帮助等),与 OS 显示语言相同(如果用户没有更改)。如控制面板 -> 区域和语言 -> 键盘和语言 -> 显示语言
  • navigator.systemLanguage: 如控制面板 -> 区域和语言 -> 位置
  • navigator.userLanguage: 如控制面板 -> 区域和语言 -> 格式

ECMAScript 国际化 API

var d=new Date(Date.UTC(2014,1,26,3,0,0));
var dateFormat={weekday:"long",year:"numeric",month:"long",day:"numeric"};
var result = d.toLocaleDateString("i-default",dateFormat);
alert(result);
//e.g. for Russian format ( Control Panel -> Region and Language -> Formats ) 
//result == 'среда, 26 февраля 2014 г.'

然后result在您的服务器上搜索初步生成的不同语言的格式化日期集。

注意!Chrome 返回以其 UI 语言格式化的日期。

Adobe Flash

如果您迫切需要了解操作系统语言 - 在您的页面中嵌入flash并利用flash.system.Capabilities.language

注意! Chrome 不允许这个技巧——Chrome 的 Flash 总是显示browser.language,我想是因为它有自己的 Flash。

火狐和铬

navigator.language告诉您浏览器的 UI 语言(菜单、帮助等),您可能会假设在绝大多数情况下它与操作系统语言匹配(尤其是对于家用计算机):在下载 FF 或 Chrome 时,会根据用户当时的浏览器显示下载页面 —在 Windows 上,它是与 OS 语言相同的 IE。

在处理浏览器的环境参数时,Chrome 本身就是一件很奇怪的事情,唉。

于 2015-05-20T13:37:13.643 回答
2

您可以使用用户代理。但是,它很容易被欺骗,不能保证包含语言信息,并且navigator.language可能navigator.browserLanguage会更可靠。

于 2010-10-08T21:41:24.863 回答
0

这里的每个人都需要考虑一件事,并非所有用户都知道如何设置他们的浏览器语言首选项。因此,如果您正在创建一个您希望人们看到的网站,那么如果他们以不同于他们熟悉的语言登陆它,这就是您的问题,因为这会增加他们将离开的变化。这在很大程度上取决于您的目标人群,但对于一个网页,我认为至少可以检测系统语言是很好的,如果不能,则使用浏览器语言。它更有可能是准确的。

于 2012-12-10T15:30:00.867 回答
0

这将返回系统语言:

Intl.DateTimeFormat().resolvedOptions().locale
于 2022-02-25T12:18:15.930 回答