Merhabalar, Laravel projenize çoklu dil özelliğini hiçbir paket kullanmadan nasıl eklersiniz bundan bahsedelim.

Öncelikle web.php dosyasındaki Route’larımızı bir grup içine alalım.

Route::group(['prefix' => '{locale?}', 'middleware' => 'localize'], function () {
    // Route'larınız buraya gelecek
});

Yukarıda, Route::group() için localize adında bir middleware kullandık. Hemen bu middleware dosyamızı oluşturalım.

php artisan make:middleware LocalizeMiddleware

Oluşturulan dosyayı şu şekilde güncelleyin.

<?php

namespace App\Http\Middleware;

use Closure;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\URL;

class LocalizeMiddleware
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle(Request $request, Closure $next)
    {
        if (!in_array($request->locale, config('app.supported_locales'))) {
            $base = url()->to('');
            $path = str_replace($base, '', $request->fullUrl());

            return redirect()->to($base . '/' . config('app.locale') . $path);
        }

        app()->setLocale($request->locale);

        URL::defaults(['locale' => $request->locale]);

        return $next($request);
    }
}

Desteklenen dilleri config('app.supported_locales') koduyla çağırdığımız için config/app.php dosyasının içine şu kodu yapıştırın.

/*
 |--------------------------------------------------------------------------
 | Supported Locales of Application
 |--------------------------------------------------------------------------
*/

'supported_locales' => [
    'tr',
    'en',
    'ar',
],

Kernel.php üzerinde ‘localize’ adını tanımlayın.

/**
 * The application's route middleware.
 *
 * These middleware may be assigned to groups or used individually.
 *
 * @var array
 */
protected $routeMiddleware = [
    // ... //
    'localize' => \App\Http\Middleware\LocalizeMiddleware::class,
];
Önemli
‘localize’ middleware ine sahip route ların metodlarında $locale parametresini eklemek zorundasınız.

Örnek verecek olursak PostController adında bir dosyamız olsun.

<?php

namespace App\Http\Controllers;

use App\Models\Post;
use Illuminate\View\View;

class PostController extends Controller
{
    public function index(): View
    {
        //
    }

    // show() metodunda Post $post parametresinden önce string $locale parametresini kullanmak zorundayım, aksi durumda hata verecektir.
    // 'localize' middleware ine sahip tüm metodlar bu şekilde kullanılmalıdır.
    public function show(string $locale, Post $post): View
    {
        return view('posts.show', compact('post'));
    }
}
Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir