Laravel-Lang包:如何禁止验证错误消息中的属性翻译?
禁止Laravel-Lang验证错误消息中的属性翻译
针对你遇到的法语locale下属性被翻译导致语义不通的问题,有几种直接的解决方式:
方式一:删除对应属性的翻译条目
Laravel-Lang包会在lang/fr/attributes.php(或lang/fr/validation.php的attributes数组)中定义属性的翻译映射。找到该文件,删除或注释掉last_name对应的翻译行,比如:
// 注释或删除这一行 // 'last_name' => 'nom',
这样验证器会直接使用原始属性名last_name,不再替换为法语翻译。
方式二:自定义验证错误消息
在验证规则中直接指定自定义消息,跳过属性翻译逻辑。比如在控制器或请求类中:
$rules = [ 'last_name' => 'max:50', ]; $customMessages = [ 'last_name.max' => 'Le champ last name ne peut pas contenir plus de 50 caractères.', ]; $this->validate($request, $rules, $customMessages);
这种方式精准控制单条规则的错误消息,不会影响其他字段。
方式三:全局禁用属性翻译
如果希望所有验证错误都保留原始属性名,可在App/Providers/AppServiceProvider.php的boot方法中重写验证器的属性获取逻辑:
use Illuminate\Validation\Validator; public function boot() { $this->app->resolving(Validator::class, function ($validator) { $validator->setAttributeNames(function ($attribute) { // 直接返回原始属性名,不做翻译替换 return $attribute; }); }); }
此设置会全局生效,所有验证消息中的:attribute占位符都会被原始属性名替换。
内容的提问来源于stack exchange,提问作者Dom
相关产品推荐
相关产品推荐

