Ein Eintrag in der Konfiguration, aber sechs Rollen im Bau. Wer weiß, welche wann läuft, versteht die meisten Eigenheiten von selbst.
| Rolle | Wann | Was sie tut |
|---|---|---|
| Transformer | beim Verarbeiten jeder Seite | erkennt die Sprache, setzt frontmatter.lang und fileData.multilanguage |
| Verknüpfung | nach dem Einlesen aller Seiten | gruppiert Übersetzungen zueinander |
| Filter | vor dem Rendern | entfernt Sprachen, die nicht veröffentlicht werden (Kapitel 8) |
| Emitter | beim Schreiben | erzeugt die Weiterleitungsseiten, die index.html der Wurzel und static/multilanguage.json für das Skript |
| Komponente | beim Bau des Layouts | rendert den Umschalter |
| Skript | im Browser | Hinweise, gemerkte Sprachwahl, lokalisierte Daten |
Warum die Verknüpfung erst danach kommt
Ein Transformer sieht immer nur eine Seite. Ob es zu de/kaffee eine englische Fassung gibt,
lässt sich erst sagen, wenn alle Seiten gelesen sind — deshalb geschieht die Gruppierung in einem
eigenen Schritt danach.
Daraus folgt etwas Praktisches: Eine Seite, die durch einen Filter aus dem Bau fällt — ein Entwurf, eine ungelistete Seite —, ist auch für die Verknüpfung nicht da. Der Umschalter zeigt sie dann nicht.
Für den Umschalter gilt das immer, denn er liest die Liste nach allen Filtern. Für hreflang
hängt es zusätzlich daran, in welcher Reihenfolge die Filter untereinander laufen — siehe den
zweiten Kasten unten.
Warum order fast nie zählt
order bestimmt die Reihenfolge der Transformer. Für die Spracherkennung ist sie fast gleichgültig
— sie braucht nur das Frontmatter, das note-properties (order 5) längst gelesen hat.
Die eine Ausnahme beim Transformer
rewriteCrossLanguageLinksliest an jedem Link dasdata-slug, dascrawl-links(order 60) beim Auflösen hinterlässt. Die Korrektur muss also nachcrawl-linkslaufen, undorder: 65tut genau das. Wer das Plugin früher stellt, bekommt keine Meldung, sondern Links, die still nicht korrigiert werden. Wer diese Option nicht nutzt, darf die Zeile weglassen.
Und eine zweite beim Filter
ordergilt nicht nur für den Transformer dieses Plugins, sondern auch für seinen Filter — und der hat zwei Aufgaben: Er entfernt nicht veröffentlichte Sprachen und trägt jede Seite, die er durchlässt, in die Liste ein, aus derhreflangspäter schöpft. Steht er unter 50, also vorremove-draft, trägt er Entwürfe ein, bevor sie entfernt werden; imhreflangeiner veröffentlichten Seite steht dann eine Adresse, die es nicht gibt, und niemand sieht es. Gemessen: beiorder: 40nennthreflangden Entwurf, beiorder: 65nicht. Der Umschalter ist davon nicht betroffen.
Das Skript
Drei Dinge geschehen erst im Browser, weil sie den Besucher betreffen und nicht die Seite: die Hinweise auf Übersetzungen (Kapitel 7), das Merken der Sprachwahl und das Formatieren der Datumsangaben.
Alles andere passiert beim Bauen. Ohne JavaScript funktionieren Umschalter, hreflang und
Weiterleitungen weiterhin — nur die drei genannten Dinge nicht.