Si tenemos un xml de localización, lo más probable es que en algún momento nos topemos con algo como esto: Carlos, un amigo de Hernan se comió una pizza.
Si quisiéramos localizar esto en XML podríamos tener algo así como un nodo con la frase", un amigo de " y otro con " se comió una pizza.".
Pero localizar justamente indica varios idiomas, y es ahí donde esta el problema. Hernan's friend, Carlos, ate a pizza. Quedaria como: Carlos, the friend of Hernan ate a pizza y eso es hablar en spanglish.
¿La solución? Incluir alguna manera de indicarle a quien se encargue de la localización que reemplace ciertos keywords por valores predefinidos.
Entonces, tendríamos algo como "{friendName}, un amigo de {userName} se comio una pizza." o "{userName}'s friend, {friendName}, ate a pizza."
¿Y cómo reemplazamos las palabras? La manera mas elegante es usar expresiones regulares. En este caso una muy simple: \{(\S+)\} (Para los que no saben usar expresiones regulares o no las manejan demasiado, pueden ver lo que hace en esta herramienta).
El codigo final queda asi:
Código :
var s:String; s = "{userName}'s friend, {friendName}, ate a pizza." s.replace(/\{(\S+)\}/g, findInDic); private function findInDic (...args):String { var dic:Dictionary; dic = new Dictionary(); dic['userName'] = 'Hernan'; dic['userName'] = 'Carlos'; return dic[args[1]]; // Usar args[1], args[0] devuelve el string completo, con las llaves. }
Un caso simple del uso que se le puede dar a la función replace. En el sistema de localización en el que estoy trabajando el sistema es un poco mas complicado, porque aunque elegantes, las expresiones regulares son lentas y usando indexOf, el código demora menos de la mitad del tiempo. En ciertas aplicaciones o en textos muy largos esto puede ser esencial.
¿Sabes SQL? ¿No-SQL? Aprende MySQL, PostgreSQL, MongoDB, Redis y más con el Curso Profesional de Bases de Datos que empieza el martes, en vivo.
Por Zguillez el 15 de Agosto de 2009
Por HernanRivas el 15 de Agosto de 2009