La dernière version de Prestashop 1.7 apporte de nombreux changements ( j’ y reviendrais sans doute plus longuement dans un article à venir ), et notamment dans la gestion des traductions dans l’administration.
Celle-ci se base à présent sur Symfony, tout en gardant quand même une rétrocompatibilité (théorique ) avec l’ancien système.
Les dernières recommandations ( à date ) de l’équipe Prestashop étaient de conserver l’ancien système de traduction pour les modules.
Dans le cadre de l’adaptation de l’un de mes module j’ai cependant fait face à la problématique suivante , impossible d’accéder à mon controller Admin, et affichage de la belle page d’erreur suivante :
Après analyse, du code erreur :
FatalErrorException in AdminController.php line 2735: Error: Call to a member function trans() on null
il s’avère que la fonction de traduction des modules ne marchait pas correctement dans mon cas et j’ai du surcharger cette fonction dans mon controller.
Voici donc le code qui a permis de faire fonctionner le module correctement
/**
* Surcharge de la fonction de traduction sur PS 1.7 et supérieur.
* La fonction globale ne fonctionne pas
* @param type $string
* @param type $class
* @param type $addslashes
* @param type $htmlentities
* @return type
*/
protected function l($string, $class = null, $addslashes = false, $htmlentities = true)
{
if ( _PS_VERSION_ >= '1.7') {
return Context::getContext()->getTranslator()->trans($string);
} else {
return parent::l($string, $class, $addslashes, $htmlentities);
}
} |
/**
* Surcharge de la fonction de traduction sur PS 1.7 et supérieur.
* La fonction globale ne fonctionne pas
* @param type $string
* @param type $class
* @param type $addslashes
* @param type $htmlentities
* @return type
*/
protected function l($string, $class = null, $addslashes = false, $htmlentities = true)
{
if ( _PS_VERSION_ >= '1.7') {
return Context::getContext()->getTranslator()->trans($string);
} else {
return parent::l($string, $class, $addslashes, $htmlentities);
}
}
Si vous avez aussi rencontré ce problème et trouvé une autre solution n’hésitez pas à la partager 😉…