Laravel – Wie man zusätzliche JSON-Übersetzungsdateien nur auf bestimmten Routen lädt

profile
Von Stefan Dreßler
31. März 2023
Laravel – Wie man zusätzliche JSON-Übersetzungsdateien nur auf bestimmten Routen lädt

Wenn deine Laravel-App mit vielen Übersetzungen klarkommen muss, kann es echt hilfreich sein, diese aufzuteilen. Dieser Artikel zeigt dir, wie du die starken Lokalisierungsfunktionen von Laravel erweitern kannst, um zusätzliche JSON-Übersetzungsdateien zu organisieren oder aufzuteilen und sie nur auf bestimmten Routen zu laden. Dazu musst du einfach nur eine Middleware an eine Routengruppe hängen.

Dieser Artikel ist für Laravel 10-Anwendungen geschrieben.

JSON-Übersetzungsdateien hinzufügen

Erstell einen Ordner in deiner Anwendung und füge JSON-Dateien hinzu, die wie deine Sprachumgebungen benannt sind. Das könnte zum Beispiel so aussehen:

/**  
lang/
   vendor/
      landing/
          en.json
          de.json
**/

Füge eine Funktion zu einem Service Provider deiner Wahl hinzu

Im Moment werden diese Übersetzungsdateien nicht geladen. Du kannst sie mit der Laravel-Service-Provider-Funktion loadJsonTranslationsFrom() laden. Du kannst sie zum Beispiel zu deinem AppServiceProvider hinzufügen und später aus der Middleware aufrufen.

// AppServiceProvider

/** Kann aus der Middleware aufgerufen werden */
public function loadLandingTranslations(): void
{
    $this->loadJsonTranslationsFrom(base_path() . '/lang/vendor/landing/');
}

Erstell eine neue Middleware

Erstell eine Middleware und lade deine Übersetzungen mit deiner neuen Service-Provider-Funktion.

class LoadLandingTranslations
{
    /**
     * Bearbeite eine eingehende Anfrage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @param  string|null  $guard
     * @return mixed
     */
    public function handle($request, Closure $next, $guard = null)
    {
        // Lös den Service Provider auf 
        $provider = app()->resolveProvider(\App\Providers\AppServiceProvider::class);
        // Ruf die Funktion auf, die du erstellt hast
        $provider->loadLandingTranslations();

        return $next($request);
    }
}

Middleware registrieren

Registriere die Middleware in deiner Datei kernel.php.

protected $routeMiddleware = [
    ...
    'landing.translations' => \App\Http\Middleware\LoadLandingTranslations::class,
    ...
];

Füge die Middleware zu einer Routengruppe hinzu

Jetzt kannst du diese Middleware an Routengruppen hängen. Alle umschlossenen Routen laden dann zusätzlich deine zusätzlichen JSON-Lokalisierungsdateien. Deine Anwendungsrouten befinden sich wahrscheinlich in deinem Ordner /routes. Füge die Middleware landing.translations zu einer Gruppe hinzu.

Route::group(['middleware' => ['landing.translations']], function () {
    ...
    Route::get('/', 'Web\LandingController@home');
    ...
});

Das war's schon. Deine Übersetzungsdateien werden nur bei Routen mit dieser Middleware geladen.

Wenn dir dieser Artikel geholfen hat oder du Vorschläge oder Ideen hast, schreib einfach eine Nachricht an unser HelpSpace-Supportteam.

Bild von Pro Church Media auf Unsplash