Jekyll - fechas en español

Se tarda en leer ~2 minutos

Parece que Jekyll no tiene soporte para internacionalización de forma nativa por lo que cuando se usa un formato de fecha que incluya el nombre del mes1, este aparece en inglés. Existe un plugin de internacionalización, pero parece que no funciona del todo bien, y en general recomiendan hacer un “apaño” con un poco de código Liquid (leído aquí, aquí o aquí)

Mi primera opción fue crear un archivo con los meses en _data/es.yml de la forma:

months:
  - Enero
  - Febrero
  - Marzo
  - Abril
  - Mayo
  <!-- etc -->

y recoger el código Liquid en un include (_includes/fecha.html):

{% capture fecha_page %}
  {% assign m = page.date | date: "%-m" | minus: 1 %}
  {{ site.data.es.months[m] }} de
  {{ page.date | date: "%Y" }}
{% endcapture %}

Esto funcionaba bien para añadir la fecha en cada post, pero no para añadirla en los listados de post, porque extrae la fecha de la página (page.date). Por lo que añadí otro pedazo de código similar en el mismo include y utilicé las variables fecha_page y fecha_post según correspondiera.

{% capture fecha_page %}
  {% assign m = page.date | date: "%-m" | minus: 1 %}
  {{ site.data.es.months[m] }} de
  {{ page.date | date: "%Y" }}
{% endcapture %}
{% capture fecha_post %}
  {% assign m = post.date | date: "%-m" | minus: 1 %}
  {{ site.data.es.months[m] }} de
  {{ post.date | date: "%Y" }}
{% endcapture %}

En un post:

---
  {% include i18n_date.html %}
  <article class="articulo-largo">
    <header class="post-header">
      <h1 class="post-title">{{ page.title }}</h1>
      <p class="post-meta"><time datetime="{{ page.date | date_to_xmlschema }}"
        itemprop="datePublished">{{ fecha_page }}</time>

En un listado de post:

<ul class="post-list">
    {% for post in site.categories.articulos %}
    {% include i18n_date.html %}
      <li>
          <a class="post-link" href="{{ post.url | prepend: site.baseurl }}">{{ post.title }}</a>
          <span class="post-meta">{{ fecha_post }}</span>

Una solución bastante poco elegante (porque post aquí no hace referencia directa a los post, si no que es una variable circustancial del for, podría habersa llamado i o cualquier otra cosa), pero funciona y resolvía con un include las dos situaciones en las que usaba la fecha.

Finalmente, tras leer aquí una idea de cómo imitar funciones con Liquid en Jekyll, llegué a esta solución. En el lugar donde queramos introducir una fecha en español insertamos {% include fecha.html fecha=page.date %} , y donde pone page.date la fecha en cuestión que queremos convertir, que puede ser cualquier variable que contenga una fecha (page.date, post.date, etc.) o una cadena de texto en formato fecha.

Y en _includes/fecha.html creamos este archivo:

{% capture fecha_esp %}
<!--  Si se quiere incluir el día de la semana, descomentar esta parte
  {% assign d = include.fecha | date: "%w" | minus: 0 %}
  {{ site.data.es.days[d] }},
  {{ include.fecha | date: "%-d" }} de
  -->
  {% assign m = include.fecha | date: "%-m" | minus: 1 %}
  {{ site.data.es.months[m] }} de
  {{ include.fecha | date: "%Y" }}
{% endcapture %}
{{ fecha_esp }}

En _data/es.yml este otro al que he añadido también los días de la semana. Y los ejemplos anteriores quedarían de la forma:

Un post:

---
<article class="articulo-largo">
  <header class="post-header">
    <h1 class="post-title">{{ page.title }}</h1>
    <p class="post-meta"><time datetime="{{ page.date | date_to_xmlschema }}"
      itemprop="datePublished">{% include fecha.html fecha=page.date %}</time>

Un listado de post:

<ul class="post-list">
    {% for post in site.categories.articulos %}
      <li>
          <a class="post-link" href="{{ post.url | prepend: site.baseurl }}">{{ post.title }}</a>
          <span class="post-meta">{% include fecha.html fecha=post.date %}</span>
  1. Todo esto es también aplicable para el nombre del día de la semana, solo que en mi caso, no lo estoy usando. 

Comentarios


Testing I

> Nadie quiere hablar sobre *testing*. *Testing* es el patito feo del desarrollo de software. El problema es que todos/as sabemos que el ...… Seguir leyendo

Importar funciones de otro paquete en R

Publicado el 06 de agosto de 2021

Understanding Software I

Publicado el 20 de septiembre de 2020