Typo3 Sprachmenü: Sprachauswahl nur anzeigen, wenn Seitenübersetzung vorhanden ist
Ein Sprachmenü in Typo3 ist recht einfach umzusetzen. Oft gibt es aber Seiten, die in einer anderen Sprache eventuell nicht übersetzt sind/werden. Um diese Seiten in der Navigation einer Übersetzungsprache auszublenden, setzt man einfach einen Haken in den Seiteneigenschaften unter der Option "Seite verbergen, wenn keine Übersetzung für die aktuelle Sprache vorhanden ist". Damit eine Redakteur nicht immer darauf achten muss und es nicht aus Versehen vergißt, kann man einfach die folgende Option insTsConfig des Benutzers mit aufnehmen:
#im TSconfig des Benutzers
TCAdefaults.pages.l18n_cfg = 2
Soweit, so gut. Nicht übersetzte Seiten werden nun in der Navigation ausgeblendet. Was aber, wenn ich gerade auf einer Seite bin (z.B. in deutscher Sprache), zu der es keine Übersetzung gibt (z.B. keine englische Übersetzung). Der Sprachumschalter wird normalerweise trotzdem angezeigt, führt bei einem Klick aber ins Nirvana.
Hierfür gibt es eine einfache Abhilfe, indem man den Seitenwert 'l18n_cfg' abfragt. Dieser hat den Wert 2, sofern der Haken bei oben genannter Option gesetzt ist. Wenn der Wert=2 ist, dann braucht man die Sprachauswahl für die nicht übersetzte Sprache auch nicht anzeigen. Hier ein einfaches Beispiel dazu:
# Sprachmenü Beispiel deutsch/englsich - Std.Sprache ist deutsch (L=0=de, L=1=uk)
temp.nav.language = COA
temp.nav.language.1 = TEXT
temp.nav.language.1 {
value = <img src="inc_files/glh/gfx/flags/flag_uk.gif" alt="English" title="English" border="0" />
typolink.parameter.data = page:uid
typolink.additionalParams = &L=1
}
# bei englischer Sprache die deutsche Flagge anzeigen
[globalVar = GP:L=1]
temp.nav.language.1 {
value = <img src="inc_files/glh/gfx/flags/flag_de.gif" alt="Deutsch" title="Deutsch" border="0" />
typolink.parameter.data = page:uid
typolink.additionalParams = &L=0
}
[global]
Jetzt für die aktuell besuchte Seite prüfen, ob es überhaupt eine Übersetzung gibt. Falls nicht (Wert l18n_cfg ist 2), dann fliegt der Sprachlink für diese Seite raus.
# im TSconfig der Spracheinstellungen
[globalVar = TSFE:page|l18n_cfg = 2]
temp.nav.language.1.value =
temp.nav.language.1.typolink.parameter >
[global]
That´s it!
Der Haken bei dieser Lösung
Es funktioniert nur wirklich sinnvoll bei zweisprachigen Seiten, da es sich um eine Entweder-Oder-Lösung handelt. Bei mehreren Sprachen würde es sonst konsequent heißen, wenn es die Seite nicht auf italienisch gibt, dann bieten wir sie auch nicht für englisch an.