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

Обсуждение других вопросов связанных с веб-разработкой
tank5400
Сообщения: 3
Зарегистрирован:
21 авг 2015, 13:06

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

tank5400 » 21 авг 2015, 13:15

Всем привет. Обнаружил проблему. Если в файле php задать setlocale одним из значений "russian" "rus" "ru" "ru_RU" или "ru_RU.UTF-8" локаль не меняется на русскую. Наример, август выводится как august
Аватара пользователя
Максим
Сообщения: 5385
Зарегистрирован:
11 дек 2010, 20:29
Контактная информация:

Максим » 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

В скриптах можно указать только те локали (региональные стандарты) которые присутствуют в операционной системе.
tank5400
Сообщения: 3
Зарегистрирован:
21 авг 2015, 13:06

tank5400 » 21 авг 2015, 17:54

Максим писал(а):Может у вас 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 также не подходит
Аватара пользователя
Максим
Сообщения: 5385
Зарегистрирован:
11 дек 2010, 20:29
Контактная информация:

Максим » 21 авг 2015, 19:08

tank5400, значит ваш скрипт не использует strftime и выводит дату напрямую через date(). Используйте strftime для форматирования даты и времени с учетом локали.
tank5400
Сообщения: 3
Зарегистрирован:
21 авг 2015, 13:06

tank5400 » 22 авг 2015, 10:58

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

[upd=1440242036][/upd]
Просто непонятно, если open server - это имитация сервера, почему в нем отсутствуют локали, которые присутствуют на обычном стандартном хостинге. Можно было бы добавить их туда - и все бы работало
Аватара пользователя
Максим
Сообщения: 5385
Зарегистрирован:
11 дек 2010, 20:29
Контактная информация:

Максим » 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.
Ответить