Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 10-04-2008 15:35:56

lethak
Membre
Lieu: France
Date d'inscription: 05-04-2008
Messages: 168

[1.5.1] [Zend_Locale] multi-lang, mon implémentation

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.

Code:

$T = new Zend_Translate(Zend_Translate::AN_ARRAY, './path/to/languages', Zend_Registry::get('LOCALE'), array('scan'=>Zend_Translate::LOCALE_DIRECTORY));

config.ini

Code:

    [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)

Code:

$Zend_Locale = MySite_Translation::GetSetLocal_bootstrap($CONFIG->LOCALE);
Zend_Registry::set("LOCALE", $Zend_Locale);

library/MySite/Session.php

Code:

<?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

Code:

<?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 smile

Dernière modification par lethak (10-04-2008 15:38:26)


IT Dev @Twitter

Hors ligne

 

#2 10-04-2008 15:59:08

philippe
Administrateur
Lieu: Grenoble
Date d'inscription: 01-03-2007
Messages: 1624

Re: [1.5.1] [Zend_Locale] multi-lang, mon implémentation

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


twitter : @plv ; kitpages.fr : Création de sites internet à Grenoble et Paris

Hors ligne

 

#3 10-04-2008 16:09:40

lethak
Membre
Lieu: France
Date d'inscription: 05-04-2008
Messages: 168

Re: [1.5.1] [Zend_Locale] multi-lang, mon implémentation

Merci du conseil oui smile

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 wink


IT Dev @Twitter

Hors ligne

 

#4 10-04-2008 17:10:32

apsy
Membre
Date d'inscription: 25-06-2007
Messages: 50

Re: [1.5.1] [Zend_Locale] multi-lang, mon implémentation

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

 

#5 10-04-2008 17:30:31

philippe
Administrateur
Lieu: Grenoble
Date d'inscription: 01-03-2007
Messages: 1624

Re: [1.5.1] [Zend_Locale] multi-lang, mon implémentation

J'ai souvent bcp de routages dans une appli, mais ça peut être du genre :


Code:

$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


twitter : @plv ; kitpages.fr : Création de sites internet à Grenoble et Paris

Hors ligne

 

#6 10-04-2008 17:36:39

lethak
Membre
Lieu: France
Date d'inscription: 05-04-2008
Messages: 168

Re: [1.5.1] [Zend_Locale] multi-lang, mon implémentation

intéressant merci !


IT Dev @Twitter

Hors ligne

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

Graphisme réalisé par l'agence Rodolphe Eveilleau
Développement par Kitpages