Índice
CI/CD para Localización: Automatizando Traducciones en tu Pipeline de Deployment
Conclusiones Clave
- La integración CI/CD elimina la gestión manual de archivos de traducción y garantiza que las traducciones se entreguen con cada deployment
- La extracción y validación automatizada de strings detecta traducciones faltantes antes de que lleguen a producción
- Los builds activados por webhooks permiten la localización continua — las traducciones se publican en cuanto son aprobadas
- Las verificaciones pre-merge pueden bloquear PRs con strings sin traducir, evitando que localizaciones incompletas lleguen a producción
¿Por qué Automatizar la Localización en CI/CD?
Los flujos de trabajo manuales de localización crean cuellos de botella:
- Los desarrolladores olvidan subir nuevos strings al TMS
- Los archivos traducidos esperan en el TMS hasta que alguien los descargue
- Los conflictos de merge surgen por la colocación manual de archivos
- Las traducciones faltantes se cuelan en producción
La automatización CI/CD resuelve estos problemas convirtiendo la sincronización de traducciones en una parte estándar de cada build y deployment.
Arquitectura del Pipeline
Code Push → CI Triggered → Extract Strings → Push to TMS
↓
Production ← Deploy ← Build ← Pull Translations ← Translations Complete (webhook)
Implementación con GitHub Actions
En Pull Request: Validar Traducciones
name: Translation Check
on: pull_request
jobs:
check-translations:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Scan for new strings
run: npx better-i18n scan --check
# Falla si se encuentran strings sin traducir
- name: Validate translation files
run: npx better-i18n validate
# Verifica sintaxis JSON, claves faltantes, consistencia de marcadores
En Merge a Main: Sincronizar y Deployer
name: Deploy with Translations
on:
push:
branches: [main]
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Push new strings to TMS
run: npx better-i18n push
env:
BETTER_I18N_TOKEN: ${{ secrets.BETTER_I18N_TOKEN }}
- name: Pull latest translations
run: npx better-i18n pull --all
- name: Build
run: npm run build
- name: Deploy
run: npm run deploy
Al Completar Traducción: Build Activado por Webhook
name: Translation Update
on:
repository_dispatch:
types: [translations-updated]
jobs:
rebuild:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- run: npx better-i18n pull --all
- run: npm run build
- run: npm run deploy
Verificaciones de Validación Automatizadas
Incorpora estas verificaciones en tu CI Pipeline:
| Verificación | Qué Detecta | Cuándo Ejecutar |
|---|---|---|
| Traducciones faltantes | Claves sin traducciones en locales destino | Verificación PR |
| Consistencia de marcadores | {name} en origen pero {nom} en traducción | Verificación PR |
| Sintaxis JSON/XLIFF | Archivos de traducción malformados | Cada build |
| Longitud de string | Traducciones que exceden límites de caracteres en la UI | Verificación PR |
| Claves sin usar | Claves de traducción ya no referenciadas en el código | Programado semanal |
Manejo de Traducciones Incompletas
No todas las traducciones estarán completas al momento del deployment. Estrategias:
- Fallback al idioma fuente — Mostrar inglés si falta la traducción (la más común)
- Bloquear deployment — Solo deployer cuando todos los locales destino están 100% traducidos (la más estricta)
- Umbral de porcentaje — Deployer si el locale está >90% traducido, bloquear si está por debajo
- Prioridad por clave — Los strings críticos de UI deben traducirse, los no críticos pueden hacer fallback
Preguntas Frecuentes
¿Debo hacer commit de los archivos de traducción en git? Sí. Hacer commit de los archivos de traducción garantiza que los builds funcionen incluso si la API del TMS no está disponible. El CI Pipeline obtiene traducciones actualizadas y hace commit de los cambios automáticamente.
¿Cómo evito conflictos de merge en archivos de traducción? Usa el TMS como fuente de verdad. CI obtiene traducciones frescas en cada build, sobreescribiendo archivos locales. Los desarrolladores nunca editan los archivos de traducción manualmente.
¿Qué hago si las traducciones no están listas cuando necesito deployer? Usa estrategias de fallback (mostrar idioma fuente para strings no traducidos). Monitorea el porcentaje de completitud de traducción y configura alertas cuando caiga por debajo del umbral.
¿Cómo gestiono el desarrollo basado en ramas? Pusha strings de feature branches a namespaces o ramas separadas del TMS. Fusiona las traducciones cuando el feature branch se fusiona con main.
¿Puedo ejecutar CI/CD de localización para aplicaciones móviles también? Sí. Los mismos principios aplican — push de strings al TMS, pull de traducciones durante el build, validar antes del lanzamiento. Específico para móvil: incluir metadatos ASO en el pipeline y validar formatos de archivo .strings/.xml.