Как форматировать даты на основе локали? - PullRequest
5 голосов
/ 13 октября 2010

В шаблоне я отображаю день и месяц определенной даты:

<div class="jour"><?php echo date('d',strtotime($content->getCreatedAt())) ?></div>
<div class="mois"><?php echo date('M',strtotime($content->getCreatedAt())) ?></div>

Это работает нормально, проблема в том, что название месяца на английском языке.Где указать, что я хочу, чтобы названия месяцев были в другой локали, например, на французском?

Ответы [ 4 ]

5 голосов
/ 13 октября 2010

У Symfony есть помощник format_date среди помощников по дате, который поддерживает i18n.К сожалению, форматы плохо документированы, см. Ссылку , чтобы получить подсказку о них.

1 голос
/ 11 апреля 2012

Извините, что так поздно, но я хотел бы добавить свои собственные мысли здесь.Лучший международный формат даты, который я придумал, это "% e% b% Y", например, 9 марта 2012 года. Я считаю, что это гораздо более читабельно, чем формат ISO "% Y-% m-% d", например, 2012-03-09.Согласно документам, формат% x должен быть чувствительным к локали, но он не работает для меня, по крайней мере, на iPhone.Это может быть потому, что Safari не передает локаль в заголовках HTML, я не знаю.

1 голос
/ 13 октября 2010

default_culture применяется только для среды интернационализации Symfony, но не для встроенных функций PHP.Если вы хотите изменить этот параметр проекта в целом, я бы сделал это в config/ProjectConfiguration.class.php, используя setlocale, а затем используйте strftime вместо date:

// config/ProjectConfigration.class.php
setlocale(LC_TIME, 'fr_FR');

// *Success.php
<div class="jour"><?php echo strftime('%d',strtotime($content->getCreatedAt())) ?></div>
<div class="mois"><?php echo strftime('%b',strtotime($content->getCreatedAt())) ?></div>

Обратите внимание, что для этого необходимо, чтобы на вашем компьютере были включены региональные настройки.Чтобы проверить, выполните var_dump(setlocale(LC_ALL, 'fr_FR')); Если результат false, вы не можете использовать setlocale, чтобы сделать это, и, вероятно, вам нужно написать код перевода самостоятельно.Кроме того, вам нужно будет установить правильную локаль в вашей системе.Чтобы проверить, какие локали установлены, выполните locale -a в командной строке.

0 голосов
/ 06 июля 2014

Иногда полезно использовать массив с различными возможными значениями для setlocale (). Специально для поддержки различных сред (Windows, Linux, ...)

setlocale(LC_TIME, array('fr', 'fr_FR', 'fr_FR.utf8', 'french', 'french_FRANCE', 'french_FRANCE.utf8'));
echo strftime("%A %d %B", strtotime(date("Y-m-d")));

Как указано в документации:

Если языковой стандарт является массивом или сопровождается дополнительными параметрами, то каждый элемент или параметр массива пытаются установить в качестве нового языкового стандарта до успеха. Это полезно, если локаль известна под разными именами в разных системах или для обеспечения запасного варианта для возможно недоступной локали.

...