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 HernanRivas el 15 de Agosto de 2009