• Nenhum resultado encontrado

USJT-2016-CCO&SI-PPINT-Aula07-Internacionalização em Java

N/A
N/A
Protected

Academic year: 2021

Share "USJT-2016-CCO&SI-PPINT-Aula07-Internacionalização em Java"

Copied!
7
0
0

Texto

(1)

USJT – 2016 – CCO & SI – PPINT – Práticas de Programação Integrada

Professores:

Calvetti, Élcio, Fúlvio, Hamilton, Liliane e Rodrigo

Aula:

07

Assunto:

Internacionalização em Java.

Conceitos Básicos abordados pelo Professor:

- Bundle;

- ResourceBundle;

- Locale; e

- getString.

Resumo:

Internacionalizar uma aplicação é apresentar todas as informações, fornecidas ao usuário, em um

idioma selecionado.

Para internacionalizar uma aplicação em Java é necessário cumprir as seguintes etapas:

1. Criar um arquivo de configuração, chamado Bundle, para cada idioma/país utilizado, seguindo o

padrão:

<nomearquivo>_<linguagem>_<país>.properties

2. Fazer a carga desses arquivos através da classe:

ResourceBundle

3. Invocar o método getString() da classe ResourceBundle para cada informação que será

apresentada na tela;

4. O conteúdo da aplicação sempre deverá seguir o padrão <chave> = <valor> para cada uma das

informações que serão internacionalizadas. Observar que a chave deverá ser a mesma em toda a

aplicação;

5. Para que a aplicação seja internacionalizada é necessário substituir o valor da informação pela

chamada do método:

getString(“<chave>”)

Ao invés de se colocar um texto fixo, deverá ser feita uma chamada ao método getString(),

informando a chave do arquivo de Bundle que contém o valor que deverá ser apresentado no local;

6. A carga do Bundle será feita com as classes ResourceBundle e Locale;

7. Os arquivos de Bundle devem estar no classpath para que sejam carregados (por exemplo, na pasta

de classes Java).

(2)

Exemplo: TelaExemplo.java

import java.awt.Container; import java.awt.FlowLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.Locale; import java.util.ResourceBundle; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JOptionPane; import javax.swing.JTextField;

public class TelaExemplo extends JFrame implements ActionListener {

private JButton bt; private JTextField tx; private JLabel rt;

private ResourceBundle bn = null; public TelaExemplo()

{ // Menu simples de escolha de idioma

int op = Integer.parseInt( JOptionPane.showInputDialog(

"Idioma - Language - Langue\n\n1- Português\n2- English\n3- Française\n ")); // Carga dos arquivos de internacionalização

switch(op) {

case 1: bn = ResourceBundle.getBundle("ex1", new Locale("pt", "BR")); break;

case 2: bn = ResourceBundle.getBundle("ex1", Locale.US); break;

case 3: bn = ResourceBundle.getBundle("ex1", Locale.FRANCE); break;

default: bn = ResourceBundle.getBundle("ex1"); break;

}

// Escolhe Layout do conteiner

Container cx = getContentPane(); cx.setLayout(new FlowLayout()); // Instânciação dos objetos

bt = new JButton(bn.getString("tela1.botao.calcular")); rt = new JLabel(bn.getString("tela1.rotulo.valor") + ":"); tx = new JTextField(10);

// Inclusão no container

cx.add(rt); cx.add(tx); cx.add(bt);

// Registro no listener dos objetos controlados

bt.addActionListener(this); // Ajustes finais do frame

setTitle(bn.getString("tela1.titulo")); setSize(193, 104);

setVisible(true); }

// Implementacao do metodo da interface ActionListener

public void actionPerformed(ActionEvent e) { if (tx.getText().length() == 0) { JOptionPane.showMessageDialog( null, bn.getString("mensagem.valor.nulo"), bn.getString("tela1.erro.titulo"), JOptionPane.ERROR_MESSAGE ); } }

public static void main(String args[]) {

TelaExemplo exemplo = new TelaExemplo();

exemplo.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); }

