Mehrsprachige Webseiten mit Contao

Contao ist multidomainfähig. Das kann man sich zunutze machen, wenn mehrsprachige Webseiten erstellt werden sollen. Dazu wird in der Seitenstruktur pro Sprache ein eigener Seitenbaum erzeugt. In den Einstellungen kann pro Seitenbaum eine eigene Domain eingerichtet werden. So ist es z.B. möglich mit nur einer (1) Installation eine Webseite in Deutsch und gleichzeitig eine ins Englisch übersetzte Seite unter zu veröffentlichen.

Bild mit den Landesflaggen anderer Länder um die Mehrsprachigekt zu symbolisieren inkl. Schwäbisch

Das Einrichten einer mehrsprachigen Webseite mit Contao stellt höhere Ansprüche an den Webdesigner. Die Übersetzung einer Seite bezieht sich nämlich meist nicht nur nur auf die geschriebenen Textinhalte. Neben diesen und der Navigation gibt es noch weitere Module, in denen deutsche Sätze vorhanden sind. Auch diese müssen übersetzt werden.

Es kann im Backend unübersichtlich werden, wenn die in Deutsch angelegten Layouts für die jeweilig andere Sprache geklont werden. In den Layouts befinden sich Module mit Standard-Anweisungen, die in die jeweilie Sprache übersetzt werden müssen.

Hat man z.B. eine 4-sprachige Webseite in Deutsch mit 5-6 Seitenvorlagen angelegt, ergeben sich 4 x 6 = 24 Seitenlayouts. Werden später Module an eine andere Stelle verschoben, so summiert sich der Arbeitsaufwand gleich 4-fach, weil diese Änderung synchron auch für die Webseiten der anderen Sprachen wiederholt werden müssen.

Sinnvoller ist es darum, wenn man umgekehrt denkt. Nicht „welches Seitenlayout bindet welche Module ein“ sondern „welches Modul soll auf welcher Seite erscheinen„.
Um Seitenlayouts und Module einzusparen, hier ein paar Vorschläge, mit denen sich die spätere inhaltliche Pflege weniger zeitaufwändig gestalten lässt.

Keine doppelten Navigationsmodule mit der Erweiterung „changelanguage“

Als wichtigste Erweiterung, möchte ich die von Andreas Schempp entwickelte, Erweiterung „changelanguage“ vorstellen.
Die Contao Erweiterung changelanguage anschauen und downloaden

Einmal installiert, legt man die Hauptdomain (z.B. im Seitenbaum den deutschen Startpunkt einer Webseite) fest und bestimmt, dass diese in Deutsch verfasste Seite die Fallbackseite ist. Das heißt: Wenn z.B. ein Browser mit der Länderkennung „Italien“ oder vereinfacht ausgedrückt: wenn ein Italiener meine Seiten betritt und eine italienische Version nicht vorhanden ist, dann wird die deutsche Seite angezeigt.
Wenn ich hingegen eine zweisprachige Webseite mit einem deutschen und einem englischen Seitenbaum habe, dann wird die englische Seite angezeigt, wenn in der englischen Seitenstruktur in den Seiteneinstellungen bei „Sprache“ das Länderkürzel „en“ eingetragen wurde.

Das Schöne an dieser Erweiterung ist, dass zur Sprache der Hauptdomain (z.B. Deutsch) auf jeder Seite anklickbare Flaggen oder Links erscheinen für die weiteren verfügbaren Sprachen (z.B. Englisch, Französisch, Russisch) erscheinen und die Seite quasi „simultan“ übersetzt wird.

Um die Erstellung eines andersprachigen Navigationsmenüs muss man sich nicht kümmern. Es müssen für die jeweils anderen Sprachen keine zusätzlichen Module in den anderen Sprachen angelegt werden. Im Seitenbaum der anderen Sprache erscheint nach Installation von changelanguage oben rechts ein neues Auswahlmenü mit der Überschrift „Fallback-Seite“. Befindet man sich beispielsweise im englischen Seitenbaum auf einer Seite namens „About us“ würde man als Fallbacksseite im deutschen Seitenbaum dieser Seite die Seite „Über uns“ zuordnen.

