我正试图在我的laravel应用程序中用resource/lang/目录中的json文件实现多种语言,这些文件的语言缩写为,即en.json、ar.json
web.php
Route::get('lang/{lang}', [HomeController::class,'switchLang'])->name('lang');
HomeController.php
public function switchLang($lang)
{
App::setLocale($lang);
Artisan::call('config:clear');
Artisan::call('config:cache');
Artisan::call('cache:clear');
return redirect()->back();
}
**注意:**我也尝试过使用以下中间件保护所有路由的中间件
语言.php
<?php
namespace AppHttpMiddleware;
use Closure;
use IlluminateHttpRequest;
class Language
{
/**
* Handle an incoming request.
*
* @param IlluminateHttpRequest $request
* @param Closure(IlluminateHttpRequest): (IlluminateHttpResponse|IlluminateHttpRedirectResponse) $next
* @return IlluminateHttpResponse|IlluminateHttpRedirectResponse
*/
public function handle(Request $request, Closure $next,$lang)
{
App::setLocale($lang);
Artisan::call('config:clear');
Artisan::call('config:cache');
Artisan::call('cache:clear');
return $next($request);
}
}
当用户更改语言时,不要进行手工调用。
setLocale应该足够了,但您至少需要将该区域设置存储在会话中,
switchLang:
session()->put('locale', $lang);
中间件:
if(session()->has('locale')) {
app()->setLocale(session()->get('locale'));
}
一个更好的选择是将其存储在用户表中