Локализуйте текущее время в PHP - PullRequest
5 голосов
/ 14 сентября 2009

Попытка отобразить текущее время с помощью PHP (используя this ):

$date = date('m/d/Y h:i:s a', time());                      
echo $date;

Так просто, как только можно. Как мне это локализовать? Я хочу перевести месяцы и дни на иврит.

Спасибо.

Ответы [ 3 ]

8 голосов
/ 14 сентября 2009

Zend_Date полностью интернационализирован. Вы должны проверить это для простого способа сделать это:

Все полные и сокращенные названия поддерживаются месяцы и будни более 130 языков. методы поддерживать как вход, так и выход даты с использованием локализованных имен месяцы и будни, в обычный формат, связанный с каждая локаль.

5 голосов
/ 14 сентября 2009

На самом деле, я не думаю, что это вполне возможно в PHP 5.2: - (

По крайней мере, не с тем, что связано с / в PHP (Существуют библиотеки, закодированные в PHP, которые вы можете использовать, хотя, как указано в других ответах)


Однако в PHP 5.3 у вас есть класс IntlDateFormatter , который делает именно то, что вам нужно:

Этот класс представляет дату ICU функциональность форматирования. Это позволяет пользователи для отображения дат в локализованном форматировать или разбирать строки в PHP значения даты с использованием шаблонных строк и / или консервированные узоры.

Например, используя этот класс, например:

echo IntlDateFormatter::create('fr_FR', IntlDateFormatter::FULL, IntlDateFormatter::FULL)->format(time(time())) . "\n";
echo IntlDateFormatter::create('fr_FR', IntlDateFormatter::MEDIUM, IntlDateFormatter::SHORT)->format(time(time())) . "\n";

echo IntlDateFormatter::create('zh-Hant-TW', IntlDateFormatter::FULL, IntlDateFormatter::FULL)->format(time(time())) . "\n";
echo IntlDateFormatter::create('zh-Hant-TW', IntlDateFormatter::MEDIUM, IntlDateFormatter::SHORT)->format(time(time())) . "\n";

echo IntlDateFormatter::create('en_US', IntlDateFormatter::FULL, IntlDateFormatter::FULL)->format(time(time())) . "\n";
echo IntlDateFormatter::create('en_US', IntlDateFormatter::MEDIUM, IntlDateFormatter::SHORT)->format(time(time())) . "\n";

Вы получите:

dimanche 9 novembre 2008 23:54:47 GMT+00:00
9 nov. 2008 23:54
2008年11月9日星期日 下午11時54分47秒 GMT+00:00
2008/11/9 下午 11:54
Sunday, November 9, 2008 11:54:47 PM GMT+00:00
Nov 9, 2008 11:54 PM

Что выглядит довольно мило, не правда ли?

Печально то, что PHP 5.3 всего несколько месяцев, и он недоступен на многих хостинговых сервисах ... И потребует тестирования (и, возможно, исправлений) для вашего приложения ...


Подумайте об этом: возможно, вы сможете установить расширение PECL int на PHP 5.2, и получить ту же функциональность ...

2 голосов
/ 27 сентября 2010

Если вам нужен более простой способ, чем Zend_Date и IntlDateFormatter, попробуйте стандартную функцию strftime в php. Вот что я сделал, чтобы запустить его с русским языком, на котором установлена ​​PHP 5.3 в Ubuntu (русский язык не был установлен).

Для установки локали

  1. cd /usr/share/locales
  2. sudo ./install-language_pack ru_RU
  3. sudo dpkg-reconfigure locales
  4. Перезагрузите Apache

Далее используйте следующий фрагмент php:

setlocale(LC_TIME, 'ru_RU.UTF-8');
echo strftime('%A', time());

Должен выводить сегодняшний день недели.

...