如果其他语言没有定义,会默认的查找en下的定义
创建语言包
resources/lang
下创建需要的语言文件夹,如jp,默认是en。然后创建语言包文件
trans.php
return [ //User 'user_name_required' => 'User name cannot be empty', 'user_name_between' => 'User name length 5-10 characters', 'user_name_unique' => 'User names must be unique', 'user_password_required' => 'Password cannot be empty', 'user_password_between' => 'Password length 5-10 characters', 'user_role_required' => 'Role cannot be empty', //Role 'role_name_required' => 'Role name cannot be empty', 'role_name_unique' => 'Role names must be unique', // DbException 2000 => 'Database operation exception', 2001 => 'Database insert failure', 2002 => 'Database update failure', 2003 => 'Database delete failure',];复制代码
创建中间件
通过前端头的X-Language,来判断是什么语言,并设置语言
SwitchLanguage.php
class SwitchLanguage{ public function handle($request, Closure $next) { $lang = $_SERVER['HTTP_X_LANGUAGE'] ?? 'jp'; app()->setLocale($lang); return $next($request); }}复制代码
注册路由中间件
Kernel.php
'lang' => \App\Http\Middleware\SwitchLanguage::class,复制代码
路由使用中间件
Route::middleware( 'lang')->group(function () {});复制代码
使用语言包
自定义异常
自定义异常可以通过异常码进行判断
BaseException.php
public function __construct($code = 0, $message = '', $httpCode = 0, Throwable $previous = null){ $this->default_code = $code == 0 ? $this->default_code : $code; $this->default_message = empty($message) ? trans("trans.$this->default_code") : $message; $this->default_httpCode = $httpCode == 0 ? $this->default_httpCode : $httpCode; parent::__construct($message, $code, $previous);}复制代码
表单验证异常
Handler.php
if ($exception instanceof ValidationException) { $message = $exception->validator->errors()->first(); return response()->json([ 'code' => 1000, 'message' => trans("trans.$message"), ], 422);}复制代码
UserRequest.php
public function messages(){ return [ 'name.required' => 'user_name_required', 'name.between' => 'user_name_between', 'name.unique' => 'user_name_unique', 'password.required' => 'user_password_required', 'password.between' => 'user_password_between', 'role.required' => 'user_role_required', ];}复制代码