Probleme mit Links auf mehrsprachiger Drupal-Webseite beheben
Bei einer Kundenwebseite trat folgendes Problem auf: Die Seite wurde als mehrsprachige Seite geplant, zunächst aber nur mit deutsch Inhalten befüllt. Erst später kamen die englischen Übersetzungen der Beiträge hinzu. Innerhalb der deutschen Texte gab es nun diverse Links auf andere interne Inhalte. Diese Links waren relativ gesetzt (siehe Screenshot des CK-Editors).
Kam man nun als Besucher auf eine deutsche Seite, so zeigten alle dort enthaltenen Links auf die korrekten deutschen Sprachversionen.
Beispiel:
Der Text "Fragen Sie einfach nach" war mit der (internen) Seite www.kundendomain.de/inhalt/kontakt verknüpft
Schaltete man jetzt mittels des Sprachumschalters im Language-Block auf die englische Version um, so wurde die englische Übersetzung angezeigt. Allerdings wurden die Links in dem übersetzten Text nicht korrekt ausgegeben.
- Link im deutschen Text (wie in unserem Beispiel oben): www.kundendomain.de/inhalt/kontakt
- Das fehlende Sprachkürzel war zwar nicht korrekt, für die Anzeige des deutschen Inhalts aber unproblematisch. In der englischen Übersetzung wurde der Link jedoch zu
- www.kundendomain.de/inhalt/contact anstatt zu www.kundendomain.de/en/inhalt/contact.
Hier führte die fehlende englische Sprachkennung dazu, dass ein “Seite nicht gefunden”-Fehler ausgegeben wurde sobald man den fehlerhaften Link anklickte. Aber damit nicht genug, wechselte man jetzt auf eine andere (englischsprachige) Seite und kehrte auf die ursprüngliche Seite zurück, so wurden die Links jetzt korrekt ausgegeben, also mit dem englischen Sprachkürzel in der URL: www.kundendomain.de/en/inhalt/contact.
Soweit so schlecht. Denn das führte dazu, dass die vermeintliche einfache Lösung des Problems, die Links im CK-Editor gleich mit dem Sprachkürzel einzutragen (siehe folgenden Screenshot), nicht funktionierte.
Interner Link im CK-Editor mit englischem Sprachkürzel
Die URLs wurden dann zwar beim ersten Aufruf der Seite (d.h. nach dem Umschalten von Deutsch auf Englisch) richtig ausgegeben. Wechselte man jedoch auf eine andere Seiten in der gleichen Sprache, so führte dies dazu, dass die URLs jetzt zweimal das Sprachkürzel "en" enthielten. Konkret sah das so aus:
- Deutsche Seite: der Link lautet www.kundendomain.de/inhalt/kontakt
- Umschalten auf Englisch: der Link lautet jetzt www.kundendomain.de/en/inhalt/contact
- Auf andere Seite wechseln und wieder zurück. Jetzt schaut der Link so aus www.kundendomain.de/en/en/inhalt/contact. Ein "en"zuviel! Was beim Anklicken natürlich ebenfalls zu einem “Seite nicht gefunden”-Fehler führte.
Das Problem lösten wir mit dem Drupal-Modul Multi-Language Link and Redirect (MultiLink). Es stellt einen Eingabefilter für interne Links bereit. Damit kann man interne Links nicht nur einfacher eingeben, es schaltet auch automatisch auf andere Sprachversionen um, auch wenn diese erst zu einem späteren Zeitpunkt erstellt werden. Will man jetzt einen internen Link setzen, so genügt es im Text folgendes einzugeben:
- Deutsches Original: [32:Mehr Infos zum Übersetzen]
- Englische Übersetzung: [32:More about our translations]
Der Eingabefilter erkennt anhand der eckigen Klammern einen internen Link. Dann erwartet er die Nodenummer (hier 32), einen Doppelpunkt und den Linktext. Mehr ist nicht zu tun. Beim Aufrufen der Seite werden automatisch die korrekten Links zu den jeweiligen Sprachversionen inklusive dem jeweiligen Sprachkürzel erzeugt. Und endlich waren auch die Links in den deutschen Originaltexten so wie sie sein sollten:
- Deutsche Seite: der Link lautet www.kundendomain.de/de/inhalt/kontakt
- Englische Seite: der Link lautet www.kundendomain.de/en/inhalt/contact
Die Installation ist denkbar einfach:
- Module installieren und aktivieren
- In den gewünschten Eingabeformaten den Filter "Multilink" aktivieren (hier in "Full HTML")
- In der Reihenfolge der Filterverarbeitung MultiLink ganz ans Ende setzen (siehe den folgenden Screenshot). Fertig.
Filtereinstellung für MultiLink im Eingabeformat "Full HTML"
MultiLink unterstützt die folgenden Module
- PathFilter
- Pathologic
- InsertNode
- Linodef
- link node
- Markdown
- simple HTML links (anchor tags)
Zusätzlich bietet das Sub-Modul "MultiLink Redirect" die Möglichkeit, User, die über einen Link auf die Seite kommen, gleich auf die richtig Sprachversion umzuleiten. D.h. wenn ein deutschsprachiger User über einen Link auf die englische Sprachversion der Seite kommt, wird er automatisch auf die deutschsprachige Version (soweit vorhanden) umgeleitet. Das sollte man sich aber gut überlegen, denn es kann beim User durchaus auch für Verwirrung sorgen. ;-)