Местная конкретная дата в 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

Ответ 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