🌍 Pre-generate Translations (traducciones DE/FR/EN)
Archivo: agentes/marketing/pregenerate-translations.ts · Plist: _(ninguno)_ · Horario: Manual / one-shot (proceso largo)
Qué hace
Pre-genera con IA las traducciones a alemán, francés e inglés (título + descripción HTML) de TODOS los productos activos y las guarda en JSON local, sin subirlas a Shopify. Es la fase de preparación para resolver el issue language_mismatch de Merchant: cuando el usuario añada el scope write_translations a la app, push-translations.ts sube todo en ~1 minuto. Es idempotente: salta productos que ya tienen las 3 traducciones completas.
Cómo funciona
1. Carga .env y pagina productos activos.
2. Por producto comprueba si ya existe data/translations/{id}.json con title+body en de/fr/en; si está completo, lo salta.
3. claudeTranslate() invoca el binario claude (/Users/user/.local/bin/claude) con un system prompt de traductor e-commerce/SEO que conserva marcas, códigos de modelo y specs; traduce título y body por idioma.
4. Escribe/actualiza el JSON por producto. Pausa cada 10 productos para no saturar la API.
Datos/APIs
- Shopify Admin API (
2024-10): products read. - claude CLI local (
/Users/user/.local/bin/claude) para traducir. - Vars .env:
SHOPIFY_STORE,SHOPIFY_ACCESS_TOKEN.
Cómo probarlo
cd /Users/user/rifai-agents && npx tsx agentes/marketing/pregenerate-translations.ts
Espera: por cada producto [i/N] <título> con ✓de ✓fr ✓en (o ✗ si falla) y al final el total pre-traducido + ruta data/translations/. No escribe en Shopify, solo genera JSON. Tarda mucho (3 llamadas LLM por producto); se puede cortar y reanudar (idempotente).
Si se rompe / recuperar
- Sin plist. Al ser reanudable, basta con re-ejecutar: continúa donde lo dejó.
- Si
claudeCLI no está en/Users/user/.local/bin/claude, las traducciones salen vacías. - Logs: stdout (redirigir a
/Users/user/rifai-agents/logs/pregenerate-translations.log). - Salida:
data/translations/{productId}.json.
Cómo replicarlo
- Paginación de productos + un JSON por producto como caché reanudable.
- system prompt de traducción que preserva marcas/modelos/specs.
- Separación generar (este) / subir (
push-translations.ts) para no depender del scope write_translations.