如何根据用户类型设置验证语言Laravel

时间:2019-02-27 02:24:59

标签: php laravel-5

我的应用程序中有三种用户类型,如果用户类型为user,则验证消息应为英语,否则为admin或company,则应为日语。

在我的app.php文件中,我这样做:

'locale' => 'en',
'fallback_locale' => 'ja',

在我的web.php文件中:

Route::group(['middleware' => 'auth:user'], function () {
    App::setLocale('en');
    //user controllers
});

Route::group(['middleware' => 'auth:company'], function () {
    App::setLocale('ja');
    //company controllers
});

Route::group(['middleware' => 'auth:admin'], function () {
    App::setLocale('ja');
    //admin controllers
});

当我未将admin的语言环境设置为ja时,用户的验证为英语,并且与admin和company相同。现在,我将admin和company的语言环境设置为ja,用户的验证消息现在也是日语。这是验证文件的语言目录。

enter image description here

我真的没有办法将这一点删除,任何帮助都值得赞赏。我已经在网络上尝试了建议的解决方案,但没有任何效果。

1 个答案:

答案 0 :(得分:2)

您可能应该添加某种语言切换器支持。

也许是这样的:https://github.com/akaunting/language

或者,如果您想要更简单的解决方案,只需创建小型中间件即可根据用户设置/访问角色/等等即时更改语言环境。

<?php

namespace App\Http\Middleware;

use Closure;
use App;
use Illuminate\Support\Facades\Auth;

class SetLocaleForAdmin
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @param  string|null  $guard
     * @return mixed
     */
    public function handle($request, Closure $next, $guard = null)
    {
        if (Auth::guard($guard)->check()) {
            if(in_array(Auth::user()->email, ['admin@site.com','admin2@site.com','admin3@site.com'])) {
                App::setLocale('ja');
            }
        }

        return $next($request);
    }
}

不要忘记将中间件添加到Kernel.php中的Web组中

protected $middlewareGroups = [
   'web' => [
        ...
        \App\Http\Middleware\SetLocaleForAdmin::class,
        ...
    ],
];