Ein substantielles Enterprise-Feature von TYPO3 ist die Unterstützung von Mehrsprachigkeit in Frontend und Backend. Bei der Umsetzung von knapp 20 mehrsprachigen Internetauftritten mit TYPO3 hatte ich reichlich Gelegenheit, neben den Schmankerln auch die Ecken und Kanten der Lokalisierung kennenzulernen, die ich an verschiedener Stelle auch auf Forge gepostet habe. Nun steht mit TYPO3 6.2 der nächste LTS-Kandidat vor der Türe und die Inkonsistenzen bestehen noch immer – Anlass für mich, das Thema an prominenterer Stelle zu diskutieren in der Hoffnung, durch eine konstruktive Diskussion etwas zur Entwicklung von TYPO3 beitragen zu können.
Overlays
TYPO3 verwaltet lokalisierte Datensätze in Form von Record Overlays. Während die Übersetzungen von Seiten in einer eigenen Tabelle vorgehalten werden (pages_language_overlay), befinden sich lokalisierte Inhalte und Datensätze aus Extensions in der gleichen Tabelle wie die Defaultsprache.
Datenlieferanten
Das Holen der Daten mit dem anschließenden Overlay von Sprache und Workspace passiert im Falle von Seiten meist über das TS-Objekt HMENU, Inhaltselemente werden gewöhnlich über das cObjekt CONTENT oder RECORD geholt. Seit der Entwicklung von Extbase können Datensätze (sowohl tt_content als auch Datensätze von eigenen Extensions) alternativ über Repositories geliefert werden, die sich transparent um die Lokalisierung kümmern. Hier gibt es massive Unterschiede, was das Sprachoverlay angeht.
TCA
So könnte z.B. ein Newsdatensatz ein Datum haben, das für alle Sprachen gilt. In diesem Falle empfiehlt es sich, das Feld nur in der Defaultsprache einzublenden. Das erreicht man über das Setzen des Wertes “exclude” für das TCA-Setting “l10n_mode” des Datum-Feldes. Bei der Auflistung der Newsdatensätze im Backend stellt man fest, dass die Datumsfelder der übersetzten Datensätze leer sind. Gravierender noch ist die Tatsache, dass eine Sortierung oder Filterung nach Datum für die übersetzten Datensätze nicht mehr funktionieren, weil das Datumsfeld der übersetzten Datensätze leer ist.
Spracheinstellungen
Noch mehr Fälle entstehen durch die verschiedenen möglichen Übersetzungskonstellationen:
- Datensatz liegt nur in Defaultsprache vor (ein- oder ausgeblendet)
- Datensatz liegt nur in Übersetzung vor (ein- oder ausgeblendet)
- Datensatz ist markiert als „alle Sprachen“ (ein- oder ausgeblendet)
- Datensatz liegt in Defaultsprache und Übersetzung vor
- Datensatz liegt in Defaultsprache und Übersetzung vor, Defaultsprache ist ausgeblendet
- Datensatz liegt in Defaultsprache und Übersetzung vor, Übersetzung ist ausgeblendet
- Datensatz liegt in Defaultsprache und Übersetzung vor, beide sind ausgeblendet
Record overlays und Fluid
Wer sich im TYPO3 Core schon mal die Funktionen angesehen hat, die für Sprach- und Workspaceoverlays zuständig sind, dem wird schnell klar, wie viele Schritte hier nötig sind, um alle Fälle abzudecken.
Das hat eine hässliche Nebenwirkung bei Verwendung von Fluid Pagebrowsern in Verbindung mit lokalisierten Datensätzen. Das äußerst elegante Prinzip des Pagebrowser-Widgets sieht vor, dass dem Widget zwar die Datenbankabfrage für alle Datensätze übergeben wird, letztendlich aber nur die benötigten Datensätze aus der Datenbank geholt werden. Dieser Mechanismus versagt jedoch, sobald der Pagebrowser eine Liste von Datensätzen anzeigt, die nicht alle übersetzt sind; der Pagebrowser richtet sich hier bei der Seitennavigation nach der Defaultsprache; in der Liste angezeigt werden aber nur die übersetzten Datensätze.
Hier stößt der Overlay-Mechanismus von TYPO3 wohl an eine Grenze – es lässt sich nicht mehr in einer einzigen SQL-Query herausbekommen, wie viele Ergebnisse eine Datenbankabfrage bringen wird.
Lösung?
Die einzige mir bekannte funktionierende Lösung ist die Extension Tesseract (die übrigens hervorragend dokumentiert ist und mehrfach meine Rettung bei komplexen Projekten war).
Warum mir das nicht genügt? Zum einen sollte für so ein grundlegendes Feature keine Erweiterung installiert werden müssen – gerade das ist ja einer der Punkte, warum ich TYPO3 anderen, deutlich weniger komplexen Systemen vorziehe. Zum anderen erfordert die Verwendung von Tesseract mehr Handgriffe, als für Standard-Anwendungsfälle nötig sein sollte.
Ausblick
Die Tatsache, dass die beschriebenen Schwierigkeiten seit einigen Versionen nicht behoben wurden, bringt mich zu der Frage: Wird dieses Feature seltener oder oberflächlicher benutzt, als ich denke? Oder liegt es einfach an der zugegebenermaßen hohen Komplexität der Problematik? Hattet Ihr diese oder ähnliche Schwierigkeiten auch schon? Und wenn ja: Wie habt Ihr sie bewältigt?
Schön wäre es, wenn das neue Flaggschiff TYPO3 6.2 mit einem klaren und einheitlich funktionierendem Lokalisierungskonzept ausläuft; out-of-the-box sollte TYPO3 die Sprachoverlays nachvollziehbar und vor allem einheitlich vollziehen.
Links
- TYPO3-Extension Tesseract -> http://www.typo3-tesseract.com/en/
- Forge: Changed language overlay behaviour in TYPO3 6.* -> http://forge.typo3.org/issues/48673
- Forge: l10n_mode „exclude“ not respected in query -> http://forge.typo3.org/issues/49176