Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
Bonjour,
j'essaie de mettre en place la gestion de plusieurs langues via Zend_Translate, Zend_Locale, Zend_Registry ...
Le problème est que le changement de langue est bien effectué une première fois (de francais à anglais) mais ensuite, en naviguant sur le site, on retourne à la langue par défaut (le francais). L'url, par contre, reste avec la bonne langue : index/index/lang/en
Dans mon bootstrap, j'ai :
public static function setTranslate() { $translate = new Zend_Translate('Array', self::$root . '/application/languages/french.php', 'fr'); $translate->addTranslation(self::$root . '/application/languages/english.php', 'en'); $locale = new Zend_Locale(); if (Zend_Registry::isRegistered('Zend_Locale')){ $locale = Zend_Registry::get('Zend_Locale'); } $translate->setLocale($locale); Zend_Registry::set('Zend_Translate', $translate); Zend_Validate_Abstract::setDefaultTranslator($translate); Zend_Form::setDefaultTranslator($translate); }
Dans le controller par défaut :
public function languageAction() { $this->view->title = "Action"; $request = $this->getRequest(); $params = $request->getParams(); $locale = $params['lang']; $translate = Zend_Registry::get('Zend_Translate'); $translate->setLocale($locale); Zend_Registry::set('Zend_Translate', $translate); Zend_Registry::set('Zend_Locale', $locale); }
Dans mon layout :
<a href="<?php echo $this->url(array('controller'=>'index', 'action'=>'language', 'lang' => 'fr'));?>">Francais</a> <a href="<?php echo $this->url(array('controller'=>'index', 'action'=>'language', 'lang' => 'en'));?>">Anglais</a>
Hors ligne
Dans la méthode init de mon controlleur par défaut, j'effectue également le bout de code présent dans l'action languageAction (il faudra le factoriser plus tard en utilisant une aide d'action (enfin je crois ... pas encore familier avec les termes ...))
public function init() { $request = $this->getRequest(); $params = $request->getParams(); $locale = $params['lang']; $translate = Zend_Registry::get('Zend_Translate'); $translate->setLocale($locale); Zend_Registry::set('Zend_Translate', $translate); Zend_Registry::set('Zend_Locale', $locale); }
Ca marche maintenant !! La langue est bien gérée pour toutes les requêtes suivantes.
Il me reste plus qu'à faire en sorte d'être redirigé sur la page précédente.
Mais est ce que c'est la bonne manière de faire ou il y avait plus simple ?
Hors ligne
Pages: 1