Este guia mostra, de ponta a ponta, como traduzir um único componente React: instalar o runtime, envolver o app, escrever uma tradução, extraí-la e renderizar o resultado em outro idioma.
Instale o runtime
npm install @lingo.dev/reactSe você usa Next.js, instale também @lingo.dev/react-next — ele adiciona helpers integrados ao roteador sobre o mesmo runtime.
Envolva o app com 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 é um objeto indexado por hash de conteúdo — exatamente o que o CLI gera em locales/<locale>.json. Na primeira execução, ele vem vazio, e tudo bem: strings ainda não traduzidas usam o texto de origem como fallback.
Escreva uma tradução no código-fonte
import { useLingo } from "@lingo.dev/react";
function Page() {
const l = useLingo();
return <h1>{l.text("Hello", { context: "Hero heading" })}</h1>;
}l.text(source, { context }) é a chamada canônica. context é obrigatório — ele permite que tradutores desambiguem strings que são iguais em inglês, mas mudam entre idiomas ("Save" como verbo vs. "Save" como substantivo).
Extraia a string
lingo extractIsso analisa seu código-fonte, calcula um hash estável para "Hello" + o contexto e o grava no arquivo do idioma de origem (locales/en.jsonc por padrão). Execute novamente após qualquer alteração — a extração é idempotente.
Envie para tradução
lingo push --backfill-missingO CLI faz upload do arquivo de origem, pede ao engine para traduzir para os idiomas de destino configurados e baixa o resultado de volta em locales/<locale>.json. A partir daí, cada envio manda apenas o que mudou.
Renderize o texto traduzido
Importe o arquivo JSON do idioma que seu app está renderizando (ou selecione-o dinamicamente com base no usuário) e passe-o para LingoProvider. A chamada do hook da etapa 3 continua igual — l.text("Hello", ...) agora retorna o valor traduzido porque o hash corresponde ao que foi baixado.
Esse é o fluxo completo: escreva o código no idioma de origem, extraia, envie, renderize. Não há um namespace separado de chaves de i18n para manter — a string de origem é a chave (via hash).
Próximos passos#
- LingoProvider — como
messagesdeve ser, quando aninhar providers, troca de idioma. - useLingo — a API completa do hook, incluindo
l.rich()para subárvores React dentro das traduções. - Plurals and select — como lidar corretamente com "1 item" / "N items".
