codezero/browser-locale
Parse the browser’s Accept-Language header to get a visitor’s preferred locales in order. Returns primary locale or full locale list with language/region parts. Works in vanilla PHP and integrates with Laravel via the container.
LocaleFilter, LanguageFilter) allows for granular locale extraction, supporting use cases like:
en from en-US).de-DE → /de).q=0.8 preferences).LocaleMiddleware to set app()->setLocale()).ServiceProvider (Laravel 5.5+), requiring only:
$browser = app(\CodeZero\BrowserLocale\BrowserLocale::class);
$browser = new \CodeZero\BrowserLocale\BrowserLocale($_SERVER["HTTP_ACCEPT_LANGUAGE"]);
Accept-Language headers).null or empty arrays for invalid input.zh-Hans vs. zh-Hant). May need pairing with a locale whitelist (e.g., config/app.php).Cache::remember) to avoid reprocessing per request.Request::getPreferredLanguage() could replace this for basic use cases, but lacks granular filters.config/app.php)?en-GB for US-only apps)?\CodeZero\BrowserLocale\Filters\Filter interface?config/supported_locales.php)?Request::getPreferredLanguage() (Laravel 9+) suffice, or does this package’s filter system justify the dependency?app()->setLocale() based on browser preferences.Accept-Language headers in HTTP requests (e.g., for REST APIs).$_SERVER["HTTP_ACCEPT_LANGUAGE"].App::getLocale(), Request::header('Accept-Language')).q value handling, no filters).$browser = app(\CodeZero\BrowserLocale\BrowserLocale::class);
$locale = $browser->getLocale();
// app/Http/Middleware/SetLocale.php
public function handle(Request $request, Closure $next) {
$browser = app(\CodeZero\BrowserLocale\BrowserLocale::class);
$locale = $browser->getLocale()?->locale ?? config('app.fallback_locale');
app()->setLocale($locale);
return $next($request);
}
// app/Services/LocaleService.php
public function getPreferredLocales(): array {
return app(\CodeZero\BrowserLocale\BrowserLocale::class)->getLocales();
}
return response()->json($data, 200, [
'Accept-Language' => $browser->getLocale()?->locale ?? 'en-US',
]);
$filter = new \CodeZero\BrowserLocale\Filters\LanguageFilter;
$languages = $browser->filter($filter); // ['en', 'nl']
$supportedLocales = ['en-US', 'es-ES', 'fr-FR'];
$locale = collect($browser->getLocales())
->first(fn ($l) => in_array($l->locale, $supportedLocales))
?->locale ?? 'en-US';
ServiceProvider.Request::getPreferredLanguage() for basic use cases (but lacks filters).null/undefined HTTP_ACCEPT_LANGUAGE (returns null).en-US,en;q=0.8, → ['en-US', 'en']).BrowserLocale in one critical path (e.g., homepage language detection).SetLocale middleware or a LocaleService.Cache::remember) if performance is critical.config/app.php overrides).composer update codezero/browser-locale).if ($locale === null) {
Log::warning('No valid locale detected for request', ['headers' => $request->header()]);
}
Request::getPreferredLanguage() may reduce reliance in future, but this package’s filters justify continued use.$_SERVER["HTTP_ACCEPT_LANGUAGE"] (e.g., browser settings or proxy stripping headers).config/supported_locales.php).$browser = new \Code
How can I help you explore Laravel packages today?