डिवाइस में वर्तमान भाषा प्राप्त करें


608

एंड्रॉइड डिवाइस में हम वर्तमान भाषा का चयन कैसे कर सकते हैं?


10
यहां अधिकांश उत्तरों में आवेदन की भाषा मिलती है। यह देखते हुए कि आप कोड में एप्लिकेशन के डिफ़ॉल्ट लोकेल को सेट कर सकते हैं, सही उत्तर सरपे द्वारा दिया गया उत्तर है - जो आपको डिवाइस का लोकेल देता है।
विक्टर Ionescu

@VictorIonescu टिप्पणी के लिए धन्यवाद। सरप का जवाब डिवाइस के लोकेल को लाने के लिए सही उत्तर है। कृपया इसे देखें। stackoverflow.com/a/28498119/3762067
वरद मंडकर

जवाबों:


834

यदि आप अपने डिवाइस की चयनित भाषा प्राप्त करना चाहते हैं, तो यह आपकी मदद कर सकता है:

Locale.getDefault().getDisplayLanguage();

73
getDisplayLanguage () भाषा को स्थानीय करेगा। यदि आप आईएसओ कोड प्राप्त करने में रुचि रखते हैं (उदाहरण के लिए यदि या स्विच स्टेटमेंट के लिए) तो 'Locale.getDefault ()। GetISO3Language ();'
नुआल

13
GetISO3Language () Deutschland (जर्मनी) के लिए "deu" जैसी चीजें देता है ... de
Tobias

372
आप Locale.getDefault().getLanguage();सामान्य भाषा कोड (जैसे "डी", "एन") प्राप्त करने के लिए उपयोग कर सकते हैं ।
muscardinus

35
@DeRagan, यह आपको हमेशा आपके डिवाइस के लिए भाषा नहीं देगा, बल्कि आपके ऐप के लिए ही देगा। उदाहरण के लिए, अगर मैं कॉल करता हूं Locale.setDefault("ru"), और सिस्टम सेटिंग्स में भाषा अंग्रेजी में सेट है, तो विधि "आरयू"Locale.getDefault().getLanguage() लौटेगी , लेकिन "एन" नहीं । क्या वास्तविक सिस्टम लोकेल / भाषा प्राप्त करने का एक और तरीका है? मुझे यहां समाधान का दस्तावेज नहीं मिला , लेकिन क्या अधिक सुरुचिपूर्ण समाधान है?
प्राइजऑफ

47
मैं पसंद Locale.getDefault().toString()करता हूं जो एक स्ट्रिंग देता है जो लोकेल को पूरी तरह से पहचानता है, जैसे "en_US"।
टॉम

835

मैंने अपने 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

7
धन्यवाद, संभावनाओं की एक सूची के साथ अच्छा है। क्या आप कृपया "टॉम" की टिप्पणी में सुझाए गए अनुसार "Locale.getDefault () .String ()" जोड़ सकते हैं।
रेनीपेट

मैं उलझन में हूं। क्या आपने सिर्फ डेगन से जवाब की नकल की है?
डायटर

1
उसके लिए माफ़ करना। यह सच है मैंने इसे वहां जोड़ा। मुझे एक नोट छोड़ना चाहिए था जो यहाँ से आया है। मैंने यह गलती करने की कोशिश की कि लोगों को उस उत्तर को खोजने में मदद मिले जो उन्हें जल्दी चाहिए। क्योंकि आपका स्पष्ट रूप से बेहतर जवाब है। लेकिन निश्चित रूप से तुम्हारा कभी भी शीर्ष पर नहीं आएगा, क्योंकि लोग इसे अक्सर शीर्ष के रूप में नहीं देखते हैं। क्या यह ठीक है अगर हम इसे इस नोट के साथ जोड़ते हैं कि यह इस उत्तर से आया है?
पैट्रिक बूस

1
फिर से हैलो। मैं उस समाधान को पसंद नहीं करता। वर्तमान में डेगन का जवाब पहले स्थान पर दिखाया गया है और मेरा दूसरा दिखाया गया है। एक शोधकर्ता के लिए, प्रश्न पृष्ठ में दूसरे उत्तर की जांच करना इतना कठिन नहीं होना चाहिए। बेहतर होगा अगर @pinki ने स्वीकृत उत्तर को बदल दिया। लेकिन ऐसा लगता है कि पिंकी आखिरी बार 3 महीने पहले देखी गई थी।
trante

1
वहाँ भी है Locale.getDefault().getDisplayLanguage()जो रिटर्न"English"
खेल

105

मेरे लिए क्या काम था:

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());

6
getConfiguration ()। लोकेल को वर्तमान में हटा दिया गया है, getConfiguration () का उपयोग करें। getLocales ()। get (0) के बजाय
Eliseo Ocampos

4
यह इस प्रश्न का सही उत्तर है। अन्य उत्तरों से डिवाइस के नहीं, ऐप के लोकल मिलते हैं।
होफ्स

