Contenido

Localización en Javascript

4 Oct

+ 10

Hace unos días me encontré con este artículo que nos muestra como montar un sistema de localización (idiomatización) de nuestro Javascript. Y es que debido a la interacción de nuestro Javascript con el usuario, esta tarea se hace imprescindible si necesitamos acceder a usuarios en diferentes idiomas.

Ejemplo

Partimos de un fichero javascript llamado ({lang}.js) que incluirá la descripción de una serie de constantes con el texto en el idioma {lang} del fichero.

var LOCALIZATION = {
 LANGUAGE: 'GERMAN',
 WARNING: 'Achtung vor dem %s, er ist gefährlich !',
 LOADING: 'Bitte warten, Daten werden geladen',
 WELCOME: 'Hallo %s, wie geht\'s dir ?'
};

En este caso, el idioma es alemán, por lo que el fichero se llamará de.js, y podemos ver la variable LOCALIZATION que dispone de una serie de variables asociadas al texto en ese idioma.

Modo de empleo

Para usar esto en nuestro Javascript únicamente tendremos que usar la función translate() (que veremos más adelante) para obtener el texto traducido.

var translation = translate(LOCALIZATION.WARNING, "Zauberer");
console.log(translation);

Como vemos en el ejemplo, podemos intuir la funcionalidad la función translate().

translate()

(function () {
  if (!window.translate) {
    window.translate = function(){
      var html = [ ];
      var arguments = arguments;
      var format = arguments[0];

      var objIndex = 0;
      var reg = /\%s/;
      var parts = [ ];

      for ( var m = reg.exec(format); m; m = reg.exec(format) ) {
        parts.push(format.substr(0, m[0][0] == "%" ? m.index : m.index+1));
        parts.push("%s");
        format = format.substr(m.index+m[0].length);
      }

      parts.push(format);

      for (var i = 0; i < parts.length; ++i){
          var part = parts[i];

          if (part && part === "%s"){
            var object = arguments[++objIndex];

            if (object === undefined) {
              html.push("%s");
            }else{
              html.push(object);
            };
          }
          else{
            html.push(part);
          }
      }

      return html.join('');
    }
  };
})();

Esta función, nos permite reemplazar valores (%s) dentro de la cadena traducida mediante una serie de parámetros pasados a la función. Muy similar a la funcionalidad que printf() nos proporciona en PHP.

Comentar

#

Me reservo el derecho de eliminar y/o modificar los comentarios que contengan lenguaje inapropiado, spam u otras conductas no apropiadas en una comunidad civilizada. Si tu comentario no aparece, puede ser que akismet lo haya capturado, cada día lo reviso y lo coloco en su lugar. Siento las molestias.