以 jekyll 为单位的区域设置特定日期



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

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

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

我在这里找到了很多信息,因此有一种方法可以指定所需的区域设置。但是你怎么能让杰基尔尊重它呢?只需添加

default_locale: "lt"

_config.yml自然是行不通的。

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

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

因为 i18n 在 github 页面上不可用,所以我在 @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,液体在管道minus过滤器时默默地将该字符串转换为数字。在开发过程中,我并没有意识到这一点,因此在将值为"6"的m传递给site.data.fr.months[m]时,液体没有返回任何内容,我只是在查看 Falc 答案时才看到技巧。

从 jekyll 支持的插件页面使用插件 i18n。

请注意,github页面不支持本地插件。请参阅相关问题。

轮到我分享我的解决方案,没有受前面插件启发的解决方案:我创建了一个包含一些参数,例如:{% translated_date.html ... %}

这个想法是使用日期过滤器语法(例如:"%A %-d %B %Y"(翻译符合格式的月份和日期名称。用于翻译的字符串位于 _data 中的 yaml 文件中。

存储库oncleben31/jekyll-date-basic-i18n上可用的代码和用法。

我的博客中与 repo oncleben31

/oncleben31-cc 中可用的 Jekyll 源集成的示例。查看布局post.htmlhome.html

我开始使用@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>

您也可以在 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 }}

您可以将@Falc答案与 jekyll-multi-language-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

根据@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

我正在对区域设置进行全自动翻译以在 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 中,您可以像我一样设置 de 默认站点区域设置:

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

最新更新