(3)

Ex1_pt_BR.properties

tela1.botao.calcular=Calcular tela1.rotulo.valor=Valor tela1.titulo=Exemplo

tela1.erro.titulo=Mensagem de Erro

mensagem.valor.nulo=O campo "valor" não pode ser vazio.

Ex1_en_US.properties

tela1.botao.calcular=Calculate tela1.rotulo.valor=Value tela1.titulo=Example

tela1.erro.titulo=Error Message

mensagem.valor.nulo=The field "value" can not be empty.

Ex1_fr_FR.properties

tela1.botao.calcular=Calculer tela1.rotulo.valor=Valeur tela1.titulo=Exemple

tela1.erro.titulo=Message d'erreur

mensagem.valor.nulo=Le domaine de la "valeur" ne peut pas être vide (by google).

Atividade Prática:

Reescreva o programa das figuras 22.5 e 22.6 do Livro do Deitel (6ª Edição), adaptando a interface com

o usuário do idioma Inglês para os idiomas Português, Inglês, Francês e Italiano. O idioma deverá ser

escolhido pelo usuário através de um novo menu de idiomas, inserido no próprio aplicativo.

(4)

// Fig. 22.5: MenuFrame.java // Demonstrando menus. import java.awt.Color; import java.awt.Font; import java.awt.BorderLayout; import java.awt.event.ActionListener; import java.awt.event.ActionEvent; import java.awt.event.ItemListener; import java.awt.event.ItemEvent; import javax.swing.JFrame; import javax.swing.JRadioButtonMenuItem; import javax.swing.JCheckBoxMenuItem; import javax.swing.JOptionPane; import javax.swing.JLabel; import javax.swing.SwingConstants; import javax.swing.ButtonGroup; import javax.swing.JMenu; import javax.swing.JMenuItem; import javax.swing.JMenuBar;

