Prestashop 1.6升方法

时间:2017-08-31 14:46:33

标签: prestashop prestashop-1.6

翻译存在问题,如果翻译缺失prestashop正在返回空字符串,而不是密钥。 有谁知道控制器中使用的'l'方法的位置?

$this->l('string', 'mod'); //This will output '' if string is not translated.

我想修改方法,如果值为空,则返回键,但我找不到。

1 个答案:

答案 0 :(得分:1)

我假设您指的是AdminController,因为它是唯一使用该功能的人。它使用函数:

protected function l($string, $class = null, $addslashes = false, $htmlentities = true)
{
    if ($class === null || $class == 'AdminTab') {
        $class = substr(get_class($this), 0, -10);
    } elseif (strtolower(substr($class, -10)) == 'controller') {
        /* classname has changed, from AdminXXX to AdminXXXController, so we remove 10 characters and we keep same keys */
        $class = substr($class, 0, -10);
    }
    return Translate::getAdminTranslation($string, $class, $addslashes, $htmlentities);
}

在你的情况下,它会调用Translate :: getAdminTranslation('string','mod',false,true)

在Translate :: getAdminTranslation中 我们有:

...
$string = preg_replace("/\\\*'/", "\'", $string);
$key = md5($string);
if (isset($_LANGADM[$class.$key])) {
    $str = $_LANGADM[$class.$key];
} else {
    $str = Translate::getGenericAdminTranslation($string, $key, $_LANGADM);
}
...

由于它没有$ _LANGADM [$ class。$ key],它会调用:

$str = Translate::getGenericAdminTranslation($string, $key, $_LANGADM);

在你的情况下$ str = Translate :: getGenericAdminTranslation('string',md5('string'),$ _LANGADM);

我们在那里:

...
if (isset($lang_array['AdminController'.$key])) {
    $str = $lang_array['AdminController'.$key];
} elseif (isset($lang_array['Helper'.$key])) {
    $str = $lang_array['Helper'.$key];
} elseif (isset($lang_array['AdminTab'.$key])) {
    $str = $lang_array['AdminTab'.$key];
} else {
    // note in 1.5, some translations has moved from AdminXX to helper/*.tpl
    $str = $string;
}
return $str;

因此,默认情况下,如果未找到任何键,则返回尝试翻译的相同字符串。所以没有必要改变功能。

另一方面,确保将字符串转换为空字符串。您还可以调试这些函数以确保您的类正确,并且存储相应翻译的文件没有这些字符串的空转换。