Страница 1 из 1

Отсутствует русская локаль

Добавлено: 21 авг 2015, 13:15
tank5400
Всем привет. Обнаружил проблему. Если в файле php задать setlocale одним из значений "russian" "rus" "ru" "ru_RU" или "ru_RU.UTF-8" локаль не меняется на русскую. Наример, август выводится как august

Добавлено: 21 авг 2015, 13:43
Максим
Может у вас Windows английская? Там русской локали нет, как бы вы её не включали. Если же русская локаль у вас есть, то под Windows вы её неверно включаете, потому что в Windows нет ru_RU или ru_RU.UTF-8. В русской винде к примеру есть такие значения:

LC_ALL=Russian_Russia.65001
LC_COLLATE=Russian_Russia.65001
LC_CTYPE=Russian_Russia.1251
LC_MONETARY=Russian_Russia.65001
LC_NUMERIC=Russian_Russia.65001
LC_TIME=Russian_Russia.65001

В скриптах можно указать только те локали (региональные стандарты) которые присутствуют в операционной системе.

Добавлено: 21 авг 2015, 17:54
tank5400
Максим писал(а):Может у вас Windows английская? Там русской локали нет, как бы вы её не включали. Если же русская локаль у вас есть, то под Windows вы её неверно включаете, потому что в Windows нет ru_RU или ru_RU.UTF-8. В русской винде к примеру есть такие значения:

LC_ALL=Russian_Russia.65001
LC_COLLATE=Russian_Russia.65001
LC_CTYPE=Russian_Russia.1251
LC_MONETARY=Russian_Russia.65001
LC_NUMERIC=Russian_Russia.65001
LC_TIME=Russian_Russia.65001

В скриптах можно указать только те локали (региональные стандарты) которые присутствуют в операционной системе.
нет windows 10 русская (до этого была windows 8, та же проблема). причем выгружал на обычный хостинг, выводится как положено.
LC_ALL=Russian_Russia.65001 также не подходит

Добавлено: 21 авг 2015, 19:08
Максим
tank5400, значит ваш скрипт не использует strftime и выводит дату напрямую через date(). Используйте strftime для форматирования даты и времени с учетом локали.

Добавлено: 22 авг 2015, 10:58
tank5400
Максим писал(а):tank5400, значит ваш скрипт не использует strftime и выводит дату напрямую через date(). Используйте strftime для форматирования даты и времени с учетом локали.
В том-то и дело, что скрипт выводит дату через strftime . Но почему-то такая проблема именно на open server.

[upd=1440242036][/upd]
Просто непонятно, если open server - это имитация сервера, почему в нем отсутствуют локали, которые присутствуют на обычном стандартном хостинге. Можно было бы добавить их туда - и все бы работало

Добавлено: 22 авг 2015, 16:03
Максим
tank5400 писал(а):LC_ALL=Russian_Russia.65001 также не подходит
Значит юникодная кодировка для локали под windows так и не работает (в php это давно). Используйте русскую Russian_Russia.1251:
echo ucfirst(strftime("%A %d %B %Y %X<br>"));
setlocale(LC_ALL,'Russian_Russia.1251');
echo ucfirst(strftime("%A %d %B %Y %X<br>"));

Результат:
Saturday 22 August 2015 17:01:14
Суббота 22 Август 2015 17:01:14
tank5400 писал(а):если open server - это имитация сервера, почему в нем отсутствуют локали
Open Server не имеет отношения к локалям, это всё зависит от операционной системы, в данном случае Windows.