Internacionalização – Um software, vários idiomas!
Tudo bem, eu admito. Esse nome é muito grande e chato de pronunciar (porém muito útil!).
Imagine que você desenvolveu um super software (em Java é claro…) para atender um determinado nicho de mercado, levou 1 ano da sua vida para fazer isso. Quando você começou a vendê-lo foi o maior sucesso, seus clientes falaram bem do seu software pra todo mundo. Cada dia apareciam mais clientes, maravilha!
Até que um certo dia um americano ouviu falar do seu software e diz que paga um preço 5x maior do que você está acostumado a cobrar, porém o software tem que ser totalmente em Inglês…
E agora José???? Vai copiar o projeto e sair mudando todas as strings? Boa sorte…
Se tivesse pensado nisso antes, você teria planejado melhor o seu software e teria utilizado as facilidades que o Java oferece para Internacionalizar seu programa.
Mais chega de história, vamos a algo um pouco mais prático. Vamos criar uma pequena aplicação apenas para demonstrar como é fácil e útil internacionalizar seu programa em Java.
Crie um novo projeto Java para Área de Trabalho no NetBeans e apague tudo que ele já cria. Crie 2 pacotes: internacionalizacao e internacionalizacao.linguas:
Dentro do pacote internacionalizacao crie um JFrame e o deixe parecido com este:
Eu mudei os nomes dos JLabel’s e do JComboBox para:
- jL_Lingua
- jL_Nome
- jL_Telefone
- jL_Email
- jCB_Lingua
Fique a vontade para nomear como achar melhor.
Essa vai ser a cara do nosso aplicativo. Quando o usuário selecionar uma língua no combobox, todos os JLabel’s e o título do JFrame vão mudar para a língua escolhida.
Como as coisas não caem do céu, as informações de cada idioma devem estar armazenadas em algum lugar. E esse lugar é um arquivo que vai ficar no pacote internacionalizacao.linguas. Um arquivo para cada idioma.
O nome dos arquivos devem serguir um padrão: <nome*>_<idioma>_<país>.properties
O padrão pode variar um pouco pois existem alguns parâmetros opcionais, porém o que nos interessa é este mesmo.
* O nome de todos os arquivos devem ser iguais. Ex:
- Idioma_pt_BR
- Idioma_en_US
Sabendo disso, adicione 4 arquivos ao pacote internacionalizacao.linguas. Para adicioná-los clique com o botão direito no projeto e em Novo > Outro. Selecione a categoria “Java” e o tipo de arquivo “Arquivo de Propriedade”.
Adicione os seguintes arquivos:
Eu dei o nome padrão de “Linguas” aos meus arquivos. Como já foi dito, cada arquivo é responsável por um idioma:
- Linguas_de_DE –> Alemão
- Linguas_en_US –> Inglês
- Linguas_fr_FR –> Francês
- Linguas_pt_BR –> Português
Segue o conteúdo de cada arquivo de Línguas:
Linguas_de_DE.properties
titulo = Internationalisierung - EinfacheJava lingua = Sprache nome = Name telefone = Telefon email = E-Mail
Linguas_en_US.properties
titulo = Internationalization - SimpleJava lingua = Language nome = Name telefone = Phone email = Email
Linguas_fr_FR.properties
titulo = Internationalisation - SimpleJava lingua = Langue nome = Nom telefone = Téléphone email = Email
Linguas_pt_BR.properties
titulo = Internacionalização - JavaSimples lingua = Língua nome = Nome telefone = Telefone email = Email
Uma vez que os arquivos de idioma já contenham tudo o que vamos precisar, vamos atualizar o combobox. Mude a propriedade “model” e adicione os seguintes itens:
- pt_BR
- en_US
- fr_FR
- de_DE
Agora só falta adicionar o evento que vai cuidar da mudança dos idiomas de acordo com a seleção do usuário. Adicione o seguinte código ao evento ActionPerfomed do jCB_Linguas:
String[] selecionado = jCB_Lingua.getSelectedItem().toString().split("_"); Locale.setDefault(new Locale(selecionado[0],selecionado[1])); internacionaliza();
O vetor de String “selecionado” recebe o item que o usuário selecionou, porém separado pelo _ (underscore). Ex: se o usuário selecionar “pt_BR” –> “selecionado = {pt , BR}”.
Depois o Locale** default é setado para o que o usuário selecionou e é chamada a função internacionaliza().
** A Locale object represents a specific geographical, political, or cultural region. Um objeto Locale representa uma região geográfica, política ou cultural específica. (de acordo com a Documentação). Por default é a configuração do sistema operacional no qual a JVM foi instalada, ex: se o seu Windows é em português do Brasil, provavelmente sua Locale default será pt_BR.
Por fim, vamos ao código da função internacionaliza(), que é onde a mágica acontece:
public void internacionaliza() { Locale locale = Locale.getDefault(); ResourceBundle palavras = ResourceBundle.getBundle("internacionalizacao.linguas.Linguas", locale); this.setTitle(palavras.getString("titulo")); jL_Lingua.setText(palavras.getString("lingua")); jL_Nome.setText(palavras.getString("nome")); jL_Telefone.setText(palavras.getString("telefone")); jL_Email.setText(palavras.getString("email")); }
Primeiro é recuperado o Locale atual do computador e depois é instaciado o objeto palavras da classe ResouceBundle através do método estático ResourceBundle.getBundle(String,Locale). O que este método faz é procurar o arquivo cujo nome seja igual o passado no primeiro parâmetro e o Locale seja igual ao passado no segundo parâmetro.
Ex: A execução desse método:
ResourceBundle.getBundle("internacionalizacao.linguas.Linguas", new Locale(“pt”,”BR”);
Vai resultar na escolha do arquivo “Linguas_pt_BR.properties” do pacote “internacionalizacao.linguas”.
OBS Importante: É necessário passar o caminho completo do arquivo, ou seja: “pacote.NomePadrao”.
Agora que o objeto palavras contém a referência para todas as palavras daquele idioma, basta atribuí-las aos respectivos JLabels e ao título.
Muito legal não?
Quem quiser pode baixar o projeto através desse link.
É isso ai galera, qualquer dúvida é só deixar um comentário e prometo que respondo o mais rápido possível.
[]s,
Saab.
PS: Esse post também foi dica do Dang do Programei.org. Valew!
Popularity: 2% [?]






Cara, muito show esse post!!!
É impressionante como muitas vezes deixamos os pequenos detalhes de software de lado achando que são bem “pequenos”, quando na verdade eles fazema maior falta depois, principalmente nos quesitos “manutenibilidade” e “extensibilidade”
Vlew!!
É isso ai Diego.
No final das contas os “pequenos” detalhes são os que fazem a maior diferença e dão uma super dor de cabeça… Por isso é bom planejar bem o software antes de abrir a IDE e sair programando.
[].
Ta mandando bemm negão hehe…show de bola msm.
Abrço .
Do you have copy writer for so good articles? If so please give me contacts, because this really rocks!
I write the articles by my own… My contact is @fesaab… hehehhhe Follow me.
Muito bom amigo, perguntei la no GUJ sobre o assunto e era justamente isso que precisava. Como disse “meu dia de sorte” ahuhauhe… Artigo excelente cara. Abraços…
massa hein saab, mandou bem!
Valew la pelo crédito
adorei!!!
já vi alguma coisa, mas não desse jeito!!
excelente post!!!!
Só não falo que você é o CARA porque fica chato!
Vlw pelos comentários pessoal!
Voltem sempre!