2017-07-26 3 views
0

Mon but est de changer une langue d'application de l'anglais au chinois pendant l'exécution, y a-t-il des suggestions?Application Android multilingue pendant l'exécution?

language_spinner = (Spinner)findViewById(R.id.settings_language_spinner); 
language_spinner.setOnItemSelectedListener(new OnItemSelectedListener() { 

      public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) { 
       if (pos == 1){ 
        Toast.makeText(parent.getContext(),"You have selected English",Toast.LENGTH_SHORT).show(); 
        setLocale("en"); 

       }else if (pos == 2){ 
        Toast.makeText(parent.getContext(),"You have selected Chinese",Toast.LENGTH_SHORT).show(); 
        setLocale("zh"); 
       } 
      } 

      @Override 
      public void onNothingSelected(AdapterView<?> arg0) { 

      } 
     }); 


    } 

    public void setLocale(String lang) { 

     myLocale = new Locale(lang); 
     Resources res = getResources(); 
     DisplayMetrics dm = res.getDisplayMetrics(); 
     Configuration conf = res.getConfiguration(); 
     if (!conf.locale.getLanguage().equals(lang)) { 
      conf.locale = myLocale; 
      res.updateConfiguration(conf, dm); 
      Intent refresh = new Intent(this, SettingsActivity.class); 
      startActivity(refresh); 
      finish(); 
     } 
    } 

Ce code fonctionne correctement avec l'anglais mais ne fonctionne pas avec le chinois s'il vous plaît aidez-moi à trouver la solution ..

+1

Est-ce qu'il est même entré dans le cas où ** pos = 2 ** ?! Vous devriez vérifier les bons index: ** 0 et 1 ** –

Répondre

0

Je peux vous donner idée comment vous pouvez mettre en œuvre ceci:

étape 1: faire un fichier de chaîne pour tous les textes dans le répertoire de valeurs comme string-ch, ch est le code pour la langue chinoise. et dans le code obtenir chaque chaîne avec le getResources.getString(R.string.text_name); afin qu'il puisse prendre la valeur de chaîne à l'exécution soit anglais ou chinois.

étape 2: maintenant créer méthode:

void changeLanguage(String language) { 
     Locale locale = new Locale(language); 
     Locale.setDefault(locale); 
     Configuration config = new Configuration(); 
     config.locale = locale; 
     getBaseContext().getResources().updateConfiguration(config, 
       getBaseContext().getResources().getDisplayMetrics()); 
    } 

étape 3: appeler cette méthode où vous voulez changer la langue suppose que si vous voulez obtenir la langue modifiée de votre application selon la langue de l'appareil, puis vous pouvez appeler en tant que:

changeLanguage(Locale.getDefault().getLanguage()); 
+0

Rappelez-vous le code de chinois est "ch" pas "zh" –

+0

Merci beaucoup .J'ai essayé de cette façon son ne fonctionne pas.Ce projet a des activités multiples .. –

+0

s'il vous plaît suggérer une autre méthode. C'était un projet un peu urgent. J'apprécie vraiment que vous ayez répondu. –