本地化在带有json文件的laravel 8中不起作用



我正试图在我的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'));
}

一个更好的选择是将其存储在用户表中

最新更新