Laravel

Traduction IA pour Laravel avec l'interface en ligne de commande Lingo.dev

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 pour construire des applications web modernes.

Qu'est-ce que Lingo.dev CLI ?

Lingo.dev est une plateforme de traduction alimentée par l'IA. Le CLI Lingo.dev lit les fichiers source, envoie le contenu traduisible aux grands modèles de langage et é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 support de 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 êtes invité :

    • Sélectionnez "None" pour le type de projet
    • Sélectionnez "SQLite" pour la base de données
  4. Naviguer dans le répertoire du projet :

    cd example-app
    

Étape 2. Créer du 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 comme lang/en/auth.php.

Étape 3. Configurer le CLI

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

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

Ce fichier définit :

  • les fichiers que Lingo.dev CLI 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 placeholder qui est remplacé à l'exécution. Il garantit que le contenu est lu à partir d'un emplacement (par exemple, lang/en/auth.php) et écrit à un emplacement différent (par exemple, lang/es/auth.php).
  • Lingo.dev CLI traduira tous les fichiers PHP dans le 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 l'interface en ligne de commande :

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

    npx lingo.dev@latest run
    

    L'interface en ligne de commande 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' provient du paramètre de route {locale}
            if ($locale = $request->route('locale')) {
                App::setLocale($locale); // définit la locale pour cette requête
            }
    
            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'); // par défaut en anglais
    
    Route::prefix('{locale}')
        ->whereIn('locale', ['en', 'es'])
        ->middleware('setLocale')
        ->group(function () {
            Route::get('/', function () {
                return view('welcome');
            })->name('home');
        });
    
  5. Utilisez la fonction d'assistance __ 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. Naviguez vers les URL suivantes :