๐ RustBasic Translatable
rustbasic-translatable adalah paket lokalisasi multi-bahasa resmi (i18n) untuk RustBasic Framework. Paket ini menyediakan manajemen bahasa yang aman, cepat (O(1)), dan berbasis file JSON yang secara otomatis mengonfigurasi dirinya sendiri (zero-config scaffolding) saat dipasang.
Dengan memanfaatkan kemampuan canggih tokio::task_local!, paket ini mampu mengikat bahasa aktif ke setiap request thread secara asinkron. Anda dapat memanggil fungsi terjemahan __("kunci") langsung dari mana saja di seluruh basis kode Anda tanpa harus mengoper argumen bahasa secara manual di setiap baris fungsi.
โจ Fitur Utama
- ๐ Zero-Config Scaffolding: Secara otomatis membuat folder
lang/di root proyek induk Anda lengkap dengan template bahasa bawaan (id.jsondanen.json) saat proyek dikompilasi pertama kali. - โก Pencarian Kilat $O(1)$: Mengurai file JSON bersarang (nested JSON) secara rekursif pada startup dan meratakannya (flattening) ke memori dalam bentuk dot-separated keys (contoh:
auth.failed) agar lookup saat runtime berjalan super cepat. - ๐งต Request-Scoped Locale: Mengikat preferensi bahasa aktif ke connection task menggunakan
tokio::task_local!, memungkinkan pemanggilan fungsitransatau__secara global. - ๐ฏ Deteksi Bahasa Pintar (Axum Middleware): Mendeteksi preferensi bahasa pengguna secara otomatis berdasarkan prioritas berikut:
- Query Parameter:
?lang=enatau?locale=en - Session Rust: Membaca kunci
"locale"di session store Axum Anda. - Request Cookie: Cookie
langataulocale. - Header Browser: Menganalisis header
Accept-Languagebrowser pengguna secara otomatis.
- Query Parameter:
- ๐ Placeholder Dinamis: Mengganti placeholder variabel seperti
{name}dengan nilai dinamis saat runtime secara instan. - ๐ก๏ธ Sistem Fallback Kokoh: Jika terjemahan tidak ditemukan pada bahasa aktif, sistem akan otomatis beralih ke bahasa default (
id), dan jika masih tidak ditemukan, akan menampilkan kunci itu sendiri sebagai cadangan terakhir.
๐ฆ Pemasangan
Cukup tambahkan rustbasic-translatable ke dalam blok dependensi Cargo.toml pada proyek induk Anda:
[]
= { = "../rustbasic-core", = "0.1" }
= { = "../rustbasic-translatable", = "0.0" }
Saat Anda menjalankan perintah cargo build atau cargo check berikutnya, paket ini akan langsung memicu pembuatan otomatis folder bahasa Anda!
โ๏ธ Cara Kerja Scaffolding Otomatis
Saat dipasang, build script (build.rs) mendeteksi root proyek induk Anda dan secara otomatis membuat struktur berkas berikut:
proyek-anda/
โโโ lang/
โ โโโ id.json # Template Terjemahan Bahasa Indonesia
โ โโโ en.json # Template Terjemahan Bahasa Inggris
Template File Bahasa Bawaan (lang/id.json):
๐ Panduan Integrasi Cepat
1. Inisialisasi Saat Server Startup (main.rs)
Panggil fungsi init dari rustbasic_translatable di dalam fungsi main aplikasi Anda untuk memuat semua file JSON ke memori:
use dotenv;
async
2. Pasang Middleware Translasi (routes/web.rs)
Tambahkan translatable_middleware ke router aplikasi Anda. Middleware ini secara otomatis mengekstrak preferensi bahasa pengguna di setiap request dan mengikatnya ke konteks asinkron aktif:
use ;
use AppState;
use cratewelcome_controller;
๐ก Contoh Penggunaan di Controller
Setelah middleware dipasang, Anda dapat langsung menggunakan makro/fungsi global __ atau trans di mana saja tanpa perlu membawa-bawa argumen locale!
use ResponseHelper;
use ;
use IntoResponse;
pub async
๐ฏ Cara Pengguna Berpindah Bahasa
Middleware deteksi bahasa secara cerdas mengidentifikasi bahasa terpilih dengan alur berikut:
- Query URL: Cukup tambahkan parameter query pada tautan atau navigasi Anda:
http://localhost:4000/?lang=en(Bahasa Inggris)http://localhost:4000/?lang=id(Bahasa Indonesia)
- Session: Atur preferensi bahasa di session user:
session.set("locale", "en")
- Cookie: Simpan preferensi bahasa pada cookie browser pengguna:
Cookie: lang=enatauCookie: locale=en
- Header Browser: Jika tidak ada parameter di atas, sistem akan mendeteksi bahasa bawaan sistem operasi/browser pengguna secara otomatis via header
Accept-Language.
๐ Detail Keamanan & Validasi Crate
Kami berkomitmen menjaga performa dan kestabilan kode di tingkat produksi:
- Zero Warnings: Paket dikompilasi 100% bersih tanpa ada warning atau error.
- Rangkaian Tes Mandiri: Dilengkapi dengan unit test bawaan untuk menjamin keakuratan flattening JSON dan penggantian placeholder:
๐ Lisensi
Paket ini dirilis di bawah lisensi MIT. Anda bebas menyalin, memodifikasi, dan mendistribusikannya untuk proyek pribadi maupun komersial.