Android - No funciona el cambio de idioma implementado en la app Android

 
Vista:

No funciona el cambio de idioma implementado en la app Android

Publicado por David (1 intervención) el 28/08/2021 00:38:08
Hola,

tengo una aplicación Android donde he implementado el código para poder cambiar de idioma dentro de la aplicación a través de un popup donde aparece un botón por idioma. Probándolo desde los emuladores de Android Studio me funciona bien, pero después cuando pruebo la aplicación descargada de Play Store no funciona el cambio de idioma.

Esto es lo que tengo en el código:

En application del AndroidManifest.xml tengo puesto android:supportsRtl="true"

En cada activity del AndroidManifest.xml tengo puesto android:configChanges="...|locale"

Al hacer click en un botón de idioma en la popup donde se muestran los idiomas, se realiza lo siguiente:

SharedPreferences sharedPreferences = getBaseContext().getSharedPreferences("sharedPreferences", Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putString("currentLocale", "es");
editor.apply();
Intent intent = new Intent(LanguagePopup.this, InitActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
finish();


Por cada actividad tengo lo siguiente:

@Override
protected void attachBaseContext(Context newBase) {
SharedPreferences sharedPreferences = newBase.getSharedPreferences("sharedPreferences",
Context.MODE_PRIVATE);
String currentLocale = sharedPreferences.getString("currentLocale", "en");
super.attachBaseContext(MyContextWrapper.wrap(newBase, currentLocale));
}


También tengo la clase:

public class MyContextWrapper extends ContextWrapper {

public MyContextWrapper(Context base) {
super(base);
}

public static ContextWrapper wrap(Context context, String language) {

Configuration config = context.getResources().getConfiguration();
Locale sysLocale;

if (Build.VERSION.SDK_INT > Build.VERSION_CODES.N) {
sysLocale = getSystemLocale(config);
} else {
sysLocale = getSystemLocaleLegacy(config);
}

if (!"".equals(language) && !sysLocale.getLanguage().equals(language)) {
Locale locale = new Locale(language);
Locale.setDefault(locale);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
setSystemLocale(config, locale);
} else {
setSystemLocaleLegacy(config, locale);
}
}

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
context = context.createConfigurationContext(config);
} else {
context.getResources().updateConfiguration(config, context.getResources().getDisplayMetrics());
}

return new MyContextWrapper(context);
}

public static Locale getSystemLocaleLegacy(Configuration config){
return config.locale;
}

@TargetApi(Build.VERSION_CODES.N)
public static Locale getSystemLocale(Configuration config){
return config.getLocales().get(0);
}

public static void setSystemLocaleLegacy(Configuration config, Locale locale){
config.locale = locale;
}

@TargetApi(Build.VERSION_CODES.N)
public static void setSystemLocale(Configuration config, Locale locale){
config.setLocale(locale);
}
}


Tengo creado el values/strings.xml, values-en/strings.xml y values-es/strings.xml

¿Me pueden ayudar con esto?

Gracias de antemano.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder