Internacionalização (i18n) em Go (Golang): biblioteca go-i18n

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) com a biblioteca go-i18n

\n

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. Na linguagem Go (Golang), uma das bibliotecas mais populares e poderosas para implementar i18n é a go-i18n. Esta biblioteca fornece aos desenvolvedores ferramentas convenientes para gerenciar traduções, suportar formas plurais (pluralization) e trabalhar com contexto.

\n

Neste artigo, vamos detalhar como usar go-i18n para internacionalizar sua aplicação Go: desde a instalação até a criação de um sistema completo de localização.

\n\n

Instalação da biblioteca go-i18n

\n

Para começar a trabalhar com go-i18n, é necessário instalar o pacote usando o gerenciador de dependências do Go:

\n
go get github.com/nicksnyder/go-i18n/v2/i18n
\n

Você também precisará de um pacote para analisar arquivos de tradução (por exemplo, JSON ou YAML):

\n
go get github.com/nicksnyder/go-i18n/v2/i18n/bundle\ngo get github.com/nicksnyder/go-i18n/v2/i18n/localizer
\n\n

Estrutura dos arquivos de localização

\n

A biblioteca go-i18n suporta o armazenamento de traduções nos formatos JSON, YAML ou TOML. Recomenda-se criar arquivos separados para cada idioma. Exemplo de estrutura de diretórios:

\n
locales/\n  active.en.json   # Inglês\n  active.ru.json   # Russo\n  active.fr.json   # Francês
\n\n

Exemplo de arquivo de tradução (active.en.json)

\n

Vamos criar um arquivo para o inglês com uma mensagem e suporte a formas plurais:

\n
{\n  "hello_world": {\n    "other": "Hello, World!"\n  },\n  "messages_count": {\n    "one": "You have {{.Count}} new message.",\n    "few": "You have {{.Count}} new messages.",\n    "many": "You have {{.Count}} new messages.",\n    "other": "You have {{.Count}} new messages."\n  }\n}
\n\n

Exemplo de arquivo de tradução (active.ru.json)

\n

Arquivo semelhante para o russo, considerando as regras de formas plurais (um, alguns, muitos):

\n
{\n  "hello_world": {\n    "other": "Привет, мир!"\n  },\n  "messages_count": {\n    "one": "У вас {{.Count}} новое сообщение.",\n    "few": "У вас {{.Count}} новых сообщения.",\n    "many": "У вас {{.Count}} новых сообщений.",\n    "other": "У вас {{.Count}} сообщений."\n  }\n}
\n\n

Inicialização e uso no código

\n

Agora vamos escrever código em Go que carrega os arquivos de tradução e os utiliza para exibir mensagens de acordo com o idioma selecionado.

\n
package main\n\nimport (\n    "fmt"\n    "github.com/nicksnyder/go-i18n/v2/i18n"\n    "golang.org/x/text/language"\n)\n\nfunc main() {\n    // Criando um bundle (armazenamento de traduções)\n    bundle := i18n.NewBundle(language.English)\n    bundle.RegisterUnmarshalFunc("json", json.Unmarshal)\n\n    // Carregando os arquivos de tradução\n    bundle.MustLoadMessageFile("locales/active.en.json")\n    bundle.MustLoadMessageFile("locales/active.ru.json")\n\n    // Criando um localizador para o idioma russo\n    localizer := i18n.NewLocalizer(bundle, language.Russian.String())\n\n    // Exemplo de uso com uma mensagem simples\n    helloMsg, _ := localizer.Localize(&i18n.LocalizeConfig{\n        MessageID: "hello_world",\n    })\n    fmt.Println(helloMsg) // Saída: Привет, мир!\n\n    // Exemplo de uso com números plurais\n    for _, count := range []int{1, 2, 5, 10} {\n        msg, _ := localizer.Localize(&i18n.LocalizeConfig{\n            MessageID: "messages_count",\n            PluralCount: count,\n            TemplateData: map[string]interface{}{\n                "Count": count,\n            },\n        })\n        fmt.Println(msg)\n    }\n}
\n\n

Suporte a formas plurais (Pluralization)

\n

Uma das principais características do go-i18n é o tratamento correto de formas plurais. A biblioteca usa as regras Unicode

Recommendations