feat: lang middleware and filament translations

This commit is contained in:
2026-05-21 14:57:52 +02:00
parent f24999d7fb
commit 52a2104fdf
16 changed files with 316 additions and 95 deletions
+45
View File
@@ -0,0 +1,45 @@
<?php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Http\Request;
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
{
app()->setLocale($this->resolveLocale($request));
return $next($request);
}
private function resolveLocale(Request $request): string
{
$supportedLocales = config('app.supported_locales', ['fr', 'en']);
$requestedLocale = $request->query('locale') ?: $request->header('X-Locale');
if (is_string($requestedLocale)) {
$normalizedLocale = $this->normalizeLocale($requestedLocale);
if (in_array($normalizedLocale, $supportedLocales, true)) {
return $normalizedLocale;
}
}
return $request->getPreferredLanguage($supportedLocales) ?? config('app.locale');
}
private function normalizeLocale(string $locale): string
{
$locale = strtolower(str_replace('_', '-', $locale));
return explode('-', $locale)[0];
}
}
+4
View File
@@ -25,9 +25,13 @@ class UserResource extends JsonResource
'bio' => $this->bio,
'accountVerified' => $this->account_verified_at !== null,
'physicalActivityLevel' => $this->physical_activity_level,
'physicalActivityLevelLabel' => $this->physical_activity_level?->getLabel(),
'weightGoal' => $this->weight_goal,
'weightGoalLabel' => $this->weight_goal?->getLabel(),
'pacePreference' => $this->pace_preference,
'pacePreferenceLabel' => $this->pace_preference?->getLabel(),
'sex' => $this->sex,
'sexLabel' => $this->sex?->getLabel(),
'dateOfBirth' => $this->date_of_birth?->toDateString(),
'nutritionGoals' => [
'calories' => (int) $this->daily_calorie_goal,