0

我有一个功能,可以在注册表单中添加带有数字的标签以形成字段。对于每个额外的输入字段,它会添加一个标签,如地址 2、地址 3 等。我想使用 CSV 翻译文件将这些标签从“地址 2”更改为“数字”,将“地址 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 文件中尝试了不同的组合,例如“地址 2”、“地址“2””,但它不起作用。有关如何翻译此内容的任何想法或建议(通过 CSV 或更改 PHP 代码本身)?

4

1 回答 1

1

通常,您可以将实体数据的翻译存储在数据库中,然后按存储范围检索它。这是EAV存储的用途之一。

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

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

根据 OP 评论更新

“我需要翻译的变量”意味着您(通常)仅限于使用存储范围将翻译存储在数据库中针对实体。您可以通过多种方式执行此操作,但鉴于这是对另一个扩展的扩展,搞乱 DB 模式似乎是不可能的。您也可以操纵内联翻译,但这似乎很骇人听闻(好奇地听到了其他)。

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

<?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()方法中。

于 2012-09-04T11:45:45.227 回答