示例#1
0
function smartyTranslate($params, &$smarty)
{
    global $_LANG;
    if (!isset($params['js'])) {
        $params['js'] = false;
    }
    if (!isset($params['pdf'])) {
        $params['pdf'] = false;
    }
    if (!isset($params['mod'])) {
        $params['mod'] = false;
    }
    if (!isset($params['sprintf'])) {
        $params['sprintf'] = null;
    }
    $string = str_replace('\'', '\\\'', $params['s']);
    $filename = !isset($smarty->compiler_object) || !is_object($smarty->compiler_object->template) ? $smarty->template_resource : $smarty->compiler_object->template->getTemplateFilepath();
    $basename = basename($filename, '.tpl');
    $key = $basename . '_' . md5($string);
    if (isset($smarty->source) && strpos($smarty->source->filepath, DIRECTORY_SEPARATOR . 'override' . DIRECTORY_SEPARATOR) !== false) {
        $key = 'override_' . $key;
    }
    if ($params['mod']) {
        return Translate::getModuleTranslation($params['mod'], $params['s'], $basename, $params['sprintf'], $params['js']);
    } else {
        if ($params['pdf']) {
            return Translate::getPdfTranslation($params['s']);
        }
    }
    if ($_LANG != null && isset($_LANG[$key])) {
        $msg = $_LANG[$key];
    } elseif ($_LANG != null && isset($_LANG[Tools::strtolower($key)])) {
        $msg = $_LANG[Tools::strtolower($key)];
    } else {
        $msg = $params['s'];
    }
    if ($msg != $params['s'] && !$params['js']) {
        $msg = stripslashes($msg);
    } elseif ($params['js']) {
        $msg = addslashes($msg);
    }
    if ($params['sprintf'] !== null) {
        $msg = Translate::checkAndReplaceArgs($msg, $params['sprintf']);
    }
    return $params['js'] ? $msg : Tools::safeOutput($msg);
}
示例#2
0
 /**
  * Get a translation for a PDF
  *
  * @param string $string
  * @return string
  */
 public static function getPdfTranslation($string, $sprintf = null)
 {
     global $_LANGPDF;
     $iso = Context::getContext()->language->iso_code;
     if (!Validate::isLangIsoCode($iso)) {
         Tools::displayError(sprintf('Invalid iso lang (%s)', Tools::safeOutput($iso)));
     }
     $override_i18n_file = _PS_THEME_DIR_ . 'pdf/lang/' . $iso . '.php';
     $i18n_file = _PS_TRANSLATIONS_DIR_ . $iso . '/pdf.php';
     if (file_exists($override_i18n_file)) {
         $i18n_file = $override_i18n_file;
     }
     if (!(include $i18n_file)) {
         Tools::displayError(sprintf('Cannot include PDF translation language file : %s', $i18n_file));
     }
     if (!isset($_LANGPDF) || !is_array($_LANGPDF)) {
         return str_replace('"', '"', $string);
     }
     $string = preg_replace("/\\\\*'/", "\\'", $string);
     $key = md5($string);
     $str = array_key_exists('PDF' . $key, $_LANGPDF) ? $_LANGPDF['PDF' . $key] : $string;
     if ($sprintf !== null) {
         $str = Translate::checkAndReplaceArgs($str, $sprintf);
     }
     return $str;
 }
