Как проверить язык устройства в Android?

Я хочу, чтобы мое приложение проверял, на каком языке телефон работает. Это утверждение if должно сделать это:

if (Locale.getDefault().getLanguage().equals("en")) { yourYesResponse = "That is great " + usersName + "!"; } else if (Locale.getDefault().getLanguage().equals("fr")) { yourYesResponse = "C\'est bon " + usersName + "!"; } 

Но даже если мое устройство установлено на французский, оно по-прежнему отображает английский. Что-то не так с этим утверждением if, и если да, то что?

EDIT: Спасибо за помощь. Я ценю это.

Это можно решить, объявив строковый файл ресурсов для каждого языка.

Создайте папки ресурсов с именем values-fr и values-en и добавьте файл с именем strings.xml в обе папки.

Файл string.xml в значениях-en:

 <resources> <string name="good">That is great </string> </resources> 

И вы загружаете ресурс следующим образом:

 yourYesResponse = getResources().getText(R.string.good) + usersName + "!"; 

Ник был быстрее …

Для системного языка:

 Locale.getDefault().getDisplayLanguage(); 

Использование:

  Locale.getDefault().getLanguage().contentEquals("en") 

String#equals() не только сравнивает содержимое String, но также проверяет, является ли другой объект также экземпляром String . Методы String#contentEquals() сравнивают только содержимое (последовательность символов) и не проверяют, является ли другой объект также экземпляром String . Это может быть что угодно, если это реализация CharSequence или экземпляр StringBuffer .

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

 Locale.getDefault().getDisplayLanguage(); 

или,

 Locale.getDefault().getLanguage(); //to get usual language code 

Обычно языковой стандарт предоставляется в виде следящего формата fr_FR, где первый fr – это код языка, а второй – код страны, поэтому вы должны использовать

 Locale.getDefault().getLanguage().startsWith("fr") 

Но Android способ использовать ресурсы

 getString(R.string.hello, userName); 

Отредактировано: Хорошо, стыдно за меня, я не заметил, что вы вызываете getLanguage (), но вторая часть верна.

Поскольку все уже объясняют, что i18N (String XMLs на разных языках) должны использоваться для достижения этой простой вещи, но если вы ищете язык пользователя для каких-то других целей, то используйте один из них.

 Locale.getDefault().getLanguage(); 

Это даст языковой код iso, то есть «de», «ru».

ИЛИ

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

Это возвращает глобальный общий ресурс, который предоставляет доступ только к системным ресурсам.

Способ Android для этого – использование ресурсов xml, как описано в разделе Локализация с помощью ресурсов .

Values ​​/ strings.xml :

 <resources> <string name="yes_response">That is great, %s!</string> </resources> 

Values-fr / strings.xml :

 <resources> <string name="yes_response">C\'est bon, %s!</string> </resources> 

Код:

 yourYesResponse = context.getString(R.string.yes_response, usersName); 

Мотивация:

Рекомендуется использовать инфраструктуру ресурсов Android для максимально возможного разделения локализованных аспектов вашего приложения с основными функциями Java:

  • Вы можете поместить большинство или все содержимое пользовательского интерфейса вашего приложения в файлы ресурсов, как описано в этом документе, и в разделе «Предоставление ресурсов».
  • С другой стороны, поведение пользовательского интерфейса зависит от вашего Java-кода. Например, если пользователи вводят данные, которые необходимо отформатировать или отсортировать по-разному в зависимости от языкового стандарта, то вы будете использовать Java для обработки данных программно. В этом документе не описывается, как локализовать ваш Java-код.

Посмотри на это, получишь.

https://gist.github.com/XinyueZ/2a33474b4f034325777b