【问题标题】:Laravel switch locale and keep the choice does not work on routesLaravel 切换语言环境并保持选择在路线上不起作用
【发布时间】:2018-09-16 14:55:13
【问题描述】:

我的项目基于多语言界面,我的网址如下:

www.mywebsite.com/en/login
www.mywebsite.com/fr/login

这是通过使用Route::group 以及我的配置中设置的语言环境来完成的:

Route::group(array('prefix' => Config::get('app.locale_prefix')), function()
{
    Route::get('/login', 'Auth\LoginController@index')->name('login');
});

还有我的完整路线:

Route::get('/', 'Frontend\HomeController@index')->name('home');
Route::get('/language/{locale}', 'Frontend\HomeController@language')->name('langswitcher');

Route::group(array('prefix' => Config::get('app.locale_prefix')), function()
{
    Route::get('/', 'Frontend\HomeController@index')->name('home');
    Route::get('/login', 'Auth\LoginController@index')->name('login');
});

如您所见,我重复了Route::get('/'),因为用户可能会通过以下方式加入:

www.mywebsite.com
www.mywebsite.com/en
www.mywebsite.com/fr

现在,假设用户点击法国国旗并因此切换网站语言,他被重定向到www.mywebsite.com/fr,从现在开始登录链接为www.mywebsite.com/fr/login

经过这个逻辑,我发现了两个问题:

  1. 如果用户关闭页面并稍后再次加入,如果他键入 www.mywebsite.com 而不是显示法语版本,则会显示英文版本。
  2. 直接加入www.mywebsite.com,登录链接始终为www.mywebsite.com/en/login

我解决了第一个问题,方法是将语言环境存储在 cookie 中并检测路由中的语言环境:

Route::group(array('prefix' => Config::get('app.locale_prefix')), function()
{
    // Language() is a class I created that returns and manages the $_COOKIE['locale']
    if (\App\Libraries\Language::has())
        App::setLocale(\App\Libraries\Language::get());

    // ....rest of the routes..
});

所以现在,每当我输入 www.mywebsite.com 时,根据我的 cookie,该页面中显示的内容/文本都是 FR 或 EN。

第二个问题我还没弄明白,因为使用代码App::setLocale(\App\Libraries\Language::get());对登录的URL没有影响。

无论显示的页面是FR还是EN,登录链接始终为www.mywebsite.com/en/login

最后,我用来在我的 HTML 中调用登录页面的代码:

<a href="{{ route('login') }}">Log In</a>

【问题讨论】:

    标签: php laravel-5


    【解决方案1】:

    解决了第二个问题,我需要在路由中添加条件。

    完整的路线文件:

    if (in_array(Request::segment(1), Config::get('app.alt_langs'))) 
    {
        App::setLocale(Request::segment(1));
        Config::set('app.locale_prefix', Request::segment(1));
    }
    else
    {
        if (\App\Libraries\Language::has())
        {
            App::setLocale(\App\Libraries\Language::get());
            Config::set('app.locale_prefix', \App\Libraries\Language::get());
        }
    }    
    
    Route::get('/', 'Frontend\HomeController@index')->name('home');
    Route::get('/language/{locale}', 'Frontend\HomeController@language')->name('langswitcher');
    
    Route::group(array('prefix' => Config::get('app.locale_prefix')), function()
    {
        Route::get('/', 'Frontend\HomeController@index')->name('home');
        Route::get('/login', 'Auth\LoginController@index')->name('login');
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-13
      • 1970-01-01
      • 2014-06-25
      • 1970-01-01
      • 1970-01-01
      • 2014-01-17
      相关资源
      最近更新 更多