Aquí aprenderás a traducir un componente de React de punta a punta: instala el runtime, envuelve la app, escribe una traducción, extráela y muestra el resultado en otro idioma.
Instala el runtime
npm install @lingo.dev/reactSi usas Next.js, instala también @lingo.dev/react-next — agrega helpers compatibles con el router sobre el mismo runtime.
Envuelve la app con LingoProvider
import { LingoProvider } from "@lingo.dev/react";
import esMessages from "./locales/es.json";
export function App() {
return (
<LingoProvider locale="es" messages={esMessages}>
<Page />
</LingoProvider>
);
}messages es un objeto con claves basadas en el hash del contenido: exactamente lo que el CLI genera en locales/<locale>.json. La primera vez estará vacío, y no pasa nada: las cadenas sin traducir usan el texto fuente como respaldo.
Escribe una traducción en el código fuente
import { useLingo } from "@lingo.dev/react";
function Page() {
const l = useLingo();
return <h1>{l.text("Hello", { context: "Hero heading" })}</h1>;
}l.text(source, { context }) es la llamada canónica. context es obligatorio: permite que quienes traducen distingan cadenas que se ven iguales en inglés, pero cambian entre idiomas ("Save" como verbo vs. "Save" como sustantivo).
Extrae la cadena
lingo extractEsto analiza tu código fuente, calcula un hash estable para "Hello" + el contexto y lo escribe en tu archivo del idioma fuente (locales/en.jsonc de forma predeterminada). Vuelve a ejecutarlo después de cualquier cambio: la extracción es idempotente.
Envía a traducir
lingo push --backfill-missingEl CLI sube el archivo fuente, le pide al motor que lo traduzca a los idiomas de destino que configuraste y descarga el resultado de vuelta en locales/<locale>.json. A partir de ese momento, cada envío solo incluye lo que cambió.
Muestra el texto traducido
Importa el archivo JSON del idioma en el que se muestra tu app (o selecciónalo dinámicamente según el usuario) y pásalo a LingoProvider. La llamada al hook del paso 3 sigue igual: l.text("Hello", ...) ahora devuelve el valor traducido porque el hash coincide con lo que se descargó.
Ese es todo el ciclo: escribe el código en el idioma fuente, extrae, envía y muestra. No hay un espacio de nombres separado de claves de i18n que mantener: la cadena fuente es la clave (mediante hash).
Qué sigue#
- LingoProvider — cómo debe verse
messages, cuándo anidar providers y cómo cambiar de idioma. - useLingo — la API completa del hook, incluido
l.rich()para subárboles de React dentro de las traducciones. - Plurals and select — cómo manejar correctamente "1 item" / "N items".
