Add locale management middleware: Introduced SetLocale middleware to handle language settings based on user session and available languages. Updated app bootstrap to include the middleware, ensuring proper localization support throughout the application. Enhanced language selector component for improved user experience.

This commit is contained in:
Ümit Tunç
2025-11-04 15:40:53 -03:00
parent 8a99a36ee9
commit f1b1f6e266
3 changed files with 57 additions and 5 deletions
+52
View File
@@ -0,0 +1,52 @@
<?php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\App;
use Symfony\Component\HttpFoundation\Response;
class SetLocale
{
/**
* Handle an incoming request.
*
* @param \Closure(\Illuminate\Http\Request): (\Symfony\Component\HttpFoundation\Response) $next
*/
public function handle(Request $request, Closure $next): Response
{
// Session'dan locale'i al, yoksa varsayılan dil kodunu kullan
$locale = session('locale');
// Eğer session'da locale yoksa, varsayılan dil kodunu kullan
if (!$locale) {
if (function_exists('default_language_code')) {
$locale = default_language_code();
} else {
$locale = config('app.locale');
}
}
// Aktif dilleri veritabanından kontrol et
if (function_exists('available_language_codes')) {
$availableLocales = available_language_codes();
} else {
$availableLocales = ['tr', 'en'];
}
// Locale'i aktif diller arasında kontrol et
if (in_array($locale, $availableLocales)) {
App::setLocale($locale);
} else {
// Geçersiz locale ise varsayılan locale'e dön
if (function_exists('default_language_code')) {
App::setLocale(default_language_code());
} else {
App::setLocale(config('app.locale'));
}
}
return $next($request);
}
}
+3 -1
View File
@@ -11,7 +11,9 @@ return Application::configure(basePath: dirname(__DIR__))
health: '/up', health: '/up',
) )
->withMiddleware(function (Middleware $middleware): void { ->withMiddleware(function (Middleware $middleware): void {
// $middleware->web(append: [
\App\Http\Middleware\SetLocale::class,
]);
}) })
->withExceptions(function (Exceptions $exceptions): void { ->withExceptions(function (Exceptions $exceptions): void {
// //
@@ -1,15 +1,13 @@
@php @php
$languages = available_languages(); $languages = available_languages();
$currentLang = current_language_code(); $currentLang = current_language_code();
$currentLanguage = $languages->firstWhere('code', $currentLang);
@endphp @endphp
<div class="navbar-other w-full !flex !ml-auto"> <div class="navbar-other w-full !flex !ml-auto">
<ul class="navbar-nav !flex-row !items-center !ml-auto"> <ul class="navbar-nav !flex-row !items-center !ml-auto">
<li class="nav-item dropdown language-select uppercase group"> <li class="nav-item dropdown language-select uppercase group">
<a class="nav-link dropdown-item dropdown-toggle xl:!text-[.85rem] lg:!text-[.85rem] max-lg:!text-[1.05rem]" href="#" role="button" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> <a class="nav-link dropdown-item dropdown-toggle xl:!text-[.85rem] lg:!text-[.85rem] max-lg:!text-[1.05rem]" href="#" role="button" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
@php
$currentLanguage = $languages->firstWhere('code', $currentLang);
@endphp
@if($currentLanguage) @if($currentLanguage)
{{ strtoupper($currentLanguage->code) }} {{ strtoupper($currentLanguage->code) }}
@else @else
@@ -19,7 +17,7 @@
<ul class="dropdown-menu group-hover:shadow-[0_0.25rem_0.75rem_rgba(30,34,40,0.15)]"> <ul class="dropdown-menu group-hover:shadow-[0_0.25rem_0.75rem_rgba(30,34,40,0.15)]">
@foreach($languages as $language) @foreach($languages as $language)
<li class="nav-item"> <li class="nav-item">
<a class="dropdown-item hover:!text-[#747ed1] {{ $language->code === $currentLang ? 'active' : '' }}" <a class="dropdown-item hover:!text-[#747ed1] {{ $language->code === $currentLang ? 'active font-bold !text-[#3f78e0]' : '' }}"
href="{{ route('language.switch', $language->code) }}"> href="{{ route('language.switch', $language->code) }}">
{{ strtoupper($language->code) }} {{ strtoupper($language->code) }}
</a> </a>