6
मुझे नहीं पता कि यह जवाब लिखे जाने पर मौजूद था, लेकिन समर्थन पुस्तकालय के पास इसके संगत संस्करण हैं, खुद को पीछे की ओर संगतता लिखने की कोई आवश्यकता नहीं है। ConfigurationCompat.getLocales(Resources.getSystem().getConfiguration())
थोरबियर

जैसा कि @Thorbear ने बताया, अब नई समर्थन लाइब्रेरी पद्धति getLocalesका उपयोग करने का तरीका है। मैंने अपना उत्तर अपडेट कर दिया है।
सर्प

यह सही उत्तर है। अन्य सिस्टम की नहीं आवेदन की भाषा वापस करते हैं।
चिंतन राठौड़

44

आप वर्तमान स्थान से भाषा को 'निकाल' सकते हैं। आप मानक जावा एपीआई के माध्यम से, या Android संदर्भ का उपयोग करके स्थान निकाल सकते हैं। उदाहरण के लिए, नीचे की दो पंक्तियाँ समतुल्य हैं:

String locale = context.getResources().getConfiguration().locale.getDisplayName();
String locale = java.util.Locale.getDefault().getDisplayName();

10
यह सच नहीं है। वे भिन्न हैं। यदि उपयोगकर्ता लोकेल स्विच करता है तो पहला बदल सकता है। दूसरा वह है जो फोन पर पहले से इंस्टॉल है। यह कभी नहीं बदलता है कि उपयोगकर्ता क्या करता है।
gregm

16
Gregm द्वारा टिप्पणी झूठी हो सकती है। Airewyre द्वारा उत्तर देखें।
जान ग्रथ

4
@ gregm की टिप्पणी गलत है। बस इसे स्वयं आज़माएँ और आप देखेंगे, कि सेटिंग में भाषा बदलने पर Locale.getDefault () बदल जाएगा।
पैट्रिक बूस

देखना चाहिए stackoverflow.com/questions/10657747/...
Wernight

हालाँकि @ gregm की टिप्पणी गलत है, फिर भी वह सही है कि उन दो पंक्तियों को उसी स्थान पर वापस करने की आवश्यकता नहीं है। बस Locale.setDefault()पहले से कुछ अन्य लोकेल के साथ कॉल करें और आपको अलग-अलग परिणाम मिले।
21

35

दूसरों के समय और / या भ्रम को बचाने के लिए मैं साझा करना चाहता था कि मैंने जोहान पेलग्रिम द्वारा प्रस्तावित दो विकल्पों की कोशिश की है और मेरे डिवाइस पर वे समतुल्य हैं - डिफ़ॉल्ट स्थान बदला है या नहीं।

इसलिए मेरे डिवाइस की डिफ़ॉल्ट सेटिंग अंग्रेजी (यूनाइटेड किंडोम) है और इस स्थिति में जैसा कि उम्मीद है कि जोहान के जवाब में दोनों स्ट्रिंग्स एक ही परिणाम देते हैं। अगर मैं फोन सेटिंग्स में इटैलियन (इटैलियन (इटालिया)) कहता हूं और फिर से चलाता हूं, तो जोहान के जवाब में दोनों स्ट्रिंग्स को लोको इटालियन (इटालिया) कहते हैं।

इसलिए मेरा मानना ​​है कि जोहान की मूल पोस्ट सही है और गलत होने के लिए gregm की टिप्पणी।



17

आप इसका उपयोग कर सकते हैं

boolean isLang = Locale.getDefault().getLanguage().equals("xx");

जब "xx" कोई भी भाषा कोड होता है जैसे "en", "fr", "sp", "ar" .... और इसी तरह


3
यदि (Locale.ENGLISH.equals (Locale.getDefault ()। getLanguage ())) {...}
क्लेमेंट मार्टिनो

1
@ClementMartino आपका सुझाव इंग्लैंड जैसे पूर्व-परिभाषित लोकल के मामले में ठीक है, लेकिन अरबी जैसे अन्य स्थानों के लिए, हमें इसे लैंग कोड का उपयोग करके पार्स करना होगा
साइमन के। गर्जेस

8

यदि 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


यह 2020 में एक स्वीकार्य उत्तर होना चाहिए!
एंड्री कोवलचुक

6

जोहान पेलग्रिम के जवाब में जोड़ने के लिए

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 ...
}

5

आप सिस्टम संसाधनों से स्थान प्राप्त करने का प्रयास कर सकते हैं:

PackageManager packageManager = context.getPackageManager();
Resources resources = packageManager.getResourcesForApplication("android");
String language = resources.getConfiguration().locale.getLanguage();

1
यदि आपने कॉन्फ़िगरेशन के किसी भी हिस्से को ओवरराइड किया है तो इसका जवाब है
तखियन

4

ऊपर दिए गए उत्तर सरल चीनी और पारंपरिक चीनी के बीच अंतर नहीं करते हैं। Locale.getDefault().toString()काम करता है जो "zh_CN", "zh_TW", "en_US" और आदि देता है

