0

我正在尝试在我的 laravel 应用程序中使用资源/lang/ 目录中的 json 文件实现多种语言,其中包含语言的短名称,即 en.json、ar.json。以下是代码

网页.php

Route::get('lang/{lang}', [HomeController::class,'switchLang'])->name('lang');

家庭控制器.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 App\Http\Middleware;

use Closure;
use Illuminate\Http\Request;

class Language
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure(\Illuminate\Http\Request): (\Illuminate\Http\Response|\Illuminate\Http\RedirectResponse)  $next
     * @return \Illuminate\Http\Response|\Illuminate\Http\RedirectResponse
     */
    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);
    }
}
4

1 回答 1

1

当用户更改语言时,不要进行工匠调用。

setLocale 应该足够了,但是您至少需要将该语言环境存储在会话中,

开关语言:

session()->put('locale', $lang);

中间件:

if(session()->has('locale')) {
    app()->setLocale(session()->get('locale'));
}

更好的选择可能是将其存储在用户表中

于 2022-02-16T16:41:44.347 回答