gpt4 book ai didi

javascript - Firefox 数字本地化不一致

转载 作者:行者123 更新时间:2023-11-30 06:12:17 26 4
gpt4 key购买 nike

我偶然发现 Firefox、Chrome 和 ASP.NET MVC Core Web 应用程序之间“km-KH”语言环境的数字格式不一致。

在 Chrome 和 ASP.NET MVC Core 网络应用程序中,数字使用作为小数分隔符,使用逗号作为千位分隔符。但在 Firefox 中,情况恰恰相反,这显然会导致差异。

如果将以下代码片段粘贴到浏览器控制台中:

(1234.56).toLocaleString('km-KH')
// or
new Intl.NumberFormat('km-KH').format(1234.56)

Chrome 会呈现:

"1,234.56"

Firefox 将呈现:

"1.234,56"

我的主要问题很简单:如何解决这种不一致?

据我所知,Firefox 运行不正常,而 Chrome 和 ASP.NET MVC Core 运行正常。


有趣的事实:“公里”数字格式的 CLDR 定义中也存在不一致:https://github.com/unicode-cldr/cldr-numbers-full/blob/master/main/km/numbers.json

定义的符号是:逗号作为小数分隔符,作为分组分隔符

"symbols-numberSystem-latn": {
"decimal": ",",
"group": ".",
// ...
}

但是当他们指定十进制格式时,他们使用相反的方式:

"decimalFormats-numberSystem-latn": {
"standard": "#,##0.###",
// ...
}

这是本地化定义中的实际错误吗?

最佳答案

由于这个话题相当复杂,我不坚持我的回答指向确切的原因,但是,其中一个原因可能来自以下原因。

.toLocaleString已知在浏览器之间工作不一致。 之所以会这样,是因为这个函数没有特别严格的规范。查看 this answer .

作为@T.J. Crowder 在 his comment 中正确指出, 规范在新版本的 ECMA 脚本规范中有了很大的发展。

然而,由于历史或其他原因输出 .toLocaleString仍然非常依赖于浏览器。虽然它对某些语言的工作非常一致(例如,在我的例子中,语言环境的输出 frruen-AU 在 Firefox、Chrome 甚至 Safari 中完全相同),它可能会有很大差异以防万一其他语言(在我的例子中,语言环境 jpkm-KHsq-AL 在 3 种不同的浏览器中输出了 3 种不同的东西)。

我现在找不到引用,但在某些时候我发现除了其他事情之外,不同之处在于 Firefox 尝试使用您操作系统的语言首选项,而 Chrome 使用语言首选项集(或自动 -检测到)特别是在 Chrome 中。

如果您使用(或可能计划)SSR,这可能会带来另一个挑战,因为根据您的工具集,格式可能会从服务器环境中获取,就像在 Node.js 中一样。 .

如果您想控制输出的确切格式,那么,非常喜欢和感谢 SO moment.js可能会帮助你。

关于javascript - Firefox 数字本地化不一致,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58167748/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com