PrestaShop:翻译覆盖控制器

时间:2016-11-15 18:18:36

标签: php prestashop prestashop-1.6

我创建了一个覆盖AdminProductController.php并创建新的bulk_action的模块。

<?php
class AdminProductsController extends AdminProductsControllerCore
{
    public function __construct()
    {
        parent::__construct();
        $this->bulk_actions['setprice'] = array(
            'text' => $this->l('Set a price for selected'),
            'icon' => 'icon-price',
        );
    }
}

现在我需要翻译动作文本并将该翻译与模块一起分发。 问题是,我没有在模块翻译中看到原始文本,而是在后台翻译中可见。

那么,有没有办法将这个字符串添加到模块翻译而不是后台翻译?

3 个答案:

答案 0 :(得分:1)

您可以通过创建希望翻译所在的模块实例来实现。

class AdminProductsController extends AdminProductsControllerCore
{
    public function __construct()
    {
        parent::__construct();
        $module = Module::getInstanceByName('modulename');
        $this->bulk_actions['setprice'] = array(
            'text' => $module->l('Set a price for selected'),
            'icon' => 'icon-price',
        );
    }
}

答案 1 :(得分:1)

我在这里找到的主要问题描述:How to get translation from other module in PrestaShop?

  

这是因为翻译控制器使用正则表达式扫描模块文件夹中的$ this-&gt; l((。*))并将可翻译的字符串添加到文件中   所以我们应该在模块中做这样的事情:

class MyModule extends Module
{

    public static $l = null;
    public function __construct()
    {
        parent::__construct();
        $this::$l = $this->l('Set a price for selected');
    }
}

在控制器中,我们可以做@TheDrot建议的内容:

class AdminProductsController extends AdminProductsControllerCore
{
    public function __construct()
    {
        parent::__construct();
        $module = Module::getInstanceByName('modulename');
        $this->bulk_actions['setprice'] = array(
            'text' => $module->l('Set a price for selected'),
            'icon' => 'icon-price',
        );
    }
}

答案 2 :(得分:0)

尝试使用以下代码代替$ this-&gt; l('为所选'设置价格)

翻译:: getModuleTranslation(YOUR_MODULE_NAME,'为所选',FILE_NAME设置价格);