Ich versuche, möglichst alle Inhalte meiner Website mehrsprachig anzubieten. Dabei helfen mir die Übersetzungs- und Internationalisierungsschnittstellen meines Content Management Systems Kirby. Sie machen es einfach, mehrsprachige Inhalte zu erstellen.
Kürzlich stieß ich jedoch auf ein kleines Problem, dessen Lösung mehr Zeit in Anspruch nahm, als ich erwartet hatte.
Es geht um die Einbindung des Sprachumschalters, der sich am Ende jeder Seite befindet und einen Link zur aktuellen Seite in einer anderen Sprachversion enthält:
This page is also available in English.
Dazu habe ich zunächst für die Sprachen, die ich unterstützen möchte (in meinem Fall Deutsch und Englisch) einen neuen Eintrag in der entsprechenden Übersetzungsdatei unter site/language/$lang_code.php
eingefügt:
Als nächstes habe ich das folgende Snippet in der Datei site/snippets/language_switch.php
erstellt:
Hier werden einige interessante Kirby-Funktionen miteinander verknüpft:
- In einer Schleife werden zunächst alle Sprachen durchlaufen, die in Kirby angelegt wurden, wobei die aktuelle Sprache übersprungen wird.
- Als nächstes wird die URL der aktuellen Seite in einer anderen Sprache gesucht. Diese erhalten wir, indem wir die Hilfsfunktion
$page->url()
mit einem Parameter aufrufen und ihr die Zielsprache übergeben:$page->url($language->code())
. - Bei Bedarf werden auch alle
$_GET
-Anfrageparameter an die neue URL durchgereicht. - Wir verwenden das
lang
-Attribut, um dem Browser mitzuteilen, dass der Text in einer anderen Sprache als der Rest des Dokuments geschrieben ist. Dabei hilft uns die Hilfsfunktion$language->code()
, - Schließlich verwenden wir die Funktion
I18n::template()
, um den übersetzten Text in der Zielsprache auszugeben. Zusätzlich ersetzen wir dabei auch den{language_name}
durch den Namen der Sprache und{language_name}
durch die URL der Sprachversion. Die Standardfunktiont()
, die ich sonst zum Übersetzten von Template-Strings verwende, ermöglicht es leider nicht, auch Ersetzungen vorzunehmen.
Das Snippet wird dann in allen meinen Templates per snippet('language_switch');
eingesetzt.
Hinterlasse einen Kommentar
Auf der eigenen Website geantwortet? Sende eine Webmention!