Android Dev Summit, October 23-24: two days of technical content, directly from the Android team. Sign-up for livestream updates.

Ringkasan resolusi lokal dan bahasa

Mulai Android 7.0 (API Level 24), Android memberikan dukungan yang disempurnakan 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 sumber daya.

Dokumen ini dimulai dengan menjelaskan strategi resolusi sumber daya dalam versi Android yang lebih rendah daripada 7.0 (API level 24). Berikutnya, dokumen menjelaskan strategi resolusi sumber daya yang telah disempurnakan dalam Android 7.0. Terakhir, akan dijelaskan cara memanfaatkan jumlah lokal yang telah diperbanyak untuk mendukung lebih banyak pengguna multibahasa.

Tantangan dalam mengatasi masalah sumber daya 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 di file sumber daya es_ES.
  • Perangkat telah disetel ke es_MX

Bila kode Java Anda merujuk ke string, sistem akan memuat string dari file sumber daya default (en_US), sekalipun aplikasi memiliki sumber daya bahasa Spanyol yang telah dilokalkan pada es_ES. Hal ini karena bila sistem tidak bisa menemukan hasil yang persis, sistem akan terus mencari sumber daya 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. Misalnya:

Tabel 1. Resolusi sumber daya tanpa lokal yang persis sama.

Setelan Pengguna Sumber Daya Aplikasi Resolusi Sumber Daya
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 sumber daya

Android 7.0 (API Level 24) menghadirkan resolusi sumber daya yang lebih andal, dan secara otomatis menemukan fallback yang lebih baik. Akan tetapi, untuk mempercepat resolusi dan meningkatkan kemudahan pemeliharaan, Anda harus menyimpan sumber daya dalam dialek induk yang paling umum. Misalnya, jika sebelumnya Anda telah menyimpan sumber daya 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 sumber daya dalam folder 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 sumber daya.

Contoh resolusi sumber daya

Dengan versi Android lebih besar dari 7.0, kasus yang diuraikan dalam Tabel 1 dipulihkan secara berbeda:

Tabel 2. Strategi resolusi yang ditingkatkan bila tidak ada lokal yang sama persis.

Setelan Pengguna Sumber Daya Aplikasi Resolusi Sumber Daya
  1. fr_CH
default (en)
de_DE
es_ES
fr_FR
it_IT
Coba fr_CH => Gagal
Coba fr => Gagal
Coba anak dari fr => fr_FR
Gunakan fr_FR

Sekarang pengguna mendapatkan sumber daya 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.

Tabel 3. Resolusi sumber daya bila aplikasi hanya mencocokkan setelan lokal yang disukai kedua oleh pengguna.

Setelan Pengguna Sumber Daya Aplikasi Resolusi Sumber Daya
  1. fr_CH
  2. it_CH
default (en)
de_DE
es_ES
it_IT
Coba fr_CH => Gagal
Coba fr => Gagal
Coba anak dari fr => Gagal
Coba it_CH => Gagal
Coba it => Gagal
Coba anak dari it => 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

API LocaleList

Dimulai dengan Android 7.0 (API level 24), Android menyingkap API LocaleList.getDefault() 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, Telusur bisa menampilkan hasil dalam beberapa bahasa berdasarkan setelan pengguna. Aplikasi browser bisa menghindari penawaran menerjemahkan laman dalam bahasa yang sudah diketahui pengguna, dan aplikasi keyboard bisa mengaktifkan otomatis semua layout yang sesuai.

Formatter

Hingga Android 6.0 (API level 23), Android hanya mendukung satu atau dua lokal 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 sumber daya. Akan tetapi, dengan perluasan set lokal yang didukung Android, maka akan ada perbedaan format yang signifikan untuk tanggal, waktu, mata uang, dan informasi serupa bahkan dalam lokal 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 sumber daya, 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)