Claude Übersetzer
Dies ist die Pipeline, die läuft www.conveythis.com selbst — eine 238-seitige Astro-Site, live in 55 Sprachen. Wir haben es extrahiert, jeden Fehlermodus dokumentiert, dessen Suche uns gekostet hat, und das Ganze veröffentlicht. Es handelt sich weder um einen Test noch um einen Teaser: Es gibt keinen Kaufschlüssel, kein Kontingent und kein Konto.
Two design decisions
Wie es funktioniert
Zwei Entscheidungen definieren es. Zunächst werden Übersetzungen durch Byte-Offset in das erstellte HTML eingefügt und das Dokument wird nie von einem DOM — neu serialisiert, also inliniertes kritisches CSS, das LCP-Element, Asset-Hashes und das width/height Attribute, die CLS enthalten, werden alle unberührt übertragen. Das ist warum Gebietsschemaseiten stimmen mit der Ausgangssprache auf Core Web Vitals überein und ähneln ihr nicht nur. Zweitens ist die Übersetzungseinheit der gesamte Block und nicht der Textknoten, da etwa ein Fünftel der Textknoten einer typischen Site durch Inline-Markup aufgeteilt werden und die separate Übersetzung der Fragmente die Grammatik in jeder Sprache unterbricht, die neu geordnet oder gebeugt wird.
The result is proved rather than asserted: eight gates and an exhaustive SEO audit over every page, including one gate that exists purely because coverage metrics are structurally blind to extraction bugs.
Verification
Hält es tatsächlich?
Eine berechtigte Frage, die überprüfbar ist und nicht etwas, wofür Sie sich auf unser Wort verlassen müssen. doctranslator.com/fr ist eine große Astro-Site, deren französische Seiten durch diese Pipeline erstellt wurden. Vergleichen Sie es mit dem englischen Original und das Markup ist byte-identisch:
2,743
Tags, in identischer Reihenfolge
2,031
Klassenattribute, alle übereinstimmend
+0.74%
Seitengewicht — Französisch ist länger
Es wurde nichts Strukturelles verschoben, sodass der Browser nichts anders anordnen kann. Überprüfen Sie es selbst — es dauert etwa zehn Sekunden:
curl -s https://doctranslator.com/ | grep -o 'class="[^"]*"' > en.txt
curl -s https://doctranslator.com/fr | grep -o 'class="[^"]*"' > fr.txt
diff en.txt fr.txt && echo "markup identical — only the text changed"Und die Ergebnisse
| Englische Quelle | Französisch, von diesem Tool | A11y / Best Practices / SEO | |
|---|---|---|---|
| Desktop | 100 | 100 | 100 / 100 / 100 |
| Mobil | 98 | 98 | 100 / 100 / 100 |
PageSpeed Insights-Leistungswerte, gemessen am 25. August 2026. Barrierefreiheit, Best Practices und SEO lagen bei beiden Strategien bei jedem Durchlauf beider Seiten bei 100.
Dies sind bewusst Mediane. Lighthouse-Ergebnisse bewegen sich: Fünf aufeinanderfolgende Läufe derselben englischen mobilen Seite ergaben 98, 98, 88, 98, 98, wobei die Farbe mit dem größten Inhalt zwischen 1,8 und 3,2 Sekunden schwankte. Dabei handelt es sich eher um Netzwerk- und CDN-Varianzen als um Seitenqualität. Wenn Sie einmal messen und 91 erhalten, führen Sie es deshalb — ein paar Mal aus und vergleichen Sie die beiden Sprachen miteinander und nicht mit einer Zahl auf einer Marketingseite.
And the language
Markup identity is measurable. Whether the Spanish is any good is a different question, and until 2.0 the pipeline had no answer to it — the tests checked request shapes and scaffolding, and nothing scored a translation.
node scripts/i18n/tqa.mjs --lang es --dry # sample size and cost, no API call
node scripts/i18n/tqa.mjs --lang es,fr,de # scorecard + per-locale JSON
node scripts/i18n/tqa.mjs --lang es --repeat # judge the same sample twiceIt scores a stratified sample on the MQM error typology at its conventional weights — minor 1, major 5, critical 10 — and weights the sample by how often each string appears, so the header everyone reads counts for more than a one-off footnote. Three things keep the number from being decorative:
- The judge is a different model from the translator
- Models score their own output generously. If no second provider key is configured it uses the same one and says so, in the run and in the report.
- The sample is seeded, and the variance is reported
- A seed reproduces a score exactly;
--repeatscores the same sample twice and prints the gap. A quality number nobody can re-derive, quoted without its noise, is a marketing number. - A unit the judge cannot assess is excluded, not counted as clean
- An early version printed 100.00 out of 100 from a sample where every single unit had failed to parse. It now refuses to report a score at all in that case.
Read it as a comparison — between locales, between models, before and after a prompt change — not as a grade. It is one model’s assessment of another’s work rather than a human review, and the report says so on its face.
Decision three
Terminology is not a per-sentence choice
Identical strings were always consistent — units are keyed by a hash of the source text, so a nav label translated once is reused on every page and across runs. What that cannot do is hold a term inside varying sentences: “Dashboard” in two different paragraphs is two hashes, two batches, two stateless requests, and nothing compared them.
[
{ "source": "Acme", "rule": "keep", "matchCase": true },
{ "source": "Dashboard", "rule": "translate",
"targets": { "es": "Panel de control", "de": "Übersicht" } }
]matchCase is the answer to a question we were asked directly: can it tell Apple the company from apple the fruit? A flat list of names cannot express that. Whole-word, case-sensitive rules can.
| source | spanish | warum |
|---|---|---|
| Apple announced a device | Apple anunció un dispositivo | capital A — protected, and now verified |
| An apple a day | Una manzana al día | lowercase — translated normally |
| Applesauce is on sale | La compota está en oferta | whole-word — never matches inside a longer word |
The same release tells the model what a string is. It used to receive the text and nothing else, so a button label and a body paragraph were indistinguishable — which made the prompt’s own instruction to keep button labels short unenforceable. A <button>, a heading, a form label and a meta description now each say so.
It deliberately does not demand the imperative for buttons: German UI prefers a verbal noun and French the infinitive, so it asks for whatever construction that language actually puts on a button. Brand names you already list are folded in automatically as case-sensitive keep rules, which also brings them under a verification gate that checks they survived. Nothing checked that before.
Locale conventions
Numbers get localized. Prices never get converted.
Writing 1,234.56 to a German reader is one of the most visible marks of a machine translation. Models are unreliable at separator conventions, so the model is told to leave numbers alone and Intl reformats them afterwards, deterministically.
| source | becomes | where |
|---|---|---|
| 1,234.56 | 1.234,56 | de |
| 1,234.56 | 1 234,56 | fr |
| $5 | 5,00 $US | fr — placement and spacing, not the amount |
| 50% | 50 % | fr — with a non-breaking space |
It formats. It never converts.
no config option for itA price is a commercial commitment, and converting one at a rate baked into a build — stale the day after it is written — is how a translation tool starts publishing wrong offers in markets nobody is watching. Every monetary amount found is written to a report instead, so a human prices each market deliberately.
A numeric-integrity gate backs that up by failing the build if a number’s value changes between source and translation. A model that quietly ships $39 where the source said $49 passes every other check: identical markup, matching placeholders, plausible length, fluent Spanish.
Deliberately left alone: version numbers, times, IP addresses, ISO dates, phone numbers and any ungrouped number — during development a greedy pattern turned 192.168.1.1 into 1.921.681,1, and that case is now a test. One result that looks like a bug and is not: Spanish does not group four-digit numbers, so 1,234.50 is correctly 1234,50 in es „ 1.234,50 in de.
Honest routing
Welches brauchst du eigentlich?
Statische Substitution und eine Laufzeitschicht lösen verschiedene Probleme. Die Auswahl des falschen Produkts kostet Sie ein Wochenende, hier ist also die ehrliche Aufteilung.
Sie haben einen statischen Build, der Inhalt ändert sich im Release-Rhythmus und Sie möchten das HTML vollständig besitzen.
Claude Übersetzer
Kostenlos, selbst gehostet, AGPL-3.0. Ihr eigener API-Schlüssel, Ihre eigenen Dateien, kein Konto.
Auf GitHub anzeigen →Ihre Inhalte ändern sich täglich, befinden sich in einem CMS, sind benutzergeneriert oder befinden sich hinter einem Login oder Checkout.
ConveyThis
Eine verwaltete Laufzeitschicht. Kein Build-Schritt zum Einbinden, keine Wiederholung bei jeder Bearbeitung, ein visueller Editor und eine menschliche Überprüfung.
Siehe Preise →Was Sie übersetzen müssen, sind Dokumente und nicht Seiten — PDF, DOCX, XLSX, PPTX.
DocTranslator
Ganze Dateien, Layout und Tabellen erhalten, 100+ Sprachen.
Gehen Sie zu DocTranslator →Quickstart
Installieren Sie es
Repository
https://github.com/ConveyThis/claude-translator
AGPL-3.0 · Knoten ≥ 20 · eine Abhängigkeit (parse5) · auf GitHub öffnen →
Sie brauchen
- Node.js 20 oder neuer
- Eine Site, die auf statischem HTML aufbaut — es liest Ihre Build-Ausgabe, nicht Ihre Quelle
- Ein API-Schlüssel für jedes Modell, das Sie wählen — oder gar keine, wenn Sie lokal eine ausführen
Als Claude Code-Fähigkeit
Klonen Sie es in Ihr Kompetenzverzeichnis und bitten Sie Claude dann, die Website zu lokalisieren. Es folgt den gebündelten Anweisungen, einschließlich der Fehlermodi, deren Suche uns echtes Geld gekostet hat — und den Regeln, wann dies das völlig falsche Tool ist.
git clone https://github.com/ConveyThis/claude-translator.git \
~/.claude/skills/claude-translatorIn jedem Projekt
Ein Befehl. init kopiert die Pipeline in scripts/i18n/, schreibt eine Konfiguration, deklariert parse5 und fügt die abgeleitete i18n/ Wege zu deinem .gitignore. Es überschreibt nie etwas ohne --force, und es druckt jede Datei, die es berührt hat.
cd your-project
npx claude-translator init
npm install # parse5, the only dependencyDie Skripte landen in Ihrem Repository, anstatt darin zu bleiben node_modules Mit Absicht — lösen sie Pfade aus dem Projekt auf, in dem sie sitzen, sie sind kurz genug zum Lesen und die Lizenz existiert, damit Sie sie ändern können.
Installation ohne npx
git clone https://github.com/ConveyThis/claude-translator.git
cp -r claude-translator/scripts your-project/scripts/i18n
cp claude-translator/i18n.config.example.json your-project/i18n.config.json
cd your-project && npm install --save-dev parse5Konfigurieren
Die kleinste Konfiguration, die ausgeführt wird. buildDir ist der Ort, an dem Ihr Generator HTML schreibt; baseUrl ist Ihr kanonischer Ursprung, kein abschließender Schrägstrich.
{
"buildDir": "dist",
"baseUrl": "https://example.com",
"provider": "anthropic",
"glossary": "glossary.json",
"locales": [
{ "hreflang": "es", "pathCode": "es", "nativeLabel": "Español" },
{ "hreflang": "de", "pathCode": "de", "nativeLabel": "Deutsch" }
]
}echo "ANTHROPIC_API_KEY=your-key-here" >> .env # and gitignore itFühren Sie es aus
| npm run build | Ihr normaler Build — nur Quellsprache |
| Knotenskripte/i18n/extract.mjs | Finden Sie jede übersetzbare Einheit |
| Knotenskripte/i18n/translate.mjs --lang es,fr | In die Erinnerung übersetzen |
| Knotenskripte/i18n/build-locales.mjs --lang alle | Schreiben Sie die lokalisierten Seiten |
| Knotenskripte/i18n/verify.mjs --lang alle | eight gates — exits non-zero on failure |
| Knotenskripte/i18n/audit-seo.mjs | kanonische, hreflang, JSON-LD, Sitemaps |
| node scripts/i18n/tqa.mjs --lang es --dry | optional — MQM quality score, cost first |
Stellen Sie dann das Build-Verzeichnis genau so bereit, wie Sie es heute bereitstellen — die lokalisierten Seiten sind normale Dateien, die neben Ihren vorhandenen liegen. Vollständige Optionen, jeder Fehlermodus und die Gründe für jede Designentscheidung finden Sie in der LESEN SIE MICH.
Models
Bringen Sie Ihr eigenes Modell mit — einschließlich eines lokalen
Der Übersetzungsschritt kommuniziert über einen kleinen Adapter mit einem Modell und drei werden mit diesem ausgeliefert: Claude (Standard), Gemini und jeder OpenAI-kompatible Endpunkt. Letzteres deckt den größten Teil des Feldes ab — OpenAI, Azure, Groq, DeepSeek, Mistral, OpenRouter, Together, Fireworks — und deckt auch Ollama, LM Studio und vLLM ab.
Das bedeutet, dass drei Konfigurationszeilen die gesamte Pipeline auf Ihrer eigenen Hardware ausführen:
{
"provider": "openai",
"apiBaseUrl": "http://localhost:11434/v1",
"model": "qwen2.5:14b"
}Kein Schlüssel, kein Kontingent und nichts verlässt die Maschine — was wichtig ist, wenn der Inhalt vertraulich ist. Alles, was nicht auf dieser Liste steht, ist eine Adapterdatei mit zwei Funktionen darin.
Limits
Wo das kostenlose Tool aufhört
Sechs reale Grenzen. Keines davon ist ein verkrüppeltes Merkmal — sie sind die Form des Ansatzes, und die Skripte sagen Ihnen, wann Sie einen treffen, anstatt leise zu scheitern.
- Kundenseitige Flüssigkeitszufuhr
- Inseln und Framework-Nutzlasten werden im Browser über das ersetzte HTML erneut gerendert. Der Extraktor zählt die betroffenen Seiten, sodass Sie es in Sekundenschnelle und nicht nach einem vollständigen Durchlauf herausfinden.
- Unterlagen
- Verknüpfte PDFs, DOCX und XLSX bleiben in der Ausgangssprache — die Pipeline berührt immer nur HTML.
- Abwanderung
- Der Speicher wird durch den Quell-Hash verschlüsselt, sodass er Ihnen mitteilen kann, welcher Anteil Ihrer Site sich seit dem letzten Lauf geändert hat. Hohe Abwanderung bedeutet, für wiederholtes Umübersetzen zu bezahlen.
- Bearbeiten einer Übersetzung
- Suchen Sie den Hash in der Speicherdatei, bearbeiten Sie die Zeichenfolge und erstellen Sie ihn neu. Es gibt keinen Editor, keinen Rezensenten und keinen Workflow.
- Volumen
- Sie bezahlen Ihren eigenen Modellanbieter direkt, zu dessen Tarif, mit Ihrem eigenen Schlüssel — oder gar nichts, wenn Sie das Modell selbst betreiben.
- Geänderte Netzwerknutzung
- AGPL-3.0 §13 verpflichtet Sie, Änderungen zu veröffentlichen, wenn Sie eine geänderte Kopie als Dienst für andere Personen ausführen. Die unveränderte oder interne Ausführung ist uneingeschränkt.
Die ersten vier sind diejenigen, die die Leute tatsächlich getroffen haben, und sie haben alle die gleiche Form: Es muss etwas passieren nach den Build, was ein Build-Time-Tool nicht kann. Dafür ist das verwaltete Produkt da, und die kostenloser Plan sind 5.000 Wörter ohne Karte, was ausreicht, um herauszufinden, ob es hilft. Sie benötigen es nicht, um etwas auf dieser Seite zu verwenden.
Namensnennung
What it puts on your pages
Lokalisierte Seiten tragen eine <meta name="generator"> Tag und ein HTML-Kommentar mit der Bezeichnung ConveyThis — etwa 150 Bytes, keine Anfrage, kein Skript und Kein Link. Es ist derselbe Mechanismus, den Astro, Hugo und WordPress verwenden. Zwei Konfigurationsschlüssel entfernen es und nichts im Repo prüft, ob Sie dies getan haben.
Wenn Sie lieber eine sichtbare Gutschrift zeigen möchten, setzen Sie credit.visibleLink zu true und platzieren Sie den Slot an der gewünschten Stelle auf der Seite. Es wird nichts von Ihnen verlangt und es wird nichts dafür gegeben — es existiert, weil manche Leute die von ihnen verwendeten Tools anerkennen möchten, und aus keinem anderen Grund.
Der Kreditlink ist rel="nofollow", absichtlich. Nicht, weil es bezahlt wird — das ist es nicht —, sondern weil es sich um einen Link handelt, den ein Build-Skript sonst auf jeder Seite einer Site hinzufügen würde, und siteweite Links, die durch Tools und nicht durch redaktionelle Auswahl angezeigt werden, sind die Form, auf die Googles Link-Schema-Leitlinien abzielen. Es ist Empfehlungsverkehr wert, keine Backlinks — wer Ihnen etwas anderes sagt, verkauft Ihnen eine Strafe.
Kommerzielle Lizenz
Der Code lautet AGPL-3.0. Die Lokalisierung Ihrer eigenen Websites und der Versand der Ausgabe sind uneingeschränkt — die Lizenz deckt die Software ab, nicht das HTML, das sie schreibt. Es beißt nur, wenn Sie ein geändert Kopie als Netzwerkdienst für andere Personen. Wenn das auf Sie zutrifft und Sie Ihre Änderungen nicht veröffentlichen können, schreiben Sie an [E-Mail geschützt].
Fragen
The questions people actually ask
Ist das wirklich kostenlos? Was ist der Haken?
Benötige ich ein ConveyThis-Konto?
Was kostet ein Lauf eigentlich?
Kann ich mein eigenes Modell verwenden oder es vollständig offline ausführen?
Werden die übersetzten Seiten langsamer sein als die Originale?
Funktioniert es mit meinem Framework?
Was ist mit React-Komponenten oder Astro-Inseln, die hydratisieren?
Can it keep my terminology consistent, and tell a brand name from an ordinary word?
I already use it. What changes when I upgrade to 2.0.0?
Kann ich eine Übersetzung reparieren, die mir nicht gefällt?
Was passiert, wenn ich eine Seite bearbeite oder eine neue hinzufüge?
Werden die übersetzten Seiten von Google indexiert?
Kann ich es kommerziell nutzen? Was bedeutet AGPL-3.0 für mich?
Ist die ConveyThis-Attribution erforderlich?
Wie unterscheidet sich dies von ConveyThis selbst?
Übersetzen ist weit mehr als nur das Kennenlernen von Sprachen, es ist ein komplexer Prozess.
Indem Sie unsere Tipps befolgen und verwenden ConveyThis Ihre übersetzten Seiten werden bei Ihrem Publikum Anklang finden und sich in der Zielsprache heimisch anfühlen.
Obwohl es Anstrengung erfordert, ist das Ergebnis lohnend. Wenn Sie eine Website übersetzen, kann Ihnen ConveyThis mit automatisierter maschineller Übersetzung Stunden sparen.
Beginnen Sie mit ConveyThis in unserem kostenlosen Plan — keine Kreditkarte erforderlich!
