使用同一个国家时,如何确保 Int.NumberFormat 不显示货币代码?

问题描述

给定区域设置 fr-CA,以 CAD 显示货币值,我怎样才能显示国家/地区代码?因为 en-CA 显示 "$1.00"fr-CA 无明显原因显示 "1.00 $ CAD"

见下面的片段:

[
  'fr-CA','en-CA','en-US'
].forEach(locale => {
   document.getElementById('label_' + locale).innerHTML = new Intl.NumberFormat(locale,{ style: 'currency',currency: 'CAD' }).format(0.25);
});
.currency {
  padding-right: 10px;
}

.error {
  color: white;
  background-color: red;
  font-weight: 900;
  padding: 0 10px;
}

.success {
  color: green;
}
<p>Should <strong>not</strong> display CAD because same country (fr-CA)</p>
<span class="currency" id="label_fr-CA"></span><span class="error">err!</span>
<p>Should not display CAD because same country (en-CA)</p>
<span class="currency" id="label_en-CA"></span><span class="success">OK</span>
<p>Should display CAD because different country (en-US)</p>
<span class="currency" id="label_en-US"></span><span class="success">OK</span>

为什么在给定两个具有相同国家/地区代码的语言环境的情况下,国家/地区显示不一致,这可以标准化吗?

** 编辑 **

这是我在浏览器中看到的,因为我的语言环境当前设置为 "fr" :

enter image description here

区域设置 "fr-CA" 显示 0,25 $ CA"en-CA" 显示 $0.25;两个地区有相同的国家代码(即CA),这也与货币国家代码相同,那么为什么国家代码显示"fr-CA"”而不是"en-CA"

使用不同的浏览器,将其语言环境设置为 "en-CA",一切都按原样显示。那么,为什么 Intl.NumberFormat 与它接收到的值不一致,因为它询问区域设置,但最终取决于它的黑匣子内的浏览器区域设置?

解决方法

在 Randy Casburn 的评论之后,我打开了一个关于 tc39 / ecma402 存储库的问题,讨论从那里转到了 CLDR 但是报告,其中指出

fr-CA 中的 250 CAD 应为 250,00 $
en-CA 的 250 加元应为 $250.00
FR-FR 中的 250 CAD 应为 250,00 $ CA
250 加元在美国应该是 Can$250.00/CAN$250.00

换句话说,正如这个问题所问的那样。

解决方案是这很可能会在下一个版本中得到解决。截至目前,下一个版本是 v40,计划于 2021 年 10 月发布。

注意:当前的行为在不同浏览器中是不一致的。例如,Firefox 目前没有表现出这种行为,但 Chrome 有。希望有一天,所有浏览器都符合相同的规范。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...