Sprache per FC-Action ändern

From APF Wiki
Revision as of 21:10, 30 January 2010 by Screeze (talk | contribs) (Die Seite wurde neu angelegt: „'''Wie in einer Frontcontroller-Action die Sprache der Applikation geändert werden kann, zeigt folgendes Beispiel.''' Die Sprache kann nach Einbau folgendes Cod…“)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search

Wie in einer Frontcontroller-Action die Sprache der Applikation geändert werden kann, zeigt folgendes Beispiel.

Die Sprache kann nach Einbau folgendes Codes über den URL-Parameter 'language' festgesetzt werden. Die aktuelle Sprache wird mithilfe des SessionManagers gespeichert, und wird geladen falls kein URL-Parameter gefunden wird. Sollte beides nicht vorhanden sein, wird 'de' als Standartsprache festgelegt.

Hinweis: Beim Festsetzen der Sprache über URL-Parameter sollte geprüft werden, ob die Sprache überhaupt vorhanden ist, andererseits würde es nachfolgend zu fehlern in der Applikation kommen. Die Prüfung könnte z.B. fest im Code oder über Datenbankobjekte erledigt werden. Dies würde den Rahmen dieses HowTo's jedoch sprengen.

Folgende run()-Methode muss in eine konfigurierte FC-Action, welche in der Bootstrap registriert ist, eingebaut, und den eigenen Bedürfnissen angepasst werden:

public function run(){
    import('tools::request','RequestHandler');
    import('core::session','SessionManager');
    
    // load SessionManager
    $sessMgr = new SessionManager('mytools::languagechoose');  // <<< set your favourite namespace here

    // set default language to 'de'
    $lang = 'de';

//<-- try loading language of URL-parameter
    $UrlLang = RequestHandler::getValue('language');
    if($UrlLang !== null) {
        $lang = $UrlLang;
    }
//-->

//<-- Otherwise try loading already chosen language
    else if(($TmpLang = $sessMgr->loadSessionData('language')) !== false){
        $lang = $TmpLang;
    }
//--> 
    
    unset($UrlLang);
    unset($TmpLang);
    
//<-- Save chosen language in session and set it in the application
    $sessMgr->saveSessionData('language', $lang);

    $actions = &$this->__ParentObject->getActions();
    foreach($actions as $hash => $DUMMY) {
         $actions[$hash]->set('Language',$lang);
    }
    $this->__ParentObject->set('Language',$lang);
//-->


}