Laravel
Traducción con IA para Laravel con Lingo.dev CLI
¿Qué es Laravel?
Laravel es un framework de aplicaciones web PHP con una sintaxis expresiva y elegante. Proporciona funcionalidades integradas para enrutamiento, autenticación, sesiones y almacenamiento en caché para construir aplicaciones web modernas.
¿Qué es Lingo.dev CLI?
Lingo.dev es una plataforma de traducción impulsada por IA. La CLI de Lingo.dev lee archivos fuente, envía contenido traducible a modelos de lenguaje grandes y escribe los archivos traducidos de vuelta a tu proyecto.
Acerca de esta guía
Esta guía explica cómo configurar Lingo.dev CLI en una aplicación Laravel. Aprenderás cómo crear un proyecto Laravel con soporte de localización, configurar un pipeline de traducción e implementar el cambio de idioma.
Paso 1. Configurar un proyecto Laravel
-
Instalar PHP y Composer:
/bin/bash -c "$(curl -fsSL https://php.new/install/mac/8.4)" -
Instalar Laravel globalmente:
composer global require laravel/installer -
Crear un nuevo proyecto Laravel:
laravel new example-appCuando se te solicite:
- Selecciona "None" para el tipo de proyecto
- Selecciona "SQLite" para la base de datos
-
Navegar al directorio del proyecto:
cd example-app
Paso 2. Crear contenido fuente
-
Publicar los archivos de idioma predeterminados de Laravel:
php artisan lang:publishEsto crea un directorio
lang/encon archivos de traducción comolang/en/auth.php.
Paso 3. Configurar la CLI
En la raíz del proyecto, crea un archivo i18n.json:
{
"$schema": "https://lingo.dev/schema/i18n.json",
"version": "1.10",
"locale": {
"source": "en",
"targets": ["es"]
},
"buckets": {
"php": {
"include": ["lang/[locale]/*.php"]
}
}
}
Este archivo define:
- los archivos que el CLI de Lingo.dev debe traducir
- los idiomas entre los que traducir
En este caso, la configuración traduce archivos de idioma PHP del inglés al español.
Es importante tener en cuenta que:
[locale]es un marcador de posición que se reemplaza en tiempo de ejecución. Esto garantiza que el contenido se lea desde una ubicación (por ejemplo,lang/en/auth.php) y se escriba en una ubicación diferente (por ejemplo,lang/es/auth.php).- El CLI de Lingo.dev traducirá todos los archivos PHP en el directorio de idioma que coincidan con este patrón.
Para obtener más información, consulta configuración de i18n.json.
Paso 4. Traducir el contenido
-
Inicia sesión en Lingo.dev a través del CLI:
npx lingo.dev@latest login -
Ejecuta el pipeline de traducción:
npx lingo.dev@latest runEl CLI creará un directorio
lang/es/para almacenar el contenido traducido y un archivoi18n.lockpara realizar un seguimiento de lo que se ha traducido (para evitar retraducciones innecesarias).
Paso 5. Usar las traducciones
-
Crea un middleware para establecer la configuración regional desde la ruta:
php artisan make:middleware SetLocaleFromRoute -
Actualiza el archivo
app/Http/Middleware/SetLocaleFromRoute.phpgenerado:<?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); } } -
Registra el middleware en
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(); -
Configura las rutas con prefijos de configuración regional en
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'); }); -
Usa la función auxiliar
__para mostrar contenido localizado en tus vistas:<!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> -
Inicia el servidor de desarrollo:
npm install npm run build composer run dev -
Navega a las siguientes URL:
- http://localhost:8000/en para contenido en inglés
- http://localhost:8000/es para contenido en español