Fehlerbehebung
Häufige Probleme und Lösungen für i18n-rosetta.
API & Authentifizierung
"OPENROUTER_API_KEY not found"
Rosetta benötigt einen API-Schlüssel für die LLM-Übersetzung. Legen Sie diesen als Umgebungsvariable fest:
export OPENROUTER_API_KEY="sk-or-v1-..."
Oder in einer .env-Datei (falls Ihr Projekt .env-Dateien lädt):
OPENROUTER_API_KEY=sk-or-v1-...
Wenn Sie nur über einen Google Translate API-Schlüssel verfügen, erkennt rosetta dies automatisch und verwendet Google Translate als Standardmethode. Es ist keine Änderung der Konfiguration erforderlich.
"401 Unauthorized" von OpenRouter
Ihr API-Schlüssel ist ungültig oder abgelaufen. Überprüfen Sie ihn unter openrouter.ai/keys.
"429 Too Many Requests" / Ratenbegrenzung
Rosetta behandelt Ratenbegrenzungen intern mit einem exponentiellen Backoff. Wenn Sie regelmäßig an Ratenbegrenzungen stoßen:
- Reduzieren Sie die Stapelgröße in Ihrer Konfiguration:
{ "batchSize": 15 }
- Verwenden Sie ein Modell mit höheren Ratenbegrenzungen (z. B. hat
google/gemini-3.5-flashgroßzügige Limits) - Verwenden Sie eine günstigere/schnellere Methode für Sprachpaare mit hohem Volumen — Google Translate hat keine Ratenbegrenzungen:
{ "pairs": { "en:it": { "method": "google-translate" } } }
Modell nicht gefunden / 404-Fehler
Direkte LLM-Anbieter (openai, anthropic, gemini) validieren Ihre Modell-Zeichenfolge bei der ersten Verwendung. Wenn Sie eine Warnung sehen:
"looks like an OpenRouter path" — Sie verwenden ein Modell im OpenRouter-Format (google/gemini-3.5-flash) bei einem direkten Anbieter. Direkte Anbieter verwenden reine Modellnamen:
- { "method": "gemini", "model": "google/gemini-3.5-flash" }
+ { "method": "gemini", "model": "gemini-2.5-flash" }
Oder wechseln Sie zur Methode llm, um OpenRouter zu verwenden:
{ "method": "llm", "model": "google/gemini-3.5-flash" }
"is an Anthropic/OpenAI/Gemini model" — Sie senden ein Modell an den falschen Anbieter:
- { "method": "gemini", "model": "claude-sonnet-4-6" }
+ { "method": "anthropic", "model": "claude-sonnet-4-6" }
"not found in available models" — Das Modell ist möglicherweise veraltet oder falsch geschrieben. Rosetta ruft die aktuelle Modellliste des Anbieters ab und schlägt Alternativen vor. Überprüfen Sie die Dokumentation des Anbieters auf aktuelle Modellnamen.
:::tip Modelle veralten gelegentlich
Anbieter mustern Modellnamen regelmäßig aus. Wenn Übersetzungen nach einem Anbieter-Update plötzlich fehlschlagen, überprüfen Sie die Ausgabe von [WARN] — dort werden Ihnen aktuelle Alternativen angezeigt.
:::
Übersetzungsqualität
Übersetzungen geben die Ausgangssprache unverändert wieder
Das Quality Gate fängt dies ab. Wenn eine Übersetzung mit der englischen Quelle identisch ist, wird sie abgelehnt und erneut versucht. Wenn das Problem weiterhin besteht:
- Überprüfen Sie das Modell — Einige Modelle erzielen bei bestimmten Sprachpaaren schlechte Ergebnisse
- Fügen Sie Anweisungen zum Sprachregister hinzu — Teilen Sie dem Modell mit, welche Sprache es erzeugen soll:
{"languages": {"ja": { "name": "Japanese", "register": "Polite/formal Japanese" }}}
- Versuchen Sie ein anderes Modell — Wechseln Sie von
gpt-4o-minizugpt-4oodergoogle/gemini-2.5-pro
Falsche Schriftausgabe (z. B. lateinischer Text für Japanisch)
Die Überprüfung der Schriftkonformität durch das Quality Gate fängt die meisten Fälle ab. Wenn das Problem weiterhin besteht:
- Stellen Sie sicher, dass der Gebietsschema-Code korrekt ist (
ja, nichtjp) - Fügen Sie explizite Schriftanweisungen im Feld
registerhinzu:{ "register": "Japanese using hiragana, katakana, and kanji" }
Halluzinationsmuster in der Ausgabe
Wiederholte Trigramm-Muster (z. B. "hallo hallo hallo") werden vom Detektor für Halluzinationsschleifen erfasst. Wenn die Ausgabe fehlerhaft ist, den Detektor aber passiert:
- Reduzieren Sie die Stapelgröße — Kleinere Stapel erzeugen fokussiertere Ausgaben
- Verwenden Sie ein leistungsstärkeres Modell — Größere Modelle halluzinieren bei nicht-lateinischen Schriften weniger
- Fügen Sie Trainingsdaten hinzu — Wörterbuchbegriffe verankern die Übersetzung
Datei- und Formatprobleme
"No locale files found"
Rosetta erkennt Gebietsschema-Dateien automatisch. Wenn diese nicht gefunden werden können:
- Überprüfen Sie
localesDir— Muss auf das Verzeichnis verweisen, das die Gebietsschema-Dateien enthält:{ "localesDir": "./locales" } - Überprüfen Sie die Dateibenennung — Dateien müssen nach dem Gebietsschema-Code benannt sein:
en.json,fr.jsonusw. - Überprüfen Sie das Format — Unterstützte Formate: JSON, verschachteltes JSON, YAML, TOML
Konflikte mit der Sperrdatei
Wenn .i18n-rosetta.lock in einen fehlerhaften Zustand gerät:
# Reset the lock file (next sync will retranslate everything)
rm .i18n-rosetta.lock
npx i18n-rosetta sync
Das Löschen der Sperrdatei bedeutet, dass bei der nächsten Synchronisierung alle Schlüssel neu übersetzt werden, nicht nur die geänderten. Dies hat Auswirkungen auf die API-Kosten bei großen Projekten.
Bestimmte Schlüssel neu übersetzen
Wenn einzelne Übersetzungen falsch sind und Sie eine Neuübersetzung erzwingen möchten, ohne die Sperrdatei zu löschen:
# Re-translate a single key
npx i18n-rosetta sync --force-keys "hero.title"
# Re-translate multiple keys
npx i18n-rosetta sync --force-keys "nav.home,nav.about,footer.copyright"
Das Flag --force-keys überschreibt die Hash-Überprüfung der Sperrdatei für diese spezifischen Schlüssel und erzwingt eine Neuübersetzung, ohne andere Schlüssel zu beeinträchtigen.
Inhaltsübersetzung beschädigt Codeblöcke
Dies sollte nicht passieren — Codeblöcke werden vor der Übersetzung abgeschirmt. Falls es dennoch auftritt:
- Stellen Sie sicher, dass der Codeblock die Standard-Begrenzung (dreifache Backticks) verwendet
- Suchen Sie nach nicht geschlossenen Codeblöcken im Quell-Markdown
- Erstellen Sie ein Issue — dies ist ein Fehler im Sentinel-Abschirmsystem
CLI-Probleme
--watch erkennt keine Änderungen
Die Dateiüberwachung verwendet das native fs.watch von Node.js. Bekannte Probleme:
- Netzwerklaufwerke —
fs.watchfunktioniert auf NFS/SMB-Freigaben nicht zuverlässig - Docker-Volumes — Verwenden Sie den Polling-Modus oder führen Sie rosetta innerhalb des Containers aus
- Große Verzeichnisse — Der Watcher überwacht
localesDirrekursiv; sehr tiefe Verzeichnisbäume können die Limits des Betriebssystems überschreiten
npx führt eine alte Version aus
# Clear the npx cache
npx --yes i18n-rosetta@latest sync
Oder installieren Sie es global:
npm install -g i18n-rosetta
i18n-rosetta sync
Leistung
Synchronisierung ist bei vielen Sprachen langsam
Rosetta übersetzt standardmäßig alle Gebietsschemata parallel. Wenn die Synchronisierung dennoch langsam ist:
- Verwenden Sie Google Translate für Sprachpaare mit hohem Volumen — Es ist 10–50× schneller als die LLM-Übersetzung
- Erhöhen Sie die Stapelgröße (Standard ist 80):
{ "batchSize": 120 }
- Passen Sie die Nebenläufigkeit an — Die Parallelität für JSON-Gebietsschemata ist standardmäßig auf 200 und für Inhalte auf 48 eingestellt. Wenn Ihr API-Anbieter höhere Ratenbegrenzungen unterstützt:
npx i18n-rosetta sync --json-concurrency 80 --content-concurrency 20
- Verwenden Sie ein schnelles Modell —
gpt-4o-miniist deutlich schneller alsgpt-4o
Hohe API-Kosten
- Überprüfen Sie die Stapelgrößen — Größere Stapel = weniger API-Aufrufe = geringere Kosten
- Verwenden Sie Translation Memory — TM ist standardmäßig aktiviert. Führen Sie
i18n-rosetta tm statsaus, um zu überprüfen, ob es funktioniert. Wenn Sie nach mehreren Synchronisierungen 0 Einträge sehen, stimmt möglicherweise etwas mit den Berechtigungen Ihres.rosetta/-Verzeichnisses nicht - Verwenden Sie Prompt-Caching — Rosetta teilt System-/Benutzernachrichten auf, um Cache-Treffer bei Anthropic- und Google-Modellen zu erzielen
- Verwenden Sie Google Translate für Tier-2-Sprachen — Siehe das Kochbuch 30 Sprachen übersetzen
Veraltete Übersetzungen nach Anbieterwechsel
Wenn Sie von einer Übersetzungsmethode zu einer anderen wechseln (z. B. von llm zu deepl), liefert der TM-Cache möglicherweise weiterhin alte Übersetzungen der vorherigen Methode für Schlüssel, deren Quelltext sich nicht geändert hat. Der Cache-Schlüssel enthält den Methodennamen, sodass die meisten Fälle automatisch behandelt werden. Wenn Sie jedoch model innerhalb derselben Methode geändert haben:
# Force fresh translations for all keys
i18n-rosetta sync --no-tm
# Or clear the cache entirely and re-sync
i18n-rosetta tm clear --yes
i18n-rosetta sync
Weitere Details zum Design der Cache-Schlüssel finden Sie unter Translation Memory.
Kommen Sie nicht weiter?
- GitHub Issues — Durchsuchen Sie bestehende Issues oder erstellen Sie ein neues
- Architektur-Dokumentation — Verstehen Sie das Systemdesign
- Quality Gate — Wie die Validierung im Hintergrund funktioniert