2011-04-26 173 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