public class MenuFrame extends JFrame {

private final Color colorValues[] =

{ Color.BLACK, Color.BLUE, Color.RED, Color.GREEN };

private JRadioButtonMenuItem colorItems[]; // itens do menu Color

private JRadioButtonMenuItem fonts[]; // itens do menu Font

private JCheckBoxMenuItem styleItems[]; // itens do menu Font Style

private JLabel displayJLabel; // exibe texto de exemplo

private ButtonGroup fontButtonGroup; // gerencia itens do menu Font

private ButtonGroup colorButtonGroup; // gerencia itens do menu Color

private int style; // utilizado para criar estilos de fontes

// construtor sem argumento para configurar a GUI

public MenuFrame() {

super( "Using JMenus" );

JMenu fileMenu = new JMenu( "File" ); // cria o menu File

fileMenu.setMnemonic( 'F' ); // configura o mnemônico como F

// cria item de menu About...

JMenuItem aboutItem = new JMenuItem( "About..." );

aboutItem.setMnemonic( 'A' ); // configura o mnemônico com A

fileMenu.add( aboutItem ); // adiciona o item about ao menu File

aboutItem.addActionListener(

new ActionListener() // classe interna anônima

{

// exibe um diálogo de mensagem quando o usuário seleciona About...

public void actionPerformed( ActionEvent event ) {

JOptionPane.showMessageDialog( MenuFrame.this, "This is an example\nof using menus", "About", JOptionPane.PLAIN_MESSAGE ); } // fim do método actionPerformed

} // fim da classe interna anônima

); // fim da chamada para addActionListener

JMenuItem exitItem = new JMenuItem( "Exit" ); // cria o item exit

exitItem.setMnemonic( 'x' ); // configura o mnemônico como x

fileMenu.add( exitItem ); // adiciona o item exit ao menu File

exitItem.addActionListener(

new ActionListener() // classe interna anônima

{

// termina o aplicativo quando o usuário clica exitItem

public void actionPerformed( ActionEvent event ) {

System.exit( 0 ); // encerra o aplicativo

} // fim do método actionPerformed

} // fim da classe interna anônima

); // fim da chamada para addActionListener

JMenuBar bar = new JMenuBar(); // cria a barra de menus

setJMenuBar( bar ); // adiciona uma barra de menus ao aplicativo

(5)

JMenu formatMenu = new JMenu( "Format" ); // cria o menu Format

formatMenu.setMnemonic( 'r' ); // configura o mnemônico como r

// array listando cores de string

String colors[] = { "Black", "Blue", "Red", "Green" }; JMenu colorMenu = new JMenu( "Color" ); // cria o menu Color

colorMenu.setMnemonic( 'C' ); // configura o mnemônico como C

// cria itens do menu Color com botões de opção

colorItems = new JRadioButtonMenuItem[ colors.length ]; colorButtonGroup = new ButtonGroup(); // gerencia cores

ItemHandler itemHandler = new ItemHandler(); // handler para cores

// cria itens do menu Color com botões de opção

for ( int count = 0; count < colors.length; count++ ) {

colorItems[ count ] = new JRadioButtonMenuItem( colors[ count ] ); // cria o item

colorMenu.add( colorItems[ count ] ); // adiciona o item ao menu Color

colorButtonGroup.add( colorItems[ count ] ); // adiciona ao grupo

colorItems[ count ].addActionListener( itemHandler ); } // fim do for

colorItems[ 0 ].setSelected( true ); // seleciona o primeiro item Color

formatMenu.add( colorMenu ); // adiciona o menu Color ao menu Format

formatMenu.addSeparator(); // adiciona um separador no menu

// array listando nomes de fonte

String fontNames[] = { "Serif", "Monospaced", "SansSerif" }; JMenu fontMenu = new JMenu( "Font" ); // cria a fonte do menu

fontMenu.setMnemonic( 'n' ); // configura o mnemônico como n

// cria itens do menu radiobutton para nomes de fonte

fonts = new JRadioButtonMenuItem[ fontNames.length ];

fontButtonGroup = new ButtonGroup(); // gerencia os nomes das fontes

// criar itens do menu Font com botões de opção

for ( int count = 0; count < fonts.length; count++ ) {

fonts[ count ] = new JRadioButtonMenuItem( fontNames[ count ] );

fontMenu.add( fonts[ count ] ); // adiciona fonte ao menu Font

fontButtonGroup.add( fonts[ count ] ); // adiciona ao grupo de botões

fonts[ count ].addActionListener( itemHandler ); // adiciona handler

} // fim do for

fonts[ 0 ].setSelected( true ); // seleciona o primeiro item do menu Font

fontMenu.addSeparator(); // adiciona uma barra separadora ao menu Font

String styleNames[] = { "Bold", "Italic" }; // nomes dos estilos

styleItems = new JCheckBoxMenuItem[ styleNames.length ];

StyleHandler styleHandler = new StyleHandler(); // handler de estilo

// criar itens do menu Style com caixas de seleção

for ( int count = 0; count < styleNames.length; count++ ) {

styleItems[ count ] = new JCheckBoxMenuItem( styleNames[ count ] ); // para estilo

fontMenu.add( styleItems[ count ] ); // adiciona ao menu Font

styleItems[ count ].addItemListener( styleHandler ); // handler

} // fim do for

formatMenu.add( fontMenu ); // adiciona o menu Font ao menu Format

bar.add( formatMenu ); // adiciona o menu Format à barra de menus

// configura o rótulo para exibir texto

displayJLabel = new JLabel( "Sample Text", SwingConstants.CENTER ); displayJLabel.setForeground( colorValues[ 0 ] );

displayJLabel.setFont( new Font( "Serif", Font.PLAIN, 72 ) ); getContentPane().setBackground( Color.CYAN ); // configura o fundo

add( displayJLabel, BorderLayout.CENTER ); // adiciona displayJLabel

(6)

// classe interna para tratar eventos de ação dos itens de menu

private class ItemHandler implements ActionListener {

// processa seleções de cor e fonte

public void actionPerformed( ActionEvent event ) {

// processa a seleção de cor

for ( int count = 0; count < colorItems.length; count++ ) {

if ( colorItems[ count ].isSelected() ) {

displayJLabel.setForeground( colorValues[ count ] ); break;

} // fim do if

} // fim do for

// processa a seleção de fonte

for ( int count = 0; count < fonts.length; count++ ) {

if ( event.getSource() == fonts[ count ] ) {

displayJLabel.setFont(

new Font( fonts[ count ].getText(), style, 72 ) ); } // fim do if

} // fim do for

repaint(); // redesenha o aplicativo

} // fim do método actionPerformed

} // fim da classe ItemHandler

// classe interna para tratar eventos dos itens de menu com caixa de seleção

private class StyleHandler implements ItemListener {

// processa seleções de estilo da fonte

public void itemStateChanged( ItemEvent e ) {

style = 0; // inicializa o estilo

// verifica se negrito foi selecionado

if ( styleItems[ 0 ].isSelected() )

style += Font.BOLD; // adiciona negrito ao estilo

// verifica se itálico foi selecionado

if ( styleItems[ 1 ].isSelected() )

style += Font.ITALIC; // adiciona itálico ao estilo

displayJLabel.setFont(

new Font( displayJLabel.getFont().getName(), style, 72 ) ); repaint(); // redesenha o aplicativo

} // fim do método itemStateChanged

} // fim da classe StyleHandler

} // fim da classe MenuFrame

//---

// Fig. 22.6: MenuTest.java // Testando MenuFrame. import javax.swing.JFrame;

public class MenuTest {

public static void main( String args[] ) {

MenuFrame menuFrame = new MenuFrame(); // criar MenuFrame

menuFrame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE ); menuFrame.setSize( 500, 200 ); // configura o tamanho do frame

menuFrame.setVisible( true ); // exibe o frame

} // fim de main

} // fim da classe MenuTest

