[HowTo] Weiterer Dropdown Sprachumschalter wurde Beantwortet

Autor Nachricht
Verfasst am: 17.11.2008 [12:16]
einpraegsam.net

[Moderator]
[Themenersteller]
dabei seit: 17.01.2005
Beiträge: 7270

über 5000 Posts
So, vermutlich gibt es so etwas schon in der einen oder anderen Art - aber vielleicht kann es ja trotzdem jemand brauchen:

Beispiel:
http://www.conject.com/en/diverse-daten/test/languageswitcher.html

Typoscript:
Typoscript:Zeilennummerierung:  An / Aus

  1. includeLibs.user_langswitch = fileadmin/user_langswitch.php
  2.  
  3. temp.languageswitcher = COA
  4. temp.languageswitcher {
  5.         10 = USER_INT
  6.         10.userFunc = user_langswitch->start
  7.         10.userFunc.lang = en,de,es,pt,ru,me
  8.         10.userFunc.label = en:English (Americas/Europe),me:English (Middle East/Asia-Pac),de:Deutsch (German), ru:Russian (Russian), es:, pt:,
  9. }
  10.  
  11. page.10.marks.languageswitcher < temp.languageswitcher


userFunc:
Php:Zeilennummerierung:  An / Aus

  1. <?php
  2.  
  3.         class user_langswitch {
  4.                
  5.                 var $debug = 0; // debug output (viewable code)
  6.        
  7.                 // Main function for languageswitcher selectbox
  8.                 function start($content='', $conf=array()) {
  9.                         // config
  10.                         global $TSFE;
  11.             $this->cObj = $TSFE->cObj; // cObject
  12.                         $this->label = array(); $code = $all = ''; // init
  13.                         $this->lang = t3lib_div::trimExplode(',', $conf['userFunc.']['lang'], 1); // array with languages
  14.                         $tmp_label = t3lib_div::trimExplode(',', $conf['userFunc.']['label'], 1); // array with labels
  15.                         foreach ($tmp_label as $key => $value) { // one loop for every label
  16.                                 $tmp_curlabel = t3lib_div::trimExplode(':', $value, 1); // split on :
  17.                                 $this->label[$tmp_curlabel[0]] = $tmp_curlabel[1]; // e.g. "en" => "switch to english"
  18.                         }
  19.                
  20.                         // let's go
  21.                         if (is_array($this->label) && count($this->label) > 0 && is_array($this->lang) && count($this->lang) > 0) { // only if settings available (label and lang keys)
  22.                                 foreach ($this->label as $key => $value) { // one loop for every allowed label
  23.                                         if ($value) {
  24.                                                 $code .= '<option value="' . $this->makeLink($key) . '"' . ($this->lang[$_GET['L']] == $key ? ' selected="selected"' : '') . '>'; // option prefix
  25.                                                 $code .= $value; // value
  26.                                                 $code .= '</option>'; // option postfix
  27.                                         }
  28.                                 }
  29.                                
  30.                                 $all .= $this->debug ? '<textarea cols="50" rows="20">' : '';
  31.                                 $all .= '<form name="language" action="" class="languageselectform">';
  32.                                 $all .= '<select name="select" onchange="goto(this.form)" class="languageselect">';
  33.                                 $all .= $code;
  34.                                 $all .= '</select>';
  35.                                 $all .= '</form>';
  36.                                 $all .= $this->addJS();
  37.                                 $all .= $this->debug ? '</textarea>' : '';
  38.                         }
  39.                        
  40.                         // return
  41.                         return $all;
  42.                 }
  43.                
  44.                
  45.                 // Function makeLink() generate localized link from language key (en, de)
  46.                 function makeLink($key) {
  47.                         $tmp_lang = array_flip($this->lang); // get array like en=>0, de=>1
  48.                         return '/'.$this->cObj->typolink('x', array('returnLast' => 'url', 'parameter' => $GLOBALS['TSFE']->id, 'additionalParams' => '&L='.$tmp_lang[$key])); // return link
  49.                 }
  50.                
  51.                
  52.                 // Add javascript for redirection
  53.                 function addJS() {
  54.                         $js = '<script type="text/javascript">
  55.                                                 function goto(form) {
  56.                                                         var index = form.select.selectedIndex;
  57.                                                         if (form.select.options[index].value != "0") {
  58.                                                                 location = form.select.options[index].value;
  59.                                                         }
  60.                                                 }
  61.                                         </script>
  62.                                 ';
  63.                         return $js;
  64.                 }
  65.        
  66.        
  67.         }
  68.  
  69. ?>


Installation:
- Datei user_langswitch.php in fileadmin anlegen (beispielsweise)
- Per TS Datei einbinden
- Mit userFunc auf Klasse zugreifen und Sprachen und Labels definieren
- Wichtig: Reihenfolge von lang (bei mir &L=0 ist en, &L=1 ist de, etc...)


Grüße, Alex

Powermail :: Einprägsam :: Smokethis :: Mein Profil bei XING :: conject
Verfasst am: 04.05.2009 [13:34]
ristic

dabei seit: 21.02.2008
Beiträge: 79

Exzellent, genau das hab ich gebraucht.icon_biggrin.gifDanke erst mal! Hab es noch etwas erweitert, falls mal eine Sprache gelöscht wurde, funktioniert das Ganze leider nur wenn man im TS bei userFunc.lang etwas trickst. Mit diesen Änderungen im TS und im PHP vor der ersten foreach-Schleife sollte es klappen.

Typoscript:Zeilennummerierung:  An / Aus

  1. temp.languageswitcher = COA
  2. temp.languageswitcher {
  3.         10 = USER_INT
  4.         10.userFunc = user_langswitch->start
  5.         # was hier gesetzt wird wird auch nur angezeigt
  6.           10.userFunc.lang = en,de_DE,fr,es,pl,fr_FR
  7.         # hier werden die richtigen IDs gesetzt, so kann auch nix schief laufen
  8.           10.userFunc.id = 0, 1, 4, 5, 6, 7
  9.         10.userFunc.label = en:International (English),de_DE:Deutschland (Deutsch),fr:International (Français)
  10. }


Das vor die erste foreach-Schleife.
Php:Zeilennummerierung:  An / Aus

  1. // get the ids of the language from the TS and combine it
  2. $this->id = t3lib_div::trimExplode(',', $conf['userFunc.']['id'], 1); // array with ids 
  3. $this->lang = array_combine($this->id, $this->lang);


Danke nochmal an Alex! icon_wink.gifFalls ich dazu komme, werd ich hierzu mal eine Extension erstellen.

Gruß

Daniel
Verfasst am: 09.06.2009 [11:22]
massel

dabei seit: 06.07.2005
Beiträge: 1

Sprachwechsler funktioniert wunderbar, aber nun mault der Validator.
general entity "L" not defined and no default entity


icon_cry.gif

Weiß jemand Rat?

Gruß Massel




 
TYPO3 Version 4.2.8 testen

TYPO3 4.2.8 jetzt testen

Testen Sie die neue TYPO3 Version 4.2.8 kostenlos für einen Monat

Jetzt kostenlos testen

TYPO3 Schulungen

  • Berlin:
    Mit., 29.07.09 - Fre., 31.07.09
  • Espelkamp:
    Mit., 26.08.09 - Fre., 28.08.09
  • Würzburg:
    Mon., 21.09.09 - Mit., 23.09.09
  • Köln:
    Mon., 28.09.09 - Mit., 30.09.09