Как заставить PHP использовать интернационализированные даты?

Я пытаюсь заставить PHP-даты работать на разных языках. Код языка будет предоставлен в соответствии с введенным языком пользователя.

Я думал, что смогу сделать это:

setlocale(LC_ALL, 'de_DE.UTF-8'); echo strftime('%A %B %Y'); 

Но выход:

 Wednesday April 2011 

Если бы я ожидал:

 Mittwoch April 2011 

(Апрель – то же самое на английском и немецком языках)

Разве это не правильный способ использования функции strftime ? Если нет, есть ли альтернативный метод?

setlocale () возвращает значение, которое может быть FALSE:

Возвращает новую текущую локаль или FALSE, если функциональность языкового стандарта не реализована на вашей платформе, указанная локаль не существует или имя категории недействительно.

Поэтому вам нужно проверить возвращаемое значение.

Имейте в de_DE.UTF-8 что имена de_DE.UTF-8 различаются в зависимости от платформы, а de_DE.UTF-8 выглядит как типичное имя Unix. Это сервер Unix? Если это так, убедитесь, что на компьютере установлен такой локаль.

Вы можете использовать класс IntlDateFormatter (PHP> = 5.3)

Цитируя пример, приведенный на странице руководства IntlDateFormatter::format() :

 $fmt = new IntlDateFormatter( "en_US" ,IntlDateFormatter::FULL,IntlDateFormatter::FULL,'America/Los_Angeles',IntlDateFormatter::GREGORIAN ); echo "First Formatted output is ".$fmt->format(0); $fmt = new IntlDateFormatter( "de-DE" ,IntlDateFormatter::FULL,IntlDateFormatter::FULL,'America/Los_Angeles',IntlDateFormatter::GREGORIAN ); echo "Second Formatted output is ".$fmt->format(0); 

Вывод:

 First Formatted output is Wednesday, December 31, 1969 4:00:00 PM PT Second Formatted output is Mittwoch, 31. Dezember 1969 16:00 Uhr GMT-08:00 

Похоже, что вам не хватает кода. Ответ можно найти здесь:
http://php.net/manual/en/function.setlocale.php

/ * попробуйте различные возможные имена локалей для german с PHP 4.3.0 * / $ loc_de = setlocale (LC_ALL, 'de_DE @ euro', 'de_DE', 'de', 'ge'); echo "Предпочтительная локаль для немецкого языка в этой системе – $ loc_de '";

?>

Ваше использование strftime () представляется правильным в соответствии с руководством. Я бы поставил под вопрос настройки setLocale ().

См. Здесь вопрос, очень похожий на ваш на другом форуме.