Falamos todos os idiomas: internacionalização de aplicações Java

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

Por que sua aplicação Java precisa falar como um humano?

\n\n

Você já se perguntou por que os aplicativos que usamos todos os dias — do Spotify ao Notion — imediatamente "entendem" em qual idioma falar com você? Eles não leem mentes, não adivinham pelo endereço IP. Eles usam internacionalização (i18n).

\n\n

Para um desenvolvedor Java, saber tornar aplicativos multilíngues não é apenas um "diferencial", mas uma habilidade obrigatória se você almeja o mercado global. Imagine: você criou um ótimo serviço de gerenciamento de tarefas. Na Rússia, ele decolou. Mas assim que você tentar vendê-lo na Alemanha ou no Japão — os usuários verão o botão "Criar tarefa" em russo. E fecharão a aba. Triste, não é?

\n\n

Neste artigo, não vamos apenas falar sobre teoria. Vamos pegar uma aplicação Java (bem comum, console ou web) e, passo a passo, adicionar suporte aos idiomas russo, inglês e alemão. Você verá que a internacionalização Java não é assustadora, mas sim muito elegante. Vamos nessa!

\n\n

O que é internacionalização e localização? Não confunda!

\n\n

Frequentemente, esses conceitos são misturados. Vamos esclarecer de uma vez.

\n\n
    \n
  • Internacionalização (i18n) — é o processo de projetar a aplicação para que ela possa ser adaptada a diferentes idiomas e regiões sem alterar o código. Você cria "ganchos" para a tradução.
  • \n
  • Localização (l10n) — é o preenchimento desses "ganchos" com traduções específicas, formatos de data, moedas e regras de classificação para um país específico.
  • \n
\n\n

Em Java, as classes responsáveis pela internacionalização estão no pacote java.util: Locale e ResourceBundle. Lembre-se delas — são seus melhores amigos.

\n\n

Passo 1. Conhecendo o Locale — o coração da internacionalização

\n\n

A classe Locale representa uma região específica (idioma + país). Por exemplo:

\n\n
    \n
  • Locale.US — inglês (EUA)
  • \n
  • Locale.GERMANY — alemão (Alemanha)
  • \n
  • new Locale("ru", "RU") — russo (Rússia)
  • \n
\n\n

O Locale é usado para selecionar a tradução correta das strings, formatação de números, datas, moedas. Sem ele, a internacionalização é impossível.

\n\n

Como obter a localidade atual?

\n\n
import java.util.Locale;\n\npublic class Main {\n    public static void main(String[] args) {\n        // Localidade padrão (geralmente coincide com a do sistema)\n        Locale defaultLocale = Locale.getDefault();\n        System.out.println("Localidade atual: " + defaultLocale);\n\n        // Localidades disponíveis na JVM\n        Locale[] available = Locale.getAvailableLocales();\n        System.out.println("Total disponível: " + available.length);\n    }\n}
\n\n

A saída pode ser, por exemplo: Localidade atual: ru_RU. Mas não vamos depender da localidade do sistema — em uma aplicação web, ela geralmente é enviada pelo navegador do usuário.

\n\n

Passo 2. ResourceBundle — seu tradutor

\n\n

Agora a parte mais interessante: como armazenar as traduções? Em Java, usamos arquivos de propriedades (.properties). Cada arquivo é um conjunto de pares chave=valor.

\n\n

Criando os arquivos de tradução

\n\n

Crie no diretório src/main/resources (ou apenas na pasta com os arquivos fonte) três arquivos:

\n\n

1. Messages.properties (idioma padrão — inglês)

\n
greeting=Hello, {0}!\nfarewell=Goodbye!\napp.title=Task Manager
\n\n

2. Messages_ru_RU.properties (russo)

\n
greeting=Привет, {0}!\nfarewell=До свидания!\napp.title=Менеджер задач
\n\n

3. Messages_de_DE.properties (alemão)

\n
greeting=Hallo, {0}!\nfarewell=Auf Wiedersehen!\napp.title=Aufgabenverwaltung
\n\n

Observe os sufixos: _ru_RU, _de_DE. O Java procura o arquivo pelo padrão: Base

Blogs

Book Recommendations