我有一个功能,可以在注册表单中添加带数字的标签。对于每个附加输入字段,它会添加一个标签,如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代码本身)的任何想法或建议?
答案 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()
方法中。