20 ответов:
Если вы хотите получить выбранный язык вашего устройства, это может помочь вам:
Locale.getDefault().getDisplayLanguage();
Я проверил методы локали на моем устройстве 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
то, что сработало для меня было:
Resources.getSystem().getConfiguration().locale;ресурсов.getSystem () возвращает глобальный объект общих ресурсов, который предоставляет доступ только к системным ресурсам (без ресурсов приложения) и не настроен для текущего экрана (не может использовать единицы измерения, не изменяется в зависимости от ориентации и т. д.).
, потому что
getConfiguration.localeна сегодняшний день уже устарела, наиболее предпочтительным способом получения первичной локали в Нуга Android-это: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());
вы можете "извлечь" язык из текущей локали. Вы можете извлечь локаль с помощью стандартного Java API или с помощью контекста Android. Например, две строки ниже эквивалентны:
String locale = context.getResources().getConfiguration().locale.getDisplayName(); String locale = java.util.Locale.getDefault().getDisplayName();
чтобы сэкономить время и/или путаницу, я хотел поделиться тем, что я попробовал две альтернативы, предложенные Йоханом Пелгримом выше, и на моем устройстве они эквивалентны - независимо от того, изменилось ли местоположение по умолчанию.
таким образом, настройка по умолчанию моего устройства-английский(United Kindom), и в этом состоянии, как и ожидалось, обе строки в ответе Йохана дают тот же результат. Если я затем изменю языковой стандарт в настройках телефона (скажем, italiano (Italia)) и повторно запустите обе строки в Johan's ответ дают локали как italiano (Италия).
поэтому я считаю, что оригинальный пост Йохан, является правильным и комментировать gregm, чтобы быть неправильным.
как описано в ссылка язык лучший способ получить язык:
Locale.getDefault().getLanguage()этот метод возвращает строку с идентификатором языка в соответствии с стандарт ISO 639-1
вы можете использовать этот
boolean isLang = Locale.getDefault().getLanguage().equals("xx");когда " xx "- это любой код языка, например" en"," fr"," sp"," ar".... и так далее
добавить Йохан Pelgrim это
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 ... }
вы можете попробовать получить locale из системных ресурсов:
PackageManager packageManager = context.getPackageManager(); Resources resources = packageManager.getResourcesForApplication("android"); String language = resources.getConfiguration().locale.getLanguage();
есть два языка.
язык по умолчанию ОС:
Locale.getDefault().getDisplayLanguage();текущий язык приложения:
getResources().getConfiguration().locale.getDisplayLanguage();//return string
вы можете использовать этот код, чтобы узнать текущую клавиатуру
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); InputMethodSubtype ims = imm.getCurrentInputMethodSubtype(); String locale = ims.getLocale();
ответы выше не различают простой китайский и традиционный китайский.
Locale.getDefault().toString()работает, который возвращает "zh_CN", "zh_TW", "en_US" и т. д.ссылки на : https://developer.android.com/reference/java/util/Locale.html, ISO 639-1 старый.
Если вы выбираете язык, который вы не можете ввести этот греческий может быть полезным.
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
правильный способ получения языка вашего устройства заключается в следующем:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { return context.getResources().getConfiguration().getLocales().get(0); } else { return context.getResources().getConfiguration().locale; }надеюсь, что это помогает.
Если уровень 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()[0].language } else { return Locale.getDefault().language } }Ссылка:https://developer.android.com/guide/topics/resources/multilingual-support
мое решение таково
@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()); }показано - - - > en
Locale.getDefault().getDisplayLanguage()даст вам
Writtenимя языка, например,English, Dutch, FrenchLocale.getDefault().getLanguage()даст вам
language code, например:en, nl, frоба метода возвращают строку
вот код, чтобы получить устройство страны. Совместим со всеми версиями android даже oreo.
решение: если у пользователя нет sim-карты, чем получить страну он используется во время настройки телефона , или выбор текущего языка.
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; }
Если вы хотите сделать конкретную задачу для пользователей проживает в Индии, кто говорит на хинди, то используйте ниже, если условие
if(Locale.getDefault().getDisplayName().equals("हिन्दी (भारत)")){ //Block executed only for the users resides in India who speaks Hindi }
Comments