【发布时间】:2021-05-26 04:49:29
【问题描述】:
给定一个区域设置fr-CA,在CAD 中显示货币值,我如何才能让国家代码不显示?因为en-CA 显示"$1.00" 和fr-CA 显示"1.00 $ CAD" 没有明显的原因。
见下面的sn-p:
[
'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 与它收到的值不一致,因为它询问 语言环境,但最终取决于它黑盒子内的浏览器语言环境?
【问题讨论】:
-
同一个国家和同一个“语言环境”不同 - 语言环境由
navigator.language确定 - 如果与您指定的格式不同,它将以不同的方式显示。要标准化这一点,请在格式选项中使用浏览器的navigator.language属性。 -
我住在加拿大,我们有两种官方语言。有些人将他们的
navigator.language设置为"fr",其他人设置为"en",但他们都住在同一个国家。为什么一个有国家代码而另一个没有?这对我来说似乎是一个疏忽。 -
我的问题是函数
Intl.NumberFormat不使用navigator.language,而是要求传递语言环境。在这种情况下,如问题中所述,我将fr-CA和en-CA传递给CA国家/地区代码,因此如果我要求显示CAD货币符号,并且区域设置具有相同的国家/地区除了符号,一个不应该显示国家代码而另一个不显示! -
@RandyCasburn 我知道语言环境不是强制性的,但是当它提供时,它就是应该使用的,否则类的行为是未定义的。换句话说,使用相同的参数调用相同的函数应该提供相同的输出。
-
@RandyCasburn 相同的脚本在两个不同的浏览器中运行会在不同的浏览器中产生不同的结果。那是我的问题。我没有提供浏览器区域设置的功能,我提供具有特定区域设置的功能,但该功能的行为不同,因为两个浏览器都将
navigator.language设置为不同的值。这不在规格中。
标签: javascript internationalization currency intl