我已经成功地为原型验证创建了新规则,现在我需要翻译错误消息(位置:Javascript 中的字符串)。但是,我只能翻译所有消息,我的新自定义消息似乎不可翻译。我该如何改变?
6 回答
也许您需要jstranslator.xml
文件夹内的etc
文件:
<?xml version="1.0" encoding="UTF-8"?>
<jstranslator>
<some-message-name translate="message" module="mymodule">
<message>This is the text in my own js validation</message>
</some-message-name>
</jstranslator>
具有以下结构和含义:
<jstranslator>
- [one] XML 根节点。<some-message-name>
- [零个或多个] 在所有文件中具有唯一 XML 元素名称的根节点子元素jstranslator.xml
(否则基于模块列表的最后加载顺序获胜)。- 属性:
translate="message"
- (可选)提示正在翻译的子元素被命名为“message
”,但是这是针对 js 翻译 XML 文件(Magento CE 1.9,搜索“*/message
”)的硬编码,并且该属性不需要是用过的。module="mymodule"
- (可选)模块名称,如果省略,值为“core
”。它将用于稍后(从该模块)实例化数据助手,然后负责加载翻译(例如从 CSV 文件)。
<message>
- [每个父母零个或一个]要翻译的消息。此元素节点值的文本值被添加到 javascript Translator对象数据中。
处理激活模块的所有jstranslator.xml
文件。
然后将您的翻译行放入Something_Mymodule.csv
文件中:
"This is the text in my own js validation", "(translated in a different language or speech)"
然后在您的 js 脚本中,您可以通过 Translator 使用您自己的翻译:
Translator.translate('This is the text in my own js validation');
更多参考资料
要翻译自定义 javascript 错误消息,您还需要将它们添加到以下文件中:
\app\code\core\Mage\Core\Helper\Js.php
找到一个函数_getTranslateData() ,你会看到一堆消息已经在里面了。
只需在数组中的某处添加您的消息,如下所示:
'This is my validation message' => $this->__('This is my validation message')
不要忘记逗号(,)。
然后将翻译放在一些翻译文件中。
在您使用此消息的文件中(我在opcheckout.js文件中使用它),您需要将文本包装在Translator.translate('This is my validation message')
.
我还没有弄清楚哪个翻译文件是否重要。你可以试试Mage_Core.csv
。
我需要它,Mage_Checkout.csv
它在那里工作。
无论如何,对于那些更感兴趣的人,我注意到这些 javascript 消息打印在每个 html 页面的标题中,并且有些担心它会与 SEO 混淆。无论如何,这与代码一起打印在文件
\app\design\frontend\bmled\default\template\page\html\head.phtml
中。
<?php echo $this->helper('core/js')->getTranslatorScript() ?>
我希望这会有所帮助,我只是希望这适用于任何地方,到目前为止,我仅在 Onepage Checkout 上对其进行了测试。
您可以编辑app/local/ur_language/Mage_Core.csv
文件,在第一列中添加原始字符串,在第二列中添加翻译的字符串。所有的 javascript 翻译都存储在这个文件中。
对我有什么帮助(Magento EE 1.6) - 我添加了新的翻译对象:
<script>
var _data = {
'This is a required field.':
"<?php echo $this->__('This is a required field.'); ?>",
'Please make sure your passwords match.':
"<?php echo $this->__('Please make sure your passwords match');?>",
'validate telephone error':
"<?php echo $this->__('validate telephone error');?>"
};
var Translator = new Translate(_data);
</script>
如果已定义 VarienForm 在 js 验证中使用它
我们的一个 magento 项目遇到了完全相同的问题。我们发现里面的函数app/design/frontend/default/default/template/page/htmlhead.phtml
被注释掉了:
<?php echo $this->helper('core/js')->getTranslatorScript() ?>
放进去之后还是不行,因为翻译文件还没有插入翻译。检查这两件事,它应该开始工作。
要对此进行扩展,您必须将翻译字符串添加到 Mage/Core/Helper/Js.php。