Ringkasan resolusi lokal dan bahasa

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 di es_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:

Tabel 1. Resolusi resource tanpa lokalitas yang persis sama.

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:

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

Setelan Pengguna Resource Aplikasi Resolusi Resource
  1. fr_CH
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.

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

Setelan Pengguna Resource Aplikasi Resolusi Resource
  1. fr_CH
  2. it_CH
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")
    }
}
Karena cara sistem build menggabungkan resource dari aplikasi Anda dan dependensinya, Anda harus menentukan bahasa yang didukung dengan cara ini untuk memastikan bahwa setelan bahasa pengguna diterima dengan benar.

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)