2011-04-26 176 views
1

有没有办法编辑/更改localeconv()的默认区域设置?PHP更改区域设置?

我想使用money_format函数,它工作正常,但我的语言/地区的语言环境不正确。

更确切地说,对克罗地亚来说,我们在数字之后使用货币符号,而不是像之前那样在本地值中设置?

有没有什么方法可以编辑?或者至少手动检查,更改值并将新值发送到setlocale()

工作在共享主机btw。

+0

的,什么是错http://php.net/manual/en/function.setlocale.php? – gd1 2011-04-26 13:38:03

+0

setlocale没有错。只是它只接受语言字符串作为参数。因此为我的语言加载不正确的默认值 – ZolaKt 2011-04-26 13:44:11

+0

您是否看过i18n PHP扩展? – Ethan 2011-04-26 14:28:23

回答

1

如果有人有兴趣,我使用我自己替换的money_format()函数工作。 它基本上与添加的参数从here粘贴复制的forceRight无空间

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()与货币符号无关,您可能意思是money_format(),但是......好吧 - 只需使用number_format()并将所需的任何货币符号追加到返回值中。

+0

是的...对不起... money_format()...虐待编辑 – ZolaKt 2011-04-26 14:08:54

+0

我觉得不幸只是让我自己的money_format函数,它接受像$ foreceSymbolRight等 – ZolaKt 2011-04-26 14:09:53