Я хотел бы изменить язык (локаль приложения) программно.
Основная проблема для меня обновляет маркировки меню.
Я попробовал следующий метод:
@Override
public boolean onMenuOpened(int featureId, Menu menu) {
if (shouldChangeMenuLabels) {
for (int i = 0; i < menu.size(); i++) {
MenuItem menuItem = menu.getItem(i);
switch (menuItem.getItemId()) {
case R.id.menu_main_about:
menuItem.setTitle(R.string.menu_about);
break;
case R.id.menu_main_preferences:
menuItem.setTitle(R.string.menu_prefs);
break;
}
}
shouldChangeMenuLabels = false;
}
Но я уверен это плохо идея. Я хочу избегать использования оператора case оператора switch, поскольку это не универсальный метод (я не могу просто портировать отрезанный на другие операции / я не могу сделать абстрактный класс, который сделал бы это).
BTW, все меню были описаны в файлы menu/*.xml, таким образом, я не хочу копировать код. У кого-либо есть идеи?
Затронутый для первого ответа: Я hae изменил локаль со следующим кодом:
Locale locale = new Locale((String)newValue);
Locale.setDefault(locale);
Configuration config = new Configuration();
config.locale = locale;
getApplication().getResources().updateConfiguration(config, getApplication().getResources().getDisplayMetrics());
Но поскольку я хочу управлять вращением для каждого действия, они никогда не заканчиваются. Возможно, я сделал что-то не так?