Forzar una configuración regional diferente solo funciona para la actividad superior en la pila de herramientas
Tengo un problema menor sobre la localización de la aplicación:
Este es el caso: les he dado a mis usuarios la opción desiempre Utilice la aplicación en noruego, independientemente del idioma del sistema.
Funciona bien en su mayor parte (voy a la configuración, marque la casilla para forzar a noruego, presiona "atrás" y la actividad anterior se muestra en noruego - lo mismo "al revés"), sin embargo, el cambio de idioma es solo parece actualizar correctamente (recargar recursos) para la primera actividad en mi "back stack".
Para ilustrar un escenario típico:
El usuario inicia la aplicación y se presenta con la actividad principal (en inglés). A partir de ahí, selecciona la segunda actividad (también en inglés). Luego entra en la configuración (del menú en la segunda actividad) y establece la preferencia para forzar a noruego.
Cuando luego regresa, la segunda actividad se actualiza correctamente y se muestra en noruego (hasta ahora todo bien). Sin embargo, cuando presiona "atrás" una vez más para volver a la actividad principal,eso todavía se muestra en inglés ...
Si vuelve a salir y vuelve a iniciar la aplicación, la actividad principal se muestra correctamente en noruego ...
¿Hay alguna mente brillante aquí con una sugerencia de lo que debo hacer?
Código fuente relevante:Código incluido en cada actividad para configurar el idioma de visualización:
En onCreate:Globals.locale_default = Locale.getDefault().getDisplayLanguage();
public void onStart() {
super.onStart();
forceNorwegian = settings.getBoolean(getString(R.string.pref_key_forceNorwegian).toString(), false);
if (forceNorwegian) {
languageCheck("no");
} else {
Globals.locale = null;
languageCheck(Globals.locale_default);
}
}
public void languageCheck(String lang) {
Globals.locale = new Locale( lang );
// Check the current system locale and change it to Norwegian if it's not already the default
Globals.checkLocale( this );
if (Globals.language_changed) {
// Restart activity
Intent restart = getIntent();
finish();
Globals.language_changed = false;
startActivity(restart);
}
}
Globals.java:
public class Globals {
public static Locale locale = null;
public static String locale_default = null;
public static boolean language_changed = false;
public static void checkLocale( Activity a ) {
if( locale == null )
return;
Configuration config = a.getBaseContext().getResources().getConfiguration();
if( !config.locale.equals( locale ) )
{ // Change to the new locale. Everything will need to be closed or reloaded.
config.locale = locale;
a.getBaseContext().getResources().updateConfiguration( config, null );
language_changed = true;
}
}
}