Typo3 - Mehrsprachige Seiten: Unterschied zwischen den Versionen
| (35 dazwischenliegende Versionen von 14 Benutzern werden nicht angezeigt) | |||
| Zeile 1: | Zeile 1: | ||
| + | Siehe auch: | ||
| + | [[Typo3 - Standardeinstellungen]] | ||
| + | [[TYPO3 - Sprachmenü]] | ||
| + | |||
| + | == Quickstart == | ||
| + | === One Tree Multilanguage Basic TS === | ||
| + | Default Sprache wäre hier en (uid = 0) | ||
| + | |||
| + | <pre> | ||
| + | config{ | ||
| + | // more properties for multilanguage pages | ||
| + | linkVars = L(1-10) | ||
| + | uniqueLinkVars = 1 | ||
| + | sys_language_mode = content_fallback | ||
| + | } | ||
| + | |||
| + | // Language Settings for second language | ||
| + | |||
| + | [globalVar = GP:L=1] | ||
| + | config { | ||
| + | language = de | ||
| + | locale_all = de_DE | ||
| + | htmlTag_langKey = de | ||
| + | sys_language_uid = 1 | ||
| + | } | ||
| + | [global] | ||
| + | [globalVar = GP:L=2] | ||
| + | config { | ||
| + | language = es | ||
| + | locale_all = es_ES | ||
| + | htmlTag_langKey = es | ||
| + | sys_language_uid = 2 | ||
| + | } | ||
| + | [global] | ||
| + | [globalVar = GP:L=3] | ||
| + | config { | ||
| + | language = fr | ||
| + | locale_all = fr_FR | ||
| + | htmlTag_langKey = fr | ||
| + | sys_language_uid = 3 | ||
| + | } | ||
| + | [global] | ||
| + | [globalVar = GP:L=4] | ||
| + | config { | ||
| + | language = it | ||
| + | locale_all = it_IT | ||
| + | htmlTag_langKey = it | ||
| + | sys_language_uid = 4 | ||
| + | } | ||
| + | [global] | ||
| + | </pre> | ||
| + | === Sprachmenü Textversion === | ||
| + | <pre> | ||
| + | ######################################## | ||
| + | ### Standard Sprachmenu (TS Version) ### | ||
| + | ######################################## | ||
| + | |||
| + | temp.langTextMenu = COA | ||
| + | temp.langTextMenu{ | ||
| + | 10 = TEXT | ||
| + | 10 { | ||
| + | # Labels | ||
| + | #value = Language: | ||
| + | #lang.de = Sprache: | ||
| + | #lang.fr = Langue: | ||
| + | #wrap = <div id="nav-lang-label">|</div> | ||
| + | } | ||
| + | 20 = HMENU | ||
| + | 20{ | ||
| + | wrap = <div id="nav-lang">|</div> | ||
| + | special = language | ||
| + | # Liste der Sprach IDs (0 = Deutsch, 1 = Englisch, 2 = Franzoesisch) | ||
| + | //special.value = 0,1,2 | ||
| + | special.value = 0,1 | ||
| + | 1 = TMENU | ||
| + | 1{ | ||
| + | wrap = <ul class="nav">|</ul> | ||
| + | NO = 1 | ||
| + | NO { | ||
| + | stdWrap.cObject = TEXT | ||
| + | stdWrap.cObject{ | ||
| + | value = english || deutsch | ||
| + | # oder auf diese Weise: | ||
| + | #lang.de = Englisch || Deutsch || Franzoesich | ||
| + | #lang.fr = ... | ||
| + | } | ||
| + | allWrap = <li class = "no first"> | </li>|*|<li class = "no"> | | </li>|*|<li class = "no last"> | | </li> | ||
| + | } | ||
| + | ACT < .NO | ||
| + | ACT { | ||
| + | doNotLinkIt = 1 | ||
| + | allWrap = <li class = "act first"> | </li>|*|<li class = "act"> | | </li>|*|<li class = "act last"> | | </li> | ||
| + | } | ||
| + | # Zustand NO wenn keine Uebersetzung vorliegt | ||
| + | USERDEF1 < .NO | ||
| + | USERDEF1 { | ||
| + | doNotLinkIt = 1 | ||
| + | allWrap = <li class = "no empty first"> | </li>|*|<li class = "no empty"> | | </li>|*|<li class = "no empty last"> | | </li> | ||
| + | } | ||
| + | # Zustand ACT wenn keine Uebersetzung vorliegt | ||
| + | USERDEF2 < .NO | ||
| + | USERDEF2 { | ||
| + | doNotLinkIt = 1 | ||
| + | allWrap = <li class="act empty first"> | </li>|*|<li class="act empty"> | | </li>|*|<li class="act empty last"> | | </li> | ||
| + | } | ||
| + | } | ||
| + | } | ||
| + | } | ||
| + | |||
| + | </pre> | ||
| + | |||
| + | === Sprachmenü grafische Version === | ||
| + | Möglichkeiten: | ||
| + | |||
| + | 1. obiges Menü anpassen | ||
| + | |||
| + | 2. siehe unten php Version | ||
| + | |||
| + | 3. sr_language_menu Extension | ||
| + | |||
| + | siehe auch [[TYPO3 Sprachmenü mit sr_language_menu]] | ||
| + | |||
| + | ==== Komplettbeispiel grafische Navigation mit php-Skript ==== | ||
| + | '''Flaggen''' | ||
| + | |||
| + | Für die Flaggen nehmen wir im Beispiel eine aktive Version z.B. it.png und eine gedimmte (sw) Version z.B. it_d.png | ||
| + | |||
| + | PHP | ||
| + | <pre> | ||
| + | |||
| + | <?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 | ||
| + | */ | ||
| + | |||
| + | // All available pages_language_overlay records for the current page. | ||
| + | $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"]; | ||
| + | } | ||
| + | |||
| + | // uids of table sys_language in this installation 0=en, 1=de, 2=es, 3=fr, 4=it | ||
| + | |||
| + | $pointer = "";// use that if you want to mark current language | ||
| + | // 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[] = '<li class="first"><a href="index.php?id='.$GLOBALS["TSFE"]->id.'&L=0" target=_top><img src="fileadmin/flags/gb.png" alt="english" title="english"></a></li>'; | ||
| + | $flags[] = '<li><a href="index.php?id='.$GLOBALS["TSFE"]->id.'&L=1" target=_top><img src="fileadmin/flags/de'.($langArr[1]?"":"_d").'.png" alt="deutsch" title="deutsch"></a></li>'; | ||
| + | $flags[] = '<li><a href="index.php?id='.$GLOBALS["TSFE"]->id.'&L=2" target=_top><img src="fileadmin/flags/es'.($langArr[2]?"":"_d").'.png" alt="espagnol" title="espagnol"></a></li>'; | ||
| + | $flags[] = '<li><a href="index.php?id='.$GLOBALS["TSFE"]->id.'&L=3" target=_top><img src="fileadmin/flags/fr'.($langArr[3]?"":"_d").'.png" alt="francais" title="francais"></a></li>'; | ||
| + | $flags[] = '<li class="last"><a href="index.php?id='.$GLOBALS["TSFE"]->id.'&L=4" target=_top><img src="fileadmin/flags/it'.($langArr[4]?"":"_d").'.png" alt="italiano" title="italiano"></a></li>'; | ||
| + | $content = '<ul class="nav" id="nav-lang">'.implode("",$flags).'</ul>'; | ||
| + | ?> | ||
| + | </pre> | ||
| + | |||
| + | TS (für Subpart oder Marker) | ||
| + | <pre> | ||
| + | page.10.subparts{ | ||
| + | NAV_LANG=PHP_SCRIPT | ||
| + | NAV_LANG.file=fileadmin/templates/narda-ida/scripts/multilanguage-en-de-es-f-i.php | ||
| + | } | ||
| + | </pre> | ||
| + | |||
| + | CSS | ||
| + | <pre> | ||
| + | /* Common navigation styles */ | ||
| + | |||
| + | .nav .divider{ | ||
| + | margin: 0 1.5em 0.5em; | ||
| + | } | ||
| + | |||
| + | .nav { | ||
| + | } | ||
| + | |||
| + | .nav li li { | ||
| + | font-size:90%; | ||
| + | padding:0 0 0 1em; | ||
| + | } | ||
| + | |||
| + | .nav li li li { | ||
| + | padding-left:1em; | ||
| + | } | ||
| + | |||
| + | .nav a, .nav a:link, | ||
| + | .nav a:visited { | ||
| + | text-decoration:none !important; | ||
| + | border: none; | ||
| + | padding-left: 50px; | ||
| + | } | ||
| + | |||
| + | #nav-lang .nav a, | ||
| + | #nav-lang .nav a:link, | ||
| + | #nav-lang .nav a:visited { | ||
| + | text-decoration:none !important; | ||
| + | border: none; | ||
| + | padding-left: 0; | ||
| + | } | ||
| + | ul.nav a:hover, ul.nav a:active, | ||
| + | li.act, li.act a, | ||
| + | li.cur, li.cur a { | ||
| + | |||
| + | } | ||
| + | ul.nav { | ||
| + | margin:0; | ||
| + | padding:0; | ||
| + | } | ||
| + | |||
| + | ul.nav li { | ||
| + | list-style:none outside none; | ||
| + | margin:0; | ||
| + | padding:0; | ||
| + | line-height: 23px; | ||
| + | } | ||
| + | /* grafische Sprachnavigation */ | ||
| + | #nav-lang{ | ||
| + | padding-top: 4px; | ||
| + | float: left; | ||
| + | } | ||
| + | #nav-lang a, | ||
| + | #nav-lang a:link, | ||
| + | #nav-lang a:visited, | ||
| + | #nav-lang a:hover, | ||
| + | #nav-lang a:active{ | ||
| + | padding:2px 3px; | ||
| + | } | ||
| + | #nav-lang .first a{ | ||
| + | padding-left: 0; | ||
| + | } | ||
| + | #nav-lang .last a{ | ||
| + | padding-right:0; | ||
| + | } | ||
| + | </pre> | ||
| + | |||
| + | == Einführung == | ||
| + | * HTML-Template: Marker einbinden | ||
| + | * TypoScript: Marker mit Sprachskript füllen (PHP-Objekt) | ||
| + | * Dateien: Notwendige Dateien hochspielen (Skript und Grafiken) | ||
| + | * CSS anpassen damit Flaggen schön aussehen | ||
| + | * Backend: Sprache anlegen (Weltkugel) | ||
| + | * Evt. Spracheinstellungen im TypoScript (das meiste im vorgefertigten Template) | ||
| + | Hinweis: alles im Baukasten (Common - Ordner) ToDo | ||
| + | |||
| + | |||
| + | |||
===2 Konzepte=== | ===2 Konzepte=== | ||
Um Mehrsprachigkeit zu realisieren gibt es zwei Ansätze: | Um Mehrsprachigkeit zu realisieren gibt es zwei Ansätze: | ||
| Zeile 13: | Zeile 263: | ||
Am besten ein Zusätzliches Basis Template anlegen. Für eine deutsch-englische Seite kann das Setup z.B. so aussehen: | Am besten ein Zusätzliches Basis Template anlegen. Für eine deutsch-englische Seite kann das Setup z.B. so aussehen: | ||
| − | + | <pre> | |
| − | + | ### Parameter L definieren 0 soll die default Sprache (deutsch) sein ### | |
| − | + | config.linkVars = L(0-2) | |
| − | + | config.sys_language_uid = 0 | |
| − | + | config.language = de | |
| − | + | config.locale_all = de_DE | |
| + | #config.sys_language_mode = content_fallback;0 //sucht in default Sprache falls nichts vorhanden | ||
| + | #config.sys_language_mode = content_fallback : 1,0 // sucht in lang1 ansonsten in 0 | ||
| + | config.sys_language_mode = strict | ||
| + | config.sys_language_overlay = hideNonTranslated | ||
# Testen ob die Englische Seite gewünscht wird. In einem CASE Konstrukt wird dazu geprüft | # Testen ob die Englische Seite gewünscht wird. In einem CASE Konstrukt wird dazu geprüft | ||
| Zeile 25: | Zeile 279: | ||
config.sys_language_uid = 1 | config.sys_language_uid = 1 | ||
config.language = en | config.language = en | ||
| − | config.locale_all = | + | config.locale_all = en_EN |
[global] | [global] | ||
| + | </pre> | ||
'''Erläuterung:''' | '''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. | 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. | ||
| + | |||
| + | '''Ein weiteres Beispiel:''' | ||
| + | |||
| + | <pre> | ||
| + | config { | ||
| + | linkVars = L | ||
| + | sys_language_uid = 0 | ||
| + | language = de | ||
| + | locale_all = de_DE | ||
| + | htmlTag_langKey = de | ||
| + | sys_language_mode = content_fallback | ||
| + | sys_language_overlay = hideNonTranslated | ||
| + | // der Paramter L soll durchgereicht werden | ||
| + | linkVars := addToList(L) | ||
| + | // der Paramter soll eindeutig sein (kein doppeltes Auftreten in einer URL) | ||
| + | uniqueLinkVars = 1 | ||
| + | // content fallback | ||
| + | sys_language_fallBackOrder = 1,0 | ||
| + | sys_language_mode = content_fallback ; 1,0 | ||
| + | sys_language_overlay = 1 | ||
| + | sys_language_content = 1 | ||
| + | } | ||
| + | |||
| + | // English | ||
| + | [globalVar = GP:L = 1] | ||
| + | config { | ||
| + | sys_language_uid = 1 | ||
| + | language = en | ||
| + | locale_all = en_EN | ||
| + | htmlTag_langKey = en | ||
| + | } | ||
| + | [global] | ||
| + | |||
| + | // Spanish | ||
| + | [globalVar = GP:L=2] | ||
| + | config { | ||
| + | language = es | ||
| + | locale_all = es_ES | ||
| + | htmlTag_langKey = es | ||
| + | sys_language_uid = 2 | ||
| + | } | ||
| + | [global] | ||
| + | |||
| + | // french | ||
| + | [globalVar = GP:L=3] | ||
| + | config { | ||
| + | language = fr | ||
| + | locale_all = fr_FR | ||
| + | htmlTag_langKey = fr | ||
| + | sys_language_uid = 3 | ||
| + | } | ||
| + | [global] | ||
| + | // italian | ||
| + | [globalVar = GP:L=4] | ||
| + | config { | ||
| + | language = it | ||
| + | locale_all = it_IT | ||
| + | htmlTag_langKey = it | ||
| + | sys_language_uid = 4 | ||
| + | } | ||
| + | [global] | ||
| + | // Türkisch | ||
| + | [globalVar = GP:L=5] | ||
| + | config { | ||
| + | language = tr | ||
| + | locale_all = tr_TR | ||
| + | htmlTag_langKey = tr | ||
| + | sys_language_uid = 5 | ||
| + | } | ||
| + | [global] | ||
| + | // Chinesisch 6 | ||
| + | [globalVar = GP:L=6] | ||
| + | config { | ||
| + | language = zh | ||
| + | locale_all = zh_CN | ||
| + | htmlTag_langKey = zh | ||
| + | sys_language_uid = 6 | ||
| + | } | ||
| + | [global] | ||
| + | </pre> | ||
Jetzt fehlt noch ein Auswahlmenü mit dem sich die Sprache auf der Webseite auswählen läßt. | Jetzt fehlt noch ein Auswahlmenü mit dem sich die Sprache auf der Webseite auswählen läßt. | ||
| + | |||
| + | Hinweis für die Kürzel gelten die Locale Abkürzungen von PHP (eigentlich wäre hier ein Bindestrich statt eines Underscore, aber php behandelt das tolerant), bzw. der Language Code und die LCID (language code id). | ||
| + | |||
| + | http://en.wikipedia.org/wiki/Locale | ||
| + | http://unicode.org/repos/cldr-tmp/trunk/charts/supplemental/language_territory_information.html | ||
| + | http://www.science.co.il/language/Locale-Codes.asp#definitions | ||
===Sprachauswahlmenü programmieren=== | ===Sprachauswahlmenü programmieren=== | ||
| Zeile 156: | Zeile 497: | ||
[global] | [global] | ||
</pre> | </pre> | ||
| + | === Schritt für Schritt Anleitung === | ||
| + | * Mindestens eine weitere Sprache anlegen (Listenansicht - Weltkugel) | ||
| + | * TypoScript Sprachvariable und Template anpassen: | ||
| + | * Benötigte Skripte und Bilder(Flaggen) Uploaden<br>z.B. mulitlan_d-e.php, flag_uk.gif... | ||
| + | * Marker im TypoScript Template anlegen:z.B. | ||
| + | <pre> | ||
| + | ### Multilanguage-Navi ### | ||
| + | marks.LANGUAGE=PHP_SCRIPT | ||
| + | marks.LANGUAGE.file=fileadmin/scripts/languageMenu_e-d.php | ||
| + | </pre> | ||
| + | * Marker im HTML-Template einbauen. Am besten in divs damit man es per CSS gestalten kann | ||
| + | <div id="languageSelector">###LANGUAGE###</div> | ||
=== Probleme bei mehrsprachigen Seiten === | === Probleme bei mehrsprachigen Seiten === | ||
| Zeile 161: | Zeile 514: | ||
[[Typo3 - Probleme mit mehrsprachigen Seiten lösen]] | [[Typo3 - Probleme mit mehrsprachigen Seiten lösen]] | ||
| + | |||
| + | === Skriptsammlung === | ||
| + | ==== php-Sprachskript ==== | ||
| + | <pre> | ||
| + | <?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>'; | ||
| + | $pointer = ""; | ||
| + | // 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[] = '<li><a href="index.php?id='.$GLOBALS["TSFE"]->id.'&L=0" target=_top><span class="flag"><img src="fileadmin/template/images/flag_de.gif" alt="deutsch" title="deutsch" border="0"></span></a></li>'; | ||
| + | $flags[] = '<li><a href="index.php?id='.$GLOBALS["TSFE"]->id.'&L=1" target=_top><span class="flag"><img src="fileadmin/template/images/flag_uk'.($langArr[1]?"":"_d").'.gif" alt="english" title="english" border="0"><span></a></li>'; | ||
| + | |||
| + | // 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 = '<ul>'.implode("",$flags).'</ul>'; | ||
| + | ?> | ||
| + | </pre> | ||
| + | |||
| + | |||
| + | ==== TypoScript multilanguage Extension ==== | ||
| + | ext_multilang_d-e.tmpl | ||
| + | |||
| + | Setup: | ||
| + | <pre> | ||
| + | ### Spracheinstellungen ### | ||
| + | config.linkVars = L | ||
| + | config.sys_language_mode = content_fallback;0 | ||
| + | |||
| + | ### ohne Sprachauswahl ### | ||
| + | |||
| + | # Standardsprache deutsch wird festgelegt | ||
| + | config.sys_language_uid = 0 | ||
| + | config.language = de | ||
| + | config.locale_all = de_DE | ||
| + | |||
| + | # CSS | ||
| + | page.stylesheet = fileadmin/template/css/main.css | ||
| + | |||
| + | ### DEUTSCH ### | ||
| + | [globalVar = GP:L = 0] | ||
| + | config.sys_language_uid = 0 | ||
| + | config.language = de | ||
| + | config.locale_all = de_DE | ||
| + | |||
| + | # CSS | ||
| + | #page.stylesheet = fileadmin/template/main.css | ||
| + | |||
| + | # Link to top | ||
| + | #content.linkToTop > | ||
| + | tt_content.stdWrap.innerWrap2 = |<br><div class="toTop"><a href="#top">nach oben</a></div> | ||
| + | [global] | ||
| + | |||
| + | ### ENGLISCH ### | ||
| + | [globalVar = GP:L = 1] | ||
| + | config.sys_language_uid = 1 | ||
| + | config.language = en | ||
| + | config.locale_all = english | ||
| + | |||
| + | # CSS | ||
| + | #page.stylesheet = fileadmin/template/main_en.css | ||
| + | |||
| + | # Link to top | ||
| + | #content.linkToTop > | ||
| + | tt_content.stdWrap.innerWrap2 = <br><div class="toTop"><a href="#top">to top</a></div> | ||
| + | |||
| + | #... | ||
| + | |||
| + | [global] | ||
| + | </pre> | ||
| + | |||
| + | === Übersetzung nur Anzeigen wenn sie vorhanden ist === | ||
| + | Typo3 - Stuttgart Mailing List (Juli 2006) | ||
| + | |||
| + | <pre> | ||
| + | > >Hallo ihr alle, | ||
| + | > > | ||
| + | > >ich habe eine typo3 3.7.1 installation und möchte eine übersetzung nur dann anzeigen, wenn diese vorhanden ist. | ||
| + | > >Wenn sie nicht vorhanden ist soll der gesamte menüpunkt rausfliegen. | ||
| + | > > | ||
| + | > >Der untenstehende code sollte funktionieren - tut es aber nicht... | ||
| + | > >Weis da jemand bescheid? | ||
| + | > >...meine langwierige recherchen haben leider auch nichts ergeben ;-(( | ||
| + | > > | ||
| + | > >config.linkVars = L | ||
| + | > >config.sys_language_uid = 0 | ||
| + | > >config.language = de | ||
| + | > >config.sys_language_mode = strict | ||
| + | > >config.sys_language_overlay = hideNonTranslated | ||
| + | > > | ||
| + | > >lg niko | ||
| + | > > | ||
| + | > > | ||
| + | </pre> | ||
| + | |||
| + | |||
| + | Hallo Niko, | ||
| + | |||
| + | vielleicht hilft dir dies weiter: | ||
| + | |||
| + | http://www.datenwolken.de/index.php?id=221 | ||
| + | |||
| + | und ein Beispiel hier | ||
| + | |||
| + | http://forum.typo3.fr/index.php?showtopic=4236 | ||
| + | |||
| + | <pre> | ||
| + | // User defined | ||
| + | USERDEF1 = 1 | ||
| + | USERDEF1.doNotLinkIt = 1 | ||
| + | USERDEF1.linkWrap = <li class="disabled">|</li> | ||
| + | USERDEF1.stdWrap.override = EN || FR || DE | ||
| + | } | ||
| + | </pre> | ||
| + | |||
| + | li.disabled dann im stylesheet ausblenden ... | ||
| + | |||
| + | Grüße | ||
| + | Ines | ||
| + | |||
| + | _______________________________________________ | ||
| + | TYPO3-stuttgart mailing list | ||
| + | TYPO3-stuttgart@lists.netfielders.de | ||
| + | http://lists.netfielders.de/cgi-bin/mailman/listinfo/typo3-stuttgart | ||
| + | |||
| + | == Datum und Zeit == | ||
| + | Oft ist es schwierig herauszufinden wo gerade die Ausgabe von Zeit und Datum konfiguriert wird. | ||
| + | |||
| + | Wenn eine der Extensions ts_language_de oder ts_language_xx installiert ist wird dort der Standard einer andeen Extension (z.B. tt_news) überschrieben. Diese Einstellung kann wieder im eigenen TS überschrieben werden. | ||
| + | |||
| + | Im Template Analyser kann man die Reihenfolge gut sehen. | ||
| + | |||
| + | Beispiel zur Konfiguration: | ||
| + | |||
| + | '''Examples:''' | ||
| + | Your site is a "one-language-site" and you configured the site-language as default language of TYPO3. If you have a ts_language_xx extension installed, to set some country specific settings for other extensions, I suggest to copy the part which refers to tt_news in your main template or an ext template which is included. Here an example for german settings: | ||
| + | |||
| + | <pre> | ||
| + | # set the TYPO3 language to german | ||
| + | config.language = de | ||
| + | # set the PHP locale to german | ||
| + | config.locale_all = de_DE | ||
| + | |||
| + | # tt_news date & time formats | ||
| + | plugin.tt_news { | ||
| + | archiveTitleCObject { | ||
| + | 10.strftime = %B - %Y | ||
| + | } | ||
| + | getRelatedCObject { | ||
| + | 20.strftime = %d.%m.%Y %H:%M | ||
| + | } | ||
| + | displaySingle { | ||
| + | date_stdWrap.strftime= %d.%m.%y | ||
| + | time_stdWrap.strftime= %H:%M | ||
| + | } | ||
| + | displayLatest { | ||
| + | date_stdWrap.strftime= %d.%m.%y | ||
| + | time_stdWrap.strftime= %H:%M | ||
| + | } | ||
| + | displayList { | ||
| + | date_stdWrap.strftime= %A %d. %B %Y | ||
| + | time_stdWrap.strftime= %d.%m.%y %H:%M | ||
| + | } | ||
| + | } | ||
| + | </pre> | ||
| + | |||
| + | Hint: If the locale_all setting "de_DE" don't work on your WAMP installation, try to set it to "german". There are some differences in the handling of the php-locale on windows and linux. | ||
| + | |||
| + | If your site is a multilanguage site like the "one-tree-fits-all-languages" example from the "testsite" package (see: http://typo3.org/documentation/tips-tricks/multi-language-sites-in-typo3/ ) you can add the country specific settings to the language condition in your TS-setup: | ||
| + | |||
| + | <pre> | ||
| + | # Setting up the language variable "L" to be passed along with links | ||
| + | config.linkVars = L | ||
| + | |||
| + | # German language, sys_language.uid = 2 | ||
| + | [globalVar = GP:L = 2] | ||
| + | config.sys_language_uid = 2 | ||
| + | config.language = de | ||
| + | config.locale_all = de_DE | ||
| + | |||
| + | # set german date & time formats | ||
| + | plugin.tt_news { | ||
| + | archiveTitleCObject { | ||
| + | 10.strftime = %B - %Y | ||
| + | } | ||
| + | getRelatedCObject { | ||
| + | 20.strftime = %d.%m.%Y %H:%M | ||
| + | } | ||
| + | displaySingle { | ||
| + | date_stdWrap.strftime= %d.%m.%y | ||
| + | time_stdWrap.strftime= %H:%M | ||
| + | age_stdWrap.age = Minuten | Stunden | Tage | Jahre | ||
| + | } | ||
| + | displayLatest { | ||
| + | date_stdWrap.strftime= %d.%m.%y | ||
| + | time_stdWrap.strftime= %H:%M | ||
| + | } | ||
| + | displayList { | ||
| + | date_stdWrap.strftime= %A %d. %B %Y | ||
| + | time_stdWrap.strftime= %d.%m.%y %H:%M | ||
| + | } | ||
| + | } | ||
| + | [global] | ||
| + | |||
| + | # Danish language, sys_language.uid = 1 | ||
| + | [globalVar = GP:L = 1] | ||
| + | config.sys_language_uid = 1 | ||
| + | config.language = dk | ||
| + | config.locale_all = danish | ||
| + | |||
| + | # set danish date & time formats | ||
| + | plugin.tt_news { | ||
| + | # sorry, don't know the danish date & time settings ;-) | ||
| + | } | ||
| + | [global] | ||
| + | </pre> | ||
| + | |||
| + | |||
| + | == Felder im Backend für mehrere Sprachen benutzen == | ||
| + | |||
| + | michael schuhmacher wrote: | ||
| + | > Hallo, | ||
| + | > weiss jemand wie ich es anstelle, dass bei einer eigenen extension, im backend bestimmte felder grundsaetzlich fuer alle sprachen stehen sollen? so dass man nicht zb. die selben bilder in den uebersetzungen nochmal angeben muss. | ||
| + | |||
| + | habs schon | ||
| + | |||
| + | in meinem fall in ext_tables.php (oder auch in tca.php) | ||
| + | |||
| + | "l10n_mode" => 'exclude', | ||
| + | |||
| + | == Sprachlabel für die Frontendausgabe anpassen == | ||
| + | Stichwort Language Label, Sprachlabel, Mehrsprachigkeit | ||
| + | Bei Mehrsprachigen Extensions werden die Ausgaben für die verschiedenen Sprachen in der Regel in der Datei locallang.xml notiert. Oftmals möchte man diese Ausgaben anpassen, ohne diese Datei zu verändern. Denn nach einem Update würden die Änderungen wieder Rückgängig gemacht. Die Labels für die Sprache lassen sich aber auch über eigene Extensions oder über TypoScript anpassen. | ||
| + | |||
| + | Mit TypoScript funktioniert das etwa so: | ||
| + | |||
| + | plugin.tt_news._LOCAL_LANG.de.more = mehr >> | ||
| + | also nach dem Schema: | ||
| + | plugin.meinPlugin._LOCAL_LANG.sprachkürzel.labelnahme = meinLabel | ||
| + | |||
| + | == Sprachlabel im Backend anpassen == | ||
| + | Quelle: http://typo3-freelancer-berlin.de/typo3-blog/artikel/typo3-backendformulare-label-aendern-per-typoscript.html (Zugriff: 09/2011) | ||
| + | |||
| + | Oftmals möchten Kunden die Bezeichnung einzelner Felder im backend anders benannt haben. | ||
| + | |||
| + | pageTSconfig | ||
| + | |||
| + | // Label in eigener locallang_db.php überschreiben | ||
| + | TCEFORM.table.column.label = LLL:typo3conf/override_locallang_db.php:table.column | ||
| + | |||
| + | // Label direkt in pageTSconfig überschreiben | ||
| + | |||
| + | TCEFORM.table.column.label = My Title | ||
| + | TCEFORM.table.column.label.de = Mein Titel | ||
| + | |||
| + | == Weiterleitung in Abhängigkeit der Browsersprache == | ||
| + | Damit der Benutzer gleich auf der richtigen Sprache landet kann man die Extension | ||
| + | rlmp_language_detection benutzen. | ||
| + | |||
| + | Als Erweiterung gibt es noch die Extension Title Language Detection - Extended( sr_language_detect ) von Stanislas Rolland | ||
| + | === Konfiguration für One-Tree Konzept === | ||
| + | <pre> | ||
| + | plugin.tx_rlmplanguagedetection_pi1 { | ||
| + | defaultLang = de #ISO-Code der Standardsprache anpasssen | ||
| + | } | ||
| + | </pre> | ||
| + | |||
| + | === Konfiguration für Multi-Tree Konzept === | ||
| + | <pre> | ||
| + | |||
| + | plugin.tx_rlmplanguagedetection_pi1 { | ||
| + | useOneTreeMethod = 0 | ||
| + | multipleTreesRootPages | ||
| + | { | ||
| + | #PID's der jeweiligen Sprachen anpassen, ggf. neue zufuegen | ||
| + | de = 216 | ||
| + | en = 120 | ||
| + | es = 482 | ||
| + | } | ||
| + | } | ||
| + | === Problem mit Browserseitigem Cache bei Einsatz von rlmplanguagedetection === | ||
| + | Um die richtigen Werte für das Caching auszugeben muß in der Konfiguration stehen: | ||
| + | |||
| + | Typoscript: Zeilennummerierung: An / Aus | ||
| + | |||
| + | 1. | ||
| + | config.sendCacheHeaders = 1 | ||
| + | |||
| + | |||
| + | |||
| + | Diese Funktion bleibt aber unter anderem auf den Seiten wirkungslos, in denen USER_INT Objekte genutzt werden. | ||
| + | |||
| + | Mit der Extention 'rlmplanguagedetection' steckt dieses Object in jedem Seiten-Rendering. Das USER_INT Object braucht es aber für die Funktion der Extension. | ||
| + | |||
| + | Da die Extension keine neuen Header mit 'Location' und dem GetParameter ausgibt, wenn dieser Parameter bereits in der URL vorhanden ist, braucht es diese USER_INT funktion folglich auch nicht bei jedem Seitenaufruf. Um sie denn in diesem Falle aus den Seiten-Rendering auch auszuschließen habe ich mich für folgendes Konzept entschieden, in dem via TypoScript die Extension einfach ausgeschlossen wird, wenn der GetParameter bereits existiert: | ||
| + | |||
| + | Typoscript: Zeilennummerierung: An / Aus | ||
| + | |||
| + | 1. | ||
| + | # send Cache Headers | ||
| + | 2. | ||
| + | config.sendCacheHeaders = 1 | ||
| + | 3. | ||
| + | # disable USER_INT 'rlmplanguagedetection' when GP:L exists | ||
| + | 4. | ||
| + | [globalVar=GP:L=0,GP:L>0] | ||
| + | 5. | ||
| + | plugin.tx_rlmplanguagedetection_pi1 > | ||
| + | 6. | ||
| + | [global] | ||
| + | |||
| + | |||
| + | Das funktioniert, und damit lässt sich die Extension auch wieder für Proxy- oder Clientseitiges Cachen nutzen.[/TS] | ||
| + | 3. Testen (Browsersprache ändern. Anleitung unten.) | ||
| + | 4. Falls es Probleme gibt und die Spracherkennung / -weiterleitung nicht funktioniert, kann folgendes im Setup des Root Templates hinzufügt werden. Hier wird die Erweiterung im Page-Element an Position 1000 inkludiert. Diese Einstellung muss ggf. angepasst werden. | ||
| + | |||
| + | page.1000 < plugin.tx_rlmplanguagedetection_pi1 | ||
| + | |||
| + | Tipps zum Testen | ||
| + | |||
| + | Wie stellt man die Sprache des Browsers um? Das Umstellen der Browsersprache: | ||
| + | |||
| + | Firefox | ||
| + | |||
| + | * Extras > Einstellungen > Reiter Erweitert > Reiter Allgemein (Windowsversion) oder | ||
| + | Bearbeiten > Einstellungen > Reiter Erweitert > Reiter Allgemein (Linuxversion) | ||
| + | * im Unteren Bereich befindet sich der Abschnitt Sprache, in dem man über den Button "wählen" ein oder mehrere neue Sprachen hinzufügen kann. Die Sprache in der getestet wird steht immer oben. | ||
| + | |||
| + | Internet Explorer IE | ||
| + | |||
| + | * Extras > Internetoptionen | ||
| + | * im Unteren Bereich befindet sich der Button Sprache, mit dem man ein oder mehrere neue Sprachen hinzufügen kann. Die Sprache in der getestet wird steht immer oben. | ||
| + | |||
| + | Wenn es nicht funktioniert | ||
| + | |||
| + | Wenn es nicht funktioniert hat man eventuell die Sprachen nicht richtig eingerichtet. Hier sollte man noch mal die Konfiguration überprüfen. | ||
| + | Anleitung von rainer-grundel Datum des Zugriffs 1.4.2008, http://www.rainer-grundel.de/wissensdb/typo3/empfohlene_extensions/artikel/article/anzeige_der_website_nach_browsersprache.html</pre> | ||
| + | |||
| + | == Mehrsprachigkeit und TemplaVoila == | ||
| + | Wenn man eine mehrsprachige Seite mit TemplaVoila nutzt. Kann man das Verhalten in der Datenstruktur der TemplaVoila Templates steuern. | ||
| + | |||
| + | TemplaVoila nutzt zur Darstellung seiner Inhalte Flexforms. Die dazugehörigen Parameter für die Darstellung der Mehrsprachigen Datensätze im Backend steuert man daher mit der Flexform T3DataStructure. Konkret sind hier folgende XML-Tags von Bedeutung: | ||
| + | <pre> | ||
| + | <meta type="array"> | ||
| + | <langDisable type="integer">[0|1]</langDisable> | ||
| + | <langChildren type="integer">[0|1]</langChildren> | ||
| + | </meta> | ||
| + | </pre> | ||
| + | Wie gezeigt können diese also entweder den Wert 0 oder 1 enthalten | ||
| + | ===langDisable=== | ||
| + | '''0''' Sprachsteuerung durch das Flexform, technisch gesehen bedeutet das, daß die Übersetzungen im Flexform-Datensatz gespeichert werden. Siehe auch langChildren | ||
| + | |||
| + | '''1''' Die Sprachsteuerung durch das Flexform ist abgeschaltet. D.h. Typo3 übernimmt das selbst. Dies ist die geeignete Einstellung für Flexible Content Elemente die zur Gliederung (z.B. 2Spalter) genutzt werden. | ||
| + | |||
| + | ===langChildren=== | ||
| + | Hat nur Auswirkung wenn langDisable auf 0 steht. | ||
| + | |||
| + | '''1''' Die Inhalte der Flexforms lassen sich Direkt übersetzen (Flagge klicken) und werden zusammengezoge im Backend dargestellt. | ||
| + | Im Frontend wird die Standardsprache verwendet wenn keine Übersetzung vorhanden ist. | ||
| + | |||
| + | '''0''' Keine Direkte übersetzung. Das komplette Flexform wird übersetzt. | ||
| + | |||
| + | |||
| + | |||
| + | |||
| + | == Seiten ohne Übersetzung im Menü verstecken == | ||
| + | Quelle:http://blog.undkonsorten.com/typo3-seite-uebersetzung-menue-verstecken | ||
| + | |||
| + | Datum des Zugriffs: 29.4.2009 | ||
| + | |||
| + | 16. Januar 2008 | ||
| + | |||
| + | Für mehrsprachige TYPO3-Webseiten im One-Tree-Konzept werden standardgemäß die immer alle Menüeintäge in der Standardsprache ausgegeben, insofern für diese keine Übersetzung angelegt wurde. In der Regel ist eine Navigation in zwei verschiedenen Sprachen nicht erwünscht und man möchte Seiten ohne Übersetzungen verstecken. Es gibt zwei Wege, dies umzusetzen. | ||
| + | |||
| + | '''Lösung über das TYPO3-Backend''' | ||
| + | |||
| + | Am einfachsten lässen sich Seiten ohne Übersetzungen ausblenden, indem man unter Seiteneigenschaften > Spracheinstellungen das Verstecke Seiten wenn keine Übersetzung… mit einem kleinen Häckchen versieht. | ||
| + | |||
| + | TYPO3: Sprache verstecken, wenn keine Übersetzung existiert | ||
| + | |||
| + | Wenn für diese Seite - angenommen sie sei deutsche - keine Übersetzung angelegt wurde, man sich aber z.B. gerade im Frontend im englischen Bereich befindet, so wird diese Seite nicht angezeigt. | ||
| + | |||
| + | '''Lösung per Installtool bzw. localconf.php''' | ||
| + | |||
| + | Im Install-Tool > All Configuration gibt es den Eintrag [hidePagesIfNotTranslatedByDefault] . Wenn man hier den Wert TRUE einträgt werden alle Seiten ohne Übersetzung per default versteckt. Dies entspricht folgendem Eintrag in der localconf: | ||
| + | |||
| + | $TYPO3_CONF_VARS['FE']['hidePagesIfNotTranslatedByDefault'] = ‘TRUE’; | ||
| + | |||
| + | '''Standard-Übersetzung im Menü einblenden per TypoScript''' | ||
| + | |||
| + | Man kann per TypoScript-Setup umgekehrt für die Menükonfiguration angeben, dass Seiten generell in der default-Sprache ausgegeben werden, insofern keine Übersetzung vorliegt. Das sieht dann so aus: | ||
| + | |||
| + | temp.navigation = HMENU | ||
| + | temp.navigation { | ||
| + | … | ||
| + | protectLvar = all | ||
| + | … | ||
| + | } | ||
| + | |||
| + | protectLvar kennt die Werte 1 und all. Mit all wird der Wert des Kontrollkästchens überschrieben und Seiten ohne Übersetzungen werden immer ausgegegen. | ||
Aktuelle Version vom 24. Juni 2019, 13:25 Uhr
Siehe auch:
Typo3 - Standardeinstellungen TYPO3 - Sprachmenü
Quickstart[Bearbeiten]
One Tree Multilanguage Basic TS[Bearbeiten]
Default Sprache wäre hier en (uid = 0)
config{
// more properties for multilanguage pages
linkVars = L(1-10)
uniqueLinkVars = 1
sys_language_mode = content_fallback
}
// Language Settings for second language
[globalVar = GP:L=1]
config {
language = de
locale_all = de_DE
htmlTag_langKey = de
sys_language_uid = 1
}
[global]
[globalVar = GP:L=2]
config {
language = es
locale_all = es_ES
htmlTag_langKey = es
sys_language_uid = 2
}
[global]
[globalVar = GP:L=3]
config {
language = fr
locale_all = fr_FR
htmlTag_langKey = fr
sys_language_uid = 3
}
[global]
[globalVar = GP:L=4]
config {
language = it
locale_all = it_IT
htmlTag_langKey = it
sys_language_uid = 4
}
[global]
Sprachmenü Textversion[Bearbeiten]
########################################
### Standard Sprachmenu (TS Version) ###
########################################
temp.langTextMenu = COA
temp.langTextMenu{
10 = TEXT
10 {
# Labels
#value = Language:
#lang.de = Sprache:
#lang.fr = Langue:
#wrap = <div id="nav-lang-label">|</div>
}
20 = HMENU
20{
wrap = <div id="nav-lang">|</div>
special = language
# Liste der Sprach IDs (0 = Deutsch, 1 = Englisch, 2 = Franzoesisch)
//special.value = 0,1,2
special.value = 0,1
1 = TMENU
1{
wrap = <ul class="nav">|</ul>
NO = 1
NO {
stdWrap.cObject = TEXT
stdWrap.cObject{
value = english || deutsch
# oder auf diese Weise:
#lang.de = Englisch || Deutsch || Franzoesich
#lang.fr = ...
}
allWrap = <li class = "no first"> | </li>|*|<li class = "no"> | | </li>|*|<li class = "no last"> | | </li>
}
ACT < .NO
ACT {
doNotLinkIt = 1
allWrap = <li class = "act first"> | </li>|*|<li class = "act"> | | </li>|*|<li class = "act last"> | | </li>
}
# Zustand NO wenn keine Uebersetzung vorliegt
USERDEF1 < .NO
USERDEF1 {
doNotLinkIt = 1
allWrap = <li class = "no empty first"> | </li>|*|<li class = "no empty"> | | </li>|*|<li class = "no empty last"> | | </li>
}
# Zustand ACT wenn keine Uebersetzung vorliegt
USERDEF2 < .NO
USERDEF2 {
doNotLinkIt = 1
allWrap = <li class="act empty first"> | </li>|*|<li class="act empty"> | | </li>|*|<li class="act empty last"> | | </li>
}
}
}
}
Sprachmenü grafische Version[Bearbeiten]
Möglichkeiten:
1. obiges Menü anpassen
2. siehe unten php Version
3. sr_language_menu Extension
siehe auch TYPO3 Sprachmenü mit sr_language_menu
[Bearbeiten]
Flaggen
Für die Flaggen nehmen wir im Beispiel eine aktive Version z.B. it.png und eine gedimmte (sw) Version z.B. it_d.png
PHP
<?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
*/
// All available pages_language_overlay records for the current page.
$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"];
}
// uids of table sys_language in this installation 0=en, 1=de, 2=es, 3=fr, 4=it
$pointer = "";// use that if you want to mark current language
// 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[] = '<li class="first"><a href="index.php?id='.$GLOBALS["TSFE"]->id.'&L=0" target=_top><img src="fileadmin/flags/gb.png" alt="english" title="english"></a></li>';
$flags[] = '<li><a href="index.php?id='.$GLOBALS["TSFE"]->id.'&L=1" target=_top><img src="fileadmin/flags/de'.($langArr[1]?"":"_d").'.png" alt="deutsch" title="deutsch"></a></li>';
$flags[] = '<li><a href="index.php?id='.$GLOBALS["TSFE"]->id.'&L=2" target=_top><img src="fileadmin/flags/es'.($langArr[2]?"":"_d").'.png" alt="espagnol" title="espagnol"></a></li>';
$flags[] = '<li><a href="index.php?id='.$GLOBALS["TSFE"]->id.'&L=3" target=_top><img src="fileadmin/flags/fr'.($langArr[3]?"":"_d").'.png" alt="francais" title="francais"></a></li>';
$flags[] = '<li class="last"><a href="index.php?id='.$GLOBALS["TSFE"]->id.'&L=4" target=_top><img src="fileadmin/flags/it'.($langArr[4]?"":"_d").'.png" alt="italiano" title="italiano"></a></li>';
$content = '<ul class="nav" id="nav-lang">'.implode("",$flags).'</ul>';
?>
TS (für Subpart oder Marker)
page.10.subparts{
NAV_LANG=PHP_SCRIPT
NAV_LANG.file=fileadmin/templates/narda-ida/scripts/multilanguage-en-de-es-f-i.php
}
CSS
/* Common navigation styles */
.nav .divider{
margin: 0 1.5em 0.5em;
}
.nav {
}
.nav li li {
font-size:90%;
padding:0 0 0 1em;
}
.nav li li li {
padding-left:1em;
}
.nav a, .nav a:link,
.nav a:visited {
text-decoration:none !important;
border: none;
padding-left: 50px;
}
#nav-lang .nav a,
#nav-lang .nav a:link,
#nav-lang .nav a:visited {
text-decoration:none !important;
border: none;
padding-left: 0;
}
ul.nav a:hover, ul.nav a:active,
li.act, li.act a,
li.cur, li.cur a {
}
ul.nav {
margin:0;
padding:0;
}
ul.nav li {
list-style:none outside none;
margin:0;
padding:0;
line-height: 23px;
}
/* grafische Sprachnavigation */
#nav-lang{
padding-top: 4px;
float: left;
}
#nav-lang a,
#nav-lang a:link,
#nav-lang a:visited,
#nav-lang a:hover,
#nav-lang a:active{
padding:2px 3px;
}
#nav-lang .first a{
padding-left: 0;
}
#nav-lang .last a{
padding-right:0;
}
Einführung[Bearbeiten]
- HTML-Template: Marker einbinden
- TypoScript: Marker mit Sprachskript füllen (PHP-Objekt)
- Dateien: Notwendige Dateien hochspielen (Skript und Grafiken)
- CSS anpassen damit Flaggen schön aussehen
- Backend: Sprache anlegen (Weltkugel)
- Evt. Spracheinstellungen im TypoScript (das meiste im vorgefertigten Template)
Hinweis: alles im Baukasten (Common - Ordner) ToDo
2 Konzepte[Bearbeiten]
Um Mehrsprachigkeit zu realisieren gibt es zwei Ansätze:
- Multitree - Mehrere Navigationsbäume (für jede Sprache einen). In den Navigationsbäumen müssen die Templates entsprechend Variiert werden.
- One Tree Fits All - 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 ?[Bearbeiten]
Kommt drauf an. Wer soll damit klar kommen? Wieviele Seiten sind es? Werden alle Seiten übersetzt?
TypoScript Anpassungen[Bearbeiten]
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(0-2)
config.sys_language_uid = 0
config.language = de
config.locale_all = de_DE
#config.sys_language_mode = content_fallback;0 //sucht in default Sprache falls nichts vorhanden
#config.sys_language_mode = content_fallback : 1,0 // sucht in lang1 ansonsten in 0
config.sys_language_mode = strict
config.sys_language_overlay = hideNonTranslated
# 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 = en_EN
[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.
Ein weiteres Beispiel:
config {
linkVars = L
sys_language_uid = 0
language = de
locale_all = de_DE
htmlTag_langKey = de
sys_language_mode = content_fallback
sys_language_overlay = hideNonTranslated
// der Paramter L soll durchgereicht werden
linkVars := addToList(L)
// der Paramter soll eindeutig sein (kein doppeltes Auftreten in einer URL)
uniqueLinkVars = 1
// content fallback
sys_language_fallBackOrder = 1,0
sys_language_mode = content_fallback ; 1,0
sys_language_overlay = 1
sys_language_content = 1
}
// English
[globalVar = GP:L = 1]
config {
sys_language_uid = 1
language = en
locale_all = en_EN
htmlTag_langKey = en
}
[global]
// Spanish
[globalVar = GP:L=2]
config {
language = es
locale_all = es_ES
htmlTag_langKey = es
sys_language_uid = 2
}
[global]
// french
[globalVar = GP:L=3]
config {
language = fr
locale_all = fr_FR
htmlTag_langKey = fr
sys_language_uid = 3
}
[global]
// italian
[globalVar = GP:L=4]
config {
language = it
locale_all = it_IT
htmlTag_langKey = it
sys_language_uid = 4
}
[global]
// Türkisch
[globalVar = GP:L=5]
config {
language = tr
locale_all = tr_TR
htmlTag_langKey = tr
sys_language_uid = 5
}
[global]
// Chinesisch 6
[globalVar = GP:L=6]
config {
language = zh
locale_all = zh_CN
htmlTag_langKey = zh
sys_language_uid = 6
}
[global]
Jetzt fehlt noch ein Auswahlmenü mit dem sich die Sprache auf der Webseite auswählen läßt.
Hinweis für die Kürzel gelten die Locale Abkürzungen von PHP (eigentlich wäre hier ein Bindestrich statt eines Underscore, aber php behandelt das tolerant), bzw. der Language Code und die LCID (language code id).
http://en.wikipedia.org/wiki/Locale http://unicode.org/repos/cldr-tmp/trunk/charts/supplemental/language_territory_information.html http://www.science.co.il/language/Locale-Codes.asp#definitions
Sprachauswahlmenü programmieren[Bearbeiten]
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 für mehrere Sprachen einrichten[Bearbeiten]
temp.rootline = HMENU
temp.rootline.special = rootline
temp.rootline.special.range = 0|-1
temp.rootline.wrap = Sie sind hier:
temp.rootline.1 = TMENU
temp.rootline.1 {
target = _top
NO.linkWrap = || /
}
# evt. bestimte Seiten ausblenden...
temp.rootline.excludeUidList =
# Sprache mit der ID 3
[globalVar = GP:L = 3]
temp.rootline.wrap = You are here:
[global]
# Sprache mit der ID 4
[globalVar = GP:L = 4]
temp.rootline.wrap = bla bla:
[global]
# Sprache mit der ID X (X = beliebige zahl)
[globalVar = GP:L = X]
temp.rootline.wrap = hierher haben sie sich verirrt:
[global]
Ein Beispiel für ein vollständiges (zweisprachiges) TypoScript[Bearbeiten]
### Spracheinstellungen ###
config.linkVars = L
config.sys_language_mode = content_fallback;0
[globalVar = GP:L = 0]
config.sys_language_uid = 0
config.language = de
config.locale_all = de_DE
# Link to top
#content.linkToTop >
tt_content.stdWrap.innerWrap2 = |<br><div align="right"><A href="#top"><font color="#AB3C4B" face="Arial, Helvetica, sans-serif" size="1"><B>nach oben</b></font></a></div>
#Suchfunktion
tt_content.search{
20.layout.10.value = Suchergebnis: ###RANGELOW###-###RANGEHIGH### von ###TOTAL###
20.noResultObj.10.value = Keine Treffer.
20.next.value=nächste
20.prev.value=vorherige
30.dataArray.10.label = Suche nach:
30.dataArray.20.label = Suche in:
30.dataArray.20.valueArray.10.label = Überschriften und Schlüsselworten
30.dataArray.20.valueArray.20.label = Seiteninhalten
30.dataArray.40.value = Suche starten
}
[global]
# English language, sys_language.uid = 1
[globalVar = GP:L = 1]
config.sys_language_uid = 1
config.language = en
config.locale_all = english
# Link to top
#content.linkToTop >
tt_content.stdWrap.innerWrap2 = <br><div align="right"><A href="#top"><font color="#AB3C4B" face="Arial, Helvetica, sans-serif" size="1"><B>to top</b></font></a></div>
#Suchfunktion - englisch
tt_content.search{
20.layout.10.value = Suchergebnis: ###RANGELOW###-###RANGEHIGH### von ###TOTAL###
20.noResultObj.10.value = No hits.
20.next.value=next
20.prev.value=previous
30.dataArray.10.label = Searchwords:
30.dataArray.20.label = Search in:
30.dataArray.20.valueArray.10.label = Headlines & Keywords
30.dataArray.20.valueArray.20.label = Content
30.dataArray.40.value = Start search
}
[global]
Schritt für Schritt Anleitung[Bearbeiten]
- Mindestens eine weitere Sprache anlegen (Listenansicht - Weltkugel)
- TypoScript Sprachvariable und Template anpassen:
- Benötigte Skripte und Bilder(Flaggen) Uploaden
z.B. mulitlan_d-e.php, flag_uk.gif... - Marker im TypoScript Template anlegen:z.B.
### Multilanguage-Navi ### marks.LANGUAGE=PHP_SCRIPT marks.LANGUAGE.file=fileadmin/scripts/languageMenu_e-d.php
- Marker im HTML-Template einbauen. Am besten in divs damit man es per CSS gestalten kann
Probleme bei mehrsprachigen Seiten[Bearbeiten]
Lösungen bei verschiedenen Problemen mit mehrsprachigen Seiten gibt es hier:
Typo3 - Probleme mit mehrsprachigen Seiten lösen
Skriptsammlung[Bearbeiten]
php-Sprachskript[Bearbeiten]
<?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>';
$pointer = "";
// 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[] = '<li><a href="index.php?id='.$GLOBALS["TSFE"]->id.'&L=0" target=_top><span class="flag"><img src="fileadmin/template/images/flag_de.gif" alt="deutsch" title="deutsch" border="0"></span></a></li>';
$flags[] = '<li><a href="index.php?id='.$GLOBALS["TSFE"]->id.'&L=1" target=_top><span class="flag"><img src="fileadmin/template/images/flag_uk'.($langArr[1]?"":"_d").'.gif" alt="english" title="english" border="0"><span></a></li>';
// 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 = '<ul>'.implode("",$flags).'</ul>';
?>
TypoScript multilanguage Extension[Bearbeiten]
ext_multilang_d-e.tmpl
Setup:
### Spracheinstellungen ### config.linkVars = L config.sys_language_mode = content_fallback;0 ### ohne Sprachauswahl ### # Standardsprache deutsch wird festgelegt config.sys_language_uid = 0 config.language = de config.locale_all = de_DE # CSS page.stylesheet = fileadmin/template/css/main.css ### DEUTSCH ### [globalVar = GP:L = 0] config.sys_language_uid = 0 config.language = de config.locale_all = de_DE # CSS #page.stylesheet = fileadmin/template/main.css # Link to top #content.linkToTop > tt_content.stdWrap.innerWrap2 = |<br><div class="toTop"><a href="#top">nach oben</a></div> [global] ### ENGLISCH ### [globalVar = GP:L = 1] config.sys_language_uid = 1 config.language = en config.locale_all = english # CSS #page.stylesheet = fileadmin/template/main_en.css # Link to top #content.linkToTop > tt_content.stdWrap.innerWrap2 = <br><div class="toTop"><a href="#top">to top</a></div> #... [global]
Übersetzung nur Anzeigen wenn sie vorhanden ist[Bearbeiten]
Typo3 - Stuttgart Mailing List (Juli 2006)
> >Hallo ihr alle, > > > >ich habe eine typo3 3.7.1 installation und möchte eine übersetzung nur dann anzeigen, wenn diese vorhanden ist. > >Wenn sie nicht vorhanden ist soll der gesamte menüpunkt rausfliegen. > > > >Der untenstehende code sollte funktionieren - tut es aber nicht... > >Weis da jemand bescheid? > >...meine langwierige recherchen haben leider auch nichts ergeben ;-(( > > > >config.linkVars = L > >config.sys_language_uid = 0 > >config.language = de > >config.sys_language_mode = strict > >config.sys_language_overlay = hideNonTranslated > > > >lg niko > > > >
Hallo Niko,
vielleicht hilft dir dies weiter:
http://www.datenwolken.de/index.php?id=221
und ein Beispiel hier
http://forum.typo3.fr/index.php?showtopic=4236
// User defined USERDEF1 = 1 USERDEF1.doNotLinkIt = 1 USERDEF1.linkWrap = <li class="disabled">|</li> USERDEF1.stdWrap.override = EN || FR || DE }
li.disabled dann im stylesheet ausblenden ...
Grüße Ines
_______________________________________________ TYPO3-stuttgart mailing list TYPO3-stuttgart@lists.netfielders.de http://lists.netfielders.de/cgi-bin/mailman/listinfo/typo3-stuttgart
Datum und Zeit[Bearbeiten]
Oft ist es schwierig herauszufinden wo gerade die Ausgabe von Zeit und Datum konfiguriert wird.
Wenn eine der Extensions ts_language_de oder ts_language_xx installiert ist wird dort der Standard einer andeen Extension (z.B. tt_news) überschrieben. Diese Einstellung kann wieder im eigenen TS überschrieben werden.
Im Template Analyser kann man die Reihenfolge gut sehen.
Beispiel zur Konfiguration:
Examples: Your site is a "one-language-site" and you configured the site-language as default language of TYPO3. If you have a ts_language_xx extension installed, to set some country specific settings for other extensions, I suggest to copy the part which refers to tt_news in your main template or an ext template which is included. Here an example for german settings:
# set the TYPO3 language to german
config.language = de
# set the PHP locale to german
config.locale_all = de_DE
# tt_news date & time formats
plugin.tt_news {
archiveTitleCObject {
10.strftime = %B - %Y
}
getRelatedCObject {
20.strftime = %d.%m.%Y %H:%M
}
displaySingle {
date_stdWrap.strftime= %d.%m.%y
time_stdWrap.strftime= %H:%M
}
displayLatest {
date_stdWrap.strftime= %d.%m.%y
time_stdWrap.strftime= %H:%M
}
displayList {
date_stdWrap.strftime= %A %d. %B %Y
time_stdWrap.strftime= %d.%m.%y %H:%M
}
}
Hint: If the locale_all setting "de_DE" don't work on your WAMP installation, try to set it to "german". There are some differences in the handling of the php-locale on windows and linux.
If your site is a multilanguage site like the "one-tree-fits-all-languages" example from the "testsite" package (see: http://typo3.org/documentation/tips-tricks/multi-language-sites-in-typo3/ ) you can add the country specific settings to the language condition in your TS-setup:
# Setting up the language variable "L" to be passed along with links
config.linkVars = L
# German language, sys_language.uid = 2
[globalVar = GP:L = 2]
config.sys_language_uid = 2
config.language = de
config.locale_all = de_DE
# set german date & time formats
plugin.tt_news {
archiveTitleCObject {
10.strftime = %B - %Y
}
getRelatedCObject {
20.strftime = %d.%m.%Y %H:%M
}
displaySingle {
date_stdWrap.strftime= %d.%m.%y
time_stdWrap.strftime= %H:%M
age_stdWrap.age = Minuten | Stunden | Tage | Jahre
}
displayLatest {
date_stdWrap.strftime= %d.%m.%y
time_stdWrap.strftime= %H:%M
}
displayList {
date_stdWrap.strftime= %A %d. %B %Y
time_stdWrap.strftime= %d.%m.%y %H:%M
}
}
[global]
# Danish language, sys_language.uid = 1
[globalVar = GP:L = 1]
config.sys_language_uid = 1
config.language = dk
config.locale_all = danish
# set danish date & time formats
plugin.tt_news {
# sorry, don't know the danish date & time settings ;-)
}
[global]
Felder im Backend für mehrere Sprachen benutzen[Bearbeiten]
michael schuhmacher wrote: > Hallo, > weiss jemand wie ich es anstelle, dass bei einer eigenen extension, im backend bestimmte felder grundsaetzlich fuer alle sprachen stehen sollen? so dass man nicht zb. die selben bilder in den uebersetzungen nochmal angeben muss.
habs schon
in meinem fall in ext_tables.php (oder auch in tca.php)
"l10n_mode" => 'exclude',
Sprachlabel für die Frontendausgabe anpassen[Bearbeiten]
Stichwort Language Label, Sprachlabel, Mehrsprachigkeit Bei Mehrsprachigen Extensions werden die Ausgaben für die verschiedenen Sprachen in der Regel in der Datei locallang.xml notiert. Oftmals möchte man diese Ausgaben anpassen, ohne diese Datei zu verändern. Denn nach einem Update würden die Änderungen wieder Rückgängig gemacht. Die Labels für die Sprache lassen sich aber auch über eigene Extensions oder über TypoScript anpassen.
Mit TypoScript funktioniert das etwa so:
plugin.tt_news._LOCAL_LANG.de.more = mehr >>
also nach dem Schema:
plugin.meinPlugin._LOCAL_LANG.sprachkürzel.labelnahme = meinLabel
Sprachlabel im Backend anpassen[Bearbeiten]
Quelle: http://typo3-freelancer-berlin.de/typo3-blog/artikel/typo3-backendformulare-label-aendern-per-typoscript.html (Zugriff: 09/2011)
Oftmals möchten Kunden die Bezeichnung einzelner Felder im backend anders benannt haben.
pageTSconfig
// Label in eigener locallang_db.php überschreiben TCEFORM.table.column.label = LLL:typo3conf/override_locallang_db.php:table.column
// Label direkt in pageTSconfig überschreiben
TCEFORM.table.column.label = My Title TCEFORM.table.column.label.de = Mein Titel
Weiterleitung in Abhängigkeit der Browsersprache[Bearbeiten]
Damit der Benutzer gleich auf der richtigen Sprache landet kann man die Extension rlmp_language_detection benutzen.
Als Erweiterung gibt es noch die Extension Title Language Detection - Extended( sr_language_detect ) von Stanislas Rolland
Konfiguration für One-Tree Konzept[Bearbeiten]
plugin.tx_rlmplanguagedetection_pi1 {
defaultLang = de #ISO-Code der Standardsprache anpasssen
}
Konfiguration für Multi-Tree Konzept[Bearbeiten]
plugin.tx_rlmplanguagedetection_pi1 {
useOneTreeMethod = 0
multipleTreesRootPages
{
#PID's der jeweiligen Sprachen anpassen, ggf. neue zufuegen
de = 216
en = 120
es = 482
}
}
=== Problem mit Browserseitigem Cache bei Einsatz von rlmplanguagedetection ===
Um die richtigen Werte für das Caching auszugeben muß in der Konfiguration stehen:
Typoscript: Zeilennummerierung: An / Aus
1.
config.sendCacheHeaders = 1
Diese Funktion bleibt aber unter anderem auf den Seiten wirkungslos, in denen USER_INT Objekte genutzt werden.
Mit der Extention 'rlmplanguagedetection' steckt dieses Object in jedem Seiten-Rendering. Das USER_INT Object braucht es aber für die Funktion der Extension.
Da die Extension keine neuen Header mit 'Location' und dem GetParameter ausgibt, wenn dieser Parameter bereits in der URL vorhanden ist, braucht es diese USER_INT funktion folglich auch nicht bei jedem Seitenaufruf. Um sie denn in diesem Falle aus den Seiten-Rendering auch auszuschließen habe ich mich für folgendes Konzept entschieden, in dem via TypoScript die Extension einfach ausgeschlossen wird, wenn der GetParameter bereits existiert:
Typoscript: Zeilennummerierung: An / Aus
1.
# send Cache Headers
2.
config.sendCacheHeaders = 1
3.
# disable USER_INT 'rlmplanguagedetection' when GP:L exists
4.
[globalVar=GP:L=0,GP:L>0]
5.
plugin.tx_rlmplanguagedetection_pi1 >
6.
[global]
Das funktioniert, und damit lässt sich die Extension auch wieder für Proxy- oder Clientseitiges Cachen nutzen.[/TS]
3. Testen (Browsersprache ändern. Anleitung unten.)
4. Falls es Probleme gibt und die Spracherkennung / -weiterleitung nicht funktioniert, kann folgendes im Setup des Root Templates hinzufügt werden. Hier wird die Erweiterung im Page-Element an Position 1000 inkludiert. Diese Einstellung muss ggf. angepasst werden.
page.1000 < plugin.tx_rlmplanguagedetection_pi1
Tipps zum Testen
Wie stellt man die Sprache des Browsers um? Das Umstellen der Browsersprache:
Firefox
* Extras > Einstellungen > Reiter Erweitert > Reiter Allgemein (Windowsversion) oder
Bearbeiten > Einstellungen > Reiter Erweitert > Reiter Allgemein (Linuxversion)
* im Unteren Bereich befindet sich der Abschnitt Sprache, in dem man über den Button "wählen" ein oder mehrere neue Sprachen hinzufügen kann. Die Sprache in der getestet wird steht immer oben.
Internet Explorer IE
* Extras > Internetoptionen
* im Unteren Bereich befindet sich der Button Sprache, mit dem man ein oder mehrere neue Sprachen hinzufügen kann. Die Sprache in der getestet wird steht immer oben.
Wenn es nicht funktioniert
Wenn es nicht funktioniert hat man eventuell die Sprachen nicht richtig eingerichtet. Hier sollte man noch mal die Konfiguration überprüfen.
Anleitung von rainer-grundel Datum des Zugriffs 1.4.2008, http://www.rainer-grundel.de/wissensdb/typo3/empfohlene_extensions/artikel/article/anzeige_der_website_nach_browsersprache.html
Mehrsprachigkeit und TemplaVoila[Bearbeiten]
Wenn man eine mehrsprachige Seite mit TemplaVoila nutzt. Kann man das Verhalten in der Datenstruktur der TemplaVoila Templates steuern.
TemplaVoila nutzt zur Darstellung seiner Inhalte Flexforms. Die dazugehörigen Parameter für die Darstellung der Mehrsprachigen Datensätze im Backend steuert man daher mit der Flexform T3DataStructure. Konkret sind hier folgende XML-Tags von Bedeutung:
<meta type="array">
<langDisable type="integer">[0|1]</langDisable>
<langChildren type="integer">[0|1]</langChildren>
</meta>
Wie gezeigt können diese also entweder den Wert 0 oder 1 enthalten
langDisable[Bearbeiten]
0 Sprachsteuerung durch das Flexform, technisch gesehen bedeutet das, daß die Übersetzungen im Flexform-Datensatz gespeichert werden. Siehe auch langChildren
1 Die Sprachsteuerung durch das Flexform ist abgeschaltet. D.h. Typo3 übernimmt das selbst. Dies ist die geeignete Einstellung für Flexible Content Elemente die zur Gliederung (z.B. 2Spalter) genutzt werden.
langChildren[Bearbeiten]
Hat nur Auswirkung wenn langDisable auf 0 steht.
1 Die Inhalte der Flexforms lassen sich Direkt übersetzen (Flagge klicken) und werden zusammengezoge im Backend dargestellt. Im Frontend wird die Standardsprache verwendet wenn keine Übersetzung vorhanden ist.
0 Keine Direkte übersetzung. Das komplette Flexform wird übersetzt.
Seiten ohne Übersetzung im Menü verstecken[Bearbeiten]
Quelle:http://blog.undkonsorten.com/typo3-seite-uebersetzung-menue-verstecken
Datum des Zugriffs: 29.4.2009
16. Januar 2008
Für mehrsprachige TYPO3-Webseiten im One-Tree-Konzept werden standardgemäß die immer alle Menüeintäge in der Standardsprache ausgegeben, insofern für diese keine Übersetzung angelegt wurde. In der Regel ist eine Navigation in zwei verschiedenen Sprachen nicht erwünscht und man möchte Seiten ohne Übersetzungen verstecken. Es gibt zwei Wege, dies umzusetzen.
Lösung über das TYPO3-Backend
Am einfachsten lässen sich Seiten ohne Übersetzungen ausblenden, indem man unter Seiteneigenschaften > Spracheinstellungen das Verstecke Seiten wenn keine Übersetzung… mit einem kleinen Häckchen versieht.
TYPO3: Sprache verstecken, wenn keine Übersetzung existiert
Wenn für diese Seite - angenommen sie sei deutsche - keine Übersetzung angelegt wurde, man sich aber z.B. gerade im Frontend im englischen Bereich befindet, so wird diese Seite nicht angezeigt.
Lösung per Installtool bzw. localconf.php
Im Install-Tool > All Configuration gibt es den Eintrag [hidePagesIfNotTranslatedByDefault] . Wenn man hier den Wert TRUE einträgt werden alle Seiten ohne Übersetzung per default versteckt. Dies entspricht folgendem Eintrag in der localconf:
$TYPO3_CONF_VARS['FE']['hidePagesIfNotTranslatedByDefault'] = ‘TRUE’;
Standard-Übersetzung im Menü einblenden per TypoScript
Man kann per TypoScript-Setup umgekehrt für die Menükonfiguration angeben, dass Seiten generell in der default-Sprache ausgegeben werden, insofern keine Übersetzung vorliegt. Das sieht dann so aus:
temp.navigation = HMENU
temp.navigation {
…
protectLvar = all
…
}
protectLvar kennt die Werte 1 und all. Mit all wird der Wert des Kontrollkästchens überschrieben und Seiten ohne Übersetzungen werden immer ausgegegen.