Laravel
El paquete neiderruiz/translate-projects-laravel extrae los textos de __(), trans() y @lang() a lang/<idioma base>.json, los traduce y escribe lang/en.json, lang/pt_BR.json, etc., que Laravel usa directamente.
Requisitos
- PHP 8.1 o superior y Laravel 10, 11, 12 o 13.
- Un proyecto y un API token de Translate Projects. Mira Primeros pasos.
1. Instala el paquete
composer require neiderruiz/translate-projects-laravel
php artisan vendor:publish --tag=translate-config # Opcional
2. Configura el .env
TRANSLATE_PROJECTS_API_KEY=tu_token
APP_LOCALE=es
TRANSLATE_PROJECTS_TARGET_LANGUAGES=en,pt-BR,fr
Clave en config/translate-projects.php | Variable de entorno | Por defecto |
|---|---|---|
api_key | TRANSLATE_PROJECTS_API_KEY | — |
api_url | TRANSLATE_PROJECTS_API_URL | https://api.translateprojects.dev |
default_locale | TRANSLATE_PROJECTS_DEFAULT_LOCALE o APP_LOCALE | en |
target_languages | TRANSLATE_PROJECTS_TARGET_LANGUAGES (separados por comas) | es,fr,de,it |
scan_paths | — | app, resources, routes |
default_locale debe coincidir con el idioma por defecto del proyecto en Translate Projects. Los códigos se pueden escribir como pt-BR, pt_BR o pt-br: el paquete usa pt-BR con la API y pt_BR en el nombre del archivo, como espera Laravel. Si usas php artisan config:cache, ejecuta php artisan config:clear después de cambiar el .env.
3. Marca tus textos
Route::get('/', fn () => __('Bienvenido a mi aplicación'));
<h1>{{ __('Hola mundo') }}</h1>
<p>{{ __('Bienvenido, :name', ['name' => $user->name]) }}</p>
<p>@lang('Este texto también se traduce')</p>
4. Extrae y traduce
php artisan translate:scan # Extrae los textos a lang/es.json
php artisan translate # Traduce a todos los idiomas destino
php artisan translate pt-BR # Solo un idioma
php artisan translate --force # Traduce aunque no haya cambios
translate:scanbusca__('...'),trans('...'),trans_choice('...')y@lang('...')con un texto literal. Añade los textos nuevos alang/<idioma base>.jsony conserva los que ya estaban. Omite las claves de grupo (comoauth.failed) y las de paquetes (pkg::archivo.clave).translatesube los textos solo si cambiaron, espera al backend y escribelang/<idioma>.json. Conserva las entradas que ya había en ese archivo, por ejemplo traducciones hechas a mano.
Archivos que genera
lang/
├── es.json ← idioma base (generado por translate:scan)
├── en.json
├── pt_BR.json
├── fr.json
└── .translate-projects.json ← caché
Caché y --force
En lang/.translate-projects.json se guarda qué versión tiene cada idioma: una segunda ejecución sin cambios hace una sola petición y no traduce nada. Usa --force para traducir de nuevo aunque no haya cambios. Más detalles en Caché y errores.
Errores comunes
El comando nunca deja un archivo a medias ni lo borra.
- Falta
TRANSLATE_PROJECTS_API_KEY: falla sin hacer peticiones. Si usasconfig:cache, ejecutaconfig:clear. No se encontró o no es válido lang/es.json: todavía no extrajiste los textos: ejecutaphp artisan translate:scan.El idioma de origen no es el predeterminadooEl idioma de destino no está activo en tu proyecto: revisa el idioma por defecto del proyecto o activa ese idioma en el panel.- Token inválido o error 4xx: muestra el código y el mensaje de la API y no toca los archivos.
- Error 429, 5xx o de red: reintenta 3 veces; si sigue fallando, deja ese idioma como estaba y continúa con los demás.
- Falta la key de IA (
MISSING_API_KEY): escribe lo que llegó, avisa de cuántos textos faltan y los reintenta en la siguiente ejecución. - Placeholders: si la IA cambia un
:placeholder, esa traducción se descarta y Laravel muestra el texto original.
Limitaciones
- Solo se traducen los archivos JSON (textos usados como clave). Los archivos de grupo
lang/<idioma>/*.phpno se suben. - No se detectan las claves dinámicas como
__($variable).
🚀 Automatiza tus traducciones gratis
Translate Projects es gratuito. Creas tu proyecto, conectas la key de tu proveedor de IA y solo le pagas a él lo que gastes.
- Sin planes ni tarjeta de crédito: Todas las funciones están disponibles desde el primer día.
- Usa tu propia IA: Claude, OpenAI, DeepSeek o Gemini. Tu key se guarda cifrada.
- Red de traducciones compartida: Si un texto ya fue traducido, lo recibes al instante sin gastar tu key.
- Panel de administración: Revisa y edita todas tus traducciones desde un solo lugar.
Estamos aquí para ayudarte
Si tienes alguna pregunta, necesitas ayuda o quieres contribuir, no dudes en contactarme. Estoy a tu disposición para apoyarte en lo que necesites.
- Sitio web: neiderruiz.com
- GitHub: @neiderruiz
- Twitter: @neiderruiz
- YouTube: Neider Ruiz
Apoya el Proyecto
Si este proyecto te ha sido útil, te invito a invitarme un café. Tu apoyo me ayuda a seguir mejorando y creando contenido de valor. ¡Gracias por estar aquí! ☕