2012-06-05 78 views

回答

1

getPrimaryLanguage不是ICU功能,所以我不知道它是如何實現的。在ICU,你可以調用uloc_addLikelySubtags這將擴大und_US(你會把und未知區域碼US之前)到en_USund_DEde_DE - 然後,調用uloc_getLanguage將返回ende

你的結果us對於US可能是由於US被解釋爲語言代碼。您可以嘗試und_US來查看行爲是什麼。

0

像@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

通知如何,即使您將得到正確的貨幣符號爲區域,數字的格式不正確。