Php 如何按国家代码从ICU库获取默认语言
Php 如何按国家代码从ICU库获取默认语言,php,localization,icu,Php,Localization,Icu,en_US为我提供了英语的en,但它已经在代码中了 我需要US返回英语的en,或者“DE”返回德语的DE echo Locale::getPrimaryLanguage('en_US'); echo Locale::getPrimaryLanguage('US'); 上面两个都应该输出en,但后者实际上输出usgetPrimaryLanguage不是ICU函数,所以我不知道它是如何实现的。在ICU中,您可以调用uloc\u addLikelySubtags,它将扩展und\u-US(您将und
en_US
为我提供了英语的en
,但它已经在代码中了
我需要US
返回英语的en
,或者“DE”返回德语的DE
echo Locale::getPrimaryLanguage('en_US');
echo Locale::getPrimaryLanguage('US');
上面两个都应该输出
en
,但后者实际上输出us
getPrimaryLanguage
不是ICU函数,所以我不知道它是如何实现的。在ICU中,您可以调用uloc\u addLikelySubtags
,它将扩展und\u-US
(您将und
放在区域代码US
之前,用于未知)到en\u-US
或und\u-DE
到DE\code>,然后调用uloc\u-getLanguage>将返回en
,DE
,等等
您对us
的us
结果可能是因为us
被解释为语言代码。您可以尝试und__US
查看行为是什么。getPrimaryLanguage
不是ICU函数,因此我不知道它是如何实现的。在ICU中,您可以调用uloc\u addLikelySubtags
,它将扩展und\u-US
(您将und
放在区域代码US
之前,用于未知)到en\u-US
或und\u-DE
到DE\code>,然后调用uloc\u-getLanguage>将返回en
,DE
,等等
您对us
的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 />';
}
$locales=array('de_de','en_US','ja_JP','und_US','und_JP','und_de','und_FR');
$amount=1234567.89123456789万;
foreach($locales作为$locale){
echo Locale::getPrimaryLanguage($Locale)。“
”;
$formatter=newnumberformatter($locale,NumberFormatter::CURRENCY);
echo$formatter->getTextAttribute(NumberFormatter::CURRENCY\u代码);
echo“|”。$formatter->getSymbol(NumberFormatter::CURRENCY_SYMBOL);
echo“|”。$formatter->getSymbol(NumberFormatter::INTL_CURRENCY_SYMBOL);
echo'-'.$formatter->formatCurrency($amount,$formatter->getTextAttribute(NumberFormatter::CURRENCY_CODE));
回音“
”;
}
返回
欧元-1.234.567,89欧元
en美元|$|美元-1234567.89美元
日元-1234568日元
und美元|$|美元-1234567.89美元
日元-1234568日元
欧元-1234567.89欧元
欧元-1234567.89欧元
请注意,即使您获得了该地区正确的货币符号,数字的格式也不正确。如@Steven R.Loomis所说,您可以使用区域设置“und_US”,而区域设置::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 />';
}
$locales=array('de_de','en_US','ja_JP','und_US','und_JP','und_de','und_FR');
$amount=1234567.89123456789万;
foreach($locales作为$locale){
echo Locale::getPrimaryLanguage($Locale)。“
”;
$formatter=newnumberformatter($locale,NumberFormatter::CURRENCY);
echo$formatter->getTextAttribute(NumberFormatter::CURRENCY\u代码);
echo“|”。$formatter->getSymbol(NumberFormatter::CURRENCY_SYMBOL);
echo“|”。$formatter->getSymbol(NumberFormatter::INTL_CURRENCY_SYMBOL);
echo'-'.$formatter->formatCurrency($amount,$formatter->getTextAttribute(NumberFormatter::CURRENCY_CODE));
回音“
”;
}
返回
欧元-1.234.567,89欧元
en美元|$|美元-1234567.89美元
日元-1234568日元
und美元|$|美元-1234567.89美元
日元-1234568日元
欧元-1234567.89欧元
欧元-1234567.89欧元
请注意,即使您获得了该地区的正确货币符号,数字的格式也不正确。您可以使用Unicode CLDR获取特定国家的“默认”或“可能”语言,请参阅您可以使用Unicode CLDR获取特定国家的“默认”或“可能”语言,请参阅