feat: lang middleware and filament translations
This commit is contained in:
@@ -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];
|
||||
}
|
||||
}
|
||||
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user