Preferensi bahasa per aplikasi

Bahasa per aplikasi di setelan sistem

Dalam banyak kasus, pengguna multibahasa menyetel bahasa sistemnya ke satu bahasa, seperti bahasa Inggris, tetapi mereka ingin memilih bahasa lain untuk aplikasi tertentu, seperti Belanda, China, atau Hindi. Untuk membantu aplikasi memberikan pengalaman yang lebih baik bagi pengguna ini, Android 13 memperkenalkan fitur berikut untuk aplikasi yang mendukung beberapa bahasa:

  • Setelan sistem: Lokasi terpusat tempat pengguna dapat memilih bahasa pilihan untuk setiap aplikasi.

    Anda dapat mengonfigurasi aplikasi agar otomatis menghasilkan file yang diperlukan untuk mendukung preferensi bahasa per aplikasi dan muncul di setelan sistem. Untuk mempelajari lebih lanjut, lihat petunjuk untuk mengaktifkan dukungan bahasa per aplikasi otomatis.

  • API tambahan: API publik ini, seperti metode setApplicationLocales() dan getApplicationLocales() di LocaleManager, memungkinkan aplikasi untuk menyetel bahasa yang berbeda dari bahasa sistem saat runtime.

    API ini otomatis disinkronkan dengan setelan sistem; oleh karena itu, aplikasi yang menggunakan API ini untuk membuat pemilih bahasa kustom dalam aplikasi akan memastikan penggunanya memiliki pengalaman pengguna yang konsisten di mana pun mereka memilih preferensi bahasa mereka. API publik ini tidak hanya membantu Anda mengurangi jumlah kode boilerplate, tetapi juga mendukung APK terpisah dan Pencadangan Otomatis untuk Aplikasi guna menyimpan setelan bahasa pengguna tingkat aplikasi.

    Untuk kompatibilitas mundur dengan versi Android sebelumnya, API setara juga tersedia di AndroidX. Namun, API yang kompatibel dengan versi lama berfungsi dengan konteks AppCompatActivity, bukan konteks aplikasi, untuk Android 12 (level API 32) dan yang lebih lama. Akses API yang kompatibel dengan versi lama dengan Appcompat 1.6.0 atau versi lebih tinggi.

Ringkasan penerapan fitur ini

Tabel berikut menunjukkan penerapan yang direkomendasikan berdasarkan kasus penggunaan yang berbeda.

Kasus penggunaan Penerapan yang direkomendasikan
Aplikasi Anda tidak memiliki pemilih bahasa dalam aplikasi
  1. Aktifkan dukungan bahasa per aplikasi otomatis untuk membuat file LocaleConfig dan menambahkan bahasa aplikasi Anda ke setelan sistem.
  2. Secara opsional, jika Anda ingin menambahkan pemilih bahasa dalam aplikasi: gunakan library AndroidX dan pilih implementasi API kami untuk mendukung kompatibilitas mundur melalui autoStoreLocales.
Aplikasi Anda sudah memiliki pemilih bahasa dalam aplikasi
  1. Aktifkan dukungan bahasa per aplikasi otomatis untuk membuat file LocaleConfig dan menambahkan bahasa aplikasi Anda ke setelan sistem.
  2. Migrasikan logika khusus aplikasi Anda untuk menggunakan API publik guna memastikan pengguna melihat pengalaman yang konsisten.
  3. Tangani corner case berikut:
    1. Panggil AppCompatDelegate.setApplicationLocales() saat pertama kali aplikasi dijalankan di perangkat yang menjalankan Android 13.
    2. Panggil AppCompatDelegate.setApplicationLocales() untuk memberikan lokalitas yang diminta pengguna dan sudah ada sebelumnya ke sistem untuk kasus berikut:

Setelan sistem untuk pengguna

Mulai Android 13, Android menyertakan lokasi terpusat dalam setelan sistem untuk menyetel preferensi bahasa per aplikasi. Untuk memastikan bahasa aplikasi dapat dikonfigurasi di setelan sistem di perangkat yang menjalankan Android 13 atau yang lebih baru, aktifkan dukungan bahasa per aplikasi otomatis (direkomendasikan) atau konfigurasi dukungan secara manual.

Mengaktifkan dukungan bahasa per aplikasi otomatis

