Mulai Android 7.0 (API Level 24), Android memberikan dukungan yang ditingkatkan untuk pengguna multibahasa, yang memungkinkan mereka memilih beberapa lokal dalam setelan. Android menyediakan kemampuan ini dengan memperbanyak jumlah lokal yang didukung dan mengubah cara sistem mengatasi masalah resource.
Dokumen ini dimulai dengan menjelaskan strategi resolusi resource dalam versi Android yang lebih rendah daripada 7.0 (level API 24). Selanjutnya, dokumen menjelaskan strategi resolusi resource yang ditingkatkan di Android 7.0. Terakhir, akan dijelaskan cara memanfaatkan jumlah lokal yang telah diperbanyak untuk mendukung lebih banyak pengguna multibahasa.
Tantangan dalam mengatasi masalah resource bahasa
Sebelum Android 7.0, Android tidak selalu berhasil mencocokkan lokal aplikasi dan lokal sistem.
Misalnya, anggaplah Anda menghadapi situasi berikut:
- Bahasa default aplikasi Anda adalah
en_US
(US English), dan aplikasi juga berisi string bahasa Spanyol yang telah dilokalkan dies_ES
file resource. - Perangkat telah disetel ke
es_MX
Bila kode Java Anda merujuk ke string, sistem akan memuat
string dari file resource default (en_US
), sekalipun aplikasi memiliki
resource bahasa Spanyol yang telah dilokalkan pada es_ES
. Hal ini karena bila sistem
tidak bisa menemukan hasil yang persis, sistem akan terus mencari resource dengan
menghilangkan kode negara dari lokal tersebut. Akhirnya, jika tidak ada hasil yang ditemukan, sistem akan
mengembalikan ke default, yakni en_US
.
Sistem juga akan default ke en_US
jika pengguna memilih bahasa yang
sama sekali tidak didukung oleh aplikasi, seperti bahasa Prancis. Contoh:
Setelan Pengguna | Resource Aplikasi | Resolusi Resource |
---|---|---|
fr_CH |
default (en) de_DE es_ES fr_FR it_IT |
Coba fr_CH => Gagal Coba fr => Gagal Gunakan default (en) |
Dalam contoh ini, sistem menampilkan string bahasa Inggris tanpa mengetahui apakah pengguna memahami bahasa Inggris. Perilaku ini sudah sangat umum sekarang.
Peningkatan pada strategi resolusi resource
Android 7.0 (level API 24) menghadirkan resolusi resource yang lebih andal, dan
secara otomatis menemukan penggantian yang lebih baik.
Akan tetapi, untuk mempercepat resolusi dan meningkatkan
kemudahan pemeliharaan, Anda harus menyimpan resource dalam dialek induk yang paling umum.
Misalnya, jika sebelumnya Anda telah menyimpan resource bahasa Spanyol
di direktori values-es-rUS
,
pindahkan ke direktori values-b+es+419
,
yang berisi bahasa Spanyol Amerika Latin.
Demikian pula, jika Anda memiliki string resource dalam
direktori bernama values-en-rGB
, ganti nama
direktori menjadi values-b+en+001
(Bahasa Inggris
Internasional), karena induk yang paling umum
untuk string en-GB
adalah en-001
.
Contoh berikut menjelaskan mengapa praktik-praktik ini meningkatkan kinerja dan
keandalan resolusi resource.
Contoh resolusi resource
Dengan versi Android lebih besar dari 7.0, kasus yang diuraikan dalam Tabel 1 dipulihkan secara berbeda:
Setelan Pengguna | Resource Aplikasi | Resolusi Resource |
---|---|---|
|
default (en) de_DE es_ES fr_FR it_IT |
Coba fr_CH => Gagal Coba fr => Gagal Coba turunan fr => fr_FR Gunakan fr_FR |
Sekarang pengguna mendapatkan resource bahasa Prancis sebagai ganti bahasa Inggris. Contoh ini juga menunjukkan
mengapa Anda harus menyimpan pengaturan bahasa Prancis di fr
dan bukan fr_FR
untuk Android 7.0 atau yang lebih tinggi. Di sini tindakan yang harus diambil adalah
mencocokkan dialek induk terdekat,
membuat resolusi lebih cepat dan lebih terprediksi.
Selain logika resolusi yang diperbaiki ini, Android sekarang menawarkan lebih banyak pilihan bahasa untuk pengguna. Mari kita coba lagi contoh di atas dengan menetapkan bahasa Italia sebagai bahasa pengguna tambahan, tetapi tanpa dukungan aplikasi untuk bahasa Prancis.
Setelan Pengguna | Resource Aplikasi | Resolusi Resource |
---|---|---|
|
default (en) de_DE es_ES it_IT |
Coba fr_CH => Gagal Coba fr => Gagal Coba turunan fr => Gagal Coba_CH => Gagal Coba => Gagal Coba turunannya => it_IT Gunakan it_IT |
Pengguna tetap mendapatkan bahasa yang mereka pahami, meskipun aplikasi tidak mendukung bahasa Prancis.
Mendesain aplikasi Anda untuk mendukung lokal tambahan
Android menyediakan alat yang mempermudah pelokalan konten aplikasi dan melibatkan pengguna dalam bahasa pilihan mereka. Sebaiknya gunakan teknik berikut untuk mengonfigurasi aplikasi Anda agar dapat mengakomodasi berbagai bahasa dan konvensi pemformatan, dengan cara yang skalabel.
Menentukan bahasa yang didukung aplikasi Anda
Untuk memastikan bahwa bahasa diselesaikan dengan benar, tentukan bahasa yang didukung aplikasi Anda menggunakan
properti resConfigs
dalam file build.gradle
level modul.
Contoh kode berikut menunjukkan cara menggunakan resConfigs
untuk menunjukkan bahasa yang didukung.
Dalam contoh ini, aplikasi mendukung bahasa Inggris dan Spanyol.
Groovy
android { defaultConfig { ... resConfigs "en", "es" } }
Kotlin
android { defaultConfig { ... resConfigs("en", "es") } }
LocaleList API
Mulai Android 7.0 (level API 24), Android mengekspos
LocaleList.getDefault()
API
yang memungkinkan aplikasi secara langsung meng-kueri daftar bahasa yang telah ditetapkan oleh pengguna. API ini
memungkinkan Anda membuat perilaku aplikasi yang lebih canggih
dan tampilan materi yang lebih optimal. Misalnya, Penelusuran
dapat menampilkan hasil dalam beberapa bahasa berdasarkan setelan pengguna. Aplikasi browser
bisa menghindari penawaran menerjemahkan halaman dalam bahasa yang sudah diketahui pengguna,
dan aplikasi keyboard bisa mengaktifkan otomatis semua layout yang sesuai.
Formatter
Hingga Android 6.0 (level API 23), Android hanya mendukung satu atau dua lokalitas untuk banyak bahasa umum (en, es, ar, fr, ru). Karena hanya ada beberapa varian dari setiap bahasa, aplikasi bisa menghindar dengan menyimpan beberapa nomor dan tanggal sebagai string hard-code dalam file resource. Akan tetapi, dengan perluasan set lokalitas yang didukung Android, maka akan ada perbedaan format yang signifikan untuk tanggal, waktu, mata uang, dan informasi serupa bahkan dalam lokalitas tunggal. Menjadikan format Anda sebagai hard-code bisa menghasilkan pengalaman yang membingungkan bagi pengguna akhir. Karena itu, saat mengembangkan untuk Android 7.0 atau versi lebih tinggi, pastikan menggunakan formatter sebagai ganti menjadikan string angka dan tanggal sebagai hard-code.
Misalnya, Android 7.0 dan yang lebih tinggi meliputi dukungan untuk 27 bahasa Arab lokal. Bahasa lokal ini bisa berbagi hampir semua resource, namun sebagian lebih memilih digit ASCII, sementara yang lain memilih digit bawaan. Misalnya, bila Anda ingin membuat kalimat dengan variabel digit, seperti "Pilih PIN 4 digit", gunakan formatter seperti yang ditampilkan di bawah ini:
format(locale, "Choose a %d-digit PIN", 4)