webbax Posted September 7, 2011 Share Posted September 7, 2011 Bonjour, Dans mon cas il est fréquent que je découpe mes modules avec des sous-répertoires, le problème est qu'ensuite Prestashop ne parvient pas à charger les bonnes traductions correspondantes. Les termes sont pourtant traduits dans le back-office mais ils ne se chargent pas. Pour y remédier, vous pouvez modifier la classes "Module.php" (ou l'overrider) en faisant comme ceci. Vers la ligne 796 du fichier Modules.php remplacez else $ret = stripslashes($string); par else{ $findTradFileModule=false; $md5String = md5($string); foreach($_MODULES as $k=>$v){ if(stripos($k,$md5String)!==false){ $findTradFileModule = true; $tradStringFile = $v; break; } } if($findTradFileModule){ return $tradStringFile; }else{ $ret = stripslashes($string); } } A présent vos traductions devraient s'afficher correctement même si tous les fichiers de votre application ne se trouvent pas à la racine de votre module. Link to comment Share on other sites More sharing options...
webbax Posted June 1, 2012 Author Share Posted June 1, 2012 (edited) Bonjour, Pour ceux qui désirent pratiquer un override de la classe (pour éviter de modifier le coeur), vous pouvez créer un fichier "Module.php" sous le répertoire "override/classes" avec le contenu ci-dessous : /* * Webbax * Gestion des traductions pour module avec sous-répertoires */ class Module extends ModuleCore { /** * find translation from $_MODULES and put it in self::$l_cache if not already exist * and return it. * * @param string $name name of the module * @param string $string term to find * @param string $source additional param for building translation key * @return string */ public static function findTranslation($name, $string, $source) { global $_MODULES; $cache_key = $name . '|' . $string . '|' . $source; if (!isset(self::$l_cache[$cache_key])) { if (!is_array($_MODULES)) return str_replace('"', '"', $string); // set array key to lowercase for 1.3 compatibility $_MODULES = array_change_key_case($_MODULES); $currentKey = '<{'.strtolower($name).'}'.strtolower(_THEME_NAME_).'>'.strtolower($source).'_'.md5($string); $defaultKey = '<{'.strtolower($name).'}prestashop>'.strtolower($source).'_'.md5($string); if (isset($_MODULES[$currentKey])) $ret = stripslashes($_MODULES[$currentKey]); elseif (isset($_MODULES[Tools::strtolower($currentKey)])) $ret = stripslashes($_MODULES[Tools::strtolower($currentKey)]); elseif (isset($_MODULES[$defaultKey])) $ret = stripslashes($_MODULES[$defaultKey]); elseif (isset($_MODULES[Tools::strtolower($defaultKey)])) $ret = stripslashes($_MODULES[Tools::strtolower($defaultKey)]); else{ $findTradFileModule=false; $md5String = md5($string); foreach($_MODULES as $k=>$v){ if(stripos($k,$md5String)!==false){ $findTradFileModule = true; $tradStringFile = $v; break; } } if($findTradFileModule){ return $tradStringFile; }else{ $ret = stripslashes($string); } } self::$l_cache[$cache_key] = str_replace('"', '"', $ret); } return self::$l_cache[$cache_key]; } } Edited June 1, 2012 by webbax (see edit history) Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now