Php получить текущую локаль для LC_MONETARY - PullRequest
2 голосов
/ 22 февраля 2011

Я использую этот код для отображения суммы в текущей локали.

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 ]

18 голосов
/ 22 февраля 2011
$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

См. Примечание для параметра $locale в документации setlocale().

1 голос
/ 22 февраля 2011

Значение константы LC_MONETARY никогда не изменится.При установке языкового стандарта с помощью setlocale(LC_MONETARY, ...) вы не изменяете константу LC_MONETARY, а устанавливаете языковой стандарт для «денежной» категории .Эта настройка локали происходит в фоновом режиме и не видна внешне.Константа LC_MONETARY - это просто идентификатор категории.

Обычно вам не нужно знать, что установлено в данный момент.Вы должны просто установить желаемый язык при необходимости.

0 голосов
/ 22 февраля 2011

Посмотрите на функцию 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;

    // ...
}
...