Mulai dari Android Studio Giraffe dan AGP 8.1, Anda dapat mengonfigurasi aplikasi untuk mendukung preferensi bahasa per aplikasi secara otomatis. Berdasarkan resource project Anda, AGP menghasilkan file LocaleConfig dan menambahkan referensi ke file tersebut dalam file manifes akhir, sehingga Anda tidak perlu lagi melakukannya secara manual. AGP menggunakan resource dalam folder res modul aplikasi Anda dan dependensi modul library apa pun untuk menentukan lokalitas yang akan disertakan dalam file LocaleConfig. Artinya, jika Anda menambahkan resource untuk bahasa baru ke aplikasi, Anda tidak perlu mengupdate file LocaleConfig.

Perhatikan bahwa fitur bahasa per aplikasi otomatis mendukung aplikasi yang menjalankan Android 13 (level API 33) atau yang lebih baru. Untuk menggunakan fitur ini, Anda harus menetapkan compileSdkVersion ke versi 33 atau lebih tinggi. Untuk mengonfigurasi preferensi bahasa per aplikasi untuk Android versi sebelumnya, Anda masih harus menggunakan API dan pemilih bahasa dalam aplikasi.

Untuk mengaktifkan dukungan bahasa per aplikasi otomatis, ikuti langkah-langkah berikut:

  1. Untuk mengaktifkan fitur ini, gunakan setelan generateLocaleConfig dalam blok androidResources {} file build.gradle.kts level modul (file build.gradle jika Anda menggunakan Groovy). Fitur ini dinonaktifkan secara default.

    Kotlin

        android {
          androidResources {
            generateLocaleConfig = true
          }
        }
        

    Groovy

        android {
          androidResources {
            generateLocaleConfig true
          }
        }
        
  2. Tentukan lokalitas default:
    1. Dalam folder res modul aplikasi, buat file baru bernama resources.properties.
    2. Dalam file resources.properties, tetapkan lokalitas default dengan label unqualifiedResLocale. Untuk memformat nama lokalitas, lihat Cara membentuk nama lokalitas.

AGP menambahkan lokalitas default ini dan lokalitas alternatif yang telah Anda tentukan, menggunakan direktori values-* dalam folder res, ke file LocaleConfig yang dibuat secara otomatis.

Cara membentuk nama lokalitas

Untuk membentuk nama lokalitas, gabungkan kode bahasa dengan skrip opsional dan kode wilayah, yang memisahkan keduanya dengan tanda hubung:

Misalnya, jika lokalitas default Anda adalah bahasa Inggris Amerika:

unqualifiedResLocale=en-US

Menggunakan android:localeConfig untuk menambahkan bahasa yang didukung ke setelan sistem

Anda dapat menyiapkan aplikasi secara manual untuk memastikan bahasanya dapat dikonfigurasi di setelan sistem di perangkat yang menjalankan Android 13 atau yang lebih baru. Untuk melakukannya, buat file XML locales_config dan tambahkan file ke manifes aplikasi Anda menggunakan atribut android:localeConfig. Menghapus entri manifes android:localeConfig menandakan bahwa pengguna tidak seharusnya dapat menyetel bahasa aplikasi Anda, apa pun bahasa sistem mereka dalam setelan sistem.

Untuk menambahkan bahasa yang didukung aplikasi Anda ke setelan sistem pengguna secara manual:

  1. Buat file bernama res/xml/locales_config.xml dan tentukan bahasa aplikasi Anda, termasuk lokalitas penggantian akhir aplikasi, yang merupakan lokalitas yang ditentukan dalam res/values/strings.xml.

    Lihat Cara membentuk nama lokalitas untuk persyaratan format. Lihat juga contoh file locale_config.xml untuk mengetahui daftar lokalitas yang umum digunakan.

    Misalnya, format file locales_config.xml seperti ini untuk aplikasi yang mendukung bahasa berikut:

    • Inggris (Amerika Serikat) sebagai lokalitas pengganti akhir
    • Inggris (Inggris Raya)
    • Prancis
    • Jepang
    • Bahasa China (Aksara Sederhana, Makau)
    • Bahasa China (Aksara Tradisional, Makau)
    <?xml version="1.0" encoding="utf-8"?>
    <locale-config xmlns:android="http://schemas.android.com/apk/res/android">
       <locale android:name="en-US"/>
       <locale android:name="en-GB"/>
       <locale android:name="fr"/>
       <locale android:name="ja"/>
       <locale android:name="zh-Hans-MO"/>
       <locale android:name="zh-Hant-MO"/>
    </locale-config>
    
  2. Di manifes, tambahkan baris yang menunjuk file baru ini:

    <manifest>
        ...
        <application
            ...
            android:localeConfig="@xml/locales_config">
        </application>
    </manifest>
    

