Prestashop 1.6 l 方法
Prestashop 1.6 l method
翻译存在问题,如果缺少翻译,prestashop 将返回空字符串,而不是密钥。
有谁知道控制器中使用的 'l' 方法的位置?
$this->l('string', 'mod'); //This will output '' if string is not translated.
我想修改方法,return如果值为空,则作为键,但我找不到。
我假设您指的是 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;
因此默认情况下,如果未找到键,则返回尝试翻译的相同字符串。所以不需要更改功能。
另一方面,确保将其转换为空字符串。您还可以调试这些函数以确保您的 class 是正确的,并且存储相应翻译的文件没有这些字符串的空翻译。
翻译存在问题,如果缺少翻译,prestashop 将返回空字符串,而不是密钥。 有谁知道控制器中使用的 'l' 方法的位置?
$this->l('string', 'mod'); //This will output '' if string is not translated.
我想修改方法,return如果值为空,则作为键,但我找不到。
我假设您指的是 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;
因此默认情况下,如果未找到键,则返回尝试翻译的相同字符串。所以不需要更改功能。
另一方面,确保将其转换为空字符串。您还可以调试这些函数以确保您的 class 是正确的,并且存储相应翻译的文件没有这些字符串的空翻译。