Sep 01, 2024
Mehrsprachigkeit mit Laravel
Es ist nicht ungewöhnlich, dass Kunden mehrsprachige Anwendungen oder Websites benötigen. Einige CMS bieten mehrsprachige Unterstützung von Haus aus. Wenn jedoch aufgrund der Komplexität eine individuelle Lösung erforderlich ist, macht eine Eigenentwicklung oft mehr Sinn. Laravel bietet als eines der meistgenutzten PHP-Frameworks die wichtigsten Bausteine für Anwendungen und Websites ohne zusätzliche Pakete.
Die Middleware wird einfach per Artisan erzeugt:
$ php artisan make:middleware SetLocaleMiddleware
INFO Middleware [app/Http/Middleware/SetLocaleMiddleware.php] created successfully.
...und in bootstrap/app.php registriert:
->withMiddleware(function (Middleware $middleware) {
// ...
$middleware->append(App\Http\Middleware\SetLocaleMiddleware::class);
// ...
})
Dann wird die Middleware mit der Logik zur Spracherkennung befüllt. Zu beachten: Englisch ist die Standard-Locale in der Laravel-Konfiguration.
public function handle(Request $request, Closure $next): Response
{
$uri = $request->getRequestUri();
if ($uri === '/de' || str_starts_with($uri, '/de/')) {
app()->setLocale('de');
} elseif ($uri !== '/en' && !str_starts_with($uri, '/en/')) {
$acceptLanguage = $request->header('Accept-Language', app()->getLocale());
if (str_starts_with($acceptLanguage, 'de')) {
app()->setLocale('de');
}
}
return $next($request);
}
Für die Weiterleitung zur richtigen Sprache beim Aufruf der Startseite wird routes/web.php angepasst:
Route::get('/', function () {
return response()->redirectTo(app()->getLocale());
});
Die ermittelte Locale wird abgerufen und Besucher direkt zur passenden Sprache weitergeleitet, wie im Accept-Language-Header des Browsers angegeben. Wird keine Sprache erkannt, greift die Standardsprache Englisch.
Übersetzungen können nun einfach per __() ausgegeben werden. Die aktuelle Sprache ist jederzeit per app()->getLocale() abrufbar.
Viel Spaß beim Übersetzen!
