如何从PHP Intl(ICU库)获取默认货币

时间:2011-11-30 11:13:49

标签: php locale currency icu intl

我使用PHP,并想知道如何通过国际化扩展(ICU库的Wrapper)获取区域设置的默认货币?

下面是一个解释,内容和原因的脚本。 我需要一些东西来替换getCurrCode()函数。

$accepted_currencies = array('USD','EUR');
$locale = Locale::acceptFromHttp($_SERVER['HTTP_ACCEPT_LANGUAGE']);
if( ! empty($locale)){
    Locale::setDefault($locale);
    $currency = getCurrCode();
    if( ! in_array($currency, $accepted_currencies)){
        $currency = 'USD';
    }
}else{
    Locale::setDefault('en_US');
}

$fmt = new NumberFormatter( $locale, NumberFormatter::CURRENCY );
$price = $fmt->formatCurrency(1234567.891234567890000, $currency);

我知道,我可以使用setlocale(LC_MONETARY, $locale);,但这意味着我必须将所有语言环境安装到Linux上,并处理Linux发行版的变化。那么首先使用Intl会有什么意义呢?

1 个答案:

答案 0 :(得分:11)

将区域设置设置为NumberFormatter后,您可以使用

获取货币代码
$formatter = new NumberFormatter('de_DE', NumberFormatter::CURRENCY);
echo $formatter->getTextAttribute(NumberFormatter::CURRENCY_CODE);

$formatter = new NumberFormatter('en_US', NumberFormatter::CURRENCY);
echo $formatter->getTextAttribute(NumberFormatter::CURRENCY_CODE);

$formatter = new NumberFormatter('ja_JP', NumberFormatter::CURRENCY);
echo $formatter->getTextAttribute(NumberFormatter::CURRENCY_CODE);

以上将给出欧元,美元和日元。