Vellum

Mehrsprachig von Anfang an

Ausgabe
Umfang
2 Min. Lesezeit · 298 Wörter
Von
Your Name
Auch auf
English
Inhalt

Diese Demo läuft auf Englisch und Deutsch. Nicht Englisch mit deutschem Anstrich: Jede Sprache hat ihr eigenes Inhaltsverzeichnis, ihr eigenes Menü, ihren eigenen Suchindex, ihren eigenen Feed und ihre eigenen Tags. Ein Beitrag darf in einer Sprache existieren und in der anderen nicht — das ist der Normalfall, keine Lücke, für die man sich entschuldigt.

Der Aufbau

defaultContentLanguage = "en"
defaultContentLanguageInSubdir = true

[languages.en]
  languageName = "English"
  contentDir = "content/en"
  weight = 1

[languages.de]
  languageName = "Deutsch"
  contentDir = "content/de"
  weight = 2

defaultContentLanguageInSubdir stellt jede Sprache unter ein Präfix, Englisch eingeschlossen. Damit landet nichts im Veröffentlichungswurzelverzeichnis — und genau deshalb bringt das Theme das Ausgabeformat ROOT404 mit, damit der Webserver überhaupt ein Fehlerdokument ausliefern kann.

Wichtig

ROOT404 gehört ausschließlich in die Standardsprache. Gibt man es beiden, streiten sie sich um /404.html, und die Build-Reihenfolge entscheidet.

Übersetzungen paaren

Zwei Beiträge werden über einen gemeinsamen translationKey zu Übersetzungen voneinander. Damit bleiben Dateiname und URL in jeder Sprache idiomatisch:

translationKey = "multilingual-by-design"

Im Schriftfeld erscheint dann die Zeile Auch auf, und die Sprachumschaltung im Kopf führt auf das Gegenstück dieser Seite statt auf die Startseite. Wo es kein Gegenstück gibt — wie bei zwei Beiträgen dieser Demo — fällt sie auf die Startseite der anderen Sprache zurück. Das ist die ehrliche Antwort.

Parameter je Sprache

Alles unter [languages.xx.params] erreicht die Templates als site.Params, bereits für die aktuelle Sprache aufgelöst. Erst das macht einen wirklich sprachabhängigen editPost-Link möglich:

[languages.de.params.editPost]
  URL = "https://example.org/-/edit/main/content/de"
  appendFilePath = true

.File.Path ist relativ zum contentDir der jeweiligen Sprache — eine einzige seitenweite URL könnte also immer nur für eine der beiden stimmen.

Datumsangaben

DateFormat = ":date_long" statt einer Go-Layout-Zeichenkette. Ein Layout wie 2. January 2006 friert den Monatsnamen in einer Sprache ein und schreibt auf einer deutschen Seite bereitwillig January; die Kurzform löst pro Sprache auf.