Использование setLocale(LC_TIME) для локализации названий недель/месяцев на веб-сайте

У меня есть сайт, который поддерживает эти 5 языков:

  • английский
  • Французский
  • Немецкий
  • итальянский
  • испанский язык

Пользователи могут переключаться между языками по своему усмотрению. У меня есть страница, которая отображает месяц даты недели в тексте, например:

Понедельник, 12 января

Мой код для этого:

setlocale(LC_TIME, $_SESSION['lang'] . "_" . strtoupper($_SESSION['lang']));

foreach($data['Location']['Day'] as $key => $val) {
  $date = strftime("%A %e, %B", strtotime($val['@attributes']['val']));
  $data['Location']['Day'][$key]['date'] = $date;
}

На локальном хосте, когда я переключаюсь между языками, неделя и месяц переключаются и работают нормально. Однако на сервере он всегда отображается для меня на английском языке. _SESSION['lang'] работает нормально и меняется, поэтому я не знаю, почему он не показывает французский язык, когда локаль должна быть fr_FR.

Может ли это быть из-за того, что на сервере не установлены локали? Или есть лучший способ локализовать эти строки?

РЕДАКТИРОВАТЬ: я также пытался добавить ".utf8" в вызов setlocale следующим образом:

setlocale(LC_TIME, $_SESSION['lang'] . "_" . strtoupper($_SESSION['lang']) . ".utf8");

Но это тоже не сработало (не сработало ни на локальном хосте, ни на сервере)


person dan2k3k4    schedule 10.10.2013    source источник


Ответы (1)


Хорошо, я только что узнал о команде locale -a, которая дает список установленных локалей. На моем локальном хосте у меня было все установлено (и я заметил, что делал en_EN, но это все еще «работало»). В любом случае на сервере это был просто fr_CH (не знаю, для чего нужны C и POSIX), поэтому мой код для fr_FR был не работает, и я думаю, что все просто каким-то образом по умолчанию было на английском.

Я обнаружил, что мне пришлось вручную редактировать файл: /etc/locale.gen и раскомментировать нужные мне языки.

Затем мне пришлось сделать sudo locale-gen

Запустите команду locale -a, чтобы проверить список локалей.

Потом простой sudo /etc/init.d/apache2 restart и обновить страницу - работает :)

person dan2k3k4    schedule 10.10.2013
comment
Альтернативой вместо редактирования файла является запуск sudo apt-get install language-pack-XX, где XX — код вашего языка, de, fr и т. д. А затем перезапуск PHP, например, с помощью sudo service php7.0-fpm-sp restart Найдено по адресу: serverpilot.io/community/articles/how-to- install-locales.html - person Avatar; 11.11.2016