动态/ php创建文本的Magento翻译失败

时间:2012-09-04 06:30:26

标签: php magento csv translation

我有一个功能,可以在注册表单中添加带数字的标签。对于每个附加输入字段,它会添加一个标签,如Address-2,Address-3等。我想使用CSV转换文件来更改这些标签来自"地址-2和#34; to" Number"," Address-3"到"区"等但它不起作用。我有正确的CSV路径,因为我在文件中有正确翻译的其他文本。

我使用以下代码:

<?php for ($_i=2, $_n=$this->helper('customer/address')->getStreetLines(); $_i<=$_n; $_i++): ?>
<label for="<?php echo $this->getPrefix();?><?php echo $this->__('_street%s', $_i) ?>" <?php echo $this->__('Address %s', $_i) ?>
</label>
<?php endfor;?>

但Magento没有翻译这些标签,我假设由于%s变量,这是翻译的一部分。

我在CSV文件中尝试了不同的组合,如&#34;地址2&#34;,&#34;地址&#34; 2&#34;&#34;但它不起作用。关于如何翻译(通过CSV或更改PHP代码本身)的任何想法或建议?

1 个答案:

答案 0 :(得分:1)

通常,您要么将实体数据的翻译存储在数据库中,要么按商店范围检索它。这是EAV存储的一种用途。

另一种方法是将这些翻译存储在自定义主题中,并使每个商店的主题更改。

在您的情况下,我的决定因素是(1)您存储在数据库中的这些表单是否可以任意配置,或者(2)如果这是一个分布式模块 - 这些中的任何一个都表示EAV存储。否则,去主题翻译路线。

根据OP评论进行更新

“我需要翻译的变量”意味着您(通常)仅限于使用商店范围将翻译存储在数据库中。你可以通过多种方式实现这一点,但鉴于这是对另一个扩展的扩展,弄乱数据库模式似乎是不可能的。你也可以操纵内联翻译,但这似乎是hackish(好奇地听不到)。

这是可以使用core_block_abstract_to_html_after事件的情况。该事件接受块实例和呈现的html。在您的事件观察者中,您可以通过字符串替换执行转换,但是因为针对所有块触发了此事件,所以您希望将其配置为块类型的单例AND测试。

<?php

class Ns_Mn_Model_FormTranslate
{
    public function translateLabelValues(Varien_Event_Observer $o)
    {
        if ($o->getBlock() instanceof The_Specific_Block_Class) {
            $html = $o->getHtml();

            $html = //your translation logic here

            $o->setHtml($html); //this will be used
        }
    }
}

这里的主要警告是block_html缓存不会包含此转换后的输出。或者,使用基于配置的类重写重写原始类,并将转换逻辑添加到_html()方法中。