Localization (lokalisasi, l10n) — adaptasi konten aplikasi seluler ke bahasa, wilayah, dan fitur budaya audiens target. Berbeda dengan internasionalisasi (i18n), di mana kode disiapkan untuk penerjemahan, lokalisasi adalah proses penerjemahan string, pemformatan tanggal, angka, dan mata uang, pemilihan gambar, dan mempertimbangkan norma lokal. Di iOS, terjemahan disimpan di Localizable.strings (folder .lproj untuk setiap bahasa), di Android — di values-ru, values-de, dan direktori sumber daya lainnya. Selengkapnya — di panduan Android tentang lokalisasi.
Poin Utama
Localization (disingkat l10n — 10 huruf antara "l" dan "n") — adalah proses adaptasi aplikasi ke bahasa dan wilayah tertentu. Jika i18n adalah fondasi arsitektur, maka l10n adalah pengisinya. i18n memungkinkan penerjemahan, l10n yang melaksanakannya. Lokalisasi meliputi: penerjemahan semua teks antarmuka, adaptasi format tanggal dan angka, penggantian gambar dengan konten yang sensitif secara budaya, koreksi teks hukum (kebijakan privasi, EULA), konfigurasi sistem pembayaran untuk wilayah, dan pengujian pada perangkat target.
Profitabilitas bisnis — lokalisasi secara langsung memengaruhi konversi. Menurut CSA Research (2023), 76% pengguna lebih suka membeli di aplikasi dalam bahasa ibu mereka, dan 40% tidak pernah membeli dalam bahasa asing. Lokalisasi ke bahasa Jepang untuk aplikasi ritel meningkatkan konversi rata-rata 150% (Google, 2022). Aplikasi yang dilokalkan mendapatkan 2–3 kali lebih banyak instalasi organik di App Store dan Google Play regional berkat ASO regional (kata kunci dalam bahasa target).
i18n vs l10n — dua sisi dari proses yang sama. i18n: ekstraksi string ke sumber daya, dukungan RTL, pemformatan angka. Dilakukan sekali oleh pengembang. l10n: penerjemahan string, adaptasi konten, pengujian lokal. Dilakukan berulang kali oleh penerjemah dan QA untuk setiap lokalisasi. Di IT Sectr kami mengalokasikan 20–30% waktu sprint untuk lokalisasi setiap bahasa baru — ini mencakup penerjemahan, review, pengujian pada perangkat, dan perbaikan bug.
Localizable.strings — file utama untuk menyimpan terjemahan di iOS. Setiap lokalisasi memiliki folder .lproj sendiri: en.lproj/Localizable.strings, ru.lproj/Localizable.strings, de.lproj/Localizable.strings. Format: "kunci" = "nilai"; (dengan titik koma). Apple menggunakan Base Internationalization: Storyboard dan XIB dibuat sekali (Base.lproj), dan string antarmuka diekspor ke Localizable.strings untuk setiap bahasa. Ini menghilangkan kebutuhan untuk membuat salinan XIB untuk setiap lokalisasi.
// en.lproj/Localizable.strings
// "settings.title" = "Settings";
// "profile.greeting" = "Hello, %@!";
// "items.count" = "%d item(s)";
// ru.lproj/Localizable.strings
// "settings.title" = "Pengaturan";
// "profile.greeting" = "Halo, %@!";
// "items.count" = "%d bh.";
// Memuat string berdasarkan kunci
navigationItem.title = NSLocalizedString(
"settings.title",
comment: "Judul layar pengaturan"
)
// String dengan parameter
let name = "Anna"
greetingLabel.text = String.localizedStringWithFormat(
NSLocalizedString("profile.greeting", comment: ""), name
)
// Impor XLIFF (Xcode → Editor → Import Localizations)
// Secara otomatis memperbarui file .lproj setelah pekerjaan penerjemah
Base Internationalization — pendekatan Apple di mana antarmuka (Storyboard, XIB) dibuat sekali di Base.lproj. Saat menambahkan bahasa, Xcode mengekspor string dari Base ke file XLIFF. Penerjemah menerjemahkan XLIFF. Setelah impor, Xcode membuat .lproj dengan string yang diterjemahkan. Keuntungan: tidak perlu menduplikasi XIB untuk setiap bahasa. Keterbatasan: untuk bahasa RTL (Arab, Ibrani) mungkin diperlukan XIB terpisah dengan tata letak yang dicerminkan.
InfoPlist.strings — file untuk lokalisasi nama aplikasi (CFBundleDisplayName), izin kamera/mikrofon (NSCameraUsageDescription), dan nilai lain dari Info.plist. Dibuat di .lproj: ru.lproj/InfoPlist.strings. Format: CFBundleDisplayName = "Aplikasi saya"; NSCameraUsageDescription = "Aplikasi memerlukan akses ke kamera untuk mengambil foto";. Tanpa lokalisasi InfoPlist.strings, dialog sistem akan dalam bahasa Inggris.
Sumber daya Android untuk lokalisasi diatur melalui kualifikasi (qualifiers) dalam nama direktori. Untuk bahasa Rusia — res/values-ru/, untuk Jerman — res/values-de/, untuk Portugis Brasil — res/values-pt-rBR/. Android mendukung lebih dari 160 lokalisasi. Sistem secara otomatis memilih sumber daya berdasarkan bahasa perangkat (Locale.getDefault()). Jika lokalisasi yang tepat tidak ada — sumber daya dari values/ (lokalisasi dasar, biasanya en) digunakan.
// res/values/strings.xml (dasar — Inggris)
<string name="settings_title">Settings</string>
<string name="greeting">Hello, %s!</string>
// res/values-ru/strings.xml (Rusia)
<string name="settings_title">Pengaturan</string>
<string name="greeting">Halo, %s!</string>
// res/values-de/strings.xml (Jerman)
<string name="settings_title">Einstellungen</string>
<string name="greeting">Hallo, %s!</string>
// Kotlin — kode seragam untuk semua bahasa
textView.text = getString(R.string.settings_title)
// String dengan parameter
val greeting = getString(R.string.greeting, userName)
// Gambar yang dilokalkan
// res/drawable-ru/flag.png — bendera untuk versi Rusia
// res/drawable/flag.png — bendera default
// Lokalisasi tata letak (untuk bahasa RTL)
// res/layout-ar/activity_main.xml — versi Arab
Lokalisasi tidak hanya string — Android memungkinkan lokalisasi gambar (res/drawable-ru/), warna (res/values-ru/colors.xml), ukuran (res/values-ru/dimens.xml), animasi, menu, dan bahkan seluruh tata letak. Untuk bahasa dengan panjang kata yang berbeda (Jerman 30–40% lebih panjang dari Inggris) gunakan dimens.xml yang dilokalkan dengan lebar tombol yang diperbesar. Untuk wilayah dengan simbolisme warna yang berbeda (putih — duka di Cina) — colors.xml yang dilokalkan.
Pengujian — alihkan bahasa perangkat ke bahasa target melalui Pengaturan → Sistem → Bahasa. Periksa: semua string diterjemahkan, tanggal diformat dengan benar, angka ditampilkan dengan pemisah yang benar, gambar sesuai dengan wilayah, tata letak tidak "rusak" dengan string panjang. Untuk otomatisasi, gunakan Espresso dengan LocaleTestRule (Android Testing Library) — ini memungkinkan menjalankan pengujian dengan berbagai lokalisasi tanpa mengubah bahasa secara manual.
Fitur budaya — lokalisasi tidak terbatas pada penerjemahan string. Simbolisme warna berbeda: merah — keberuntungan di Cina, bahaya di AS, duka di Afrika Selatan. Putih — kemurnian di Eropa, duka di Cina. Ikon dengan gestur: jempol ke atas — positif di AS, penghinaan di Timur Tengah. Gambar orang: di negara Arab, gambar wanita dengan pakaian renang tidak dapat diterima. Simbol agama: salib, bulan sabit, Bintang Daud hanya boleh digunakan dalam konteks yang sesuai.
Persyaratan hukum — setiap negara memiliki hukum sendiri tentang produk digital. GDPR (UE) — persetujuan wajib untuk cookie dan pemrosesan data. CCPA (California) — hak untuk menghapus data. Undang-undang Data Pribadi (Rusia, 152-FZ) — penyimpanan data di server Federasi Rusia. LGPD (Brasil) — analog GDPR. Pembayaran: di Cina diperlukan Alipay/WeChat Pay, di India — UPI, di Brasil — Boleto dan PIX. Konfigurasikan gerbang pembayaran untuk wilayah sebelum memulai lokalisasi.
| Aspek | AS | Cina | UEA | Jerman |
|---|---|---|---|---|
| Sistem pembayaran | Apple Pay, kartu | Alipay, WeChat Pay | Kartu, Apple Pay | PayPal, Giropay |
| Warna merek | Semua | Merah — keberuntungan | Hijau — Islam | Hitam/kuning |
| Media sosial | Instagram, X | WeChat, Douyin | WhatsApp, X | WhatsApp, X |
| Tanggal | MM/dd/yyyy | yyyy/MM/dd | dd/MM/yyyy | dd.MM.yyyy |
| Hukum data | CCPA | PIPL | PDPL | GDPR |
Contoh dan konten — sesuaikan contoh dengan wilayah. Untuk lokalisasi Jerman gunakan sistem metrik (kg, km), untuk Amerika — sistem imperial (lb, mi). Nomor telepon, kode pos, alamat — diformat berbeda. Contoh mata uang: ¥1000 di Jepang, $9.99 di AS, 999 ₽ di Rusia. Gambar makanan, pakaian, interior harus sesuai dengan standar regional. Di IT Sectr kami merekomendasikan menyewa konsultan lokal untuk memeriksa adaptasi budaya.
Alat lokalisasi — platform profesional mengotomatiskan proses: Lokalise, Crowdin, POEditor, Smartling, Phrase. Mereka terintegrasi dengan repositori, secara otomatis mengimpor string baru, melacak perubahan (Delta updates — hanya string yang berubah yang diterjemahkan), menyediakan Translation Memory (TM — penyimpanan frasa yang telah diterjemahkan sebelumnya) dan Glossary (glosarium istilah). Biaya rata-rata penerjemahan profesional: $0.08–0.15 per kata (tergantung bahasa).
Proses — (1) Pengembang menambahkan kunci i18n ke kode, push ke repositori. (2) CI/CD (GitHub Actions / GitLab CI) secara otomatis mengirim kunci baru ke platform lokalisasi. (3) Penerjemah menerima notifikasi, menerjemahkan, menyimpan. (4) File yang diterjemahkan secara otomatis membuat PR di repositori. (5) QA memeriksa lokalisasi pada perangkat. (6) Rilis. Siklus untuk satu lokalisasi: 2–5 hari kerja (tergantung volume). Untuk 10 lokalisasi: 5–15 hari dengan kerja paralel penerjemah.
Machine Translation + Human Review — standar modern. Penerjemahan jaringan saraf (DeepL, Google Translate, GPT-4) memberikan kualitas 80–90% untuk pasangan bahasa populer. Penerjemah manusia memeriksa: terminologi, konteks (kata dapat memiliki arti berbeda di layar yang berbeda), adaptasi budaya. Di IT Sectr kami menggunakan pendekatan hibrida: terjemahan ML + review oleh penutur asli. Untuk string kritis (hukum, pembayaran) — hanya penerjemah profesional. Penghematan: hingga 60% biaya dengan tetap menjaga kualitas.
Pertanyaan yang Sering Diajukan
Internasionalisasi — persiapan kode untuk penerjemahan (ekstraksi string, RTL, pemformatan). Lokalisasi — penerjemahan dan adaptasi budaya itu sendiri. i18n dilakukan oleh pengembang sekali, l10n — oleh penerjemah untuk setiap bahasa. i18n tanpa l10n — aplikasi siap diterjemahkan tetapi belum diterjemahkan. l10n tanpa i18n — kode harus ditulis ulang untuk setiap bahasa.
Dalam file Localizable.strings di dalam folder .lproj. Untuk setiap bahasa: en.lproj (Inggris), ru.lproj (Rusia), de.lproj (Jerman). Format: "kunci" = "nilai";. Untuk jamak — Localizable.stringsdict. Pengaturan aplikasi (CFBundleDisplayName) — di InfoPlist.strings. Xcode mengelola .lproj melalui Base Internationalization.
values-ru — direktori sumber daya Android untuk bahasa Rusia. Berisi strings.xml dengan terjemahan. Sama untuk bahasa lain: values-de (Jerman), values-fr (Prancis). Android memilih sumber daya berdasarkan bahasa sistem. Jika values-ru tidak ditemukan — menggunakan values/ (bahasa dasar, biasanya Inggris).
Selalu gunakan Locale API. iOS: DateFormatter.locale = Locale(identifier: locale). Android: DateFormat.getDateInstance(DateFormat.SHORT, locale). Rusia: 31.12.2024. AS: 12/31/2024. Jepang: 2024/12/31. Jangan pernah menetapkan format tetap — setiap negara memiliki standarnya sendiri. Untuk memasukkan tanggal, gunakan UIDatePicker / DatePicker.
Untuk cakupan global cukup 10–15 bahasa: Inggris, Spanyol, Prancis, Jerman, Jepang, Cina, Korea, Portugis, Rusia, Italia, Arab. Untuk regional — 1–2 bahasa. Setiap lokalisasi tambahan meningkatkan instalasi organik sebesar 5–15% di wilayah terkait. App Store memerlukan setidaknya lokalisasi bahasa Inggris.
Ringkasan
Kami akan mengembangkan aplikasi seluler turnkey
IT Sectr membuat aplikasi iOS dan Android untuk startup dan bisnis sejak 2017. Kami akan memberi saran dan mengusulkan solusi terbaik.
Baca juga