- 安裝中文語言包
Laravel 11 默認沒有內置完整中文語言包,推薦使用第三方維護的完整翻譯:
# 通過 Composer 安裝語言包
composer require laravel-lang/common --dev# 發布中文語言文件到項目
php artisan lang:add zh_CN
這會自動將中文語言文件生成到 lang/zh_CN 目錄。
- 配置應用語言
修改 .env 文件設置默認語言:
APP_LOCALE=zh_CN
或直接在 config/app.php 中配置:
'locale' => 'zh_CN',
'fallback_locale' => 'en',
- 驗證器錯誤響應格式(API適配)
在前后端分離架構中,需確保驗證錯誤返回標準化的 JSON 格式。修改 app/Exceptions/Handler.php:
use Illuminate\Validation\ValidationException;public function render($request, Throwable $e)
{if ($e instanceof ValidationException) {return response()->json(['code' => 422,'message' => '參數驗證失敗','errors' => $e->errors(),], 422);}return parent::render($request, $e);
}
- 自定義字段名稱映射
在 lang/zh_CN/validation.php 中配置 attributes 部分:
'attributes' => ['email' => '郵箱','password' => '密碼','user.name' => '用戶姓名', // 支持嵌套字段
],
- 自定義驗證消息
(1) 全局覆蓋:在語言文件中修改
// lang/zh_CN/validation.php
return ['required' => ':attribute 是必填字段','email' => ':attribute 必須是有效的郵箱格式',// 其他規則...
];
(2) 局部覆蓋:在驗證時指定
Validator::make($request->all(), ['email' => 'required|email',
], ['email.required' => '必須填寫郵箱地址','email.email' => '郵箱格式不合法',
]);
- 驗證器測試示例
發送一個無效請求(如缺少必填字段),將收到以下結構化響應:
{"code": 422,"message": "參數驗證失敗","errors": {"email": ["郵箱 是必填字段"],"password": ["密碼 是必填字段"]}
}
- 常見問題排查
問題1:語言文件未生效
? 檢查文件路徑是否為 lang/zh_CN/validation.php
? 執行 php artisan config:clear 清除配置緩存
問題2:字段名稱未翻譯
? 確保 attributes 數組中鍵名與請求字段名完全一致
? 嵌套字段使用點語法(如 user.address.street)
問題3:自定義規則消息
對于自定義驗證規則,在規則類中添加:
class CustomRule implements Rule
{public function message(){return trans('validation.custom_rule'); // 在語言文件中定義}
}
- 高級用法:動態切換語言
若需支持多語言,可在中間件中動態設置:
// 創建中間件 SetLocale
public function handle($request, Closure $next)
{$lang = $request->header('Accept-Language', 'zh_CN');App::setLocale($lang);return $next($request);
}// 在 Kernel.php 注冊中間件
protected $middlewareGroups = ['api' => [\App\Http\Middleware\SetLocale::class,// ...],
];
通過以上配置,Laravel 11 API 項目即可實現:
- 全中文驗證錯誤提示
- 標準化的 JSON 錯誤響應
- 靈活的字段名稱映射
- 支持多語言擴展