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