Php 使用Laravel 5.3的多语言用户界面

Php 使用Laravel 5.3的多语言用户界面,php,laravel,laravel-5,multilingual,Php,Laravel,Laravel 5,Multilingual,我在做一个CRM,应该在不同的国家工作 这是我第一次使用Laravel,所以我有点困惑 我的数据库如下所示: 语言 身份证 名字 简称(en、ru等) 字典 身份证 标签(登录、忘记密码等) 值(‘登录’、‘ББбб’等) 语言识别码 我想过这样工作: 如果用户转到so,它将通过以下步骤重定向他: 如果用户以前登录,并且其语言具有cookie 如果没有cookie,则通过其IP获取用户所在国家/地区 如果语言表中无法识别国家/地区的语言,请将用户重定向到config/app.ph

我在做一个CRM,应该在不同的国家工作

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

我的数据库如下所示:

语言

  • 身份证
  • 名字
  • 简称(en、ru等)
字典

  • 身份证
  • 标签(登录、忘记密码等)
  • 值(‘登录’、‘ББбб’等)
  • 语言识别码
我想过这样工作:

如果用户转到so,它将通过以下步骤重定向他:

  • 如果用户以前登录,并且其语言具有cookie
  • 如果没有cookie,则通过其IP获取用户所在国家/地区
  • 如果语言表中无法识别国家/地区的语言,请将用户重定向到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');
    }
    ...
    
    控制器

    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存储用户的区域设置,您可以创建注册到web路由组(默认情况下应用于所有路由)的中间件

    然后,在中间件类中,只需在App上调用setLocale方法并传递cookie

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

    如果您以前没有使用过中间件,那么Laravel文档总是很棒的:。

    alex谢谢,我想我会从url中删除语言var,只使用Cookies。很高兴我能提供帮助,如果将来仍要使用语言变量,可以将路由封装在以区域设置为前缀的路由组中:
    route::group(['prefix'=>'{locale}',function(){//routes here})您可以只在该组中包含任何需要区域设置的路由,这样您就不必在每个方法中分配区域设置,而只需忽略它。我相信有更好的办法,但我现在想不出。亚历克斯,你是最好的!;)