Changer la langue en cours de script eZ Publish

Sur un site multilingue, il peut arriver que nous ayons à générer du contenu dans une langue différente de celle du siteaccess courant. L'affichage dans une iframe d'un autre siteaccess ayant la langue recherchée n'est pas toujours le plus facile, notamment lorsqu'il s'agit de générer un template d'envoi de mail...

Pour nous faciliter la tache, on peut employer une petite astuce :

 //On récupère l'instance par défaut du site.ini, utilisé pour les locales :
 $ini = eZINI::instance();
 //Récupération de la locale courante :
 $originalLanguageCode = $ini->variable( 'RegionalSettings', 'Locale' );
 //On défini la locale souhaitée :
 $ini->setVariable( 'RegionalSettings', 'Locale',  'fre-FR' );
 //On vide le cache de locale pour que notre changement soit bien pris en compte :
 eZLocale::resetGlobals();
 $tpl = templateInit();
 /* Nous placerons nos fetchs d'objets à afficher ici */
 $content = $tpl->fetch( 'design:mon_template_a_traduire.tpl' ) );
 //On redéfini la locale d'origine:
 $ini->setVariable( 'RegionalSettings', 'Locale',  $originalLanguageCode );
 eZLocale::resetGlobals();

Il est a noter que dans le site.ini de votre siteaccess, dans le paragraphe [RegionalSettings], la variable TextTranslation doit bien être a enabled, il n'est pas possible de la redéfinir au niveau d'un module (du fait du mécanisme d'appel des fonction i18n en fonction de cette variable).

Commentaires

Authentifiez vous pour commenter.