Windows — PHP setlocale существует, но это неправильно

Я пытаюсь установить локаль pt_BR в моем приложении.

Но по какой-то причине моя конфигурация числового формата все еще находится в неправильном формате.

Я попытался установить правильную локаль во многих отношениях:

setlocale(LC_ALL, 'pt_BR');
setlocale(LC_ALL, 'pt_BR.utf-8', 'pt_BR', 'portuguese', 'pt-br');
setlocale(LC_ALL, 'pt_BR.utf-8');
setlocale(LC_ALL, 'portuguese');

Но для всех них у меня есть десятичная точка с точкой. Правильное значение для этого на португальском — запятая. Это все тот же результат:

array (size=18)
'decimal_point' => string '.' (length=1)
'thousands_sep' => string '' (length=0)
'int_curr_symbol' => string '' (length=0)
'currency_symbol' => string '' (length=0)
'mon_decimal_point' => string '' (length=0)
'mon_thousands_sep' => string '' (length=0)
'positive_sign' => string '' (length=0)
'negative_sign' => string '' (length=0)
'int_frac_digits' => int 127
'frac_digits' => int 127
'p_cs_precedes' => int 127
'p_sep_by_space' => int 127
'n_cs_precedes' => int 127
'n_sep_by_space' => int 127
'p_sign_posn' => int 127
'n_sign_posn' => int 127
'grouping' =>
array (size=0)
empty
'mon_grouping' =>
array (size=0)
empty

Это происходит в моей локальной среде и на некоторых других компьютерах с Windows, которые я тестировал. Но в какой-то другой винде это работает. Все компьютеры под управлением Windows 7.
Я также тестировал в среде UNIX и хорошо работает. Проблема только для некоторых установок Windows.

Локаль существует, но по какой-то причине неверна.

У кого-то есть идея, чтобы помочь мне?
Я хотел бы понять, почему это происходит.

Спасибо

1

Решение

Windows и Unix используют разные коды локали. Также некоторые локали могут быть не установлены в системе. Это делает setlocale функция не легко переносима.

Руководство для Setlocale предупреждает о возможных причинах отказа:

Возвращает новую текущую локаль или FALSE, если функционал локали
не реализован на вашей платформе, указанная локаль
существует или имя категории недействительно.

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

Обновить

Что касается вашей проблемы, когда setlocale вызов успешен, но не влияет на региональные настройки, я нашел это сообщение об ошибке с won't-fix статус. В комментариях к ошибке функция обычно описывается как непредсказуемая. Одной из возможных причин сбоя является то, что он не является поточно-ориентированным. Есть и еще один аналог сообщение об ошибке помечены как дубликаты Интересно, что список обоих репортеров Windows 7 как их платформа.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]