Получить валютный код ISO 4217 на основе локали - PullRequest
2 голосов
/ 29 ноября 2010

Скажите, если я анализирую заголовок HTTP Accept-Language с Locale::acceptFromHttp, существует ли простой и надежный способ получения предпочтительной валюты пользователя на основе этого идентификатора локали?Как и «USD» для «en-US».

Я бы хотел, чтобы был способ сделать это с помощью PHP intl extension , но до сих пор не смог найти мой ответ в руководстве.Я видел, что Zend Framework может сделать это с Zend_Currency, но он слишком раздут для моего конкретного программного обеспечения.

Какие-нибудь другие библиотеки или способы достижения этого?Поскольку должно быть много идентификаторов локали, простой switch немного излишний.

Ответы [ 2 ]

1 голос
/ 16 ноября 2017

Немного поздно, но вы можете получить его с помощью \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;
    },
    []
);
1 голос
/ 14 ноября 2011

Вы можете сделать это как в PHP 4, так и в PHP 5, используя setlocale() и 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 полученного массива.

...