typo3 und die Mehrsprachigkeit | Mehrsprachig 10

Version 1.0 vom 02.10.2003
Version 1.1 vom 08.12.2003 (Erweiterungen und Ergänzungen)
Version 1.2 vom 05.05.2006 (Korrekturen Kontaktadresse)
Version 1.3 vom 25.03.2010 (Bugfixing php script)


Inhalt

  1. Einleitung
  2. Das Sprachkonzept in typo3
  3. Schritt 1: Die Defaultsprache (Standard Sprache)
  4. Schritt 2: Neue Sprache in typo3 konfigurieren
  5. Schritt 3: Inhalte übersetzen – neue Seite erstellen
  6. Schritt 4: Inhalte übersezten – neue Inhalte erstellen
  7. Schritt 5: Die Sprache auf der Website auswählen
  8. Schlusswort
  9. Weiterführende Links

1. Einleitung

Hier mein Beitrag zum Thema “Mehrsprachige Websites mit typo3”. Die Gründe warum ich mir die Mühe mache sind folgende. Ich habe noch kein vollständiges deutsches Tutorial gefunden, welches auch für Anfänger geeignet ist. Als Anfäger hatte ich zuerst zu prüfen, ob typo3 soweit Mehrsprachenfähig ist wie wir es uns vorgestellt hatten. Aber das Problem ist: Die Mehrsprachenfähigkeit von typo3 ist da – es brauch jedoch schon gewisses Vorwissen um es zu aktivieren!

Deshalb versuche ich in meinem Tutorial wirklich alles (jeden einzelnen Schritt) so zu erklären, dass auch noch Anfänger damit zurecht kommen und einen ersten Einblick in die Tiefen von typo3 bekommen können. Leider gibt es sehr viele Abängigkeiten, angefangen vom verwendeten Installations-Packet, so dass es doch sein kann dass noch Fragen offen bleiben – was ich aber wirklich vermeiden möchte. Mein Tutorial setzt auf der Grundkonfiguration vom Quickstart-Packet auf.

Das Tutorial richtet sich an all die, welche mit den Konzepten und Gebräuchlichkeiten mit typo3 noch nicht so vertraut sind und deshalb Schritt für Schritt ins Thema eingeführt werden müssen. Ich selbst bin noch blutiger Anfänger mit typo3 und hoffe keine Fehlinformationen in diesem Tutorial zu verbreiten, falls doch wäre ich um Hinweise sehr dankbar. Soweit kann ich Dir als Leser aber versichern; alle Schritte habe ich selbst bei mir mit Erfolg durchgeführt :-)

Das Tutorial setzt eine Installation von Quickstart voraus, die Beispiele beziehen sich auf die Website “FC Bigfeet”. Ich habe in den Bezeichnungen und den Screenshots die Englischen Begriffen verwendet. (Entspricht auch der Grundeinstellung nach der Installation von Quickstart).

Als kleines Schmankerl, damit dieses Tutorial doch noch eine richtige Existenzberechtigung hat, habe ich eine eigene Lösung für die Sprachauswahl. Mir gefallen diese Flaggen die standardmässig angezeigt werden überhaupt nicht und präsentiere eine sehr viel elegantere Variante!

2 . Das Sprachkonzept in typo3

typo3 ist Mehsprachenfähig (wer hätte das Gedacht!?) und unterstützt dabei zwei unterschiedliche Konzepte. Das “Two-Tree” Konzept und das “one-tree-fits-all-languages”. Ich möchte nicht weiter auf das Two-Tree Konzept eingehen, da ich es aus praktischer Sicht weniger nützlich finde, es gibt aber sicher Einsatzgebiete dafür. Das Tutorial befasst sich mit dem Konzept “Ein Baum für alle Sprachen” = “one-tree-fits-all-languages”.

