Möchte man eine mehrsprachige Website mit MODx (dem bekanntermaßen besten CMS der Welt) umsetzen, geht das ganz einfach mit mehreren Kontexten – das hatten wir schon mal besprochen. In jenem Artikel habe ich auch ein Snippet gezeigt, das Inhalt je nach gewähltem Kontext ausgibt. Das ist besonders praktisch, wenn man gewisse Chunks oder Snippets je nach Kontext unterschiedlich einbinden möchte, doch auch wenn man einfach nur eine kleine Zeichenkette in z.B. einem Template übersetzen möchte, kann man dieses Snippet verwenden. Im Sinne des Erfinders ist das freilich nicht, denn mit dem sogenannten Lexikon und einem entsprechenden Template-Tag hat MODx bereits ein sehr fähiges Übersetzungstool an Bord.

Legt man einen neuen Kontext an, so verpasst man diesem in seinen Einstellungen sinnvollerweise einen sogenannten Culture Key, der die Sprache des Kontexts festlegt; man legt zum Beispiel für den Kontext für die englische Seite eine neue Einstellung namens cultureKey an, trägt als Wert en ein und schon ist der Kontext als englischsprachig markiert. Das sollte man eigentlich immer machen, doch für die Verwendung des Lexikons und seiner Übersetzerfähigkeiten, ist ein ordnungsgemäßer Culture Key Voraussetzung. Die Kontext-Einstellungen findet man unter System → Kontexte.

Das Lexikon ist eine Sammlung von Zeichenketten, zu finden unter System → Lexikon-Verwaltung. Diese Zeichenketten sind Name-Wert-Paare und sind nach Namensräumen getrennt, damit es zum Beispiel keine Kollisionen zwischen den Zeichenketten für den MODx-Manager und denen für die verschiedenen Plugins und Snippets gibt. Außerdem gibt es noch als Unterscheidungsmerkmal ein Thema und – für uns interessant – Sprache! Es ist uns also möglich, unter dem gleiche Schlüssel im gleichen Namensraum mehrere Zeichenketten anzulegen und diese nur anhand der Sprache zu trennen. Möchte man zum Beispiel erreichen, dass im Template einer Seite ein Text im deutschen Kontext als „Allgemeine Geschäftsbedingungen“ und im englischen als „Terms & Conditions“ auftaucht, legt man einfach zwei entsprechende Zeichenketten unter dem gleichen Schlüssel an; einmal für deutsch, einmal für englisch.

Ein Lexikon-Eintrag für MODx wird angelegt

Auf diesem Screenshot wird also gerade der der englische Text „Terms & Conditions“ unter dem Schlüssel agb_text für die englische Sprache eingetragen. Es ist sinnvoll, vorher einen eigenen Namensraum anzulegen (System → Namensräume). Hat man den deutschen wie auch den englischen Text unter dem gleichen Schlüssel eingetragen, ist es ein leichtes diesem in einem Template oder Chunk zu verwenden:

<p>
    Sonstiges HTML
    <br>
    agb_text
    <br>
    Sonstiges HTML
</p>

Der -Tag erlaubt den praktischen Direktzugriff auf das Lexikon, so dass man nur den Schlüssel unserer Einträge, agb_text anzugeben braucht und als Parameter den Namespace übergibt, aus dem die Zeichenketten zu beziehen sind. Falls man auch ein Thema verwendet, so kann man dieses über den Parameter &topic=`meinThema` angeben und falls man es mal gezielt auf eine bestimmte Sprache abgesehen hat, geht dies mit &language=`en`.

Der Schlüssel zur erfolgreichen Übersetzung ist, dass die vom Kontext vorgegebenen Standardwerte benutzt werden, wenn man Parameter auslässt! So erbt beim gezeigten Beispiel der language-Parameter seinen Wert von der Culture-Key-Einstellung unseres Kontexts und für topic gilt default, was der systemweiten Standardeinstellung entspricht. Und wir haben uns eine bequeme Möglichkeit geschaffen, einzelne Zeichenketten in Templates und Chunks zu übersetzen. Culture Key für Kontexte eintragen, einen Namensraum anlegen, Lexikon-Einträge schreiben, -Tag verwenden, fertig! Auch in Snippet-Code kann man das Lexikon natürlich nutzen – wie das geht, erklärt die MODx-Dokumentation.