Laravel验证消息翻译失效问题排查及原因定位求助
Laravel验证错误消息未加载语言文件问题
Laravel验证功能出现异常,此前运行正常,故障时间未知。无论是使用Validator类还是自定义请求文件,都会出现相同问题:验证错误消息无法加载lang/en/validation.php中的文本描述,仅返回如validation.required的键名,对用户毫无意义。
示例验证代码
$validator = Validator::make($request->all(), [ 'username' => 'required', ]);
错误表现
- 当
username字段缺失时,错误消息包仅显示:validation.required - 当其他字段未满足最小长度要求时,错误消息包显示:
validation.required、validation.min - 正常情况下应返回语言文件中的对应内容,例如
'The username field is required.'
前端错误输出代码
@if ($errors->any()) <div class="alert alert-danger"> <ul> @foreach ($errors->all() as $message) <li>{{ $message }}</li> @endforeach </ul> </div> @endif
问题根源
通过调试vendor/laravel/framework/src/Illuminate/Translation/Translator.php中的get()函数发现:翻译内容无法被获取是因为load()函数在错误的路径/resources/lang/下查找语言文件,但项目中存在一个由第三方旧包(适配Laravel 8路径)创建的/resource/lang文件夹,导致语言文件加载失败。
内容的提问来源于stack exchange,提问作者Valentino
相关产品推荐
相关产品推荐

