Internacionalização (i18n) em Java: guia completo com exemplos

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Internacionalização (i18n) em Java: tornando a aplicação multilíngue



Internacionalização (frequentemente abreviada como i18n — da palavra internationalization, onde 18 é o número de letras entre o primeiro 'i' e o último 'n') — é o processo de projetar software de forma que ele possa ser adaptado a diferentes idiomas e particularidades regionais sem alterar o código-fonte. Em Java, essa tarefa é resolvida de forma elegante e poderosa com as APIs integradas: java.util.Locale, java.util.ResourceBundle e um conjunto de classes para formatação.



Neste artigo, vamos abordar como implementar suporte a vários idiomas em uma aplicação Java usando recursos padrão. Você aprenderá a criar arquivos de localização, alternar dinamicamente o idioma e formatar corretamente números, datas e moedas.



Componentes principais do i18n em Java



O Java fornece três elementos-chave para trabalhar com internacionalização:



  • Locale — objeto que representa um idioma e região específicos (por exemplo, português do Brasil — pt_BR, inglês dos EUA — en_US).
  • ResourceBundle — classe para carregar recursos localizados (strings, mensagens, rótulos) de arquivos .properties ou classes.
  • Formatadores — classes do pacote java.text (NumberFormat, DateFormat, MessageFormat) para exibir corretamente números, datas e mensagens compostas.


Passo 1: Criando arquivos de recursos



A forma tradicional de armazenar strings localizadas são os arquivos .properties. Eles são criados seguindo a regra:



Messages.properties          # Arquivo padrão (geralmente inglês)Messages_pt_BR.properties    # Para português do BrasilMessages_de_DE.properties    # Para alemão (Alemanha)Messages_fr.properties       # Para francês (sem especificação de região)


Exemplo de conteúdo do arquivo Messages.properties (inglês, padrão):



welcome.message = Welcome to our application!farewell.message = Goodbye!date.format = dd/MM/yyyy


Exemplo de conteúdo do arquivo Messages_pt_BR.properties (português do Brasil):



welcome.message = Bem-vindo à nossa aplicação!farewell.message = Até logo!date.format = dd/MM/yyyy


Importante: os arquivos devem estar na codificação ISO 8859-1 (Latin-1) ou usar escape Unicode para caracteres que não pertencem a essa codificação. Para caracteres acentuados em português, será necessário escape, por exemplo \\u00E9. No entanto, em ambientes de desenvolvimento modernos (IntelliJ IDEA, Eclipse) e ao compilar com Maven/Gradle, isso geralmente é automatizado.



Passo 2: Carregando recursos no código



Para usar strings localizadas, basta criar um objeto Locale e obter o ResourceBundle correspondente:



import java.util.Locale;import java.util.ResourceBundle;

public class I18nDemo { public static void main(String[] args) { // Cria uma locale para português do Brasil Locale ptLocale = new Locale("pt", "BR"); // Carrega o bundle (nome base do arquivo - "Messages") ResourceBundle bundle = ResourceBundle.getBundle("Messages", ptLocale);

// Obtém as strings String welcome = bundle.getString("welcome.message"); String farewell = bundle.getString("farewell.message");

System.out.println(welcome); // Bem-vindo à nossa aplicação! System.out.println(farewell); // Até logo! }}


Se o arquivo para uma locale específica não for encontrado, o Java usa automaticamente o arquivo padrão (Messages.properties).



Passo 3: Alternância dinâmica de idioma



Em aplicações web

Recommendations