Php获取LC_MONETARY的当前区域设置

时间:2011-02-22 06:20:02

标签: php locale

我正在使用此代码显示当前区域设置中的金额。

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

我的问题是,如何查看LC_MONETARY的当前值?如果我做一个简单的回显,那么值看起来是一样的,我找不到任何getlocale函数。

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

更新:LC_MONETARY是受影响的功能类别,因此值是相同的。但是,如何查看当前的区域设置信息?

3 个答案:

答案 0 :(得分:18)

$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 :(得分:1)

常量LC_MONETARY的值永远不会改变。使用setlocale(LC_MONETARY, ...)设置区域设置时,您不会更改LC_MONETARY常量,而是设置“货币”类别的区域设置。此区域设置在后台进行,并且在外部不可见。 LC_MONETARY常量只是该类别的标识符。

通常您不需要知道当前设置的内容。您只需在需要时设置所需的区域设置。

答案 2 :(得分:0)

查看localeconv()函数(http://www.php.net/manual/en/function.localeconv.php):

print_r(localeconv());

输出(取决于您使用setlocale()设置的内容):

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;

    // ...
}