Magento 2.0/2.1 表单验证翻译 bug 修复

谢绝转载!

这是 Magento 2 中文化问题的一部分。如果你已经阅读过 Magento 2 中文化问题(原创) 并且经过实践了,那么你可能还会发现有些英文没有被中文化。

其中之一就是表单验证中的错误提示。本篇就介绍这个 bug 如何修复。Magento 2.2 现在尚在开发中,但是已经修复了这个问题。所以到 2.2 正式发布的时候应该就没有这个问题了。

表单验证的时候,使用到了 lib/web/mage/validation.js 这个 JS。

查看这个文件,比方说下面这一段

......
 "validate-email": [
            function (v) {
                return $.mage.isEmptyNoTrim(v) || /^([a-z0-9,!\#\$%&'\*\+\/=\?\^_`\{\|\}~-]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z0-9,!\#\$%&'\*\+\/=\?\^_`\{\|\}~-]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*@([a-z0-9-]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z0-9-]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*\.(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]){2,})$/i.test(v);
            },
            'Please enter a valid email address (Ex: johndoe@domain.com).'
        ],
.....

这里的错误提示 'Please enter a valid email address (Ex: johndoe@domain.com).'并没有进行翻译。

Magento 2 中进行翻译使用的是 'mage/translate' ,引入它,然后 $.mage.__('Please enter a valid email %1 address (Ex: johndoe@domain.com).') 会得到翻译后的内容。而他取的翻译短语来自于 js-translation.json 。这是一个根据翻译 csv 文件自动生成的文件。

如果你的翻译没有效果,需要检查 csv 文件中是否有了,js-translation.json 中是否有了,还有翻译短语是否和需要翻译的完全一致。

如果要重新生成 js-translation.json 可以使用如下命令:

rm -rf pub/static/*
rm -rf var/view_preprocessed/*
php bin/magento setup:static-content:deploy

下面说修复方法。

下载这个文件替换掉原先的文件。
https://github.com/magento/magento2/blob/develop/lib/web/mage/validation.js

替换可以在 theme 中进行,我们知道 theme 是可以覆盖掉同路径的文件的。

所以可以在正在使用的 theme 文件中的 web 路径下,创建 mage/validation.js 这样就将原来 lib/web/mage/validation.js 的覆盖掉了。

也可以使用 requirejs-config.js 来达到目的。

var config = {
    "map": {
        "*": {
            'mage/validation': 'YourVendor_CoreBugFix/js/model/validation',
        }
    }
};

当然解决办法不止一种。我们也可以在模板层面,删掉不能正确翻译的验证的方法,或者再不成对调用的 js 硬编码。不过都不建议直接修改源码,而应采用覆写的方法。

参考文档

https://github.com/magento/magento2/issues/8179

发表评论

电子邮件地址不会被公开。 必填项已用*标注