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 = enwww/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