Как заставить PHP использовать интернационализированные даты? - PullRequest
5 голосов
/ 13 апреля 2011

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

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

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

Но вывод:

Wednesday April 2011

В то время как я ожидал:

Mittwoch April 2011

(апрель на английском и немецком языках одинаков)

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

Ответы [ 4 ]

5 голосов
/ 13 апреля 2011

Вы можете использовать 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
2 голосов
/ 13 апреля 2011

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

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

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

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

0 голосов
/ 13 апреля 2011

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

См. здесь для вопроса, очень похожего на ваш на другом форуме.

0 голосов
/ 13 апреля 2011

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

</p> <p>/* try different possible locale names for german as of PHP 4.3.0 */ $loc_de = setlocale(LC_ALL, 'de_DE@euro', 'de_DE', 'de', 'ge'); echo "Preferred locale for german on this system is '$loc_de'";</p> <p>?></p> <p>

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...