De sitios web, traducciones y vacas peludas

Hola chavalada,

Hace mucho que no os traigo nada fresco y me parece muy mal y más vale que a vosotros también porque si no no entiendo por qué os leéis esta mierda de sitio.

Con eso de la empresa necesito una página web. ¿Quién no necesita una hoy en día? ¡Si hasta las panaderías tienen!

Como soy un afeitador de yaks profesional me he dedicado un par de semanas a hacerlo. No sé parar. Os cuento cómo fue el rollo.

Necesitaba una página web para la empresa. Esto me llevó a querer escribirla, pero quería que fuera simple y estática y no quería tener que gestionar todo en HTML a pelo y repetir pedazos así que tenía que ser modular. Para esto necesitaba un generador de páginas web. Lo malo es que el creador de webs tenía que ser capaz de traducir todo de forma automática sin tener que reescribir toda la web.

Y esto no es muy extremo, la verdad. No tardé mucho en conseguirlo (¿un par de días en ratos sueltos?). Aquí la prueba.

Pero ya os he dicho que no sé parar y como el tipo de fichero de traducción generado por gettext no me gustaba, no podía automatizar todo dentro del mismo script porque tenía que llamar a los métodos internos de pyBabel que no estaban muy claros en la documentación y ahora me estoy saturando de python y quiero cambiar de aires pues… Se me fue la olla y decidí hacerlo en Node.js.

No en CoffeeScript, como he hecho otras cosas. Esta vez tenía que ser JavaScript. Porque sí. Además quería forzar un poco de programación funcional y ya que me ponía quería jugar con Underscore porque la quiero usar en otro proyecto y ya mato dos pájaros de un tiro.

Cuál fue mi sorpresa cuando me puse a investigar diferentes librerías de templating y de i18n (internacionalización, para las traducciones) y no me quedaba satisfecho.

Para el templating probé cosas parecidas a Jinja, que es lo que conocía y el proyecto que hice en Python que te he linkado antes. Fueron:

  • Jinjs: Una implementación en de Jinja en Node.js. Casi compatibles al 100% pero no tiene muy buena documentación. Te referencia a la de Jinja y me daba miedo basarme en cosas que luego no funcionaran bien.
  • Plate: No probé mucho, hice un ejemplo y funcionó bien. Son plantillas compatibles con las de Django (un framework web de Python), que al mismo tiempo es el projecto en el que se basan las de Jinja que usé en la prueba de concepto de antes.
  • Nunjucks: Un proyecto basado en Jinja. Muy similar y compatible en todo lo que necesitaba. Me quedé con estas porque tienen una docu bastante decente. Aunque luego una cosa que quise hacer no estaba bien documentada y la tuve que hacer de otra manera. 🙂
  • Y algunas otras diferentes por probar, pero no me gustaron para esta aplicación. Mustache y similares. Interesantes también para otras cosas.

Pero eso sólo solucionaba medio problema.

La mayor parte de soluciones de i18n que encontré tienen muchas cosas que no necesito como que te capturen automáticamente las locales y encima usan un fichero JSON para las traducciones que es muy difícil de gestionar con strings largos o multilínea. Este último problema en mi caso era grave porque traducir una web conlleva mucho contenido, no es lo mismo que una aplicación. Así que tenía que hacer algo.

Pensé que usar un YAML molaba mucho más porque gestiona los strings largos de una forma mucho más bonita. Para empezar, puede ajustarse el ancho del fichero a un límite de caracteres por defecto y, con eso, marca de forma distinta los strings que son muy largos y han sido ajustados al ancho del fichero añadiendo saltos de línea o los strings que contenían saltos de línea y deben ser leídos de forma literal. Esto para mí es oro puro y lo necesitaba.

Así que. Lo hice. Me dediqué unos días a crear mi propia librería de i18n (que tengo que documentar mejor, por cierto). Está aquí:

https://github.com/ekaitz-zarraga/i18n_yaml

Y la podéis instalar con:

npm install i18n_yaml

Y eso ya me habilitó el poder hacer el constructor de sitios webs estáticos con i18n á la Ekaitz y lo pude hacer y poner aquí:

https://gitlab.com/ElenQ/schiumato

Ahora mismo está un poco en bragas (tenéis una lista de cosas pendientes al final del README.md), pero tiene buena pinta y funciona. No os voy a contar de donde viene el nombre porque entonces tendría que hablar de otro gestor de sitios que… Ejem.

Todavía me queda el último salto de la recursión, claro, me queda hacer la web. Pero eso os lo cuento otro día.

Tampoco he entrado en profundidad a contar cómo funcionan estas cosas, como me suele gustar hacer. Igual lo hago pronto y aprovecho para documentarlas un poco mejor.

Un abrazo.

Seguid afeitando yaks y cambiando el mundo por el camino.