Ingeniería//9 min de lectura

Translation Automation: Optimiza la localización con CI/CD y Webhooks

Eray Gündoğmuş
Compartir

Translation Automation: Optimiza la localización con CI/CD y Webhooks

Puntos clave

  • La translation automation elimina las transferencias manuales de archivos entre desarrolladores y traductores, reduciendo los tiempos de ciclo de localización
  • La integración con CI/CD permite la localización continua donde los nuevos strings se extraen, traducen y sincronizan automáticamente
  • Los webhooks permiten a las plataformas TMS activar acciones (builds, notificaciones, deployments) cuando se completan las traducciones
  • La automatización reduce el riesgo de publicar contenido no traducido o con traducciones desactualizadas
  • Un flujo de trabajo bien automatizado puede reducir el tiempo de respuesta de localización de semanas a horas

¿Qué es la Auto Translation?

En esencia, la auto translation es la práctica de eliminar pasos manuales del flujo de trabajo de traducción para que el contenido pase de la lengua de origen a los idiomas de destino con una intervención humana mínima. El término abarca un espectro amplio: desde una simple llamada a la API de Google Translate, hasta una pipeline completamente orquestada que detecta nuevos strings en tu codebase, los traduce con IA consciente del contexto, los enruta a través de revisión humana y fusiona las traducciones aprobadas de vuelta en tu repositorio como un pull request.

La automatic translation importa porque los equipos de software modernos entregan continuamente. Si tu proceso de traducción requiere exportaciones manuales de archivos, coordinación por correo electrónico e importaciones manuales, se convierte en el cuello de botella que retrasa cada lanzamiento internacional. La auto translation elimina ese cuello de botella.

Existen tres niveles de madurez de automatic translation:

  1. Auto translation básica: Un desarrollador llama a una API MT (DeepL, Google Translate, Azure Translator) para traducir un archivo y luego integra el resultado manualmente. Rápido para tareas únicas, pero no escala.
  2. Traducción semi-automatizada: Un TMS observa tu repositorio o CMS en busca de cambios, aplica translation memory y machine translation automáticamente, luego notifica a los revisores humanos. La mayor parte de la pipeline se ejecuta sin intervención, pero los humanos aprueban antes de publicar.
  3. Pipelines de traducción totalmente automatizadas: Flujos de trabajo integrados con CI/CD donde los cambios de strings se detectan al hacer merge, se traducen mediante IA, se validan mediante quality gates (comprobaciones de placeholders, validación de longitud, umbrales de completitud) y se sincronizan automáticamente si todas las comprobaciones pasan. La revisión humana se reserva para los tipos de contenido que la requieren (copy de marketing, textos legales).

El resto de esta guía se centra en los niveles 2 y 3: los enfoques basados en CI/CD y webhooks que hacen de la automatic translation una parte sostenible de tu flujo de trabajo de desarrollo, no un atajo puntual.

¿Por qué automatizar la traducción?

En un flujo de trabajo de localización manual, los desarrolladores extraen archivos de traducción, los envían por correo electrónico a traductores o los suben a un TMS, esperan las traducciones, descargan los archivos completados y los fusionan de vuelta en la codebase. Cada transferencia introduce retrasos y oportunidades de error.

La translation automation elimina estas transferencias conectando directamente tu repositorio de código fuente con tu sistema de gestión de traducciones. Cuando los desarrolladores hacen commit de cambios, los strings nuevos o modificados se detectan automáticamente y se envían para su traducción. Cuando los traductores completan su trabajo, las traducciones se sincronizan automáticamente de vuelta.

La pipeline de localización automatizada

Una pipeline automatizada típica sigue este flujo:

El desarrollador hace commit del código
        ↓
CI/CD detecta archivos de traducción modificados
        ↓
TMS CLI empuja strings nuevos/modificados al TMS
        ↓
TMS aplica translation memory (coincidencias instantáneas)
        ↓
