Internationalisierung (i18n) in Go (Golang) mit der Bibliothek go-i18n
\nInternationalisierung (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.
\nIn 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\nInstallation der Bibliothek go-i18n
\nUm mit go-i18n zu beginnen, müssen Sie das Paket mit dem Go-Abhängigkeitsmanager installieren:
\ngo get github.com/nicksnyder/go-i18n/v2/i18n\nAußerdem benötigen Sie ein Paket zum Parsen von Übersetzungsdateien (z. B. JSON oder YAML):
\ngo get github.com/nicksnyder/go-i18n/v2/i18n/bundle\ngo get github.com/nicksnyder/go-i18n/v2/i18n/localizer\n\nStruktur der Lokalisierungsdateien
\nDie 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:
\nlocales/\n active.en.json # Englisch\n active.ru.json # Russisch\n active.fr.json # Französisch\n\nBeispiel einer Übersetzungsdatei (active.en.json)
\nErstellen 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\nBeispiel einer Übersetzungsdatei (active.ru.json)
\nEine 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\nInitialisierung und Verwendung im Code
\nJetzt schreiben wir Go-Code, der die Übersetzungsdateien lädt und sie verwendet, um Nachrichten in Abhängigkeit von der ausgewählten Sprache anzuzeigen.
\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 // 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\nUnterstützung von Pluralformen (Pluralization)
\nEine der wichtigsten Funktionen von go-i18n ist die korrekte Verarbeitung von Pluralformen. Die Bibliothek verwendet die Unicode-Regeln