Middleware neden parametre vermemiz gerekiyor onu anlamadım.
Middleware:
public function handle(Request $request, Closure $next)
{
// Daha önce session a "locale" key i ile bir değer tutulmuşsa onu alıyoruz. Öyle bir kayıt yoksa bize null dönüyor.
$locale = Session::get('locale');
// Session da "locale" key ine sahip bir değer varsa ve config/app.php dosyası içinde tanımladığımız
// available_locales key değerine sahip dizi (array) içinde bu değer var ise; bu değer geçerli bir dildir diyoruz ve setLocale ile dil i güncelliyoruz.
if (isset($locale) && in_array($locale, config('app.available_locales'), true)) {
app()->setLocale($locale);
}
return $next($request);
}
Dil değiştirme ile ilgili EP:
Route::get('select-language/{language}', function ($language) {
// Gelen language değeri, config/app.php de tanımladığımız değerlerden biri değilse validation hatası veriyoruz.
// İsterseniz Route pattern ile de halledebilirsiz
if (!in_array($language, config('app.available_locales'), true)) {
throw ValidationException::withMessages([
'language' => __('Invalid language.')
]);
}
Session::put('locale', $language);
app()->setLocale($language);
return response()->noContent();
});
- Siteye ilk defa giren ziyaretçi session un da "locale" değeri olmadığından default locale ile siteyi görecek.
- {HOST}/select-language/tr adresine giderek dili "Türkçe" olarak güncellendi. Ve session a ekledik.
- Ziyaretçi farklı bir sayfaya girdiğinde tekrar middleware den geçecek ve bu defa session da "locale" değeri olduğundan geçerli dil olarak o dili kullanacak.
Notlar:
- in_array; ilk parametrede verilen değerin, ikinci parametrede verilen array içinde olup olmadığını sorgular. Eğer varsa true, yoksa false döner.
- config helper ile, config klasöründeki ayarlara erişebiliyoruz.