是否可以通过 JavaScript 中的浏览器确定操作系统中设置的用户区域设置的**国家**?

Posted

技术标签:

【中文标题】是否可以通过 JavaScript 中的浏览器确定操作系统中设置的用户区域设置的**国家**?【英文标题】:Is it possible to determine the user locale's **country** as set in the OS from the browser in JavaScript? 【发布时间】:2012-08-03 07:09:28 【问题描述】:

网络浏览器是否具有访问用户在操作系统中设置的任何区域设置的界面?

我可以通过用户的 IP 地址或使用新的地理定位 API 检测用户当前所在的国家/地区,但我正在为旅行者编写一个浏览器应用程序,因此我希望他们当前的位置通常不会成为他们的祖国

有没有办法确定浏览器/操作系统设置的国家/地区/地区

如果没有,是否有任何建议为 javascript 添加适当的语言环境支持?

还有什么聪明的解决方法吗? (例如,我知道我可以获得用户的首选浏览语言,但有很多国家使用相同的语言,并且很多用户使用相同的语言将此设置保持为默认值,而不是将其更改为常用语言。)

【问题讨论】:

除了navigator.languagegeolocation我不这么认为。 也许如果用户没有更改他的首选语言,那么他实际上真的更喜欢这个默认值(例如更简洁的技术术语)而不是他的母语? @OlegV.Volkov:是的,将您的“接受语言”更改为您的母语以外的其他语言是有充分正当理由的,但我正在尝试任何启发式方法来获取用户的祖国. 我已经发布了一个后续问题:Is there any current proposal I can follow about adding proper locale support to JavaScript? 【参考方案1】:

我必须捍卫或重新陈述 SReject 和 CodeJack 的答案,因为浏览器语言确实通常包含 操作系统的国家/地区语言环境,如 @ 987654321@ 或"de-CH"

多年来,我们一直使用它在表格中预先选择国家/地区,它在足够多的情况下发挥作用。

因此,对于旅行的瑞士用户,您可以使用navigator.language.slice(-2) 并获得"CH",这是您问题的有效答案。

【讨论】:

-2 并不聪明。有有效的 ISO 代码,如 ES-419 和 419 是拉丁美洲:-/【参考方案2】:

你会得到最好的语言:

navigator.language(Netscape - 浏览器本地化) navigator.browserLanguage(IE 特定 - 浏览器本地化语言) navigator.systemLanguage(IE 特定 - Windows 操作系统 - 本地化语言) navigator.userLanguage

由于安全问题或未实现,您所请求的内容在本机上是不可能的。但是,您可以为 Windows 用户使用 ActiveX 对象

您可以让用户选择他们喜欢的语言、国家等,然后使用 javascript 设置一个 cookie,该 cookie 将在页面被请求时发送到您的服务器

【讨论】:

这只会让我知道语言 - 因为我特别声明我想要语言环境或国家/地区,因为一种语言可以在许多国家/地区使用。 我给了你你能得到的最好的。由于安全问题(无论出于何种原因)基于浏览器的 js 无法访问区域设置。 由于您对问题的改进,我撤销了我的反对票 - 谢谢。但是您能否提供一些链接或参考来支持 JS 由于安全问题而缺乏语言环境支持的说法? 它似乎不是一个安全问题,而是没有实现。如果用户使用的是 Windows(通过 ActiveX,如果您想要一个示例,我可以编写一个代码),您可以访问您想要的信息,但浏览器本身不会将此类成员公开给引擎 尽管我很讨厌它,但至少 activeX 一种可能的解决方法。这让我觉得其他可能的解决方法可能通过 Java 小程序或 Flash 对象成为可能,所有这些我都没有经验,但有一些模糊的知识。【参考方案3】:
var userLocale = navigator.language or

navigator.userLanguage;

编辑 唯一的其他方法是 html5 的 geoLocation API

http://html5demos.com/geo http://dev.w3.org/geo/api/spec-source.html

【讨论】:

这只会让我知道语言 - 因为我特别声明我想要语言环境或国家/地区,因为一种语言可以在许多国家/地区使用。 正如我在问题中也提到的,我试图区分用户的当前位置和用户在其操作系统中设置的家庭位置。我正在为经常远离本国的旅行者编写一个应用程序,一个目标是自动检测尽可能多的默认设置。 (它们也可以被覆盖。)

以上是关于是否可以通过 JavaScript 中的浏览器确定操作系统中设置的用户区域设置的**国家**?的主要内容,如果未能解决你的问题,请参考以下文章

JavaScript 确定浏览器是否理解HTML5视频

是否可以使用 Javascript 在页面刷新时随机生成预先确定的链接颜色和悬停颜色?

测试浏览器是否支持JavaScript脚本

如何确定 JavaScript 中的操作系统路径分隔符?

是否可以使用 Emscripten 从 JavaScript 调用 C++ 函数?

作为对象键的函数与块中的标记函数之间的Javascript语法冲突