多语言 ui 使用 Laravel 5.3

Multilingual ui using Laravel 5.3

我正在开发适用于不同国家/地区的 CRM

这是我第一次使用 Laravel 所以我有点困惑

我的数据库是这样的:

语言

词典

我想过这样工作:

http://domain.com/en

http://domain.com/ru

http://domain.com/en/users

http://domain.com/ru/users

如果用户转到 http://domain.com,它将通过以下步骤重定向他:

  1. 如果用户过去登录过并且有使用他的语言的 cookie
  2. 如果没有 cookie 通过用户的 IP 获取用户的国家
  3. 如果国家/地区的语言在语言 table 中无法识别,则将用户重定向到在 config/app 上设置的默认语言。php => 'locale' => 'default language'

我想知道是否有任何方法可以做到这一点而无需在控制器的每个函数中发送语言变量, 我是什么意思?

我的意思是我 不会 让我的路线和控制器看起来像这样:

路线

Route::get('/{locale}', 'Auth\LoginController@showLoginForm');  
Route::get('/{locale}/users/', 'UsersController@index');
Route::get('/{locale}/users/view/{id}', 'UsersController@viewUser');

控制器

public function showLoginForm($locale)
{
    App::setLocale($locale);
    return view('auth.login');
}
...
public function index($locale)
{
    App::setLocale($locale);
    return view('users.index');
}
...

我希望它在后台工作,而不需要我每次都设置语言和设置路线,

谢谢!

中间件可能是解决此问题的方法。由于您已经计划使用 cookie 来存储用户的区域设置,因此您可以创建注册到网络路由组的中间件(默认情况下应用于所有路由)。

然后在您的中间件中 class 只需调用 App 上的 setLocale 方法并传递 cookie。

public function handle($request, Closure $next) {
    App::setLocale($request->cookie('locale'));

    return $next($request);
}

如果您之前没有使用过中间件,那么 Laravel 文档总是很棒:https://laravel.com/docs/5.3/middleware.