Home | History | Annotate | Download | only in features
      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 =&gt; Gagal<br>
     81 Coba fr =&gt; 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 =&gt; Gagal<br>
    134 Coba fr =&gt; Gagal<br>
    135 Coba anak dari fr =&gt; 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 =&gt; Gagal<br>
    176 Coba fr =&gt; Gagal<br>
    177 Coba anak dari fr =&gt; Gagal<br>
    178 Coba it_CH =&gt; Gagal<br>
    179 Coba it =&gt; Gagal<br>
    180 Coba anak dari it =&gt; 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