1 page.title=Bahasa dan Lokal 2 page.tags=androidn 3 page.image=images/cards/card-nyc_2x.jpg 4 5 @jd:body 6 7 <div id="qv-wrapper"> 8 <div id="qv"> 9 <h2>Dalam dokumen ini:</h2> 10 <ol> 11 <li><a href="#preN">Tantangan dalam Mengatasi Masalah Sumber Daya Bahasa</a></li> 12 <li><a href="#postN">Peningkatan pada Strategi Resolusi Sumber Daya</a></li> 13 <li><a href="#design">Mendesain Aplikasi Anda untuk Mendukung Lokal 14 Tambahan</a></li> 15 16 </ol> 17 18 </div> 19 </div> 20 21 <p>Android N memberikan dukungan yang disempurnakan untuk pengguna multibahasa, 22 yang memungkinkan mereka memilih beberapa lokal dalam setelan. Android N 23 menyediakan kemampuan ini dengan memperbanyak jumlah lokal yang didukung 24 dan mengubah cara sistem mengatasi masalah sumber daya. Metode baru mengatasi 25 masalah sumber daya ini lebih tangguh dan didesain agar kompatibel dengan APK yang ada, namun 26 Anda harus ekstra hati-hati terhadap perilaku tak terduga. Misalnya, Anda 27 harus menguji untuk memastikan aplikasi Anda secara default diatur ke bahasa yang diinginkan. Juga, 28 jika aplikasi Anda mendukung beberapa bahasa, Anda harus memastikan dukungan ini berfungsi 29 sebagaimana diinginkan. Terakhir, Anda harus mencoba memastikan aplikasi Anda dengan lancar menangani 30 bahasa yang tidak secara eksplisit Anda dukung dalam desain.</p> 31 32 <p>Dokumen ini diawali dengan menjelaskan strategi resolusi sumber daya sebelum 33 Android N. Berikutnya, akan dijelaskan strategi 34 resolusi sumber daya Android N yang telah ditingkatkan. Terakhir, akan djelaskan cara memanfaatkan 35 jumlah lokal yang telah diperbanyak untuk mendukung lebih banyak pengguna multibahasa.</p> 36 37 <h2 id="preN">Tantangan dalam Mengatasi Masalah Sumber Daya Bahasa</h2> 38 39 <p>Sebelum Android N, Android tidak selalu 40 berhasil mencocokkan lokal aplikasi dan lokal sistem.</p> 41 42 <p>Misalnya, anggaplah Anda menghadapi situasi berikut:</p> 43 <ul> 44 <li>Bahasa default aplikasi Anda adalah {@code en_US} (US English), dan aplikasi juga 45 berisi string bahasa Spanyol yang telah dilokalkan di file sumber daya {@code es_ES}. 46 </li> 47 <li> Perangkat telah disetel ke {@code es_MX} </li> 48 49 <p>Bila kode Java Anda merujuk ke string, sistem akan memuat 50 string dari file sumber daya default ({@code en_US}), sekalipun aplikasi memiliki 51 sumber daya bahasa Spanyol yang dilokalkan pada {@code es_ES}. Hal ini karena bila sistem 52 tidak bisa menemukan hasil yang persis, sistem akan terus mencari sumber daya dengan menghilangkan 53 kode negara dari lokal tersebut. Akhirnya, jika tidak ada hasil yang ditemukan, sistem akan mengembalikan 54 ke default, yakni {@code en_US}. </p> 55 56 57 <p>Sistem juga akan default ke {@code en_US} jika pengguna memilih 58 bahasa yang sama sekali tidak didukung oleh aplikasi, seperti bahasa Prancis. Misalnya:</p> 59 60 <p class="table-caption" id="t-resource-res"> 61 <strong>Tabel 1.</strong> Resolusi sumber daya tanpa lokal yang persis sama. 62 </p> 63 <table> 64 <tbody> 65 <tr> 66 <th>Setelan Pengguna</th> 67 <th>Sumber Daya Aplikasi</th> 68 <th>Resolusi Sumber Daya</th> 69 </tr> 70 <tr> 71 <td>fr_CH</td> 72 <td> 73 default (en)<br> 74 de_DE<br> 75 es_ES<br> 76 fr_FR<br> 77 it_IT<br> 78 </td> 79 <td> 80 Coba fr_CH => Gagal<br> 81 Coba fr => Gagal<br> 82 Gunakan default (en) 83 </td> 84 </tr> 85 </tbody> 86 </table> 87 88 89 <p>Dalam contoh ini, sistem menampilkan string bahasa Inggris 90 tanpa mengetahui apakah pengguna memahami bahasa Inggris. Perilaku ini sudah sangat umum 91 sekarang. Android N harus mengurangi frekuensi 92 hasil seperti ini secara substansial.</p> 93 94 <h2 id="postN">Peningkatan pada Strategi Resolusi Sumber Daya</h2> 95 <p>Android N menghadirkan resolusi sumber daya yang lebih handal, dan 96 secara otomatis menemukan solusi yang lebih baik. Akan tetapi, untuk mempercepat resolusi dan meningkatkan 97 kemudahan pemeliharaan, Anda harus menyimpan sumber daya dalam dialek induk yang paling umum. 98 Misalnya, jika sebelumnya Anda telah menyimpan sumber daya bahasa Spanyol di direktori {@code es-US} 99 , pindahkan ke direktori {@code es-419}, yang berisi bahasa Spanyol Amerika Latin. 100 Demikian pula, jika Anda memiliki string sumber daya dalam folder bernama {@code en-GB}, ganti nama 101 folder itu menjadi {@code en-001} (bahasa Inggris internasional), karena induk yang paling umum 102 untuk string <code>en-GB</code> adalah {@code en-001}. 103 Contoh berikut menjelaskan mengapa praktik-praktik ini meningkatkan kinerja dan 104 reliabilitas resolusi sumber daya.</p> 105 106 <h3>Contoh resolusi sumber daya</h3> 107 108 <p>Dengan Android N, kasus yang dijelaskan dalam <strong>Tabel 1</strong> diatasi 109 secara berbeda:</p> 110 111 <p class="table-caption" id="t-improved-res"> 112 <strong>Tabel 2.</strong> Strategi resolusi yang ditingkatkan bila tidak ada 113 lokal yang sama persis.</p> 114 <table> 115 <tr> 116 <th>Setelan Pengguna</th> 117 <th>Sumber Daya Aplikasi</th> 118 <th>Resolusi Sumber Daya</th> 119 </tr> 120 <tr> 121 <td><ol> 122 <li> fr_CH</li> 123 </ol> 124 </td> 125 <td> 126 default (en)<br> 127 de_DE<br> 128 es_ES<br> 129 fr_FR<br> 130 it_IT<br> 131 </td> 132 <td> 133 Coba fr_CH => Gagal<br> 134 Coba fr => Gagal<br> 135 Coba anak dari fr => fr_FR<br> 136 Gunakan fr_FR 137 </td> 138 </tr> 139 140 </table> 141 142 143 <p>Sekarang pengguna mendapatkan sumber daya bahasa Prancis sebagai ganti bahasa Inggris. Contoh ini juga menunjukkan 144 mengapa Anda harus menyimpan string bahasa Prancis di {@code fr} bukan pada {@code fr_FR} 145 untuk Android N. Arah aksi di sini adalah untuk mencocokkan dengan induk dialek terdekat, 146 membuat resolusi lebih cepat dan lebih dapat diprediksi.</p> 147 148 <p>Selain logika resolusi yang diperbaiki ini, Android sekarang menawarkan lebih banyak 149 pilihan bahasa untuk pengguna. Mari kita coba lagi contoh di atas dengan menetapkan bahasa Italia 150 sebagai bahasa pengguna tambahan, tetapi tanpa dukungan aplikasi untuk bahasa Prancis. </p> 151 152 <p class="table-caption" id="t-2d-choice"> 153 <strong>Tabel 3.</strong> Resolusi sumber daya bila aplikasi hanya mencocokkan 154 setelan lokal yang disukai kedua oleh pengguna.</p> 155 <table> 156 <tr> 157 <th>Setelan Pengguna</th> 158 <th>Sumber Daya Aplikasi</th> 159 <th>Resolusi Sumber Daya</th> 160 161 </tr> 162 <tr> 163 <td><ol> 164 <li> fr_CH</li> 165 <li> it_CH</li> 166 </ol> 167 </td> 168 <td> 169 default (en)<br> 170 de_DE<br> 171 es_ES<br> 172 it_IT<br> 173 </td> 174 <td> 175 Coba fr_CH => Gagal<br> 176 Coba fr => Gagal<br> 177 Coba anak dari fr => Gagal<br> 178 Coba it_CH => Gagal<br> 179 Coba it => Gagal<br> 180 Coba anak dari it => it_IT<br> 181 Gunakan it_IT 182 </td> 183 184 </tr> 185 186 </table> 187 <p>Pengguna tetap mendapatkan bahasa yang mereka pahami, meskipun aplikasi tidak 188 mendukung bahasa Prancis.</p> 189 190 191 <h2 id="design">Mendesain Aplikasi Anda untuk Mendukung Lokal Tambahan</h2> 192 <h3>LocaleList API</h3> 193 194 <p>Android N menambahkan API baru {@code LocaleList.getDefault()} 195 yang memungkinkan aplikasi langsung kueri daftar bahasa yang telah ditetapkan pengguna. API ini 196 memungkinkan Anda membuat 197 perilaku aplikasi yang lebih canggih dan tampilan materi yang lebih optimal. Misalnya, Telusur 198 bisa menampilkan hasil dalam beberapa bahasa berdasarkan setelan pengguna. Aplikasi browser 199 bisa menghindari penawaran menerjemahkan halaman dalam bahasa yang sudah diketahui pengguna, 200 dan aplikasi keyboard bisa mengaktifkan otomatis semua layout yang sesuai. </p> 201 202 <h3>Formatter</h3> 203 204 <p>Hingga Android 6.0 (API level 23), Android hanya mendukung satu atau dua lokal 205 untuk banyak bahasa umum 206 (en, es, ar, fr, ru). Karena hanya ada beberapa varian dari setiap bahasa, 207 aplikasi bisa menghindar dengan menyimpan beberapa nomor dan tanggal sebagai string hard-code 208 dalam file sumber daya. Akan tetapi, dengan perluasan set lokal yang didukung Android, 209 maka akan ada 210 perbedaan format yang signifikan untuk tanggal, waktu, mata uang, dan informasi 211 serupa bahkan dalam lokal tunggal. Menjadikan format Anda sebagai hard-code bisa menghasilkan 212 pengalaman yang membingungkan bagi pengguna akhir. Karena itu, saat mengembangkan untuk Android N 213 pastikan menggunakan formatter sebagai ganti menjadikan string angka dan tanggal sebagai hard-code.</p> 214 215 <p>Contoh terbaik adalah bahasa Arab, yang mendukung Android N berkembang dari 216 satu {@code ar_EG} menjadi 27 lokal bahasa Arab. Bahasa lokal ini bisa berbagi hampir semua sumber daya, 217 namun sebagian lebih memilih digit ASCII, sementara yang lain memilih digit asli. Misalnya, 218 bila Anda ingin membuat kalimat dengan variabel digit, seperti 219 "Pilih PIN 4 digit", gunakan formatter seperti yang ditampilkan di bawah ini:</p> 220 221 <pre> format(locale, "Choose a %d-digit PIN", 4)</pre> 222