如何从PrestaShop中的其他模块获取翻译


How to get translation from other module in PrestaShop?

我有一个"baseModule"PrestaShop模块和一堆"baseExtensionModule[n]"模块。

因此,为了避免冗余,我想在其他翻译中重用"baseModule"的一些翻译。

我已经检查了 Translate::getModuleTranslation(),看起来 ModuleCore::l() 不提供传递模块名称并将其转发到第一个模块的可能性。

您可能知道任何解决方法?

我想获取"baseModule"模块实例将是另一种方法 - 使用它的 l() 方法而不是当前的 $this->l。如何获取另一个模块的实例?

这是我

在ajax文件中使用的一个小片段:

$module_name = 'mymodule';
if (Module::isInstalled($module_name) && Module::isEnabled($module_name))
{
    $mod = Module::getInstanceByName($module_name);
    if (method_exists($mod, 'doSomething'))
        $mod->doSomething();
}

现在你可以使用Module::getInstanceByName('mymodule')->l('string'),但我几乎可以肯定它会起作用。

这是因为翻译控制器使用正则表达式扫描模块文件夹中的$this->l'((.*)')并将可翻译的字符串添加到文件中。由于Module::getInstanceByName('modulename')->l('')与此模式不匹配,因此甚至无法识别字符串。

如果您希望通过 Module::getInstanceByName('modulename')->l('string1') 访问字符串,$this->l('string1')必须存在于基本模块文件中,它将扫描并添加到翻译中。

我可以推荐的另一种方法是使用静态变量来保存您的翻译:

public static $l = array();
public function __construct()
{
    ...
    $this->init();
}
public function init()
{
   if (self::isInstalled($this->name)) {
      self::$l = array(
         'string1' => $this->l('string1'),
      );
   }
}

然后使用 Module::getInstanceByName 获取实例并访问静态变量。

我实际上使用这种方式来翻译模型字段名称,因为没有太多替代方案。