en_US
給我en
爲英語,但它已經在代碼如何通過國家代碼來從ICU庫默認languge
我需要US
返回en
英語或「DE」爲德國
de
echo Locale::getPrimaryLanguage('en_US');
echo Locale::getPrimaryLanguage('US');
以上兩者都應輸出en
,但後者實際輸出us
。
en_US
給我en
爲英語,但它已經在代碼如何通過國家代碼來從ICU庫默認languge
我需要US
返回en
英語或「DE」爲德國
de
echo Locale::getPrimaryLanguage('en_US');
echo Locale::getPrimaryLanguage('US');
以上兩者都應輸出en
,但後者實際輸出us
。
getPrimaryLanguage
不是ICU功能,所以我不知道它是如何實現的。在ICU,你可以調用uloc_addLikelySubtags
這將擴大und_US
(你會把und
未知區域碼US
之前)到en_US
或und_DE
到de_DE
- 然後,調用uloc_getLanguage
將返回en
,de
等
你的結果us
對於US
可能是由於US
被解釋爲語言代碼。您可以嘗試und_US
來查看行爲是什麼。
像@Steven R.盧米斯說,你可以使用一個區域「的und_US」和Locale::getPrimaryLanguage('und_US')
將只返回「UND」
如果使用PHP擴展國際,它可以接受的「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 />';
}
回報
日EUR |€| EUR - 1.234.567,89€
EN USD | $ | USD - $ 1,234,567.89
JA JPY |¥| JPY - ¥1,234,568
和USD | $ | USD - $ 1234567.89
UND JPY |¥| JPY - ¥1234568
UND EUR |€| EUR - €1234567.89
UND EUR |€| EUR - €1234567.89
通知如何,即使您將得到正確的貨幣符號爲區域,數字的格式不正確。