【问题标题】:Why is Google Chrome showing dates in US format when both my Chrome language and OS locale are set to non-US values?当我的 Chrome 语言和操作系统区域设置都设置为非美国值时,为什么 Google Chrome 会以美国格式显示日期?
【发布时间】:2019-11-05 12:12:25
【问题描述】:

我正在运行 Fedora 31(但在 Fedora 29 上遇到了同样的问题)和 Google Chrome(78.0.3904.87 Official Build 64-bit)。在过去 6 个月的某个时候,我注意到日期以美国格式 (mm/dd/yyyy) 出现,而​​不是我希望看到的 dd/mm/yyyy 格式。

在网上搜索类似的问题,答案似乎总是在谷歌设置中更改语言,事实上,当我检查时,默认语言是英语(美国)。但是,当我选择英语(英国)作为 Chrome 中的唯一语言时,这并没有解决问题。即使只选择德语(德国)作为语言也不能解决问题。

我可以从 http://www.localeplanet.com/support/browser.html 看到我的浏览器语言设置正确(navigator.language: en-GB),但也可以从同一页面看到 date.toLocaleDateString() 仍在以美国格式返回日期。

我还在终端中检查了localectl 的输出,结果按预期返回了 en_IE.utf-8。

因此,我的操作系统和浏览器都绝对设置为非美国语言环境,但我仍然获得美国日期格式。我花了非常多的时间把我的头撞在墙上,这似乎是一件很小的事情。有什么想法吗?

【问题讨论】:

    标签: javascript google-chrome date format locale


    【解决方案1】:

    在寻找答案时,我注意到这里至少有一个其他用户(How/Where does JavaScript detect the default locale? 中的 karora - 也许有足够声誉的人可能会让他知道这一点)遇到了与我相同的问题并点击他的个人资料显示他也常驻爱尔兰。这让我想到了我在一篇关于 Chrome 支持的语言环境的 Chromium 错误报告中读到的内容。

    所以,我发现当我将操作系统区域设置从 en_IE 更改为 en_GB 时,我的问题得到了解决,并且 Google Chrome 能够以我期望的格式显示日期。似乎发生的情况是,如果您的操作系统设置为不在 Google Chrome 中官方支持的语言列表中的语言环境,那么浏览器和操作系统语言/语言环境之间的不匹配会导致浏览器忽略它自己的语言/语言环境设置或导致其中的 javascript 引擎存在一些问题,并使其默认为日期、时间等的 en_US 格式。

    我将把它作为 Chromium 项目中的一个错误提出来,但希望这篇文章能为那些发现自己处于类似情况的人节省一些时间。

    【讨论】:

    • ECMA-402 国际化 API 规范背后的概念存在严重缺陷(当然是恕我直言)。基于语言标签(误命名为“语言环境”),简单的数字格式可能没问题,但日期完全是另一回事。它基于这样的假设,即语言代码能够可靠地识别人们用于日期组件的任何组合的单一格式。这显然不是真的,证据很容易在网上找到。除了琐碎的应用程序之外,只要忘记 ECMA-402,它就不能替代真正的格式化程序和明确的格式。
    • 谢谢,但我需要承认我完全不了解该规范 :) 我只是对(从用户的角度)在我的两个操作系统时 Chrome 显示美国格式日期的方式或原因感到困惑我的浏览器语言也没有设置为从不使用该日期格式的语言/区域设置。我很欣赏,从开发/作者的角度来看,可能没有什么可以替代明确的格式。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多