Anda dapat memperbarui localeConfig aplikasi secara dinamis dengan LocaleManager.setOverrideLocaleConfig untuk menyesuaikan kumpulan bahasa yang ditampilkan dalam daftar bahasa per aplikasi di Setelan Android. Hal ini memungkinkan Anda menyesuaikan daftar bahasa per wilayah, menjalankan eksperimen A/B, dan menyediakan lokal yang diupdate jika aplikasi Anda menggunakan push pelokalan sisi server seperti yang ditunjukkan dalam contoh berikut:

Kotlin

//For setOverrideLocaleConfig
val localeManager = applicationContext
    .getSystemService(LocaleManager::class.java)
localeManager.overrideLocaleConfig = LocaleConfig(
LocaleList.forLanguageTags("en-US,ja-JP,zh-Hans-SG")
)

//For getOverrideLocaleConfig
// The app calls the API to get the override LocaleConfig
val overrideLocaleConfig = localeManager.overrideLocaleConfig
// If the returned overrideLocaleConfig isn't equal to NULL, then the app calls the API to get the supported Locales
val supportedLocales = overrideLocaleConfig.supportedLocales()

Java

//For setOverrideLocaleConfig
mContext.getSystemService(LocaleManager.class).setOverrideLocaleConfig(new LocaleConfig(LocaleList.forLanguageTags("en-US,ja-JP,zh-Hans-SG")));

//For getOverrideLocaleConfig
// The app calls the API to get the override LocaleConfig
LocaleConfig overrideLocaleConfig = mContext.getSystemService(LocaleManager.class).getOverrideLocaleConfig();
// If the returned overrideLocaleConfig isn't equal to NULL, then the app calls the API to get the supported Locales
LocaleList supportedLocales = overrideLocaleConfig.getSupportedLocales();

Selain itu, IME kini dapat menggunakan LocaleManager.getApplicationLocales untuk mengetahui bahasa UI aplikasi saat ini guna mengupdate bahasa keyboard seperti yang ditunjukkan:

Kotlin

val currentAppLocales: LocaleList = applicationContext.getSystemService(LocaleManager::class.java).getApplicationLocales(appPackageName)

Java

LocaleList currentAppLocales =
    mContext.getSystemService(LocaleManager.class).getApplicationLocales(appPackageName);

Menentukan bahasa yang didukung di Gradle

Jika belum ada, tentukan bahasa yang sama menggunakan properti resourceConfigurations dalam file build.gradle level modul aplikasi Anda:

android {
  ...
  defaultConfig {
    resourceConfigurations += ["en", "en-rGB", "fr", "ja", "b+zh+Hans+MO", "b+zh+Hant+MO"]
  }
}

Jika properti resourceConfigurations ada, sistem build hanya akan menyertakan resource bahasa dalam APK untuk bahasa yang ditentukan tersebut, sehingga string terjemahan tidak disertakan dari library lain yang mungkin mendukung bahasa yang tidak didukung aplikasi Anda. Untuk informasi selengkapnya, lihat menentukan bahasa yang didukung aplikasi.

Cara pengguna memilih bahasa aplikasi di setelan sistem

Pengguna dapat memilih bahasa pilihan mereka untuk setiap aplikasi melalui setelan sistem. Pengguna dapat mengakses setelan ini dengan dua cara berbeda:

  • Akses melalui setelan Sistem

    Setelan > Sistem > Bahasa & Input > Bahasa Aplikasi > (pilih aplikasi)

  • Akses melalui setelan Aplikasi

    Setelan > Aplikasi > (pilih aplikasi) > Bahasa

Menangani pemilih bahasa dalam aplikasi

Untuk aplikasi yang telah memiliki pemilih bahasa dalam aplikasi atau ingin menggunakannya, gunakan API publik, bukan logika aplikasi khusus, untuk menangani setelan dan mendapatkan bahasa pilihan pengguna untuk aplikasi Anda. Jika Anda menggunakan API publik untuk pemilih bahasa dalam aplikasi, setelan sistem perangkat akan otomatis diperbarui agar cocok dengan bahasa yang dipilih pengguna melalui pengalaman dalam aplikasi Anda.

Untuk kompatibilitas mundur dengan versi Android sebelumnya, sebaiknya gunakan support library AndroidX saat menerapkan pemilih bahasa dalam aplikasi. Namun, Anda juga dapat menerapkan API framework secara langsung jika perlu.

Implementasi menggunakan support library AndroidX

