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'));
}
}
1 comment
Hocam merhaba, videonuz ve bu sayfada verdiğiniz bilgiler için teşekkür ederim,
Acaba localize olmayan sayfalar ile kullanımı nasıl olur?
Yani yönetim için bütün dillerin olduğu bir panel oluşturdum, oradaki ayarlar için kullanılacak