1. java
  2. android
  3. c#
  4. .net
  5. javascript
  6. php
  7. jquery
  8. html
  9. sql

Problemas com internacionalização em Java

Bom dia!

Estou tentando modificar o idioma de algumas telas, mas sempre recebo um erro. Ainda não entendo muito da linguagem Java. Alguém poderia me ajudar a entender o que estou fazendo de errado?

Dessa tela eu tento passar a String selecao, que recebe o idioma, para outra tela, a ViewTelaInicial(selecao).

public class ViewEscolhaIdioma extends JFrame implements ActionListener{

    private JFrame frame;
    private JButton btnAvancarTelaEscolhaIdioma;
    private JButton btnSairTelaEscolhaIdioma;
    private final String [] idiomas = {"Português", "English", "Español"};
    private ViewTelaInicial telaInicial;
    private ResourceBundle res;
    private JComboBox cbxEscolhaIdiomaTelaEsolhaIdioma;
    private String selecao;

    public ViewEscolhaIdioma() 
    {
        frame = new JFrame();
        frame.setBounds(100, 100, 400, 255);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.getContentPane().setLayout(null);

        JPanel panel = new JPanel();
        panel.setBounds(0, 0, 400, 255);
        frame.getContentPane().add(panel);
        panel.setLayout(null);
        panel.setBackground(Color.WHITE);

        JLabel lblEsolhaSeuIdioma = new JLabel("Escolha seu idioma");
        lblEsolhaSeuIdioma.setBounds(75, 100, 120, 14);
        panel.add(lblEsolhaSeuIdioma);

        cbxEscolhaIdiomaTelaEsolhaIdioma = new JComboBox(idiomas);
        cbxEscolhaIdiomaTelaEsolhaIdioma.setBounds(195, 100, 124, 20);

        panel.add(cbxEscolhaIdiomaTelaEsolhaIdioma);

        btnAvancarTelaEscolhaIdioma = new JButton("Avançar");
        btnAvancarTelaEscolhaIdioma.setBounds(220, 170, 99, 23);
        panel.add(btnAvancarTelaEscolhaIdioma);  

        btnAvancarTelaEscolhaIdioma.addActionListener(this);

        btnSairTelaEscolhaIdioma = new JButton("Sair");
        btnSairTelaEscolhaIdioma.setBounds(70, 170, 99, 23);
        panel.add(btnSairTelaEscolhaIdioma);  

        btnSairTelaEscolhaIdioma.addActionListener(this);

        JLabel lblAlterarVoo = new JLabel("");
        lblAlterarVoo.setIcon(new ImageIcon("E:\\ProjetoIntergrado\\src\\views\\download.jpg"));
        lblAlterarVoo.setBounds(140, 0, 150, 57);
        frame.add(lblAlterarVoo);    

            selecao = cbxEscolhaIdiomaTelaEsolhaIdioma.getSelectedItem().toString();
            selecaoIdioma(selecao);

        frame.setVisible(true);
                frame.setTitle("Escolha de Idioma");
                frame.setLocationRelativeTo(null);

     }


    public void selecaoIdioma(String selecao){
        if (selecao.equals("Português")) {
            res.getBundle("SistemaAeroporto", new Locale("pt", "BR"));
           // System.out.println("pt-br");
        }

        if (selecao == "English") {
              res.getBundle("SistemaAeroporto", new Locale("en", "US"));
        }

        if (selecao == "Español") {
              res.getBundle("SistemaAeroporto", new Locale("es", "ES"));
        }
    }

    public void actionPerformed(ActionEvent e){
        // Verifica se o evento pertence ao botão 
        if(e.getSource() == btnAvancarTelaEscolhaIdioma){
            telaInicial = new ViewTelaInicial(selecao);
            frame.setVisible(false);
            frame.dispose();
        }
        if(e.getSource() == btnSairTelaEscolhaIdioma){
            System.exit(0);
        }

    }
}

Na próxima tela, ViewTelaInicial, o eclipse indica um erro na seguinte linha de código, por enquanto a única em que tentei pegar o texto do arquivo .properties:

        lblLogin = new JLabel(res.getString("tela.login"));

Meu código para esta tela está assim:


public class ViewTelaInicial extends JFrame implements ActionListener{

    private JFrame frame;
    private JTextField txtSenhaTelaInicial;
    private JTextField txtLoginTelaInicial;
    private JButton btnNaoCadastradoTelaInicial;
    private JButton btnEsqueceuASenhaTelaInicial;
    private JButton btnEntrarTelaInicial;
    private ViewPrimeiroAcesso primeiroAcesso;
    private ViewRecuperacaoSenha recuperacaoSenha;
    private ViewTelaPrincipal telaPrincipal; 
    private ResourceBundle res = null;
    private JLabel lblLogin, lblSenha;


