resource - strings xml android studio




Ottieni la lingua corrente nel dispositivo (14)

Come possiamo ottenere la lingua corrente selezionata nel dispositivo Android?


Aggiungere alla risposta di Johan Pelgrim

context.getResources().getConfiguration().locale
Locale.getDefault()

sono equivalenti perché la classe android.text.format.DateFormat utilizza entrambi in modo intercambiabile, ad es

private static String zeroPad(int inValue, int inMinDigits) {
    return String.format(Locale.getDefault(), "%0" + inMinDigits + "d", inValue);
}

e

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

Ci sono due lingue.

Lingua predefinita del sistema operativo:

Locale.getDefault().getDisplayLanguage();

Lingua corrente di applicazione:

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

Come descritto in Impostazioni locali, il modo migliore per ottenere la lingua è:

Locale.getDefault().getLanguage()

questo metodo restituisce una stringa con ID lingua secondo ISO 639-1 standard


Ho controllato i metodi locali sul mio dispositivo Android 4.1.2 e i risultati:

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

La mia soluzione è così

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

e poi

 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
                Log.e("Locale", getCurrentLocale().getLanguage());
            } else {
                Log.e("Locale", getCurrentLocale2().toString());
            }

mostrato ---> en



Puoi 'estrarre' la lingua dalla locale corrente. È possibile estrarre le impostazioni internazionali tramite l'API Java standard o utilizzando il contesto Android. Ad esempio, le due righe seguenti sono equivalenti:

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

Puoi provare ad ottenere le impostazioni locali dalle risorse di sistema:

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

Puoi usare questo codice per scoprire la corrente della tastiera

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

Se desideri ottenere la lingua selezionata del tuo dispositivo, questo potrebbe aiutarti a:

Locale.getDefault().getDisplayLanguage();

Se si desidera eseguire attività specifiche per gli utenti residenti in India che parlano l'hindi, utilizzare di seguito le condizioni

if(Locale.getDefault().getDisplayName().equals("हिन्दी (भारत)")){
 //Block executed only for the users resides in India who speaks Hindi 
}

ecco il codice per ottenere il Paese del dispositivo. Compatibile con tutte le versioni di Android anche oreo.

Soluzione: se l'utente non ha la scheda SIM di quella del Paese, viene utilizzata durante la configurazione del telefono o la selezione della lingua corrente.

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

Locale.getDefault().getDisplayLanguage()

ti darà il nome Written per la lingua, ad esempio English, Dutch, French

Locale.getDefault().getLanguage()

ti fornirà il language code , ad esempio: en, nl, fr

Entrambi i metodi restituiscono String


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






localization