Jump to content

Astuce, Traduction Modules Avec Sous-Répertoires


Recommended Posts

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

  • 8 months later...

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 by webbax (see edit history)
Link to comment
Share on other sites

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...