Laravel

Traduction IA pour Laravel avec Lingo.dev CLI

Qu'est-ce que Laravel ?

Laravel est un framework d'application web PHP avec une syntaxe expressive et élégante. Il fournit des fonctionnalités intégrées pour le routage, l'authentification, les sessions et la mise en cache afin de créer des applications web modernes.

Qu'est-ce que Lingo.dev CLI ?

Lingo.dev est une plateforme de traduction alimentée par l'IA. L'interface en ligne de commande Lingo.dev lit les fichiers sources, envoie le contenu traduisible aux grands modèles de langage et réécrit les fichiers traduits dans votre projet.

À propos de ce guide

Ce guide explique comment configurer Lingo.dev CLI dans une application Laravel. Vous apprendrez comment créer un projet Laravel avec prise en charge de la localisation, configurer un pipeline de traduction et implémenter le changement de langue.

Étape 1. Configurer un projet Laravel

  1. Installer PHP et Composer :

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

    composer global require laravel/installer
    
  3. Créer un nouveau projet Laravel :

    laravel new example-app
    

    Lorsque vous y êtes invité :

    • Sélectionnez « None » pour le type de projet
    • Sélectionnez « SQLite » pour la base de données
  4. Accéder au répertoire du projet :

    cd example-app
    

Étape 2. Créer le contenu source

  1. Publier les fichiers de langue par défaut de Laravel :

    php artisan lang:publish
    

    Cela crée un répertoire lang/en avec des fichiers de traduction tels que lang/en/auth.php.

Étape 3. Configurer l'interface en ligne de commande

À la racine du projet, créez un fichier i18n.json :

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

Ce fichier définit :

  • les fichiers que la CLI Lingo.dev doit traduire
  • les langues entre lesquelles traduire

Dans ce cas, la configuration traduit les fichiers de langue PHP de l'anglais vers l'espagnol.

Il est important de noter que :

  • [locale] est un espace réservé qui est remplacé à l'exécution. Il garantit que le contenu est lu depuis un emplacement (par exemple, lang/en/auth.php) et écrit vers un emplacement différent (par exemple, lang/es/auth.php).
  • La CLI Lingo.dev traduira tous les fichiers PHP du répertoire de langue qui correspondent à ce modèle.

Pour en savoir plus, consultez Configuration i18n.json.

Étape 4. Traduire le contenu

  1. Créez un compte Lingo.dev.

  2. Connectez-vous à Lingo.dev via la CLI :

    npx lingo.dev@latest login
    
  3. Exécutez le pipeline de traduction :

    npx lingo.dev@latest run
    

    La CLI créera un répertoire lang/es/ pour stocker le contenu traduit et un fichier i18n.lock pour suivre ce qui a été traduit (afin d'éviter les retraductions inutiles).

Étape 5. Utiliser les traductions

  1. Créez un middleware pour définir la locale à partir de la route :

    php artisan make:middleware SetLocaleFromRoute
    
  2. Mettez à jour le fichier généré 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' comes from the {locale} route parameter
            if ($locale = $request->route('locale')) {
                App::setLocale($locale); // sets the locale for this request
            }
    
            return $next($request);
        }
    }
    
  3. Enregistrez le middleware dans 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. Configurez les routes avec des préfixes de locale dans routes/web.php :

    <?php
    
    use Illuminate\Support\Facades\Route;
    
    Route::redirect('/', '/en'); // default to English
    
    Route::prefix('{locale}')
        ->whereIn('locale', ['en', 'es'])
        ->middleware('setLocale')
        ->group(function () {
            Route::get('/', function () {
                return view('welcome');
            })->name('home');
        });
    
  5. Utilisez la fonction helper __ pour afficher le contenu localisé dans vos vues :

    <!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. Démarrez le serveur de développement :

    npm install
    npm run build
    composer run dev
    
  7. Accédez aux URL suivantes :