Недавно изучал вопрос: как правильно переводить месяцы (в коротком и длинном варианте) в полях типа datetime в Drupal. Короткий ответ — через UI translation.
В настройках сайта вы можете задать множество используемых форматов для даты-времени, делается это вот тут:
/admin/config/regional/date-time
Далее, в шаблоне вы для соответствующего view mode можете выбрать нужный формат, в котором поле будет рендериться.
На определенном этапе возникает задача перевода форматированной даты. При этом Drupal создаёт заранее т.н. шаблоны перевода для наименований месяцев с пометками контекста ‘Long month name’ и ‘Abbreviated month name’.
Делается это в lib/Drupal/Core/Datetime/DateHelper.php.
Вы увидите на странице перевода интерфейса соответствующие значения:
Фактически, вам остаётся лишь выполнить перевод через UI translation (/admin/config/regional/translate), чтобы это начало работать. Drupal будет переводить наименования месяцев при рендере форматированных полей дата-время.
Для более сложных случаев вы можете заставить twig использовать нужный вам контекст вручную, например:
1 2 3 |
{% if content.field_news_date|render is not empty %} {{ node.field_news_date.value|date('M')|t([], { context: 'Abbreviated month name'}) }} {% endif %} |
Здесь я генерирую аббревиатуру месяца и использую фильтр t с указанием контекста.