【问题标题】:Magento, translate validation error messagesMagento,翻译验证错误信息
【发布时间】:2010-11-29 20:01:47
【问题描述】:

我已经成功地为原型验证创建了新规则,现在我需要翻译错误消息(位置:Javascript 中的字符串)。但是,我只能翻译所有消息,我的新自定义消息似乎不可翻译。我该如何更改?

【问题讨论】:

  • 你在使用 $this->__(sometext) 吗?您翻译的消息是否在相关的 CSV 文件中?
  • 其实我没有,因为标签在非动态的 JS 文件中。像所有其他标签一样。然后它试图通过翻译器 js 抛出它们

标签: validation prototype magento translation


【解决方案1】:

要翻译自定义 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() ?>

Check for more here:


我希望这会有所帮助,我只是希望这适用于任何地方,到目前为止,我只在 Onepage Checkout 上对其进行了测试。

【讨论】:

  • 修改 Magneto 核心文件是no-no。你应该改为Translator.add('This is my validation message','&lt;?php echo Mage::helper('yourmodule')-&gt;__('This is my validation message')?&gt;');
【解决方案2】:

也许您需要在etc 文件夹中的jstranslator.xml 文件:

<?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>

具有以下结构和含义:

  • &lt;jstranslator&gt; - [一个] XML 根节点。
    • &lt;some-message-name&gt; - [零个或多个] 在所有 jstranslator.xml 文件中具有唯一 XML 元素名称的根节点子元素(否则基于模块列表的最后加载顺序获胜)。
      • 属性:
      • translate="message" - (可选)提示正在翻译的子元素被命名为“message”,但是这是针对 js 翻译 XML 文件进行硬编码的(Magento CE 1.9,搜索“*/message” ) 并且不需要使用该属性。
      • module="mymodule" - (可选)模块名称,如果省略,则值为“core”。它将用于稍后(从该模块)实例化数据助手,然后负责加载翻译(例如从 CSV 文件)。
    • &lt;message&gt; - [每个父母零个或一个] 要翻译的消息。此元素节点值的文本值被添加到 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');

进一步参考

【讨论】:

    【解决方案3】:

    我们的一个 magento 项目遇到了完全相同的问题。我们发现app/design/frontend/default/default/template/page/htmlhead.phtml中的函数被注释掉了:

    <?php echo $this->helper('core/js')->getTranslatorScript() ?>
    

    放入后还是不行,因为翻译文件没有插入翻译。检查这两件事,它应该开始工作了。

    【讨论】:

      【解决方案4】:

      对我有什么帮助(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 验证中使用它

      【讨论】:

      • 您没有将数据正确编码为 javascript 字符串。由于数据库中的翻译覆盖所有其他翻译,这甚至可以用于通过存储层将代码注入应用程序的前端。假设为 -1,您应该更喜欢 jstranslator.xml,因为它更容易编码。
      【解决方案5】:

      您可以编辑app/local/ur_language/Mage_Core.csv 文件,在第一列中添加原始字符串,在第二列中添加翻译后的字符串。所有的 javascript 翻译都存储在这个文件中。

      【讨论】:

        【解决方案6】:

        要对此进行扩展,您必须将翻译字符串添加到 Mage/Core/Helper/Js.php。

        【讨论】:

        • 这并没有提供问题的答案。要批评或要求作者澄清,请在其帖子下方发表评论。
        • 哦,是的,确实如此。在我回答这个问题的时候,这是唯一正确的答案。评分最高、更完整的答案是在我的一年之后出现的。感谢您对发布帮助的投反对票,这让我花了几个小时才弄清楚。 >_>
        • 我认为很明显,您不会编辑 app/code/core/ 中的文件,而是编辑 app/code/local 中的副本。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-11-13
        • 2012-11-15
        • 2012-02-22
        • 2022-10-15
        • 2019-08-18
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多