Probleme mit Links auf mehrsprachiger Drupal-Webseite beheben

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).

relativer Link auf internen Inhalt einer Drupal-Webseite
Interner Link im CK-Editor

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.

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
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:

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:

Die Installation ist denkbar einfach:

  1. Module installieren und aktivieren
  2. In den gewünschten Eingabeformaten den Filter "Multilink" aktivieren (hier in "Full HTML")
  3. In der Reihenfolge der Filterverarbeitung MultiLink ganz ans Ende setzen (siehe den folgenden Screenshot). Fertig.

Einstellungen für den Multilink-Filter im Eingabeformat "Full HTML"
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. ;-)