如何仅在cakeHP中禁用模型验证消息的翻译


How to disable translation of Model validation messages only in cakePHP?

CakePHP将自动假设$validate数组中的所有模型验证错误消息都是本地化的。但是,我不想翻译模型验证消息。如何实现这一点,有什么建议吗?

最简单、最简单的方法就是不翻译这些字符串。所以,如果在你的.po文件

Mistake here   ->   Error aqui   //don't do that
Mistake here   ->   Mistake here

并且您的验证错误会被"翻译"为相同的语言。

如果您只是不想自己筛选哪些字符串来自验证,哪些是"正常"字符串,请更改模型的验证域(在AppModel中进行,这样您只需要进行一次)。

class User extends AppModel {
    public $validationDomain = 'validation_errors';
}

现在,您的验证消息将在新的验证域中,而不是在default.pot中,所以您不能翻译整个"validation_errors.pot"文件,这样就可以了。

此部分仅对cake 2.5有效,我不能确定它是否适用于其他版本
现在,如果你想要真正"困难"的方式,并从地球上删除该功能,你必须覆盖Cake lib中的一些功能。我不建议直接在lib文件夹中更改代码,只建议扩展类并替换app/lib中的代码,否则升级版本会很痛苦

您必须修改的类和函数应该是lib/Cake/Model/Validator中的CakeValidationSet,函数是_processValidationResponse

所有具有类似的部件

__d($this->_validationDomain, $result, $args);

应该替换为vsprintf($result, $args)或类似的(取决于参数的名称。该__d函数在该函数内被调用4次,因此替换所有参数。

就我个人而言,我只会更改验证域,不翻译文件,然后就完成了。搜索翻译这些消息的代码真的不值得付出努力(除了,你知道,只是为了知道它是如何完成的)。