2

比如说,如果我解析 HTTP Accept-Language 标头,Locale::acceptFromHttp是否有一种简单可靠的方法可以根据此语言环境标识符获取用户的首选货币?就像“en-US”的“USD”。

我希望有一种方法可以使用 PHP intl 扩展来做到这一点,但到目前为止无法在手册中找到我的答案。我看到 Zend Framework 可以用 Zend_Currency 做到这一点,但它对于我的特定软件来说太臃肿了。

任何其他库或实现这一目标的方法?由于必须有很多语言环境标识符,所以简单switch的有点过分了。

4

2 回答 2

1

您可以在 PHP 4 和 PHP 5 中使用setlocale()and执行此操作localeconv()

$locale = Locale::acceptFromHttp($_SERVER['HTTP_ACCEPT_LANGUAGE']);
setlocale(LC_MONETARY, $locale);

print_r(localeconv());

样本输出:

Array
(
    [decimal_point] => .
    [thousands_sep] =>
    [int_curr_symbol] => EUR
    [currency_symbol] => €
    [mon_decimal_point] => ,
    [mon_thousands_sep] =>
    [positive_sign] =>
    [negative_sign] => -
    [int_frac_digits] => 2
    [frac_digits] => 2
    [p_cs_precedes] => 1
    [p_sep_by_space] => 1
    [n_cs_precedes] => 1
    [n_sep_by_space] => 1
    [p_sign_posn] => 1
    [n_sign_posn] => 2
    [grouping] => Array
        (
        )

    [mon_grouping] => Array
        (
            [0] => 3
            [1] => 3
        )

)

ISO 4217 代码包含在结果数组的int_curr_symbol键中。

于 2011-11-14T14:38:08.077 回答
1

有点晚了,但你可以得到它\NumberFormatter

<?php

$currencyPerLocale = array_reduce(
    \ResourceBundle::getLocales(''),
    function (array $currencies, string $locale) {
        $currencies[$locale] = \NumberFormatter::create(
            $locale,
            \NumberFormatter::CURRENCY
        )->getTextAttribute(\NumberFormatter::CURRENCY_CODE);

        return $currencies;
    },
    []
);
于 2017-11-16T13:53:58.703 回答