Laravel 5.6条件验证:如何自定义翻译提示中的特定词汇
解决Laravel 5.6条件验证消息中"left"的自定义翻译问题
当然可行啦!我来给你拆解两种靠谱的解决方式,按需选择就行~
方法一:直接自定义验证消息(快速简单,适合单语言场景)
如果你的项目不需要多语言支持,直接在验证规则里指定自定义消息就能搞定。比如在控制器的验证代码里:
$validator = Validator::make($request->all(), [ 'text' => 'required_if:type,left', // 你的条件验证规则 ], [ // 直接把"left"替换成你想要的自定义词汇 'text.required_if' => 'text必须填写,当type为【左侧】', ]);
这样验证不通过时,返回的提示就是你自定义好的内容,完全不用改其他配置。
方法二:用替换器+翻译文件(优雅适配多语言)
如果需要支持多语言,或者想让代码更易维护,推荐用这种方式:
- 创建取值翻译文件
在resources/lang/你的语言目录(比如zh-CN)下新建type_values.php文件,用来映射type字段的取值和自定义翻译:
<?php return [ 'left' => '左侧', // 这里换成你需要的自定义词汇 // 以后如果还有其他type取值需要翻译,直接在这里加就行 ];
- 添加验证规则替换器
打开app/Providers/AppServiceProvider.php,在boot()方法里添加替换器逻辑,自动把验证消息里的left替换成翻译后的内容:
use Illuminate\Support\Facades\Validator; public function boot() { Validator::replacer('required_if', function ($message, $attribute, $rule, $parameters) { // $parameters里存着验证规则的参数,比如['type', 'left'] $value = $parameters[1]; // 从翻译文件里取出对应的自定义词汇 $translatedValue = trans('type_values.' . $value); // 替换消息里的:value占位符 return str_replace(':value', $translatedValue, $message); }); }
- 确保验证消息配置正确
在对应语言的validation.php(比如resources/lang/zh-CN/validation.php)里,required_if的消息保持默认或者自定义格式都可以,比如:
'required_if' => ':attribute 必须填写,当 :other 为 :value',
这样以后不管type有多少种取值需要翻译,只需要在type_values.php里添加对应的映射就行,非常灵活。
内容的提问来源于stack exchange,提问作者Areza
相关产品推荐
相关产品推荐

