Quiero que mi aplicación admita tres idiomas: español, portugués e inglés. Y dar la opción de seleccionar el idioma en la aplicación.
1) 3 carpetas dibujables drawable-es, drawable-pt, drawable.
2) Carpeta de 3 valores valores-es, valores-pt, valores. Cambiar los valores String.xml según los idiomas.
Tengo imageView para seleccionar el idioma. Al hacer clic en él, se abre el menú que consta de la opción Inglés, español, portugués.
Configuré Locale dentro de la aplicación en la selección de opciones con este código
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);
}
He declarado en Manifest- android: configChanges = "locale"
Funciona pero tiene algún problema.
Problema:-
1) Cuando se selecciona el idioma, la pantalla que consta de la imagen de la selección del idioma no cambia, pero sí cambian otras pantallas.
2) Después de cambiar la orientación, la aplicación restaura el idioma de acuerdo con la configuración regional del teléfono.
android:configChanges="locale"
para su actividad dentro de AndroidManifest.xml