本地化日期格式

在网站上发表帖子的时候,您可能想在网页上显示帖子的发布日期。既然有了日期,那也就有了日期格式的问题。世界各地使用的日期格式是不同的:中国惯用的是年/月/日的格式;欧洲的许多国家使用的却是日/月/年的格式;美国使用的是月/日/年的格式。一旦日期格式不统一,就容易造成歧义,比如 01/09/2020,许多欧洲人会读作 2020 年 9 月 1 日,可美国人就会看成 2020 年 1 月 9 日。因此,本地化的日期格式必不可少。接下来我们就来看如何让网站上的日期格式随同语言一起变化。

首先,将您要使用的每种日期格式转化为日期格式字符串。我在这里列出了一些常见的日期格式以及它们对应的格式字符串:

格式字符串 日期格式
%e %B %Y 1 September 2020
%A, %B %e, %Y Tuesday, September 1, 2020
%a %b %d, %Y Tue Sep 01, 2020
%F 2020-09-01
%m/%d/%Y 09/01/2020
%d/%m/%y 01/09/20

如果您需要的日期格式在这里没有列出,您可以在此处查阅所有的日期格式指示符。

确定了每种语言下的日期格式后,就可以将它们加入各语言所对应的 l10n.yml 文件中了。

site-root$ cat _data/en/l10n.yml
lang_name: "English"
title: "My Site"
date_format: "%b %e, %Y"
site-root$ cat _data/zh/l10n.yml
lang_name: "中文"
title: "本人的网站"
date_format: "%F"

适用于当前语言的日期格式字符串就可以通过 site.data.l10n.date_format 变量来读取了。如果要格式化一个日期,可以使用 Liquid 的 date 过滤器。例如,如果要格式化当前页面的日期,那么就在页面里插入如下代码:

{{ page.date | date: site.data.l10n.date_format }}

替换 Minima 的日期格式

Minima 会自动在网页上列出一篇帖子的日期,也支持使用 site.minima.date_format 变量 自定义日期格式。不过,和网站标题的情况类似,我们只能指定一种日期格式,而不是多种。

解决这个问题的办法和本地化网站标题差不多,也就是找出 Minima 的主题文件中哪里会用到 site.minima.date_format 变量的值,然后对这些地方进行修改。

minima-x.y.z$ grep -nr "site.minima.date_format"
_layouts/home.html:17:        {%- assign date_format = site.minima.date_format | default: "%b %-d, %Y" -%}
_layouts/post.html:10:        {%- assign date_format = site.minima.date_format | default: "%b %-d, %Y" -%}
README.md:129:You can change the default date format by specifying `site.minima.date_format`
--- minima-x.y.z/_layouts/home.html
+++ site-root/_layouts/home.html

     <ul class="post-list">
       {%- for post in site.posts -%}
       <li>
-        {%- assign date_format = site.minima.date_format | default: "%b %-d, %Y" -%}
+        {%- assign date_format = site.data.l10n.date_format | default: "%b %-d, %Y" -%}
         <span class="post-meta">{{ post.date | date: date_format }}</span>
         <h3>
           <a class="post-link" href="{{ post.url | relative_url }}">
 
--- minima-x.y.z/_layouts/post.html
+++ site-root/_layouts/post.html

     <h1 class="post-title p-name" itemprop="name headline">{{ page.title | escape }}</h1>
     <p class="post-meta">
       <time class="dt-published" datetime="{{ page.date | date_to_xmlschema }}" itemprop="datePublished">
-        {%- assign date_format = site.minima.date_format | default: "%b %-d, %Y" -%}
+        {%- assign date_format = site.data.l10n.date_format | default: "%b %-d, %Y" -%}
         {{ page.date | date: date_format }}
       </time>
       {%- if page.author -%}

完成上述修改后,访问您的网站的每个语言版本,应该可以看到日期的格式都被本地化了。

本地化后的中文日期格式