【发布时间】: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。
经过这个逻辑,我发现了两个问题:
- 如果用户关闭页面并稍后再次加入,如果他键入
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 时,根据我的 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>
【问题讨论】: