- Added localization support for API responses in English and Spanish. - Introduced a middleware to set the API locale based on the Accept-Language header. - Updated various exception messages and validation responses to use localized strings. - Created new language files for English and Spanish translations. - Refactored existing code to replace hardcoded messages with localized strings. - Added tests to verify localization functionality and response correctness.
34 lines
912 B
PHP
34 lines
912 B
PHP
<?php
|
|
|
|
namespace App\Http\Middleware;
|
|
|
|
use Closure;
|
|
use Illuminate\Http\Request;
|
|
use Illuminate\Support\Facades\App;
|
|
use Symfony\Component\HttpFoundation\Response;
|
|
|
|
class SetApiLocale
|
|
{
|
|
public function handle(Request $request, Closure $next): Response
|
|
{
|
|
if (! $request->is('api/*')) {
|
|
return $next($request);
|
|
}
|
|
|
|
$supportedLocales = config('app.supported_locales', ['es', 'en']);
|
|
$acceptLanguage = $request->header('Accept-Language');
|
|
$locale = is_string($acceptLanguage) && $acceptLanguage !== ''
|
|
? $request->getPreferredLanguage($supportedLocales)
|
|
: null;
|
|
$locale ??= config('app.locale', 'es');
|
|
|
|
App::setLocale($locale);
|
|
|
|
$response = $next($request);
|
|
$response->headers->set('Content-Language', $locale);
|
|
$response->setVary('Accept-Language', false);
|
|
|
|
return $response;
|
|
}
|
|
}
|