In typo3 können nach der Installation von Quickstart sogleich Text- bzw. Inhalts-Datensätze eingegeben werden. Diese Inhalts-Datensätze entsprechen dem Inhalt der auf der Webseite angezeigt wird. Die FC Bigfeet Website hat schon eine Menge dieser Texte. Das klingt trivial und Du denkst Dir jetzt, warum ich das schreibe. Weil Du Dir dabei vermutlich keinen Gedanken daran verschwendet hast zu überlegen, in welcher Sprache diese Text abgespeichert werden. Wir müssen uns auch gar nicht darum kümmern wenn unsere Website nur eine Sprache anbiete. Wir geben unseren Text ein – der kann Deutsch, oder Englisch, oder Italienisch, oder was auch immer sein und er wird angezeigt – fertig.

Ab dem Moment aber wo wir mehrere Sprachen anbieten wollen wird es plötzlich interessant wie die Sprachen nun verwaltet werden. Dann fragen wir uns plötzlich: Welche Sprache ist nun die Sprache die ich in FC Bigfeet als “standard” habe? Es ist die Sprache mit dem Code 0! Zufällig ist es Englisch, aber es hätte auch Deutsch sein können – die Sprache hat aber in jedem Fall den Code 0.

Gerade das obige Thema war mir und mit mir bestimmt unzähligen Anfängern nicht so ganz klar. Da wurde immer von “definiere Deine Standardsprache” geschrieben. Man kann keine Standardsprache definieren, es ist immer die Sprache mit dem Code 0. Es ist immer die Sprache die nach der Installation per Default aktiv ist. Und welche Sprache es effektiv ist, das ist typo3 egal, typo3 gibt dieser Standardsprache einfach den Code 0. Nehmen wir das mal so mit, auch wenn vielleicht noch nicht klar ist warum das so ist.

typo3 hat ein “fall-back” System – wird eine Seite in einer Sprache aufgerufen die nicht vorhanden ist, z.B. weil es für diese Seite auch keine Übersetzung gibt, dann wird die Seite in der Default-Sprache angezeigt.

Ein wesentlicher Punkt im Umgang mit typo3 und der Mehrsprachigkeit ist noch die Tatsache, dass die aktuelle Sprache nicht über die Seitengrenze hinaus gespeichert wird. Das bedeutet folgendes: Die Sprache wird in dem Sinne nicht “umgeschaltet”, sondern jeder Aufruf einer Seite muss einen zusätzlichen Parameter mit dem Sprachcode besitzen. Wird eine Seite ohne diesem Parameter aufgerufen, wird die Seite in der Standardsprache – Code 0 – angezeigt. Wird der Parameter mit dem Code angegeben, dann wird die Seite in der gewünschten Sprache angezeigt. Das mag auf den ersten Blick kein Nachteil sein, spätestens dann aber wenn man sich nicht alle Verlinkungen auf der Website dynamisch durch typo3 erzeugen lässt, sondern auch “harte” Links verwendet oder eigene PHP Skripts einbindet die Links erzeugen, dann merkt man schnell dass es umständlich wird.

Wir machen nun unsere FC Bigfeet Startseite Schritt für Schritt zweisprachig -nämlich zusätzlich in Deutsch!

3. Schritt 1 : Defaultsprache

Unsere Standardsprache in FC Bigfeet ist Englisch – alle Texte sind in englischer Sprache vorhanden. Wir wollen FC Bigfeet zusätzlich noch in Deutsch anbieten und werden hierzu eine zusätzliche Sprache aktivieren, die neben der englischen Standardsprache auch angezeigt werden kann.

In unserem ersten Schritt haben wir also festgestellt, dass unsere Defaultsprache “Englisch” ist. Die Defaultsprache besitzt immer den Code “0”.

4. Schritt 2 : Neue Sprache in typo3 konfigurieren

Wir konfigurieren nun also die zusätzliche Sprache Deutsch in typo3.

Dazu gehen wir im Admin-Bereich von typo3 auf “List” und dann auf den Root-Eintrag “Quick Start” unseres Baumes. Anschliessend machen wir einen neuen Record über “Create new record” am unteren Ende der Seite.

