Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 17-06-2008 20:57:18

acharrex
Membre
Lieu: Suisse
Date d'inscription: 27-04-2008
Messages: 135

[Zend_Translate] Tutoriel sur un site multilingue avec adaptateur TMX

Salut,

Après avoir fais mes premiers pas avec le Zend Framework il y a quelques semaines, je me suis lancé dans l'écriture d'un petit tutoriel sur l'implémentation d'un site multilingue utilisant le Zend_Translate et l'adaptateur TMX.

De plus, ce tutoriel explique également comment utiliser des URL de ce type :
http://localhost/site/fr/default/Contact ou http://localhost/site/en/default/Contact

Voici le lien vers ce tutoriel :
http://www.joecarbure.com/dw2/doku.php? … _framework

Etant donné que je suis encore un novice dans l'utilisation de ce Framework, j'attends avec impatience vos remarques et suggestions wink

Dernière modification par acharrex (17-06-2008 20:57:45)

Hors ligne

 

#2 20-06-2008 12:20:09

Asfaloth
Membre
Lieu: Bruxelles
Date d'inscription: 13-05-2008
Messages: 83
Site web

Re: [Zend_Translate] Tutoriel sur un site multilingue avec adaptateur TMX

Moi je dis: "Super boulot !!" big_smile

Très bien expliquer et très complet, ça fait plaisir.

Malheureusement je bloque tout à la fin, après avoir ajouter le router pour récuperer la variable de langue dans l'url

j'ai donc ceci dans mon bootstrap:

Code:

$controller = Zend_Controller_Front::getInstance();
$controller->setControllerDirectory('../application/default/controllers');
$controller->throwExceptions(true); // should be turned on in development time
$controller->setRouter($router); 

/**
 * Setup Translation
 */
$language = $controller->getRequest()->getParams();
switch ($language){
   case "en":
      $locale = new Zend_Locale("en");
      break;
   case "fr":
      $locale = new Zend_Locale("fr");
      break;
   default:
      $locale = new Zend_Locale("en");
      break;
}

Et j'ai cette vilaine erreur qui m'arrive en pleine face:

Code:

Fatal error: Call to a member function getParams() on a non-object in /home/www/zend-test/public/index.php on line 55

et la lilgne 55 c'est celle-ci:

Code:

$language = $controller->getRequest()->getParams();

Si quelqu'un à une idée du comment du pourquoi, je suis preneur big_smile

Dernière modification par Asfaloth (20-06-2008 12:21:50)


La capacité d'apprendre est un don.
La faculté d'apprendre est un talent.
La volonté d'apprendre est un choix.
-=[ Frank Herbert ]=-

Hors ligne

 

#3 20-06-2008 13:31:02

-=blu3+3y3s=-
Membre
Lieu: Toulouse
Date d'inscription: 01-04-2008
Messages: 47

Re: [Zend_Translate] Tutoriel sur un site multilingue avec adaptateur TMX

Salut,
$controller->getRequest()->getParams() va te renvoyer tous les paramêtres de ta requête (module, contrôleur, action, paramêtres utilisateur, etc...) alors que tu ne souhaites récupérer que le paramêtre de la langue.
Donc, il faut que tu fasses:

Code:

 $language = $controller->getRequest()->getParam('language');

A+

Hors ligne

 

#4 20-06-2008 13:53:37

Asfaloth
Membre
Lieu: Bruxelles
Date d'inscription: 13-05-2008
Messages: 83
Site web

Re: [Zend_Translate] Tutoriel sur un site multilingue avec adaptateur TMX

Salut,

En effet dans le code que j'ai copié ici il ne l'était pas parce que je faisais différent test pour trouver ce qui clochait exactement, mais même en spécifiant le paramètre language, et en ajoutant (ou pas) le paramètre par défaut, je me retrouve avec la même erreur...

