Internationalisierung von Go-Anwendungen: von $ zu € ohne Kopfschmerzen

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

Warum Ihre Go-Anwendung Internationalisierung (i18n) benötigt?

\n\n

Sie 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\n

Viele 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\n

Was sind i18n und l10n? Ein Blick auf die Terminologie

\n\n

Bevor 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
\n\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\n

Die Bibliothek auswählen: Warum go-i18n?

\n\n

In 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
\n\n

Praktisches Beispiel: Einen mehrsprachigen Service in Go erstellen

\n\n

Lassen Sie uns einen einfachen Webserver in Go erstellen, der den Benutzer in seiner Sprache begrüßt.

\n\n

Schritt 1: Installation und Projektstruktur

\n\n

Installieren Sie die Bibliothek und erstellen Sie die Verzeichnisstruktur:

\n\n
go get github.com/nicksnyder/go-i18n/v2/i18n\ngo get golang.org/x/text/language
\n\n

Projektstruktur:

\n\n
myapp/\n├── main.go\n└── locales/\n    ├── active.en.toml\n    ├── active.ru.toml\n    └── active.de.toml
\n\n

Schritt 2: Übersetzungsdateien erstellen

\n\n

locales/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\n

locales/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\n

Beachten Sie die Pluralformen im Russischen: one, few, many, other. Die Pluralisierung in Go ist eine leistungsstarke Funktion, die komplexe Deklinationsregeln korrekt verarbeitet.

\n\n

Schritt 3: Go-Code schreiben

\n\n

Jetzt kommt der spannende Teil — die Internationalisierung

Blogs

Buchempfehlungen