magento -- 修正又一个翻译上的bug,同时了解了下Magento解析xml的方式
2010-11-11 23:21
375 查看
Magento在翻译上的bug可谓多入牛毛,有些地方你会发现无论你如何在CSV文件里配置翻译项,英文的依然是英文。Magento是用helper类的魔术方法来做多语言的处理,比如
而无法翻译的地方大多数就是因为需要翻得词没有用Mage::helper('XXX')->__()来做处理,或者说Magento官方遗漏了。对于非英语国家来说,想要完整的翻译完Magento就得把这些地方都给找出来,一个个处理掉。
今天处理掉的一个地方是后台产品页的自定义选项,给产品添加自定义选项需要先选择输入类型,如文本框或下拉框,而可选择的类型都是英文显示,这些词在Adminhtml.csv中都有翻译项,不过明显不起作用。
同样的原因,这里也是因为官方遗漏了这些词的处理,打开/app/code/core/Mage/Adminhtml/Model/System/Config/Source/Product/Options/Type.php,找到如下代码
这里的两个'label'就是可选输入类型的标签,可以看到赋值的时候并没有使用Mage::helper('XXX')->__(),加上处理的代码,修改后的如下
这样这里就会去读取csv文件里的翻译项来做翻译了,效果如下
今天处理这个bug的时候还有意外收获,之前一直没注意过Magento是怎么在处理解析xml文件的,因为上面的各种类型是从config.xml里读取的,所以看到了Magento解析xml的过程。
Mage::getConfig()->getNode()这个函数可以根据节点来获得节点下的内容,参数就是你要解析的节点,如'global/catalog/product/options/custom/groups',根据这个参数,Magento就能准确的找到xml文件里你要的内容,比如'global/catalog/product/options/custom/groups'这个对应的就是/app/code/core/Mage/Catalog/etc/config.xml里的代码
Mage::helper('adminhtml')->__('-- Please select --')
而无法翻译的地方大多数就是因为需要翻得词没有用Mage::helper('XXX')->__()来做处理,或者说Magento官方遗漏了。对于非英语国家来说,想要完整的翻译完Magento就得把这些地方都给找出来,一个个处理掉。
今天处理掉的一个地方是后台产品页的自定义选项,给产品添加自定义选项需要先选择输入类型,如文本框或下拉框,而可选择的类型都是英文显示,这些词在Adminhtml.csv中都有翻译项,不过明显不起作用。
同样的原因,这里也是因为官方遗漏了这些词的处理,打开/app/code/core/Mage/Adminhtml/Model/System/Config/Source/Product/Options/Type.php,找到如下代码
foreach (Mage::getConfig()->getNode($typesPath)->children() as $type) { $labelPath = self::PRODUCT_OPTIONS_GROUPS_PATH . '/' . $group->getName() . '/types/' . $type->getName() . '/label'; $types[] = array( 'label' => (string) Mage::getConfig()->getNode($labelPath), 'value' => $type->getName() ); } $labelPath = self::PRODUCT_OPTIONS_GROUPS_PATH . '/' . $group->getName() . '/label'; $groups[] = array( 'label' => (string) Mage::getConfig()->getNode($labelPath), 'value' => $types );
这里的两个'label'就是可选输入类型的标签,可以看到赋值的时候并没有使用Mage::helper('XXX')->__(),加上处理的代码,修改后的如下
foreach (Mage::getConfig()->getNode($typesPath)->children() as $type) { $labelPath = self::PRODUCT_OPTIONS_GROUPS_PATH . '/' . $group->getName() . '/types/' . $type->getName() . '/label'; $types[] = array( 'label' => Mage::helper('adminhtml')->__((string) Mage::getConfig()->getNode($labelPath)), 'value' => $type->getName() ); } $labelPath = self::PRODUCT_OPTIONS_GROUPS_PATH . '/' . $group->getName() . '/label'; $groups[] = array( 'label' => Mage::helper('adminhtml')->__((string) Mage::getConfig()->getNode($labelPath)), 'value' => $types );
这样这里就会去读取csv文件里的翻译项来做翻译了,效果如下
今天处理这个bug的时候还有意外收获,之前一直没注意过Magento是怎么在处理解析xml文件的,因为上面的各种类型是从config.xml里读取的,所以看到了Magento解析xml的过程。
const PRODUCT_OPTIONS_GROUPS_PATH = 'global/catalog/product/options/custom/groups'; foreach (Mage::getConfig()->getNode(self::PRODUCT_OPTIONS_GROUPS_PATH)->children() as $group) { …………………………………………
Mage::getConfig()->getNode()这个函数可以根据节点来获得节点下的内容,参数就是你要解析的节点,如'global/catalog/product/options/custom/groups',根据这个参数,Magento就能准确的找到xml文件里你要的内容,比如'global/catalog/product/options/custom/groups'这个对应的就是/app/code/core/Mage/Catalog/etc/config.xml里的代码
<options> <custom> <groups> <text translate="label" module="adminhtml"> <label>Text</label> <render>adminhtml/catalog_product_edit_tab_options_type_text</render> <types> <field translate="label" module="adminhtml"> <label>Field</label> </field> <area translate="label" module="adminhtml"> <label>Area</label> </area> </types> </text> <file translate="label" module="adminhtml"> <label>File</label> <render>adminhtml/catalog_product_edit_tab_options_type_file</render> <types> <file translate="label" module="adminhtml"> <label>File</label> </file> </types> </file> <select translate="label" module="adminhtml"> …………………………………………………………………………………………
相关文章推荐
- 了解了下Magento解析xml的方式
- 关于一个xml时间解析造成的bug
- XML - 十分钟了解XML结构以及DOM和SAX解析方式
- 在android开发中,经常用到去解析xml文件,常见的解析xml的方式有一下三种:SAX、Pull、Dom解析方式。最近做了一个android版的CSDN阅读器,用到了其中的两种(sax,pull)
- 修正Magento1.6.1.0翻译上的bug,提供补丁包下载
- magento -- magento1.4在翻译上存在的一个bug
- 创建一个book.xml文档,PHP通过DOM方式解析获得每本书的作者和书名
- XML - 十分钟了解XML结构以及DOM和SAX解析方式
- java解析XML几种方式小结
- Java解析XML的四种方式
- 了解iOS中XML解析
- PHP 通过DOM方式创建一个book.xml文件
- android下各种XML数据解析方式
- simpleXML怎样解析一个xml文件,并对xml进行增删改查 过程
- [AHK]用xmlpath方式解析xml的值
- 解析xml文档的一个简单php类
- Java解析xml的四种方式
- android如何使用DOM来解析XML+如果做一个表情的弹出框
- XML文档定义有几种形式?它们之间有何本质区别?解析XML文档有哪几种方式?
- Android开发之XML文件的解析的PULL方式解析