Pourquoi votre application Go a-t-elle besoin d'internationalisation (i18n) ?
\n\nVous avez écrit un super service en Go. Il est rapide, concurrentiel, se compile en quelques secondes. Mais il y a un problème : tous les messages, boutons et infobulles sont en russe (ou en anglais). Et le monde veut utiliser votre produit dans sa langue maternelle. C'est là qu'intervient l'internationalisation des applications Go (i18n).
\n\nBeaucoup pensent que la localisation Go est un enfer avec des fichiers JSON et des bricolages. Mais ce n'est pas le cas. L'écosystème Go propose des solutions élégantes qui permettent d'ajouter la prise en charge d'un nombre illimité de langues, sans gonfler le code ni perdre en performance. Dans cet article, nous verrons comment implémenter correctement l'i18n en Go pour que votre application parle cent langues.
\n\nQu'est-ce que l'i18n et la l10n ? Éclaircissons la terminologie
\n\nAvant d'écrire du code, mettons de l'ordre dans les termes :
\n\n- \n
- i18n (Internationalization) — le processus de conception d'une application pour qu'elle puisse être adaptée à différentes langues et régions sans réécrire le code. Il s'agit d'architecture. \n
- l10n (Localization) — l'adaptation du contenu (traduction du texte, format des dates, des devises) à une locale spécifique (par exemple, fr-FR, en-US, de-DE). \n
Dans le contexte de l'internationalisation des applications Go, l'i18n est la préparation du code (utilisation de clés au lieu de chaînes), et la l10n est le remplissage de ces clés avec des traductions.
\n\nChoisir une bibliothèque : pourquoi go-i18n ?
\n\nIl existe plusieurs bibliothèques populaires en Go pour gérer les traductions. Après avoir testé différentes options, le meilleur choix pour la plupart des projets est go-i18n de nicksnyder. Pourquoi ?
\n\n- \n
- Simplicité d'utilisation — un code minimal (boilerplate). \n
- Prise en charge du pluriel — la déclinaison correcte pour "1 message", "2 messages", "5 messages". \n
- Fonctionne avec TOML/YAML/JSON — choisissez le format de traduction qui vous convient. \n
- Prise en charge des modèles (templates) — vous pouvez insérer des variables directement dans la chaîne de traduction. \n
- Utilitaire intégré pour extraire les clés — pas besoin d'écrire les traductions manuellement. \n
Exemple pratique : créer un service multilingue en Go
\n\nCréons un simple serveur web en Go qui salue l'utilisateur dans sa langue.
\n\nÉtape 1 : Installation et structure du projet
\n\nInstallez la bibliothèque et créez la structure des répertoires :
\n\ngo get github.com/nicksnyder/go-i18n/v2/i18n\ngo get golang.org/x/text/language\n\nStructure du projet :
\n\nmyapp/\n├── main.go\n└── locales/\n ├── active.en.toml\n ├── active.ru.toml\n └── active.de.toml\n\nÉtape 2 : Créer les fichiers de traduction
\n\nlocales/active.en.toml :
\n\n[greeting]\ndescription = "Salutation de l'utilisateur"\none = "Bonjour, {{.Name}} !"\nother = "Bonjour, {{.Name}} !"\n\n[inbox]\ndescription = "Nombre de messages dans la boîte"\none = "Vous avez {{.Count}} nouveau message."\nother = "Vous avez {{.Count}} nouveaux messages."\n\nlocales/active.ru.toml :
\n\n[greeting]\ndescription = "Salutation de l'utilisateur"\none = "Привет, {{.Name}}!"\nother = "Привет, {{.Name}}!"\n\n[inbox]\ndescription = "Nombre de messages dans la boîte"\none = "У вас {{.Count}} новое сообщение."\nfew = "У вас {{.Count}} новых сообщения."\nmany = "У вас {{.Count}} новых сообщений."\nother = "У вас {{.Count}} сообщений."\n\nRemarquez les formes plurielles en russe : one, few, many, other. Le pluriel en Go est une fonctionnalité puissante qui gère correctement les règles de déclinaison complexes.
\n\nÉtape 3 : Écrire le code Go
\n\nMaintenant, la partie la plus intéressante — l'internationalisation