|Labs
Agenda una demoPlataforma
React (Lingo Compiler)
Alpha
React (MCP)React (i18n)CLI anterior (v0)
Obsoleto

Lingo.dev Compiler

  • Cómo funciona
  • Configuración
  • Primeros pasos con Compiler

Frameworks

  • Integración con Next.js
  • Vite + React

Guías

  • Cambio de idioma
  • Pluralización automática
  • Anulaciones manuales
  • Modos de compilación
  • Estructura del proyecto
  • Proveedores de traducción
  • Resolvers de idioma personalizados
  • Herramientas de desarrollo

Referencia

  • Mejores prácticas
  • Referencia de configuración
  • Solución de problemas
  • Guía de migración
  • Optimización
  • Formatos de salida

Mejores prácticas

Alfa

El Compiler de Lingo.dev está en alfa. Es inestable, no se recomienda para uso en producción y las API pueden cambiar entre versiones.

Estas prácticas se basan en patrones que ofrecen resultados confiables y rentables con el Compiler de Lingo.dev. Abarcan el pipeline de compilación, la organización del código, la calidad de la traducción y las pruebas.

Pipeline de compilación#

Usa la estrategia de tres modos#

1

Dev - pseudotranslator

Activa dev.usePseudotranslator: true para obtener feedback instantáneo. Sin llamadas a la API, sin costo y con resultados inmediatos. Las pseudotraducciones te ayudan a detectar cadenas sin traducir y a probar el diseño.

ts
{
  buildMode: "translate",
  dev: { usePseudotranslator: true },
}
2

CI - modo translate

Ejecuta con buildMode: "translate" y un proveedor real. Haz commit del .lingo/metadata.json actualizado después de cada ejecución de CI para que las traducciones estén disponibles en producción.

bash
LINGO_BUILD_MODE=translate npm run build
3

Production - modo cache-only

Despliega con buildMode: "cache-only". No necesitas claves de API en producción. Las compilaciones son deterministas y rápidas.

bash
LINGO_BUILD_MODE=cache-only npm run build

Control de versiones#

Haz commit de .lingo/ en tu repositorio#

El archivo .lingo/metadata.json es la fuente de verdad de todas las traducciones en caché. Las compilaciones de producción en modo cache-only dependen de él.

gitignore
# .gitignore - do NOT ignore .lingo/
node_modules/
dist/
.env

Si no haces commit de .lingo/metadata.json, las compilaciones de producción fallarán porque el modo cache-only no tendrá traducciones para leer.

Revisa los diffs de traducción#

Cuando CI haga commit de traducciones actualizadas, revisa el diff de .lingo/metadata.json en los pull requests. Así podrás detectar problemas de traducción antes de que lleguen a producción, igual que revisas los cambios de código.

Organización del código#

Coloca el texto traducible directamente en JSX#

El Compiler analiza JSX en busca de contenido traducible. El texto almacenado en variables de JavaScript, constantes o archivos externos no se detecta:

tsx
// Good - compiler detects this text
export function Header() {
  return <h1>Welcome to our app</h1>;
}

// Bad - compiler cannot detect text in a variable
const title = "Welcome to our app";
export function Header() {
  return <h1>{title}</h1>;
}

Usa useDirective en bases de código grandes#

En proyectos grandes, analizar todos los archivos aumenta el tiempo de compilación. Activa useDirective: true y agrega 'use i18n' solo en los archivos que contienen texto visible para el usuario:

ts
{
  useDirective: true,
}
tsx
'use i18n';

// Only this file is scanned for translations
export function PublicPage() {
  return <h1>Welcome</h1>;
}

Mantén sourceRoot lo más acotado posible#

Configura sourceRoot con el directorio más pequeño que contenga tus componentes traducibles. Un sourceRoot demasiado amplio hace que se analicen archivos innecesarios:

Tipo de proyectosourceRoot recomendado
Next.js App Router"./app"
Vite + React"src"
Monorepo (con useDirective)"."

Calidad de la traducción#

Usa manual overrides para términos de marca#

Los nombres de marca, los nombres de productos y el texto legal deben usar manual overrides en lugar de depender de la traducción con IA:

tsx
<h1 data-lingo-override={{ es: "Motor de Localizacion", de: "Lokalisierungs-Engine" }}>
  Localization Engine
</h1>

Usa el mapeo por pares de idioma para optimizar costos#

Los distintos modelos tienen fortalezas y precios diferentes. Asigna los modelos más costosos a los idiomas que realmente los necesitan y usa modelos más rentables en el resto:

ts
{
  models: {
    "*:*": "groq:llama-3.3-70b-versatile",      // Fast, cost-effective default
    "*:ja": "anthropic:claude-3-5-sonnet",       // Higher quality for Japanese
    "*:zh-Hans": "anthropic:claude-3-5-sonnet",  // Higher quality for Chinese
  },
}

Usa el motor de Lingo.dev para glossary y voz de marca#

Cuando necesites terminología consistente en toda tu app, configura un motor de localización en Lingo.dev con un glossary y una voz de marca. Ambos se aplican automáticamente a cada solicitud de traducción.

Pluralización#

Desactiva la pluralización si no la necesitas#

Si tu app no muestra cantidades numéricas junto al texto, desactiva la pluralización para reducir la complejidad de la compilación:

ts
{
  pluralization: { enabled: false },
}

Escribe de forma natural el texto que depende de cantidades#

Cuando la pluralización esté activada, redacta de forma natural el texto con variables numéricas. El Compiler se encarga de convertirlo a ICU MessageFormat:

tsx
// Good - the compiler detects and pluralizes this
<p>You have {count} items in your cart</p>

// Also good - works with any numeric expression
<p>{unreadCount} unread messages</p>

Pruebas#

Prueba primero con pseudotranslator#

Antes de generar traducciones reales, ejecuta con el pseudotranslator para verificar que la cobertura sea completa:

  1. Activa dev.usePseudotranslator: true
  2. Recorre cada página y componente
  3. Todo texto que no tenga marcadores [!!! ... !!!] no se está traduciendo
  4. Corrige los problemas de ubicación del texto (mueve el texto a JSX, ajusta sourceRoot y agrega directivas 'use i18n')

Detectar cadenas sin traducir con el pseudotranslator es más rápido y más económico que descubrirlas después de generar traducciones reales.

Prueba con traducciones reales antes del lanzamiento#

Desactiva el pseudotranslator y genera traducciones reales para al menos un idioma de destino antes de lanzar:

ts
{
  dev: { usePseudotranslator: false },
}

Verifica desbordes de diseño, truncamiento de texto y problemas con texto bidireccional que las pseudotraducciones no pueden mostrar.

Siguientes pasos#

Modos de compilación
Configuración de compilación para CI y producción
Proveedores de traducción
Selección de proveedores y mapeo por pares de idioma
Herramientas de desarrollo
Pseudotranslator y servidor de traducción
Solución de problemas
Problemas comunes y sus soluciones

¿Te resultó útil esta página?

Max PrilutskiyMax Prilutskiy·Actualizado hace 4 meses·4 min de lectura