internacionalizacao

16
Internacionalizando um aplicativo BlackBerry API A maioria dos aplicativos modernos entrega seu conteúdo para diferentes países, línguas e culturas, utilizando um conceito chamado de internacionalização, ou i18n. Em algumas plataformas essa tarefa é maçante ou, até mesmo impossível, porém, com a BlackBerry API o programar tem vida fácil. Para exemplificar e consolidar os conceitos, vamos criar um projeto de exemplo, que consta de um simples cadastro de cliente com três campos. Inimaginável no mundo real, mas possível neste artigo. Abra seu eclipse e pegue a xícara de café... Criando o projeto Nos exemplos iremos utilizar a IDE Eclipse, porém, os códigos podem ser transportados sem problemas para o NetBeans. No Eclipse, navegue até File-New-Project.

Upload: ricardo-ogliari

Post on 30-Jun-2015

1.028 views

Category:

Technology


0 download

DESCRIPTION

A maioria dos aplicativos modernos entrega seu conteúdo para diferentes países, línguas e culturas, utilizando um conceito chamado de internacionalização, ou i18n. Em algumas plataformas essa tarefa é maçante ou, até mesmo impossível, porém, com a BlackBerry API o programar tem vida fácil. Para exemplificar e consolidar os conceitos, vamos criar um projeto de exemplo, que consta de um simples cadastro de cliente com três campos. Inimaginável no mundo real, mas possível neste artigo.Abra seu eclipse e pegue a xícara de café...

TRANSCRIPT

Page 1: Internacionalizacao

Internacionalizando um aplicativo BlackBerry API

A maioria dos aplicativos modernos entrega seu conteúdo para diferentes países, línguas e culturas, utilizando um conceito chamado de internacionalização, ou i18n. Em algumas plataformas essa tarefa é maçante ou, até mesmo impossível, porém, com a BlackBerry API o programar tem vida fácil.

Para exemplificar e consolidar os conceitos, vamos criar um projeto de exemplo, que consta de um simples cadastro de cliente com três campos. Inimaginável no mundo real, mas possível neste artigo.

Abra seu eclipse e pegue a xícara de café...

Criando o projeto

Nos exemplos iremos utilizar a IDE Eclipse, porém, os códigos podem ser transportados sem problemas para o NetBeans.

No Eclipse, navegue até File-New-Project.

No wizard apresentado, marque a opção BlackBerry -> BlackBerry Project. Clique Next para seguir o processo.

Page 2: Internacionalizacao

Informe o nome do projeto e escolha Finish.

Page 3: Internacionalizacao

Depois que a IDE criou toda estrutura de pastas necessárias para nosso projeto, vamos codificar.

Código, código..

Clique com o botão direito na pasta src. Escolha a opção new->class.

No wizard que aparecer configure as seguintes informações:

Package: com.estudo.blackberry. Se preferir outro pacote, fique a vontade. Name: nome da classe, no nosso caso FormularioInternacional. Superclass: de vital importância que seja

net.rim.device.api.ui.UiApplication. Para facilitar a digitação escreva Ui e use o atalho ctrl + espaço. Depois Finish.

Check Box´s: Marque os três checkbox´s que estão logo abaixo a opção de interfaces. Com isso, o Eclipse já cria a classe com o construtor e um método main.

Page 4: Internacionalizacao

Até o presente momento não há nenhuma surpresa. Veja o código gerado na Listagem abaixo:

Reescreva o construtor e o método main para que fiquem da seguinte maneira:

O Eclipse reclamará, com razão, da não existência da classe FIScreen . Clique na imagem da lâmpada que fica ao lado esquerdo da linha errônea.

package com.estudo.blackberry;

import net.rim.device.api.ui.UiApplication;

public class FormularioInternacional extends UiApplication {

public FormularioInternacional() {// TODO Auto-generated constructor stub

}

/** * @param args */public static void main(String[] args) {

// TODO Auto-generated method stub

}

}

public FormularioInternacional() {FIScreen mainScreen = new FIScreen();pushScreen(mainScreen);

}

/** * @param args */public static void main(String[] args) {

FormularioInternacional app = new FormularioInternacional();

app.enterEventDispatcher();}

Page 5: Internacionalizacao

Escolha a opção que automaticamente cria a classe que está faltando. A IDE lhe apresentará um novo wizard (Figura abaixo). Modifique apenas a superclasse, herdando de MainScreen e clique Finish.

Page 6: Internacionalizacao

O Eclipse nos entrega a seguinte classe:

package com.estudo.blackberry;

import net.rim.device.api.ui.container.MainScreen;

public class FIScreen extends MainScreen {

public FIScreen(long style) {super(style);// TODO Auto-generated constructor stub

}}

Page 7: Internacionalizacao

Lembrando que este artigo é sobre internacionalização e não sobre os componentes da API, portanto, vamos passar batido pelos campos de texto e caixas de seleção.

Reescreva o construtor da classe para:

Nossa interface ficou assim:

Perceba no código que os rótulos dos componentes, assim como as opções de gênero estão todas em português e não apresentam nenhuma maneira de internacionalização. É agora que a brincadeira começa.

Exportando a aplicação

public FIScreen() {super(FullScreen.DEFAULT_MENU | FullScreen.DEFAULT_CLOSE); // TODO Auto-generated constructor stub

edtNome = new EditField("Nome: ", "");edtEmail = new EditField("Email: ", "", 40,

EditField.FILTER_EMAIL);

String itens[] = {"Masculino", "Feminino"}; choiceSexo = new ObjectChoiceField("Sexo: ", itens);

add(edtNome);add(edtEmail);add(choiceSexo);

}

