Русифицируем дату в Hugo

Когда я только переносил свой сайт на Hugo, я столкнулся со множеством мелких проблем. В частности, тогда мне захотелось внедрить более «человеческий формат» даты для своих заметок. Но вот беда: Hugo не умел нормально работать с несколькими языками (пока что ничего кардинально не изменилось). Корректно перевести дату на русский язык стандартными способами не получится. Пришлось писать костыль.

Главное, что нужно сделать — отображать месяца в виде существительного в родительном падеже (января, февраля, …).

Создаем в директории data нашего сайта новый файл rusdate.toml. В этот файл записываем названия месяцев по-русски, в родительном падеже:

rumonths = ["", "января", "февраля", "марта", "апреля", "мая","июня", "июля","августа", "сентября", "октября", "ноября", "декабря"]

Далее берём и ищем, где в нашей теме осуществляется вывод даты. Если вы писали тему самостоятельно, то это не должно вызвать особых сложностей. В случае, если использовалась сторонняя тема из официального репозитория, то тут всё несколько сложнее. Вам нужно найти, где в шаблонах находится код, отвечающий за вывод даты. Если слабо знакомы с устройством Hugo тем, то можно поискать внутри файлов по ключевым словам time, date, datetime. Только будьте осторожны, делайте бекапы изменений. Напоследок, ещё раз внимательно просмотрите шаблоны и убедитесь, что других упоминаний даты в файлах темы нет.

В моём случае, я сам писал тему и прекрасно представляю её устройство. Дата в моей теме хранится в специально отведённом шаблоне datetime.html. Всё, что мне остаётся, так это заменить прежний формат на новый:

<time datetime="{{ .Date.Format "01-02-2006 15:04:05" }}" pubdate>{{ .Date.Day }} {{ index $.Site.Data.rusdate.rumonths .Date.Month }} {{ .Date.Year }} {{.Date.Format "15:04"}}</time>

Кратко разберём что здесь происходит: Hugo заменяет стандартное значение месяца на аналогичное по счёту значение из дата-файла rusdate.toml, из массива данных rumoths, где хранятся русские названия месяцев в родительном падеже. Если подумать, это решение можно без проблем применять не только для дат.

В итоге получается что-такое: 10 марта 2016 23:35.