bibrokhim/laravel-language-header
Laravel middleware/package that detects and sets the application locale from the HTTP Accept-Language header. Helps automatically localize responses based on the user’s browser or client language preferences, with simple Laravel integration.
Accept-Language) should dictate UI language without manual selection.web or api groups) without modifying core routing logic.X-Locale) via config, accommodating API-first or legacy system requirements.Accept-Language headers contain unsupported values (e.g., xx-XX). Requires explicit validation in middleware or config.es-419 vs. es) be handled? Fallback to default or error?X-Locale override Accept-Language, or vice versa? Configurable?Content-Language headers) or only web views?trans() or third-party packages (e.g., Spatie, Laravel Localization)?array_key_first() or similar).app/config/app.php). May conflict with Spatie/Laravel-localization or laravel-i18n if both set locales.composer require bibrokhim/laravel-language-header
php artisan vendor:publish --provider="Bibrokhim\LanguageHeader\LanguageHeaderServiceProvider"
config/language-header.php) to customize:
Accept-Language, X-Locale).'headers' => ['Accept-Language', 'X-Locale'],
'fallback_locale' => 'en',
'supported_locales' => ['en', 'es', 'fr'],
app/Http/Kernel.php:
\Bibrokhim\LanguageHeader\LanguageHeaderMiddleware::class,
Place before LocalizationMiddleware (if using Spatie) or after auth middleware (to respect user preferences).app()->setLocale(), this package’s middleware will preempt that. Decide on execution order.Content-Language headers in JSON responses. May require custom middleware or response filters.curl -H "X-Locale: es").en, 20% es, 10% unsupported).language_header.locale).\Log::debug('Locale resolved:', ['locale' => app()->getLocale(), 'headers' => request()->header()]);
Accept-Language: en-US,en;q=0.9).supported_locales array).X-Locale: ../../malicious) require input sanitization.| Failure Scenario | Impact | Mitigation |
|---|---|---|
Missing Accept-Language |
Fallback to default locale. | Configure fallback_locale in config. |
| Unsupported locale header | Fallback or error (configurable). | Whitelist locales; log unsupported. |
| Middleware execution order | Locale overridden by other logic. | Place middleware first in stack. |
| Package abandonment | No updates/security patches. | Vendorize or fork. |
| Header injection attacks | Locale spoofing (e.g., XSS). | Validate against supported_locales. |
X-Locale > Accept-Language) is configurable.app()->setLocale() calls.Content-Language (if required).How can I help you explore Laravel packages today?