Как получить символ валюты по коду валюты из PHP Intl (библиотека ICU)

В PHP я знаю коды валют (EUR, GBP, USD …), но я не знаю локали.
Мне нужно получить символ валюты для них

GBP -> £
EUR -> €
USD -> $

С помощью

$obj = new \NumberFormatter( null, \NumberFormatter::CURRENCY);
echo $obj->formatCurrency( null, 'EUR');

Я могу получить € 0,00, поэтому библиотека NumberFormatter может конвертировать код валюты в символ валюты.
Но как получить только символ валюты?

$obj = new \NumberFormatter( null, \NumberFormatter::CURRENCY);
$obj->setTextAttribute ( \NumberFormatter::CURRENCY_CODE, 'EUR');
echo $obj->getSymbol ( \NumberFormatter::CURRENCY_SYMBOL);

Также не делайте перевод и всегда возвращайте $.

4

Решение

К сожалению, это не так просто, как должно быть, но вот как получить символ валюты по коду валюты для локали:

function getCurrencySymbol($locale, $currency)
{
// Create a NumberFormatter
$formatter = new NumberFormatter($locale, NumberFormatter::CURRENCY);

// Prevent any extra spaces, etc. in formatted currency
$formatter->setPattern('¤');

// Prevent significant digits (e.g. cents) in formatted currency
$formatter->setAttribute(NumberFormatter::MAX_SIGNIFICANT_DIGITS, 0);

// Get the formatted price for '0'
$formattedPrice = $formatter->formatCurrency(0, $currency);

// Strip out the zero digit to get the currency symbol
$zero = $formatter->getSymbol(NumberFormatter::ZERO_DIGIT_SYMBOL);
$currencySymbol = str_replace($zero, '', $formattedPrice);

return $currencySymbol;
}

Протестировано с локалями: ar, cs, da, de, en, en_GB, en_US, es, fr, fr_CA, he, it, ja, ko, nb, nl, ru, sk, sv, zh

Протестировано с валютами: AUD, BRL, CAD, CNY, EUR, GBP, HKD, ILS, INR, JPY, KRW, MXN, NZD, THB, TWD, USD, VND, XAF, XCD, XOF, XPF

9

Другие решения

Возможно, не лучшее решение, но вы всегда можете сделать что-то вроде …

$obj = new \NumberFormatter( 'en_us', \NumberFormatter::CURRENCY);
$formattedValue = $obj->formatCurrency( 0, 'EUR');
$currencySymbol = trim(str_replace('0.00','',$formattedValue));

Важно использовать локаль и значение, где вы знаете ожидаемый формат вывода (например, en_us и 0,00), и затем вы можете правильно выбрать символ валюты.

Примечание: это может потребовать некоторой корректировки для определенных валют

-1

По вопросам рекламы [email protected]