Локализовать текущее время в PHP
-
07-07-2019 - |
Вопрос
Попытка отобразить текущее время с помощью PHP (используя это):
$date = date('m/d/Y h:i:s a', time());
echo $date;
Настолько просто, насколько это возможно.Как мне его локализовать?Я хочу перевести месяцы и дни на иврит.
Спасибо.
Решение
Zend_Date
полностью интернационализирован.Вы должны проверить это, чтобы найти простой способ сделать это:
Все полные и сокращенные названия месяцев и дней недели поддерживаются для более чем 130 языков.Методы поддерживают как ввод, так и вывод дат, используя локализованные названия месяцев и дней недели, в обычном формате, связанном с каждой локализацией.
Другие советы
На самом деле, я не думаю, что это вполне возможно в PHP 5.2 :-(
По крайней мере, не с тем, что поставляется в комплекте с / в PHP (Однако, как и в других ответах, существуют библиотеки, закодированные на PHP, которые вы могли бы использовать)
Однако с PHP 5.3 у вас есть Внутренний форматировщик класс, который делает именно то, что вы хотите :
Этот класс представляет дату отделения интенсивной терапии функциональность форматирования.Это позволяет пользователям отображать даты в локализованном формате или анализировать строки в 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 intl на PHP 5.2, однако, и получите ту же функциональность...
Если вам нужен более простой способ, чем Zend_Date и IntlDateFormatter, попробуйте стандартный strftime
функция в php.Вот что я сделал, чтобы запустить его с русским языком под управлением php 5.3 в Ubuntu (русская локаль не была установлена).
Для установки локали
cd /usr/share/locales
sudo ./install-language_pack ru_RU
sudo dpkg-reconfigure locales
- Перезапустить Apache
Затем используйте следующий фрагмент php:
setlocale(LC_TIME, 'ru_RU.UTF-8');
echo strftime('%A', time());
Следует вывести сегодняшний день недели.