Intereting Posts
Как читать один файл внутри zip-архива Как преобразовать шестнадцатеричное значение в целое число со знаком в PHP? Различные результаты для модификатора unicode / multibyte и mb_ereg_replace Список раскрывающихся списков PHPExcel, которые зависят от Требуется ли htmlspecialchars () для вывода ALL? Обходной путь для suhosin.mt_srand.ignore для последовательного перетасовки массива в PHP? Проблема фрейма yii с объектами (2) Отключение нескольких полей ввода, если флажок установлен для динамических входов и повторно используется, если нет Настройка бродяг с отказом PuPHET Вставка нескольких элементов в один ID MySQL из флажка ввода PHP-формы Создание точек между символами со всеми возможностями инструкция mysqli- prepare с ошибкой «таблица не используется» Использование помощников HTML и форм в Laravel 5 REQUEST_URI неожиданно содержит полное доменное имя Разница между эхом и print_r в php?

Как отформатировать даты на основе языка?

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

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

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

У Symfony есть помощник format_date среди помощников Date, которые знают i18n. Форматы, к сожалению, плохо документированы, см. Эту ссылку для подсказки.

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 в командной строке.

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

Иногда полезно использовать массив с различными возможными значениями для 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("Ymd"))); 

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

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