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