Proyectos grandes

Lingo.dev CLI proporciona optimizaciones de rendimiento y estrategias de flujo de trabajo para proyectos de localización a gran escala con cientos de miles de claves de traducción, múltiples idiomas y estructuras de contenido complejas.

Para proyectos con contenido extenso, la CLI ofrece procesamiento paralelo e integración CI/CD para gestionar traducciones a escala de manera eficiente.

Procesamiento paralelo

Lingo.dev CLI procesa proyectos grandes más rápidamente utilizando trabajadores paralelos que manejan múltiples tareas de traducción simultáneamente.

Habilitar procesamiento paralelo:

npx lingo.dev@latest run

Esto distribuye las tareas de traducción entre múltiples trabajadores, reduciendo significativamente el tiempo de procesamiento para proyectos grandes.

Controlar la concurrencia de trabajadores:

npx lingo.dev@latest run --concurrency 16

La concurrencia predeterminada es de 10 trabajadores. Valores más altos procesan más tareas simultáneamente pero pueden alcanzar límites de tasa de la API.

Cómo funciona el procesamiento paralelo

La CLI crea un grupo de trabajadores que procesa tareas de traducción concurrentemente mientras previene la corrupción de archivos:

  1. Distribución de tareas — Divide la localización en tareas individuales por locale y archivo
  2. Asignación de trabajadores — Asigna tareas a trabajadores disponibles utilizando balanceo de carga
  3. Prevención de condiciones de carrera — Utiliza bloqueos del sistema de archivos para prevenir conflictos cuando múltiples trabajadores acceden a los mismos archivos
  4. Seguimiento de progreso — Informa del progreso en tiempo real a través de todos los trabajadores

Ejemplo para proyectos grandes:

// Proyecto con 50 archivos en 10 idiomas = 500 tareas de traducción
{
  "locale": {
    "source": "en",
    "targets": ["es", "fr", "de", "ja", "zh", "ko", "pt", "it", "ru", "ar"]
  },
  "buckets": {
    "json": {
      "include": ["src/locales/[locale]/*.json"]
    },
    "markdown": {
      "include": ["docs/[locale]/*.md"]
    }
  }
}

Con procesamiento paralelo, estas 500 tareas se distribuyen entre trabajadores en lugar de procesarse secuencialmente.

Procesamiento dirigido

Para proyectos grandes, puedes procesar partes específicas en lugar de todo a la vez:

Procesar idiomas específicos:

npx lingo.dev@latest run --locale es --locale fr

Procesar tipos de archivo específicos:

npx lingo.dev@latest run --bucket json

Procesar archivos específicos:

npx lingo.dev@latest run --file components/header

Este procesamiento selectivo es útil para actualizaciones incrementales durante el desarrollo.

Integración con CI/CD

Los proyectos grandes se benefician de flujos de trabajo de traducción automatizados utilizando GitHub Actions u otros sistemas CI/CD.

Flujo de trabajo de GitHub Actions:

name: Lingo.dev Localization
on:
  workflow_dispatch:
permissions:
  contents: write
  pull-requests: write
jobs:
  localize:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
        with:
          fetch-depth: 0
      - uses: lingodotdev/lingo.dev@main
        with:
          api-key: ${{ secrets.LINGODOTDEV_API_KEY }}

Este flujo de trabajo procesa traducciones en ramas dedicadas, manteniendo el trabajo de traducción separado del desarrollo.

Flujo de trabajo basado en ramas

Para proyectos grandes, utiliza ramas dedicadas para el trabajo de traducción:

Crear rama de traducción:

git checkout main
git checkout -b localize/content-update

# Realizar cambios de contenido

git push -u origin localize/content-update

Activar traducción mediante GitHub Actions:

  1. Navega a la pestaña Actions del repositorio
  2. Selecciona el flujo de trabajo "Lingo.dev Localization"
  3. Ejecuta el flujo de trabajo en tu rama de traducción
  4. Revisa y fusiona el contenido traducido

Este enfoque proporciona una clara separación entre los cambios de contenido y el procesamiento de traducción.

Consideraciones de rendimiento

Recursos del sistema:

  • El procesamiento paralelo utiliza más CPU y memoria
  • Monitoriza el rendimiento del sistema con configuraciones de alta concurrencia
  • Los ejecutores de CI/CD en la nube manejan eficientemente cargas de trabajo paralelas

Límites de tasa de API:

  • Una mayor concurrencia puede activar limitaciones de tasa
  • Comienza con la configuración predeterminada y ajusta según el rendimiento
  • El motor de Lingo.dev maneja automáticamente las limitaciones de tasa

Sistema de archivos:

  • Los proyectos grandes generan muchos archivos de traducción
  • Utiliza .gitignore para archivos temporales si es necesario
  • Haz commit del archivo i18n.lock para el seguimiento del contenido

Organización del proyecto

Separación de buckets:

{
  "buckets": {
    "app": {
      "include": ["src/locales/[locale].json"]
    },
    "marketing": {
      "include": ["marketing/[locale]/*.json"]
    },
    "docs": {
      "include": ["docs/[locale]/*.md"]
    }
  }
}

Los buckets separados permiten el procesamiento específico de diferentes áreas de contenido.

Estructura de archivos:

project/
  src/locales/           # Contenido de la aplicación
  marketing/             # Contenido de marketing
  docs/                  # Documentación
  i18n.json             # Configuración
  i18n.lock             # Seguimiento de contenido

Una estructura organizada hace que los proyectos grandes sean manejables y permite el procesamiento selectivo.

Estrategias de escalabilidad

Procesamiento incremental:

  • Utilizar archivo de bloqueo para procesar solo el contenido modificado
  • Actualizar idiomas o buckets específicos según sea necesario
  • Combinar con CI/CD para actualizaciones incrementales automatizadas

Flujos de trabajo en equipo:

  • Utilizar traducción basada en ramas para la colaboración
  • Separar los cambios de contenido del trabajo de traducción
  • Revisar las traducciones antes de fusionarlas con producción

Optimización de recursos:

  • Ajustar la concurrencia según las capacidades del sistema
  • Utilizar ejecutores en la nube para cargas de trabajo de procesamiento intensivo
  • Monitorizar los tiempos de procesamiento y optimizar las configuraciones de buckets