i18n Internationalisierung
NocoBase-Plugins verwalten Mehrsprachen-Dateien über das Verzeichnis src/locale/. Sind die Übersetzungsdateien geschrieben, lassen sich die übersetzten Texte in der Plugin-Klasse über this.t(), in Components über den useT()-Hook und in FlowModel-Definitionen über tExpr() abrufen.
Übersetzungsdateien
Erstellen Sie unter src/locale/ des Plugins JSON-Dateien je Sprache. Der Schlüssel ist der englische Originaltext, der Wert die Übersetzung in die jeweilige Sprache:
Einige Hinweise:
- Der Schlüssel ist der englische Originaltext, sodass bei fehlender Übersetzung auf Englisch zurückgefallen werden kann
- Variablen verwenden doppelte geschweifte Klammern
{{name}}, konsistent mit der Syntax von i18next - Beim erstmaligen Hinzufügen einer Sprachdatei muss die Anwendung neu gestartet werden, damit sie wirksam wird; spätere Änderungen werden per Hot-Reload übernommen
- NocoBase verwendet automatisch den Paketnamen des Plugins als Übersetzungs-Namespace, sodass Übersetzungen verschiedener Plugins nicht kollidieren
Verwendung in einem Plugin: this.t()
In einer Plugin-Klasse fügt this.t() automatisch den aktuellen Plugin-Paketnamen als Namespace ein, sodass Sie ns nicht manuell übergeben müssen:
Verwendung in Components: useT()
In React Components können Sie this.t() nicht direkt verwenden. Das Plugin-Gerüst generiert automatisch eine Datei locale.ts, die einen useT()-Hook bereitstellt:
In Components verwenden Sie es so:
Die von useT() zurückgegebene Funktion t ist bereits an den Namespace des Plugins gebunden — Sie übergeben einfach den Schlüssel.
Verwendung in FlowModel: tExpr()
FlowModel.define() und registerFlow() werden beim Laden des Moduls ausgeführt, zu diesem Zeitpunkt ist i18n noch nicht initialisiert und t() kann nicht direkt aufgerufen werden. Verwenden Sie in diesem Fall tExpr() — es erzeugt einen verzögerten Übersetzungsausdruck als Zeichenkette, der zur Laufzeit ausgewertet wird:
Kurz gesagt: this.t() und useT() werden für die Übersetzung zur Laufzeit verwendet, tExpr() für die verzögerte Übersetzung in statischen Definitionen.
tExpr hat zwei Quellen: die vom Plugin automatisch generierte locale.ts und @nocobase/flow-engine. Der Unterschied: Das tExpr aus locale.ts ist bereits an den Plugin-Paketnamen als Namespace gebunden, während das direkt aus @nocobase/flow-engine importierte tExpr keine Namespace-Bindung hat. Verwenden Sie im Plugin-Code immer das aus locale.ts exportierte tExpr, damit die Übersetzung korrekt zu den Sprachdateien des eigenen Plugins zugeordnet wird.
Schnellübersicht der drei Verwendungsarten
Verwandte Links
- Context → Häufige Fähigkeiten → Internationalisierung — Vollständige API-Referenz zu ctx.t, ctx.i18n
- Sprachenliste — Vollständige Liste der von NocoBase unterstützten Sprachcodes
- Component-Entwicklung — Verwendung von useFlowContext in Components
- FlowEngine-Übersicht — Verwendung von tExpr in FlowModel

