Как перечислить / выбрать установленные языки на 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)