Bagaimana cara saya mendapatkan Lokal pengguna saat ini di Android?
Saya bisa mendapatkan yang default, tetapi ini mungkin bukan yang benar?
Pada dasarnya saya ingin kode bahasa dua huruf dari lokal saat ini. Bukan yang standar. Tidak adaLocale.current()
default()
adalah taruhan yang cukup aman, tapi jangan gunakan itu untuk diproses (seperti yang dikatakan dokumen).default()
, tetapi tidak untuk hal-hal yang dapat merusak kode.Jawaban:
Default
Locale
dibangun secara statis saat runtime untuk proses aplikasi Anda dari pengaturan properti sistem, sehingga akan mewakili yangLocale
dipilih pada perangkat itu ketika aplikasi diluncurkan . Biasanya, ini baik-baik saja, tetapi itu berarti bahwa jika pengguna mengubahLocale
pengaturan mereka setelah proses aplikasi Anda berjalan, nilaigetDefaultLocale()
mungkin tidak akan segera diperbarui.Jika Anda perlu menjebak peristiwa seperti ini karena beberapa alasan dalam aplikasi Anda, Anda bisa mencoba mendapatkan yang
Locale
tersedia dariConfiguration
objek sumber daya , yaituAnda mungkin menemukan bahwa nilai ini diperbarui lebih cepat setelah perubahan pengaturan jika itu diperlukan untuk aplikasi Anda.
sumber
Log.d("localeChange", "Default locale lang: " + Locale.getDefault().getLanguage()); Log.d("localeChange", "Config locale lang: " + getResources().getConfiguration().locale.getLanguage());
locale This field was deprecated in API level 24. Do not set or read this directly. Use getLocales() and setLocales(LocaleList). If only the primary locale is needed, getLocales().get(0) is now the preferred accessor.
Pembaruan Android N (Api level 24) (tidak ada peringatan):
sumber
LocaleList.getDefault().get(0);
karena ini akan mengembalikan Lokal yang diurutkan berdasarkan bahasa yang disukai.ConfigurationCompat
, asConfigurationCompat.getLocales(getResources().getConfiguration()).get(0)
Jika Anda menggunakan Perpustakaan Dukungan Android, Anda bisa menggunakan
ConfigurationCompat
metode @ Makalele untuk menghilangkan peringatan penghentian:atau di Kotlin:
sumber
ConfigurationCompat.getLocales(Resources.getSystem().getConfiguration()).get(0);
Dari
getDefault
dokumentasi:Juga dari
Locale
dokumen:Sepertinya Anda harus menggunakannya.
sumber
Locale.setDefault()
, itu dipanggil ketika saya mengubah bahasa perangkat setidaknya kembali ke Android 5.0 (sejauh yang saya uji)Semua jawaban di atas - tidak berfungsi. Jadi saya akan taruh di sini fungsi yang bekerja pada android 4 dan 9
sumber
LocaleListCompat.getDefault()
jika Anda menggunakan AndroidX.Saya sudah menggunakan ini:
sumber
Sesuai dokumentasi resmi, ConfigurationCompat tidak digunakan lagi di perpustakaan dukungan
Anda dapat mempertimbangkan untuk menggunakan
LocaleListCompat.getDefault()[0].toLanguageTag()
Posisi 0 akan menjadi lokal yang disukai penggunaUntuk mendapatkan lokal Default pada posisi ke-0 adalah
LocaleListCompat.getAdjustedDefault()
sumber