Hier gehst du die Übersetzung einer einzelnen React-Komponente einmal komplett durch: Runtime installieren, App einbinden, Übersetzung schreiben, extrahieren und das Ergebnis in einer anderen Sprache rendern.
Runtime installieren
npm install @lingo.dev/reactWenn du Next.js nutzt, installiere zusätzlich @lingo.dev/react-next — es ergänzt dieselbe Runtime um router-spezifische Hilfsfunktionen.
App mit LingoProvider umschließen
import { LingoProvider } from "@lingo.dev/react";
import esMessages from "./locales/es.json";
export function App() {
return (
<LingoProvider locale="es" messages={esMessages}>
<Page />
</LingoProvider>
);
}messages ist ein Objekt, dessen Schlüssel Content-Hashes sind — genau das, was die CLI in locales/<locale>.json ausgibt. Beim ersten Durchlauf ist es leer, und das ist völlig okay: Nicht übersetzte Strings fallen auf ihren Quelltext zurück.
Eine Übersetzung im Quellcode schreiben
import { useLingo } from "@lingo.dev/react";
function Page() {
const l = useLingo();
return <h1>{l.text("Hello", { context: "Hero heading" })}</h1>;
}l.text(source, { context }) ist der maßgebliche Aufruf. context ist erforderlich — so können Übersetzer Strings auseinanderhalten, die im Englischen gleich aussehen, sich in anderen Sprachen aber unterscheiden („Save“ als Verb vs. „Save“ als Substantiv).
String extrahieren
lingo extractDabei wird dein Quellcode gescannt, ein stabiler Hash für "Hello" plus Kontext berechnet und in deine Datei für die Ausgangssprache geschrieben (locales/en.jsonc standardmäßig). Führe den Schritt nach jeder Änderung erneut aus — die Extraktion ist idempotent.
Zur Übersetzung senden
lingo push --backfill-missingDie CLI lädt die Quelldatei hoch, weist die Engine an, sie in deine konfigurierten Zielsprachen zu übersetzen, und lädt das Ergebnis zurück in locales/<locale>.json. Ab dann wird bei jedem Push nur noch übertragen, was sich geändert hat.
Übersetzten Text rendern
Importiere die JSON-Datei für die Sprache, in der deine App gerade rendert (oder wähle sie dynamisch anhand des Nutzers), und übergib sie an LingoProvider. Der Hook-Aufruf aus Schritt 3 bleibt unverändert — l.text("Hello", ...) gibt jetzt den übersetzten Wert zurück, weil der Hash mit dem heruntergeladenen Eintrag übereinstimmt.
Das ist der komplette Ablauf: Quelltext schreiben, extrahieren, pushen, rendern. Es gibt keinen separaten i18n-Key-Namespace, den du pflegen musst — der Quelltext ist der Schlüssel (über den Hash).
So geht's weiter#
- LingoProvider — wie
messagesaussehen sollte, wann du Provider verschachtelst und wie der Sprachwechsel funktioniert. - useLingo — die vollständige Hook-API, inklusive
l.rich()für React-Teilbäume innerhalb von Übersetzungen. - Plurals and select — so behandelst du „1 item“ / „N items“ korrekt.
