Cristalab

Sites multi lenguajes con XML en ActionScript 3.0

Por: eldervaz + 16.02.2008

Me bastó ver este tip de ActionScript 2 para ponerme a investigar sobre como hacer un site o una app (application) que soporte varios lenguajes sin tener que hacer un FLA por cada uno de ellos. Entonces sólo era ver la Clase fl.lang.Locale, que en realidad es muy simple y fácil de usar.

Para eso lo primero que tenemos son varios archivos XML con los textos traducidos, uno por idioma en formato XLIFF en UTF-8 (no olvides guardarlos en este formato). Además pueden encontrar más información en la documentación de Adobe

en.xml

Código :

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE xliff PUBLIC "-//XLIFF//DTD XLIFF//EN"
"http://www.oasis-open.org/committees/xliff/documents/xliff.dtd" >
<xliff version="1.0" lang="es">
   <file datatype="plaintext">
      <header></header>
         <body>
            <trans-unit resname="NOMBRE">
               <source>nombre</source>
            </trans-unit>
               
            <trans-unit resname="TELEFONO">
               <source>telefóno</source>
            </trans-unit>
               
      </body>
   </file>
</xliff>


donde realmente lo unico q importa es:

Código :

<trans-unit resname="NOMBRE">
      <source>nombre</source>
</trans-unit>

En resname colocamos el identificador que nos dirá la traducción en todos los XML, en este caso (español) "nombre"

Con eso podemos tener varios idiomas en distintos XML. Ahora pasamos al ActionScript.

Necesitamos importar la clase:

Código :

import fl.lang.Locale;

Luego agregamos los idiomas que utilizaremos en nuestro archivo, en mi ejemplo pongo 3 idiomas

Código :

Locale.addXMLPath("es", "lang/es.xml");
Locale.addXMLPath("en", "lang/en.xml");
Locale.addXMLPath("fr", "lang/fr.xml");

inicializo la clase y cargo el idioma por defecto y muestro la data en un método

Código :

Locale.initialize();
Locale.setDefaultLang("es");
Locale.setLoadCallback(init);

y eso es todo, solo mostramos la data así:

Código :

private function init(event:Boolean):void {
      nombre.text = Locale.loadString("NOMBRE");
      telefono.text = Locale.loadString("TELEFONO");
}

Para cambiar de idioma es:

Código :

Locale.loadLanguageXML("fr");


El código completo aquí:

Código :


package {
   import flash.display.MovieClip;
   import flash.display.SimpleButton;
   import flash.events.MouseEvent;
   import flash.text.TextField
   import fl.lang.Locale;

   public class CambiarIdioma extends MovieClip{   
      
      public function CambiarIdioma() {
         //cargo los xml
         Locale.addXMLPath("es", "lang/es.xml");
         Locale.addXMLPath("en", "lang/en.xml");
         Locale.addXMLPath("fr", "lang/fr.xml");
         //inicializo
         Locale.initialize();
         //cargo el idioma por defecto
         Locale.setDefaultLang("es");
         Locale.setLoadCallback(init);
         //agrego mis listener a mis botones
         btn_en.addEventListener(MouseEvent.CLICK, cambiar);
         btn_es.addEventListener(MouseEvent.CLICK, cambiar);
         btn_fr.addEventListener(MouseEvent.CLICK, cambiar);   
      }

      private function init(event:Boolean):void {
         nombre.text = Locale.loadString("NOMBRE");
         telefono.text = Locale.loadString("TELEFONO");
      }
      
      private function cambiar(event:MouseEvent):void {
         var miIdioma:String;
         switch (event.target.name) {
            case "btn_es":
               miIdioma = "es";
               break;
            case "btn_en":
               miIdioma = "en";
               break;
            case "btn_fr":
               miIdioma = "fr";
               break;
         }
         //actualizó el idioma
         Locale.loadLanguageXML(miIdioma);
      }
      //fin de clase
   }
}


Los archivos aquí

Etiquetas xml actionscript_3

Comentarios | Enviar un comentario
Buen Tip sin duda ! Bien por ti, y por adriesp...
Thumbs up
Por: No Soy M@U !
Muy bien explicado. Yo encontré esta clase recientemente y la estoy usando para una web. Te facilita mucho el trabajo y añadir nuevos idiomas es trivial.
Saludos
Por: adriesp
Buen Tip Elder, muy útil esta clase Thumbs up
Por: Zguillez
Nunca le había prestado atención a esa clase, pero parece que facilita bastante la tarea para trabajar con idiomas, que dicho sea de paso, es un coñazo miau

Gracias elder! Guiño
Por: llops
Es estupendo, estupendo, si señor!!!

Sonrisa
Por: Sisco
Shock, por dios, cuantas barbaridades me habria ahorrado esto hace un par de meses atras

muy buena esa elder.. !! Thumbs up


salu2 miau
Por: Joris_blog
bravisimoooo, no tengo palabras para describir mi admiración, es genial, este tip va para mi carpeta de "importantísimos".

Una vez mas, gracias eldervaz.
Por: Señor Oz_blog
:Pbien man la isite con esa clase me salvas Riendo
Por: EnRiQuE_blog
:O
Por: EnRiQuE_blog
Esta herramienta si que nos será muy útil a todos la vamos a probar. Gracias
Por: Edna Rheiner_blog
Porque en formato xliff?
Por: gcm
Genial elder, será muy útil. U_U
Por: Bleend
Muy buen Tip

Pero de donde sale la clase fl? cuando hago import en mi biblioteca de clases, fl no aparece?
Por: dgl
Deja un comentario
IMPORTANTE

Recuerda ser respetuoso, no insultes a otras personas, ni uses palabrotas, hay una persona al otro lado de la pantalla.

Habla bien, NO ESCRIBAS EN MAYUSCULA TODO, no escribas como en un SMS, evita cosas como "ke", "x q" y demás abreviaciones.

Aquí funcionan las etiquetas de los foros, puedes usar [b] para negrita, [img] para las imágenes, [url] para los enlaces, etc.

Si tienes preguntas técnicas, envíalas mejor al foro.