当对瑞典语使用NumberFormatter::formatCurrency()时,冒号代替逗号分隔符


Colon instead of comma separator when using NumberFormatter::formatCurrency() for Swedish

我有以下一段代码,用于为给定的语言环境和货币(在本例中是意大利语,通常这是一个方法)格式化价格。

$locale = "it";
$currency = "USD";
$formatter = new 'NumberFormatter($locale, 'NumberFormatter::CURRENCY);
$priceInCents = 1100;
return $formatter->formatCurrency($priceInCents / 100, $currency);

这回报:

US$ 12,29

但是,当使用瑞典语言环境(sv)时,代码返回带有冒号的价格:

12:29 US$

当我使用完整的区域设置"se_SE"时,这种情况不会发生,但不幸的是,我们只有两个字母的版本可用。什么好主意吗?这是臭虫吗?

感兴趣的可以使用

NumberFormatter::MONETARY_GROUPING_SEPARATOR_SYMBOL

不好意思。

OP实际上得到了货币值的正确格式,根据'sv'区域设置。冒号在瑞典经常用作(货币)十进制分隔符。事实上,他们也经常在缩写中使用冒号。

基本上,区域代码由语言代码ISO 639-1和区域代码ISO 3166(通常是大写字母)组成,由下划线分隔(如果处理Javascript则是破折号)。

'sv'是瑞典语的正确语言代码,因此当OP使用区域代码'se_SE'时,实际使用的语言('se')是北部Sámi语言(由挪威,芬兰和瑞典部分地区的少数民族使用),该语言确实使用句号作为小数分隔符。

看起来好像OP实际上不希望输出本地化,或者至少不希望使用'不同的分隔符',而许多操作都是这样做的。伪造区域设置以适应特定的方案可能是错误的方法,但正如其他人指出的那样,有一些方法可以强制更改分隔符。不过,这有点违背了本地化的初衷。