В расширении, над которым я работаю, у меня есть макет XML, добавленный через файл config.xml модуля. Этот макет имеет некоторые модификации внешнего интерфейса. Однако некоторые из этих блоков относятся к основным модулям Magento. Все шаблоны отображаются правильно, как и ожидалось.
Шаблоны, которые я упаковал с самим модулем, используют файлы перевода моего собственного модуля. Шаблоны, упакованные с ядром Magento, не переведены. Если я добавлю файл перевода для соответствующего основного модуля, то этот файл перевода будет использован и шаблон покажет переведенный.
Есть ли способ заставить Magento использовать файл перевода моего модуля, если он не может найти файлы перевода для основного модуля Magento? Есть ли что-нибудь еще, что я могу сделать здесь?
источник
$this->__()
илиMage::helper('...')->__()
. В первом случае вы можете заставить блок использовать ваш помощник по переводу. Но я считаю, что в общем случае единственным вариантом является обновление данных дляcore_translate
таблицы. Здесь подробно описаны вопросы интернационализации: blog.belvg.com/… .Ответы:
Независимо от того, как вы к этому подходите, ваша проблема требует «творческого» решения, достойного заметки разработчика для использования последующими разработчиками / сопровождающими. Во- первых, некоторые фон, а затем записку, а затем легко и я думаю , что разумное решение в конечной
<--
ТЛ; дг .Как указывал Зява , перевод зависит от модуля, выполняющего перевод. Шаблоны отображаются в экземплярах блоков, а экземпляры блоков имеют
module_name
свойство, которое используется при вызове перевода; ссылкаMage_Core_Block_Abstract::__()
:module_name
Свойство (обычно) , полученный по требованию и на основе имени класса (исх.::getModuleName()
):Таким образом, если
module_name
свойство уже установлено, применяется перевод этого модуля. Для существующих блоков из основного макета это свойство может быть установлено с помощью XML макета; например:Вуаля! Ваш модуль CSV владеет переводом для этого экземпляра. Это может быть подходом. Конечно, все еще существует неприятная ситуация, когда трансляция других модулей применяется через специфичный для модуля помощник в экземплярах блоков (включая, конечно, файлы шаблонов), и это всегда верно для переводов XML макета. Кроме того, этот подход нарушит поведение Disable Modules Output, в котором используется
module_name
параметр.Решение
Оказывается, для модуля можно указать несколько файлов перевода. Это не сделано в ядре (каждый модуль объявляет только один файл .csv ), но функциональность есть в
Mage_Core_Model_Translate
:и
Поскольку содержимое файлов объединено (я проверял), можно указать только те строки, которые вы хотите переопределить в ваших пользовательских CSV. Например, если вы хотите перевести строку « Дополнительная информация» на странице продукта (переведенную
Mage_Catalog
модулем), сработает следующее:app / locale / Custom.csv :
В вашем модуле конфигурации - который должен
<depends />
на ,Mage_Catalog
чтобы обеспечить его содержание сливаться после - следующая будет вызывать Custom.csv пару переводческого слияние поверх оригинала:Хорошая особенность этого подхода заключается в том, что вы можете собрать свои основные переводы ядра в один файл.
источник