Laravel局在化による簡単なLocaleルーティング


ローカライズ(L 10 N)と国際化(I 18 N)は、あなたのウェブサイトが世界的に際立っていて、来て、あなたのウェブサイトでより長くとどまるためにより多くのユーザーを引きつけたいならば、重要です.しかし、ウェブサイトをローカライズすることは、ウェブ上でテキストを翻訳するのと同じくらい単純でありえませんでした.受け入れられた言語/ロケールをフィルタリングするようないくつかの考慮事項があります.そして、現在使われているロケールを使用するために既存のURLをリダイレクトします.
私たちはララヴィルで地面からそれを構築することができますが、それを使用して実装を容易にしようlaravel-localization パッケージ.

コードの必須条件
準備独自の既存または新しい準備されたLaravelアプリを準備する.

インストールとセットアップ
作曲家を使ってインストールしてください.
composer require mcamara/laravel-localization
このコマンドでこのパッケージの設定ファイルを生成します.
php artisan vendor:publish --provider="Mcamara\LaravelLocalization\LaravelLocalizationServiceProvider"
そして、パッケージのミドルウェアをapp\Http\Kernel.php :
protected $routeMiddleware = [

    ...

    /**** OTHER MIDDLEWARE ****/
    'localize'                => \Mcamara\LaravelLocalization\Middleware\LaravelLocalizationRoutes::class,
    'localizationRedirect'    => \Mcamara\LaravelLocalization\Middleware\LaravelLocalizationRedirectFilter::class,
    'localeSessionRedirect'   => \Mcamara\LaravelLocalization\Middleware\LocaleSessionRedirect::class,
    'localeCookieRedirect'    => \Mcamara\LaravelLocalization\Middleware\LocaleCookieRedirect::class,
    'localeViewPath'          => \Mcamara\LaravelLocalization\Middleware\LaravelLocalizationViewPath::class

    ...

];

局在化のためのルートのグループ化
さて、我々は具体的には、アプリケーション内のこれらの既存のルートを持っているとしましょうroutes\web.php ファイル
Auth::routes();

Route::prefix('products')->name('products.')->middleware('auth')->group(function () {
    Route::get('/', [ProductController::class, 'index'])->name('index');
    Route::post('/', [ProductController::class, 'store'])->name('store');
    Route::get('/create', [ProductController::class, 'create'])->name('create');

    Route::prefix('{product}')->middleware('product_owner')->group(function () {
        Route::get('/', [ProductController::class, 'show'])->name('show');
        Route::patch('/', [ProductController::class, 'update'])->name('update');
        Route::delete('/', [ProductController::class, 'delete'])->name('delete');
        Route::get('/edit', [ProductController::class, 'edit'])->name('edit');
    });
});
新しいルートグループにラップして、プリフィックスを追加する必要があります.
Route::prefix(LaravelLocalization::setLocale())->middleware(['localeSessionRedirect', 'localizationRedirect'])->group(function () {
    Auth::routes();

    Route::prefix('products')->name('products.')->middleware('auth')->group(function () {
        Route::get('/', [ProductController::class, 'index'])->name('index');
        Route::post('/', [ProductController::class, 'store'])->name('store');
        Route::get('/create', [ProductController::class, 'create'])->name('create');

        Route::prefix('{product}')->middleware('product_owner')->group(function () {
            Route::get('/', [ProductController::class, 'show'])->name('show');
            Route::patch('/', [ProductController::class, 'update'])->name('update');
            Route::delete('/', [ProductController::class, 'delete'])->name('delete');
            Route::get('/edit', [ProductController::class, 'edit'])->name('edit');
        });
    });
});
そしてそれです.それが動作するように、ちょうどロケール接頭語でどんな定義されたルートURLにでもアクセスするhttp://your-app.test/en/products 魔法のようにあなたのアプリケーション上のすべてのルートは、ロケールの前置でリダイレクトされます.我々はlocaleSessionRedirect and localizationRedirect ミドルウェアは、任意のルートをリダイレクトしてパッケージの著者に推奨されるロケールを事前にpackage page .
今、あなたは翻訳を開始し、このパッケージを探索することができます、楽しみがある.
使用されるバージョン
Laravel Framework 8.12.3
mcamara/laravel-localization 1.6.1