Bonjour à tous,
Je travaille toujours sur mon application (pour votre plus grand malheur) et suis de nouveau confronté à un problème certainement banal.
J'initialise mes routes dans mon boostrap ainsi que ma navigation et mes plugins
Le plugin contient la sélection de la langue à utiliser ainsi que le chargement des traductions
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40 protected function _initNavigation() { $this->bootstrap('layout'); $layout = $this->getResource('layout'); $view = $layout->getView(); $configMenu = new Zend_Config_Xml(APPLICATION_PATH . '/configs/navigation.xml', 'nav'); $containerMenu = new Zend_Navigation($configMenu); if(!$this->_auth->hasIdentity()) {$view->navigation($containerMenu)->setAcl($this->_acl)->setRole('guest');} else $view->navigation($containerMenu)->setAcl($this->_acl)->setRole($this->_auth->getStorage()->read()->role); } protected function _initRoutes() { $router = new Zend_Controller_Router_Rewrite(); $router->addRoute( "basic", new Zend_Controller_Router_Route( "/:lang/:module/:controller/:action/*", array( //"language"=>"fr", "lang"=>"fr", "module"=>"index", "controller"=>"index", "action"=>"index") ) ); $frontController = Zend_Controller_Front::getInstance(); $frontController->throwExceptions(true); $frontController->setRouter($router); } protected function _initPlugins() { $front = Zend_Controller_Front::getInstance(); $front->registerPlugin(new monProjet_LangSelector()); }
Tout ceci fonctionne presque parfaitement. La navigation est traduite, Zend_Registry::set('Zend_Translate', $translate); semble remplir son travail.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 class monProjet_LangSelector extends Zend_Controller_Plugin_Abstract { public function routeShutdown (Zend_Controller_Request_Abstract $request) { $lang = $request->getParam('lang',''); if ($lang !== 'en' && $lang !== 'fr') $request->setParam('lang','en'); $lang = $request->getParam('lang'); $zl = new Zend_Locale(); $zl->setLocale($lang); Zend_Registry::set('Zend_Locale', $zl); $this->_langue=$lang; $translate = new Zend_Translate('csv', APPLICATION_PATH . '/languages/'. $lang . '.csv' , $lang); Zend_Registry::set('Zend_Translate', $translate); Zend_Controller_Front::getInstance()->getRouter()->setGlobalParam('lang', $lang); } }
Cependant, le router lui ne traduit pas les url. D'où peut venir le problème?
La doc de Zend_Router indique bien :
Une petite aide à nouveau s'il vous plaît?Translated segments
The standard route supports translated segments. To use this feature, you have to define at least a translator (an instance of Zend_Translate) via one of the following ways:
*
Put it into the registry with the key Zend_Translate.
*
Set it via the static method Zend_Controller_Router_Route::setDefaultTranslator().
*
Pass it as fourth parameter to the constructor.
Partager