TIP
Dokumen ini diterjemahkan oleh AI. Untuk ketidakakuratan apa pun, silakan lihat versi bahasa Inggris
I18n
Plugin NocoBase mendukung internasionalisasi (i18n) multibahasa untuk frontend dan backend. Dengan mekanisme terpadu, Anda dapat dengan mudah mengimplementasikan konten multibahasa di dalam plugin.
Manajemen Berkas Multibahasa
Berkas multibahasa plugin disimpan secara terpadu di direktori src/locale. Disarankan untuk menamainya berdasarkan berkas bahasa, contohnya:
|- /plugin-hello
|- /src
|- /locale
|- en-US.json # Bahasa Inggris
|- zh-CN.json # Bahasa Mandarin
Setiap berkas bahasa mengekspor objek JSON yang berisi semua entri terjemahan untuk bahasa tersebut, contohnya:
// 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}}"
}
Saat pertama kali menambahkan berkas bahasa, Anda perlu me-restart aplikasi agar perubahan berlaku. Anda dapat memverifikasi entri terjemahan melalui API:
http://localhost:13000/api/app:getLang?locale=zh-CN
Instans i18n Global
app.i18n adalah instans i18n global yang cocok untuk skenario CLI atau plugin secara global. Ini dapat digabungkan dengan inquirer untuk mengimplementasikan interaksi baris perintah:
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: 'Bahasa Mandarin', value: 'zh-CN' },
{ name: 'Bahasa Inggris', 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) digunakan untuk menerjemahkan teks dan mendukung variabel template.
i18n Konteks Permintaan
ctx.i18n pada setiap permintaan adalah instans klon dari i18n global, yang merespons informasi multibahasa secara independen berdasarkan bahasa klien.
Mengatur Bahasa Klien
GET /?locale=en-US HTTP/1.1
Host: localhost:13000
- Header Permintaan (Direkomendasikan):
GET / HTTP/1.1
Host: localhost:13000
X-Locale: en-US
Penggunaan dalam 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();
});
}
}
Mengakses http://localhost:13000/api/test-i18n?locale=zh-CN akan mengembalikan 你好.
i18n Internal Plugin
Plugin dapat langsung menggunakan plugin.t(key, options) untuk mendapatkan terjemahan:
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) setara dengan ctx.t(text, { ns })
API Terkait
- app.i18n
- app.t(text, options)
- ctx.i18n
- ctx.t(text, options)
- plugin.t()
- tExpr(text, options)