[英]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
獲取實例並訪問靜態變量。
實際上,我使用這種方式來翻譯模型字段名稱,因為沒有太多選擇。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.