2010-11-28 9 views
2

Dites, si j'analyse l'en-tête HTTP Accept-Language avec Locale::acceptFromHttp, existe-t-il un moyen simple et fiable d'obtenir la devise préférée de l'utilisateur en fonction de cet identificateur de paramètres régionaux? Comme "USD" pour "en-US".Get devise Code ISO 4217 basé sur les paramètres régionaux

Je souhaite qu'il y avait un moyen de le faire avec PHP intl extension mais jusqu'ici n'a pas pu trouver ma réponse dans le manuel. J'ai vu Zend Framework faire ça avec Zend_Currency mais c'est trop gonflé pour mon logiciel en particulier.

D'autres bibliothèques ou moyens d'y parvenir? Comme il doit y avoir beaucoup d'identificateurs de locale, un simple switch est un peu exagéré.

Répondre

1

Vous pouvez le faire à la fois PHP 4 et PHP 5 en utilisant setlocale() et localeconv():

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

print_r(localeconv()); 

Exemple de sortie:

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 
     ) 

) 

Le code ISO 4217 est contenu dans la clé int_curr_symbol du tableau résultant.

1

Un peu en retard, mais vous pouvez l'obtenir avec \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; 
    }, 
    [] 
); 
Questions connexes