Mendukung Berbagai Bahasa Yang Berbeda-beda

Adalah sesuatu yang baik dan dianjurkan untuk mengekstrak 'strings UI' dari kode app kita dan membuatnya dalam suatu file eksternal. Android mempermudah hal ini dengan direktori 'resources' di dalam setiap project Android.

Bila kita membuat project dengan menggunakan Android SDK Tools di dalam Android Studio (baca: Membuat dan Menjalankan App Android Pertama Kali), tool-tool tersebut akan membuat direktori 'res/' di bagian atas struktur direktori project. Di dalam direktori 'res/' ada subdirektori-subdirektori untuk berbagai jenis 'resources'. Ada juga beberapa file 'default' misalnya 'res/values/strings.xml' yang berisi nilai-nilai string yang kita buat.

Membuat Direktori-direktori Locale dan File-file String

Untuk menambahkan dukungan terhadap lebih banyak bahasa, kita perlu membuat direktori-direktori 'values' tambahan di dalam 'res/' dengan menambahkan tanda hubung dan kode bahasa ISO di bagian akhir nama direktori. Contohnya, 'values-es/' adalah direktori yang berisi 'resources' untuk 'locale' dengan kode bahasa "es". Android akan me-load 'resources' yang tepat berdasarkan setting 'loacale' dari perangkat saat 'run-time'. Untuk informasi lebih detil bisa lihat di Providing Alternative Resources.

Setelah kita memutuskan bahasa apa saja yang akan kita dukung, kita perlu membuat subdirektori-subdirektori 'resource' dan file-file string. Contohnya:

MyProject/
    res/
       values/
           strings.xml
       values-es/
           strings.xml
       values-fr/
           strings.xml

kita tambahkan nilai-nilai string masing-masing 'locale' ke file yang tepat.

Pada saat run-time, sistem Android akan menggunakan sekumpulan 'resources' string yang tepat berdasarkan 'locale' yang sudah di-set pada perangkat pengguna.

Contohnya, berikut di bawah ini adalahfile-file 'resource' string yang berbeda-beda untuk bahasa yang berbeda-beda.


English (default locale), '/values/strings.xml':

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="title">My Application</string>
    <string name="hello_world">Hello World!</string>
</resources>

Spanish, '/values-es/strings.xml':

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="title">Mi AplicaciĆ³n</string>
    <string name="hello_world">Hola Mundo!</string>
</resources>

French, 'values-fr/strings.xml':

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="title">Mon Application</string>
    <string name="hello_world">Bonjour le monde !</string>
</resources>

Catatan: 
Kita bisa menggunakan 'locale qualifier' (atau 'qualifier' konfigurasi apapun) pada jenis 'resource' apapun, misalnya kita ingin membuat versi 'locale' dari 'bitmap drawable' kita. Untuk lebih detil bisa dibaca di: Localization.

Menggunakan 'Resources' String

Kita bisa mengacu ke 'resources' string kita melalui kode sumber kita (file java) dan file-file XML yang lain dengan menggunakan nama 'resource' yang didefinisikan oleh atribut 'name' di elemen .

Di kode sumber kita (file java), kita bisa mengacu ke suatu 'resource' string dengan sintaks 'R.string.'. Ada beberapa variasi metode dalam memanfaatkan 'resource' string dengan cara ini.

Contohnya:

// Get a string resource from your app's Resources
String hello = getResources().getString(R.string.hello_world);

// Or supply a string resource to a method that requires a string
TextView textView = new TextView(this);
textView.setText(R.string.hello_world);

Di file-file XML lainnya, kita bisa mengacu ke suatu 'resource' string dengan sintaks '@string/' kapanpun atribut XML menerima suatu nilai string.

Contohnya:

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/hello_world" />

No comments: