Jekyll中的区域特定日期

28

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

默认配置中有页面存档,其中所有帖子都按帖子日期的年份和月份分组列出。 目前月份以英语显示。 我查看了代码,下面是负责放置日期的摘录:

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

我在这里找到了很多信息,因此有一种方法可以指定所需的语言环境。但是如何让jekyll遵守它?只需添加

default_locale: "lt"

_config.yml 中自然无法工作。

9个回答

23

您可以使用 Liquid 日期格式覆盖当前月份:

{% 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


15
因为 GitHub Pages 上不支持国际化(i18n),所以我在 @Kleo Petroff 的 回答 和 @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月的数字实际上是"6"而不是6。当piping minus 过滤器时,Liquid会自动将该字符串转换为数字。 在开发过程中,我没有意识到这一点,因此当将值为“6”的m传递给site.data.fr.months[m]时,Liquid没有返回任何内容,只有在查看Falc的答案时才发现了这个技巧。

9

以下是我基于之前的解决方案而无需插件创建的包含参数的代码:{% translated_date.html ... %}

这个想法是使用日期过滤器语法(例如:“%A%-d%B%Y”)翻译月份和日期名称,并遵守格式。用于翻译的字符串存储在_data中的yaml文件中。

有关代码和用法,请参见存储库oncleben31 / jekyll-date-basic-i18n

以下是我的博客在Jekyll源代码中的集成示例,可在存储库oncleben31 / oncleben31-cc中查看布局post.htmlhome.html


1
它可以与Github Pages一起使用,是我找到的最佳解决方案。 - abumalick

9

使用 jekyll 支持的插件 i18n。可以从 page 中下载插件。

请注意,github pages 不支持本地插件。参见相关问题


我该如何指定pt-BR语言环境?也就是说,语言环境的区域部分? - Alexandre Rademaker
在“lt”处指定“pt-BR”,支持的区域设置列表在此处:https://github.com/svenfuchs/rails-i18n/tree/master/rails/locale - mpiktas
Liquid 异常:对象必须是日期、日期时间或时间对象。给定了 nil。在 _posts/2012-09-15-test.html.evn:ruby 2.0,jekyll-newest。 - Mithril
这是一年前的答案,可能有些变化了。 - mpiktas

3

我开始使用@mpictas建议的i18n插件,但当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>

3
您也可以像下面这样在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 }}

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>

然后在、、中:
january: January
february: February
march: March
april: April
may: May
june: June
july: July
august: August
september: September
october: October
november: November
december: December

1

我正在进行完全自动化的翻译,以便在GitHub页面上工作(无需插件)。我修改了之前的答案,作为我所需要的第一个近似解决方案:

{{ page.date | date: "%-d" }}
{% assign m = page.date | date: "%-m" | minus: 1 %}
{{ site.data.ui-text[site.locale].months[m] }}
{{ page.date | date: "%Y" }}

在 _config.yml 文件中,您可以设置默认的站点语言环境,就像我的情况一样:
locale: "es-ES"

在_data文件夹中,我有一个YAML文件(ui-text.yaml),其中包含:

# English (default)
# -----------------
en: &DEFAULT_EN
  months: 
    - January 
    - February 
    - March 
    - April 
    - May 
    - June 
    - July
    - August 
    - September 
    - October 
    - November 
    - December

en-US:
  <<: *DEFAULT_EN

# Spanish
# -------
es: &DEFAULT_ES

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

es-ES:
  <<: *DEFAULT_ES

# french
# -------
fr: &DEFAULT_FR
months:
    - Janvier
    - Février
    - Mars
    - Avril
    - Mai
    - Juin
    - Juillet
    - Aout
    - Septembre
    - Octobre
    - Novembre
    - Décembre

1

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

<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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接