Я хочу сделать небольшое приложение, которое одним или двумя щелчками будет переключать системный язык между двумя, тремя или более предпочтительными языками, выбранными заранее из «официального» списка языков, то есть того, который отображается в Быстрых настройках> Настройки > Язык и ввод > Язык.
Как получить этот список программно? Это список локалей, доступный из 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);
values
в своем проекте Android, в котором будет храниться переведенный текст для языков, которые вы хотите поддерживать. Получение языков изLocale.getAvailableLocales()
вызовет ошибки, если определенный язык не переведен или отсутствует в вашем приложении для Android. Поэтому, пожалуйста, отредактируйте свой пост и укажите, что именно вы хотите. - person ChuongPham   schedule 24.12.2014Locale.getAvailableLocales()
, но я не знаю, что вы хотите сделать с точки зрения пользователя/бизнеса. В любом случае, я привел пример в своем ответе ниже. Надеюсь, это поможет объяснить ваши фактические пользовательские/бизнес-требования. - person ChuongPham   schedule 24.12.2014