Internationalisierung (i18n) in Go (Golang): Vollständiger Leitfaden für Entwickler
Internationalisierung (i18n) ist der Prozess der Softwareentwicklung, bei dem die Software so gestaltet wird, dass sie leicht an verschiedene Sprachen und Regionen angepasst werden kann, ohne Änderungen am Quellcode vorzunehmen. In Go (Golang) gibt es für diese Zwecke mehrere ausgereifte Lösungen, aber die beliebteste und standardisierteste ist das Paket golang.org/x/text, das leistungsstarke Werkzeuge für die Arbeit mit Lokalisierung bietet. In diesem Artikel werden wir im Detail besprechen, wie man i18n in einer Go-Anwendung unter Verwendung offizieller Bibliotheken und bewährter Verfahren einrichtet.
Wichtige Bibliotheken für i18n in Go
Das Go-Ökosystem bietet mehrere Ansätze zur Internationalisierung. Betrachten wir die wichtigsten:
golang.org/x/text— das Hauptpaket des Go-Teams, das Unicode, CLDR (Common Locale Data Repository) und komplexe Pluralisierungsregeln unterstützt.github.com/nicksnyder/go-i18n— eine beliebte Drittanbieter-Bibliothek mit Unterstützung für JSON-, TOML- und YAML-Übersetzungsdateien, einer einfachen API und automatischer Spracherkennung.github.com/leonelquinteros/gotext— eine leichte Alternative, die mit dem GNU gettext-Format (.po/.mo-Dateien) arbeitet und ideal für kleine Projekte ist.
In diesem Leitfaden konzentrieren wir uns auf go-i18n als die ausgewogenste Lösung für Webanwendungen, aber die Konzepte sind auf jede Bibliothek anwendbar.
Installation und Einrichtung von go-i18n
Installieren Sie zunächst die Bibliothek und das CLI-Tool für die Arbeit mit Übersetzungen:
go get github.com/nicksnyder/go-i18n/v2/i18ngo install github.com/nicksnyder/go-i18n/v2/goi18n@latestErstellen Sie die Projektstruktur:
myapp/├── active.en.json├── active.ru.json├── main.go└── go.modErstellen von Übersetzungsdateien
Die Bibliothek verwendet JSON-Dateien mit Übersetzungen. Beispiel für Englisch und Russisch:
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}} пирожных." }}Beachten Sie die Verwendung von Pluralisierungsregeln: one, few, many und other. Im Russischen gibt es 4 Formen, während es im Englischen nur 2 gibt (one/other). Die Bibliothek wählt automatisch die richtige Form basierend auf der Zahl aus.
Beispiel für die Verwendung im Code
Schreiben wir nun den Code, der die Übersetzungen lädt und lokalisierte Nachrichten anzeigt:
package main
import ( "fmt" "log"
"github.com/nicksnyder/go-i18n/v2/i18n" "golang.org/x/text/language")
func main() { // Erstellen eines Bundles mit Sprachdateien bundle := i18n.NewBundle(language.English) bundle.RegisterUnmarshalFunc("json", json.Unmarshal)
// Laden der Übersetzungsdateien _, err := bundle.LoadMessageFile("active.en.json") if err != nil { log.Fatal(err) } _, err = bundle.LoadMessageFile("active.ru.json") if err != nil { log.Fatal(err) }
// Erstellen eines Lokalisierers für die russische Sprache localizer := i18n.NewLocalizer(bundle, "ru")
// Beispiel 1: Einfache Begrüßung greeting, err := localizer.Localize(&i18n.LocalizeConfig{ MessageID: "greeting", TemplateD Auch in der Bibliothek
OAuth-Client für C# (.NET): Implementierung der Autorisierung über Drittanbieterdienste
Arbeit mit YAML in Java: Bibliotheken SnakeYAML und Jackson