Internacionalização (i18n) em Go (Golang): Guia Completo

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 Go (Golang): Guia Completo para Desenvolvedores



Internacionalização (i18n) é o processo de projetar software de forma que ele possa ser facilmente adaptado para diferentes idiomas e regiões sem alterações no código-fonte. Em Go (Golang), existem várias soluções maduras para esse fim, mas a mais popular e padronizada é o pacote golang.org/x/text, que fornece ferramentas poderosas para trabalhar com localização. Neste artigo, vamos detalhar como configurar i18n em uma aplicação Go, usando bibliotecas oficiais e melhores práticas.



Principais Bibliotecas para i18n em Go



O ecossistema Go oferece várias abordagens para internacionalização. Vamos analisar as principais:



  • golang.org/x/text — pacote principal da equipe Go, suportando Unicode, CLDR (Common Locale Data Repository) e regras complexas de pluralização.
  • github.com/nicksnyder/go-i18n — biblioteca de terceiros popular com suporte a arquivos de tradução JSON, TOML e YAML, API simples e detecção automática de idioma.
  • github.com/leonelquinteros/gotext — alternativa leve que trabalha com o formato GNU gettext (arquivos .po/.mo), ideal para projetos pequenos.


Neste guia, focaremos no go-i18n como a solução mais equilibrada para aplicações web, mas os conceitos se aplicam a qualquer biblioteca.



Instalação e Configuração do go-i18n



Para começar, instale a biblioteca e a ferramenta CLI para trabalhar com traduções:



go get github.com/nicksnyder/go-i18n/v2/i18ngo install github.com/nicksnyder/go-i18n/v2/goi18n@latest


Crie a estrutura do projeto:



myapp/├── active.en.json├── active.ru.json├── main.go└── go.mod


Criação de Arquivos de Tradução



A biblioteca usa arquivos JSON com traduções. Exemplo para os idiomas inglês e russo:



active.en.json

{  "greeting": {    "other": "Hello, {{.Name}}!"  },  "cakes_count": {    "one": "You have {{.Count}} cake.",    "few": "You have {{.Count}} cakes.",    "many": "You have {{.Count}} cakes.",    "other": "You have {{.Count}} cakes."  }}


active.ru.json

{  "greeting": {    "other": "Привет, {{.Name}}!"  },  "cakes_count": {    "one": "У вас {{.Count}} пирожное.",    "few": "У вас {{.Count}} пирожных.",    "many": "У вас {{.Count}} пирожных.",    "other": "У вас {{.Count}} пирожных."  }}


Observe o uso das regras de pluralização: one, few, many e other. Em russo, existem 4 formas, enquanto em inglês existem apenas 2 (one/other). A biblioteca seleciona automaticamente a forma correta com base no número.



Exemplo de Uso no Código



Agora vamos escrever o código que carrega as traduções e exibe mensagens localizadas:



package main

import ( "fmt" "log"

"github.com/nicksnyder/go-i18n/v2/i18n" "golang.org/x/text/language")

func main() { // Criando um bundle com arquivos de idioma bundle := i18n.NewBundle(language.English) bundle.RegisterUnmarshalFunc("json", json.Unmarshal)

// Carregando arquivos de tradução _, err := bundle.LoadMessageFile("active.en.json") if err != nil { log.Fatal(err) } _, err = bundle.LoadMessageFile("active.ru.json") if err != nil { log.Fatal(err) }

// Criando um localizador para o idioma russo localizer := i18n.NewLocalizer(bundle, "ru")

// Exemplo 1: Saudação simples greeting, err := localizer.Localize(&i18n.LocalizeConfig{ MessageID: "greeting", TemplateD

Recommendations