Как мы можем выбрать текущий язык на 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
}