Internacionalização de aplicações Go: de $ a € sem dor de cabeça

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 Go precisa de internacionalização (i18n)?

\n\n

Você escreveu um serviço incrível em Go. Ele é rápido, concorrente, compila em segundos. Mas há um problema: todas as mensagens, botões e dicas estão em russo (ou inglês). E o mundo quer usar seu produto no seu próprio idioma nativo. É aqui que entra a internacionalização de aplicações Go (i18n).

\n\n

Muitos pensam que a localização Go é um pesadelo com arquivos JSON e gambiarras. Mas não é assim. O ecossistema Go oferece soluções elegantes que permitem adicionar suporte a qualquer número de idiomas, sem inflar o código e sem perder desempenho. Neste artigo, vamos analisar como implementar corretamente o i18n em Go, para que sua aplicação fale cem idiomas.

\n\n

O que são i18n e l10n? Entendendo a terminologia

\n\n

Antes de escrever código, vamos organizar os termos:

\n\n
    \n
  • i18n (Internationalization) — o processo de projetar uma aplicação para que ela possa ser adaptada a diferentes idiomas e regiões sem reescrever o código. É sobre arquitetura.
  • \n
  • l10n (Localization) — a adaptação do conteúdo (tradução de texto, formato de datas, moedas) para uma localidade específica (por exemplo, en-US, pt-BR, de-DE).
  • \n
\n\n

No contexto da internacionalização de aplicações Go, i18n é a preparação do código (uso de chaves em vez de strings), e l10n é o preenchimento dessas chaves com traduções.

\n\n

Escolhendo a biblioteca: por que go-i18n?

\n\n

Existem várias bibliotecas populares em Go para trabalhar com traduções. Após testar várias opções, a melhor escolha para a maioria dos projetos é a go-i18n do nicksnyder. Por quê?

\n\n
    \n
  • Simplicidade de uso — código boilerplate mínimo.
  • \n
  • Suporte a pluralização — flexão correta para "1 mensagem", "2 mensagens", "5 mensagens".
  • \n
  • Trabalho com TOML/YAML/JSON — escolha o formato de tradução de sua preferência.
  • \n
  • Suporte a templates — é possível inserir variáveis diretamente na string de tradução.
  • \n
  • Utilitário integrado para extração de chaves — não é necessário escrever traduções manualmente.
  • \n
\n\n

Exemplo prático: criando um serviço multilíngue em Go

\n\n

Vamos criar um servidor web simples em Go que saúda o usuário em seu idioma.

\n\n

Passo 1: Instalação e estrutura do projeto

\n\n

Instale a biblioteca e crie a estrutura de diretórios:

\n\n
go get github.com/nicksnyder/go-i18n/v2/i18n\ngo get golang.org/x/text/language
\n\n

Estrutura do projeto:

\n\n
myapp/\n├── main.go\n└── locales/\n    ├── active.en.toml\n    ├── active.ru.toml\n    └── active.de.toml
\n\n

Passo 2: Criando os arquivos de tradução

\n\n

locales/active.en.toml:

\n\n
[greeting]\ndescription = "Saudação ao usuário"\none = "Hello, {{.Name}}!"\nother = "Hello, {{.Name}}!"\n\n[inbox]\ndescription = "Número de mensagens na caixa de entrada"\none = "You have {{.Count}} new message."\nother = "You have {{.Count}} new messages."
\n\n

locales/active.ru.toml:

\n\n
[greeting]\ndescription = "Saudação ao usuário"\none = "Привет, {{.Name}}!"\nother = "Привет, {{.Name}}!"\n\n[inbox]\ndescription = "Número de mensagens na caixa de entrada"\none = "У вас {{.Count}} новое сообщение."\nfew = "У вас {{.Count}} новых сообщения."\nmany = "У вас {{.Count}} новых сообщений."\nother = "У вас {{.Count}} сообщений."
\n\n

Observe as formas plurais em russo: one, few, many, other. A pluralização Go é um recurso poderoso que lida corretamente com regras complexas de flexão.

\n\n

Passo 3: Escrevendo o código Go

\n\n

Agora a parte mais interessante — a internacionalização

Blogs

Book Recommendations