Internationalisation (i18n) en Go (Golang) avec la bibliothèque go-i18n
\nL'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.
\nDans 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\nInstallation de la bibliothèque go-i18n
\nPour commencer avec go-i18n, vous devez installer le package à l'aide du gestionnaire de dépendances Go :
\ngo get github.com/nicksnyder/go-i18n/v2/i18n\nVous aurez également besoin du package pour analyser les fichiers de traduction (par exemple, JSON ou YAML) :
\ngo get github.com/nicksnyder/go-i18n/v2/i18n/bundle\ngo get github.com/nicksnyder/go-i18n/v2/i18n/localizer\n\nStructure des fichiers de localisation
\nLa 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 :
\nlocales/\n active.en.json # Anglais\n active.ru.json # Russe\n active.fr.json # Français\n\nExemple de fichier de traduction (active.en.json)
\nCré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\nExemple de fichier de traduction (active.ru.json)
\nFichier 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\nInitialisation 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.
\npackage 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\nPrise en charge des formes plurielles (Pluralization)
\nL'une des principales caractéristiques de go-i18n est le traitement correct des formes plurielles. La bibliothèque utilise les règles Unicode
Aussi dans la bibliothèque
Travailler avec les dates en Java : java.time et Joda-Time
Journalisation pour TypeScript : la bibliothèque Winston
Client OAuth pour C# (.NET) : bibliothèque IdentityModel et intégration OAuth 2.0
Géolocalisation et cartes en TypeScript : bibliothèques, API et exemples de code