Comunidad de diseño web y desarrollo en internet online

Sites multi lenguajes con XML en ActionScript 3.0

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:
[asas]Locale.loadLanguageXML("fr");[/as]
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í

¿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