Русские даты в Hugo

· автор BaRoN! · На чтение уйдёт 2 минуты · (287 слов)

Хотел бы рассказать о сложной судьбе Hugo. Как известно, переехал на него я со сверхнавороченного Drupal, который реально мог делать всё, что угодно. А hugo не настолько навороченный. Да, собственно, и go - не настолько навороченный язык, чтобы поддерживать своей базовой библиотекой множество локалей. Нетрудно догадаться, пришлось всё делать самостоятельно. Более того, пришлось самостоятельно писать костыли. Об этом я и поведаю.

Самая простая настройка - это настройка форматов даты. В частности, надо сделать:

date: 2 January 2006
datetime: 2 January 2006, в 15:04:05
time: 15:04:05

Но язык будет английским, а хочется русского. Значит, будем делать самостоятельно. Заведём в каталоге data новый файл с данными и назовём его Months.toml. Если ближе YAML - можно и YAML, непринципиально. В файл запишем названия месяцев по-русски, в разных падежах:

months_rod  = [ "", "января", "февраля", "марта", "апреля", "мая", "июня", "июля", "августа", "сентября", "октября", "ноября", "декабря" ]
months_camel = [ "", "Январь", "Февраль", "Март", "Апрель", "Май", "Июнь", "Июль", "Август", "Сентябрь", "Октябрь", "Ноябрь", "Декабрь" ]
months_small = [ "", "январь", "февраль", "март", "апрель", "май", "июнь", "июль", "август", "сентябрь", "октябрь", "ноябрь", "декабрь" ]

Уже непллохо. Далее берём и ищем, где в нашей теме осуществляется вывод даты. Моя тема основана на hugo-bootstrap, форматирование даты там определяется в файле hugo-bootstrap/layouts/partials/modules/page/date.html, вот его-то мы и будем править. Других упоминаний даты в файлах темы нет, всё написано очень грамотно. Итак, вывод номера дня в месяце и номера года мы будем осуществлять в виде цифр, а месяц - в виде существительного в родительном падеже.

<time datetime="{{ .Date.Format "01-02-2006 15:04:05" }}">{{ .Site.Data.Strings.publishedon}} {{.Date.Day}} {{ index $.Site.Data.Months.months_rod .Date.Month }} {{.Date.Year}}, {{ .Date.Format .Site.Data.Formats.time }}</time>

То есть мы берём из списка Months.months_rod элемент под номером Date.Month и выводим его. Не так уж и сложно! Результат отличный, например: Опубликовано 3 июня 2016, 00:34:45.

Полезное