6 L’internationalisation
Dans cet épisode, nous allons mettre en place l’internationalisation sur notre application Zend Framework. De cette façon, notre site pourra accueillir les visiteurs du monde entier ! Dans notre cas, nous allons prendre en compte la langue française ainsi que l’anglais.
Plan de l’épisode #06
- La culture de l’utilisateur
- Mise en place de la traduction dans le bootstrap
- Le changement de la langue
- Le helper
- Conclusion
La culture de l’utilisateur
Chaque utilisateur possède une culture spéciale en arrivant sur un site internet. Par exemple, nous pouvons avoir des visiteurs français (fr_FR) mais aussi des français belges (fr_BE). Avec le Zend Framework, on peut récupérer la culture de l’utilisateur par rapport à son navigateur grâce à au code :1.$locale = new Zend_Locale(Zend_Locale::BROWSER);Mise en place de la traduction dans le bootstrap
Dans le fichier application/Bootstrap.php nous allons créer une nouvelle méthode nommée _initTranslate et configurer le module de traduction.01.protected function _initTranslate()02. {03. // On récupère la session du site.04. $session = Zend_Registry::get('session');05. // On définit la langue par défaut sur le site.06. $locale = new Zend_Locale('fr');07. // On enregistre cette langue dans notre registre.08. Zend_Registry::set('Zend_Locale', $locale);09. // Si la langue existe en session, on récupère la session, sinon on prend la valeur par défaut.10. $langLocale = isset($session->lang) ? $session->lang : $locale;11. // On lance l'objet de traduction en lui passant les fichiers de langues12. $translate = new Zend_Translate('array',APPLICATION_PATH.'/languages/fr_FR.php','fr');13. $translate->addTranslation(APPLICATION_PATH.'/languages/en_US.php','en');14. // On lui passe la langue courante du site15. $translate->setLocale($langLocale);16. // Important pour utiliser le helper.17. Zend_Registry::set('Zend_Translate', $translate);18. }De plus, il faut charger la session dans le registre, pour effectuer cela, rendez-vous dans la méthode _initSession de votre Bootstrap.php et modifier comme cela :
1.protected function _initSession()2. {3. // On initialise la session4. $session = new Zend_Session_Namespace('watchmydesk', true);5. Zend_Registry::set('session', $session);6. return $session;7. }Pour créer les fichiers de langues, nous allons aller application/languages/ et créer deux fichiers, fr_FR.php et en_US.php .
Fichier fr_FR.php
1.< ?php2.return array(3.'hello' => 'Bonjour et bienvenue sur notre site',4.'english' => 'Anglais',5.'french' => 'Français'6.);1.< ?php2.return array(3.'hello' => 'Hello and welcome on the website',4.'english' => 'English',5.'french' => 'French'6.);Le changement de la langue
Notre application multi-langue est prête, mais il faut maintenant pouvoir changer la langue du site avec un lien par exemple.Nous allons donc ouvrir le fichier application/modules/frontend/controllers/IndexController.php et ajouter cette méthode:
1.public function languageAction(){2. $params = $this->getRequest()->getParams();3. if(isset($params['lang']) && in_array($params['lang'], array('en','fr'))){4. Zend_Registry::get('session')->lang = $params['lang'];5. }6. $this->_redirect('/');7. }Ensuite nous allons éditer quelques lignes de code dans notre fichier application/layouts/layout.phtml :
1."menu">2. 5. 6. 7.echo $this->layout()->content ?>Le helper
Maintenant que la traduction est opérationnelle, il nous faut utiliser le helper de traduction du Zend Framework :1.$this->translate("lenomatraduire");Layout.phtml
et index.phtml
1.< ?= $this->translate("hello")?>