【问题标题】:How does JavaScript "Date" object determine the locale of the user's browser?JavaScript“日期”对象如何确定用户浏览器的语言环境?
【发布时间】:2011-01-19 02:28:43
【问题描述】:

我试图了解在各种浏览器中运行的 JavaScript 如何确定 JavaScript Date 对象在使用方法 toLocaleString() 时将使用的语言环境。

我已通过 Windows 控制面板更改了系统的语言和区域设置,并且我还将每个浏览器的语言设置更改为相同。该函数仍然返回一个英文日期。

Windows 上是否有必须手动设置的注册表设置?我在某处错过了一些设置吗?还是我必须获得特定地区的 Windows 安装光盘?

【问题讨论】:

  • 您是询问时区还是询问将日期转换为字符串时使用的格式(例如,是使用英文月份名称还是用户自己的语言)?
  • 它是专门的名称,但通常它也指日期格式。不同地区的时间格式是否不同?

标签: javascript localization browser locale


【解决方案1】:

虽然浏览器实现通常依赖于操作系统例程来进行格式化,但我认为规范中没有任何内容可以确定格式化的发生方式或输出是什么,只是它适用于语言环境。

我认为问题在于如何确定语言环境。至少 Firefox 会根据安装情况将此视为固定值。它无法通过操作系统甚至浏览器首选项进行更改(您在 Firefox 中看到的语言/区域首选项与仅在 HTTP 事务中使用的不同区域设置有关)

要实际控制任意语言环境中的日期格式,除了您的浏览器假定已安装的语言环境之外,您需要一个 JS 库,如 jsdate 或 dojo.date。

【讨论】:

  • 通过研究,我可以确认只有资源管理器似乎受到区域设置的影响,而且似乎我需要一个实际的区域特定安装。 Firefox 你似乎是正确的,到目前为止我认为 webkit 是相似的。
  • 除了跨浏览器问题之外,还有其他不依赖原生浏览器格式的好理由:机器可能是共享的,或者用户可能无法更改操作系统设置,实际格式是未指定的,并且可能在网络浏览器中不一致,并且您对格式模式没有太多控制
【解决方案2】:

一篇来自我最喜欢的博客中关于 JScript 行为的精彩文章:

我相信我们现在在 IE 中处于“始终默认为美国英语”模式。这很令人困惑,因为脚本引擎能够更改用于错误消息的语言环境,而与用于格式化日期、数字等的语言环境无关。

Date.prototype.toLocaleDateStringtoLocaleTimeStringtoLocaleString 因 Win32 NLS API 中的一些怪异而复杂化。为了解决各种问题,仅本地化公元 1600 年到 10000 年之间的日期。也不支持公元 2240 年之后年份的希伯来日期格式。一旦我们克服了这些障碍,Win32 API 的 GetDateFormat 和 GetTimeFormat 就用于格式化字符串。 (我隐约记得那里还有一个涉及泰历的错误,但我不记得细节了。)

https://blogs.msdn.com/ericlippert/archive/2004/05/18/jscript-localization-and-those-wacky-newfoundlanders.aspx

来自MDC (Mozilla Developer Center)

toLocaleString 方法依赖于底层操作系统来格式化日期。它使用运行脚本的操作系统的格式约定将日期转换为字符串。例如,在美国,月份出现在日期之前 (04/15/98),而在德国,日期出现在月份之前 (15.04.98)。如果操作系统不符合 2000 年并且在 1900 年之前或 2000 年以上的年份不使用全年,则 toLocaleString 返回一个不符合 2000 年的字符串。在转换操作系统格式不正确的年份时,toLocaleString 的行为类似于 toString。

【讨论】:

    【解决方案3】:

    它来自系统时钟的时区设置,而不是区域设置。

    [编辑] 现在我重读了这个问题,您是在谈论日期格式,不是吗? (2 月 15 日与 2 月 15 日)以下是有关 Firefox 方法的参考:https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/Date/toLocaleString。它说它使用操作系统的语言环境。

    您可能需要重新启动操作系统才能使区域更改生效。

    【讨论】:

    • 我对订单感兴趣,但对使用的语言也很感兴趣,例如将系统更改为法语语言系统不会影响我的 JavaScript date 对象。
    猜你喜欢
    • 2010-10-15
    • 2014-03-02
    • 2020-01-24
    • 2011-09-15
    • 1970-01-01
    • 1970-01-01
    • 2011-02-08
    • 2016-09-10
    • 2011-05-27
    相关资源
    最近更新 更多