Im Anschliessenden Dialog wählen wir “Website Language” um den neuen Record zu erstellen.

Es öffnet sich uns das Fenster um die Sprache (Sprach-Record) zu konfigurieren. Wir tippen in das Feld Language “Deutsch” hinein uns speichern den Record über das Disketten-Symbol.

Zurück in der Übersicht können wir feststellen, dass unsere neue Sprache angezeigt wird. In meinem Beispiel kann man erkennen, dass ich auch noch die Sprache Französisch/Francaise konfiguriert habe.

5. Schritt 3 : Inhalte übersetzen – neue Seite erstellen

Wir haben also im Schritt 2 die Sprache konfiguriert und können nun daran gehen unsere Startseite vom FC Bigfeet ins Deutsche zu übersetzen. Momentan sind sämtliche Texte in unserer Default-Sprache Englisch.

Wir wählen im Menü “Page” und dann die Startseite “FC Bigfeet”. Es soll die erste Seite sein die wir übersetzen. Der Dialog zeigt uns die Inhalts-Records der Startseite. Noch sind diese Texte in unserer Defaultsprache Englisch, aber nicht mehr lange. Wir wählen in der Auswahlbox unsere Sprache die wir übersetzen wollen.

Im nun folgenden Dialog können wir wider erwarten noch keine Texte übersetzen, sondern wir müssen die Eigenschaften für die Seite erfassen. Warum ist das so? Eigentlich wollten wir doch die Inhalts-Records übersetzen, was hat das mit einer Seite zu tun? Weil uns typo3 die gute Lösung bietet, dass auch die Seiteneigenschaften übersetzt werden können. So können wir im einfachsten Fall der Seite in Deutsch einen anderen Titel geben.

6. Schritt 4 : Inhalte übersetzen – neue Inhalte erstellen

Nach dem Speichern der Seite im Schritt 3 sind wir endlich bei den Inhalts-Records (Textinhalten), die wir nun übersetzen können. Wir sehen, dass neben der Sprache “Default” unsere neue Sprache “Deutsch” angezeigt wird. Das erste Mal wo ich soweit kam war ich doch ein wenig enttäuscht – warum ist die Seite leer, warum gibts keine Inhalts-Records? Tja das ist einfach so und bedeutet, dass wir nun etwas mühselig alle Inhaltsrecords von Grund auf für die neue Sprache neu erstellen müssen. Denn wir wollen exakt dieselben Seiten-Elemente/Texte auf der Deutschen Seite haben, wie wir sie auch auf der Englischen Seite haben. Wir füllen also unsere Seite mit Inhalten im Bereich Deutsch. Es gibt zwar Möglichkeiten die Inhalte vom Default in unserer neue Sprache zu kopieren, aber das soll der Einfachheit halber nun nicht bestandteil dieses Tutorials sein.

7. Schritt 5 : Die Sprache auf der Website auswählen

Wir haben nun typo3 für die neue Sprache konfiguriert. Wir haben die Startseite des FC Bigfeet für Deutsch neu erstellt. Nun möchten wir schliesslich noch die Seiten in der neuen Sprache auch anzeigen können. Dazu machen wir ein kleines Menü, welches auf der Seite angezeigt wir und es dem Besucher ermöglicht in die andere Sprache umzuschalten.

Das Menü für die Sprachauswahl benötigt ein PHP-Script und entsprechende konfigurationen im SETUP des TS-Templates der Seite um dieses PHP-Script aufzurufen und auszuführen. Das Script ist verantwortlich für die Ausgabe des Menüs. Ich selbst mag solche Mischung von Logik und Design überhaupt nicht, aber wir fügen uns und passen das Script so an, dass der gewünschte HTML-Output erzeugt wird.

