en_US
给我en
英语,但它已经在代码中
我需要US
返回en
英语或“DE”返回de
德语
echo Locale::getPrimaryLanguage('en_US');
echo Locale::getPrimaryLanguage('US');
以上都应该输出en
,但后者实际输出us
。
en_US
给我en
英语,但它已经在代码中
我需要US
返回en
英语或“DE”返回de
德语
echo Locale::getPrimaryLanguage('en_US');
echo Locale::getPrimaryLanguage('US');
以上都应该输出en
,但后者实际输出us
。
getPrimaryLanguage
不是 ICU 功能,所以我不知道它是如何实现的。在 ICU 中,您可以调用uloc_addLikelySubtags
which 会扩展 und_US
(您可以und
在 region code 之前放置 unknown US
)en_US
或und_DE
to de_DE
- 然后调用uloc_getLanguage
将返回en
,de
等。
您的us
for结果US
可能是由于US
被解释为语言代码。您可以尝试und_US
查看行为是什么。
就像@Steven R. Loomis 说你可以使用语言环境'und_US',Locale::getPrimaryLanguage('und_US')
只会返回'und'
如果使用 php intl 扩展,它可以接受 'und_US' 的语言环境,但它不会仅根据美国地区正确格式化您的货币,您需要指定一种语言。
$locales = array('de_DE', 'en_US', 'ja_JP', 'und_US', 'und_JP', 'und_DE', 'und_FR');
$amount = 1234567.891234567890000;
foreach ($locales as $locale) {
echo Locale::getPrimaryLanguage($locale).'<br />';
$formatter = new NumberFormatter($locale, NumberFormatter::CURRENCY);
echo $formatter->getTextAttribute(NumberFormatter::CURRENCY_CODE);
echo '|' . $formatter->getSymbol(NumberFormatter::CURRENCY_SYMBOL);
echo '|' . $formatter->getSymbol(NumberFormatter::INTL_CURRENCY_SYMBOL);
echo ' - ' . $formatter->formatCurrency($amount, $formatter->getTextAttribute(NumberFormatter::CURRENCY_CODE));
echo '<br /><br />';
}
返回
de EUR|€|EUR - 1.234.567,89 €</p>
zh USD|$|USD - $1,234,567.89
日元|¥|日元 - ¥1,234,568
美元|美元|美元 - 1234567.89 美元
和日元|¥|日元 - ¥ 1234568
und 欧元|€|欧元 - € 1234567.89
und 欧元|€|欧元 - € 1234567.89
请注意,即使您获得了该地区的正确货币符号,数字的格式也不正确。