Como Suportar Diferentes Idiomas numa App Android

O mundo das aplicações móveis é cada vez mais abrangente, fazendo já parte do dia-a-dia de qualquer um dos mortais com smartphone. Esta fragmentação e abrangência na utilização de aplicações móveis torna complicada a tarefa de ter um público-alvo bem definido, pois “geralmente” as aplicações estão disponíveis para a globalidade dos utilizadores e não limitadas a regiões.

Esta situação torna a definição dos idiomas para o público-alvo da aplicação um requisito fundamental para o correto desenvolvimento de uma aplicação. Neste pequeno tutorial irei dar a conhecer uma forma de implementar o suporte a múltiplos idiomas numa aplicação Android.

Não irei dar destaque à instalação e configuração do ambiente de desenvolvimento, partindo do princípio que todo o ambiente está corretamente instalado e configurado.

1º Passo: Criar um Android Application Project

Android multi-lingua: criar projeto

Neste primeiro passo iremos criar um Android Application Project, onde definimos o nome da app, nome do projeto, assim como as versões Android suportadas. É ainda criada uma Main Activity que será a nossa view principal neste tutorial.

2º Passo: Desenhar a view

Android multi-língua: desenhar view

Após a criação do projeto vamos então dar início à construção da nossa view, basicamente à construção do aspeto gráfico que neste exemplo concreto terá apenas uma view, ou seja uma activity.

Para este exemplo iremos apenas criar um button e colocá-lo numa qualquer posição do ecrã à nossa escolha, como é demonstrado na imagem acima.

De seguida e se olharmos para o código no ficheiro activity_main.xml teremos a seguinte estrutura:

<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.nuno.multilinguaapp.MainActivity" >

  <Button
      android:id="@+id/button1"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:layout_alignParentTop="true"
      android:layout_centerHorizontal="true"
      android:layout_marginTop="120dp"
      android:text="Button"
      android:onClick="actionMethod" />
</RelativeLayout>

Será então aqui que começarão as alterações com vista a tornarmos a nossa aplicação com suporte para múltiplos idiomas.

Vamos agora dar atenção à seguinte linha:

android:text="Button"

 Esta linha é responsável por definir o nome a apresentar no button e que neste caso é Button. Para podermos ter acesso posterior e permissão para alterarmos dinamicamente o conteúdo a apresentar como nome do button termos de mudar para o seguinte:

android:text="@string/button_pt"

Com esta linha iremos então fazer com que o conteúdo a apresentar como nome do button seja fornecido por uma string que irá estar alojada na pasta res/values, ficheiro strings.

Temos ainda de adicionar a seguinte linha para que mais tarde possamos aceder ao método click do nosso button:

android:onClick="actionMethod"

Olhando agora para o ficheiro strings que está presente na pasta res/values ele deverá ter uma estrutura semelhante à apresentada abaixo:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="app_name">MultiLinguaApp</string>
    <string name="action_settings">Settings</string>
 
    <string name="button_pt">Lingua Portuguesa</string>
    <string name="mensagem">Mensagem em Português!!!</string>
</resources>

Aqui as duas linhas importantes são as seguintes:

<string name="button_pt">Lingua Portuguesa</string>
<string name="mensagem">Mensagem em Português!!!</string>

A primeira linha é a responsável pelo conteúdo do nome do button, a segunda linha será a mensagem definida que será apresentada no momento em que o button for clicado.

3º Passo: Criar uma nova pasta values para o novo idioma

Android multi-língua: pasta values do idioma

Para que possamos então dar o suporte a múltiplos idiomas à nossa aplicação teremos de criar uma nova pasta values, mas desta vez com uma alteração devido a este ter de ser diferenciada para o novo idioma, como por exemplo values-en.

Neste exemplo eu defini o idioma base como Português e o idioma secundário o Inglês e por esse mesmo motivo estou a usar a pasta values-en. Poderão ter acesso a todos os códigos de idiomas suportados pelo Android aqui: http://developer.android.com/reference/java/util/Locale.html.

