Для русификации вывода времени в PHP удобно пользоваться функцией setlocale. То есть если прописать в коде что-то вроде:

[cc lang=”php”]
setlocale(LC_ALL, “ru_RU.utf8″ );
echo strftime (‘%A, %d %B %G’);
[/cc]

то мы получим вывод Вторник, 31 Июль 2012 по русски, а не по английски. Это весьма и весьма удобно. Но иногда setlocale не работает. То есть вместо русских дат выводятся английские.

Возможная причина – на вашем хостинге – не установлены нужные локали. Если это шаред ( что маловероятно ) то нужно попросить саппорт установить нужные локали. Если это вдска или дедик –  то нужно проверить какие локали есть и установить необходимые.

Проверить установленные локали можно командой locale –a (  или удобнее locale –a | grep ru ). Если нужных локалей нет то их нужно установить. По дебиан это:

[cc lang=”php”]aptitude install locales[/cc]

– устанавливем пакеты локалей, если они не установлены

[cc lang=”php”]dpkg-reconfigure locales[/cc]

– выбираем и устанавливаем нужные локали. Я рекомендую выбрать только те что нужно. Если выбрать все, то установка их займет много времени, да и зачем они все нужны. Во втором окне нужно выбрать локаль по умолчанию. Я выбрал en_US.UTF-8.

Все, локали установлены, setlocale должен заработать.

1 августа 2012 |

Уже есть один комментарий к “Не работает setlocale() в PHP”

  1. Артур 14 июля, 2015

    Спасибо!

Есть что сказать по теме статьи? Пожалуйста - пишите!