मुझे एंड्रॉइड में उपयोगकर्ता का वर्तमान लोकेल कैसे मिलेगा?
मुझे डिफ़ॉल्ट एक मिल सकता है, लेकिन यह वर्तमान सही नहीं हो सकता है?
मूल रूप से मुझे वर्तमान लोकेल से दो अक्षर का भाषा कोड चाहिए। डिफ़ॉल्ट एक नहीं। कोई नहीं हैLocale.current()
मुझे एंड्रॉइड में उपयोगकर्ता का वर्तमान लोकेल कैसे मिलेगा?
मुझे डिफ़ॉल्ट एक मिल सकता है, लेकिन यह वर्तमान सही नहीं हो सकता है?
मूल रूप से मुझे वर्तमान लोकेल से दो अक्षर का भाषा कोड चाहिए। डिफ़ॉल्ट एक नहीं। कोई नहीं हैLocale.current()
जवाबों:
डिफॉल्ट Localeका निर्माण सिस्टम प्रॉपर्टी सेटिंग्स से आपकी एप्लिकेशन प्रक्रिया के लिए रनटाइम पर किया जाता है, इसलिए यह एप्लिकेशन लॉन्च होनेLocale पर उस डिवाइस पर चयनित का प्रतिनिधित्व करेगा । आमतौर पर, यह ठीक है, लेकिन इसका मतलब यह है कि यदि उपयोगकर्ता आपकी एप्लिकेशन प्रक्रिया के चलने के बाद सेटिंग्स में बदलाव करता है, तो संभवत: इसका मूल्य तुरंत अपडेट नहीं किया जाएगा।LocalegetDefaultLocale()
यदि आपको अपने आवेदन में किसी कारण से इस तरह की घटनाओं को फंसाने की आवश्यकता है, तो आप इसके बजाय Localeसंसाधन Configurationऑब्जेक्ट से उपलब्ध प्राप्त करने का प्रयास कर सकते हैं , अर्थात
Locale current = getResources().getConfiguration().locale;
आप पा सकते हैं कि यह मान सेटिंग बदलने के बाद और अधिक तेज़ी से अपडेट किया जाता है यदि आपके आवेदन के लिए यह आवश्यक है।
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.
Android N (Api level 24) अपडेट (कोई चेतावनी नहीं):
Locale getCurrentLocale(Context context){
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N){
return context.getResources().getConfiguration().getLocales().get(0);
} else{
//noinspection deprecation
return context.getResources().getConfiguration().locale;
}
}
LocaleList.getDefault().get(0);क्योंकि यह पसंदीदा भाषा द्वारा छांटे गए स्थान को लौटा देगा।
ConfigurationCompatरूप में पाया , जैसेConfigurationCompat.getLocales(getResources().getConfiguration()).get(0)
यदि आप एंड्रॉइड सपोर्ट लाइब्रेरी का उपयोग कर रहे हैं, तो आप ConfigurationCompatपदावनति चेतावनी से छुटकारा पाने के लिए @ Makalele की विधि के बजाय उपयोग कर सकते हैं :
Locale current = ConfigurationCompat.getLocales(getResources().getConfiguration()).get(0);
या कोटलिन में:
val currentLocale = ConfigurationCompat.getLocales(resources.configuration)[0]
ConfigurationCompat.getLocales(Resources.getSystem().getConfiguration()).get(0);
से getDefaultकी प्रलेखन:
उपयोगकर्ता का पसंदीदा स्थान लौटाता है। हो सकता है कि इस प्रक्रिया के लिए सेटफॉल्ट (लोकेल) के साथ ओवरराइड किया गया हो।
Localeडॉक्स से भी :
डिफ़ॉल्ट लोकेल उन कार्यों के लिए उपयुक्त है जिसमें उपयोगकर्ता के लिए डेटा प्रस्तुत करना शामिल है।
लगता है जैसे आपको इसका उपयोग करना चाहिए।
Locale.setDefault(), तो यह तब मिलता है जब मैं डिवाइस भाषा को कम से कम एंड्रॉइड 5.0 पर वापस बदल देता हूं (जो कि मैंने परीक्षण किया है)
उपरोक्त सभी उत्तर - काम नहीं करते हैं। तो मैं यहाँ एक फंक्शन डालूँगा जो 4 और 9 android पर काम करता है
private String getCurrentLanguage(){
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N){
return LocaleList.getDefault().get(0).getLanguage();
} else{
return Locale.getDefault().getLanguage();
}
}
LocaleListCompat.getDefault()यदि आप AndroidX का उपयोग करते हैं, तो आप इसका उपयोग भी कर सकते हैं ।
आधिकारिक दस्तावेज़ीकरण के अनुसार कॉन्फ़िगरेशनकम्पैट को समर्थन पुस्तकालयों में पदावनत किया गया है
आप उपयोग करने पर विचार कर सकते हैं
LocaleListCompat.getDefault()[0].toLanguageTag() 0 वां स्थान उपयोगकर्ता का पसंदीदा स्थान होगा
0 स्थान पर डिफ़ॉल्ट स्थान पाने के लिए होगा
LocaleListCompat.getAdjustedDefault()
default()एक बहुत ही सुरक्षित शर्त है, बस इसे प्रोसेसिंग के लिए उपयोग न करें (जैसे डॉक्स कहते हैं)।