Mein Menü wie es vom Script unten erzeugt wird ist sehr einfach: Die Homepage wird, wenn sie aufgerufen wird, in der Standardsprache Englisch angezeigt. Mein Menü besteht daher aus einem einzigen, diskreten Link “Deutsch”. Ein klick auf diesen Link schaltet dann die Sprache um. Sinngemäss besteht dann auf der Deutschen Variante das Menü aus dem Link “English”.

Die typo3 Sprachinterna

So nun gehts ans Eingemachte. Nach dem wir nur ein wenig herumklicken konnten, wirds erst richtig lustig.

Wird unsere Homepage FC Bigfeet aufgerufen, dann erscheint die Startseite in der Sprache Englisch. Wir möchten also einen Umschalter einbauen – ein Menü, welches uns ermöglicht die Startseite in der Sprache Deutsch anzuzeigen. Die Umschaltung erfolgt über einen Parameter in der URL. Wir legen Fest, dass der Sprachcode in der Variable “L” mit der URL mittransportiert wird. Ein Seitenaufruf hat in typo3 folgende Syntax: index.php?id=12 Die id entspricht der Seite die aufgerufen werden muss. Nun erweitern wir diese Syntax um unser L. index.php?id=12&L=1 ruft die Seite mit der id 12 in der Sprache 1 auf. Unsere Sprache 1 ist Deutsch. Daselbe geht für L=0, dann wird nämlich die Seite wieder in unserer Standardsprache Englisch angezeigt. Oder wir geben gar keinen “L” Code mit, dann nimmt unsere TS Konfiguration ganz einfach wieder die Standardsprache. Das legen wir einfach so fest und konfigurieren nun unser TS-Template, damit diese Sprachvariable über die Seiten hinweg transportiert wird, respektive dass die Sprachvariable auch gewechselt werden kann.

Die Bestandteile des PHP Scripts

Programmieren wir zuerst unser Menü in PHP. Dieses Skript ist für die Darstellung des “Umschalt-Menü” auf der Webseite verantwortlich.

Vorhandene Sprachen holen: (Bei uns 0=Englisch und 1=Deutsch)

// Für die aktuelle Seite werden alle all pages_language_overlay records geholt. Jeder Record entspricht einer Sprache
$query = “SELECT * FROM pages_language_overlay WHERE pid=”.$GLOBALS[‘TSFE’]->id.$GLOBALS[‘TSFE’]->sys_page->enableFields(‘pages_language_overlay’).” GROUP BY sys_language_uid”;

$res = mysql(TYPO3_db,$query);
$langArr=array();
while($row=mysql_fetch_assoc($res)) {
$langArr[$row[‘sys_language_uid’]]=$row[‘title’];
}

In Abhängigkeit der aktiven Sprache den HTML Code des Sprachmenüs erzeugen. Das PHP Script arbeitet logischerweise auch mit der Variable L, welche den Sprachcode beinhaltet:

$flags = array();
if ($GLOBALS[‘TSFE’]->sys_language_uid==0) {
// Englisch ist aktiv – Deutsch anzeigen
$flags[] = ‘<a href=”index.php?id=’.$GLOBALS[‘TSFE’]->id.’&L=1″ target=_top>English</a>’;
} elseif ($GLOBALS[‘TSFE’]->sys_language_uid==1) {
// Deutsch ist aktiv – Englisch anzeigen
$flags[] = ‘<a href=”index.php?id=’.$GLOBALS[‘TSFE’]->id.’&L=0″ target=_top>Deutsch</a>’;
}

// Macht die Ausgabe. Das Menü transferitert die page-id und die “L” variable zur Sprachsteuerung
$content = implode(“”,$flags);

So das wars, nicht viel zum Glück. Das Skript können wir dorthin speichern wo wir es für richtig halten. Wir werden später im TS-Setup den Pfad angeben müssen. Ich habe ein neues Verzeichnis “scripts” im fileadmin gemacht und dorthinein die Datei hochgeladen/gespeichert.

Hier noch die komplette Datei zum herunterladen (Aktualisiert am 25.03.2010):
sprachmenu_2010-03-25 (enthält sprachmenu.php)

Es gibt auch eine typo3 Originaldatei die findet man hier: quickstart/media/scripts/example_languageMenu.php

Das PHP Script im TS-Template aufrufen

Jetzt werden wir den “Schalter” konfigurieren, so dass typo3 die richtigen Inhalts-Records holen kann. Dazu verwenden wir die neue Variable “L” ein. Diese wird bei der Umschaltung auf eine andere Sprache benützt.

SETUP konfiguration

# SprachVariable L initialisieren
config.linkVars = L

# Standardsprache UID 0 -> Englisch
config.sys_language_uid = 0
config.language = en
config.locale_all = english

# Deutsch, sys_language.uid = 1
[globalVar = GP:L = 1]
config.sys_language_uid = 1
config.language = de
config.locale_all = de_DE
[global]

Die Konfiguration macht die Umschaltung der Sprache. Generell wird angenommen, dass die Seite in der Standardsprache angezeigt werden soll. Dann kommt aber noch eine Entscheidungsabfrage, ob die Variable L=1 sei. Falls dies der Fall ist, werden wir die Sprache wieder umschalten auf Deutsch.

Ich kann bei mir nicht bestätigen – entgegen allen anderen Tutorials – dass meine neue Sprache, hier Deutsch, den Code 3 oder 2 hat. Die Codes werden schön inkrementiert bei der Erstellung einer neuen Sprache. So führt das Hinzufügen der Sprache Deutsch unweigerlich zu der ID / Code 1. Ziemlich eindeutige Sache im Grunde. Die nächste Sprache die ich also neu konfigurieren würde hätte also dann den Code 2.

Man sieht am Tooltipp an, dass Deutsch (leider fehlt der Mauszeiger, aber der zeigt auf das Erkugelsymbol von “Deutsch”) die id=1 bekommen hat. Diese ID entspricht unserem Code. Ich habe noch “Francaise” hinzugefügt, diese Sprache bekam die ID=2.

Es kann daraus gefolgert werden, dass die Sprachbezeichnung im Grunde nur an einer Stelle relevant ist: Im Backend wenn Inhalte für eine Sprache übersetzt werden:

Für das System wichtig ist nur der Code und der wird für jede zusätzliche Sprache einfach hochgezählt. Man kann also nicht sagen, dass der Code 1 immer Deutsch ist, oder Code 3 immer Französisch etc.

Nun müssen wir unser TS-Template auch noch soweit konfigurieren, dass unser Menü-Script aufgerufen wird und damit die HTML-Ausgabe erzeugt. Dazu fügen wir im Setup unseres TS-Template folgende zwei Zeilen hinzu:

SETUP konfiguration:

page.10 = PHP_SCRIPT
page.10.file = fileadmin/scripts/sprachmenu.php

8. Schlusswort

Das war es. Weiter gibt es nichts mehr zu tun. Über die TS-Konfiguration sollte nun also auf jeder Seite das “Sprach-Menü” angezeigt werden, dafür ist unser PHP-Skript zuständig welches wir auf unsere Bedürfnisse angepasst haben.

Feedback über Fehler in meinem Turorial, oder den Nutzen – ist jederzeit willkommen.

9. Weiterführende Links

Originaldoku von typo3

Ergänzende Doku auf T3NET

Originaldatei example_languageMenu.php (woraus ich die sprachmenu.php abgeleitet habe)

