0

私は多言語ウェブサイトを持っています。すべてのプロジェクトルートのプレフィックスとして現在のロケールを追加したい場所。そのためには、ルートを使用するたびに、ルートのロケール パラメータの値を常に指定する必要があります。これを行うにはもっと良い方法があると思います。

私のルートは次のようになります

Route::prefix('{locale}')->group(function() {
    Route::get('/', [App\Http\Controllers\HomeController::class, 'index'])->name('home');
    Route::get('/blog', [App\Http\Controllers\PostController::class, 'index'])->name('blog');
});

URLのパスが次のようになるようにします。

  • http://localhost/project/en/blog または
  • http://localhost/project/fa/blog

SetLocaleまた、通過するリクエストパスに応じてアプリのロケールを決定するミドルウェアもあります。

ここに私のミドルウェアコードがあります

class SetLocale
{
    public function handle(Request $request, Closure $next)
    {

        $locale = $request->segment(1);
        if (! is_null($locale) && ! in_array($locale, config('app.locales')) ) // config('app.locales') = ['en', 'ar', 'fa']
            abort(404);

        $html_dir = in_array($locale, ['en'])?'ltr':'rtl';
        \Illuminate\Support\Facades\Config::set('app.html_dir', $html_dir);
        \Illuminate\Support\Facades\App::setLocale($locale);


        return $next($request);
    }
}
4

2 に答える 2