Местная конкретная дата в jekyll
Я пытаюсь создать jekyll для создания сайта. Я использую jekyll-bootstrap.
Конфигурация по умолчанию имеет архив страниц, где все записи перечислены сгруппированы по годам и месяцам даты публикации. В настоящее время месяцы появляются на английском языке. Я просмотрел код, и это выдержка, которая отвечает за установку даты:
{% capture this_month %}{{ post.date | date: "%B" }}{% endcapture %}
Я нашел много информации здесь, поэтому есть способ указать желаемый язык. Но как вы можете заставить Джекиль уважать это? Просто добавив
default_locale: "lt"
in _config.yml
, естественно, не работает.
Ответы
Ответ 1
Вы можете перезаписать текущий месяц, используя формат жидкой даты:
{% assign m = page.date | date: "%-m" %}
{{ page.date | date: "%-d" }}
{% case m %}
{% when '1' %}Januar
{% when '2' %}Februar
{% when '3' %}März
{% when '4' %}April
{% when '5' %}Mai
{% when '6' %}Juni
{% when '7' %}Juli
{% when '8' %}August
{% when '9' %}September
{% when '10' %}Oktober
{% when '11' %}November
{% when '12' %}Dezember
{% endcase %}
{{ page.date | date: "%Y" }}
Если ваша дата, например 2015-02-20, будет равна 20 Februar 2015
Ответ 2
Использовать плагин i18n из поддерживаемых jekyll плагинов страница.
Обратите внимание, что страницы github не поддерживают локальные плагины. См. связанная с этим проблема.
Ответ 3
Поскольку i18n недоступен на страницах github, я построил на ответ @Kleo Petroff и answer @Falc, я установил способ иметь дату с именами локалей, определенными в файле YAML:
Этот код почти одинаковый без всего оператора case:
{% capture i18n_date %}
{{ page.date | date: "%-d" }}
{% assign m = page.date | date: "%-m" | minus: 1 %}
{{ site.data.fr.months[m] }}
{{ page.date | date: "%Y" }}
{% endcapture %}
Я установил следующую структуру данных (может быть в _config.yml
или в некотором _data/some.yml
файле), в приведенном выше коде файл _data/fr.yml
:
months:
- Janvier
- Février
- Mars
- Avril
- Mai
- Juin
- Juillet
- Aout
- Septembre
- Octobre
- Novembre
- Décembre
Обратите внимание, что page.date | date: "%-m"
выводит номер месяца как строку , т.е. номер на самом деле "6"
not 6
, жидкий молча передает эту строку в число > когда трубопровод minus filter.
During development it was not something I was aware and thus liquid didn't returned anything when passing
m with the value "6" to
site.data.fr.months [m] `, я видел только трюк при просмотре ответа Falc.
Ответ 4
Моя очередь делиться своим решением без плагина, вдохновленного предыдущими:
Я создал include с некоторыми параметрами, например: {% translated_date.html ... %}
Идея состоит в том, чтобы перевести имена месяцев и дней в формат, используя синтаксис фильтра даты (например: "% A% -d% B% Y" ). Строки, используемые для перевода, хранятся в файлах yaml файлов в _data
.
Код и использование, доступные на репо oncleben31/jekyll-date-basic-i18n.
Пример интеграции в моем блоге с источниками Jekyll, доступными в репо oncleben31/oncleben31-cc. Посмотрите на макеты post.html
и home.html
.
Ответ 5
Я начал использовать плагин i18n, предложенный @mpictas, но когда Jekyll восстанавливает страницу, он начинает печатать "error" вместо локализованная дата. Поэтому я удалил плагин и начал использовать этот простой код, похожий на решение "case/when":
{% assign months = "Enero|Febrero|Marzo|Abril|Mayo|Junio|Julio|Agosto|Septiembre|Octubre|Noviembre|Diciembre" | split: "|" %}
{% assign m = page.date | date: "%-m" | minus: 1 %}
{% assign day = page.date | date: "%d" %}
{% assign month = months[m] %}
{% assign year = page.date | date: "%Y" %}
<span class="date">{{ day }}/{{ month }}/{{ year }}</span>
Ответ 6
Вы также можете написать собственный жидкостный фильтр в файле Ruby, например:
module DateFilter
MONTHS = %w(Januar Februar März April Mai Juni July August September Oktober November Dezember)
def german_long_month(input)
MONTHS[input.strftime("%m").to_i - 1]
end
end
Liquid::Template.register_filter(DateFilter)
Когда вы помещаете этот файл в папку _plugins
вашего сайта Jekyll, вы можете использовать фильтр в вашем файле шаблона, как и другой фильтр.
{{ post.date | german_long_month }}
Ответ 7
Вы можете комбинировать ответ @Falc с jekyll-multiple-languages-plugin:
Просто используйте шаблон:
{% assign months = "january|february|march|april|may|june|july|august|september|october|november|december" | split: "|" %}
{% assign m = post.date | date: "%-m" | minus: 1 %}
{% assign day = post.date | date: "%d" %}
{% assign month = months[m] %}
{% assign year = post.date | date: "%Y" %}
<span class="post-meta">{{day}} {% t month %} {{year}}</span>
Затем в _i18n/en.yml
, .../pl.yml
, .../any-language.yml
:
january: January
february: February
march: March
april: April
may: May
june: June
july: July
august: August
september: September
october: October
november: November
december: December