3 votes

Comment changer de langue à l'aide d'un bouton ?

J'essaie de changer la langue en appuyant sur un bouton dans la barre de menu, mais je veux qu'il passe de la langue norvégienne à la langue anglaise. Ainsi, si la locale.toString() est "no", je passe à "en" et vice versa.

Mon problème est que je n'arrive à le faire basculer qu'une fois et à ne pas revenir en arrière si j'appuie sur le bouton.

C'est la méthode utilisée :

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case R.id.Language:
            TextView textview = (TextView) findViewById(R.id.resultat);
            locale = getResources().getConfiguration().locale;
             switch(locale.toString()){
                case LOCALE_NORWEGIAN:
                    textview.append("EN ACTIVATION");
                    locale = new Locale("en");
                    break;
                case LOCALE_ENGLISH:
                    textview.append("NOR ACTIVATION");
                    locale = new Locale("nor");
                    break;
                default:
                    textview.append("DEFAULT  "+locale.toString());

            }
            Resources res = this.getResources();
            DisplayMetrics dm = res.getDisplayMetrics();
            Configuration conf = res.getConfiguration();
            conf.setLocale(locale);
            res.updateConfiguration(conf,dm);
            startActivity(new Intent(this,Game.class));
            finish();
            return true;
        case R.id.Rules:

            return true;
        default:
            return super.onOptionsItemSelected(item);
    }

}

Voilà à quoi ça ressemble, je veux que la langue change quand j'appuie sur le bouton avec le drapeau dessus. Mais quand j'appuie plus d'une fois sur le bouton, la langue ne change pas. enter image description here

0voto

tar Points 668

Pour une activité entièrement commutable, voir ceci GitHub Gist . Voici un extrait :

Intent intent = getIntent();

if (locale == null) {
    Locale def = Locale.getDefault();
    Log.i(LOG_TAG + ".useLocale", "restarting the activity" +
                                  " in the default locale " + def);
    intent.putExtra(LOCALE_EXTRA, def);
} else {
    Log.i(LOG_TAG + ".useLocale", "restarting the activity in" +
                                  " the " + locale + " locale");
    intent.putExtra(LOCALE_EXTRA, locale);
}

restartingForLocaleChangeFlag = true;
overridePendingTransition(0, 0);
intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
finish();
overridePendingTransition(0, 0);
startActivity(intent);

0voto

Kim Vu Points 43

Il semble que la comparaison avec locale.toString() ne donne pas ce que je voulais, alors je suis passé à locale.getLanguage() qui m'a donné "en" et "no".

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X