c'est réellement le getParam() qui bloque, car si je fait un getRequest uniquement, je n'ai aucun message d'erreur :-/


La capacité d'apprendre est un don.
La faculté d'apprendre est un talent.
La volonté d'apprendre est un choix.
-=[ Frank Herbert ]=-

Hors ligne

 

#5 20-06-2008 14:34:32

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

Re: [Zend_Translate] Tutoriel sur un site multilingue avec adaptateur TMX

Hum... le $controller->getRequest() ne peut a priori pas fonctionner dans le bootstrap. L'objet request n'est créé qu'à partir du dispatch je pense.
Je n'ai pas le temps de tester maintenant, mais ça me paraît bizarre.

Intuitivement j'aurais tendance à déplacer ce traitement dans un plugin.

A+, Philippe


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

Hors ligne

 

#6 20-06-2008 15:49:58

Asfaloth
Membre
Lieu: Bruxelles
Date d'inscription: 13-05-2008
Messages: 83
Site web

Re: [Zend_Translate] Tutoriel sur un site multilingue avec adaptateur TMX

Super, ça marche au poil big_smile

j'aurais du y penser plus tôt, mais j'avoue ne pas encore avoir le réflexe plugin/helper roll

Tant que j'y suis, encore une petite question subsidiaire:

via ce plugin, plutot que de faire un appel au registry translator dans chaque controller, puis-je passer directement la methode dans mes view ?

j'ai essayé ceci (dans mon plugin à la fonction preDispatch()):

Code:

$viewRenderer = Zend_Controller_Action_HelperBroker::getStaticHelper('viewRenderer');
$viewRenderer->view->_translate = $translator;

mais il me retourne cette erreur:

Code:

Strict Standards: Creating default object from empty value in /home/www/zend-test/application/plugins/PluginTranslate.php on line 21

Ce qui est bizarre car j'ai le même code dans un autre plugin (mais en postDispatch celui-là, c'est peut-être de là que ça vient...) pour m'afficher le nombre de requete SQL dans ma page et qui fonctionne sans problème...


La capacité d'apprendre est un don.
La faculté d'apprendre est un talent.
La volonté d'apprendre est un choix.
-=[ Frank Herbert ]=-

Hors ligne

 

#7 20-06-2008 17:02:51

acharrex
Membre
Lieu: Suisse
Date d'inscription: 27-04-2008
Messages: 135

Re: [Zend_Translate] Tutoriel sur un site multilingue avec adaptateur TMX

Effectivement ce traitement devrait être fais dans un plugin. Je vais effectuer, durant le week-end, les modifications nécessaires au tutoriel afin qu'il soit correct à 100% wink

Dernière modification par acharrex (20-06-2008 17:20:40)

Hors ligne

 

#8 20-06-2008 17:37:36

Akis
Membre
Date d'inscription: 29-03-2008
Messages: 86
Site web

Re: [Zend_Translate] Tutoriel sur un site multilingue avec adaptateur TMX

philippe a écrit:

Hum... le $controller->getRequest() ne peut a priori pas fonctionner dans le bootstrap. L'objet request n'est créé qu'à partir du dispatch je pense.
Je n'ai pas le temps de tester maintenant, mais ça me paraît bizarre.

Intuitivement j'aurais tendance à déplacer ce traitement dans un plugin.

A+, Philippe

Yep, j'avais le même genre de soucis dans un autre post. Le request n'est pas créé dans le bootstrap donc impossible de récupérer les params smile

Sinon, pour le tutoriel, le switch est inutile puisque tu mettras par défaut "fr" dans $language.
Donc tu peux directement faire :

Code:

$locale = new Zend_Locale($language);

Dernière modification par Akis (20-06-2008 17:40:45)

Hors ligne

 

#9 20-06-2008 21:49:53

acharrex
Membre
Lieu: Suisse
Date d'inscription: 27-04-2008
Messages: 135

