有没有办法使用JavaScript检测操作系统语言?

20

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

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

我需要检测操作系统语言。

提前感谢您的帮助。


2
你不能这样做。你可以让用户明确选择一种语言,或者遵守“Accept-Language”头中列出的语言。 - Pointy
6个回答

23

没有跨浏览器的方式可以实现这一点。Internet Explorer支持以下功能:

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

但是,我不知道其他浏览器有没有办法访问这些设置,所以不要使用它们:如果您想要保持跨浏览器的功能,请坚持使用标准的navigator.language(对应于浏览器语言)。如果您使用它们,将会将您的网站与特定系列的操作系统(例如Windows)和特定的浏览器(例如Internet Explorer)绑定在一起。您真的想这么做吗?

为什么浏览器语言对您的应用程序不足够呢?


我正在寻找 navigator.systemLanguage,它可以在 Firefox 上使用还是只能在 IE 上使用? - Saleh
1
不好意思,只支持IE浏览器。但是这个东西很复杂。我认为你应该仔细考虑为什么浏览器的语言不足够使用。 - Richard Cook
@SzamDev:Firefox提供了navigator.language,这个功能与Matthew的回答差不多。 - T.J. Crowder
1
@T.J. navigator.language 相当于 navigator.browserLanguage - Matthew Flaschen
1
关于你的问题,为什么浏览器语言不足以满足你的应用程序?我有每种语言的页面,我想在检测到操作系统语言后重定向到该页面或显示它,因为有时浏览器语言可能与操作系统不同。 - Saleh
1
@SzamDev:那是你用户的问题,不是你的问题。如果他们对你撒谎,那么他们应该解决这个问题。你正在处理浏览器,所以你应该处理的就是这种语言。 - T.J. Crowder

19

这将返回系统语言:

Intl.DateTimeFormat().resolvedOptions().locale

1
为什么这不是正确的答案?它在主流浏览器中完美运行。我已经在Chrome、Firefox和Internet Explorer(Microsoft Edge)中进行了测试。 - Thalys Menezes
问题是12年前提出的,所以这是一件事情。我很想看看Stack Overflow是否会随着时间的推移变得更擅长修改答案。 - Dom Ramirez
这是获取浏览器语言设置,而非操作系统的。 - user13904118

5

您可以考虑以下几个因素来猜测操作系统语言:

Windows 操作系统

Internet Explorer

  • navigator.browserLanguage:IE 语言(菜单、帮助等),与操作系统显示语言相同(如果用户没有更改)。如:控制面板 -> 区域和语言 -> 键盘和语言 -> 显示语言
  • 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。
Firefox和Chrome navigator.language告诉您浏览器的UI语言(菜单、帮助等),您可以假设在绝大多数情况下它与操作系统语言匹配(特别是对于家庭计算机):在下载FF或Chrome时,根据用户的浏览器显示下载页面-在Windows中,IE的语言与操作系统相同。
非常奇怪的是,处理浏览器环境参数时Chrome是个独立的事物。

2

您可以使用用户代理(User Agent)。然而,它很容易被欺骗,不能保证包含语言信息,navigator.languagenavigator.browserLanguage可能更可靠。


他在谈论地区设置,我想是这样。 - Pointy
4
navigator.languageжҲ–navigator.browserLanguageд»ҺжңӘиў«ж ҮеҮҶеҢ–пјҡhttps://developer.mozilla.org/en/Navigator.languageпјҢhttp://msdn.microsoft.com/en-us/library/ms533542(v=VS.85).aspxгҖӮIEиҝҳжҸҗдҫӣдәҶ`systemLanguage`е’Ң`userLanguage`гҖӮ - T.J. Crowder

2
您可以通过以下方式获取默认语言和支持的语言:

navigator.language

返回 'en-GB'

navigator.languages

返回 ['en-GB', 'en-US', 'en', 'zh-CN']

注:我在Windows上使用Chrome测试过(不确定Mac是否也是同样的结果)。


1
是的,它应该在大多数平台上都能正常工作。 - Hg0428

0

这里有一件事情需要所有人考虑,不是所有的用户都知道如何设置他们浏览器的语言偏好。如果你正在制作一个希望人们能够看到的网站,那么如果他们以不同于自己舒适语言的语言进入该网站,这将增加他们离开的可能性,这是你的问题。很大程度上取决于你所针对的人群,但对于一个网页来说,我认为检测系统语言是好的,如果你可以的话,然后如果不能检测到,则回退到浏览器语言。这样更有可能准确。


在寻找此设置之前,作为一个英语使用者从未有过这种需求,我不知道如何更改它。即使我使用了语言栏来更改系统语言,在意大利咖啡店度假时,这可能真的会让我很痛苦。 - Denny

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接