KI-Übersetzungshinweis
Diese Dokumentation wurde automatisch von KI übersetzt.
I18n
In NocoBase-Plugins wird die mehrsprachige Internationalisierung (i18n) sowohl für das Frontend als auch für das Backend unterstützt. Dank eines einheitlichen Mechanismus können Sie mehrsprachige Inhalte in Ihren Plugins mühelos umsetzen.
Mehrsprachige Dateiverwaltung
Die Mehrsprachen-Dateien von Plugins werden einheitlich im Verzeichnis src/locale abgelegt. Es wird empfohlen, diese nach der jeweiligen Sprache zu benennen, zum Beispiel:
|- /plugin-hello
|- /src
|- /locale
|- en-US.json # Englische Sprache
|- zh-CN.json # Chinesische Sprache
Jede Sprachdatei exportiert ein JSON-Objekt, das alle Übersetzungs-Einträge für die entsprechende Sprache enthält, zum Beispiel:
// zh-CN.json
{
"Hello": "你好",
"World": "世界",
"Enter your name": "请输入你的名字",
"Your name is {{name}}": "你的名字是 {{name}}"
}
// en-US.json
{
"Hello": "Hello",
"World": "World",
"Enter your name": "Enter your name",
"Your name is {{name}}": "Your name is {{name}}"
}
Wenn Sie Sprachdateien zum ersten Mal hinzufügen, müssen Sie die Anwendung neu starten, damit diese wirksam werden. Sie können die Übersetzungs-Einträge über die API überprüfen:
http://localhost:13000/api/app:getLang?locale=zh-CN
Globale i18n-Instanz
app.i18n ist die globale i18n-Instanz, die sich für CLI- oder globale Plugin-Szenarien eignet. Sie lässt sich mit inquirer kombinieren, um Kommandozeilen-Interaktionen zu realisieren:
import select from '@inquirer/select';
import input from '@inquirer/input';
export class PluginSampleI18nServer extends Plugin {
load() {
this.app.command('test-i18n').action(async () => {
const answer1 = await select({
message: 'Select a language',
choices: [
{ name: '中文', value: 'zh-CN' },
{ name: 'English', value: 'en-US' }
]
});
await this.app.changeLanguage(answer1);
const answer2 = await input({
message: app.i18n.t('Enter your name')
});
console.log(app.i18n.t('Your name is {{name}}', { name: answer2 }));
});
}
}
app.i18n.t(text, options) wird verwendet, um Text zu übersetzen und unterstützt dabei Vorlagen-Variablen.
i18n im Anfrage-Kontext
Die ctx.i18n-Instanz jedes Requests ist ein Klon der globalen i18n-Instanz und liefert mehrsprachige Informationen unabhängig von der Client-Sprache.
Client-Sprache festlegen
GET /?locale=en-US HTTP/1.1
Host: localhost:13000
- Request Header (Empfohlen):
GET / HTTP/1.1
Host: localhost:13000
X-Locale: en-US
Verwendung in Middleware
export class PluginSampleI18nServer extends Plugin {
load() {
this.app.use(async (ctx, next) => {
if (ctx.path === '/api/test-i18n') {
ctx.body = ctx.t('Hello', { ns: '@my-project/plugin-hello' });
}
await next();
});
}
}
Beim Aufruf von http://localhost:13000/api/test-i18n?locale=zh-CN wird 你好 zurückgegeben.
i18n innerhalb von Plugins
Plugins können plugin.t(key, options) direkt verwenden, um Übersetzungen abzurufen:
export class PluginSampleI18nServer extends Plugin {
load() {
this.app.use(async (ctx, next) => {
if (ctx.path === '/api/plugin-i18n') {
ctx.body = this.plugin.t('Hello');
}
await next();
});
}
}
plugin.t(text) ist äquivalent zu ctx.t(text, { ns }).
Zugehörige APIs
- app.i18n
- app.t(text, options)
- ctx.i18n
- ctx.t(text, options)
- plugin.t()
- tExpr(text, options)