Und, was ich zunächst auch übersehen hatte: es ist an alles gedacht, denn es kann ja durchaus vorkommen, dass man einem englischen Publikum etwas anderes sagen möchte als einem deutschen und im englischen Seitenbaum mehr Seiten angelegt hat. In diesem Fall würde es keine Fallbackseite geben. In Quelltext geschaut erkennt man, dass dann der Link eine Klasse „nofallback“ hat. Via CSS und display: none, kann man dann erreichen, dass auf Seiten, zu denen es keine Fallbackseite gibt die Flagge für die Übersetzung nicht erscheint.

Was jedoch noch offen ist, ist der umgekehrte Fall: in der Hauptsprache ist eine Seite vorhanden, die im es anderssprachigen Seitenbaum nicht gibt. Hier wäre es vielleicht eine Anregung die Erweiterung mit der Möglichkeit der Einrichtung einer Weiterleitungsseite auszustatten auf der man dann z.B. eintragen könnte: „this site is not available in english“ … oder so.

Module und damit Layouts einsparen mit Insert-Tags

Die kleinen und fast unscheinbare Codeschnippsel der Inserttags sollte man nicht unterschätzen, denn sie haben es in sich. Mit Ihnen kann man allerlei anstellen, wer sie noch nicht kennen sollte, dem sei ein Blick in folgende Liste empfohlen: Liste der Contao Inserttags

Und was kann man jetzt davon in mehrsprachigen Webseiten einsetzen?
Ein Fallbeispiel: Im deutschen Seitenbaum wurde ein Modul vom Typ „Eigener Code“ erstellt und darin folgende Zeilen eingetragen:

„Bei Fragen und Problemen besuchen Sie doch einfach mal die freundliche Contao-Community. Contao Hilfe-Forum

Für die englische Ausgabe der Seite soll der Text wie folgt lauten:

„If you have any questions, don’t hesitate to visit the friendly Contao-community.

Nun könnte man eine Lösung sozusagen „zu Fuß“ konstruieren, ein geklontes Layout anlegen und statt des deutschsprachigen Moduls an entsprechender Stelle das englischsprachige einsetzen.
Eleganter geht es aber mit dem Inserttag „iflng„. Angenommen das deutschsprachige Modul hätte die ID 10 und das englischsprachige Modul die ID12, legt man einfach ein weiteres Modul vom Typ „eigener Code“ an und fügt folgende Zeilen ein

{{iflng::de}} {{insert_module::10}} {{iflng}} {{iflng::en}} {{insert_module::12}} {{iflng}}

Man kann das Ganze natürlich auch noch schlanker realisieren indem man nur ein Modul (Typ: Eigener Code) anlegt und Folgendes einträgt.

{iflng::de}}Bei Fragen und Problemen besuchen Sie Contao-Community.  contao-community.de {{iflng}}
{{iflng::en}}If you have any questions, don't hesitate to visit the friendly Contao-community. contao-community.org{{iflng}}

Layouts sparen mit der Contentbox

Eine Webseite lebt nicht nur vom Design allein und auch nicht nur von der Technik. Um einen Besucher für sich zu gewinnen ist es – wie im richtigen Leben oft auch – eine Frage wie man Menschen anspricht, wie heißt es doch so schön: der Ton macht die Musik. Sehr beliebt sind daher die auf vielen Webseiten zu sehenden bedeutungsschwangeren Zitate bekannter Menschen, die eine gewisse Stimmung erzeugen und die – meiner Meinung nach – nur leider  zu oft und zu leichtsinnig verwendet werden, denn auch Zitate und Aphorismen unterliegen dem Urheberrecht, aber das ist eine andere Baustelle.

Nehmen wir mal an, wir haben eine Webseite mit mehreren Zitaten von unser aller Freund Goethe.

Startseite-de

Auch aus Steinen, die einem in den Weg gelegt werden, kann man Schönes bauen

Startseite-en

Even the stones that have been placed in one’s path can be made into something beautiful.

Produkte-de

Mit dem Wissen wächst der Zweifel.

Produkte-en

With konwledge doubt increases.

Nun könnte man sicherlich auch diese Zitate mit inserttags sprachabhängig anzeigen lassen, wenn jedoch zum Beispiel auf jeder zweiten Seite einer Installation ein anderes Zitat erscheinen soll, würde ich eher dazu tendieren die Erweiterung ContentBox von Christian Wenzel und Markus Mikereit | computino.de einzusetzen.

