/** * Get a translation for a module * * @param string|Module $module * @param string $string * @param string $source * @return string */ public static function getModuleTranslation($module, $string, $source, $sprintf = null, $js = false) { global $_MODULES, $_MODULE, $_LANGADM; static $lang_cache = array(); // $_MODULES is a cache of translations for all module. // $translations_merged is a cache of wether a specific module's translations have already been added to $_MODULES static $translations_merged = array(); $name = $module instanceof Module ? $module->name : $module; $language = Context::getContext()->language; if (!isset($translations_merged[$name]) && isset(Context::getContext()->language)) { $files_by_priority = array(_PS_THEME_DIR_ . 'modules/' . $name . '/translations/' . $language->iso_code . '.php', _PS_THEME_DIR_ . 'modules/' . $name . '/' . $language->iso_code . '.php', _PS_MODULE_DIR_ . $name . '/translations/' . $language->iso_code . '.php', _PS_MODULE_DIR_ . $name . '/' . $language->iso_code . '.php'); foreach ($files_by_priority as $file) { if (file_exists($file)) { include_once $file; $_MODULES = !empty($_MODULES) ? $_MODULES + $_MODULE : $_MODULE; //we use "+" instead of array_merge() because array merge erase existing values. $translations_merged[$name] = true; } } } $string = preg_replace("/\\\\*'/", "\\'", $string); $key = md5($string); $cache_key = $name . '|' . $string . '|' . $source . '|' . (int) $js; if (!isset($lang_cache[$cache_key])) { if ($_MODULES == null) { if ($sprintf !== null) { $string = Translate::checkAndReplaceArgs($string, $sprintf); } return str_replace('"', '"', $string); } $current_key = strtolower('<{' . $name . '}' . _THEME_NAME_ . '>' . $source) . '_' . $key; $default_key = strtolower('<{' . $name . '}prestashop>' . $source) . '_' . $key; if ('controller' == substr($source, -10, 10)) { +($file = substr($source, 0, -10)); $current_key_file = strtolower('<{' . $name . '}' . _THEME_NAME_ . '>' . $file) . '_' . $key; $default_key_file = strtolower('<{' . $name . '}prestashop>' . $file) . '_' . $key; } if (isset($current_key_file) && !empty($_MODULES[$current_key_file])) { $ret = stripslashes($_MODULES[$current_key_file]); } elseif (isset($default_key_file) && !empty($_MODULES[$default_key_file])) { $ret = stripslashes($_MODULES[$default_key_file]); } elseif (!empty($_MODULES[$current_key])) { $ret = stripslashes($_MODULES[$current_key]); } elseif (!empty($_MODULES[$default_key])) { $ret = stripslashes($_MODULES[$default_key]); } elseif (!empty($_LANGADM)) { $ret = stripslashes(Translate::getGenericAdminTranslation($string, $key, $_LANGADM)); } else { $ret = stripslashes($string); } if ($sprintf !== null) { $ret = Translate::checkAndReplaceArgs($ret, $sprintf); } if ($js) { $ret = addslashes($ret); } else { $ret = htmlspecialchars($ret, ENT_COMPAT, 'UTF-8'); } if ($sprintf === null) { $lang_cache[$cache_key] = $ret; } else { return $ret; } } return $lang_cache[$cache_key]; }
/** * Get a translation for a module * * @param string|Module $module * @param string $string * @param string $source * @return string */ public static function getModuleTranslation($module, $string, $source, $sprintf = null, $js = false) { global $_MODULES, $_MODULE, $_LANGADM; static $lang_cache = array(); // $_MODULES is a cache of translations for all module. // $translations_merged is a cache of wether a specific module's translations have already been added to $_MODULES static $translations_merged = array(); $name = $module instanceof Module ? $module->name : $module; if (!isset($translations_merged[$name])) { $filesByPriority = array(_PS_THEME_DIR_ . 'modules/' . $name . '/translations/' . Context::getContext()->language->iso_code . '.php', _PS_THEME_DIR_ . 'modules/' . $name . '/' . Context::getContext()->language->iso_code . '.php', _PS_MODULE_DIR_ . $name . '/translations/' . Context::getContext()->language->iso_code . '.php', _PS_MODULE_DIR_ . $name . '/' . Context::getContext()->language->iso_code . '.php'); foreach ($filesByPriority as $file) { if (Tools::file_exists_cache($file)) { include_once $file; $_MODULES = !empty($_MODULES) ? $_MODULES + $_MODULE : $_MODULE; //we use "+" instead of array_merge() because array merge erase existing values. $translations_merged[$name] = true; } } } $key = md5(str_replace('\'', '\\\'', $string)); $cache_key = $name . '|' . $string . '|' . $source; if (!isset($lang_cache[$cache_key])) { if ($_MODULES == null) { if ($sprintf !== null) { $string = Translate::checkAndReplaceArgs($string, $sprintf); } return str_replace('"', '"', $string); } $current_key = strtolower('<{' . $name . '}' . _THEME_NAME_ . '>' . $source) . '_' . $key; $default_key = strtolower('<{' . $name . '}prestashop>' . $source) . '_' . $key; if (isset($_MODULES[$current_key])) { $ret = stripslashes($_MODULES[$current_key]); } elseif (isset($_MODULES[$default_key])) { $ret = stripslashes($_MODULES[$default_key]); } elseif (!empty($_LANGADM)) { $ret = Translate::getGenericAdminTranslation($string, $key, $_LANGADM); } else { $ret = stripslashes($string); } if ($sprintf !== null) { $ret = Translate::checkAndReplaceArgs($ret, $sprintf); } if ($js) { $ret = addslashes($ret); } $lang_cache[$cache_key] = str_replace('"', '"', $ret); } return $lang_cache[$cache_key]; }