Este es mi primer aporte a la comunidad de Cristalab. Aquí veremos cómo lograr tener en varios idiomas una webapp usando Javascript.
Veamos primero el código:
Si observáis en la propiedad strTrans se definen los idiomas. En key:valor, key se refiere a la cadena a traducir y el valor a la cadena traducida.
Ver demostración en JsFiddle

via Cristalab http://www.cristalab.com/tutoriales/multi-idioma-en-javascript-c109613l/?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed%253A+clab+%2528Cristalab%2529
Veamos primero el código:
Código :
var userLang = (navigator.language) ? navigator.language : navigator.userLanguage;
String.prototype.printf = function() {
var formatted = this;
for(i=0;i<arguments.length;i++) {
formatted = formatted.replace("%s", arguments[i]);
}
return formatted;
};
var Translation = {
userLang: 'es',
getLang: function() {
this.userLang = (navigator.language) ? navigator.language : navigator.userLanguage;
alert(this.userLang);
},
strTrans: {
'en': {'hola': 'hello',
'tu nombre es %s': 'you name is %s',
'tienes %s platano' : 'you have %s banana',
'tienes %s platanos' : 'you have %s bananas',
},
'ca': {'hola': 'hola',
'tu nombre es %s': 'el teu nom es %s',
'tienes %s platano' : 'tens %s platan',
'tienes %s platanos' : 'tens %s platans',
},
},
getText: function() {
var cadena = arguments[0];
if (typeof this.strTrans[this.userLang] !== "undefined") {
cadena = this.strTrans[this.userLang][cadena];
}
if(typeof cadena == "undefined") cadena = arguments[0];
total = arguments.length;
for(i=1;i<total;i++) {
valor = arguments[i];
cadena = cadena.replace("%s", arguments[i]);
}
return cadena;
}
}
Preparando las traducciones
Si observáis en la propiedad strTrans se definen los idiomas. En key:valor, key se refiere a la cadena a traducir y el valor a la cadena traducida.
Métodos
- getLang: se obtiene el idioma por defecto del navegador, pero se puede definir el idioma que queremos con Translation.userLang = 'idioma';
- getText(cadena,valor): le pasamos la cadena a traducir y el valor es opcional, si la cadena incluye %s pues lo sustituirá por el valor, pueden contener más de %s en una cadena, es decir multivalor.
Ejemplo de uso
Código :
Translation.getLang(); //obtenemos el idioma por defecto del navegador
Translation.userLang = 'en'; //definimos manualmente el idioma
document.write(Translation.getText('tu nombre es %s','Donkey-Kong'));
document.write('<br />');
document.write(Translation.getText('tienes %s platano',1));
document.write('<br />');
document.write(Translation.getText('tienes %s platanos',4));
Ver demostración en JsFiddle
via Cristalab http://www.cristalab.com/tutoriales/multi-idioma-en-javascript-c109613l/?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed%253A+clab+%2528Cristalab%2529
Comentaris
Publica un comentari a l'entrada