Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Bonjour à tous,
Je crée un site multilingue, mes url sont de la forme:
www.monsite.com/fr pour le français
www.monsite.com/en pour l'anglais
La langue par défaut de l'utilisateur est déterminée dans mon bootstrap.
Si un internaute tape: www.monsite.com, il doit atterrir soit sur www.monsite.com/fr soit sur www.monsite.com/en mais je n'arrive pas à faire cette redirection.
Comment faire pour qu'à partir de la langue par exemple fr je redirige correctement:
www.monsite.com vers www.monsite.com/fr
Merci.
La partie du bootstrap concernant les URL:
$frontController->setControllerDirectory('./application/controllers'); $router = $frontController->getRouter(); $router->addRoute( "default", new Zend_Controller_Router_Route( "/:language/:action/*", array( "language" => "fr", "controller" => "index", "action" => "index" ) ) ); $frontController->setRouter($router);
Dernière modification par Gg (26-07-2010 20:53:38)
Hors ligne
Il ne faudrait pas mettre de valeur par défaut dans la langue, et à la limite dans un plugin sur le routeShutdown, si tu n'as pas de paramètre de langue initialisé, tu fais une redirection.
Hors ligne
Ok j'ai créé un plugin url_language.php:
<?php require_once 'Zend/Controller/Plugin/Abstract.php'; class url_language extends Zend_Controller_Plugin_Abstract { public function routeShutdown(Zend_Controller_Request_Abstract $request) { //Détermination de la langue de l'utilisateur et routage if ($this->getRequest()->getParam('language')!=null){ $language = $this->getRequest()->getParam('language'); } else { $language = $this->getLanguage(); $this->_response->setRedirect('http://localhost/dossier/'.substr($language,0,2), $code=301); //$this->_response->setRedirect('http://localhost/dossier/fr', $code=301); } //Chargement des fichiers de traduction selon le langage: $translator = new Zend_Translate('csv', './application/translation/'.$language.'/translate_'.$language.'.csv', $language, array('delimiter' => ';')); Zend_Registry::set('translator', $translator); Zend_Registry::set('locale', $language); } /** * Fonction de détermination de la langue utilisateur */ public function getLanguage() { try{ $Zend_Locale = new Zend_Locale(Zend_Locale::BROWSER); $lan = $Zend_Locale->getLanguage(); }catch(Zend_Locale_Exception $e){ $lan = 'fr'; } return $lan; } }
et dans le bootstrap:
require_once('application/plugins/url_language.php'); $frontController->registerPlugin(new url_language());
Merci.
Hors ligne