en_US
英語を教えてくれますen
が、すでにコードに含まれています
I need US
to return en
for English または 'DE' to return de
for German
echo Locale::getPrimaryLanguage('en_US');
echo Locale::getPrimaryLanguage('US');
上記はどちらも を出力するはずen
ですが、後者は実際には を出力しますus
。
en_US
英語を教えてくれますen
が、すでにコードに含まれています
I need US
to return en
for English または 'DE' to return de
for German
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
forの結果は、US
おそらくUS
言語コードとして解釈されるためです。und_US
動作が何であるかを確認してみてください。
@Steven R. Loomisのように、ロケール「und_US」を使用でき、Locale::getPrimaryLanguage('und_US')
「und」を返すだけです
php intl 拡張機能を使用する場合、 'und_US' のロケールを受け入れることができますが、地域 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 €</p>
ja 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
地域の正しい通貨記号が与えられていても、数値の形式が正しくないことに注意してください。