O documento discute técnicas de internacionalização em aplicativos Android, incluindo armazenar arquivos de texto e imagens em pastas separadas para cada idioma e detectar o idioma e país configurado no dispositivo para personalizar a interface do usuário.
1. Android
Introdução à programação para dispositivos
móveis com o Android SDK
Parte 8 – Internacionalização
Prof. Manuel F. Paradela Ledón, 2011.
Universidade Cruzeiro do Sul
2. Internacionalização
Frequentemente necessitamos elaborar um aplicativo com versões em vários idiomas
(multilíngue) ou até para países, regiões ou costumes específicas, para que o
universo de usuários potenciais seja maior e nosso programa atenda determinadas
especificações.
A tecnologia Android fornece alguns recursos especiais para garantir esse objetivo.
Neste material breve apresentaremos duas abordagens para preparar uma versão
“internacionalizada” de nosso aplicativo:
• Pastas de arquivos de figuras e de textos diferentes para cada idioma.
• Detecção do idioma ou país utilizado no dispositivo, utilizando métodos
adequados na lógica de nosso programa, para personalizar mensagens, textos e
até estratégias ou critérios específicos da aplicação para as diferentes línguas,
regiões ou países.
3. Pastas de arquivos de figuras e de textos diferentes para
cada idioma
Observe neste exemplo que criamos três pastas
para figuras (drawable, drawable-es, drawable-pt),
sendo drawable-es a pasta para idioma espanhol,
drawable-pt para português e drawable para
qualquer outro idioma (pasta default). Por exemplo,
uma mesma figura no arquivo cidade.png repetida
dentro destas três pastas poderia ter textos
específicos em cada língua (escola, escuela,
school). Caso a configuração no aparelho esteja em
outra língua que não seja espanhol ou português, a
figura utilizada será cidade.png da pasta drawable.
Para textos multilíngues preparamos quatro pastas
(values, values-es, values-it, values-pt) com o
arquivo específico com a tradução em cada uma das
línguas previstas. Novamente, a pasta value será a
utilizada (default) caso o idioma não seja italiano,
espanhol ou português.
4. Arquivos de textos diferentes para cada idioma
Os conteúdos dos arquivos strings.xml nos quarto idiomas considerados:
<resources>
<string name="app_name">Teste1</string>
<string name="hello_world">Hello world!</string>
<string name="menu_settings">Settings</string>
<string name="title_activity_main">Example</string>
</resources>
<resources>
<string name="app_name">Teste1</string>
<string name="hello_world">¡Hola señores!</string>
<string name="menu_settings">Configuraciones</string>
<string name="title_activity_main">Ejemplo</string>
</resources>
<resources>
<string name="app_name">Teste1</string>
<string name="hello_world">Olá pessoal! Tudo bem?</string>
<string name="menu_settings">Configurações</string>
<string name="title_activity_main">Exemplo</string>
</resources>
<resources>
<string name="app_name">Teste1</string>
<string name="hello_world">Buongiorno ragazzi!</string>
<string name="menu_settings">Instrumenti</string>
<string name="title_activity_main"> Esempio</string>
</resources>
5. O arquivo XML de uma tela (Activity) multilíngue
Neste exemplo de arquivo XML utilizamos referências a ic_launcher e hello_world.
Android utilizará automaticamente a figura ic_launcher.png da pasta da língua correta
e, também, o texto dentro do arquivo strings.xml, dependendo do idioma configurado
no aparelho (por exemplo, <string name="hello_world">¡Hola señores!</string> para espanhol).
<RelativeLayout xmlns:tools="http://schemas.android.com/tools"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="match_parent" >
<ImageButton
android:id="@+id/imageButton1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_marginTop="65dp"
android:src="@drawable/ic_launcher" />
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/imageButton1"
android:text="@string/hello_world"
android:textAppearance="?android:attr/textAppearanceLarge" />
</RelativeLayout>
6. Convenção para países e idiomas
Em ocasiões será necessário saber o idioma e o país selecionados no aparelho
Android para que o programa efetue algumas ações adicionais. Duas normas ISO
estabelecem códigos de duas letras para identificar cada idioma e cada país:
Os códigos de idioma são duas letras minúsculas, como definidas em ISO_639. Os
códigos de países são duas letras maiúsculas, como definidas em ISO_3166-1.
Veja mais informação em http://developer.android.com/reference/java/util/Locale.html
Assim, por exemplo, as duas letras minúsculas "en" especificam idioma inglês, "es"
idioma espanhol e "pt" português.
Os códigos de letras de países (duas letras maiúsculas) permitem identificar, por
exemplo, Inglaterra como "GB", Espanha como "ES" e Portugal e Brasil pelas siglas
"PT" e "BR".
7. Detectando o país e o idioma no programa Android
import java.util.Locale; //Importamos a public final class Locale
…
int idioma=1;
String moeda="$";
Locale loc = Locale.getDefault();
String country = loc.getCountry();
String language = loc.getLanguage();
if(language.equalsIgnoreCase("en")) { //English
idioma = 1;
if(country.equalsIgnoreCase("GB")) moeda = "£";
}
if(language.equalsIgnoreCase("es")) { //Español
idioma = 2;
if(country.equalsIgnoreCase("ES")) moeda = "€";
}
if(language.equalsIgnoreCase("pt")) { // Português
idioma = 3;
if(country.equalsIgnoreCase("BR")) moeda = "R$";
if(country.equalsIgnoreCase("PT")) moeda = "€";
}
8. Bibliografia sugerida
ANDROID. Android Developers.
Disponível em http://developer.android.com
ANDROID. Localization.
http://developer.android.com/guide/topics/resources/localization.html
http://developer.android.com/reference/java/util/Locale.html
ANDROID. Supporting Different Languages.
http://developer.android.com/training/basics/supportingdevices/languages.html
LECHETA, RICARDO R. Google Android, Aprenda a criar aplicações para
dispositivos móveis com o Android SDK.
São Paulo: Novatec, 2010.
MEDNIEKS, Z. et. al. Desenvolvimento de Aplicações Android.
São Paulo: Novatec, 2009.