问题描述
给定区域设置 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" :
区域设置 "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 有。希望有一天,所有浏览器都符合相同的规范。