jekyll中的区域设置特定日期

时间:2012-05-23 07:01:32

标签: jekyll liquid date-formatting

我正在尝试jekyll来创建网站。我正在使用jekyll-bootstrap。

默认配置包含页面存档,其中列出的所有帖子按发布日期的年份和月份分组。目前这几个月用英文出现。我查看了代码,这是一个负责提交日期的摘录:

{% capture this_month %}{{ post.date | date: "%B" }}{% endcapture %}

我发现了很多信息here,因此有一种方法可以指定所需的区域设置。但你怎么能让杰奎尔尊重呢?只需添加

default_locale: "lt"
_config.yml中的

自然不起作用。

8 个答案:

答案 0 :(得分:17)

您可以使用Liquid Date Format:

覆盖当前月份
{% 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

答案 1 :(得分:9)

因为i18n在github页面上不可用,我建立在@Kleo Petroff的answer和@Falc的answer之上,我设置了一种方法来定义一个带有区域设置名称的日期YAML文件:

如果没有整个案例陈述,代码几乎相同:

{% 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月号码实际为"6"而不是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回答的诀窍

答案 2 :(得分:8)

使用jekyll支持的插件i18n中的插件page

请注意,github页面不支持本地插件。请参阅related issue

答案 3 :(得分:5)

轮到我分享我的解决方案,没有以前的灵感来自插件: 我创建了一个包含一些参数的包含:{% translated_date.html ... %}

我们的想法是使用日期过滤器语法(例如:“%A%-d%B%Y”)翻译关于格式的月份和日期名称。用于翻译的字符串位于_data中的yaml文件存储区中。

回购oncleben31/jekyll-date-basic-i18n上可用的代码和用法。

我的博客中集成的示例,其中包含repo oncleben31/oncleben31-cc中提供的Jekyll源代码。查看布局post.htmlhome.html

答案 4 :(得分:2)

我开始使用@mpictas建议的i18n插件,但是当Jekyll重新生成一个页面时,它开始打印"错误"而不是本地化的日期。所以我删除了插件并开始使用这个简单的代码,类似于" 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>

答案 5 :(得分:2)

您可以将@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

答案 6 :(得分:2)

您还可以在Ruby文件中编写自己的Liquid过滤器,如下所示:

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)

当您将此文件放入Jekyll网站的_plugins文件夹时,您可以像使用其他过滤器一样使用模板文件中的过滤器。

{{ post.date | german_long_month }}

答案 7 :(得分:0)

基于@Brice 的 answer,我想出了这个以西班牙语输出月份名称的解决方案。

<p class="post-meta">
    {% assign mes_index = page.date | date: "%-m" | minus: 1 %}
    {% assign mes = site.data.spanish.meses[mes_index] %}

    <time datetime="{{ page.date | date_to_xmlschema }}">
        {{ page.date | date: "%-d" }} de {{ mes }} de {{ page.date | date: "%Y" }}
    </time>
</p>

“Mes”在西班牙语中的意思是“月”。

_data/spanish.yml

meses:
  - Enero
  - Febrero
  - Marzo
  - Abril
  - Mayo
  - Junio
  - Julio
  - Agosto
  - Septiembre
  - Octubre
  - Noviembre
  - Diciembre