В 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);
Также не делайте перевод и всегда возвращайте $.
К сожалению, это не так просто, как должно быть, но вот как получить символ валюты по коду валюты для локали:
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
Возможно, не лучшее решение, но вы всегда можете сделать что-то вроде …
$obj = new \NumberFormatter( 'en_us', \NumberFormatter::CURRENCY);
$formattedValue = $obj->formatCurrency( 0, 'EUR');
$currencySymbol = trim(str_replace('0.00','',$formattedValue));
Важно использовать локаль и значение, где вы знаете ожидаемый формат вывода (например, en_us и 0,00), и затем вы можете правильно выбрать символ валюты.
Примечание: это может потребовать некоторой корректировки для определенных валют