lunes, 7 de junio de 2010

TUTORIAL: Desarrollo de aplicaciones para Android (XII)


Seguimos con el ejemplo de aplicación con localización.
Vamos a añadir recursos para 3 locales: "inglés, Reino Unido", "francés, Francia" y "alemán, Alemania".

Vamos a necesitar las 4 banderas de cada país y los textos en inglés, francés y alemán.
Las imágenes de las banderas de cada país (flag.png) y los ficheros "string.xml" correspondientes a cada idioma, los pondremos en los directorios que se indican en la siguiente tabla (clic en imagen para ampliar):


En tiempo de ejecución, la aplicación seleccionará automáticamente los recursos del locale del dispositivo. Si el locale no es ninguno de los incluidos en la aplicación, se cargarán los recursos por defecto (en este caso "español, España").

Localizar la aplicación

Vamos a tener que crear 3 ficheros string.xml más, uno con el texto en inglés, otro en alemán y otro en francés.

1. Seleccionamos File -> New -> Android XML File

2. En la ventana que se abre:
- En el campo "Project" ponemos "HelloL10N"
- En "File" ponemos "string.xml"
- En la lista "Avalailable Qualifiers" seleccionamos "Language" y hacemos clic en la flecha que señala hacia la derecha
- Como tipo de recurso a crear seleccionamos "Values"
- Al lado de la lista "Chosen qualifiers", en el combo "Language", escribimos "en"

Nos debe quedar algo así:


3. Finalmente hacemos clic en "Finish". Podemos ver que se ha creado el nuevo fichero res/values-de/string.xml

4. Repetimos el proceso para los idiomas francés (fr) y alemán (de). Una vez hecho esto, ya tendremos los 3 ficheros string.xml creados:

5. Ahora insertamos el siguiente código en cada fichero string.xml:

- Inglés (values-en):
Hello, L10N
Shall I compare thee to a summer"'"s day?
Thou art more lovely and more temperate.


- Francés (values-fr):
Bonjour, Localisation
Irai-je te comparer au jour d"'"été?
Tu es plus tendre et bien plus tempéré.


- Alemán (values-de):
Hallo, Lokalisierung
Soll ich dich einem Sommertag vergleichen,
Der du viel lieblicher und sanfter bist?


6. Necesitamos 3 banderas más: la del Reino Unido, la de Francia y la de Alemania. Las podemos conseguir buscando cada país en Wikipedia y guardando la imagen de la bandera como "flag.png".
Luego las guardamos como "flag.png" en los directorios correspondientes (ver tabla de arriba).
Al final el árbol de proyecto os tiene que quedar parecido a este:

Ya sólo falta que ejecutemos la aplicación y comprobemos que cambiando el locale, la aplicación carga unos u otros recursos.
Podemos cambiar el locale del dispositivo Android en a "Home -> Menu -> Settings -> Language & keyboard -> Select Locale".




Siguiente parte

5 comentarios:

LughUy dijo...

Hola que tal estoy comenzando con android vendo de java me.
En mis aplicaciones de java me al usuario le doy a eleguir en una primera pantalla en que idioma le mustre los datos.
Como hago esto en android que busco y busco y no encuentro ya que cambia el idioma de la interfaz siempre y cuando yo cambie el idioma en el celular.
Saludos,

Byron dijo...

Hola !
Bueno, es que en Android no hace falta escribir nada de código para la selección de idioma en tu aplicación.
Sólo tienes que escribir los textos en los diferentes idiomas que quieras que tu aplicación tenga como se explica en el post, y la aplicación automáticamente mostrará los textos en el idioma que el usuario tenga en su celular (siempre que hayas incluído esa traducción, sinó se mostrarán los textos en el idioma por defecto).
Te dejo un enlace, a ver si te ayuda:
http://www.gacetatecnologica.com/movilizate/?p=44

LughUy dijo...

Gracias por tu respuesta, lo que pasa yo quiero hacer un menu de idiomas para que el usuario seleccione el que quiera, ya que en ocacions el movil esta configurado en diferentes idioma y quiere ver la aplicaicon en otro idioma.

Byron dijo...

De nada.
He encontrado este hilo en el que un usuario quiere hacer lo que dices: http://groups.google.com/group/android-developers/browse_thread/thread/3c17f9d816e7c2c3

Puedes probar la solución propuesta, pero, como se comenta, tendrás que escribir el código para cargar el string correspondiente de tu objeto Resource.

¡Suerte!

LughUy dijo...

Impecable muchas gracias.

Publicar un comentario