Как получить валюту по умолчанию из PHP Intl (библиотека ICU) - PullRequest
4 голосов
/ 30 ноября 2011

Я использую PHP и хотел бы узнать, как получить валюту по умолчанию для локали через расширение Internationalization (Wrapper для библиотеки ICU)?

Ниже приведен сценарий, объясняющий, что и почему. Мне нужно что-то, чтобы заменить функцию 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 Ответ

11 голосов
/ 30 ноября 2011

После того, как вы задали Locale для 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);

Приведенное выше даст EUR, USD и JPY.

...