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

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

Solutions Collecting From Web of "Получить текущий язык на устройстве"

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

Locale.getDefault().getDisplayLanguage(); 

Я проверил методы 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 

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

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

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

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

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

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

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

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

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

 Locale.getDefault().getLanguage() 

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

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

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

Когда «xx» – это любой код языка, такой как «en», «fr», «sp», «ar» …. и так далее

Чтобы добавить к ответу Йохана Пелгрима

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

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

 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 – OLD.

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

 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(Locale.getDefault().getDisplayName().equals("हिन्दी (भारत)")){ // your code here } 

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

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

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