从区域设置中,我如何获取货币代码?

From the locale, how do I get the currency code?

PHP 有一个 intl 模块,它允许一些很酷的事情——比如在使用 NumberFormatter class 时获取货币符号。但这是一个巨大的假设——您已经有了要获取其符号的货币的货币代码。

如何获取任何特定区域设置的货币代码?

例如:en_gb => gbp, en_us => usd, es_es => eur

我这样做是为了在 ZendFramework 2 中使用 currencyFormat 视图助手:

$locale = 'en_gb'; //from get parameter
$symbol = 'GBP'; //How do get this?

$this->serviceManager
         ->get('viewhelpermanager')
         ->get('currencyFormat')
         ->setLocale($locale)
         ->setCurrencyCode($symbol);

根据 Get currency ISO 4217 code based on locale (thanks @avy 对评论中 link 的回答),

$locale = 'en_gb'; //from $_GET parameter

//get symbol for this locale
$symbol = \NumberFormatter::create(
    $locale,
    \NumberFormatter::CURRENCY
)->getTextAttribute(\NumberFormatter::CURRENCY_CODE);

//Add locale to currency formatter so we get correct symbol and formatting
$this->serviceManager
        ->get('viewhelpermanager')
        ->get('currencyFormat')
        ->setLocale($locale)
        ->setCurrencyCode($symbol);