Strings sin coincidencia → pre-traducción MT o asignación humana
        ↓
El traductor completa las traducciones en el TMS
        ↓
Webhook se activa: "translations completed"
        ↓
CI/CD obtiene las traducciones completadas de vuelta al repo
        ↓
PR creado con nuevas traducciones
        ↓
Revisar, mergear, desplegar

Patrones de integración CI/CD

Ejemplo de GitHub Actions

La mayoría de las plataformas TMS proporcionan herramientas CLI que se pueden usar en pipelines CI/CD:

# .github/workflows/sync-translations.yml
name: Sync Translations

on:
  push:
    branches: [main]
    paths:
      - 'src/locales/en/**'

jobs:
  push-sources:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Push source strings to TMS
        run: |
          npx @better-i18n/cli push \
            --project your-org/your-project \
            --source src/locales/en
        env:
          BETTER_I18N_TOKEN: ${{ secrets.BETTER_I18N_TOKEN }}

Obtener traducciones según un calendario

# .github/workflows/pull-translations.yml
name: Pull Translations

on:
  schedule:
    - cron: '0 */6 * * *'  # Cada 6 horas
  workflow_dispatch:       # Activación manual

jobs:
  pull-translations:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Pull completed translations
        run: |
          npx @better-i18n/cli pull \
            --project your-org/your-project \
            --target src/locales
        env:
          BETTER_I18N_TOKEN: ${{ secrets.BETTER_I18N_TOKEN }}
      - name: Create PR if translations changed
        uses: peter-evans/create-pull-request@v6
        with:
          title: 'chore(i18n): update translations'
          commit-message: 'chore(i18n): pull latest translations from TMS'
          branch: i18n/update-translations

GitLab CI/CD

# .gitlab-ci.yml
push-sources:
  stage: sync
  only:
    changes:
      - src/locales/en/**
  script:
    - npx @better-i18n/cli push --project $PROJECT_ID --source src/locales/en

Flujos de trabajo basados en Webhooks

Los webhooks permiten a tu TMS notificar a tus sistemas cuando ocurren eventos: traducciones completadas, revisiones aprobadas o nuevos strings detectados.

Eventos de Webhook comunes

EventoDisparadorAcción típica
translation.completedTodos los strings para un idioma están traducidosObtener traducciones, crear PR
translation.reviewedLa traducción pasa la revisiónDesplegar a staging
source.updatedNuevos strings de origen detectadosNotificar a los traductores
project.exportedLa exportación de traducción está listaDescargar y mergear

Ejemplo de manejador de Webhook

// Manejador de webhook Express.js
app.post('/webhooks/translations', (req, res) => {
  const { event, language, project } = req.body;

  if (event === 'translation.completed') {
    // Activar el flujo de trabajo de GitHub Actions via API
    triggerWorkflow('pull-translations', {
      language,
      project,
    });
  }

  res.status(200).json({ received: true });
});

Consideraciones sobre formatos de archivo

Diferentes formatos de archivo afectan cómo funciona la automatización:

FormatoFortalezasComún en
JSON (plano/anidado)Fácil de parsear, ampliamente soportadoReact, Vue, Angular
XLIFFEstándar de la industria, preserva metadatosHerramientas empresariales
PO/POTTooling maduro, amigable para traductoresDjango, Rails, PHP
RESXFormato nativo .NETProyectos C#, .NET
ARBEstándar Flutter/DartApps Flutter
Strings/StringsdictFormato nativo iOSApps iOS/macOS
XMLFormato nativo AndroidApps Android

Tu pipeline de automatización necesita manejar el formato específico que usa tu codebase. La mayoría de las herramientas CLI de TMS soportan todos los formatos comunes.

Automatización de extracción de strings

Para proyectos que no usan archivos de traducción separados, la extracción automatizada de strings identifica strings traducibles en el código fuente:

Análisis estático

Las herramientas escanean el código fuente en busca de llamadas a funciones de traducción:

// Estos patrones son detectados por las herramientas de extracción:
t('home.title')
useTranslations('common')
formatMessage({ id: 'greeting' })

Configuración de extracción

{
  "extract": {
    "patterns": ["src/**/*.{tsx,ts}"],
    "functions": ["t", "useTranslations", "formatMessage"],
    "output": "src/locales/en/messages.json"
  }
}

