Я использую PHP и хотел бы знать, как я могу получить валюту по умолчанию для локали через расширение интернационализации (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 в первую очередь?
После того, как вы установили 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.