2011-04-26 6 views
1

est-il possible d'éditer/modifier les paramètres régionaux par défaut dans localeconv()?PHP modifier les paramètres régionaux?

Je voudrais utiliser la fonction money_format, et cela fonctionne très bien, mais les paramètres régionaux pour ma langue/région ne sont pas corrects.

Pour être plus précis, pour la Croatie, nous utilisons le symbole de la monnaie après le numéro, pas avant comme défini dans les valeurs locales?

Y a-t-il des façons de modifier cela? Ou au moins manuellement vérifier, modifier les valeurs et envoyer de nouvelles valeurs à setlocale()?

Travailler sur l'hébergement partagé btw.

+0

Et quel est le problème avec http://php.net/manual/en/function.setlocale.php? – gd1

+0

Il n'y a rien de mal avec setlocale. Seulement, il n'accepte que les chaînes de langue en tant que paramètre. Et donc charge les valeurs par défaut incorrectes pour ma langue – ZolaKt

+0

Avez-vous regardé dans l'extension PHP i18n? – Ethan

Répondre

1

Si quelqu'un est intéressé, je l'ai fait fonctionner avec mon propre remplacement de la fonction money_format(). Il est essentiellement copier-coller à partir here avec des paramètres ajoutés pour forceRight et NOSPACE

class Helper_Locales 
{ 
    public static function formatNumber($number, $isMoney=false, $forceRight=false, $noSpace=false) { 
     $lg = isset($lg) ? $lg : setlocale(LC_MONETARY, '0'); 
     $ret = setLocale(LC_ALL, $lg); 
     setLocale(LC_TIME, 'Europe/Paris'); 
     if ($ret===FALSE) { 
      echo "Language '$lg' is not supported by this system.\n"; 
      return; 
     } 
     $LocaleConfig = localeConv(); 
     forEach($LocaleConfig as $key => $val) $$key = $val; 

     // Sign specifications: 
     if ($number>=0) { 
      $sign = $positive_sign; 
      $sign_posn = $p_sign_posn; 
      $sep_by_space = $p_sep_by_space; 
      $cs_precedes = $p_cs_precedes; 
     } else { 
      $sign = $negative_sign; 
      $sign_posn = $n_sign_posn; 
      $sep_by_space = $n_sep_by_space; 
      $cs_precedes = $n_cs_precedes; 
     } 

     // Number format: 
     $n = number_format(abs($number), $frac_digits, 
      $decimal_point, $thousands_sep); 
     $n = str_replace(' ', ' ', $n); 
     switch($sign_posn) { 
      case 0: $n = "($n)"; break; 
      case 1: $n = "$sign$n"; break; 
      case 2: $n = "$n$sign"; break; 
      case 3: $n = "$sign$n"; break; 
      case 4: $n = "$n$sign"; break; 
      default: $n = "$n [error sign_posn=$sign_posn !]"; 
     } 

     // Currency format: 
     $currency_symbol = strtolower($currency_symbol); 
     $m = number_format(abs($number), $frac_digits, 
      $mon_decimal_point, $mon_thousands_sep); 
     if ($sep_by_space && !$noSpace) $space = ' '; else $space = ''; 
     if ($cs_precedes && !$forceRight) $m = "$currency_symbol$space$m"; 
     else $m = "$m$space$currency_symbol"; 
     $m = str_replace(' ', ' ', $m); 
     switch($sign_posn) { 
      case 0: $m = "($m)"; break; 
      case 1: $m = "$sign$m"; break; 
      case 2: $m = "$m$sign"; break; 
      case 3: $m = "$sign$m"; break; 
      case 4: $m = "$m$sign"; break; 
      default: $m = "$m [error sign_posn=$sign_posn !]"; 
     } 
     if ($isMoney) return $m; else return $n; 
    } 
} 
1

number_format() n'a rien à voir avec les symboles monétaires, vous avez probablement signifié money_format(), mais ... - il suffit d'utiliser number_format() et ajouter tout symbole devise à la valeur de retour.

+0

oui ... pardon ... money_format() ... ill éditer la question – ZolaKt

+0

je pense que je fais juste ma propre fonction money_format, qui accepte des paramètres supplémentaires comme $ foreceSymbolRight etc. – ZolaKt

Questions connexes