2011-02-22 4 views
2

このコードを使用して、現在のロケールに金額を表示しています。PHPはLC_MONETARYの現在のロケールを取得します

setlocale(LC_MONETARY, 'it_IT'); 
echo money_format('%i', $number); 

私の質問は、私はLC_MONETARYの現在の値を見ることができるか、でしょうか?私が単純なエコーを行う場合、値は同じように見え、私はgetl​​ocale関数を見つけることができません。

echo LC_MONETARY; 
setlocale(LC_MONETARY, 'it_IT'); 
echo LC_MONETARY; 

更新:LC_MONETARYは、影響を受ける関数のカテゴリであり、値が同じであることを意味します。しかし、どうすれば現在のロケール情報を見ることができますか?

答えて

17
$oldLocale = setlocale(LC_MONETARY, 'it_IT'); 
// setlocale() will return the old value if the locale could 
// be set (return value greatly depends on the system's underlying 
// setlocale() implementation) 

$oldLocale = setlocale(LC_MONETARY, '0'); 
// using '0' as the locale-argument will result in the current setting 
//being returned without affecting the locale setting itself 

setlocale()ドキュメントの$localeパラメータの注を参照してください。

+1

「0」か「0」かどうか疑問に思います。とにかくドキュメントを正しく読むために+1してください。 :) *必ずしも*古いロケールを返すわけではありませんが、私は最初もそれを誤読しています。 – deceze

+0

「0」という別名「0」は「偽」(「NULL」または空の文字列「 '」と解釈されるため)という文字列「0」を使用することが重要です。 ')は同じ動作を引き起こさないでしょう。それは環境に応じてロケールを設定します。しかし、これもシステムに依存する可能性があると私は考えています。 –

1

定数LC_MONETARYの値は決して変更されません。 setlocale(LC_MONETARY, ...)のロケールを設定するときに、LC_MONETARYの値を変更していない場合は、「通貨」カテゴリのロケールを設定しています。このロケール設定はバックグラウンドで行われ、外側には表示されません。 LC_MONETARY定数は、カテゴリの単なる識別子です。

通常、現在設定されているものを知る必要はありません。必要に応じて、必要なロケールを設定するだけです。 (あなたがsetlocale()と設定内容に応じて)

print_r(localeconv()); 

出力::

+0

$ previousLocaleは新しい現在のローカルを返します – danidacar

+0

@danip悪い、誤ったドキュメント。 – deceze

0

localeconv()機能(http://www.php.net/manual/en/function.localeconv.php)を見てください

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 
     ) 

) 

について、あなたはおそらく気にします主なものはありますint_curr_symbolの結果。

$data = localeconv(); 
$symbol = $data['int_curr_symbol']; 

switch($symbol){ 
    case 'EUR': 
     // Euro 
     break; 

    case 'USD': 
     // US Dollars 
     break; 

    // ... 
} 
関連する問題