4º Passo: Criar um novo ficheiro strings.xml na pasta values-en

Android multi-língua: criar novo strings.xml

Agora com a criação deste novo ficheiro é que vamos realmente dar suporte ao novo idioma, sendo que este novo ficheiro strings.xml deverá ter uma estrutura idêntica ao ficheiro strings.xml padrão.

Android multi-língua: resource type do strings.xml

Ao escolhermos a criação do novo ficheiro XML, devemos ter em atenção alguns aspetos, tais como o Resource Type que deverá ser do tipo values como mostra a imagem acima.

Logo de seguida seremos presenteados com mais algumas opções, sobre as quais devemos selecionar Country Code, e escolher o identificador, neste caso o en referente à língua Inglesa.

Android multi-língua: escolher identificador de língua

Tal como havia dito acima a estrutura deste novo ficheiro strings será em tudo muito semelhante ao ficheiro strings padrão, pelo que deverá copiar todo o conteúdo do ficheiro strings padrão para este novo ficheiro strings, alterando apenas o conteúdo de duas linhas.

A estrutura deste novo ficheiro deverá ser a seguinte:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="app_name">MultiLinguaApp</string>
    <string name="action_settings">Settings</string>
 
    <string name="button_pt">English Language</string>
    <string name="mensagem">English Message!!!</string>
</resources>

Como é percetível a estrutura do ficheiro é em tudo semelhante ao ficheiro padrão, tendo sido apenas alteradas as linhas que possuíam o conteúdo do nome do button e da mensagem.

5º Passo: Definir o método actionMethod no MainActivity.java

Depois de termos definido os conteúdos referentes aos dois idiomas vamos agora definir o método que nos permitirá fazer o click no button e nos ser apresentada a mensagem definida.

Para isso devemos navegar até à pasta src/nome_package e abrir o ficheiro MainActivity.java ao qual adicionaremos o seguinte método no final:

//Método ActionMethod
public void actionMethod(View v) {
    String msg = (String)getText(R.string.mensagem); //Acesso à string alojada no ficheiro "strings"
    Toast.makeText(getBaseContext(), msg, Toast.LENGTH_LONG).show(); //Apresntação da mensagem no ecrã
}

Este método irá ser chamado cada vez que o button for clicado, apresentando então a mensagem definida.

6º Passo: Alteração do Idioma no Sistema Operativo e Respetivo Teste

Se tudo correu como o previsto a nossa aplicação estará agora preparada para lidar com dois idiomas, mas para isso iremos testar e verificar se tudo correu como o que desejávamos.

Antes de mais supomos que o idioma definido pelo Sistema Operativo é o Português, e assim sendo a aplicação deveria apresentar o seguinte resultado:

Android multi-língua: resultado português

Agora necessitamos de alterar o idioma do Sistema Operativo para Inglês de modo a que possamos testar se tudo está como o previsto. Para alterar o idioma deveremos aceder ao Menu Definições, Idioma e entrada, Idioma escolhendo então o Inglês.

Definido o idioma para “Inglês” o resultado da aplicação deverá ser o seguinte:

Android multi-língua: resultado inglês

Se tudo correu como o esperado, ambos os idiomas estarão disponíveis na aplicação, sendo que a aplicação irá sempre verificar qual é o idioma definido pelo Sistema Operativo para então depois escolher o idioma a utilizar.

Para suporte a mais idiomas seria necessário apenas repetir o processo, para os idiomas pretendidos.

Existem outras formas de dotar as apps Android com suporte a múltiplos idiomas, algumas delas recorrendo a tradutores. Neste pequeno tutorial o objetivo era apenas demonstrar uma forma simples de adicionar suporte a múltiplos idiomas ao desenvolvimento de uma aplicação Android.

 

Publicado na edição 47 (PDF) da Revista PROGRAMAR.