Как перечислить / выбрать установленные языки на Android?

Я хочу сделать небольшое приложение, которое одним или двумя щелчками переключит язык системы между двумя, тремя или более предпочтительными языками, выбранными заранее из списка "официальных" языков, то есть того, который отображается в "Быстрых настройках"> Настройки> Язык и ввод> Язык.

Как мне получить этот список программно? Это список локалей, доступный из Locale.getAvailableLocales()? Должен ли я добраться до языков из локалей? Спасибо!

РЕДАКТИРОВАТЬ - Это то, что я сделал до сих пор:

  private List<Model> getModel() {
    Locale[] locales = Locale.getAvailableLocales();
    List<Model> list = new ArrayList<Model>();
    for (int i=0; i<locales.length; i++) {
        list.add(get(locales[i].getDisplayLanguage()));
    }
    return list;
  }

  private Model get(String s) {
    return new Model(s);
  }

Я ищу эти варианты сейчас:

Locale.getDefault().getLanguage()        ---> en     
Locale.getDefault().getISO3Language()    ---> eng
Locale.getDefault().getCountry()         ---> US
Locale.getDefault().getISO3Country()     ---> USA
Locale.getDefault().toString()           ---> en_US
Locale.getDefault().getDisplayLanguage() ---> English
Locale.getDefault().getDisplayCountry()  ---> United States
Locale.getDefault().getDisplayName()     ---> English (United States)

отсюда

РЕДАКТИРОВАТЬ 2 - еще 2 изображения, показывая конец списка языков, где находятся параметры для китайского языка.

Это список из системы.

Этот список был сделан с помощью следующего кода:

Locale[] locales = Locale.getAvailableLocales();
List<Model> list = new ArrayList<Model>();
for (int i=0; i<locales.length; i++) {
    list.add(get(locales[i].getDisplayLanguage()+"|"+
            locales[i].toString()+"|"+
            locales[i].getDisplayName()
            ));
}
return list;

Теперь должен быть способ попасть в первый список из второго списка, возможно, получить доступ к некоторым системным скрытым файлам?

РЕДАКТИРОВАТЬ 3 - я добавил следующий код, и он показывает китайские, португальские и испанские специальные символы (UTF-8) без проблем:

list.add(get("Português (Brasil)"));
list.add(get("English (US)"));
list.add(get("中国(简体)"));
list.add(get("Español (Venezuela)"));

Теперь, как мне получить отсюда фактическое изменение языка системы (без открытия намерения / действия, как показано ниже?

Intent intent = new Intent(Settings.ACTION_LOCALE_SETTINGS);
startActivity(intent);

2 ответа

Вот API, чтобы получить все доступные локали вашего устройства.

public static Locale[] getAvailableLocales ()

Для получения дополнительной информации, пожалуйста, проверьте эту общедоступную ссылку: http://developer.android.com/reference/java/util/Locale.html

Если вы планируете поддерживать все возможные комбинации языков, то Locale.getAvailableLocales() может работать на тебя.

Если нет, то вам нужно специально указать список языков в приложении Android. Например, если ваше приложение поддерживает каталанский, чешский, датский и немецкий языки (или многие варианты разговорного немецкого языка), вам лучше заполнить свой ListView со статическим списком строк:

public static final String[] LANGS = new String[] {"English (Australia)", "Català (Espanya)","Čeština (Česká Republika)","Dansk (Danmark)","Deutsch (Österreich)","Deutsch (Belgien)","Deutsch (Schweiz)","Deutsch (Deutschland)","Deutsch (Liechtenstein)","Deutsch (Luxemburg)"};

public static final String[] LANG_CODES = new String[] {"en_au", "ca_ES","cs_CZ","da_DK","de_AT","de_BE","de_CH","de_DE","de_LI","de_LU"};

И в вашем проекте Android у вас будет следующее values каталоги для поддержки вышеуказанных языков:

/res/values (English)
/res/values-ca (Catalan)
/res/values-cs (Czech)
/res/values-da (Danish)
/res/values-de (German)
Другие вопросы по тегам