2016-08-02 4 views
0

Mon application prend en charge 3 langues (anglais, français et arabe). J'ai déjà traduit toutes les ressources (valeurs chaîne et fichiers drawables) et fonctionne parfaitement en fonction de la langue définie dans l'appareil utilisateur. L'application consiste principalement en deux activités: activité principale et activité de jeu. mainActivity contient un bouton (Play) qui conduit à GameActivity en fonction de la langue de l'appareil. Par exemple si la langue est l'anglais il lancera Jeu Activité, si la langue est le français, il lancera GameFr Activité, et si la langue est arabe, il lancera GameAr Activité.Android - Modification de la langue locale dans l'application elle-même

Play.setOnClickListener(new View.OnClickListener() { 

@Override 
public void onClick(View v) { 
    // TODO Auto-generated method stub 
    if (Locale.getDefault().getLanguage().equals("ar")){ 
     Intent intgame=new Intent(MainActivity.this,GameAr.class); 
     startActivity(intgame); 
    } 

    else { 
     if (Locale.getDefault().getLanguage().equals("fr")){ 
      Intent intgame=new Intent(MainActivity.this,GameFr.class); 
      startActivity(intgame); 
     } 

     else { 
      Intent intgame=new Intent(MainActivity.this,Game.class); 
      startActivity(intgame); 
      } 
     } 
    } 
}); 

Cependant, je voudrais ajouter 3 ImageView (drapeaux) dans le MainActivity par lequel les utilisateurs peuvent changer la langue de l'application, pour cela, j'ajouté ce qui suit:

en = (ImageView) findViewById(R.id.en); 
fr = (ImageView) findViewById(R.id.fr); 
ar = (ImageView) findViewById(R.id.ar); 

en.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
    setLocale("en"); 
    Intent uo = new Intent(MainActivity.this,Game.class); 
    startActivity(uo); 
    } 
}); 

fr.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
    setLocale("fr"); 
    Intent uo = new Intent(MainActivity.this,GameFr.class); 
    startActivity(uo); 
    } 
}); 

ar.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
    setLocale("ar"); 
    Intent uo = new Intent(MainActivity.this,GameAr.class); 
    startActivity(uo); 
    } 
}); 

Néanmoins, lorsque un utilisateur avec un appareil dont la langue est définie en anglais clique sur le drapeau français, il obtiendra avec succès l'activité française. Cependant, s'il revient à la page précédente et clique sur le bouton (Lecture), la page affichée est celle correspondant à l'activité en anglais mais avec les ressources (valeurs de chaînes et Drawables) en français.

En effet, la fonction suivante:

if (Locale.getDefault().getLanguage().equals("ar")) 

teste toujours la langue de l'appareil, pas la langue que l'utilisateur a choisi dans l'application.

Y at-il une fonction qui peut me donner la langue choisie par la fonction SetLocale? ou je devrais utiliser un transfert variable entre les activités?

comment puis-je résoudre ce problème, avez-vous de meilleures suggestions?

Répondre

0

utilisent ce

Locale.setDefault("Your Locale"); 
+0

Où? dans la déclaration if? Si vous remarquez que j'ai mis un test sur le bouton (Lecture) pour obtenir la bonne activité en fonction de la langue. Donc, si c'est possible, je dois remplacer "si (Locale.getDefault(). GetLanguage(). Equals (" fr "))" par une autre fonction qui obtient la langue définie par l'utilisateur (voir la fonction SetLocale) et non l'appareil default langugage –

+0

A l'intérieur de votre méthode setLocale(). –

+0

Vérifiez la classe Locale.java pour les paramètres régionaux existants. –