Как получить перевод с другого модуля в 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\((.*)\) Внутри модуля с помощью regex и добавляет переводимые строки в файл. Поскольку 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 чтобы получить экземпляр и получить доступ к статической переменной.

Я фактически использую этот способ для перевода имен полей модели, потому что вариантов не так много.