10 thoughts on “typo3 und die Mehrsprachigkeit | Mehrsprachig

  1. Reply LordHeruur Mrz 22,2010 19:07

    Habe jetzt dieses Tutorial befolgt (sofern es möglich war, da einiges unvollständig erklärt ist).

    Ich habe die sprachmenu.php an die vorgesehene Stelle kopiert.

    Nächster Schritt: Das PHP-Script im TS-Template aufrufen. Da ich keine Ahnung habe welches TS-Template Sie meinen, habe ich es mit dem MAIN-Template probiert.

    Habe also das:

    # SprachVariable L initialisieren
    config.linkVars = L
    # Standardsprache UID 0 -> Englisch
    config.sys_language_uid = 0
    config.language = en
    config.locale_all = english
    # Deutsch, sys_language.uid = 1
    [globalVar = GP:L = 1]
    config.sys_language_uid = 1
    config.language = de
    config.locale_all = de_DE
    [global]

    und das:

    page.10 = PHP_SCRIPT
    page.10.file = fileadmin/scripts/sprachmenu.php

    in das Setup eingefügt.

    Dann bekomme ich diese schöne Fehlermeldung:

    Parse error: parse error, unexpected T_VARIABLE in /var/www/virtual/tuexenia.de/htdocs/fileadmin/scripts/sprachmenu.php on line 44

  2. Reply TheSimple Mrz 24,2010 15:02

    Ich werde das überprüfen. Schön wäre noch zu wissen, wo Du mit meinem Tutorial angestanden bist.

  3. Reply linsen Mrz 25,2010 14:00

    Hallo LordHeruur,

    nimm den quelltext von der Seite (copy&paste). ändere die komischen anführungszeichen, geh den quellcode genau durch. so hat es bei mir dann auch geklappt.

  4. Reply TheSimple Mrz 25,2010 14:36

    Das Script wurde hier im Text und auch in der Download-Datei geändert. Die doppelten Anführungszeichen wurden durch einfache ersetzt.

  5. Reply Jan Schmidt Aug 11,2010 19:01

    Hallo,

    ich will eine internationale Site anlegen, in der Spanisch, Französisch, Polnisch und Deutsch aufrufbar sind. Wenn ich alles richtig verstehe, reicht das PHP-Script dafür nicht aus.

    Kannst Du mir helfen?

    Danke und Gruß,
    Jan

  6. Reply Jan Schmidt Aug 11,2010 19:07

    Und:

    ich habe Dein Script mal versucht, aber ich darf keine “php”-Endung in einem Ordner “scripts” in “fileadmin” anlegen. Woran liegt das denn wohl?

    Danke und Gruß,

    Jan

  7. Reply fresh Sep 14,2010 9:03

    Da gibt es irgendwo eine Beschränkung von typo. Mach Dich mal schlau, ich weiss es nicht aus dem Kopf.

    Und wg. den anderen Sprachen, da musst Du selbstverständlich das Script noch Anpassen!

  8. Reply Nick Dez 29,2010 18:23

    Ich habe es auch versucht und die Beschränkung keine “php” Endung erlaubt wie folgt in der localconf aufgehoben:

    $TYPO3_CONF_VARS[‘BE’][‘fileExtensions’][‘webspace’][‘allow’] = ‘php’;
    $TYPO3_CONF_VARS[‘BE’][‘fileExtensions’][‘webspace’][‘deny’] = ”;
    $TYPO3_CONF_VARS[‘BE’][‘fileDenyPattern’] = ”;

    Leider wird das Menu bei mir nicht angezeigt. Muss ich es im HTML definieren? Hab das versucht, leider erfolglos. Any help welcomed.

  9. Reply Mumi Okt 5,2011 9:10

    Ist es auch mögliche die mehrsprachigkeit ab einer Unterrubrik zu starten? z.B.:
    – Titel1
    – Titel2
    – sprache1
    – sprache2
    – Titel3

    Besten Dank für ein Feedback

  10. Reply Martin Nov 11,2011 0:48

    Hi,
    danke, echt genial und gut verständlich

    Nur eine Frage hätte ich nun

    Wie kann ich für das frontend ein Dropdownmenü mit meinen beiden Sprachen machen?
    Deutsch, Spanisch

    Ich weiss nicht, wo oder wie ich die beiden sprachen für das Menü hernehmen soll :(

    Bitte um Info :=)

    Danke schön

Leave a Reply

  

  

  

*