Internacionalização de aplicação Swing (Java)

O processo de internacionalização é bastante simples, porém exige alguns cuidados.

Os passos que tenho utilizado são:

Criar um pacote resource abaixo do pacote base da aplicação swing.
Criar os arquivos de mensagens, com o sufixo do locale desejado. Exemplo:

Para o inglês americano: messages_en_US.properties, e o conteúdo:
key=caption
fileMenu=Files

ou para o português brasileiro: messages_pt_BR.properties, e o respectivo conteúdo:
key=rótulo
fileMenu=Arquivos

Aqui temos a primeira grande possibilidade de problemas, as chaves que realmente forem utilizadas na aplicação, precisam estar em todos os arquivos.

Prefiro utilizar uma classe utilitária que criar um método em cada janela, dialogo ou panel que minha aplicação tiver, portanto:

import java.util.Locale;
import java.util.ResourceBundle;
public final class MessageI18NUtil {
    public static ResourceBundle text = null;
    private MessageI18NUtil() {
    }
    public static void init() {
        Locale locale = Locale.getDefault();
        text = ResourceBundle.getBundle(
              "br.ufpr.bioinfo.bas.resource.msg.messages",locale);
    }
    public static String getMessage(String key) {
        if( text == null ) {
            init();
        }
        return text.getString(key);
    }
}

Nesse exemplo estou usando o locale padrão, com isso a aplicação tende a seguir a linguagem configurada no Sistema Operacional.

E aqui vai a parte mais trabalhosa... ao invés de escrever apenas os rótulos, devemos colocar o código abaixo.
Exemplo para menus/itens de menus:
saveItem.setText(MessageI18NUtil.getMessage("SalvarMenuItem"));

ou para hints
button.setToolTipText(MessageI18NUtil.getMessage("algumButton"));

Problemas? Sugestões?

Comentários

  1. Se você precisar de uma sugestão de uma boa ferramenta de tradução de arquivos .properties, aqui está: https://poeditor.com

    É melhor que outras ferramentas porque é baseada na web e colaborativa.

    ResponderExcluir

Postar um comentário

Postagens mais visitadas deste blog

Jellyfish script

Conversão do encode do MariaDB para atender o moodle 3.8

O GBParsy é uma biblioteca para realizar o parser de arquivos GenBank para o Python