Zend_Translate et Zend_Controller_Router_Route
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
Code:
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());
} |
Le plugin contient la sélection de la langue à utiliser ainsi que le chargement des traductions
Code:
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);
}
} |
Tout ceci fonctionne presque parfaitement. La navigation est traduite, Zend_Registry::set('Zend_Translate', $translate); semble remplir son travail.
Cependant, le router lui ne traduit pas les url. D'où peut venir le problème?
La doc de Zend_Router indique bien :
Citation:
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.
Une petite aide à nouveau s'il vous plaît?