У меня есть модуль «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
чтобы получить экземпляр и получить доступ к статической переменной.
Я фактически использую этот способ для перевода имен полей модели, потому что вариантов не так много.