Por que sua aplicação Go precisa de internacionalização (i18n)?
\n\nVocê 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\nMuitos 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\nO que são i18n e l10n? Entendendo a terminologia
\n\nAntes 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
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\nEscolhendo a biblioteca: por que go-i18n?
\n\nExistem 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
Exemplo prático: criando um serviço multilíngue em Go
\n\nVamos criar um servidor web simples em Go que saúda o usuário em seu idioma.
\n\nPasso 1: Instalação e estrutura do projeto
\n\nInstale a biblioteca e crie a estrutura de diretórios:
\n\ngo get github.com/nicksnyder/go-i18n/v2/i18n\ngo get golang.org/x/text/language\n\nEstrutura do projeto:
\n\nmyapp/\n├── main.go\n└── locales/\n ├── active.en.toml\n ├── active.ru.toml\n └── active.de.toml\n\nPasso 2: Criando os arquivos de tradução
\n\nlocales/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\nlocales/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\nObserve 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\nPasso 3: Escrevendo o código Go
\n\nAgora a parte mais interessante — a internacionalização