(7)

/************************************************************************** * (C) Copyright 1992-2005 by Deitel & Associates, Inc. and * * Pearson Education, Inc. All Rights Reserved. * * * * DISCLAIMER: The authors and publisher of this book have used their * * best efforts in preparing the book. These efforts include the * * development, research, and testing of the theories and programs * * to determine their effectiveness. The authors and publisher make * * no warranty of any kind, expressed or implied, with regard to these * * programs or to the documentation contained in these books. The authors * * and publisher shall not be liable in any event for incidental or * * consequential damages in connection with, or arising out of, the * * furnishing, performance, or use of these programs. * *************************************************************************/

Referências

Documentos relacionados

Cabe ao Coordenador do projeto designar os orientadores que atuarão no projeto, procurando evitar que um mesmo orientador supervisione mais do que 10 (dez)

Objetivos: verificar a aplicabilidade e reprodutibilidade de um teste de resistência muscular inspiratória utilizando a adaptação de um antigo modelo do THRESHOLD ® IMT (não

Eletroforese em gel de agarose e representação gráfica do padrão de splicing dos transcritos de mRNA provenientes do gene repórter transfectado em células HEK 293

Além disso, existem limites regulatórios para a qualidade e funcionamento dos sistemas de telefonia móvel, e estes limites de intensidade de campo ou potência, taxas de

Os testes de desequilíbrio de resistência DC dentro de um par e de desequilíbrio de resistência DC entre pares se tornarão uma preocupação ainda maior à medida que mais

as quais discorremos no corpo deste texto, são: (a) a brincadeira de Capryynre, que chamamos em português de brincadeira de jabuti; (b) a brincadeira de A’cruu’te, que recebeu o

Entretanto, uma observação mais detalhada da Figura 5.6, referente ao laminado PPS-C, já permite verificar claramente, para os dois modos de aquecimento dos laminados, a presença