{ Hello Magento 2 }

解决 Magento 2 应用问题,更注重深度挖掘。(ง •̀_•́)ง

0%

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

谢绝转载! 这是 Magento 2 中文化问题的一部分。如果你已经阅读过 Magento 2 中文化问题(原创) 并且经过实践了,那么你可能还会发现有些英文没有被中文化。 其中之一就是表单验证中的错误提示。本篇就介绍这个 bug 如何修复。Magento 2.2 现在尚在开发中,但是已经修复了这个问题。所以到 2.2 正式发布的时候应该就没有这个问题了。 表单验证的时候,使用到了 lib/web/mage/validation.js 这个 JS。 查看这个文件,比方说下面这一段

1
2
3
4
5
6
7
8
......
"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 可以使用如下命令:

1
2
3
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 来达到目的。

1
2
3
4
5
6
7
var config = {
"map": {
"*": {
'mage/validation': 'YourVendor_CoreBugFix/js/model/validation',
}
}
};

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

参考文档

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