Internationalisierung (i18n) in Go (Golang): Bibliothek go-i18n

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Internationalisierung (i18n) in Go (Golang) mit der Bibliothek go-i18n

\n

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 der Sprache Go (Golang) ist go-i18n eine der beliebtesten und leistungsstärksten Bibliotheken zur Implementierung von i18n. Diese Bibliothek bietet Entwicklern praktische Werkzeuge zur Verwaltung von Übersetzungen, Unterstützung von Pluralformen und Arbeit mit Kontext.

\n

In diesem Artikel werden wir im Detail besprechen, wie Sie go-i18n zur Internationalisierung Ihrer Go-Anwendung verwenden: von der Installation bis zur Erstellung eines vollständigen Lokalisierungssystems.

\n\n

Installation der Bibliothek go-i18n

\n

Um mit go-i18n zu beginnen, müssen Sie das Paket mit dem Go-Abhängigkeitsmanager installieren:

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

Außerdem benötigen Sie ein Paket zum Parsen von Übersetzungsdateien (z. B. JSON oder YAML):

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

Struktur der Lokalisierungsdateien

\n

Die Bibliothek go-i18n unterstützt die Speicherung von Übersetzungen in den Formaten JSON, YAML oder TOML. Es wird empfohlen, für jede Sprache separate Dateien zu erstellen. Beispiel einer Verzeichnisstruktur:

\n
locales/\n  active.en.json   # Englisch\n  active.ru.json   # Russisch\n  active.fr.json   # Französisch
\n\n

Beispiel einer Übersetzungsdatei (active.en.json)

\n

Erstellen wir eine Datei für die englische Sprache mit einer Nachricht und Unterstützung für Pluralformen:

\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

Beispiel einer Übersetzungsdatei (active.ru.json)

\n

Eine entsprechende Datei für die russische Sprache unter Berücksichtigung der Pluralregeln (eins, wenige, viele):

\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

Initialisierung und Verwendung im Code

\n

Jetzt schreiben wir Go-Code, der die Übersetzungsdateien lädt und sie verwendet, um Nachrichten in Abhängigkeit von der ausgewählten Sprache anzuzeigen.

\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    // Erstellen eines Bundles (Übersetzungsspeicher)\n    bundle := i18n.NewBundle(language.English)\n    bundle.RegisterUnmarshalFunc("json", json.Unmarshal)\n\n    // Laden der Übersetzungsdateien\n    bundle.MustLoadMessageFile("locales/active.en.json")\n    bundle.MustLoadMessageFile("locales/active.ru.json")\n\n    // Erstellen eines Localizers für die russische Sprache\n    localizer := i18n.NewLocalizer(bundle, language.Russian.String())\n\n    // Beispielverwendung mit einer einfachen Nachricht\n    helloMsg, _ := localizer.Localize(&i18n.LocalizeConfig{\n        MessageID: "hello_world",\n    })\n    fmt.Println(helloMsg) // Ausgabe: Привет, мир!\n\n    // Beispielverwendung mit Pluralformen\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

Unterstützung von Pluralformen (Pluralization)

\n

Eine der wichtigsten Funktionen von go-i18n ist die korrekte Verarbeitung von Pluralformen. Die Bibliothek verwendet die Unicode-Regeln

Empfehlungen