Page 8: Internacionalizacao

Vamos imaginar que queremos exportar nossa aplicação para a América Latina inteira e para os Estados Unidos, logo, devemos nos preocupar também com a língua espanhola e inglesa.

Na internacionalização da BB API, sempre devemos criar primeiramente arquivos com a extensão .rrh, ou os arquivos de recursos. Para isso, navegue para File->New->Other. Na wizard que receber, masque a opção BlackBerry Resources File.

Na tela a seguir, informe o local onde deseja criar o arquivo de recurso. No nosso caso colocamos junto aos códigos fontes da aplicação. Porém, o ideal é criar uma pasta res, por exemplo, para melhor organização. Também, informe o nome do arquivo, que deve sempre ter a extensão .rrh. Usamos Localização.rrh no nosso exemplo.

Page 9: Internacionalizacao

Perceba que o Eclipse se encarrega de criar mais um arquivo, o Localização.rrc.

O arquivo .rrc representa a língua padrão, inglês. Vamos criar mais dois arquivo: Localização_es.rrc e Localização_pt.rrc. O uso dos sufixos es e pt refere-se a espanhol e português, respectivamente. Estes sufixos obedecem a uma padronização de nomes.

Dê um duplo clique no arquivo .rrh.

Page 10: Internacionalizacao

Adicione as seguintes chaves (opção Add Key): EMAIL, ESPANHOL, FEMININO, INGLES, MASCULINO, NOME, PORTUGUES e SEXO. Perceba que nas abas inferiores existem as opções es e pt. Agora basta preencher os valores:

Page 11: Internacionalizacao
Page 12: Internacionalizacao

Depois que os valores para as chaves são inseridos e o arquivo é salvo, modifique a classe FIScreen da seguinte maneira:

A classe LocalizacaoResource, utilizada no implements, é criada pela própria IDE. Ela sempre terá o nome do arquivo rrh mais a palavra Resource. Também é necessário criar uma instância de ResourceBundle. Novamente, a IDE cria as constantes BUNDLE_ID e BUNDLE_NAME baseados no nome da classe com seu pacote. Para os mais curiosos, veja a classe gerada:

public class FIScreen extends MainScreen implements LocalizacaoResource{

private static ResourceBundle _res = ResourceBundle.getBundle(BUNDLE_ID,

BUNDLE_NAME);

private EditField edtNome;private EditField edtEmail;private ObjectChoiceField choiceSexo;

public FIScreen() {super(FullScreen.DEFAULT_MENU |

FullScreen.DEFAULT_CLOSE); // TODO Auto-generated constructor stub

edtNome = new EditField(_res.getString(NOME)+": ", "");edtEmail = new EditField(_res.getString(EMAIL)+": ", "",

40, EditField.FILTER_EMAIL);

String itens[] = {_res.getString(MASCULINO), _res.getString(FEMININO)};

choiceSexo = new ObjectChoiceField(_res.getString(SEXO)+": ", itens);

add(edtNome);add(edtEmail);add(choiceSexo);

}

}

package com.estudo.blackberry;

public interface LocalizacaoResource { // Hash of: "com.estudo.blackberry.Localizacao". long BUNDLE_ID = 0x85202c56b3fe29dfL; String BUNDLE_NAME = "com.estudo.blackberry.Localizacao";

int INGLES = 6; int SEXO = 4; int ESPANHOL = 7; int EMAIL = 1; int FEMININO = 3; int MASCULINO = 2; int NOME = 0; int PORTUGUES = 5;}

Page 13: Internacionalizacao

Continuando na listagem de código da classe FIScreen, note que não utilizamos mais valores fixos para rótulos, mas sim um esquema como:

_res.getString(CHAVE)_res.getString(NOME)

Onde usamos a instância de ResourceBundle e o seu método getString(), passando como parâmetro o nome da chave da qual queremos obter o valor. Agora nosso aplicativo ficou no idioma inglês, como padrão.

Finalizando a aplicação

Para deixar a aplicação pronta basta apenas colocar os itens de menu que permitem a mudança de idioma. Adicione o código abaixo a classe FIScreen:

protected void makeMenu(Menu menu, int instance) {menu.add(miEspanhol);menu.add(miIngles);menu.add(miPortugues);

}

private MenuItem miIngles=new MenuItem(_res.getString(INGLES),110,10){public void run() {

Locale.setDefault(Locale.get(Locale.LOCALE_en, null));refresh();

}};

Page 14: Internacionalizacao

private MenuItem miPortugues=new MenuItem(_res.getString(PORTUGUES), 110,10) {

public void run() {Locale.setDefault(Locale.get(Locale.LOCALE_pt, null));refresh();

}};

private MenuItem miEspanhol = new MenuItem(_res.getString(ESPANHOL), 110, 10) {

public void run() {Locale.setDefault(Locale.get(Locale.LOCALE_es, null));refresh();

}};

private void refresh() {edtNome.setLabel(_res.getString(NOME));edtEmail.setLabel(_res.getString(EMAIL));choiceSexo.setLabel(_res.getString(SEXO));choiceSexo.setChoices(new String[]{_res.getString(MASCULINO),

_res.getString(FEMININO)});}

Atenção ao método setDefault da classe Locale. É ele quem redefine a linguagem de aplicação. E, para o método refresh(), que atualiza os rótulos dos componente da interface gráfica.

Pronto, a aplicação já está internacionalizada.

Autor

Ricardo da Silva [email protected]

www.mobilidadetudo.comwww.javamovel.com