blob: 4b39bf514e2b249a76cb3cc983f322887ab11a4d [file] [log] [blame]
//
// 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+]