示例#3
0
 /**
  * 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)
 {
     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) ? array_merge($_MODULES, $_MODULE) : $_MODULE;
                 $translations_merged[$name] = true;
                 break;
             }
         }
     }
     $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);
         }
         $lang_cache[$cache_key] = str_replace('"', '&quot;', $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;
     $language = Context::getContext()->language;
     if (!isset($translations_merged[$name]) && isset(Context::getContext()->language)) {
         $filesByPriority = 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 ($filesByPriority 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;
             }
         }
     }
     $key = md5(str_replace('\'', '\\\'', $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('"', '&quot;', $string);
         }
         $current_key = strtolower('<{' . $name . '}' . _THEME_NAME_ . '>' . $source) . '_' . $key;
         $default_key = strtolower('<{' . $name . '}prestashop>' . $source) . '_' . $key;
         // if (isset($_MODULES[$current_key]))
         if (!empty($_MODULES[$current_key])) {
             $ret = stripslashes($_MODULES[$current_key]);
         } elseif (!empty($_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);
         } else {
             $ret = htmlspecialchars($ret, ENT_COMPAT, 'UTF-8');
         }
         if ($sprintf === null) {
             $lang_cache[$cache_key] = $ret;
         } else {
             return $ret;
         }
     }
     return $lang_cache[$cache_key];
 }
function smartyTranslate($params, &$smarty)
{
    global $_LANG;
    if (!isset($params['js'])) {
        $params['js'] = false;
    }
    if (!isset($params['pdf'])) {
        $params['pdf'] = false;
    }
    if (!isset($params['mod'])) {
        $params['mod'] = false;
    }
    if (!isset($params['sprintf'])) {
        $params['sprintf'] = array();
    }
    if (!isset($params['d'])) {
        $params['d'] = null;
    }
    if (!is_null($params['d'])) {
        if (isset($params['tags'])) {
            $backTrace = debug_backtrace();
            $errorMessage = sprintf('Unable to translate "%s" in %s. tags() is not supported anymore, please use sprintf().', $params['s'], $backTrace[0]['args'][1]->template_resource);
            if (_PS_MODE_DEV_) {
                throw new Exception($errorMessage);
            } else {
                PrestaShopLogger::addLog($errorMessage);
            }
        }
        if (!is_array($params['sprintf'])) {
            $backTrace = debug_backtrace();
            $errorMessage = sprintf('Unable to translate "%s" in %s. sprintf() parameter should be an array.', $params['s'], $backTrace[0]['args'][1]->template_resource);
            if (_PS_MODE_DEV_) {
                throw new Exception($errorMessage);
            } else {
                PrestaShopLogger::addLog($errorMessage);
                return $params['s'];
            }
        }
    }
    if (($translation = Context::getContext()->getTranslator()->trans($params['s'], $params['sprintf'], $params['d'])) !== $params['s']) {
        return $translation;
    }
    $string = str_replace('\'', '\\\'', $params['s']);
    $filename = !isset($smarty->compiler_object) || !is_object($smarty->compiler_object->template) ? $smarty->template_resource : $smarty->compiler_object->template->getTemplateFilepath();
    $basename = basename($filename, '.tpl');
    $key = $basename . '_' . md5($string);
    if (isset($smarty->source) && strpos($smarty->source->filepath, DIRECTORY_SEPARATOR . 'override' . DIRECTORY_SEPARATOR) !== false) {
        $key = 'override_' . $key;
    }
    if ($params['mod']) {
        return Translate::smartyPostProcessTranslation(Translate::getModuleTranslation($params['mod'], $params['s'], $basename, $params['sprintf'], $params['js']), $params);
    } elseif ($params['pdf']) {
        return Translate::smartyPostProcessTranslation(Translate::getPdfTranslation($params['s'], $params['sprintf']), $params);
    }
    if ($_LANG != null && isset($_LANG[$key])) {
        $msg = $_LANG[$key];
    } elseif ($_LANG != null && isset($_LANG[Tools::strtolower($key)])) {
        $msg = $_LANG[Tools::strtolower($key)];
    } else {
        $msg = $params['s'];
    }
    if ($msg != $params['s'] && !$params['js']) {
        $msg = stripslashes($msg);
    } elseif ($params['js']) {
        $msg = addslashes($msg);
    }
    if ($params['sprintf'] !== null) {
        $msg = Translate::checkAndReplaceArgs($msg, $params['sprintf']);
    }
    return Translate::smartyPostProcessTranslation($params['js'] ? $msg : Tools::safeOutput($msg), $params);
}