Symfony2 → Twig, интернационализация даты
Иногда возникает потребность выводить дату в таком формате, когда месяц написан текстом, но при этом сайт многоязычный. Месяц, естественно, тоже должен соответствовать выбранной локали. Вот тут и возникает загвоздка, поскольку php-шная функция date выведет месяца на английском. Какой-нибудь крутокодер Вова Теплов создал бы массивчик с переведёнными месяцами и прошёлся бы простой заменой, поскольку некогда разбираться, надо делать тикеты. Но это не наш путь. Языков на сайте может оказаться пять штук, один из которых, допустим, арабский/корейский. Да и сами языки могут добавляться на сайт в будущем.
В общем, задача эта типовая и не надо ничего придумывать. Решение имеется уже готовое → IntlDateFormatter. Но решать эту задачу я буду в контексте Symfony 2.
Минута поиска в вендорских файлах и необходимое расширение twig-а обнаружено. Осталось его только подключить. Как это сделать через основной файл конфигурации, и можно ли это сделать вообще - этого мне найти не удалось. Подключим его так, будто это расширение самодельное:
1 2 3 4 5 6 7 | # Hypersoft/UltraBundle/Resources/config/services.yml
services:
twig_intl_extension:
class: Twig_Extensions_Extension_Intl
tags:
twig.extension:
name: twig.extension
|
После чего выводим дату в том виде, что нам надо. Результат выше на картинке.
1 2 3 | <div class="date">
{{ item.date|localizeddate('none', 'none', null, null, 'dd. LLLL YYYY') }}
</div>
|
Вот, собственно, и всё.
Комментарии
а то Вова Теплов может не сразу врубиться, что значат LLLL и чем они отличаются от LLL :)