diff --git a/app/Http/Middleware/SetLocale.php b/app/Http/Middleware/SetLocale.php index d886ab0..d07fe12 100644 --- a/app/Http/Middleware/SetLocale.php +++ b/app/Http/Middleware/SetLocale.php @@ -44,6 +44,8 @@ class SetLocale return $tenantLang; } - return config('app.locale', 'ro'); + // Hard-code fallback la 'ro' — indiferent de APP_LOCALE din env, + // portal-ul client-facing e livrat cu RO ca implicit safe (RU disponibil via switcher). + return 'ro'; } } diff --git a/resources/views/partials/lang-switcher.blade.php b/resources/views/partials/lang-switcher.blade.php index 8b7880c..9143fdc 100644 --- a/resources/views/partials/lang-switcher.blade.php +++ b/resources/views/partials/lang-switcher.blade.php @@ -1,45 +1,37 @@ @php $locales = [ - 'ro' => ['label' => 'RO', 'full' => 'Română', 'flag' => '🇷🇴'], - 'ru' => ['label' => 'RU', 'full' => 'Русский', 'flag' => '🇷🇺'], - 'en' => ['label' => 'EN', 'full' => 'English', 'flag' => '🇬🇧'], + 'ro' => ['label' => 'RO', 'full' => 'Română'], + 'ru' => ['label' => 'RU', 'full' => 'Русский'], + 'en' => ['label' => 'EN', 'full' => 'English'], ]; $current = app()->getLocale(); - // Default: dark-glass style suits colored header (shop, tracking). Override via $style param. $style = $style ?? 'chip'; + $back = urlencode(request()->fullUrl()); @endphp @if ($style === 'chip')
@foreach ($locales as $code => $meta) -
- @csrf - - -
+ + {{ $meta['label'] }} + @endforeach
@else - {{-- light style for pale backgrounds (invitations, auth pages) --}}
@foreach ($locales as $code => $meta) -
- @csrf - -
+ + {{ $meta['label'] }} + @endforeach
@endif diff --git a/routes/web.php b/routes/web.php index 215ea4c..1707ff4 100644 --- a/routes/web.php +++ b/routes/web.php @@ -129,16 +129,23 @@ Route::post('/t/{token}/approve/{kind}/{lineToken}', [\App\Http\Controllers\Trac ->where('lineToken', '[A-Za-z0-9]{16,32}') ->name('tracking.approve'); -// Locale switch — POST /locale/{lang} sets session and persists to user. -Route::post('/locale/{lang}', function (Request $request, string $lang) { +// Locale switch — GET/POST /locale/{lang} sets session and persists to user. +// GET intentionally supported so simple links (no CSRF token) work; anyone +// setting their own language is not a security concern. +Route::match(['get', 'post'], '/locale/{lang}', function (Request $request, string $lang) { if (! in_array($lang, ['ro', 'ru', 'en'], true)) { abort(404); } $request->session()->put('locale', $lang); + $request->session()->save(); // force write to session store before redirecting if ($u = $request->user()) { $u->forceFill(['locale' => $lang])->saveQuietly(); } - return back(); + // Prefer explicit redirect from query, otherwise fall back to referer / homepage + $to = $request->query('redirect') + ?: $request->header('referer') + ?: '/'; + return redirect($to); })->name('locale.switch'); // PWA — manifest pentru panou central (service.mir.md).