Даты и периоды

Даты не переводятся моделью — их формируют из частей. Для диапазонов есть готовый хелпер:

use mrLexndr\Translate\DateHelper;

echo DateHelper::formatRange('2026-03-01', '2026-03-09');

Он разбирает обе даты, собирает читаемый период и берёт название месяца из словаря на языке текущей страницы.

Некорректная дата на входе не роняет страницу: метод вернёт пустую строку.

Откуда берутся названия месяцев

Из словаря, по кодам вида MONTH_SHORT_1, MONTH_SHORT_2 и так далее. Если кода нет, он заводится с русским названием, и дальше вы переводите его как обычную фразу.

Отсюда одна особенность, о которой стоит знать заранее: эти коды собираются в коде из номера месяца, а значит индексатор их не видит. Двенадцать фраз будут постоянно числиться неиспользуемыми и попадать в список кандидатов на удаление в «Мусорщике». Удалять их нельзя.

Это общее свойство динамических кодов, не особенность дат — см. Индексация.

Если нужен свой формат

Хелпер решает одну частую задачу — период вида «1–9 марта». Всё остальное собирайте сами из фраз словаря, по тому же принципу: не склеивайте предложение из кусков, а заводите фразу целиком с подстановками.

// Плохо: в другом языке порядок слов другой
LANG_VAR('FROM') . ' ' . $a . ' ' . LANG_VAR('TO') . ' ' . $b;

// Хорошо: фраза «с #FROM# по #TO#» переводится целиком
LANG_VAR('PERIOD', ['#FROM#' => $a, '#TO#' => $b]);

Подробнее про подстановки — Lang::get и LANG_VAR.