i18n Internasionalisasi
Plugin NocoBase mengelola file multibahasa melalui direktori src/locale/. Setelah file terjemahan ditulis, Anda dapat mendapatkan teks terjemahan dengan menggunakan this.t() di Plugin, hook useT() di Component, dan tExpr() di definisi FlowModel.
File Terjemahan
Buat file JSON berdasarkan bahasa di src/locale/ plugin, dengan key adalah teks asli bahasa Inggris dan value adalah terjemahan dalam bahasa yang sesuai:
Beberapa hal yang perlu diperhatikan:
- Gunakan teks asli bahasa Inggris untuk key, sehingga ketika terjemahan tidak ada, dapat fallback ke bahasa Inggris
- Variabel menggunakan kurung kurawal ganda
{{name}}, sintaksnya konsisten dengan i18next - Pertama kali menambahkan file bahasa perlu restart aplikasi agar berlaku, setelah itu modifikasi konten dapat dilakukan dengan hot update
- NocoBase secara otomatis menggunakan nama paket plugin sebagai namespace terjemahan, sehingga terjemahan plugin yang berbeda tidak akan bentrok
Menggunakan di Plugin: this.t()
Di kelas Plugin, this.t() akan secara otomatis menyuntikkan nama paket plugin saat ini sebagai namespace, tidak perlu meneruskan ns secara manual:
Menggunakan di Component: useT()
Di Component React, Anda tidak dapat langsung menggunakan this.t(). Scaffolding plugin akan secara otomatis menghasilkan file locale.ts yang menyediakan hook useT():
Penggunaan di Component seperti berikut:
Function t yang dikembalikan oleh useT() sudah ter-bind dengan namespace plugin, cukup teruskan key langsung.
Menggunakan di FlowModel: tExpr()
FlowModel.define() dan registerFlow() dieksekusi pada saat module loading, ketika i18n belum diinisialisasi, sehingga t() tidak dapat dipanggil langsung. Untuk skenario ini gunakan tExpr() — yang menghasilkan string ekspresi terjemahan tertunda yang akan di-resolve saat runtime:
Singkatnya: this.t() dan useT() digunakan untuk terjemahan saat runtime, tExpr() digunakan untuk terjemahan tertunda saat definisi statis.
tExpr memiliki dua sumber: locale.ts yang dihasilkan otomatis oleh plugin, dan @nocobase/flow-engine. Perbedaannya terletak pada tExpr di locale.ts yang sudah ter-bind dengan nama paket plugin sebagai namespace, sedangkan tExpr yang diimpor langsung dari @nocobase/flow-engine tidak memiliki binding namespace. Di code plugin, selalu gunakan tExpr yang diekspor dari locale.ts, sehingga terjemahan dapat dicocokkan dengan benar ke file bahasa plugin itu sendiri.
Ringkasan Tiga Cara Penggunaan
Tautan Terkait
- Context → Kapabilitas Umum → Internasionalisasi — Referensi API lengkap untuk ctx.t, ctx.i18n
- Daftar Bahasa — Daftar lengkap kode bahasa yang didukung NocoBase
- Pengembangan Component — Penggunaan useFlowContext di Component
- Ikhtisar FlowEngine — Penggunaan tExpr di FlowModel

