1

en_US英語を教えてくれますenが、すでにコードに含まれています

I need USto return enfor English または 'DE' to return defor German

echo Locale::getPrimaryLanguage('en_US');
echo Locale::getPrimaryLanguage('US');

上記はどちらも を出力するはずenですが、後者は実際には を出力しますus

4

2 に答える 2

1

getPrimaryLanguageは ICU 機能ではないため、どのように実装されているかわかりません。ICU では、これを呼び出しuloc_addLikelySubtagsて (地域コードの前に不明und_USを配置します) にまたは- に展開し、呼び出すと、、 など が返されます。undUSen_USund_DEde_DEuloc_getLanguageende

usforの結果は、USおそらくUS言語コードとして解釈されるためです。und_US動作が何であるかを確認してみてください。

于 2012-07-25T20:14:17.030 に答える
0

@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

地域の正しい通貨記号が与えられていても、数値の形式が正しくないことに注意してください。

于 2012-10-29T01:35:02.323 に答える