首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >动态/php创建的文本的Magento翻译失败

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

Stack Overflow用户
提问于 2012-09-04 14:30:26
回答 1查看 1.1K关注 0票数 0

我有一个功能,添加标签与数字的形式字段在注册表中。对于每个额外的输入域,它会添加一个标签,如Address-2,Address-3等。我想使用CSV转换文件将这些标签从"Address-2“更改为"Number",将"Address-3”更改为“Number”等,但不起作用。我有到CSV的正确路径,因为我在文件中有正确翻译的其他文本。

我使用了以下代码:

代码语言:javascript
复制
<?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文件中尝试了不同的组合,如"Address 2“、"Address”2",但都不起作用。关于如何进行翻译(通过CSV或更改PHP代码本身),有什么想法或建议吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-09-04 19:45:45

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

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

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

基于OP注释的更新

“我需要变量translated”意味着您(通常)只能使用store作用域在数据库中存储针对实体的翻译。您可以使用任何方法来完成此操作,但鉴于这是另一个扩展的扩展,因此不可能扰乱DB模式。你也可以操纵内联翻译,但这看起来有点老土(我很好奇会听到不同的说法)。

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

代码语言:javascript
复制
<?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()方法中。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12257910

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档