Я пытаюсь установить локаль 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.
Локаль существует, но по какой-то причине неверна.
У кого-то есть идея, чтобы помочь мне?
Я хотел бы понять, почему это происходит.
Спасибо
Windows и Unix используют разные коды локали. Также некоторые локали могут быть не установлены в системе. Это делает setlocale
функция не легко переносима.
Руководство для Setlocale предупреждает о возможных причинах отказа:
Возвращает новую текущую локаль или FALSE, если функционал локали
не реализован на вашей платформе, указанная локаль
существует или имя категории недействительно.
Вам следует проверить возвращаемое значение и попробовать обходной путь, если локаль недоступна.
Обновить
Что касается вашей проблемы, когда setlocale
вызов успешен, но не влияет на региональные настройки, я нашел это сообщение об ошибке с won't-fix
статус. В комментариях к ошибке функция обычно описывается как непредсказуемая. Одной из возможных причин сбоя является то, что он не является поточно-ориентированным. Есть и еще один аналог сообщение об ошибке помечены как дубликаты Интересно, что список обоих репортеров Windows 7
как их платформа.
Других решений пока нет …