Laravel переключить язык и сохранить выбор не работает на маршрутах - PullRequest
0 голосов
/ 16 сентября 2018

Мой проект основан на многоязычном интерфейсе, и мои URL-адреса следующие:

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 контент / текст, который появляется вэта страница находится на FR или EN в соответствии с моим файлом cookie.

Вторая проблема, с которой я еще не разобрался, заключается в использовании кода App::setLocale(\App\Libraries\Language::get());, так как он не влияет на URL логина.

Независимо от того, отображается ли страница на FR или EN, ссылка для входа всегда www.mywebsite.com/en/login.

Наконец, код, который я использую для вызова страницы входа в моем HTML:

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

1 Ответ

0 голосов
/ 16 сентября 2018

Решена вторая проблема , мне нужно было добавить условие в мои маршруты.

Полный файл маршрута:

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');
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...