Gunakan metode setApplicationLocales() dan getApplicationLocales() di Appcompat 1.6.0 atau versi yang lebih baru. Perhatikan bahwa API yang kompatibel dengan versi lama berfungsi dengan konteks AppCompatActivity, bukan konteks aplikasi, untuk Android 12 (level API 32) dan yang lebih lama.

Misalnya, untuk menyetel bahasa pilihan pengguna, Anda akan meminta pengguna memilih lokalitas dalam pemilih bahasa, lalu menyetel nilai tersebut dalam sistem:

Kotlin

val appLocale: LocaleListCompat = LocaleListCompat.forLanguageTags("xx-YY")
// Call this on the main thread as it may require Activity.restart()
AppCompatDelegate.setApplicationLocales(appLocale)

Java

LocaleListCompat appLocale = LocaleListCompat.forLanguageTags("xx-YY");
// Call this on the main thread as it may require Activity.restart()
AppCompatDelegate.setApplicationLocales(appLocale);

Perhatikan bahwa memanggil setApplicationLocales() akan membuat ulang Activity, kecuali jika aplikasi Anda menangani perubahan konfigurasi lokalitas dengan sendirinya.

Gunakan AppCompatDelegate.getApplicationLocales() untuk mengambil lokalitas pilihan pengguna. Pengguna mungkin telah memilih lokalitas aplikasi mereka dari setelan sistem atau dari pemilih bahasa dalam aplikasi.

Mendukung Android 12 dan versi lebih lama

Untuk mendukung perangkat yang menjalankan Android 12 (level API 32) dan versi lebih lama, beri tahu AndroidX untuk menangani penyimpanan lokalitas dengan menyetel nilai autoStoreLocales ke true dan android:enabled ke false dalam entri manifes untuk layanan AppLocalesMetadataHolderService aplikasi Anda, seperti yang ditunjukkan dalam cuplikan kode berikut:

<application
  ...
  <service
    android:name="androidx.appcompat.app.AppLocalesMetadataHolderService"
    android:enabled="false"
    android:exported="false">
    <meta-data
      android:name="autoStoreLocales"
      android:value="true" />
  </service>
  ...
</application>

Perhatikan bahwa menyetel nilai autoStoreLocales ke true akan menyebabkan pembacaan blocking di thread utama dan dapat menyebabkan pelanggaran StrictMode diskRead dan diskWrite jika Anda melakukan logging pada pelanggaran thread. Lihat AppCompatDelegate.setApplicationLocales() untuk mengetahui informasi selengkapnya.

Penanganan penyimpanan kustom

Menghapus entri manifes atau menetapkan autoStoreLocales ke false menandakan bahwa Anda menangani penyimpanan Anda sendiri. Dalam hal ini, Anda harus menyediakan lokalitas yang disimpan sebelum onCreate dalam siklus proses aktivitas dan panggilan gate ke AppCompatDelegate.setApplicationLocales() di Android 12 (level API 32) atau versi lebih rendah.

Jika aplikasi Anda memiliki lokasi penyimpanan lokalitas khusus, sebaiknya gunakan pengalihan satu kali antara solusi penyimpanan lokalitas khusus dan autoStoreLocales sehingga pengguna dapat terus menikmati aplikasi Anda dalam bahasa yang mereka inginkan. Hal ini terutama berlaku jika aplikasi Anda pertama kali dijalankan setelah perangkat diupgrade ke Android 13. Dalam hal ini, Anda dapat memberikan lokalitas yang diminta oleh pengguna yang sudah ada sebelumnya dengan mengambil lokalitas dari penyimpanan khusus Anda dan meneruskan lokalitas ke AppCompatDelegate.setApplicationLocales().

Implementasi menggunakan API framework Android

Meskipun kami sangat menyarankan Anda menggunakan support library AndroidX untuk menerapkan pemilih bahasa dalam aplikasi, Anda juga dapat menggunakan metode setApplicationLocales() dan getApplicationLocales() dalam framework Android untuk perangkat yang menjalankan Android 13.

Misalnya, untuk menyetel bahasa pilihan pengguna, Anda akan meminta pengguna memilih lokalitas dalam pemilih bahasa, lalu menyetel nilai tersebut dalam sistem:

// 1. Inside an activity, in-app language picker gets an input locale "xx-YY"
// 2. App calls the API to set its locale
mContext.getSystemService(LocaleManager.class
    ).setApplicationLocales(new LocaleList(Locale.forLanguageTag("xx-YY")));
