Je veux que mon application supporte trois langues : espagnol, portugais et anglais. Et donner l'option de sélectionner la langue dans l'application.
1) 3 dossiers dessinables : dessinable-es, dessinable-pt, dessinable.
2) 3 dossiers de valeurs values-es,values-pt,values.Changez les valeurs de String.xml selon les langues.
J'ai une imageView qui permet de sélectionner la langue. Lorsque l'on clique dessus, un menu s'ouvre qui comprend les options anglais, espagnol et portugais.
J'ai défini le Locale à l'intérieur de l'application sur la sélection de l'option par ce code
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.en:
Locale locale = new Locale("en");
Locale.setDefault(locale);
Configuration config = new Configuration();
config.locale = locale;
getBaseContext().getResources().updateConfiguration(config, getBaseContext().getResources().getDisplayMetrics());
Toast.makeText(this, "Locale in English !", Toast.LENGTH_LONG).show();
break;
case R.id.pt:
Locale locale2 = new Locale("pt");
Locale.setDefault(locale2);
Configuration config2 = new Configuration();
config2.locale = locale2;
getBaseContext().getResources().updateConfiguration(config2, getBaseContext().getResources().getDisplayMetrics());
Toast.makeText(this, "Locale in Portugal !", Toast.LENGTH_LONG).show();
break;
case R.id.es:
Locale locale3 = new Locale("es");
Locale.setDefault(locale3);
Configuration config3 = new Configuration();
config3.locale = locale3;
getBaseContext().getResources().updateConfiguration(config3, getBaseContext().getResources().getDisplayMetrics());
Toast.makeText(this, "Locale in Spain !", Toast.LENGTH_LONG).show();
break;
}
return super.onOptionsItemSelected(item);
}
J'ai déclaré à Manifest- Android:configChanges="locale"
Il fonctionne mais il y a quelques problèmes.
Problème :-
1) Lorsque la langue est sélectionnée, l'écran qui contient l'image de la sélection de la langue ne change pas mais les autres écrans changent.
2) Après le changement d'orientation, l'application rétablit la langue en fonction de la localisation du téléphone.