Android и локализация меню - PullRequest
       0

Android и локализация меню

5 голосов
/ 03 августа 2010

Я хотел бы изменить язык (язык приложения) программно.

Основная проблема для меня - это обновление меток меню.

Я попробовал следующий метод:

 @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;
    }

Но я уверен, что это плохая идея.Я хочу избежать использования оператора switch-case, так как это не универсальный метод (я не могу просто перенести отсканированный код на другие действия / я не могу создать абстрактный класс, который бы это делал).


Кстати, все меню описаны в файлах menu / *. Xml, поэтому я не хочу дублировать код.У кого-нибудь есть идеи?

Относительно первого ответа: я изменил локаль с помощью следующего кода:

            Locale locale = new Locale((String)newValue);
            Locale.setDefault(locale);
            Configuration config = new Configuration();
            config.locale = locale;
            getApplication().getResources().updateConfiguration(config, getApplication().getResources().getDisplayMetrics());

Но так как я хочу контролировать вращение для каждого действия, они никогда не заканчиваются.Может я что-то не так сделал?

Ответы [ 3 ]

5 голосов
/ 03 августа 2010

Не знаю, хорошая ли это идея, но я нашел следующий способ:

 @Override
public boolean onMenuOpened(int featureId, Menu menu) {
    if (shouldChangeLocale) {
        menu.clear();
        MenuInflater inflater = getMenuInflater(); // -->onCreateMenu (Menu) 
        inflater.inflate(R.menu.menu_main, menu);  // /
        shouldChangeLocale=false;
    }

    return super.onMenuOpened(featureId, menu);
}

Мне нужен твой совет, я должен сделать это таким образом?

0 голосов
/ 03 августа 2010

menu.add (0, MENU_ABOUT, 0, _mContext.getResources (). GetString (R.string.mymenu)). SetIcon (R.drawable.ic_menu);

При создании меню вставьте строку и локализуйте ее.

0 голосов
/ 03 августа 2010

Прочитали ли вы документацию по Локализация Android ? Обычно вы создаете разные строковые файлы для каждого языка / локали, которые вы хотите поддерживать. В вашем файле menu.xml вы можете ссылаться на идентификаторы строки, и правильное значение будет выбрано на основе текущих настроек локали.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...