Typo3 - Mehrsprachige Seiten: Unterschied zwischen den Versionen

Aus Wikizone
Wechseln zu: Navigation, Suche
 
Zeile 73: Zeile 73:
 
  $content = '<span class="language_selector">'.implode("",$flags).'</span>';
 
  $content = '<span class="language_selector">'.implode("",$flags).'</span>';
 
  ?>
 
  ?>
 +
===Rootline einrichten===

Version vom 13. September 2005, 11:29 Uhr

Lösungsansätze

Um Mehrsprachigkeit zu realisieren gibt es zwei Ansätze:

  1. Mehrere Navigationsbäume (für jede Sprache einen). In den Navigationsbäumen müssen die Templates entsprechend Variiert werden.
  2. Mehrsprachigkeit mit den Typo3 Bordmitteln (der moderne Ansatz). Hierbei können im System mehrere Sprachen angelegt werden. Jede Sprache hat nachher in der Seitenansicht eine eigene Spalte. So hat man eine gute Übersicht welche Inhaltselemente bereits übersetzt sind.

Welcher Ansatz ist der Richtige ?

Kommt drauf an. Wer soll damit klar kommen? Wieviele Seiten sind es? Werden alle Seiten übersetzt?

TypoScript Anpassungen

Damit das System merkt in welcher Sprache es sich z.Zt. befindet wird der URL ein Parameter mitgegeben. Allgemein ist der Parameter L vereinbart. Das sollte auch eingehalten werden weil einige Extensions nur mit L als Variable arbeiten.

Damit das ganze funktioniert müssen Anpassungen mit TypoScript gemacht werden.

Am besten ein Zusätzliches Basis Template anlegen. Für eine deutsch-englische Seite kann das Setup z.B. so aussehen:

### Parameter L definieren 0 soll die default Sprache (deutsch) sein ###
config.linkVars = L
config.sys_language_uid = 0
config.language = de
config.locale_all = de_DE

# Testen ob die Englische Seite gewünscht wird. In einem CASE Konstrukt wird dazu geprüft
# ob die globale Variable L=1 ist
[globalVar = GP:L = 1]
   config.sys_language_uid = 1
   config.language = en
   config.locale_all = english
[global]

Erläuterung:

Im ersten Teil wird die globale Variable L definiert und dann Deutsch als default-Sprache festgelegt und mit L=0 gleichgesetzt. Danach wird getestet ob der Parameter L mit dem Wert 1 übergeben wird. Ist das der Fall wird die Systemsprache auf englisch gesetzt. Das führt später auch dazu, daß die Inhalte aus der Englischen Spalte ausgegeben werden.

Jetzt fehlt noch ein Auswahlmenü mit dem sich die Sprache auf der Webseite auswählen läßt.

Sprachauswahlmenü programmieren

In der Subpart definition (workOnSubparts) des Haupttemplates binden wir ein PHP-Skript ein, dass dafür sorgt, daß an der Stelle des Markers (hier LANGUAGE) das Menü eingebunden wird und das bei Klicks auf einen Link immer die richtige Nummer für die Sprache an die URL angehängt wird.

TypoScript:

  #multilanguage-flags
  marks.LANGUAGE=TEXT
  marks.LANGUAGE= 
  marks.LANGUAGE=PHP_SCRIPT
  marks.LANGUAGE.file=fileadmin/scripts/languageMenu_d-e.php

php-Skript:

<?php
/**
* languageMenu_d-e.php basiert auf example_languageMenu.php 
*
* @author	Kasper Skårhøj <kasper@typo3.com>
* @modified by Stephan Schlegel www.geo-bit.de
*/
// First, select all pages_language_overlay records on the current page. Each represents a possibility for a language.
$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"];
}

// Little red arrow, which is inserted to the left of the flag-icon if the 
// TSFE->sys_language_uid equals the language uid (notice that 0=deutsch, 1=englisch  
// is SPECIFIC to this database, because these numbers refer to uid's of the table sys_language)
$pointer = '<img src="fileadmin/scripts/pointer.gif" width="7" height="10" align=middle>';
// Set each icon. If the language is the current, red arrow is printed to the left. 
// If the language is NOT found (represented by a pages_language_overlay record on this page), the icon is dimmed.
$flags = array();
$flags[] = ($GLOBALS["TSFE"]->sys_language_uid==0?$pointer:"").'<a href="index.php?id='.$GLOBALS["TSFE"]->id.'&L=0" target=_top><img src="media/uploads/flag_de.gif" alt="deutsch" width="21" height="13" hspace=5 border="0"></a>';
$flags[] = ($GLOBALS["TSFE"]->sys_language_uid==1?$pointer:"").'<a href="index.php?id='.$GLOBALS["TSFE"]->id.'&L=1" target=_top><img src="media/uploads/flag_uk'.($langArr[1]?"":"_d").'.gif" alt="english" width="21" height="13" hspace=5 border="0"></a>';

// Make the little menu. Notice, the menu does ONLY transfer the page-id and the "L" variable (which is also SPECIFIC for this website because "L" has been used in the extension template used to control the language setup)
$content = ''.implode("",$flags).'';
?>

Rootline einrichten