Получить текущий язык в устройстве

Как мы можем выбрать текущий язык на Android-устройстве?

Ответ 1

Если вы хотите получить выбранный язык своего устройства, это может помочь вам:

Locale.getDefault().getDisplayLanguage();

Ответ 2

Я проверил методы Locale на своем устройстве 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

Ответ 3

Что сработало для меня:

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

Resource.getSystem() возвращает глобальный объект общих ресурсов, который обеспечивает доступ только к системным ресурсам (без ресурсов приложения) и не настроен для текущего экрана (не может использовать единицы измерения, не изменяется в зависимости от ориентации и т.д.).

Поскольку getConfiguration.locale теперь устарела, предпочтительный способ получить основной языковой стандарт в Android Nougat:

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

Ответ 4

Вы можете "извлечь" язык из текущей локали. Вы можете извлечь локаль через стандартный Java API или с помощью Android Context. Например, две приведенные ниже строки эквивалентны:

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

Ответ 5

Чтобы сэкономить время и/или путаницу, я хотел поделиться тем, что я попробовал две альтернативы, предложенные Йоханом Пелгримом выше, и на моем устройстве они эквивалентны - изменилось ли местоположение по умолчанию.

Таким образом, мой настройкой по умолчанию для устройства является английский (United Kindom), и в этом состоянии, как и ожидалось, оба параметра Strings in Johan дают тот же результат. Если я затем изменю языковой стандарт в настройках телефона (скажем, italiano (Italia)) и снова запустим, то обе строки в ответ Йохана дадут языковой стандарт как итальянка (Italia).

Поэтому я считаю, что исходное сообщение Johan должно быть правильным, а комментарий gregm неверным.

Ответ 6

Как описано в Ссылка на локаль, лучший способ получить язык:

Locale.getDefault().getLanguage()

этот метод возвращает строку с идентификатором языка в соответствии с стандартом ISO 639-1

Ответ 7

Вы можете использовать этот

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

когда "xx" - это любой код языка, такой как "en", "fr", "sp", "ar".... и т.д.

Ответ 8

Добавить в ответ Йохана Пелгрима

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

Ответ 9

Вы можете попытаться получить локаль из системных ресурсов:

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

Ответ 10

Существует два языка.

Язык по умолчанию ОС:

Locale.getDefault().getDisplayLanguage();

Текущий язык приложения:

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

Ответ 11

Вы можете использовать этот код, чтобы узнать текущий ток клавиатуры

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

Ответ 12

Ответы выше не различают простой китайский и традиционный китайский. Locale.getDefault().toString() работает, который возвращает "zh_CN", "zh_TW", "en_US" и т.д.

Ссылки на: https://developer.android.com/reference/java/util/Locale.html, ISO 639-1 - OLD.

Ответ 13

если уровень 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

Ответ 14

Если вы выберете язык, который вы не можете ввести, этот греческий может быть полезным.

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

Ответ 15

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

Ответ 16

Правильный способ получения языка вашего устройства:

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

Надеюсь, что это поможет.

Ответ 17

Locale.getDefault().getDisplayLanguage()

даст вам Written название для языка, например, English, Dutch, French

Locale.getDefault().getLanguage()

даст вам language code, например: en, nl, fr

Оба метода возвращают строку

Ответ 18

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

Ответ 19

Это решение сработало для меня. Это вернет вам язык устройства Android (не локальный язык приложения)

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

Это вернет "en" или "de" или "fr" или любой другой язык вашего устройства.

Ответ 20

Мое решение похоже на это

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

показано --- > ru

Ответ 21

Вот код для получения страны устройства. Совместим со всеми версиями 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;
}

Ответ 22

Если вы хотите проверить текущий язык, используйте ответ @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())

Ответ 23

Другие дали хорошие ответы на язык устройства,

если вы хотите приложение языке самый простой способ сделать это путем добавления app_lang ключ к вашему strings.xml файл и указать Ланг для каждого из LANGS, а также.

Таким образом, если язык вашего приложения по умолчанию отличается от языка устройства, вы можете отправить его в качестве параметра для ваших служб.

Ответ 24

Если вы хотите выполнить определенное задание для пользователей, проживающих в Индии, которые говорят на хинди, используйте нижеприведенное условие

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