如何仅在cakePHP中禁用模型验证消息的转换?

如何仅在cakePHP中禁用模型验证消息的转换?,php,cakephp,Php,Cakephp,CakePHP将自动假定$validate数组中的所有模型验证错误消息都是本地化的。但是,我不想翻译模型验证消息。如何做到这一点,有什么建议吗?最简单的方法就是不翻译这些字符串。因此,如果在.po文件中 Mistake here -> Error aqui //don't do that Mistake here -> Mistake here 您的验证错误被“翻译”为同一种语言 如果您不想自己筛选哪些字符串来自验证,哪些是“正常”字符串,请更改模型的名称(在A

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

最简单的方法就是不翻译这些字符串。因此,如果在.po文件中

Mistake here   ->   Error aqui   //don't do that
Mistake here   ->   Mistake here
您的验证错误被“翻译”为同一种语言

如果您不想自己筛选哪些字符串来自验证,哪些是“正常”字符串,请更改模型的名称(在AppModel中执行此操作,这样您只需执行一次)

现在,您的验证消息将位于新的验证域中,而不是default.pot中,因此您不能翻译整个“validation\u errors.pot”文件,您就可以了

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

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

所有部分都有类似的内容

__d($this->_validationDomain, $result, $args);
应替换为
vsprintf($result,$args)
或类似的函数(取决于参数的名称)。此
\uu d
函数在该函数中调用了4次,因此请全部替换


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

请始终提及您的确切CakePHP版本,并相应地标记您的问题!您好@Nunser,感谢您的回复,您的解决方案很好,但只有在我为模型验证错误消息和正常消息维护单独的文件时,它才起作用。他们是否有其他解决方案,以便他们不需要管理两个单独的文件?您好。是的,第三个选项中,您必须更改lib代码(实际上,扩展类并更改该代码),并替换答案中描述的代码,这将允许您只有一个文件,并告诉cake不要翻译任何验证消息。
__d($this->_validationDomain, $result, $args);