// 3. The system updates the locale and restarts the app, including any configuration updates
// 4. The app is now displayed in "xx-YY" language

Agar bahasa pilihan pengguna saat ini ditampilkan di pemilih bahasa, aplikasi Anda dapat memperoleh kembali nilai dari sistem:

// 1. App calls the API to get the preferred locale
LocaleList currentAppLocales =
    mContext.getSystemService(LocaleManager.class).getApplicationLocales();
// 2. App uses the returned LocaleList to display languages to the user

Praktik terbaik tambahan

Perhatikan praktik terbaik berikut.

Mempertimbangkan bahasa saat memanggil intent di aplikasi lain

Intent yang berfokus pada bahasa dapat memungkinkan Anda menentukan bahasa yang ingin digunakan oleh aplikasi yang dipanggil. Salah satu contohnya adalah fitur EXTRA_LANGUAGE dari Speech Recognizer API.

Mempertimbangkan header Accept-Language untuk Tab khusus Chrome

Pertimbangkan untuk menambahkan Header Accept-Language melalui Browser.EXTRA_HEADERS untuk membuka halaman web dalam bahasa aplikasi Anda saat memanggil Tab khusus Chrome.

Jika Anda menghapus preferensi bahasa per aplikasi dalam setelan sistem, reset lokalitas aplikasi Anda ke lokalitas sistem

Jika Anda menghapus preferensi bahasa aplikasi dari setelan sistem (dengan menghapus android:localeConfig dari AndroidManifest.xml aplikasi Anda), pengguna tidak akan dapat mereset bahasa aplikasinya dengan mudah kembali ke default sistem.

Oleh karena itu, jika Anda menghapus android:localeConfig, pertimbangkan untuk mereset lokalitas aplikasi ke lokalitas sistem menggunakan LocaleListCompat.getEmptyLocaleList() atau LocaleList.getEmptyLocaleList() seperti yang terlihat dalam cuplikan kode berikut:

Kotlin

// Use the AndroidX APIs to reset to the system locale for backward and forward compatibility
AppCompatDelegate.setApplicationLocales(
  LocaleListCompat.getEmptyLocaleList()
)

// Or use the Framework APIs for Android 13 and above to reset to the system locale
val context = LocalContext.current
context.getSystemService(LocaleManager::class.java)
  .applicationLocales = LocaleList.getEmptyLocaleList()

Java

// Use the AndroidX APIs to reset to the system locale for backward and forward compatibility
AppCompatDelegate.setApplicationLocales(
  LocaleListCompat.getEmptyLocaleList()
);

// Or use the Framework APIs for Android 13 and above to reset to the system locale
mContext.getSystemService(LocaleManager.class)
  .setApplicationLocales(LocaleList.getEmptyLocaleList());

Referensi tambahan

Lihat contoh kode, artikel blog, dan video kami untuk informasi tambahan.

Contoh file locale_config.xml

Secara default, Android menyertakan terjemahan tingkat sistem di Proyek Open Source Android (AOSP) untuk sekumpulan standar lokalitas yang paling sering digunakan. Contoh file locale_config.xml yang disertakan di bagian ini menampilkan format yang disarankan untuk setiap lokalitas ini. Rujuk file contoh ini untuk membantu Anda membuat file locale_config.xml sendiri untuk sekumpulan bahasa yang didukung aplikasi Anda.

