| // |
| // Licensed to the Apache Software Foundation (ASF) under one |
| // or more contributor license agreements. See the NOTICE file |
| // distributed with this work for additional information |
| // regarding copyright ownership. The ASF licenses this file |
| // to you under the Apache License, Version 2.0 (the |
| // "License"); you may not use this file except in compliance |
| // with the License. You may obtain a copy of the License at |
| // |
| // http://www.apache.org/licenses/LICENSE-2.0 |
| // |
| // Unless required by applicable law or agreed to in writing, |
| // software distributed under the License is distributed on an |
| // "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| // KIND, either express or implied. See the License for the |
| // specific language governing permissions and limitations |
| // under the License. |
| // |
| |
| = Internacionalizando um Form de GUI |
| :jbake-type: tutorial |
| :jbake-tags: tutorials |
| :jbake-status: published |
| :icons: font |
| :syntax: true |
| :source-highlighter: pygments |
| :toc: left |
| :toc-title: |
| :description: Internacionalizando um Form de GUI - Apache NetBeans |
| :keywords: Apache NetBeans, Tutorials, Internacionalizando um Form de GUI |
| |
| O tutorial a seguir conduz você por algumas das etapas básicas da internacionalização no NetBeans IDE. Nós iremos configurar a internacionalização de um form e depois criar esse form. Em seguida, internacionalizaremos todo o projeto, que contém vários forms em alguns pacotes diferentes. Você pode internacionalizar aplicações especificando a internacionalização automática ou usando um assistente especial. |
| |
| *Duração esperada: 30 minutos* |
| |
| |
| image::images/netbeans-stamp-80-74-73.png[title="O conteúdo desta página se aplica ao NetBeans IDE 7.0 e versão mais recente"] |
| |
| |
| *Para concluir este tutorial, você precisa dos seguintes recursos e softwares.* |
| |
| |=== |
| |Software ou Recurso |Versão Necessária |
| |
| |link:http://netbeans.org/downloads/index.html[+NetBeans IDE+] |versão 7.0 ou posterior |
| |
| |link:http://www.oracle.com/technetwork/java/javase/downloads/index.html[+JDK (Java Development Kit)+] |versão 6, 7 ou 8 |
| |=== |
| |
| |
| == Princípio da Internacionalização |
| |
| A internacionalização permite que as aplicações sejam adaptadas a vários idiomas e regiões sem exigir alterações de engenharia ou recompilação. Programas de internacionalização permitem que elementos textuais, como mensagens de status e labels de componentes de GUI, sejam armazenados fora do código-fonte e recuperados dinamicamente, em vez de codificados no programa. |
| |
| Geralmente, as strings internacionalizadas são armazenadas em arquivos de propriedades, na forma de pares chave/valor. A chave é o identificador usado pelo programa para recuperar o texto e o valor é o texto em si. Crie um arquivo de propriedades para cada configuração regional (ou idioma) para o qual o programa for traduzido. As chaves são as mesmas em cada configuração regional - somente as strings são diferentes. |
| |
| O IDE fornece ferramentas para realizar as seguintes tarefas: |
| |
| * Inserir strings internacionalizadas à medida que você cria um form GUI ou programa JAVA |
| * Substituir todas as strings codificadas em um arquivo individual ou grupo de arquivos por strings internacionalizadas |
| |
| |
| == Internacionalizando um Form de GUI em Tempo de Design |
| |
| Neste exercício, abriremos o projeto da aplicação Java de demonstração, que contém uma caixa de diálogo Localizar bastante conhecida criada com o GUI Builder. Em seguida, ativaremos a internacionalização automática para o form FindDialog.java. Para testar o form de GUI internacionalizado, adicionaremos uma nova configuração regional ao arquivo de propriedades e executaremos o form em uma configuração regional que não é a default. |
| |
| |
| === Abrindo o Projeto de Exemplo |
| |
| 1. Faça download e descompacte o projeto link:https://netbeans.org/files/documents/4/770/InternationalizeDemo.zip[+InternationalizeDemo.zip+] em qualquer lugar no computador. |
| 2. Escolha Arquivo > Abrir Projeto, navegue para o projeto ``InternationalizeDemo`` extraído na última etapa e clique em Abrir. A pasta do projeto pode estar em uma outra pasta também chamada ``InternationalizeDemo`` . |
| 3. Expanda Pacotes de Códigos-fonte > Demonstração e clique duas vezes em ``FindDialog.java`` . O form de exemplo é aberto no GUI Builder. |
| |
| image::images/finddialog_ai18n.png[] |
| |
| |
| === Ativar a Internacionalização Automática |
| |
| 1. Selecione o nó-raiz na janela Navegador (chamado ``Form FindDialog`` ). |
| |
| image::images/navigator.png[] |
| |
| |
| |
| . Na janela Propriedades, marque a caixa de seleção na propriedade Automatic Internationalization. |
| |
| image::images/properties.png[] |
| |
| |
| |
| . Clique em Upgrade na caixa de diálogo Upgrade do Formato do Form GUI. |
| |
| Se a caixa de seleção estiver marcada, o IDE cria o arquivo ``Bundle.properties`` no pacote ``demo`` conforme está definido na propriedade ``Properties Bundle File`` . |
| |
| image::images/bundle_new.png[] |
| |
| Se você precisar que o arquivo ``Bundle.properties`` fique em outro local, poderá clicar no botão de reticências (...) à direita do Arquivo Conjunto de Propriedades e escolher um local ou digitar diretamente o caminho no campo de texto da propriedade. |
| |
| |
| |
| . Na janela Projetos, clique duas vezes no nó ``Bundle.properties`` na janela Projetos ou clique com o botão direito do mouse no nó e escolha Editar. |
| |
| O arquivo de propriedades é aberto no Editor de Código-fonte. Como você pode ver, todas as chaves e os valores apropriados para o form ``FindDialog.java`` são gerados. (O nome de cada chave é obtido do nome do arquivo de form e do nome de variável do componente). Por exemplo, a chave ``FindDialog.jLabel1.text`` é gerada para um componente com o nome de variável ``jLabel1`` colocado no arquivo de form ``FindDialog`` . O valor ``jLabel1`` representa a propriedade Text do componente neste exemplo. |
| |
| |
| |
| . Escolha o arquivo ``Bundle.properties`` . |
| |
| |
| === Internacionalizando Componentes GUI Individuais |
| |
| Nós agora utilizaremos o GUI Builder para inserir strings internacionalizadas para os JLabels e os JButtons no form. |
| |
| 1. Selecione o componente GUI apropriado (por ex. ``jLabel1`` ) na área de Design. |
| 2. Na janela Propriedades, clique no botão de reticências (...) da propriedade Text. |
| |
| *Observação:* você também pode internacionalizar outras propriedades que tenham valor de Strings, como Mnemonic, Accessible Name, Accessible Descriptor e ToolTip. |
| |
| |
| |
| . O editor de propriedade é alternado para o modo de pacote de recursos. Verifique se o campo Nome do Pacote está definido como ``demo.Bundle`` e se o campo Chave contém a string ``FindDialog.jLabel1.text`` |
| |
| |
| . Digite ``Localizar:`` no campo Valor. |
| |
| |
| . Clique em OK. |
| |
| Repita as etapas anteriores para todos os componentes para que o form tenha a aparência semelhante à figura a seguir: |
| |
| [.feature] |
| -- |
| image::images/finddialog_new_small.png[role="left", link="images/finddialog_new.png"] |
| -- |
| |
| *Observação:* as etapas de 1 a 5 podem ser realizadas de uma maneira mais simples e rápida. Clique duas vezes em ``jLabel1`` na view design, altere o texto de ``jLabel1`` para ``Localizar:`` e pressione Enter. O resultado é o mesmo das etapas mencionadas acima. |
| |
| Para fazer com que os componentes tenham a mesma largura, complete as etapas abaixo: |
| |
| 1. Pressione Ctrl -clique em todos os oito JTextFields do form para selecioná-los. |
| 2. Com os JCheckBoxes selecionados, clique com o botão direito do mouse em um deles e escolha Mesmo Tamanho > Mesma Largura no menu pop-up. |
| 3. Aplique as etapas 1-2 para os três jButtons. |
| |
| |
| === Adicionando uma Nova Configuração Regional |
| |
| 1. Selecione o nó-raiz na janela Navegador (o nó do ``Form FindDialog`` ). |
| 2. Na janela Propriedades, clique no botão de reticências (...) da propriedade Design Locale. |
| 3. Na caixa de diálogo, Nova Configuração Regional, escolha ``es_ES`` na caixa de combinação ``Configurações Regionais Predefinidas:`` . |
| 4. Clique em OK. |
| |
| A nova configuração regional aparece abaixo do nó ``Bundle.properties`` , como mostrado abaixo: |
| |
| image::images/addlocale_new.png[] |
| |
| |
| |
| . Na janela Projetos, clique com o botão direito do mouse em ``Bundle.properties`` e escolha Abrir. |
| |
| |
| . Traduza mensagens individuais na coluna correspondente da tabela para o novo idioma (por exemplo, espanhol), como mostrado abaixo: |
| |
| [.feature] |
| -- |
| image::images/bundles_new_small.png[role="left", link="images/bundles_new.png"] |
| -- |
| |
| |
| |
| . Pressione Ctrl-S para salvar suas edições. |
| |
| |
| . Selecione a guia ``FindDialog.java`` para exibir o form que você está internacionalizando. |
| |
| |
| . Clique com o botão direito do mouse no nó-raiz da janela Navegador e escolha Recarregar Form (se preferir, pressione Ctrl-R). |
| |
| |
| . Clique em Salvar na caixa de diálogo Pergunta que é exibida. |
| O form é reaberto e a configuração regional Espanhol é carregada no design, como mostrado abaixo: |
| |
| [.feature] |
| -- |
| image::images/finddialog_es_new_small.png[role="left", link="images/finddialog_es_new.png"] |
| -- |
| |
| |
| === Testando uma Configuração Regional Não Default |
| |
| 1. Na janela Projetos, clique com o botão direito do mouse no projeto InternationalizeDemo e escolha Propriedades. |
| 2. No painel Categorias, selecione o nó Executar. |
| 3. Insira ``-Duser.language=es -Duser.country=ES`` no campo Opções VM. |
| |
| [.feature] |
| -- |
| image::images/prjproperties_small.png[role="left", link="images/prjproperties.png"] |
| -- |
| |
| |
| |
| . Clique em OK. |
| |
| |
| . Clique com o botão direito do mouse no nó do projeto InternationalizeDemo e escolha Executar. |
| |
| O IDE executa a caixa de diálogo ``FindDialog`` na configuração regional Espanhol, como mostrado abaixo. |
| |
| [.feature] |
| -- |
| image::images/run_small.png[role="left", link="images/run.png"] |
| -- |
| |
| |
| == Internacionalizando um Projeto Inteiro |
| |
| Em geral, nós temos vários arquivos na configuração regional default e precisamos adaptá-los para que sejam traduzidos em outros idiomas. O Assistente de Internacionalização é a ferramenta perfeita para esta tarefa, pois ele pode internacionalizar vários arquivos de uma vez. Nós mostraremos esta funcionalidade no projeto de exemplos de forms de GUI , que contém o form criado no tutorial link:quickstart-gui.html[+Criando um GUI Swing+]. |
| |
| |
| === Criando um Projeto de Exemplo |
| |
| 1. Escolha Arquivo > Novo Projeto ou clique no ícone Novo Projeto na barra de ferramentas do IDE. |
| 2. No painel Categorias, selecione o nó Exemplos > Java. No painel Projetos, selecione Exemplos de Forms de GUI. Clique em Próximo. |
| 3. Insira ``GUIFormExamples`` no campo Nome do Projeto e especifique o local do projeto (por ex., ``/space/projects`` ). |
| 4. Clique em Finalizar. |
| |
| image::images/formexamples.png[] |
| |
| |
| === Preparando um Arquivo de Propriedades |
| |
| 1. Escolha Arquivo > Novo arquivo ou clique no ícone Novo Arquivo na barra de ferramentas do IDE. |
| 2. No painel Categorias, selecione o nó Outros e, no painel Tipos de Arquivos, escolha Arquivo de Propriedades. Clique em Próximo. |
| 3. Insira ``ContactEditor`` no campo Nome do Arquivo. |
| 4. Clique em Procurar e especifique a pasta ``GUIFormExamples/src/examples`` como a localização do arquivo na caixa de diálogo Procurar Pastas. |
| 5. Clique em Selecionar Pasta. |
| 6. Clique em Finalizar. |
| |
| O IDE cria o arquivo ``ContactEditor.properties`` e o abre no Editor de Código-fonte. |
| |
| Repita as etapas anteriores para criar outro arquivo ``Antenna.properties`` . |
| |
| image::images/ceprjprops.png[] |
| |
| |
| === Chamando o Assistente de Internacionalização |
| |
| 1. No menu Principal, escolha Ferramentas > Internacionalização > Assistente de Internacionalização. |
| 2. Na primeira página do Assistente, clique em Adicionar Códigos-fonte. |
| 3. Na caixa de diálogo Selecionar Códigos-fonte, expanda os nós ``Pacotes de Código-fonte`` > ``exemplos`` e pressione Ctrl+Clique nos arquivos ``Antenna.java`` , ``ContactEditor.java`` e ``Find.java`` para selecioná-los. |
| 4. Clique em OK. |
| |
| Os arquivos de código-fonte aparecem na primeira página do assistente, como mostrado abaixo: |
| |
| [.feature] |
| -- |
| image::images/i18nwizardone_small.png[role="left", link="images/i18nwizardone.png"] |
| -- |
| |
| |
| |
| . Para fins de demonstração, selecione ``examples.Find.`` e clique no botão Remover Código-fonte. |
| |
| |
| . Clique em Próximo. |
| |
| |
| . Verifique se o Assistente de Internacionalização oferece os arquivos de propriedades corretos ``examples.Antenna`` e ``examples.ContactEditor`` . Caso não ofereça, use o botão Selecionar Recurso para escolher o arquivo de propriedades correto. |
| |
| [.feature] |
| -- |
| image::images/i18nwizardtwo_small.png[role="left", link="images/i18nwizardtwo.png"] |
| -- |
| |
| |
| |
| . Clique em Próximo. |
| |
| |
| . Pule a página 3 do Assistente, pois você não criará quaisquer campos nem modificará valores adicionais, e clique em Próximo. |
| |
| |
| . Todas as strings codificadas são exibidas na última etapa do Assistente de internacionalização e é possível decidir quais delas virão do arquivo de propriedades (use a caixa de seleção). Você pode personalizar ainda mais comentários, valores, chaves individuais e o formato de strings substituídas clicando no botão de reticências (...) de uma string. |
| |
| [.feature] |
| -- |
| image::images/i18nwizardthree_small.png[role="left", link="images/i18nwizardthree.png"] |
| -- |
| |
| |
| |
| . Clique em Finalizar. |
| |
| Agora, que a internacionalização do código-fonte está finalizada, outra configuração regional pode ser <<newlocale,adicionada>> e <<testlocale,testada>>, como mostrado anteriormente. |
| |
| |
| == Internacionalizando um Único Form |
| |
| Usar as funcionalidades automáticas do I18n é a maneira mais fácil de internacionalizar um form de GUI. Mas se você não tiver o pacote de atualização instalado, ou se também desejar internacionalizar o código não gerado pelo Editor de form, então a maneira mais adequada é usar a janela Internacionalizar. (Esta funcionalidade funciona com qualquer arquivo ``.java`` , não apenas com os arquivos criados com o Editor de Form). O próximo exemplo usa a janela Internacionalização, que faz parte da instalação default do Netbeans IDE. |
| |
| Neste último exercício, nós reutilizaremos o projeto de exemplos de forms de GUI e internacionalizaremos o form Find.java, que foi excluído no exercício anterior. Nós chamaremos a caixa de diálogo Internacionalizar para substituir todas as strings codificadas neste arquivo. Finalmente, percorreremos uma curta demonstração de como inserir uma string internacionalizada no código-fonte ao escrever um programa. |
| |
| |
| === Usando a Caixa de Diálogo Internacionalizar |
| |
| 1. Na janela Projetos, selecione ``Find.java`` e escolha Ferramentas > Internacionalização > Internacionalizar no menu principal. |
| |
| O IDE mostra a caixa de diálogo Internacionalização e faz um preenchimento prévio da primeira string codificada do código-fonte ``Find.java`` . |
| |
| |
| |
| . Clique em Selecionar para selecionar um arquivo de propriedades particular ou crie um novo. |
| |
| |
| . Na caixa de diálogo Selecionar Pacote de Recursos , digite ``Find.properties`` no campo de texto Nome do Arquivo, clique em Criar Novo e, em seguida, em OK. |
| |
| |
| . Você pode modificar o formato da string substituída, a chave, o valor ou o comentário, se necessário. Nós manteremos os valores default. |
| |
| |
| . Clique em Substituir para confirmar a alteração e mover um foco na próxima string codificada. |
| |
| Se uma string codificada não precisar ser substituída, clique no botão Ignorar. |
| |
| [.feature] |
| -- |
| image::images/i18ndialog_small.png[role="left", link="images/i18ndialog.png"] |
| -- |
| |
| |
| === Inserindo uma String Internacionalizada Simples |
| |
| 1. Na janela Projetos, clique com o botão direito do mouse em ``Find.java`` e escolha Editar. |
| |
| O IDE abre o arquivo ``Find.java`` no Editor de Código-fonte. |
| |
| |
| |
| . Role pelo código-fonte e localize o método principal. |
| |
| |
| . Insira a seguinte linha em negrito no método principal: |
| |
| [source,xml] |
| ---- |
| |
| public static void main(String args[]) { |
| /* Set the Nimbus look and feel */ |
| //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) "> |
| /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel. |
| * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html |
| */ |
| try { |
| javax.swing.UIManager.LookAndFeelInfo[] installedLookAndFeels=javax.swing.UIManager.getInstalledLookAndFeels(); |
| for (int idx=0; idx<installedLookAndFeels.length; idx++) |
| if ("Nimbus".equals(installedLookAndFeels[idx].getName())) { |
| javax.swing.UIManager.setLookAndFeel(installedLookAndFeels[idx].getClassName()); |
| break; |
| } |
| } catch (ClassNotFoundException ex) { |
| java.util.logging.Logger.getLogger(Find.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); |
| } catch (InstantiationException ex) { |
| java.util.logging.Logger.getLogger(Find.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); |
| } catch (IllegalAccessException ex) { |
| java.util.logging.Logger.getLogger(Find.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); |
| } catch (javax.swing.UnsupportedLookAndFeelException ex) { |
| java.util.logging.Logger.getLogger(Find.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); |
| } |
| //</editor-fold> |
| *System.out.println();* |
| /* Create and display the form */ |
| java.awt.EventQueue.invokeLater(new Runnable() { |
| public void run() { |
| new Find().setVisible(true); |
| } |
| }); |
| } |
| ---- |
| |
| |
| . Coloque o cursor do mouse em parênteses em ``System.out.println();`` de forma que uma string internacionalizada seja inserida como um parâmetro. |
| |
| |
| . Pressione Ctrl-Shift-J para chamar a caixa de diálogo Inserir String Internacionalizada (se preferir, é possível escolher Ferramentas > Internacionalização > Inserir String Internacionalizada no menu principal). |
| |
| |
| . Para o Nome do Pacote, clique no botão Selecionar, selecione a pasta ``Pacotes de Código-fonte > exemplos`` e insira ``Localizar`` como o Nome do pacote no campo de texto Nome do Arquivo. Em seguida, clique em OK. |
| O campo Nome do Pacote da caixa de diálogo Inserir String Internacionalizada mostra ``examples.Find`` . |
| |
| |
| . Digite ``Iniciar`` na caixa drop-down Chave e ``Iniciar caixa de diálogo Localizar`` no campo Valor. Em seguida, clique em OK. |
| |
| image::images/insi18nstring.png[] |
| |
| |
| |
| . O IDE insere uma string internacionalizada: |
| |
| [source,xml] |
| ---- |
| |
| public static void main(String args[]) { |
| /* Set the Nimbus look and feel */ |
| //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) "> |
| /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel. |
| * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html |
| */ |
| try { |
| javax.swing.UIManager.LookAndFeelInfo[] installedLookAndFeels=javax.swing.UIManager.getInstalledLookAndFeels(); |
| for (int idx=0; idx<installedLookAndFeels.length; idx++) |
| if ("Nimbus".equals(installedLookAndFeels[idx].getName())) { |
| javax.swing.UIManager.setLookAndFeel(installedLookAndFeels[idx].getClassName()); |
| break; |
| } |
| } catch (ClassNotFoundException ex) { |
| java.util.logging.Logger.getLogger(Find.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); |
| } catch (InstantiationException ex) { |
| java.util.logging.Logger.getLogger(Find.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); |
| } catch (IllegalAccessException ex) { |
| java.util.logging.Logger.getLogger(Find.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); |
| } catch (javax.swing.UnsupportedLookAndFeelException ex) { |
| java.util.logging.Logger.getLogger(Find.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); |
| } |
| //</editor-fold> |
| * System.out.println(java.util.ResourceBundle.getBundle("examples/Find").getString("Start"));* |
| /* Create and display the form */ |
| java.awt.EventQueue.invokeLater(new Runnable() { |
| public void run() { |
| new Find().setVisible(true); |
| } |
| }); |
| } |
| ---- |
| |
| |
| link:/about/contact_form.html?to=3&subject=Feedback:Internationalizing%20a%20GUI%20Form%20in%20NetBeans%20IDE[+Enviar Feedback neste Tutorial+] |
| |
| |
| |
| == Consulte Também |
| |
| Para obter mais informações, consulte os seguintes links: |
| |
| * link:http://www.oracle.com/pls/topic/lookup?ctx=nb8000&id=NBDAG920[+Implementando GUIs de Java+] em _Desenvolvendo Aplicações com o NetBeans IDE_ |
| * link:../../trails/matisse.html[+Trilha de Aprendizado das Aplicações de GUI do Java+] |
| * link:quickstart-gui.html[+Criando um GUI do Swing+] |
| * link:http://wiki.netbeans.org/wiki/view/NetBeansUserFAQ[+FAQ do GUI Builder+] |