|

Traducción de variables en javascript

Escenario

Estoy trabajando en una aplicación multi-lenguaje desarrollada con la plataforma spring boot. Para quien no conozca esta plataforma de desarrollo, spring boot te permite gestionar varios lenguajes gracias a un sistema que utiliza ficheros de tipo propiedades para almacenar las traducciones. Los nombres de estos ficheros han de respetar la siguiente convención, messages_{código ISO del lenguaje}.properties. Así, un fichero para la traducción en castellano se llamaría messages_es.properties, en el que las traducciones se asignarían a un nombre único: y para el inglés, messages_en.properties: Luego estas variables se pueden usar en código java o en plantillas html. En thymeleaf por ejemplo:

Problema

No existe una forma establecida para usar estas traducciones en javascript. En stackoverflow y blogs he visto soluciones en las que se propone incluir un array asociativo con las traducciones que se van a utilizar en el javascript en cuestión. O un controlador que devuelva las traducciones y luego se pinten en la vista para ser utilizadas por el código de javascript. Ninguna de las soluciones me parecían mantenibles. Algunas requerían actualizar las traducciones en dos sitios, otras no gestionaban bien el cambio de lenguaje dinámico.

Solución

La aplicación en cuestión usa un gestor de tareas (grunt) para preparar los archivos estáticos (js, css, etc) que va a usar la parte web. Se me ocurrió que bastaría con traducir la estructura de un fichero de tipo properties en un objecto de javascript y luego referenciarlo desde los ficheros javascript. Gracias a este módulo de nodejs, la conversión de un formato a otro resulta sencillo y rápido. Luego solo tenía que crear un plugin para grunt que genere los ficheros javascript a partir del contenido convertido. Por ejemplo messages_es.properties se convertiría en messages_es.js: Una vez generados se usarían en una plantilla thymleaf de esta manera: Por si alguien le interesa el plugin en cuestión es grunt-messages-js-localization

Publicaciones Similares

  • phpsize

    phpize: command not found Si alguna vez te topas con este error intentando instalar un paquete PEAR en un sistema linux, muy probablemente sea por que no tienes installado el paquete php-devel.

  • Cómo recuperar ficheros borrados de Amazon Linux

    Escenario Tenemos una aplicación de tipo SpringBoot desplegada en una instancia ec2 de Amazon, con el sistema operativo Amazon Linux. Para sincronizar los cambios con el código desplegado en producción utilizo rsync en este script de bash:

    Ayer cuando desplegué, la aplicación no compilaba en el servidor remoto. Era debido a que una clase…

  • Cómo crear una cabecera de licencia en Netbeans

    Escenario Un encabezado en los ficheros de código puede ser un requisito del trabajo o del proyecto de código abierto al que contribuyes. O sencillamente te gusta que tus ficheros de código dispongan de un impronta común. Problema En realidad ninguno. Supongo que la mayoría de los editores modernos ofrecen la posibilidad de usar una…

  • Disco corrupto en nas4Free

    Escenario Tengo un servidor para mis copias de seguridad que usa el gestor nas4Free, basado en FreeBSD 9.3. Problema Tras un corte inesperado del suministro eléctrico, la máquina no vuelve a arrancar. Se muestra este error por pantalla: /dev/ada4s2 contains a file system with errors, check forced /dev/ada4s2 directory inode 7561250, block #1 offset 2008…

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *