Internacionalização (i18n) em Java: Guia Completo
\n\nInternacionalizaçã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\nNeste 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.
1. Componentes principais do i18n em Java
\n\nA 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 pareschave=valor. O nome do arquivo segue as regras:NomeBase_idioma_PAÍS.properties. \n
Exemplo de estrutura de arquivos para os idiomas russo e inglês:
\n\nMessages.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\n2. Criação de arquivos de propriedades
\n\nVamos criar o arquivo base Messages.properties (valores padrão em inglês):
greeting=Hello\nfarewell=Goodbye\napp.name=My Application\n\n\nAgora, criaremos a localização em russo Messages_ru_RU.properties:
greeting=Здравствуйте\nfarewell=До свидания\napp.name=Моё приложение\n\n\nPara inglês (EUA) — Messages_en_US.properties:
greeting=Hello\nfarewell=Goodbye\napp.name=My Application\n\n\n3. Uso de Locale e ResourceBundle
\n\nPara carregar strings localizadas, utiliza-se o seguinte código:
\n\nimport 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\nSe a localidade não for encontrada, o Java usa automaticamente uma cadeia de busca:
\n- \n
- Primeiro, procura o arquivo com correspondência exata (
Messages_ru_RU.properties). \n - Depois, sem o país (
Messages_ru.properties). \n - Em seguida, o arquivo base (
Messages.properties). \n - Se nada for encontrado — lança a exceção
MissingResourceException. \n
4. Formatação de mensagens com MessageFormat
\n\nFrequentemente, as strings contêm partes variáveis. Para isso, utiliza-se MessageFormat. Exemplo com dados dinâmicos:
Também na biblioteca
Geração de PDF em Rust: visão geral das bibliotecas e exemplos de código
Configuração de aplicações Node.js: melhores ferramentas e abordagens
Internacionalização (i18n) em C# (.NET): guia completo
SnapKit para Swift: guia completo com exemplos
Geração de Relatórios PDF em Kotlin: iText, Apache PDFBox, OpenPDF