Sprachumschaltung mit Links

Um die Sprache einer Webseite umzuschalten, benötigt man nicht unbedingt ein php-script oder eine Extension. Man kann es auch mit Typoscript erreichen.
Das hier vorgestellte Verfahren ist auch unter simulateStatics oder realurl zu verwenden.

Wir möchten unsere Seite in den Sprachen deutsch, englisch und türkisch anbieten. Da deutsch unsere Standardsprache ist, legen wir unter dem Globus die Webseitensprachen englisch und türkisch an (id 1 und 2). Um Probleme mit der Darstellung von türkischen Zeichen zu vermeiden, wollen wir das Backend und die Webseite auf utf-8 umstellen. Hierzu wählen wir im Installtool unter "All Configurations" den Punkt [BE][forceCharset] und setzen ihn auf utf-8.
Im root-Template fügen wir unter config folgende 2 Zeilen ein:

TypoScript
config.renderCharset = utf-8
config.additionalHeaders = Content-Type:text/html;charset=utf-8

Nun legen wir der Übersicht halber ein Extension-Template an und nennen es Sprachen. Deutsch ist die Standardsprache, hat also die id 0. Als Sprachvariable haben wir L.

Wir definieren erstmal alles für die Standardsprache, für die anderen beiden Sprachen machen wir eine Condition, da wir dort nicht die aktuelle Sprache anzeigen wollen, sondern die anderen verfügbaren Sprachen.
Gleichzeitig definieren wir die notwendigen lokalen Einstellungen der jeweiligen Sprache.

TypoScript
#Sprache
config.linkVars = L
config.uniqueLinkVars = 1
config.sys_language_uid = 0
config.language = de
config.locale_all = de_DE.UTF8

###Sprachlinks
temp.langlink1 = TEXT
temp.langlink1.value=English
temp.langlink1.typolink.parameter.data = page:uid
temp.langlink1.typolink.additionalParams = &L=1
temp.langlink1.typolink.ATagParams = class="first" lang="en" xml:lang="en"

temp.langlink2 = TEXT
temp.langlink2.value=Türkçe
temp.langlink2.typolink.parameter.data = page:uid
temp.langlink2.typolink.additionalParams = &L=2
temp.langlink2.typolink.ATagParams = lang="tr" xml:lang="tr"

[globalVar = GP:L = 1]
#englisch
config.sys_language_uid = 1
config.language = en
config.locale_all = en_EN.UTF8

###Sprachlinks
temp.langlink1 = TEXT
temp.langlink1.value=Deutsch
temp.langlink1.typolink.parameter.data = page:uid
temp.langlink1.typolink.additionalParams = &L=0
temp.langlink1.typolink.ATagParams = class="first" lang="de" xml:lang="de"

temp.langlink2 = TEXT
temp.langlink2.value=Türkçe
temp.langlink2.typolink.parameter.data = page:uid
temp.langlink2.typolink.additionalParams = &L=2
temp.langlink2.typolink.ATagParams = lang="tr" xml:lang="tr"

[global] 

[globalVar = GP:L = 2]
#türkisch
config.sys_language_uid = 2
config.language = tr
config.locale_all = tr_TR.UTF8

###Sprachlinks
temp.langlink1 = TEXT
temp.langlink1.value=Deutsch
temp.langlink1.typolink.parameter.data = page:uid
temp.langlink1.typolink.additionalParams = &L=0
temp.langlink1.typolink.ATagParams = class="first" lang="de" xml:lang="de"

temp.langlink2 = TEXT
temp.langlink2.value=English
temp.langlink2.typolink.parameter.data = page:uid
temp.langlink2.typolink.additionalParams = &L=1
temp.langlink2.typolink.ATagParams = lang="en" xml:lang="en"

[global] 

Nun haben wir jeweils 2 Links generiert, die uns die jeweils anderen Sprachen zugänlich machen, sie sind in den Objekten temp.langlink1 und temp.langlink2.

Wir müssen diese also nur noch auf unserer Seite anzeigen. Hier bietet sich ein kleines COA-Objekt ein, das wir an einen Marker binden können:

TypoScript
temp.sprachselektor = COA
temp.sprachselektor  {
	wrap= <ul id="langselector">|</ul>
	10 < temp.langlink1
	10.wrap = <li>|</li>
	
	20 < temp.langlink2
	20.wrap = <li>|</li>
}

Wir können das Beispiel noch ausbauen, so könnte man die aktive Sprache anzeigen oder sogar die Flagge. Der Parameter uniqueLinkVars sorgt dafür, das L nicht doppelt in der Url auftaucht. Wir haben unseren eigenen Sprachumschalter.

5 Kommentare
#5 M7788 schrieb am 21.09.2009 14:31

Hi, danke für die Anleitung, leider werden so auch die Sprachlinks angezeigt, wenn keine Übersetzung für eine Seite existiert. Gibt es hier eine Möglichkeit dies zu verhindern?

VG

M

#2 Ayse schrieb am 09.01.2009 11:58

Hallo, bei mir funktioniert es aber leider nicht mit

config.language = tr

config.locale_all = tr_TR.UTF8

mein FE wird komplett weiß und bekomme einen leeren Quellcode

#3 SebFux schrieb am 25.02.2009 16:27

Hi Ayse,

schreib mal bei config.locale_all = en_EN.UTF8 rein. Das ist kein TYPO3 Problem sondern mM nach geilste Bug den PHP hat.

bugs.php.net/bug.php

bugs.typo3.org/bug_relationship_graph.php

#4 Ayse schrieb am 03.03.2009 23:09

SebFux, ja aber wenn ich config.locale_all = en_EN.UTF8 schreibe wird ja alles in englisch :S

was kann ich gegen den "mM" Problem tun??

#1 Enrico schrieb am 19.02.2007 10:27

Wenn jetzt noch eine Abfrage dabei wäre wo nur existierende Alternativsprachen angezeigt würden, wär es PERFEKT. So nur LALA. ;-)

einen Kommentar schreiben
Typo3