簡體   English   中英

如何從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獲取實例並訪問靜態變量。

實際上,我使用這種方式來翻譯模型字段名稱,因為沒有太多選擇。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM