Laravel

KI-Übersetzung für Laravel mit der Lingo.dev CLI

Was ist Laravel?

Laravel ist ein PHP-Webapplikations-Framework mit ausdrucksstarker, eleganter Syntax. Es bietet integrierte Funktionen für Routing, Authentifizierung, Sessions und Caching, um moderne Webanwendungen zu entwickeln.

Was ist Lingo.dev CLI?

Lingo.dev ist eine KI-gestützte Übersetzungsplattform. Die Lingo.dev CLI liest Quelldateien, sendet übersetzbare Inhalte an Large Language Models und schreibt die übersetzten Dateien zurück in Ihr Projekt.

Über diesen Leitfaden

Dieser Leitfaden erklärt, wie man die Lingo.dev CLI in einer Laravel-Anwendung einrichtet. Sie lernen, wie man ein Laravel-Projekt mit Lokalisierungsunterstützung erstellt, eine Übersetzungspipeline konfiguriert und Sprachumschaltung implementiert.

Schritt 1. Einrichten eines Laravel-Projekts

  1. Installieren Sie PHP und Composer:

    /bin/bash -c "$(curl -fsSL https://php.new/install/mac/8.4)"
    
  2. Installieren Sie Laravel global:

    composer global require laravel/installer
    
  3. Erstellen Sie ein neues Laravel-Projekt:

    laravel new example-app
    

    Bei Aufforderung:

    • Wählen Sie "None" für den Projekttyp
    • Wählen Sie "SQLite" für die Datenbank
  4. Navigieren Sie in das Projektverzeichnis:

    cd example-app
    

Schritt 2. Quellinhalt erstellen

  1. Veröffentlichen Sie die Standard-Sprachdateien von Laravel:

    php artisan lang:publish
    

    Dies erstellt ein lang/en-Verzeichnis mit Übersetzungsdateien wie lang/en/auth.php.

Schritt 3. Konfigurieren der CLI

Erstellen Sie im Stammverzeichnis des Projekts eine i18n.json-Datei:

{
  "$schema": "https://lingo.dev/schema/i18n.json",
  "version": 1.8,
  "locale": {
    "source": "en",
    "targets": ["es"]
  },
  "buckets": {
    "php": {
      "include": ["lang/[locale]/*.php"]
    }
  }
}

Diese Datei definiert:

  • die Dateien, die die Lingo.dev CLI übersetzen soll
  • die Sprachen, zwischen denen übersetzt werden soll

In diesem Fall übersetzt die Konfiguration PHP-Sprachdateien von Englisch nach Spanisch.

Es ist wichtig zu beachten, dass:

  • [locale] ein Platzhalter ist, der zur Laufzeit ersetzt wird. Er stellt sicher, dass Inhalte von einem Ort (z.B. lang/en/auth.php) gelesen und an einen anderen Ort (z.B. lang/es/auth.php) geschrieben werden.
  • Die Lingo.dev CLI wird alle PHP-Dateien im Sprachverzeichnis übersetzen, die diesem Muster entsprechen.

Weitere Informationen finden Sie unter i18n.json-Konfiguration.

Schritt 4. Übersetzen Sie den Inhalt

  1. Registrieren Sie sich für ein Lingo.dev-Konto.

  2. Melden Sie sich über die CLI bei Lingo.dev an:

    npx lingo.dev@latest login
    
  3. Führen Sie die Übersetzungspipeline aus:

    npx lingo.dev@latest run
    

    Die CLI erstellt ein Verzeichnis lang/es/ zum Speichern der übersetzten Inhalte und eine i18n.lock-Datei, um zu verfolgen, was bereits übersetzt wurde (um unnötige Neuübersetzungen zu vermeiden).

Schritt 5. Verwenden Sie die Übersetzungen

  1. Erstellen Sie Middleware, um das Gebietsschema aus der Route zu setzen:

    php artisan make:middleware SetLocaleFromRoute
    
  2. Aktualisieren Sie die generierte Datei app/Http/Middleware/SetLocaleFromRoute.php:

    <?php
    namespace App\Http\Middleware;
    
    use Closure;
    use Illuminate\Http\Request;
    use Illuminate\Support\Facades\App;
    use Symfony\Component\HttpFoundation\Response;
    
    class SetLocaleFromRoute
    {
        /**
         * Handle an incoming request.
         *
         * @param  \Closure(\Illuminate\Http\Request): (\Symfony\Component\HttpFoundation\Response)  $next
         */
        public function handle(Request $request, Closure $next): Response
        {
            // 'locale' kommt vom {locale} Routenparameter
            if ($locale = $request->route('locale')) {
                App::setLocale($locale); // setzt das Gebietsschema für diese Anfrage
            }
    
            return $next($request);
        }
    }
    
  3. Registrieren Sie die Middleware in bootstrap/app.php:

    <?php
    
    use Illuminate\Foundation\Application;
    use Illuminate\Foundation\Configuration\Exceptions;
    use Illuminate\Foundation\Configuration\Middleware;
    use App\Http\Middleware\SetLocaleFromRoute;
    
    return Application::configure(basePath: dirname(__DIR__))
        ->withRouting(
            web: __DIR__.'/../routes/web.php',
            commands: __DIR__.'/../routes/console.php',
            health: '/up',
        )
        ->withMiddleware(function (Middleware $middleware) {
            $middleware->alias([
                'setLocale' => SetLocaleFromRoute::class,
            ]);
        })
        ->withExceptions(function (Exceptions $exceptions): void {
            //
        })->create();
    
  4. Konfigurieren Sie Routen mit Gebietsschema-Präfixen in routes/web.php:

    <?php
    
    use Illuminate\Support\Facades\Route;
    
    Route::redirect('/', '/en'); // Standard ist Englisch
    
    Route::prefix('{locale}')
        ->whereIn('locale', ['en', 'es'])
        ->middleware('setLocale')
        ->group(function () {
            Route::get('/', function () {
                return view('welcome');
            })->name('home');
        });
    
  5. Verwenden Sie die __-Hilfsfunktion, um lokalisierte Inhalte in Ihren Views anzuzeigen:

    <!DOCTYPE html>
    <html lang="{{ str_replace('_', '-', app()->getLocale()) }}">
        <head>
            <meta charset="utf-8">
            <meta name="viewport" content="width=device-width, initial-scale=1">
            <title>{{ config('app.name', 'Laravel') }}</title>
        </head>
        <body>
            <nav>
              <a href="{{ route('home', ['locale' => 'en']) }}" class="underline mr-4">English</a>
              <a href="{{ route('home', ['locale' => 'es']) }}" class="underline">Español</a>
            </nav>
    
            <p class="mb-6">{{ __('auth.throttle') }}</p>
        </body>
    </html>
    
  6. Starten Sie den Entwicklungsserver:

    npm install
    npm run build
    composer run dev
    
  7. Navigieren Sie zu folgenden URLs: