Pernah pake aplikasi yang tampilan-nya cuma bahasa Inggris padahal target user-nya Indonesia? Atau lihat tanggal "04/16/2026" yang bikin bingung — ini April 16 atau 4 Oktober? Itu sign aplikasi yang **gak siap untuk audience global**. i18n = arsitektur kode supaya gampang adaptasi ke bahasa/region berbeda. l10n = proses ngedaptasi-nya (terjemahan, format lokal). Tanpa ini, scaling ke 75% user internet non-Inggris jadi mimpi buruk.
💡 "i18n" itu numeronym — "i" + 18 huruf + "n" = "internationalization". Sama "l10n" = "l" + 10 huruf + "n" = "localization". "a11y" (accessibility), "k8s" (kubernetes) = pola nama serupa di tech. Hemat ngetik untuk istilah panjang.
Apa itu i18n & l10n?
Internationalization (i18n) adalah proses merancang dan membangun software agar mudah diadaptasi ke berbagai bahasa dan region — tanpa perlu mengubah source code. Angka 18 berasal dari jumlah huruf antara "i" dan "n" dalam kata "internationalization".
Localization (l10n) adalah proses mengadaptasi software untuk bahasa, budaya, atau region tertentu — termasuk menerjemahkan teks, menyesuaikan format tanggal, mata uang, dan aturan tata bahasa lokal.
Perbedaan i18n vs l10n
| Aspek | i18n (Internationalization) | l10n (Localization) |
|---|---|---|
| Fokus | Arsitektur & infrastruktur | Konten & adaptasi |
| Siapa | Developer | Translator / Lokalisator |
| Kapan | Saat development | Setelah i18n siap |
| Contoh | Extract strings, Unicode support | Terjemahkan "Hello" → "Halo" |
Kenapa i18n Penting?
- Jangkauan global — 75% pengguna internet bukan penutur bahasa Inggris
- User experience — Pengguna lebih nyaman dengan bahasa mereka sendiri
- Legal compliance — Beberapa negara mewajibkan layanan dalam bahasa lokal
- Revenue — Aplikasi multi-bahasa meningkatkan konversi 70%+ di pasar lokal
Contoh Sederhana
// ❌ Hard-coded string — susah diterjemahkan
const message = "Selamat datang, " + user.name + "!";
// ✅ i18n-ready — string di-extract ke file terpisah
const message = t("welcome", { name: user.name });
// en.json: { "welcome": "Welcome, {{name}}!" }
// id.json: { "welcome": "Selamat datang, {{name}}!" }
// ja.json: { "welcome": "ようこそ、{{name}}さん!" }
Scope i18n
i18n bukan hanya soal terjemahan teks. Ini mencakup:
- Teks & string — UI labels, error messages, notifications
- Tanggal & waktu — "04/16/2026" (US) vs "16/04/2026" (ID)
- Angka & mata uang — "1,000.50" (US) vs "1.000,50" (ID)
- Pluralisasi — "1 item" vs "2 items" (English), aturan berbeda di Arab, Rusia
- Arah teks — LTR (Left-to-Right) vs RTL (Right-to-Left)
- Gambar & ikon — Simbol yang bermakna berbeda di budaya berbeda
🎭 Analogi sehari-hari
i18n = desain rumah dengan colokan listrik standar internasional. Rumah-nya didesain supaya bisa nerima colokan dari negara apa saja (UK, EU, US, Asia). l10n = nyolokin colokan yang sesuai negara saat ditempatkan. Rumah didesain sekali (i18n), adaptasi per lokasi (l10n) gampang.
⚠️ Jebakan yang sering ditemui
- Hard-code string di kode = "search & replace" hell saat translate. Selalu extract ke file lokalisasi
- Concatenation ("Hello, " + name) = grammar lain butuh urutan beda. Pakai placeholder
- Lupa pluralization rules — Inggris simpel (1/many), Arab/Rusia/Polandia kompleks (3-6 form)
- Asumsi length sama antar bahasa — German bisa 30% lebih panjang. Layout harus flexible
- Salah pakai locale di Indonesia (id-ID) vs Inggris-US (en-US) untuk format angka/tanggal
TL;DR: i18n = arsitektur kode siap multi-bahasa (developer task). l10n = proses adaptasi (translator task). Bukan cuma teks — termasuk format tanggal/angka/mata uang, pluralization, arah teks (LTR/RTL). 75% user internet bukan English speaker. Library: i18next (JS), next-intl (Next.js), react-intl. Wajib untuk app dengan audience internasional.