Re: [Zend_Translate] Tutoriel sur un site multilingue avec adaptateur TMX

Le switch inutile ? Pas tout à fait puisque il faudrait tout de même contrôler si la langue passée en paramètre est prise en charge ou non. Car la langue par défaut "fr" est utilisée seulement si le paramètre "language" n'est pas défini dans l'URL.

Donc en gros, un petit test basique suffirait à remplacer le switch wink

Hors ligne

 

#10 20-06-2008 22:03:56

Akis
Membre
Date d'inscription: 29-03-2008
Messages: 86
Site web

Re: [Zend_Translate] Tutoriel sur un site multilingue avec adaptateur TMX

Oui, au temps pour moi smile

Hors ligne

 

#11 10-07-2008 13:00:56

-=blu3+3y3s=-
Membre
Lieu: Toulouse
Date d'inscription: 01-04-2008
Messages: 47

Re: [Zend_Translate] Tutoriel sur un site multilingue avec adaptateur TMX

Salut Acharrex,
Le lien que tu donnes pour le tutoriel renvoie vers ton site et non vers le tutoriel en question. Pourrais-tu le remettre, s'il te plait?

A+

Hors ligne

 

#12 10-07-2008 18:44:58

acharrex
Membre
Lieu: Suisse
Date d'inscription: 27-04-2008
Messages: 135

Re: [Zend_Translate] Tutoriel sur un site multilingue avec adaptateur TMX

-=blu3+3y3s=- a écrit:

Salut Acharrex,
Le lien que tu donnes pour le tutoriel renvoie vers ton site et non vers le tutoriel en question. Pourrais-tu le remettre, s'il te plait?

A+

Voilà c'est fait wink (et désolé pour dérangement)

Hors ligne

 

#13 10-07-2008 22:11:38

-=blu3+3y3s=-
Membre
Lieu: Toulouse
Date d'inscription: 01-04-2008
Messages: 47

Re: [Zend_Translate] Tutoriel sur un site multilingue avec adaptateur TMX

Merci beaucoup.
Ca va m'aider wink

Hors ligne

 

#14 29-08-2008 16:58:08

acharrex
Membre
Lieu: Suisse
Date d'inscription: 27-04-2008
Messages: 135

Re: [Zend_Translate] Tutoriel sur un site multilingue avec adaptateur TMX

Salut,

