Comunidad de diseño web y desarrollo en internet online

Reemplazo de texto en AS3

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.

Publica tu comentario

o puedes...

¿Estás registrado en Cristalab y quieres
publicar tu URL y avatar?

¿No estás registrado aún pero quieres hacerlo antes de publicar tu comentario?

Registrate