संदर्भ: https://developer.android.com/reference/java/util/Locale.html , ISO 639-1 OLD है।


4

इस समाधान ने मेरे लिए काम किया। यह आपको Android डिवाइस की भाषा लौटाएगा (ऐप की स्थानीय भाषा नहीं)

String locale = getApplicationContext().getResources().getConfiguration().locale.getLanguage();

इससे "en" या "de" या "fr" या आपकी डिवाइस भाषा जो भी सेट हो, वापस आ जाएगी।


3

कीबोर्ड कोड का पता लगाने के लिए आप इस कोड का उपयोग कर सकते हैं

InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
InputMethodSubtype ims = imm.getCurrentInputMethodSubtype();
String locale = ims.getLocale();

3

दो भाषाएं हैं।

OS की डिफ़ॉल्ट भाषा:

Locale.getDefault().getDisplayLanguage();

आवेदन की वर्तमान भाषा:

getResources().getConfiguration().locale.getDisplayLanguage();//return string

3
यह सच नहीं है, यदि आप अपने ऐप में लोकेल बदलते हैं, तो भी पहले आपको बदले हुए मूल्य और सिस्टम का मूल्य नहीं देते हैं
To Kra

3

यदि आप ऐसी भाषा चुनते हैं जो आप टाइप नहीं कर सकते हैं तो यह यूनानी मददगार हो सकती है।

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

3

यदि आप एक वर्तमान भाषा की जांच करना चाहते हैं, तो @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())
कूलमाइंड

1
if(Locale.getDefault().getDisplayName().equals("हिन्दी (भारत)")){
    // your code here
}

2
कृपया इस बारे में कुछ विवरण जोड़ें कि यह प्रश्न का उत्तर क्यों देता है - बस कोड स्निपेट पाठकों को समाधान को समझने में मदद नहीं करेगा
वांड मेकर

Locale.getDefault ()। GetDisplayName () आपके डिवाइस की वर्तमान भाषा देता है। और हम जांच रहे हैं कि डिवाइस भाषा हिंदी है या नहीं .. यदि वर्तमान डिवाइस भाषा हिंदी है, तो आप ब्लॉक में क्या चाहते हैं।
प्रतिभा सरोद

1

आपके डिवाइस की भाषा प्राप्त करने का सही तरीका निम्नलिखित है:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
    return context.getResources().getConfiguration().getLocales().get(0);
} else {
    return context.getResources().getConfiguration().locale;
}

आशा है ये मदद करेगा।


1
Locale.getDefault().getDisplayLanguage()

आपको Writtenभाषा के लिए नाम देगा , उदाहरण के लिए,English, Dutch, French

Locale.getDefault().getLanguage()

language codeउदाहरण के लिए, आपको देंगे :en, nl, fr

दोनों विधियाँ स्ट्रिंग लौटाती हैं


1
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()));

1

अन्य लोगों ने डिवाइस भाषा के लिए अच्छे उत्तर दिए हैं,

यदि आप चाहते हैं कि ऐप की भाषा सबसे आसान तरीका है, तो यह app_langआपकी strings.xmlफ़ाइल में एक कुंजी जोड़कर है , और प्रत्येक लैंग के लिए लैंग को भी निर्दिष्ट करें।

इस तरह, यदि आपकी ऐप की डिफ़ॉल्ट भाषा डिवाइस भाषा से अलग है, तो आप अपनी सेवाओं के लिए उस पैरामीटर के रूप में भेज सकते हैं।


मुझे विश्वास नहीं हो रहा है कि जिस भाषा का उपयोग आप वर्तमान में कर रहे हैं, उसे देने के लिए कोई फ्रेमवर्क सपोर्ट नहीं है। वास्तव में, Resources.java में स्ट्रिंग प्रारूप हेल्पर्स डिफ़ॉल्ट लोकेल का उपयोग करते हैं [0] इसलिए यदि एसेटमैनगर से स्ट्रिंग एक लोकेल से आती है जो डिवाइस के डिफ़ॉल्ट लोकेल से मेल नहीं खाती है (क्योंकि आपका ऐप इसका समर्थन नहीं करता है, लेकिन अगले जैसे: सूची में) फिर एक बग है।
dcow

1
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";
}

यह बेहतर होगा कि आप कोड को पेस्ट करने के बजाय उत्तर में अधिक निर्देश जोड़ सकते हैं।
कैलोस

0

मेरा समाधान इस तरह है

@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());
            }

दिखाया ---> एन


0

यहाँ डिवाइस देश प्राप्त करने के लिए कोड है। 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;
}

-3

यदि आप भारत में निवास करने वाले उपयोगकर्ताओं के लिए विशिष्ट कार्य करना चाहते हैं जो हिंदी बोलते हैं तो नीचे दी गई शर्त का उपयोग करें

if(Locale.getDefault().getDisplayName().equals("हिन्दी (भारत)")){
 //Block executed only for the users resides in India who speaks Hindi 
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.