Я хочу создать небольшое приложение, которое с одним или двумя щелчками переключит язык системы между двумя, тремя или более предпочтительными языками, выбранными заранее из «официального» списка языков, то есть тем, который появляется в Quick настройки> Настройки> Язык & ввод> Язык.Как перечислить/выбрать установленные языки на Android?
Как я могу получить этот список программно? Это список локалей, доступный из Locale.getAvailableLocales()? Должен ли я перейти на языки из локалей? Спасибо!
EDIT - Это то, что я сделал до сих пор:
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)
из here.
EDIT 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;
Теперь должен быть путь, чтобы добраться до первого списка из второго списка, возможно, получить доступ к некоторым системным скрытые файлы?
EDIT 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);
Что вы пытаетесь сделать? Планируете ли вы изменить язык в своем приложении? – ChuongPham
Да. Я хотел бы уменьшить количество необходимых кликов. – Rodrigo
Клики не будут проблемой. Проблема, однако, в том, какие языки поддерживаются вашим приложением. Помните, что если у вас есть список языков, из которых пользователь может выбрать, вы также должны создать необходимый каталог 'values' в своем проекте Android, который содержит переведенный текст для языков, которые вы хотите поддерживать. Получение языков из 'Locale.getAvailableLocales()' приведет к ошибкам, если конкретный язык не был переведен или отсутствует в приложении для Android. Итак, отредактируйте свой пост и опишите, что вы хотите точно. – ChuongPham