例如:
Route::group(['prefix' => '{lang?}'], function () {
//..
});
在中间件中创建变量:
public function handle($request, Closure $next){
$lang = session('locale');
App::setLocale($lang);
return $next($request);
});
还尝试获取前缀中的数据,但是为空
Route::group(['prefix' => config('app.locale')], function () {
//..
});
或
Route::group(['prefix' => session('locale')], function () {
//..
});
通过会话改变语言单独路线
Route::get('setlocale/{locale}', function ($locale) {
session(['locale' => $locale]);
return redirect()->back();
})->name('setlocale');
提前感谢您的帮助。
答案 0 :(得分:4)
您不需要在lang
路线下对路线进行分组,您可以创建自己的中间件并将路线分组到该中间件下,并在其中使用此代码:
public function handle($request, Closure $next){
$lang = request->get('locale');
$currentLang = App::getLocale();
//If locale exists in the url and it's changed
if($lang && $lang != $currentLang) App::setLocale($lang);
//If locale doesn't exist in the url, fallback to default locale
if(!$lang) App::setLocale('en');
return $next($request);
});
网址应为data/store?locale=en
,您的网址应始终在网址locale
后追加?
,否则将使用您的默认locale
编辑:由于您的路由包含locale
作为网址的一部分,而不是请求参数,我建议您使用库来为您处理此问题,因为您在你能够有一个有效的例子之前,你会有很多事情要做:Laravel localization mcmara