如何从 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
获取实例并访问静态变量。
其实我是用这种方式来翻译模型字段名的,因为替代方案不多
我有一个 "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
获取实例并访问静态变量。
其实我是用这种方式来翻译模型字段名的,因为替代方案不多