Internationalisation (i18n) en Go (Golang) : la bibliothèque go-i18n

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) avec la bibliothèque go-i18n

\n

L'internationalisation (i18n) est le processus de conception de logiciels de manière à pouvoir les adapter facilement à différentes langues et régions sans modifier le code source. En langage Go (Golang), l'une des bibliothèques les plus populaires et puissantes pour implémenter l'i18n est go-i18n. Cette bibliothèque fournit aux développeurs des outils pratiques pour gérer les traductions, prendre en charge les formes plurielles (pluralization) et travailler avec le contexte.

\n

Dans cet article, nous allons détailler comment utiliser go-i18n pour internationaliser votre application Go : de l'installation à la création d'un système de localisation complet.

\n\n

Installation de la bibliothèque go-i18n

\n

Pour commencer avec go-i18n, vous devez installer le package à l'aide du gestionnaire de dépendances Go :

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

Vous aurez également besoin du package pour analyser les fichiers de traduction (par exemple, 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

Structure des fichiers de localisation

\n

La bibliothèque go-i18n prend en charge le stockage des traductions aux formats JSON, YAML ou TOML. Il est recommandé de créer des fichiers séparés pour chaque langue. Exemple de structure de répertoires :

\n
locales/\n  active.en.json   # Anglais\n  active.ru.json   # Russe\n  active.fr.json   # Français
\n\n

Exemple de fichier de traduction (active.en.json)

\n

Créons un fichier pour l'anglais avec un message et la prise en charge des formes plurielles :

\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

Exemple de fichier de traduction (active.ru.json)

\n

Fichier similaire pour le russe en tenant compte des règles des formes plurielles (un, quelques, plusieurs) :

\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

Initialisation et utilisation dans le code

\n

Écrivons maintenant du code Go qui charge les fichiers de traduction et les utilise pour afficher des messages en fonction de la langue sélectionnée.

\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    // Créer un bundle (stockage de traductions)\n    bundle := i18n.NewBundle(language.English)\n    bundle.RegisterUnmarshalFunc("json", json.Unmarshal)\n\n    // Charger les fichiers de traduction\n    bundle.MustLoadMessageFile("locales/active.en.json")\n    bundle.MustLoadMessageFile("locales/active.ru.json")\n\n    // Créer un localisateur pour le russe\n    localizer := i18n.NewLocalizer(bundle, language.Russian.String())\n\n    // Exemple d'utilisation avec un message simple\n    helloMsg, _ := localizer.Localize(&i18n.LocalizeConfig{\n        MessageID: "hello_world",\n    })\n    fmt.Println(helloMsg) // Affiche : Привет, мир!\n\n    // Exemple d'utilisation avec des nombres pluriels\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

Prise en charge des formes plurielles (Pluralization)

\n

L'une des principales caractéristiques de go-i18n est le traitement correct des formes plurielles. La bibliothèque utilise les règles Unicode

Recommendations