Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
Ce que je voulais:
http://monsite.com
- langue par défaut, (Auto détection du navigateur web, de l'OS, etc )
http://monsite.com?lang=en
- langue choisie par le visiteur (en), mise en session, donc pas besoin d'utiliser le paramètre 'lang' dans toutes les url
http://monsite.com?lang=fr
- idem
http://monsite.com?lang= OU http://monsite.com?lang=reset
- - langue par défaut, (Auto détection du navigateur web, de l'OS, etc ) + mise en session.
avec les bouts de codes suivant je suis capable d'implémenter ce site multi-langages plutôt facilement.
il me suffit d'appeler Zend_Translate a n'importe quel endoit pour avoir la version locale désirée.
$T = new Zend_Translate(Zend_Translate::AN_ARRAY, './path/to/languages', Zend_Registry::get('LOCALE'), array('scan'=>Zend_Translate::LOCALE_DIRECTORY));
config.ini
[LOCALE] ; Force the use of the default value or not ? [T/F] default.force = false ; Default value to be used if forced default.value = en
www/index.php (bootstrap)
$Zend_Locale = MySite_Translation::GetSetLocal_bootstrap($CONFIG->LOCALE); Zend_Registry::set("LOCALE", $Zend_Locale);
library/MySite/Session.php
<?php class MySite_Session { /** * Vide */ public function __construct() { } static function setLocaleWanted($value=null) { if(is_null($value)) { unset($_SESSION['_LOCALE']); } else { $_SESSION['_LOCALE'] = $value; } } static function getLocaleWanted() { if(self::isSetLocaleWanted()) { return $_SESSION['_LOCALE']; } else { return null; } } static function isSetLocaleWanted() { if(isset($_SESSION['_LOCALE']) && !empty($_SESSION['_LOCALE'])) { return true; } else { return false; } } } ?>
library/MySite/Translation.php
<?php class MySite_Translation { const LANG_PARAMETER = 'lang'; /** * Vide */ public function __construct() { } /** * @param Zend_Config $CONFIG_LOCALE * @return Zend_Locale */ static function GetSetLocal_bootstrap($CONFIG_LOCALE) { if((bool)$CONFIG_LOCALE->default->force) { $LOCALE = new Zend_Locale($CONFIG_LOCALE->default->value); } else { if( isset($_GET[self::LANG_PARAMETER]) ) { MySite_Session::setLocaleWanted(addslashes($_GET[self::LANG_PARAMETER])); if($_GET[self::LANG_PARAMETER] == "" || $_GET[self::LANG_PARAMETER] == "reset" || $_GET[self::LANG_PARAMETER] == null) { MySite_Session::setLocaleWanted(null); } } if(!is_null(MySite_Session::getLocaleWanted())) { $LOCALE = new Zend_Locale(MySite_Session::getLocaleWanted()); } else { $LOCALE = new Zend_Locale(); } } return $LOCALE; } } ?>
voila, j'espère avoir des retours, et / ou pouvoir aider si des gens on passé une aprem a chercher comme moi
Dernière modification par lethak (10-04-2008 15:38:26)
Hors ligne
Bonjour,
Juste un retour plus fonctionnel que technique :
c'est bien de garder la langue dans l'URL : ça permet à un moteur de recherche de parcourir le site dans les deux langues (il faut aussi garder la langue en session, notamment pour le retour à la home).
Dans le cas contraire, ton site ne sera indexé que dans la langue par défaut du moteur de recherche.
Moi j'ai tendance à mettre des urls du genre http://monsite.com/fr/xxxx
A+, Philippe
Hors ligne
Merci du conseil oui
je suis au courant en fait, mais pour le moment je débute plus ou moins avec ZF et donc il me reste a maîtriser les routeurs avant de passer de GET a l'url rewriting
Hors ligne
philippe a écrit:
Bonjour,
Juste un retour plus fonctionnel que technique :
c'est bien de garder la langue dans l'URL : ça permet à un moteur de recherche de parcourir le site dans les deux langues (il faut aussi garder la langue en session, notamment pour le retour à la home).
Dans le cas contraire, ton site ne sera indexé que dans la langue par défaut du moteur de recherche.
Moi j'ai tendance à mettre des urls du genre http://monsite.com/fr/xxxx
A+, Philippe
Comment tu fais pour tes routes ? tu les définis comment ?
Hors ligne
J'ai souvent bcp de routages dans une appli, mais ça peut être du genre :
$router->addRoute( "category", new Zend_Controller_Router_Route( ":language/category/:categoryId/:action", array( "language"=>"en", "controller"=>"catalog", "action"=>"category", "categoryId"=>null) ) );
Avec une URL de la forme : http://monsite.com/fr/category/12/edit
on arrive sur le controller "CatalogController" et l'action "editAction".
ensuite dans ton controlleur, tu peux récupérer la valeur avec $this->_getParam("language");
A+, Philippe
Hors ligne
Pages: 1