jekyll 中的区域设置特定日期

Posted

技术标签:

【中文标题】jekyll 中的区域设置特定日期【英文标题】:Locale specific date in jekyll 【发布时间】:2012-05-29 17:00:06 【问题描述】:

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

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

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

我找到了很多信息here,所以有一种方法可以指定所需的语言环境。但是你怎么能让 jekyll 尊重它呢?只需添加

default_locale: "lt"

_config.yml自然不行。

【问题讨论】:

【参考方案1】:

您可以使用 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

【讨论】:

【参考方案2】:

因为 i18n 在 github 页面上不可用,我建立在 @Kleo Petroff 的 answer 和 @Falc 的 answer 的基础上,我设置了一种在 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,liquid 默默地将该字符串转换为数字管道minus filter. During development it was not something I was aware and thus liquid didn't returned anything when passingmwith the value "6" tosite.data.fr.months[m]`时,我只在查看Falc答案时看到了技巧。

【讨论】:

【参考方案3】:

使用来自 jekyll 支持的插件 page 的插件 i18n。

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

【讨论】:

如何指定 pt-BR 语言环境?也就是语言环境的区域部分? 只需指定“pt-BR”而不是“lt”,支持的语言环境列表在这里:github.com/svenfuchs/rails-i18n/tree/master/rails/locale 液体异常:对象必须是日期、日期时间或时间对象。没有给出。在 _posts/2012-09-15-test.html.evn:ruby 2.0 ,jekyll-newest 这是一年前的答案,也许有些改变。【参考方案4】:

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

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

代码和用法可在 repo oncleben31/jekyll-date-basic-i18n 上找到。

在我的博客中与回购oncleben31/oncleben31-cc 中提供的 Jekyll 源集成的示例。查看 post.htmlhome.html 的布局。

【讨论】:

它适用于 github 页面,是我找到的最佳解决方案【参考方案5】:

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

【讨论】:

【参考方案6】:

您还可以在 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】:

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

【讨论】:

【参考方案8】:

基于@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

【讨论】:

以上是关于jekyll 中的区域设置特定日期的主要内容,如果未能解决你的问题,请参考以下文章

CultureInfo提供有关特定区域性的信息,包括区域性的名称语言简称书写系统使用的日历以及对日期和排序字符串的格式化字符串设置。

Javascript中的文化特定日期时间

html [Jekyll日期格式] Jekyll中的德国日期#jekyll

如何为 Android 中的日期和时间选择器对话框设置的特定时间和日期设置通知

html 通过Jekyll中的替换进行本地化日期

将Powershell中的输入/输出编码强制转换为特定的区域设置/代码页?