谢绝转载!
这是 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 硬编码。不过都不建议直接修改源码,而应采用覆写的方法。