Мой проект основан на многоязычном интерфейсе, и мои 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
.
После этой логики я обнаружил две проблемы:
- Если пользователь закрывает страницу и позже присоединяется снова, если он набирает
www.mywebsite.com
вместо отображения французской версии, отображается английская. - При непосредственном присоединении к
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>