<?xml version="1.0" encoding="utf-8"?>
<locale-config xmlns:android="http://schemas.android.com/apk/res/android">
   <locale android:name="af"/> <!-- Afrikaans -->
   <locale android:name="am"/> <!-- Amharic -->
   <locale android:name="ar"/> <!-- Arabic -->
   <locale android:name="as"/> <!-- Assamese -->
   <locale android:name="az"/> <!-- Azerbaijani -->
   <locale android:name="be"/> <!-- Belarusian -->
   <locale android:name="bg"/> <!-- Bulgarian -->
   <locale android:name="bn"/> <!-- Bengali -->
   <locale android:name="bs"/> <!-- Bosnian -->
   <locale android:name="ca"/> <!-- Catalan -->
   <locale android:name="cs"/> <!-- Czech -->
   <locale android:name="da"/> <!-- Danish -->
   <locale android:name="de"/> <!-- German -->
   <locale android:name="el"/> <!-- Greek -->
   <locale android:name="en-AU"/> <!-- English (Australia) -->
   <locale android:name="en-CA"/> <!-- English (Canada) -->
   <locale android:name="en-GB"/> <!-- English (United Kingdom) -->
   <locale android:name="en-IN"/> <!-- English (India) -->
   <locale android:name="en-US"/> <!-- English (United States) -->
   <locale android:name="en-XA"/> <!-- English (Pseudo-Accents) -->
   <locale android:name="es"/> <!-- Spanish (Spain) -->
   <locale android:name="es-US"/> <!-- Spanish (United States) -->
   <locale android:name="et"/> <!-- Estonian -->
   <locale android:name="eu"/> <!-- Basque -->
   <locale android:name="fa"/> <!-- Farsi -->
   <locale android:name="fi"/> <!-- Finnish -->
   <locale android:name="fr"/> <!-- French (France) -->
   <locale android:name="fr-CA"/> <!-- French (Canada) -->
   <locale android:name="gl"/> <!-- Galician -->
   <locale android:name="gu"/> <!-- Gujarati -->
   <locale android:name="hi"/> <!-- Hindi -->
   <locale android:name="hr"/> <!-- Croatian -->
   <locale android:name="hu"/> <!-- Hungarian -->
   <locale android:name="hy"/> <!-- Armenian -->
   <locale android:name="in"/> <!-- Indonesian -->
   <locale android:name="is"/> <!-- Icelandic -->
   <locale android:name="it"/> <!-- Italian -->
   <locale android:name="iw"/> <!-- Hebrew -->
   <locale android:name="ja"/> <!-- Japanese -->
   <locale android:name="ka"/> <!-- Georgian -->
   <locale android:name="kk"/> <!-- Kazakh -->
   <locale android:name="km"/> <!-- Khmer -->
   <locale android:name="kn"/> <!-- Kannada -->
   <locale android:name="ko"/> <!-- Korean -->
   <locale android:name="ky"/> <!-- Kyrgyz -->
   <locale android:name="lo"/> <!-- Lao -->
   <locale android:name="lt"/> <!-- Lithuanian -->
   <locale android:name="lv"/> <!-- Latvian -->
   <locale android:name="mk"/> <!-- Macedonian -->
   <locale android:name="ml"/> <!-- Malayalam -->
   <locale android:name="mn"/> <!-- Mongolian -->
   <locale android:name="mr"/> <!-- Marathi -->
   <locale android:name="ms"/> <!-- Malay -->
   <locale android:name="my"/> <!-- Burmese -->
   <locale android:name="my-MM"/> <!-- Burmese (Myanmar) -->
   <locale android:name="nb"/> <!-- Norwegian -->
   <locale android:name="ne"/> <!-- Nepali -->
   <locale android:name="nl"/> <!-- Dutch -->
   <locale android:name="or"/> <!-- Odia -->
   <locale android:name="pa"/> <!-- Punjabi -->
   <locale android:name="pl"/> <!-- Polish -->
   <locale android:name="pt-BR"/> <!-- Portuguese (Brazil) -->
   <locale android:name="pt-PT"/> <!-- Portuguese (Portugal) -->
   <locale android:name="ro"/> <!-- Romanian -->
   <locale android:name="ru"/> <!-- Russian -->
   <locale android:name="si"/> <!-- Sinhala -->
   <locale android:name="sk"/> <!-- Slovak -->
   <locale android:name="sl"/> <!-- Slovenian -->
   <locale android:name="sq"/> <!-- Albanian -->
   <locale android:name="sr"/> <!-- Serbian (Cyrillic) -->
   <locale android:name="sr-Latn"/> <!-- Serbian (Latin) -->
   <locale android:name="sv"/> <!-- Swedish -->
   <locale android:name="sw"/> <!-- Swahili -->
   <locale android:name="ta"/> <!-- Tamil -->
   <locale android:name="te"/> <!-- Telugu -->
   <locale android:name="th"/> <!-- Thai -->
   <locale android:name="tl"/> <!-- Filipino -->
   <locale android:name="tr"/> <!-- Turkish -->
   <locale android:name="uk"/> <!-- Ukrainian -->
   <locale android:name="ur"/> <!-- Urdu -->
   <locale android:name="uz"/> <!-- Uzbek -->
   <locale android:name="vi"/> <!-- Vietnamese -->
   <locale android:name="zh-CN"/> <!-- Chinese (Simplified) -->
   <locale android:name="zh-HK"/> <!-- Chinese (Hong Kong) -->
   <locale android:name="zh-TW"/> <!-- Chinese (Traditional) -->
   <locale android:name="zu"/> <!-- Zulu -->
</locale-config>