Stellen Sie Ihre Frage und erhalten Sie einen Resümee des Dokuments, indem Sie diese Seite und den AI-Anbieter Ihrer Wahl referenzieren
Versionshistorie
- "Initialer Verlauf"v9.3.112.8.2026
Der Inhalt dieser Seite wurde mit einer KI übersetzt.
Den englischen Originaltext ansehenWenn Sie eine Idee haben, um diese Dokumentation zu verbessern, zögern Sie bitte nicht, durch das Einreichen eines Pull-Requests auf GitHub beizutragen.
GitHub-Link zur DokumentationMarkdown des Dokuments in die Zwischenablage kopieren
ESLint x OXLint Plugin
eslint-plugin-intlayer erkennt die typischen i18n-Fehler, die TypeScript nicht erfassen kann:
- Hartcodierter Text, der nie in einem Wörterbuch deklariert wurde.
- Dynamische Aufrufe, die die Typüberprüfung bestehen und ausgeführt werden, die der Intlayer-Compiler jedoch nicht optimieren kann.
- Toter Inhalt — Wörterbücher und Felder, die an keiner Stelle im Projekt gelesen werden (Opt-in).
Unbekannte Wörterbuchschlüssel, unbekannte Feldpfade und fehlende Locales sind bereits Kompilierungsfehler, weshalb das Plugin diese nicht wiederholt.
Installation
Kopieren Sie den Code in die Zwischenablage
Erfordert ESLint 9 oder höher (Flat Config). ESLint 10 wird unterstützt.
Verwendung
Das Plugin funktioniert sowohl in ESLint als auch in oxlint — dieselben Regeln, dieselben Optionen.
Kopieren Sie den Code in die Zwischenablage
Oder fügen Sie eine Konfiguration ein und legen die Schweregrade selbst fest:
Kopieren Sie den Code in die Zwischenablage
Kopieren Sie den Code in die Zwischenablage
Zwei Hinweise: Die JS-Plugin-Unterstützung von oxlint befindet sich noch im Alpha-Stadium und oxlint unterstützt keine benutzerdefinierten Parser — .vue-, .svelte-, .astro-Dateien und Angular-Templates werden dort daher nicht geprüft. Führen Sie oxlint für Ihre JS/TS/JSX-Dateien aus und behalten Sie ESLint für den Rest bei.
no-unused-content wird oben absichtlich weggelassen: Die Regel benötigt das Arbeitsverzeichnis und den Pfad der geprüften Datei aus dem Regelkontext, was die Alpha-Bridge für JS-Plugins nicht garantiert. Führen Sie diese Regel unter ESLint aus.
Konfigurationen
Tabelle in einem Modal öffnen, um alle Daten übersichtlich anzuzeigen
| Konfiguration | no-raw-text | static-dictionary-key | no-dynamic-field-access | enforce-adapter-import | no-unused-content |
|---|---|---|---|---|---|
recommended | warn | error | error | off | off |
strict | error (+ Nicht-JSX-Zeichenfolgen) | error | error | error | off |
contract-only | off | error | error | off | off |
recommended belässt no-raw-text absichtlich bei warn: Bei Anwendung auf eine bestehende Codebasis werden alle unübersetzten Zeichenfolgen auf einmal gemeldet, was Ihren Build nicht von Tag eins an blockieren sollte.
enforce-adapter-import ist standardmäßig deaktiviert — aktivieren Sie die Regel bei Bedarf explizit.
no-unused-content ist in allen Konfigurationen standardmäßig deaktiviert, einschließlich strict. Es ist die einzige Regel, die Ihre Intlayer-Konfiguration liest und Ihre Quelldateien vom Dateisystem durchsucht. Die Aktivierung sollte daher eine bewusste Entscheidung sein und nicht automatisch über ein Preset erfolgen.
Regeln
no-raw-text
Meldet benutzerorientierten Text, der nicht in einem Wörterbuch deklariert ist. Verwendet dieselbe Erkennung wie intlayer extract, sodass Markennamen, CSS-Klassen und technische Bezeichner ignoriert werden.
Kopieren Sie den Code in die Zwischenablage
Inhaltsdeklarationsdateien (*.content.ts, …) werden übersprungen.
Um eine Datei vollständig auf einmal zu korrigieren, führen Sie npx intlayer extract aus und lassen Sie den Compiler die Strings in ein Wörterbuch überführen.
Optionen
Kopieren Sie den Code in die Zwischenablage
static-dictionary-key
Erfordert, dass der Wörterbuchschlüssel ein Zeichenfolgen-Literal ist.
Der Compiler kann ein Wörterbuch nur dann vorladen, wenn er den Schlüssel direkt am Aufrufort lesen kann. Bei einem dynamisch berechneten Schlüssel wird die Optimierung stillschweigend übersprungen und stattdessen jedes Wörterbuch gebündelt.
Kopieren Sie den Code in die Zwischenablage
Dies gilt für useIntlayer, getIntlayer und jeden Kompatibilitätsadapter (useTranslation, useTranslations, formatMessage, <FormattedMessage id>, <Trans i18nKey>, …).
no-dynamic-field-access
Erfordert, dass das Feld, das Sie aus einem Wörterbuch lesen, statisch bekannt ist.
Der Compiler entfernt Felder, deren Verwendung er nicht erkennen kann. Ein berechneter Zugriff ist für ihn unsichtbar, sodass der Lesezugriff zur Laufzeit undefined zurückgeben kann.
Kopieren Sie den Code in die Zwischenablage
enforce-adapter-import
Bevorzugt den Kompatibilitätsadapter @intlayer/* gegenüber dem Originalpaket. Das Originalpaket löst nur dann zu Intlayer auf, wenn der Bundler-Alias konfiguriert ist; der Adapter funktioniert immer. Automatisch behebbar mit --fix.
Kopieren Sie den Code in die Zwischenablage
no-unused-content
Standardmäßig deaktiviert. Meldet Inhalte, die im Projekt nirgends gelesen werden, sowie Wörterbuchschlüssel, die an mehr als einer Stelle deklariert sind.
Kopieren Sie den Code in die Zwischenablage
Im Gegensatz zu den anderen Regeln kann diese Regel nicht allein anhand der geprüften Datei entscheiden — ein Feld ist nur relativ zum gesamten Projekt ungenutzt. Bei der ersten Inhaltsdeklaration eines Lint-Laufs lädt sie Ihre Intlayer-Konfiguration, durchsucht die Quelldateien gemäß Konfiguration (build.traversePattern, compiler.transformPattern) und führt dieselbe Nutzungsanalyse aus, die auch @intlayer/lsp und das Durchstreichen von „ungenutzt“ in der VS Code-Erweiterung antreibt. Das Ergebnis wird für cacheTtl Millisekunden zwischengespeichert, sodass der Scan einmal pro Durchlauf und nicht für jede Datei ausgeführt wird.
Optionen
Kopieren Sie den Code in die Zwischenablage
Verringern Sie cacheTtl, wenn Sie mit einem langlebigen Editor-Server linten und Ihre Änderungen schneller sehen möchten; setzen Sie baseDir, wenn ein einzelner Lint-Lauf mehrere Intlayer-Projekte in einem Monorepo umfasst.
Neigt zur Zurückhaltung. Ein Fehlalarm würde eine Übersetzung löschen. Daher wird nichts gemeldet, wenn das Wörterbuch auf eine Weise verwendet wird, die die Analyse nicht nachverfolgen kann: das Inhaltsobjekt als Ganzes übergeben, eine gebundene Übersetzerfunktion (const t = useTranslations("home")), eine über direkten Import erreichte Deklaration (useDictionary(myDictionary)), einnest()aus einem anderen Wörterbuch oder eine Feldliste, die durch einen Spread nicht-exhaustiv ist. Single-File-Komponenten (.vue,.svelte,.astro) gelten als Verwender aller Felder der genannten Wörterbücher, da ihre Script-Blöcke hier nicht analysiert werden.
reportDuplicateKeys liest die unzusammengeführten Wörterbücher, die der Build unter .intlayer/ schreibt, und bleibt daher stumm, bis das Projekt mindestens einmal gebaut wurde. Zwei Deklarationen mit demselben Schlüssel werden zusammengeführt, was ein legitimes Muster ist — die Meldung existiert, da bei einem beidseitig definierten Feld stillschweigend nur einer der beiden Werte beibehalten wird.
Der Analysator wird aus @intlayer/lsp geladen, welches als ESM ausgeliefert wird. Die Regel benötigt daher eine Node-Version, die ein ES-Modul via require() laden kann — Node 20.19+ oder 22.12+. Bei älteren Versionen meldet sie nichts, anstatt den Lint-Lauf abbrechen zu lassen.
Frameworks
Jede Regel funktioniert über alle Intlayer-Integrationen hinweg, einschließlich innerhalb von Vue-, Svelte- und Angular-Templates. Sie müssen ESLint lediglich mitteilen, welcher Parser jeden Dateityp liest.
Tabelle in einem Modal öffnen, um alle Daten übersichtlich anzuzeigen
| Framework | Dateien | Parser |
|---|---|---|
| React, Preact, Solid, Lit | .jsx .tsx | typescript-eslint |
| Next.js | .jsx .tsx | typescript-eslint |
| Vue, Nuxt | .vue | vue-eslint-parser |
| Svelte, SvelteKit | .svelte | svelte-eslint-parser |
| Angular | .ts | typescript-eslint |
| Angular-Templates | .component.html | @angular-eslint/template-parser |
| Astro | .astro | astro-eslint-parser |
Kopieren Sie den Code in die Zwischenablage
Installieren Sie nur die Parser, die Ihr Projekt benötigt.
Bekannte Einschränkung. In Vue- und Angular-Templates wird ein Ausdruck wie{{ content[key] }}nicht vonno-dynamic-field-accessgeprüft. Dynamische Zugriffe im Script-Block werden normal erkannt.
