Internationalisation (i18n) en Go (Golang) : Guide complet

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Internationalisation (i18n) en Go (Golang) : Guide complet pour les développeurs



L'internationalisation (i18n) est le processus de conception de logiciels de manière à ce qu'ils puissent être facilement adaptés à différentes langues et régions sans modifier le code source. En Go (Golang), il existe plusieurs solutions matures à cet effet, mais la plus populaire et standardisée est le package golang.org/x/text, qui fournit des outils puissants pour travailler avec la localisation. Dans cet article, nous allons détailler comment configurer l'i18n dans une application Go en utilisant les bibliothèques officielles et les meilleures pratiques.



Bibliothèques principales pour l'i18n en Go



L'écosystème Go propose plusieurs approches pour l'internationalisation. Examinons les principales :



  • golang.org/x/text — le package principal de l'équipe Go, prenant en charge Unicode, CLDR (Common Locale Data Repository) et les règles complexes de pluralisation.
  • github.com/nicksnyder/go-i18n — une bibliothèque tierce populaire avec prise en charge des fichiers de traduction JSON, TOML et YAML, une API simple et une détection automatique de la langue.
  • github.com/leonelquinteros/gotext — une alternative légère fonctionnant avec le format GNU gettext (fichiers .po/.mo), idéale pour les petits projets.


Dans ce guide, nous nous concentrerons sur go-i18n comme la solution la plus équilibrée pour les applications web, mais les concepts sont applicables à n'importe quelle bibliothèque.



Installation et configuration de go-i18n



Pour commencer, installez la bibliothèque et l'outil CLI pour travailler avec les traductions :



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


Créez la structure du projet :



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


Création des fichiers de traduction



La bibliothèque utilise des fichiers JSON avec les traductions. Exemple pour les langues anglaise et russe :



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}} пирожных."  }}


Notez l'utilisation des règles de pluralisation : one, few, many et other. En russe, il existe 4 formes, tandis qu'en anglais il n'y en a que 2 (one/other). La bibliothèque sélectionne automatiquement la forme correcte en fonction du nombre.



Exemple d'utilisation dans le code



Écrivons maintenant le code qui charge les traductions et affiche les messages localisés :



package main

import ( "fmt" "log"

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

func main() { // Créer un bundle avec les fichiers de langue bundle := i18n.NewBundle(language.English) bundle.RegisterUnmarshalFunc("json", json.Unmarshal)

// Charger les fichiers de traduction _, err := bundle.LoadMessageFile("active.en.json") if err != nil { log.Fatal(err) } _, err = bundle.LoadMessageFile("active.ru.json") if err != nil { log.Fatal(err) }

// Créer un localisateur pour la langue russe localizer := i18n.NewLocalizer(bundle, "ru")

// Exemple 1 : Salutation simple greeting, err := localizer.Localize(&i18n.LocalizeConfig{ MessageID: "greeting", TemplateD

Recommendations