Magento: как перевести содержимое тега action? - PullRequest
3 голосов
/ 07 декабря 2011

У меня есть файл page.xml по умолчанию.

Я добавил

<block type="core/text" name="for_everyone">
   <action method="setText" translate="text"><text>Some text!</text></action>
</block> 

до

<block type="core/text_list" name="content" as="content" translate="label">
    <label>Main Content Area</label>
</block>

и я получил это:

<block type="core/text_list" name="content" as="content" translate="label">
    <label>Main Content Area</label>
    <block type="core/text" name="for_everyone">
        <action method="setText" translate="text"><title>Some text!</title></action>
    </block> 
</block>

Затем я добавил два файла для моей темы:

app/design/frontend/default/default/locale/en_US/translate.csv

"Some text!","Some text!"

и

app/design/frontend/default/default/locale/fr_FR/translate.csv

"Some text!","un text!"

Но каждый раз, когда я запускаю какой-либо язык, я вижу «какой-то текст!». В то же время выбранный язык для сайта используется правильно. Например, строка из catalog.xml переводится как «отлично»:

<block type="core/template" name="right.permanent.callout" template="callouts/right_col.phtml">
      <action method="setImgSrc"><src>images/media/col_right_callout.jpg</src></action>
      <action method="setImgAlt" translate="alt" module="catalog"><alt>Keep your eyes open for our special Back to School items and save A LOT!</alt></action>
</block>

Я также пытался использовать что-то подобное и другие теги:

<action method="setText" translate="title"><text>Some text!</title></action>

Кто-нибудь знает, в чем проблема?

Ответы [ 2 ]

8 голосов
/ 07 декабря 2011

Атрибут translate должен содержать разделенный пробелами список имен тегов для перевода.Например, если передаваемый в Mage_Core_Block_Text::setText() аргумент инкапсулирован в `node, у вас должно быть следующее:

<action method="setText" translate="foo"><foo>Some text!</foo></action>

Если только вы не пытаетесь передать структуру массива через макет XML, узел аргументаимена не имеют значения.

Также стоит отметить, что если установить атрибут module, эта строка будет передана методу фабрики вспомогательных классов (Mage::helper() - см. временную шкалу ниже).В случаях, когда наблюдается неправильный перевод, убедитесь, что в таблице базы данных core_translate нет переопределенных записей, которые можно было бы ввести только в случае использования встроенного перевода.

Последовательность вызовов:

  • Mage_Core_Controller_Varien_Action::loadLayout()
    • ::generateLayoutBlocks()
      • Mage_Core_Model_Layout::generateBlocks()
        • ::_generateBlocks()
          • ::_generateAction()
            • ::_translateLayoutNode()

Это _translateLayoutNode(), который обрабатывает переводатрибуты директив <action />:

if (isset($node['module'])) {
    $args[$arg] = Mage::helper((string)$node['module'])->__($args[$arg]);
}
else {
    $args[$arg] = Mage::helper('core')->__($args[$arg]);
}
2 голосов
/ 07 декабря 2011

Проверьте имя вашей папки locale (завершающий e)

app/design/frontend/default/default/local/en_US/translate.csv
app/design/frontend/default/default/locale/en_US/translate.csv
...