Comme beaucoup me l'ont fait remarqué, il est "impossible" d'appeler la méthode getRequest() depuis le bootstrap. Donc pour régler ce problème il faut créer un plugin selon ce modèle (qui utilise l'aide de vue "Translate") :

./application/plugins/translations.php

Code:

<?php

class Translations extends Zend_Controller_Plugin_Abstract
{
    
    
    /**
     *
     * @param Zend_Controller_Request_Abstract $request
     */
    public function preDispatch(Zend_Controller_Request_Abstract $request)
    {
       
        $viewRenderer = Zend_Controller_Action_HelperBroker::getStaticHelper('viewRenderer');
        $viewRenderer->initView();
        
        $language = $request->getParam("language", null);
        $browserLanguage = Zend_Locale::BROWSER;
        $defaultLanguage = "fr";
        
        if ( $this->checkLanguage($language) ) {
            $locale = new Zend_Locale($language);    
        }
                
        else {
                    
            if ( $this->checkLanguage($browserLanguage) ) {
                $locale = new Zend_Locale(Zend_Locale::BROWSER);
            } else {
                $locale = $defaultLanguage;
            }
            
        }
        
        $translator = new Zend_Translate('tmx', 'application/index/translations/translations.tmx', $locale);
        Zend_Registry::set('Zend_Translate', $translator);
        
        return;
        
    }
    
    private function checkLanguage($language) {
        
        $isValid = false;
        $languages = array ( "de", "it", "en" );
        
        if( $language != null && in_array($language, $languages) ) {
            $isValid = true;
        }
        
        return $isValid;
        
    }

}

Et depuis votre vue :

Code:

<?php echo $this->translate("messageid"); ?>

Configuration du bootstrap :

Code:

require_once('./application/plugins/translations.php');
$frontController->registerPlugin(new Translations());

Voilà, j'espère que cela vous permettra de vous en sortir wink

Dernière modification par acharrex (29-08-2008 17:00:57)

Hors ligne

 

#15 29-08-2008 17:48:43

Kaimite
Membre
Lieu: Marseille
Date d'inscription: 16-06-2008
Messages: 144
Site web

Re: [Zend_Translate] Tutoriel sur un site multilingue avec adaptateur TMX

Bonjour,

Juste une petite intervention pour proposer une autre alternative pour le choix de la langue. En tout cas c'est comme cela que je pense procéder sur mes prochains sites multilingues.

Utiliser le sous domaine.

Code:

$languages = array ( "de", "it", "en" );
list($Langue, ) = explode(".", $_SERVER['HTTP_HOST']);

if( !in_array($Langue, $languages) ) {
    $Langue = "fr";
}

$translator = new Zend_Translate('tmx', 'application/index/translations/translations.tmx', $Langue);
Zend_Registry::set('Zend_Translate', $translator);

L'avantage que j'y vois est qu'il est possible de mettre ce code dans le bootstrap (pour répondre au dernier message).

Pas besoin de se soucier à passer le paramètre de langue dans l'url. Le sous domaine ne changera pas.

Pour les moteurs http://www.monsite.com et http://uk.monsite.com sont deux sites différents.

Il suffit d'utiliser Google WebmasterTools pour indiquer à Google de localiser le sous domaine "uk" dans les pages anglaises et ainsi de suite pour vos autres langues.

Perso je considères les différentes langues comme tant des sites différents. Je n'ai pas d'url identiques sur les sites fr et us.

Par exemple je ne fais pas :

http://www.monsite.com/fr/contactez-nous et http://www.monsite.com/uk/contactez-nous

mais plutôt :

http://www.monsite.com/contactez-nous et http://uk.monsite.com/contact-us

Ainsi au niveau de référencement j'essaie de bien séparer les différentes version de mon site.

Mais c'est sur qu'il faut avoir certains droits sur l'hébergement pour créer les sous-domaines et les rediriger vers le même emplacement.

Voilà smile En espérant avoir apporté une critique constructive smile

Cordialement,
Kaimite

Dernière modification par Kaimite (29-08-2008 17:50:31)

Hors ligne

 

#16 29-08-2008 18:43:03

acharrex
Membre
Lieu: Suisse
Date d'inscription: 27-04-2008
Messages: 135

Re: [Zend_Translate] Tutoriel sur un site multilingue avec adaptateur TMX

Oui c'est également une bonne solution, peut-être plus propre que la mienne wink

Dernière modification par acharrex (29-08-2008 18:45:21)

Hors ligne

 

#17 29-08-2008 19:31:09

Kaimite
Membre
Lieu: Marseille
Date d'inscription: 16-06-2008
Messages: 144
Site web

Re: [Zend_Translate] Tutoriel sur un site multilingue avec adaptateur TMX

En tout cas pour moi elle me semble plus simple.
Plus propre... finalement ça revient au même.

Il y a possibilite dans Google WebmasterTools de préciser que http://www.monsite.com/uk/ doit être considéré comme étant dans les "Pages anglaises"...

Après c'est une question de goût.

Un jour j'ai un client pour qui nous avons réalisé un site en 4 langues, en fait plutôt 4 versions :

- Française
- Anglaise
- Américaine
- Portugaise

Chaque version avait un contenu différent. C'est pourquoi maintenant chaque version d'un site a ses propres URLs.

Et puis j'avoue aussi que c'est un poil plus simple à gérér que d'aller chercher la correspondance us de l'article 154 ! 

@++ Kaimite

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