Конфликт перевода между модулями в пределах одного раздела system_config

magento.stackexchange https://magento.stackexchange.com//questions/87325

Вопрос

Я создал свой собственный раздел (скажем, "Компания") под управлением администратора system_config

<config>
    <sections>
        <company translate="label">
            <label>Company</label>
            <tab>service</tab>
            <frontend_type>text</frontend_type>
            <sort_order>400</sort_order>
            <show_in_default>1</show_in_default>
            <show_in_website>1</show_in_website>
            <show_in_store>1</show_in_store>
        </company >
    </sections>
</config>

Я создал 2 модуля, добавив их собственную группу в разделе "Компания".Эти группы отображаются так, как задумано.Оба модуля хорошо настроены для обработки переводов adminhtml.

Модуль 1 :

<config>
    <adminhtml>
        <translate>
            <modules>
                <company>
                    <files>
                        <default>Company_Module1.csv</default>
                    </files>
                </company>
            </modules>
        </translate>
    </adminhtml>
</config>

и модуль 2 :

<config>
    <adminhtml>
        <translate>
            <modules>
                <company>
                    <files>
                        <default>Company_Module2.csv</default>
                    </files>
                </company>
            </modules>
        </translate>
    </adminhtml>
</config>

Итак, вот моя проблема :Я создал модуль 2 перед модулем 1.Пока модуль 2 был один в разделе компании, мои строки были переведены правильно.Как только я создал модуль 1 и добавил его группу в раздел "Компания", были переведены только ярлыки и комментарии модуля 1.

Похоже, что только Company_Module1.csv используется.Любая строка в Company_Module2.csv игнорируется.Если я скопирую свой Company_Module2.csv содержание в Company_Module1.csv файл, то модуль 2 теперь переведен правильно.Это очень странно, потому что я явно настроил модуль 2 для перевода с Company_Module2.csv и не от Company_Module1.csv.

Кто-нибудь может объяснить такое поведение?В конце концов, это поможет мне понять, что я сделал не так, и исправить это.Спасибо!

Это было полезно?

Решение

Чтобы понять это поведение, вам нужно знать, как Magento считывает свои конфигурационные файлы.

Во-первых, все XML-файлы объединяются в одну большую структуру.Результат выглядит примерно так:

<config>
    <adminhtml>
        <translate>
            <modules>
                <company>
                    <files>
                        <default>Company_Module1.csv</default>
                        <default>Company_Module2.csv</default>
                    </files>
                </company>
            </modules>
        </translate>
    </adminhtml>
</config>

Затем доступ к большинству значений осуществляется либо через XPath, либо преобразуется в структуру ассоциативного массива.Эта структура была бы чем-то вроде

'files' => array(
    'default' => 'Company_Module1.csv',
    'default' => 'Company_Module2.csv',
 )

Но массив не может иметь один и тот же ключ дважды, поэтому в итоге он получает только одно значение.

Решение

Всегда используйте уникальный идентификаторы в ваших конфигурационных файлах, где бы вы ни могли выбрать их самостоятельно.

Это должно быть:

<config>
    <adminhtml>
        <translate>
            <modules>
                <company_module1>
                    <files>
                        <default>Company_Module1.csv</default>
                    </files>
                </company>
            </modules>
        </translate>
    </adminhtml>
</config>

и

<config>
    <adminhtml>
        <translate>
            <modules>
                <company_module2>
                    <files>
                        <default>Company_Module2.csv</default>
                    </files>
                </company>
            </modules>
        </translate>
    </adminhtml>
</config>

Кроме того, в system.xml вы не указали, какой модуль следует использовать, это может привести к неожиданному поведению при наличии противоречивых переводов.Лучше:

    <company translate="label" module="Company_Module1">

Но это не имеет отношения к вашей проблеме

Лицензировано под: CC-BY-SA с атрибуция
Не связан с magento.stackexchange
scroll top