    public ViewTelaInicial(String selecao) 
    {
        selecionarIdioma(selecao);


        frame = new JFrame();
        frame.setBounds(100, 100, 250, 200);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.getContentPane().setLayout(new FlowLayout(FlowLayout.CENTER, 5, 5));
        frame.getContentPane().setBackground(Color.WHITE);

        lblLogin = new JLabel(res.getString("tela.login"));
        frame.getContentPane().add(lblLogin);

        txtLoginTelaInicial = new JTextField();
        txtLoginTelaInicial.setColumns(15);
        frame.getContentPane().add(txtLoginTelaInicial);

        lblSenha = new JLabel("Senha");
        frame.getContentPane().add(lblSenha);

        txtSenhaTelaInicial = new JPasswordField();
        frame.getContentPane().add(txtSenhaTelaInicial);
        txtSenhaTelaInicial.setColumns(13);

        btnEntrarTelaInicial = new JButton("Entrar");
        frame.getContentPane().add(btnEntrarTelaInicial);

        btnNaoCadastradoTelaInicial = new JButton("Ainda não é cadastrado?");
        frame.getContentPane().add(btnNaoCadastradoTelaInicial);

        btnEsqueceuASenhaTelaInicial = new JButton("Esqueceu a senha?");
        frame.getContentPane().add(btnEsqueceuASenhaTelaInicial);

        btnNaoCadastradoTelaInicial.addActionListener(this);
        btnEsqueceuASenhaTelaInicial.addActionListener(this);
        btnEntrarTelaInicial.addActionListener(this);





        /*JLabel label = new JLabel("");
        frame.getContentPane().add(label);*/
        frame.setLocationRelativeTo(null);


        frame.setVisible(true);
      frame.setTitle("Umasa - Login");
    }

    public void actionPerformed(ActionEvent e){
        if(e.getSource() == btnNaoCadastradoTelaInicial){
            primeiroAcesso = new ViewPrimeiroAcesso();
            frame.setVisible(false);
            frame.dispose();
        }

        if(e.getSource() == btnEsqueceuASenhaTelaInicial){
            recuperacaoSenha = new ViewRecuperacaoSenha();    
            frame.setVisible(false);
            frame.dispose();

        }

        if(e.getSource() == btnEntrarTelaInicial){
            telaPrincipal = new ViewTelaPrincipal();
            frame.setVisible(false);
            frame.dispose();
        }
    }

    public void selecionarIdioma(String selecao){
        if (selecao.equals("Português")) {
            res.getBundle("SistemaAeroporto", new Locale("pt", "BR"));
           // System.out.println("pt-br");
        }

        if (selecao == "English") {
              res.getBundle("SistemaAeroporto", new Locale("en", "US"));
        }

        if (selecao == "Español") {
              res.getBundle("SistemaAeroporto", new Locale("es", "ES"));
        }
    }

}

Eu já tentei de tudo em que consegui pensar. Se algum puder ajudar, eu agradeço.

  • Qual o erro que o Eclipse dá?

    Thales Minussi   22 de set de 2014
  • Olá, qual seria o erro que você está tendo nesta linha? Existe o arquivo "SistemaAeroporto_en_US.properties" ou "SistemaAeroporto_pt_BR.properties" ? É necessário que exista o arquivo contendo as properties...

    ricardomb2011   22 de set de 2014
  • Oi! Sim, esses arquivos existem. O erro era o NullPointerException, como apontado pelo ErickRAR. Mas já resolvi! Obrigada, gente! :)

    Carla Papalardo   22 de set de 2014
  1. Você vai ver essas setas em qualquer página de pergunta. Com elas, você pode dizer se uma pergunta ou uma resposta foram relevantes ou não.
  2. Edite sua pergunta ou resposta caso queira alterar ou adicionar detalhes.
  3. Caso haja alguma dúvida sobre a pergunta, adicione um comentário. O espaço de respostas deve ser utilizado apenas para responder a pergunta.
  4. Se o autor da pergunta marcar uma resposta como solucionada, esta marca aparecerá.
  5. Clique aqui para mais detalhes sobre o funcionamento do GUJ!

1 resposta

Não é a resposta que estava procurando? Procure outras perguntas com as tags java i18n ou faça a sua própria pergunta.