Yii 自带的表单字段唯一验证,返回的错误信息是:{attribute}的值"{value}"已经被占用了。产品经理觉得不好听,于是需求来了, 就是要换话术,虽然我知道可以在 Model 里面指定返回的错误信息,但是我不想一个一个的改,我想统一修改这个话术。
思路来自@HarryZheng0907 :
设置i18n,把basePath指到你自己的语言包的目录,这样就可以用自己的语言包了,然后在自己的语言包里,用merge合并官方的语言包和自己想要改的字段
实现这个我们需要两步
修改配置文件,添加 i18n 配置
'components' => [
// ...
'i18n' => [
'translations' => [
'app*' => [
'class' => 'yii\i18n\PhpMessageSource',
'basePath' => '@app/messages',
//'sourceLanguage' => 'en-US',
'fileMap' => [
'app' => 'app.php',
],
],
],
],
],
添加文件
新建文件 app/messages/zh-CN/app.php
, 代码如下:
<?php
return \yii\helpers\ArrayHelper::merge(
require(Yii::getAlias('@yii') . '/messages/zh-CN/yii.php'),
[
'{attribute} "{value}" has already been taken.' => '{attribute}的值"{value}"已存在。',
]
);
然后就可以用了。