Ejecutar el comando de extracción como un pre-commit hook o paso de CI garantiza que los nuevos strings traducibles siempre se capturen.

Quality gates en pipelines automatizadas

La automatización debe incluir verificaciones de calidad para evitar que las traducciones rotas lleguen a producción:

  1. Validación de placeholders: Verificar que todos los placeholders ({name}, {count}) de los strings de origen existan en las traducciones
  2. Validación de longitud: Marcar traducciones que excedan significativamente la longitud del string de origen (puede causar desbordamiento de UI)
  3. Comprobación de completitud: Asegurarse de que todos los idiomas requeridos cumplan un porcentaje mínimo de traducción antes del deployment
  4. Validación de formato: Verificar que los archivos de traducción sean JSON/XLIFF/PO válidos (sin errores de sintaxis)
# Quality gate en CI
- name: Validate translations
  run: |
    npx @better-i18n/cli validate \
      --source src/locales/en \
      --target src/locales \
      --min-coverage 95

Errores comunes

  1. Sincronización excesiva: Obtener traducciones en cada commit crea PRs ruidosos. Usa en su lugar obtenciones programadas o activadas por webhook.
  2. Falta de contexto: La extracción automatizada captura strings pero no capturas de pantalla ni descripciones. Proporciona contexto a través de comentarios o funciones del TMS.
  3. Conflictos de ramas: Los PRs de traducción pueden entrar en conflicto con las ramas de características. Fusiona las actualizaciones de traducción frecuentemente para minimizar los conflictos.
  4. Gestión de secretos: Los tokens API de TMS deben almacenarse de forma segura en los secretos de CI/CD, no en el repositorio.
  5. Rate limiting: Las llamadas API a las plataformas TMS pueden estar sujetas a rate limiting. Implementa lógica de backoff y retry en los scripts de automatización.

FAQ

¿Con qué frecuencia debo sincronizar las traducciones?

Empuja los strings de origen en cada merge a main (o tu rama principal). Obtén las traducciones ya sea según un calendario (cada 4-6 horas) o mediante webhook cuando las traducciones estén completadas. Evita sincronizar en cada commit a ramas de características — crea ruido innecesario.

¿Debo auto-mergear los PRs de traducción?

Para flujos de trabajo bien establecidos con quality gates (validación de placeholders, comprobación de formato), el auto-merge de PRs de traducción puede ser seguro. Para configuraciones nuevas, requiere revisión manual hasta que confíes en las comprobaciones de calidad. Muchos equipos hacen auto-merge para idiomas no críticos y requieren revisión para mercados principales.

¿Qué pasa si las traducciones rompen el build?

Agrega un check de CI que valide los archivos de traducción antes de mergear. Si un archivo de traducción tiene sintaxis inválida, placeholders faltantes u otros problemas, el PR debería fallar en CI y no mergearse. Esto evita que las traducciones rotas lleguen a producción.

¿Es la auto translation suficientemente buena para producción?

La auto translation — es decir, machine translation completamente automatizada sin revisión humana — es adecuada para herramientas internas, documentación para desarrolladores y contenido de bajo impacto donde la velocidad importa más que el pulido. Para la UI de producto orientada al usuario, copy de marketing y contenido legal, la auto translation debe servir como el primer borrador en una pipeline que incluya revisión humana. El objetivo de la automatic translation en un contexto CI/CD no es eliminar a los humanos, sino eliminar la coordinación manual que los ralentiza.

Comments

Loading comments...