Internationalisation des applications Go : de $ à € sans maux de tête

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

Pourquoi votre application Go a-t-elle besoin d'internationalisation (i18n) ?

\n\n

Vous 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\n

Beaucoup 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\n

Qu'est-ce que l'i18n et la l10n ? Éclaircissons la terminologie

\n\n

Avant 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
\n\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\n

Choisir une bibliothèque : pourquoi go-i18n ?

\n\n

Il 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
\n\n

Exemple pratique : créer un service multilingue en Go

\n\n

Créons un simple serveur web en Go qui salue l'utilisateur dans sa langue.

\n\n

Étape 1 : Installation et structure du projet

\n\n

Installez la bibliothèque et créez la structure des répertoires :

\n\n
go get github.com/nicksnyder/go-i18n/v2/i18n\ngo get golang.org/x/text/language
\n\n

Structure du projet :

\n\n
myapp/\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\n

locales/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\n

locales/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\n

Remarquez 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\n

Maintenant, la partie la plus intéressante — l'internationalisation

Blogs

Book Recommendations