Lingo.dev - Open-Source-i18n-Toolkit für LLM-gestützte Lokalisierung
MCP •CLI • CI/CD •SDK • Compiler
| Tool | Anwendungsfall | Schnellbefehl |
|---|---|---|
| MCP | KI-gestützte i18n-Einrichtung für React-Apps | Prompt: Set up i18n |
| CLI | Übersetzung von JSON-, YAML-, Markdown-, CSV-, PO-Dateien | npx lingo.dev@latest run |
| CI/CD | Automatisierte Übersetzungs-Pipeline in GitHub Actions | uses: lingodotdev/lingo.dev@main |
| SDK | Laufzeit-Übersetzung für dynamische Inhalte | npm install lingo.dev |
| Compiler | Build-Time-React-Lokalisierung ohne i18n-Wrapper | withLingo()-Plugin |
Die Einrichtung von i18n in React-Apps ist notorisch fehleranfällig – selbst für erfahrene Entwickler. KI-Coding-Assistenten verschlimmern die Situation: Sie halluzinieren nicht existierende APIs, vergessen Middleware-Konfigurationen, brechen das Routing oder implementieren eine halbe Lösung, bevor sie den Faden verlieren. Das Problem ist, dass die i18n-Einrichtung eine präzise Abfolge koordinierter Änderungen über mehrere Dateien hinweg erfordert (Routing, Middleware, Komponenten, Konfiguration), und LLMs haben Schwierigkeiten, diesen Kontext aufrechtzuerhalten.
Lingo.dev MCP löst dies, indem es KI-Assistenten strukturierten Zugriff auf framework-spezifisches i18n-Wissen gibt. Anstatt zu raten, folgt Ihr Assistent verifizierten Implementierungsmustern für Next.js, React Router und TanStack Start.
Unterstützte IDEs:
- Claude Code
- Cursor
- GitHub Copilot Agents
- Codex (OpenAI)
Unterstützte Frameworks:
- Next.js (App Router & Pages Router v13-16)
- TanStack Start (v1)
- React Router (v7)
Verwendung:
Nach der Konfiguration des MCP-Servers in Ihrer IDE (siehe Schnellstart-Anleitungen) fordern Sie Ihren Assistenten auf:
Set up i18n with the following locales: en, es, and pt-BR. The default locale is 'en'.
Der Assistent wird:
- Locale-basiertes Routing konfigurieren (z. B.
/en,/es,/pt-BR) - Sprachwechsel-Komponenten einrichten
- Automatische Locale-Erkennung implementieren
- Notwendige Konfigurationsdateien generieren
Hinweis: KI-gestützte Code-Generierung ist nicht-deterministisch. Überprüfen Sie generierten Code vor dem Committen.
Übersetzungen synchron zu halten ist mühsam. Sie fügen einen neuen String hinzu, vergessen ihn zu übersetzen und liefern fehlerhafte UI an internationale Nutzer aus. Oder Sie senden JSON-Dateien an Übersetzer, warten tagelang und führen deren Arbeit dann manuell zusammen. Die Skalierung auf über 10 Sprachen bedeutet die Verwaltung hunderter Dateien, die ständig auseinanderdriften.
Lingo.dev CLI automatisiert dies. Richten Sie es auf Ihre Übersetzungsdateien aus, führen Sie einen Befehl aus, und jede Locale wird aktualisiert. Eine Lockfile verfolgt, was bereits übersetzt wurde, sodass Sie nur für neue oder geänderte Inhalte zahlen. Unterstützt JSON, YAML, CSV, PO-Dateien und Markdown.
Einrichtung:
# Initialize project
npx lingo.dev@latest init
# Run translations
npx lingo.dev@latest runFunktionsweise:
- Extrahiert übersetzbare Inhalte aus konfigurierten Dateien
- Sendet Inhalte an LLM-Anbieter zur Übersetzung
- Schreibt übersetzte Inhalte zurück ins Dateisystem
- Erstellt
i18n.lock-Datei zur Nachverfolgung abgeschlossener Übersetzungen (vermeidet redundante Verarbeitung)
Konfiguration:
Der Befehl init generiert eine i18n.json-Datei. Konfigurieren Sie Locales und Buckets:
{
"$schema": "https://lingo.dev/schema/i18n.json",
"version": "1.10",
"locale": {
"source": "en",
"targets": ["es", "fr", "de"]
},
"buckets": {
"json": {
"include": ["locales/[locale].json"]
}
}
}Das Feld provider ist optional (Standard ist Lingo.dev Engine). Für benutzerdefinierte LLM-Anbieter:
{
"provider": {
"id": "openai",
"model": "gpt-4o-mini",
"prompt": "Translate from {source} to {target}"
}
}Unterstützte LLM-Anbieter:
- Lingo.dev Engine (empfohlen)
- OpenAI
- Anthropic
- Mistral
- OpenRouter
- Ollama
Übersetzungen sind das Feature, das immer "fast fertig" ist. Entwickler mergen Code, ohne die Locales zu aktualisieren. QA entdeckt fehlende Übersetzungen im Staging – oder schlimmer noch, Nutzer entdecken sie in der Produktion. Die Grundursache: Übersetzung ist ein manueller Schritt, der unter Termindruck leicht übersprungen wird.
Lingo.dev CI/CD macht Übersetzungen automatisch. Jeder Push löst die Übersetzung aus. Fehlende Strings werden ausgefüllt, bevor Code die Produktion erreicht. Keine Disziplin erforderlich – die Pipeline übernimmt das.
Unterstützte Plattformen:
- GitHub Actions
- GitLab CI/CD
- Bitbucket Pipelines
GitHub Actions-Einrichtung:
Erstellen Sie .github/workflows/translate.yml:
name: Translate
on:
push:
branches: [main]
permissions:
contents: write
jobs:
translate:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Lingo.dev
uses: lingodotdev/lingo.dev@main
with:
api-key: ${{ secrets.LINGODOTDEV_API_KEY }}Einrichtungsanforderungen:
- Fügen Sie
LINGODOTDEV_API_KEYzu den Repository-Secrets hinzu (Einstellungen > Secrets and variables > Actions) - Für PR-Workflows: Aktivieren Sie „Allow GitHub Actions to create and approve pull requests" unter Einstellungen > Actions > General
Workflow-Optionen:
Übersetzungen direkt committen:
uses: lingodotdev/lingo.dev@main
with:
api-key: ${{ secrets.LINGODOTDEV_API_KEY }}Pull Requests mit Übersetzungen erstellen:
uses: lingodotdev/lingo.dev@main
with:
api-key: ${{ secrets.LINGODOTDEV_API_KEY }}
pull-request: true
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}Verfügbare Eingaben:
| Eingabe | Standard | Beschreibung |
|---|---|---|
api-key |
(erforderlich) | Lingo.dev API-Schlüssel |
pull-request |
false |
PR erstellen statt direkt zu committen |
commit-message |
"feat: update translations via @LingoDotDev" |
Benutzerdefinierte Commit-Nachricht |
pull-request-title |
"feat: update translations via @LingoDotDev" |
Benutzerdefinierter PR-Titel |
working-directory |
"." |
Verzeichnis für Ausführung |
parallel |
false |
Parallele Verarbeitung aktivieren |
Statische Übersetzungsdateien funktionieren für UI-Labels, aber was ist mit nutzergenerierten Inhalten? Chat-Nachrichten, Produktbeschreibungen, Support-Tickets – Inhalte, die zur Build-Zeit nicht existieren, können nicht vorübersetzt werden. Sie müssen unübersetzte Texte anzeigen oder eine eigene Übersetzungs-Pipeline aufbauen.
Das Lingo.dev SDK übersetzt Inhalte zur Laufzeit. Übergeben Sie beliebigen Text, Objekte oder HTML und erhalten Sie eine lokalisierte Version zurück. Funktioniert für Echtzeit-Chat, dynamische Benachrichtigungen oder beliebige Inhalte, die nach dem Deployment eintreffen. Verfügbar für JavaScript, PHP, Python und Ruby.
Installation:
npm install lingo.devVerwendung:
import { LingoDotDevEngine } from "lingo.dev/sdk";
const lingoDotDev = new LingoDotDevEngine({
apiKey: process.env.LINGODOTDEV_API_KEY,
});
// Translate objects (preserves structure)
const translated = await lingoDotDev.localizeObject(
{ greeting: "Hello", farewell: "Goodbye" },
{ sourceLocale: "en", targetLocale: "es" },
);
// { greeting: "Hola", farewell: "Adiós" }
// Translate text
const text = await lingoDotDev.localizeText("Hello!", {
sourceLocale: "en",
targetLocale: "fr",
});
// Translate to multiple languages at once
const results = await lingoDotDev.batchLocalizeText("Hello!", {
sourceLocale: "en",
targetLocales: ["es", "fr", "de"],
});
// Translate chat (preserves speaker names)
const chat = await lingoDotDev.localizeChat(
[{ name: "Alice", text: "Hello!" }],
{ sourceLocale: "en", targetLocale: "es" },
);
// Translate HTML (preserves markup)
const html = await lingoDotDev.localizeHtml("<h1>Welcome</h1>", {
sourceLocale: "en",
targetLocale: "de",
});
// Detect language
const locale = await lingoDotDev.recognizeLocale("Bonjour le monde");
// "fr"Verfügbare SDKs:
- JavaScript SDK – Web-Apps, Node.js
- PHP SDK – PHP, Laravel
- Python SDK – Django, Flask
- Ruby SDK – Rails
Traditionelle i18n ist invasiv. Sie umschließen jeden String mit t()-Funktionen, erfinden Übersetzungsschlüssel (home.hero.title.v2), pflegen parallele JSON-Dateien und beobachten, wie Ihre Komponenten mit Lokalisierungs-Boilerplate aufgebläht werden. Es ist so mühsam, dass Teams die Internationalisierung hinauszögern, bis sie zu einem massiven Refactoring wird.
Lingo.dev Compiler eliminiert die Zeremonie. Schreiben Sie React-Komponenten mit einfachem englischem Text. Der Compiler erkennt übersetzbare Zeichenketten zur Build-Zeit und generiert automatisch lokalisierte Varianten. Keine Schlüssel, keine JSON-Dateien, keine Wrapper-Funktionen – nur React-Code, der zufällig in mehreren Sprachen funktioniert.
Installation:
pnpm install @lingo.dev/compilerAuthentifizierung:
# Recommended: Sign up at lingo.dev and login
npx lingo.dev@latest login
# Alternative: Add API key to .env
LINGODOTDEV_API_KEY=your_key_here
# Or use direct LLM providers (Groq, OpenAI, Anthropic, Google)
GROQ_API_KEY=your_keyKonfiguration (Next.js):
// next.config.ts
import type { NextConfig } from "next";
import { withLingo } from "@lingo.dev/compiler/next";
const nextConfig: NextConfig = {};
export default async function (): Promise<NextConfig> {
return await withLingo(nextConfig, {
sourceRoot: "./app",
sourceLocale: "en",
targetLocales: ["es", "fr", "de"],
models: "lingo.dev",
dev: { usePseudotranslator: true },
});
}Konfiguration (Vite):
// vite.config.ts
import { lingoCompilerPlugin } from "@lingo.dev/compiler/vite";
export default defineConfig({
plugins: [
lingoCompilerPlugin({
sourceRoot: "src",
sourceLocale: "en",
targetLocales: ["es", "fr", "de"],
models: "lingo.dev",
dev: { usePseudotranslator: true },
}),
react(),
],
});Provider-Setup:
// app/layout.tsx (Next.js)
import { LingoProvider } from "@lingo.dev/compiler/react";
export default function RootLayout({ children }) {
return (
<LingoProvider>
<html>
<body>{children}</body>
</html>
</LingoProvider>
);
}Sprachwechsler:
import { useLocale, setLocale } from "@lingo.dev/compiler/react";
export function LanguageSwitcher() {
const locale = useLocale();
return (
<select value={locale} onChange={(e) => setLocale(e.target.value)}>
<option value="en">English</option>
<option value="es">Español</option>
</select>
);
}Entwicklung: npm run dev (verwendet Pseudoübersetzer, keine API-Aufrufe)
Produktion: Setzen Sie usePseudotranslator: false, dann next build
Committen Sie das .lingo/-Verzeichnis in die Versionskontrolle.
Hauptmerkmale:
- Keine Laufzeit-Performance-Kosten
- Keine Übersetzungsschlüssel oder JSON-Dateien
- Keine
t()-Funktionen oder<T>-Wrapper-Komponenten - Automatische Erkennung von übersetzbarem Text in JSX
- TypeScript-Unterstützung
- ICU MessageFormat für Plurale
- Manuelle Überschreibungen via
data-lingo-override-Attribut - Integriertes Übersetzungs-Editor-Widget
Build-Modi:
pseudotranslator: Entwicklungsmodus mit Platzhalter-Übersetzungen (keine API-Kosten)real: Generierung tatsächlicher Übersetzungen mittels LLMscache-only: Produktionsmodus mit vorgenerierten Übersetzungen aus CI (keine API-Aufrufe)
Unterstützte Frameworks:
- Next.js (App Router mit React Server Components)
- Vite + React (SPA und SSR)
Unterstützung weiterer Frameworks geplant.
Beiträge sind willkommen. Bitte befolgen Sie diese Richtlinien:
- Issues: Fehler melden oder Funktionen anfordern
- Pull Requests: Änderungen einreichen
- Jeder PR erfordert ein Changeset:
pnpm new(oderpnpm new:emptyfür Änderungen ohne Release) - Stellen Sie sicher, dass die Tests vor dem Einreichen bestehen
- Jeder PR erfordert ein Changeset:
- Entwicklung: Dies ist ein pnpm + turborepo Monorepo
- Abhängigkeiten installieren:
pnpm install - Tests ausführen:
pnpm test - Build erstellen:
pnpm build
- Abhängigkeiten installieren:
Support: Discord-Community
Wenn Sie Lingo.dev nützlich finden, geben Sie uns einen Stern und helfen Sie uns, 10.000 Sterne zu erreichen!
[
](https://www.star-history.com/#lingodotdev/lingo.dev&Date)
Verfügbare Übersetzungen:
English • 中文 • 日本語 • 한국어 • Español • Français • Русский • Українська • Deutsch • Italiano • العربية • עברית • हिन्दी • Português (Brasil) • বাংলা • فارسی • Polski • Türkçe • اردو • भोजपुरी • অসমীয়া • ગુજરાતી • मराठी • ଓଡ଼ିଆ • ਪੰਜਾਬੀ • සිංහල • தமிழ் • తెలుగు
Neue Sprache hinzufügen:
- Locale-Code zu
i18n.jsonim BCP-47-Format hinzufügen - Pull Request einreichen
BCP-47-Locale-Format: language[-Script][-REGION]
language: ISO 639-1/2/3 (Kleinbuchstaben):en,zh,bhoScript: ISO 15924 (Großschreibung am Anfang):Hans,Hant,LatnREGION: ISO 3166-1 alpha-2 (Großbuchstaben):US,CN,IN- Beispiele:
en,pt-BR,zh-Hans,sr-Cyrl-RS