Am besten man beginnt nach der Installation zuerst damit ein Modul für die später zu erstellenden Contentboxen anzulegen. Dazu wie üblich ==>Module anklicken und ein Modul vom Typ  ==>Contentbox erstellen (zu finden unter „Verschiedenes“) und festlegen in welchem Layoutbereich das Modul angezeigt werden soll.

Bild vom Contao Backend bei installierter Erweiterung contentbox mit dem Auswahlmenü verknüpfte Seiten

Wie man nach der Installation der Erweiterung unschwer erkennen kann, ist im Backend die Seitenleiste um einen Navigationspunkt reicher geworden. Klickt man auf den neuen Link „contentbox“ kann man im weiteren Verlauf für jedes Zitat eine solche Box erstellen.

Bild vom Contao Backend mit angelegten Contentboxen für verschiedene Zitate

Die Verfahrensweise ist denkbar einfach: im Textfeld kann man das Zitat einfügen und anschließend in der Seitenbaum die Seiten auswählen, auf der das Zitat erscheinen soll. Im Auswahlfeld „Anzeigen in Modul“ ist das zuvor erstellte Modul „Zitate“ sichtbar und wird durch Klick der contentbox zugeordnet. In der Seitenvorlage muss man nun nur noch an geeigneter Stelle das Modul „zitate“ unter „eigebundene Module“ platzieren und der Fisch ist geputzt. Etwas tricky kann es werden wenn man z.B. im Laufe der Bearbeitung einer Webseite zunächst nur ein Zitat für alle Seiten eingefügt hat und erst später weitere Zitate einarbeitet. Dann darf man natürlich nicht vergessen die Haken beim ersten Zitat an entsprechender Stelle wieder herauszunehmen.

Layouts und Module sparen mit der Erweiterung z_modulealias

Im Contao ER (extension repository) zu finden ist auch die Erweiterung z_modulealias, mit der man ebenfalls den umgekehrten Weg beschreiten kann. Es werden nicht dem Layout die Module zugeordnet, sondern den Modulen gesagt, auf welchen Seiten erscheinen sollen. Nach der Installation sind alle Module unter den Experten Einstellungen mit der zusätzlichen Auswahlliste „verknüpfte Seiten“ ausgestattet.

Klick darauf öffnet den Seitenbaum aus welchem man dann ganz einfach die Seiten auswählt, auf denen das Modul erscheinen soll.

Bild vom Contao Backend mit der installierten Erweiterung z_modulealias

3 Gedanken zu „Mehrsprachige Webseiten mit Contao“

  1. Vielen Dank für die nützlichen Hinweise. Super!

    Ein Hinweis/Frage zu ‚z_modulealias‘: das scheint ein sehr nützliches Modul zu sein. Würde es doch bei meiner Idee, bei bestimmten Seitenästen zu den jeweiligen Themen unterschiedliche Zufalls-Bilder einzublenden, die Erstellung vieler Seitenlayouts vermeiden. In der Praxis scheint es aber so zu sein, dass bei einem hierarchischen Aufbau der Seiten ein hierarchisch früher gefundenes Modul die folgenden ‚überschreibt‘. Dabei sollte es doch so sein, dass das früher gefundene Modul nur verwendet wird, wenn kein folgendes gefunden wird. Konkret: weise ich der Startseite ein Bildmodul zu, wird dies auf allen folgenden Seiten verwendet, auch wenn ich in den Folgeseiten andere Module zuweise.

    Oder denke ich hier falsch bzw. gibt es da einen Trick?

  2. Hallo scribbler,

    ich ahne was du meinst, denn bei der contentbox verhält es sich ähnlich – allerdings kann man es hier steuern, indem man Haken wieder herausnimmt. Wenn es bei z_modulealias so ist, dass ein, in der Haupseite gesetztes Modul sich auf die Unterseiten vererbt und dieses Modul, das in einer Unterseite explizit gesetzte anderes Modul, überschreibt, dann würde ich auch denken, dass entweder was nicht richtig läift oder man was bei der Einrichtng nicht ganz richtig gemacht hat.

    Leider kann ich dir keine Lösung anbieten. Es wäre aber sicherlich – auch im Interesse anderer – sinnvoll den Entwickler (Andreas Schempp) zu fragen. Du findest ihn im Contao-Hilfeforum.

    LG Jutta

Kommentare sind geschlossen.