Toggle Menu

Jekyll bilingüe Y aquí vamos de nuevo


La paradoja de las opciones (TED) me ha dejado con un sitio a medias o no publicado por años.

En un nuevo intento por mantener un sitio web personal, esta vez estoy intentando dejar de lado la responsabilidad de tomar decisiones y simplemente usar lo que ya existe sin re inventar la rueda. Al final del día, en la mayoría de los casos, lo que cuenta es el contenido y no el template o si el CMS fue echo en casa.

Será este otro sitio como tantos otros llenos de recortes de código y links a cosas locas? muy probablemente!

Un cuaderno de apuntes donde pueda acceder a buscar esos comandos que siempre olvido y si es posible que ayude a algún transeúnte con algún tip así como tantos otros blogs me ayudan día a día a ganarme el pan.

Jekyll bilingüe

Elegí usar Jekyll para este blog en un intento por limitar tentaciones de toquetear código.

Pero Jekyll resultó mucho más completo de lo esperado y al par de horas ya estaba instalando plugins para hacerlo bilingüe, ya desviado del plan original.

Algunos plugins no funcionan y otros son muy complejos, así que opté por una forma sencilla de manejar ambos idiomas en un mismo sitio “sin” plugins (ver último paso).

Primer paso

Agregar una variable language a cada página o post (en otras palabras a todo).

---
layout: page
title: Some page
language: en
---
Phasellus gravida semper nisi. Nunc nonummy metus.

Segundo paso, menú

Hacer que el menú y otras partes se adapten al lenguaje activo. El lenguaje activo queda definido por la variable que agregamos a cada página/post.

Ejemplo en el menú:


<!-- links manuales -->
{% if page.language == 'es' %}
  <a href="/inicio">Inicio</a>
{% else %}
  <a href="/">Home</a>
{% endif %}

<!-- links a páginas sueltas -->
{% assign pages_list = site.pages %}
{% for node in pages_list %}
  <!-- solo incluir páginas que usen el layout page -->
  {% if node.layout == "page" %}
    <!-- mostrar link si el item es del mismo idioma
      que la página que estamos viendo actualmente -->
    {% if node.language == page.language %}
      <a href="{{ node.url }}">
        {{ node.title }}
      </a>
    {% endif %}
  {% endif %}
{% endfor %}

Agregar un link automático entre artículos disponibles en ambos idiomas.

Para esto hay que tener un permalink definido en ambos artículos y una variable extra para indicar el permalink del otro artículo.

Ejemplo post 2016-03-01-here_we_go_again.md

---
layout: post
title: Here we go again
permalink: /entries/here_we_go_again.html
translated: /entradas/aqui_vamos_de_nuevo.html
language: en
---
English version...

Ejemplo post 2016-03-01-aqui_vamos_de_nuevo.md

---
layout: post
title: Aquí vamos de nuevo
permalink: /entradas/aqui_vamos_de_nuevo.html
translated: /entries/here_we_go_again.html
language: es
---
Version en Español...

Con esto podemos incluir en la plantilla del post un link automático para moverse de un idioma a otro:


{% if page.translated %}
	{% if page.language == 'es' %}
		<a href="{{ page.translated }}">Read in English</a>
	{% else %}
		<a href="{{ page.translated }}">Ver en Español</a>
	{% endif %}
{% endif %}

Cuarto, Filtrar posts por idioma

En un listado de posts, la variable de lenguaje cumple dos objetivos, 1ro indicar al resto del sitio web el lenguaje actual (ejemplo para que el menú muestre los items correctos) y 2do se utiliza para filtrar los posts a mostrar.


---
layout: default
title: Entries
language: en
---
{% assign posts = site.posts | where: "language", page.language %}
<ul>
{% for post in posts limit:3 %}
  <Ol>{{ post.title }}</ol>
{% endfor %}
</ul>

Paginar

Hasta aquí llegamos sin plugins ni cosas raras, pero si queremos paginar los posts no encontré otra salida que usar un plugin.

Hay muchos plugins para paginar categorías y también hay plugins para manejar lenguajes, pero encontré poca información sobre como paginar categorías en multiples idiomas, así que terminé armando un pequeño plugin a mi gusto. Lo dejo disponible en GitHub: Jekyll Language and categories pagination

También terminé armando un plugin para poder marcar el rubro correcto en el menú cuando se está leyendo un post. No es la gran cosa así que esta incluido sin propaganda en el mismo git.

Conclusión

De los días que llevo jugando con Jekyll me parece una herramienta fantástica para programadores y afines. Es verdad que por momentos me sentí limitado cuando mientras buscaba “la forma perfecta” de mantener un sitio bilingüe pero al final habiendo escrito un plugin que me brinda lo que buscaba puedo entender por qué tiene tantos adeptos.

Escribiendo estas lineas en stackedit.io de momento puedo decir que quizás este podría ser este el final de una larga búsqueda por un sitio web personal.