5

在 PHP 中,我知道货币代码(欧元、英镑、美元...),但我不知道语言环境。我需要为他们获取货币符号

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

2 回答 2

11

不幸的是,这并不像应有的那么容易,但这里是如何通过货币代码获取货币符号的语言环境:

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

于 2015-02-03T19:33:22.817 回答
-1

可能不是最好的解决方案,但你总是可以做类似...

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

重要的是使用您知道预期输出格式的语言环境和值(例如 en_us 和 0.00),然后您可以正确选择货币符号。

注意:这可能需要对某些货币进行一些调整

于 2015-01-28T14:57:59.300 回答