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: Guia Completo

\n\n

Internacionalização (abreviada como i18n — da palavra internationalization, onde entre a primeira letra 'i' e a última 'n' existem 18 letras) — é o processo de projetar software de forma que ele possa ser adaptado para diferentes idiomas e regiões sem alterar o código-fonte. O Java oferece um conjunto poderoso e nativo de ferramentas para internacionalização, permitindo que desenvolvedores criem facilmente aplicações multilíngues.

\n\n

Neste artigo, abordaremos detalhadamente os principais componentes do i18n em Java: Locale, ResourceBundle, arquivos de propriedades e MessageFormat. Você aprenderá a estruturar corretamente os recursos localizados e a tratar exceções relacionadas à ausência de tradução.

\n\n

1. Componentes principais do i18n em Java

\n\n

A internacionalização em Java baseia-se em três elementos-chave:

\n\n
    \n
  • Locale — objeto que representa uma área geográfica, política ou cultural específica. Ele contém informações sobre idioma, país (opcional) e variante (opcional).
  • \n
  • ResourceBundle — classe que carrega recursos localizados (strings, formatos) de arquivos de propriedades (.properties) ou outras fontes.
  • \n
  • Arquivos de propriedades — arquivos de texto com extensão .properties, onde são armazenados pares chave=valor. O nome do arquivo segue as regras: NomeBase_idioma_PAÍS.properties.
  • \n
\n\n

Exemplo de estrutura de arquivos para os idiomas russo e inglês:

\n\n
Messages.properties          // Arquivo padrão\nMessages_en.properties       // Inglês (geral)\nMessages_en_US.properties    // Inglês (EUA)\nMessages_ru_RU.properties    // Russo (Rússia)\n
\n\n

2. Criação de arquivos de propriedades

\n\n

Vamos criar o arquivo base Messages.properties (valores padrão em inglês):

\n\n
greeting=Hello\nfarewell=Goodbye\napp.name=My Application\n
\n\n

Agora, criaremos a localização em russo Messages_ru_RU.properties:

\n\n
greeting=Здравствуйте\nfarewell=До свидания\napp.name=Моё приложение\n
\n\n

Para inglês (EUA) — Messages_en_US.properties:

\n\n
greeting=Hello\nfarewell=Goodbye\napp.name=My Application\n
\n\n

3. Uso de Locale e ResourceBundle

\n\n

Para carregar strings localizadas, utiliza-se o seguinte código:

\n\n
import java.util.Locale;\nimport java.util.ResourceBundle;\n\npublic class I18nExample {\n    public static void main(String[] args) {\n        // Define a localidade (ex.: idioma russo, Rússia)\n        Locale ruLocale = new Locale("ru", "RU");\n        ResourceBundle bundle = ResourceBundle.getBundle("Messages", ruLocale);\n        \n        // Obtém as strings localizadas\n        String greeting = bundle.getString("greeting");\n        String farewell = bundle.getString("farewell");\n        String appName = bundle.getString("app.name");\n        \n        System.out.println(greeting + " " + farewell); // Здравствуйте До свидания\n        System.out.println(appName);                   // Моё приложение\n    }\n}\n
\n\n

Se a localidade não for encontrada, o Java usa automaticamente uma cadeia de busca:

\n
    \n
  1. Primeiro, procura o arquivo com correspondência exata (Messages_ru_RU.properties).
  2. \n
  3. Depois, sem o país (Messages_ru.properties).
  4. \n
  5. Em seguida, o arquivo base (Messages.properties).
  6. \n
  7. Se nada for encontrado — lança a exceção MissingResourceException.
  8. \n
\n\n

4. Formatação de mensagens com MessageFormat

\n\n

Frequentemente, as strings contêm partes variáveis. Para isso, utiliza-se MessageFormat. Exemplo com dados dinâmicos:

\n\n<

Recommendations