it-swarm.com.de

Holen Sie sich die aktuelle Sprache im Gerät

Wie kann die aktuelle Sprache auf dem Android-Gerät ausgewählt werden?

529
Pinki

Wenn Sie die ausgewählte Sprache Ihres Geräts erhalten möchten, kann dies Ihnen helfen:

Locale.getDefault().getDisplayLanguage();
764
DeRagan

Ich habe die Locale-Methoden auf meinem Android 4.1.2-Gerät überprüft und die Ergebnisse:

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
687
trante

Was für mich funktioniert hat war:

Resources.getSystem().getConfiguration().locale;

Resource.getSystem () gibt ein globales freigegebenes Resources-Objekt zurück, das nur Zugriff auf Systemressourcen (keine Anwendungsressourcen) bietet und für den aktuellen Bildschirm nicht konfiguriert ist (Dimensionseinheiten können nicht verwendet werden, ändert sich nicht aufgrund der Ausrichtung usw.).

Da getConfiguration.locale inzwischen veraltet ist, wird die primäre Ländereinstellung in Android Nougat bevorzugt:

Resources.getSystem().getConfiguration().getLocales().get(0);

Um die Kompatibilität mit den vorherigen Android-Versionen zu gewährleisten, wäre eine mögliche Lösung eine einfache Überprüfung:

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

Update

Beginnen Sie mit der Unterstützungsbibliothek 26.1.0 , müssen Sie die Android-Version nicht überprüfen, da sie eine komfortable Methode für abwärtskompatible getLocales() bietet.

Rufen Sie einfach an: 

ConfigurationCompat.getLocales(Resources.getSystem().getConfiguration());
75
Sarpe

Sie können die Sprache aus dem aktuellen Gebietsschema extrahieren. Sie können das Gebietsschema über die Standard-Java-API oder über den Android-Kontext extrahieren. Zum Beispiel sind die beiden folgenden Zeilen gleichwertig:

String locale = context.getResources().getConfiguration().locale.getDisplayName();
String locale = Java.util.Locale.getDefault().getDisplayName();
43
Johan Pelgrim

Um anderen Zeit und/oder Verwirrung zu ersparen, wollte ich mitteilen, dass ich die beiden oben von Johan Pelgrim vorgeschlagenen Alternativen ausprobiert habe. Auf meinem Gerät sind sie gleichwertig - unabhängig davon, ob der Standardspeicherort geändert wurde. 

Daher ist die Standardeinstellung meines Geräts Englisch (United Kindom) und in diesem Zustand liefern beide Strings in Johans Antwort dasselbe Ergebnis. Wenn ich dann das Gebietsschema in den Telefoneinstellungen ändere (sprich zu italiano (Italia)) und erneut ausführen, dann geben beide Strings in Johans Antwort das Gebietsschema als italiano (Italia) an.

Daher glaube ich, dass Johans ursprünglicher Beitrag korrekt war und der Kommentar von gregm falsch war.

34
airewyre

Wie in Locale-Referenz beschrieben der beste Weg, um Sprache zu bekommen, ist:

Locale.getDefault().getLanguage()

diese Methode gibt einen String mit der Sprach-ID gemäß ISO 639-1 standart zurück.

16
Opsenas

Sie können dies verwenden

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

wenn "xx" ein beliebiger Sprachcode ist, wie "en", "fr", "sp", "ar" .... und so weiter

13
Simon K. Gerges

Hinzufügen zu Johan Pelgrims Antwort

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

sind gleichwertig, da die Klasse Android.text.format.DateFormat beide austauschbar verwendet, z.

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

und

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

Sie können versuchen, ein Gebietsschema von Systemressourcen abzurufen:

PackageManager packageManager = context.getPackageManager();
Resources resources = packageManager.getResourcesForApplication("Android");
String language = resources.getConfiguration().locale.getLanguage();
5
stefan.nsk

Die obigen Antworten unterscheiden nicht zwischen einfachem Chinesisch und traditionellem Chinesisch. Locale.getDefault().toString() funktioniert und gibt "zh_CN", "zh_TW", "en_US" usw. zurück.

Verweise auf: https://developer.Android.com/reference/Java/util/Locale.html , ISO 639-1 ist OLD.

4
rensq

Es gibt zwei Sprachen.

Standardsprache des Betriebssystems:

Locale.getDefault().getDisplayLanguage();

Aktuelle Sprache der Bewerbung: 

getResources().getConfiguration().locale.getDisplayLanguage();//return string
4
ayed abboushi

wenn der API-Level 24 oder höher ist, verwenden Sie LocaleList.getDefault().get(0).getLanguage() Ansonsten verwenden Sie 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();
    }
}

referenz: https://developer.Android.com/guide/topics/resources/multilingual -support

3
clybe

Mit diesem Code können Sie den aktuellen Tastaturstatus ermitteln 

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

Wenn Sie eine Sprache auswählen, die Sie nicht eingeben können, kann dieses Griechisch hilfreich sein.

getDisplayLanguage().toString() = English
getLanguage().toString() = en 
getISO3Language().toString() = eng
getDisplayLanguage()) = English
getLanguage() = en
getISO3Language() = eng

Versuchen Sie es jetzt mit Griechisch

getDisplayLanguage().toString() = Ελληνικά
getLanguage().toString() = el
getISO3Language().toString() = ell
getDisplayLanguage()) = Ελληνικά
getLanguage() = el
getISO3Language() = ell
2
user462990

Der korrekte Weg, um die Sprache Ihres Geräts zu erhalten, ist die folgende:

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

Ich hoffe es hilft.

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

gibt Ihnen Written Name für die Sprache, zum Beispiel English, Dutch, French

Locale.getDefault().getLanguage()

erhalten Sie language code, zum Beispiel: en, nl, fr

Beide Methoden geben String zurück

Die anderen haben gute Antworten für die Gerätesprache gegeben,

wenn Sie möchten, dass die App am einfachsten funktioniert, fügen Sie Ihrer app_lang-Datei einen strings.xml-Schlüssel hinzu, und geben Sie an, welche Sprache verwendet werden soll die Sprache für jeden der langs als auch.

Wenn sich die Standardsprache Ihrer App von der Gerätesprache unterscheidet, können Sie diese als Parameter für Ihre Dienste senden.

1
htafoya
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()));
0
S.R

Meine Lösung ist so 

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

und dann

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

gezeigt ---> en

0
biyoalp

Wenn Sie eine aktuelle Sprache überprüfen möchten, verwenden Sie die Antwort von @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())
0
CoolMind

Diese Lösung hat für mich funktioniert. Dadurch wird die Sprache des Android-Geräts (nicht die Landessprache der App) angezeigt.

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

Dadurch wird "en" oder "de" oder "fr" oder die Sprache Ihres Geräts angezeigt.

0
Arjun

hier ist der Code, um das Land des Geräts zu erhalten. Kompatibel mit allen Versionen von Android, auch oreo.

Lösung: Wenn der Benutzer keine SIM-Karte als Land hat, wird er während der Telefoneinrichtung oder der aktuellen Sprachauswahl verwendet. 

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