एंड्रॉइड डिवाइस में हम वर्तमान भाषा का चयन कैसे कर सकते हैं?
एंड्रॉइड डिवाइस में हम वर्तमान भाषा का चयन कैसे कर सकते हैं?
जवाबों:
यदि आप अपने डिवाइस की चयनित भाषा प्राप्त करना चाहते हैं, तो यह आपकी मदद कर सकता है:
Locale.getDefault().getDisplayLanguage();
Locale.getDefault().getLanguage();
सामान्य भाषा कोड (जैसे "डी", "एन") प्राप्त करने के लिए उपयोग कर सकते हैं ।
Locale.setDefault("ru")
, और सिस्टम सेटिंग्स में भाषा अंग्रेजी में सेट है, तो विधि "आरयू"Locale.getDefault().getLanguage()
लौटेगी , लेकिन "एन" नहीं । क्या वास्तविक सिस्टम लोकेल / भाषा प्राप्त करने का एक और तरीका है? मुझे यहां समाधान का दस्तावेज नहीं मिला , लेकिन क्या अधिक सुरुचिपूर्ण समाधान है?
Locale.getDefault().toString()
करता हूं जो एक स्ट्रिंग देता है जो लोकेल को पूरी तरह से पहचानता है, जैसे "en_US"।
मैंने अपने Android 4.1.2 डिवाइस पर लोकेल विधियों की जाँच की है, और परिणाम:
Locale.getDefault().getLanguage() ---> en
Locale.getDefault().getISO3Language() ---> eng
Locale.getDefault().getCountry() ---> US
Locale.getDefault().getISO3Country() ---> USA
Locale.getDefault().getDisplayCountry() ---> United States
Locale.getDefault().getDisplayName() ---> English (United States)
Locale.getDefault().toString() ---> en_US
Locale.getDefault().getDisplayLanguage()---> English
Locale.getDefault().toLanguageTag() ---> en-US
Locale.getDefault().getDisplayLanguage()
जो रिटर्न"English"
मेरे लिए क्या काम था:
Resources.getSystem().getConfiguration().locale;
Resources.getSystem()
एक वैश्विक साझा संसाधन ऑब्जेक्ट देता है जो केवल सिस्टम संसाधनों (कोई एप्लिकेशन संसाधन) तक पहुंच प्रदान करता है, और वर्तमान स्क्रीन के लिए कॉन्फ़िगर नहीं किया गया है (आयाम इकाइयों का उपयोग नहीं कर सकता है, अभिविन्यास, आदि के आधार पर परिवर्तित नहीं होता है)।
क्योंकि getConfiguration.locale
अब हटा दिया गया है, एंड्रॉइड नौगट में प्राथमिक लोकेल प्राप्त करने का पसंदीदा तरीका है:
Resources.getSystem().getConfiguration().getLocales().get(0);
पिछले Android संस्करणों के साथ संगतता की गारंटी देने के लिए एक संभावित समाधान एक सरल जांच होगी:
Locale locale;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
locale = Resources.getSystem().getConfiguration().getLocales().get(0);
} else {
//noinspection deprecation
locale = Resources.getSystem().getConfiguration().locale;
}
अपडेट करें
समर्थन पुस्तकालय से शुरू करके 26.1.0
आपको Android संस्करण की जांच करने की आवश्यकता नहीं है क्योंकि यह एक सुविधाजनक विधि पिछड़े संगत प्रदान करता है getLocales()
।
बस कॉल करें:
ConfigurationCompat.getLocales(Resources.getSystem().getConfiguration());
ConfigurationCompat.getLocales(Resources.getSystem().getConfiguration())
getLocales
का उपयोग करने का तरीका है। मैंने अपना उत्तर अपडेट कर दिया है।
आप वर्तमान स्थान से भाषा को 'निकाल' सकते हैं। आप मानक जावा एपीआई के माध्यम से, या Android संदर्भ का उपयोग करके स्थान निकाल सकते हैं। उदाहरण के लिए, नीचे की दो पंक्तियाँ समतुल्य हैं:
String locale = context.getResources().getConfiguration().locale.getDisplayName();
String locale = java.util.Locale.getDefault().getDisplayName();
Locale.setDefault()
पहले से कुछ अन्य लोकेल के साथ कॉल करें और आपको अलग-अलग परिणाम मिले।
दूसरों के समय और / या भ्रम को बचाने के लिए मैं साझा करना चाहता था कि मैंने जोहान पेलग्रिम द्वारा प्रस्तावित दो विकल्पों की कोशिश की है और मेरे डिवाइस पर वे समतुल्य हैं - डिफ़ॉल्ट स्थान बदला है या नहीं।
इसलिए मेरे डिवाइस की डिफ़ॉल्ट सेटिंग अंग्रेजी (यूनाइटेड किंडोम) है और इस स्थिति में जैसा कि उम्मीद है कि जोहान के जवाब में दोनों स्ट्रिंग्स एक ही परिणाम देते हैं। अगर मैं फोन सेटिंग्स में इटैलियन (इटैलियन (इटालिया)) कहता हूं और फिर से चलाता हूं, तो जोहान के जवाब में दोनों स्ट्रिंग्स को लोको इटालियन (इटालिया) कहते हैं।
इसलिए मेरा मानना है कि जोहान की मूल पोस्ट सही है और गलत होने के लिए gregm की टिप्पणी।
लोकेल संदर्भ में वर्णित भाषा पाने का सबसे अच्छा तरीका है:
Locale.getDefault().getLanguage()
यह विधि ISO 639-1 standart के अनुसार भाषा आईडी के साथ स्ट्रिंग लौटाती है
आप इसका उपयोग कर सकते हैं
boolean isLang = Locale.getDefault().getLanguage().equals("xx");
जब "xx" कोई भी भाषा कोड होता है जैसे "en", "fr", "sp", "ar" .... और इसी तरह
यदि API का स्तर 24 या अधिक है, तो LocaleList.getDefault().get(0).getLanguage()
अन्य उपयोग करेंLocale.getDefault.getLanguage()
private fun getSystemLocale(): String {
return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
return LocaleList.getDefault().get(0).getLanguage();
} else {
return Locale.getDefault.getLanguage();
}
}
संदर्भ: https://developer.android.com/guide/topics/resources/multilingual-support
जोहान पेलग्रिम के जवाब में जोड़ने के लिए
context.getResources().getConfiguration().locale
Locale.getDefault()
समतुल्य हैं क्योंकि android.text.format.DateFormat
वर्ग दोनों का परस्पर उपयोग करता है, जैसे
private static String zeroPad(int inValue, int inMinDigits) {
return String.format(Locale.getDefault(), "%0" + inMinDigits + "d", inValue);
}
तथा
public static boolean is24HourFormat(Context context) {
String value = Settings.System.getString(context.getContentResolver(),
Settings.System.TIME_12_24);
if (value == null) {
Locale locale = context.getResources().getConfiguration().locale;
// ... snip the rest ...
}
आप सिस्टम संसाधनों से स्थान प्राप्त करने का प्रयास कर सकते हैं:
PackageManager packageManager = context.getPackageManager();
Resources resources = packageManager.getResourcesForApplication("android");
String language = resources.getConfiguration().locale.getLanguage();
ऊपर दिए गए उत्तर सरल चीनी और पारंपरिक चीनी के बीच अंतर नहीं करते हैं।
Locale.getDefault().toString()
काम करता है जो "zh_CN", "zh_TW", "en_US" और आदि देता है
संदर्भ: https://developer.android.com/reference/java/util/Locale.html , ISO 639-1 OLD है।
कीबोर्ड कोड का पता लगाने के लिए आप इस कोड का उपयोग कर सकते हैं
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
InputMethodSubtype ims = imm.getCurrentInputMethodSubtype();
String locale = ims.getLocale();
दो भाषाएं हैं।
OS की डिफ़ॉल्ट भाषा:
Locale.getDefault().getDisplayLanguage();
आवेदन की वर्तमान भाषा:
getResources().getConfiguration().locale.getDisplayLanguage();//return string
यदि आप ऐसी भाषा चुनते हैं जो आप टाइप नहीं कर सकते हैं तो यह यूनानी मददगार हो सकती है।
getDisplayLanguage().toString() = English
getLanguage().toString() = en
getISO3Language().toString() = eng
getDisplayLanguage()) = English
getLanguage() = en
getISO3Language() = eng
अब इसे ग्रीक के साथ आज़माएँ
getDisplayLanguage().toString() = Ελληνικά
getLanguage().toString() = el
getISO3Language().toString() = ell
getDisplayLanguage()) = Ελληνικά
getLanguage() = el
getISO3Language() = ell
यदि आप एक वर्तमान भाषा की जांच करना चाहते हैं, तो @Sarpe (@Thorbear) के उत्तर का उपयोग करें:
val language = ConfigurationCompat.getLocales(Resources.getSystem().configuration)?.get(0)?.language
// Check here the language.
val format = if (language == "ru") "d MMMM yyyy г." else "d MMMM yyyy"
val longDateFormat = SimpleDateFormat(format, Locale.getDefault())
DateFormat.getDateInstance(DateFormat.LONG, Locale.getDefault()).format(Date())
।
if(Locale.getDefault().getDisplayName().equals("हिन्दी (भारत)")){
// your code here
}
आपके डिवाइस की भाषा प्राप्त करने का सही तरीका निम्नलिखित है:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
return context.getResources().getConfiguration().getLocales().get(0);
} else {
return context.getResources().getConfiguration().locale;
}
आशा है ये मदद करेगा।
Locale.getDefault().getDisplayLanguage()
आपको Written
भाषा के लिए नाम देगा , उदाहरण के लिए,English, Dutch, French
Locale.getDefault().getLanguage()
language code
उदाहरण के लिए, आपको देंगे :en, nl, fr
दोनों विधियाँ स्ट्रिंग लौटाती हैं
public class LocalUtils {
private static final String LANGUAGE_CODE_ENGLISH = "en";
// returns application language eg: en || fa ...
public static String getAppLanguage() {
return Locale.getDefault().getLanguage();
}
// returns device language eg: en || fa ...
public static String getDeviceLanguage() {
return ConfigurationCompat.getLocales(Resources.getSystem().getConfiguration()).get(0).getLanguage();
}
public static boolean isDeviceEnglish() {
return getDeviceLanguage().equals(new Locale(LANGUAGE_CODE_ENGLISH).getLanguage());
}
public static boolean isAppEnglish() {
return getAppLanguage().equals(new Locale(LANGUAGE_CODE_ENGLISH).getLanguage());
}
}
Log.i("AppLanguage: ", LocalUtils.getAppLanguage());
Log.i("DeviceLanguage: ", LocalUtils.getDeviceLanguage());
Log.i("isDeviceEnglish: ", String.valueOf(LocalUtils.isDeviceEnglish()));
Log.i("isAppEnglish: ", String.valueOf(LocalUtils.isAppEnglish()));
अन्य लोगों ने डिवाइस भाषा के लिए अच्छे उत्तर दिए हैं,
यदि आप चाहते हैं कि ऐप की भाषा सबसे आसान तरीका है, तो यह app_lang
आपकी strings.xml
फ़ाइल में एक कुंजी जोड़कर है , और प्रत्येक लैंग के लिए लैंग को भी निर्दिष्ट करें।
इस तरह, यदि आपकी ऐप की डिफ़ॉल्ट भाषा डिवाइस भाषा से अलग है, तो आप अपनी सेवाओं के लिए उस पैरामीटर के रूप में भेज सकते हैं।
public void GetDefaultLanguage( ) {
try {
String langue = Locale.getDefault().toString(); // ---> en_US
/*
Log.i("TAG", Locale.getDefault().getLanguage() ); // ---> en
Log.i("TAG", Locale.getDefault().getISO3Language() ); // ---> eng
Log.i("TAG", Locale.getDefault().getCountry() ); // ---> US
Log.i("TAG", Locale.getDefault().getISO3Country() ); // ---> USA
Log.i("TAG", Locale.getDefault().getDisplayCountry() ); // ---> United States
Log.i("TAG", Locale.getDefault().getDisplayName() ); // ---> English (United States)
Log.i("TAG", Locale.getDefault().toString() ); // ---> en_US
Log.i("TAG", Locale.getDefault().getDisplayLanguage() ); //---> English
*/
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
langue = Locale.getDefault().toLanguageTag(); // ---> en-US
url_Api = getUrlMicrosoftLearn(langue);
Log.i("TAG", url_Api );
Log.i("TAG", langue );
}else{
langue = langue.replace("_","-"); // ---> en-US
url_Api = getUrlMicrosoftLearn(langue);
Log.i("TAG", url_Api );
Log.i("TAG", langue );
}
}catch (Exception ex) {
Log.i("TAG", "Exception:GetDefaultLanguage()", ex);
}
}
public String getUrlMicrosoftLearn(String langue) {
return "https://docs.microsoft.com/"+langue+"/learn";
}
मेरा समाधान इस तरह है
@SuppressWarnings("deprecation")
public String getCurrentLocale2() {
return Resources.getSystem().getConfiguration().locale.getLanguage();
}
@TargetApi(Build.VERSION_CODES.N)
public Locale getCurrentLocale() {
getResources();
return Resources.getSystem().getConfiguration().getLocales().get(0);
}
और फिर
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
Log.e("Locale", getCurrentLocale().getLanguage());
} else {
Log.e("Locale", getCurrentLocale2().toString());
}
दिखाया ---> एन
यहाँ डिवाइस देश प्राप्त करने के लिए कोड है। Android के सभी संस्करणों के साथ संगत भी oreo।
समाधान: यदि उपयोगकर्ता के पास सिम कार्ड नहीं है, तो उसका उपयोग फोन सेटअप, या वर्तमान भाषा चयन के दौरान किया जाता है।
public static String getDeviceCountry(Context context) {
String deviceCountryCode = null;
final TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
if(tm != null) {
deviceCountryCode = tm.getNetworkCountryIso();
}
if (deviceCountryCode != null && deviceCountryCode.length() <=3) {
deviceCountryCode = deviceCountryCode.toUpperCase();
}
else {
deviceCountryCode = ConfigurationCompat.getLocales(Resources.getSystem().getConfiguration()).get(0).getCountry().toUpperCase();
}
// Log.d("countryCode"," : " + deviceCountryCode );
return deviceCountryCode;
}