Как узнать, какие файлы CSV перевода используются в текущем файле phtml

Ответы:

3

Я предполагаю, что вы имеете в виду переводы, $this->__('...')когда никакой явный помощник не используется. Тогда это зависит от объема модуля блока

Это зависит от нескольких факторов:

  1. Класс блока, используемый для визуализации шаблона. Вы должны быть в состоянии определить это из файлов макета XML, но некоторые блоки создаются программно, в этом случае вам придется искать в коде. Если вам повезет, класс блоков задокументирован в самом шаблоне, например так:

    /** @var $this Mage_Catalog_Block_Product_List */

    или вот так:

    /** @see Mage_Catalog_Block_Product_List */

    Область действия - это модуль, к которому принадлежит этот класс (как Mage_Catalog). Но будьте осторожны с классом переписывает. Если класс блока был переписан расширением, область действия изменяется на это расширение.

  2. Если свойство module_nameбыло установлено (например, с помощью макета XML), это имеет приоритет.
  3. Наконец, если блок переопределяет getModuleName()метод, используется область, возвращенная этим методом.

Мы уже на месте?

Теперь, когда вы знаете область действия, вы можете посмотреть соответствующий файл CSV, который определен в этом модуле config.xml. Также может быть больше одного, но общепринятым условием является наличие одного файла на модуль в форме Module_Name.csv.

  1. Если этот файл содержит строку для перевода, вы нашли ее, за исключением случаев, когда translate.csvв вашей теме есть символ, который переопределяет перевод для этой конкретной области (например:) "Module_Name::Foo","Foo".

  2. Если его нет в обоих, ищите перевод без префикса области видимости модуля translate.csv(если он существует).

  3. Если это не так, поиск во всех других файлах модуля CSV. Побеждает тот, кто загружен первым из модуля (т.е. сначала из модулей ядра, затем по алфавиту, с учетом зависимостей). Обратите внимание , что только этот запасной вариант используется , когда не в режиме разработчика.


Если вы хотите быть уверены, из каких файлов поступает конкретный перевод на странице, я могу порекомендовать вам бесплатное расширение TranslationHints ( ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: я его написал)

Получите это здесь: https://github.com/schmengler/TranslationHints

Скриншот: Советы по переводу

Фабиан Шменглер
источник
2

Если вы не проводите модульное тестирование, вам, как правило, все равно, какой перевод CSV используется, потому что все они объединяются до того, как Magento начнет перевод чего-либо.

Однако, если вы все еще хотите выяснить это, сначала используйте XML-файлы макета, чтобы выяснить, какой класс блоков используется. Если вы найдете класс блока, он будет использовать config.xml этого модуля. Если в макетах не указан класс блоков, вам может понадобиться поискать классы родительских блоков и контроллеры.

Главное, что нужно знать, это то, что шаблоны используют функцию перевода __ соответствующего класса блока, а класс блока использует функцию __ класса вспомогательного класса модуля Data.php.

Джей Эль-Кааке
источник
1
«Обычно вас не волнует, какой перевод CSV используется, потому что все они объединяются до того, как Magento начинает перевод чего-либо». - Если только не модульное тестирование для существующего пакета перевода. Мои модули обычно терпят неудачу, если английский, испанский или французский отсутствуют, прежде чем сделать это командой QA.
Люк А. Лебер
1

Похоже, вы хотите оставаться организованным, когда вы добавляете свои переводы. С таким количеством CSV-файлов для перевода, зачем выбирать случайный файл, почему бы не добавить его в нужный CSV-файл?

Вот пример, над которым я работал: предположим, что вы редактируете страницу учетной записи клиента и изменили адресную книгу на Мои адреса . Сейчас для моих адресов нет перевода на французский язык .

Чтобы найти правильный CSV-файл, нужно выполнить поиск существующего перевода в той же части сайта. Пункт « Мои заказы / Mes Commandes» находится в той же части сайта, поэтому я могу запустить поиск:

$ cd magento/app/
$ find . -iname '*.csv' | xargs grep -in --color 'Mes Commandes'
./locale/fr_FR/Mage_Sales.csv:73:"Back to My Orders","Retour à mes commandes"
./locale/fr_FR/Mage_Sales.csv:308:"My Orders","Mes commandes"
./locale/fr_FR/Mage_Sales.csv:309:"My Orders - Details","Mes commandes - Détails"
./locale/fr_FR/Mage_Oscommerce.csv:7:"Back to My Orders","Retour à mes commande "
./locale/fr_FR/Mage_Oscommerce.csv:51:"My Previous Orders","Mes commandes précédentes"
./locale/fr_FR/Mage_Customer.csv:215:"My Orders","Mes commandes"

Итак, если немного подумать, лучший файл для изменения - locale / fr_FR / Mage_Sales.csv. После внесения изменений не забудьте обновить Переводы в Системе> Управление кэшем !

В сторону: обратите внимание на варианты без учета регистра; -inameдля findи -iдля grep. Это уменьшает усилия, которые вам нужно потратить на охоту. --colorВариант не отражает здесь, но результат будет гораздо более удобным для чтения по сравнению с тем, что вы видите здесь.

Энтони
источник
0

Метод перевода __ (), используемый в шаблонах, находится в файле /app/code/core/Mage/Core/Block/Abstract.php и использует имя модуля для поиска правильного перевода. Он строит массив в следующем формате, который будет использоваться для перевода:

array(1) {
    [0]=> object(Mage_Core_Model_Translate_Expr)#161 (2) {
        ["_text":protected]=> string(18) "Orders and Returns"
        ["_module":protected]=> string(10) "Mage_Sales"
    }
}

Если вы хотите увидеть, какое имя модуля использует ваш шаблон, вы можете вызвать функцию:

 $this->getModuleName();

Затем должен быть файл перевода, соответствующий этой строке. Например, для меня на странице просмотра категорий эта функция вернет * Mage_Catalog *, а затем из этого я могу найти файл перевода Mage_Catalog.csv

Дэвид Мэннерс
источник
Какая строка в этом большом файле Abstract.php?
Вики Дев