Warum Ihre Go-Anwendung Internationalisierung (i18n) benötigt?
\n\nSie haben einen großartigen Service in Go geschrieben. Er ist schnell, konkurrierend, kompiliert in Sekunden. Aber es gibt ein Problem: Alle Nachrichten, Schaltflächen und Tooltips sind auf Russisch (oder Englisch). Die Welt möchte Ihr Produkt jedoch in ihrer Muttersprache nutzen. Genau hier kommt die Internationalisierung von Go-Anwendungen (i18n) ins Spiel.
\n\nViele denken, dass die Lokalisierung von Go eine höllische Tortur mit JSON-Dateien und Krücken ist. Aber das ist nicht so. Das Go-Ökosystem bietet elegante Lösungen, mit denen Sie eine beliebige Anzahl von Sprachen unterstützen können, ohne den Code aufzublähen oder die Leistung zu beeinträchtigen. In diesem Artikel werden wir uns ansehen, wie Sie i18n in Go richtig implementieren, damit Ihre Anwendung in hundert Sprachen spricht.
\n\nWas sind i18n und l10n? Ein Blick auf die Terminologie
\n\nBevor wir Code schreiben, bringen wir Ordnung in die Begriffe:
\n\n- \n
- i18n (Internationalization) — der Prozess des Entwerfens einer Anwendung, sodass sie an verschiedene Sprachen und Regionen angepasst werden kann, ohne den Code umschreiben zu müssen. Es geht um die Architektur. \n
- l10n (Localization) — die Anpassung von Inhalten (Textübersetzung, Datumsformate, Währungen) an ein bestimmtes Gebietsschema (z. B. en-US, ru-RU, de-DE). \n
Im Kontext der Internationalisierung von Go-Anwendungen ist i18n die Vorbereitung des Codes (Verwendung von Schlüsseln anstelle von Zeichenfolgen) und l10n das Füllen dieser Schlüssel mit Übersetzungen.
\n\nDie Bibliothek auswählen: Warum go-i18n?
\n\nIn Go gibt es mehrere beliebte Bibliotheken für die Arbeit mit Übersetzungen. Nach dem Testen verschiedener Optionen ist die beste Wahl für die meisten Projekte go-i18n von nicksnyder. Warum?
\n\n- \n
- Einfachheit — minimaler Boilerplate-Code. \n
- Unterstützung für Pluralisierung — korrekte Deklination für "1 Nachricht", "2 Nachrichten", "5 Nachrichten". \n
- Arbeit mit TOML/YAML/JSON — wählen Sie das Format für Ihre Übersetzungen nach Ihrem Geschmack. \n
- Unterstützung für Vorlagen — Sie können Variablen direkt in die Übersetzungszeichenfolge einfügen. \n
- Integriertes Dienstprogramm zum Extrahieren von Schlüsseln — Sie müssen Übersetzungen nicht manuell schreiben. \n
Praktisches Beispiel: Einen mehrsprachigen Service in Go erstellen
\n\nLassen Sie uns einen einfachen Webserver in Go erstellen, der den Benutzer in seiner Sprache begrüßt.
\n\nSchritt 1: Installation und Projektstruktur
\n\nInstallieren Sie die Bibliothek und erstellen Sie die Verzeichnisstruktur:
\n\ngo get github.com/nicksnyder/go-i18n/v2/i18n\ngo get golang.org/x/text/language\n\nProjektstruktur:
\n\nmyapp/\n├── main.go\n└── locales/\n ├── active.en.toml\n ├── active.ru.toml\n └── active.de.toml\n\nSchritt 2: Übersetzungsdateien erstellen
\n\nlocales/active.en.toml:
\n\n[greeting]\ndescription = "Benutzerbegrüßung"\none = "Hallo, {{.Name}}!"\nother = "Hallo, {{.Name}}!"\n\n[inbox]\ndescription = "Anzahl der Nachrichten im Posteingang"\none = "Sie haben {{.Count}} neue Nachricht."\nother = "Sie haben {{.Count}} neue Nachrichten."\n\nlocales/active.ru.toml:
\n\n[greeting]\ndescription = "Benutzerbegrüßung"\none = "Привет, {{.Name}}!"\nother = "Привет, {{.Name}}!"\n\n[inbox]\ndescription = "Anzahl der Nachrichten im Posteingang"\none = "У вас {{.Count}} новое сообщение."\nfew = "У вас {{.Count}} новых сообщения."\nmany = "У вас {{.Count}} новых сообщений."\nother = "У вас {{.Count}} сообщений."\n\nBeachten Sie die Pluralformen im Russischen: one, few, many, other. Die Pluralisierung in Go ist eine leistungsstarke Funktion, die komplexe Deklinationsregeln korrekt verarbeitet.
\n\nSchritt 3: Go-Code schreiben
\n\nJetzt kommt der spannende Teil — die Internationalisierung