Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
Bonjour,
Je voudrais m'essayer aux sites multilingues
J'aimerais avoir une url du type http://www.monsite.com/langue/module/controller/action
J'ai vu un tutoriel qui explique comment gérer le multilingue de cette manière
http://www.m4d3l-network.com/2009/06/29 … rk-projectJ'ai donc fait de même et mis en place les routes ainsi que le plugin qui se charge de charger les traductions en fonction de la langue dans l'url, et s'assure qu'il y a toujours une langue par défaut quand on ne spécifie rien dans l'url (http://www.monsite.com par exemple)
resources.router.routes.defaultmodule.type = Zend_Controller_Router_Route_Module resources.router.routes.defaultmodule.abstract = On resources.router.routes.defaultmodule.defaults.module = "default" resources.router.routes.defaultmodule.defaults.controller = index resources.router.routes.defaultmodule.defaults.action = index resources.router.routes.language.type = Zend_Controller_Router_Route resources.router.routes.language.route = ":language" resources.router.routes.language.reqs.language = '^(fr|es)$' resources.router.routes.language.defaults.language = "fr" resources.router.routes.default.type = Zend_Controller_Router_Route_Chain resources.router.routes.default.chain = "language, defaultmodule"
class App_Controller_Plugin_Multilanguage extends Zend_Controller_Plugin_Abstract { public function routeStartup (Zend_Controller_Request_Abstract $request) { if (substr($request->getRequestUri(), 0, -1) == $request->getBaseUrl()){ $request->setRequestUri($request->getRequestUri()."fr"."/"); $request->setParam("language", "fr"); } } public function routeShutdown (Zend_Controller_Request_Abstract $request) { $language = $request->getParam("language", "fr"); switch ($language) { case 'fr': $locale = new Zend_Locale('fr'); break; case 'es': $locale = new Zend_Locale('es'); break; default : $locale = new Zend_Locale('fr'); break; } $translate = new Zend_Translate('gettext', APPLICATION_PATH . '/languages/' . $locale . '/default.mo', $locale); Zend_Registry::set('Zend_Translate', $translate); Zend_Controller_Router_Route::setDefaultTranslator($translate); } }
D'autre part j'utilise un autre plugin pour pouvoir changer le layout en fonction du module.
class App_Controller_Plugin_ModuleSwitcher extends Zend_Controller_Plugin_Abstract { protected $_view = null; public function routeShutdown(Zend_Controller_Request_Abstract $request) { $moduleName = $request->getModuleName(); Zend_Layout::startMvc(); $layout = Zend_Layout::getMvcInstance(); $layout->setLayoutPath('../application/modules/' . $moduleName . '/layouts')->setLayout($moduleName); $view = new Zend_View(); $viewRenderer = Zend_Controller_Action_HelperBroker::getStaticHelper('viewRenderer'); $viewRenderer->init(); $this->_view = $viewRenderer->view; $this->_view->setEncoding('UTF-8'); $this->_view->doctype('XHTML1_TRANSITIONAL'); $this->_view->headTitle()->setSeparator(' - ')->append('Mon site'); $this->_view->headMeta()->setHttpEquiv('content-type', 'text/html; charset=utf-8') ->setHttpEquiv('lang', 'fr'); return $request; } }
Or j'ai le message d'erreur suivant:
Fatal error: Uncaught exception 'Zend_View_Exception' with message 'script '.phtml' not found in path (..\application\modules\\layouts\;..\application\modules\\layouts\;
autrement dit le nom du module n'a pas été trouvé.
Quand je fais un var_dump de l'objet request, on voit effectivement
que le module, le controlleur et l'action sont nulles, or j'aimerais qu'elles soient respectivement à default, index, index.
Sachant que si je désactive les routes, évidemment les paramètres sont bons mais le résultat n'est pas bon puisque que je n'ai pas un site multilingue
Quelqu'un a t-il une idée du fait que les paramètres sont vides et comment y remédier??
Bonne journée,
Dernière modification par dev-k (11-11-2009 21:10:43)
Hors ligne
C'est bon j'ai trouvé il m'a fallu rajouter
resources.router.routes.language.type = Zend_Controller_Router_Route resources.router.routes.language.route = ":language" resources.router.routes.language.reqs.language = '^(fr|es)$' resources.router.routes.language.defaults.language = "fr" resources.router.routes.language.defaults.module = default resources.router.routes.language.defaults.controller = index resources.router.routes.language.defaults.action = index
A+
Hors ligne
ça marche bien toi ? je suis obligé de mettre $this->url(array(...), 'default') pour que ça marche si je ne met pas défaut il bogue.
Dernière modification par citronbleu-v (18-11-2009 00:49:12)
Hors ligne
Pages: 1