• Mundo Java
  • Java Simples
    Porque Java não precisa ser dificil…
    • Home
    • Participe
    • Sobre Mim…
    RSS
    sábado, março 20, 2010 Categorized under Mundo Java

    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:

    image

    Dentro do pacote internacionalizacao crie um JFrame e o deixe parecido com este:

    image

    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:

    image

    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.


    image image image image

    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% [?]

    •  
    •  
    •  
    •  
    •  
    •  
    •  
    •  
    •  
    •  
    •  
    •  
    •  
    •  
    •  

    9 Responses to “Internacionalização – Um software, vários idiomas!”

    1. Diogo de Souza disse:
      21/03/2010 às 10:36

      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!!

    2. Saab disse:
      21/03/2010 às 10:52

      É 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.
      [].

    3. Luiz Henrique disse:
      22/03/2010 às 22:16

      Ta mandando bemm negão hehe…show de bola msm.
      Abrço .

    4. Nemesis disse:
      04/04/2010 às 01:54

      Do you have copy writer for so good articles? If so please give me contacts, because this really rocks! :)

    5. Saab disse:
      04/04/2010 às 09:42

      I write the articles by my own… My contact is @fesaab… hehehhhe Follow me. :D

    6. Soulless-BR disse:
      04/04/2010 às 12:05

      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…

    7. Daniel disse:
      03/05/2010 às 21:48

      massa hein saab, mandou bem!
      Valew la pelo crédito ;)

    8. Tacio disse:
      28/05/2010 às 04:50

      adorei!!!
      já vi alguma coisa, mas não desse jeito!!
      excelente post!!!!
      Só não falo que você é o CARA porque fica chato!

    9. Saab disse:
      28/05/2010 às 10:50

      Vlw pelos comentários pessoal!
      Voltem sempre! :D

    Leave a Reply

    Clique aqui para cancelar a resposta.

    « Robot ? O Que é isso?
    Annotations: O que é, pra que serve? »
    • Busca

    • Tags

      acessar annotations automacao blog bytes cliente computacional converter data date erro exemplo firebird formatacao framework idiomas integrar internacionalizacao ireport java jcalendar jdatechooser linguas manutencao mascara mysql netbeans objeto paleta pratico reflexao reforma representacao robot salvar serializacao simples spring string subreports transformando transformar tutorial twitter twitter4j
    • Posts mais acessados

      1. 100% Criando um cliente para Twitter - Parte 1
      2. 4% Criando um cliente para Twitter – Parte 2
      3. 3% Mudando a cor, fonte, alinhamento, etc... de células de JTable
      4. 3% Adicionando JCalendar e JDateChooser à paleta do Netbeans
      5. 3% Trabalhando com Datas… chega de trauma!
    • Links

      Web Development & Design Blogs TopOfBlogs Central Blogs BlogBlogs blog directory Web Development (Programming) - TOP.ORG Parceria.info - Divulgue seu Site Technology Blogs - Blog Rankings
    • Categories

      • Mundo Java
    • Blogroll

      • Twitter João Lucas
      • Twitter Keep Sistemas
      • Twitter Saab

    Copyright © 2010 Java Simples - Porque Java não precisa ser dificil…. Subscribe to our RSS.
    This web site is proudly powered by WordPress and a free wordpress theme by TopWPThemes.com.
    For the latest trends in web hosting and blogging software come to WebHostingFan.com.