I'm using this code below to change my app language on button click (changing from french to english for example), it's works fine on android 4.0 + but on 5.0 it doesn't.
Locale localeEn = new Locale("en_US");
Locale.setDefault(localeEn);
Configuration configEn = new Configuration();
configEn.locale = localeEn;
getApplicationContext().getResources().updateConfiguration(configEn, null);
this.recreate();
Any clues why please?
edit : this is my manifest ( with android:configChanges )
<activity
android:name=".activities.LoginActivity"
android:configChanges="orientation|locale"
android:label="@string/app_name"
android:screenOrientation="portrait"/>
Try to change from this:
Locale localeEn = new Locale("en_US");
Locale.setDefault(localeEn);
to this
String language = "en";
String country = "US";
Locale locale = new Locale(language , country);
My solution, that i got from Udhay, works when user changes the language in actionbar and app "refreshes" with selected language. I am using android 6.0.
There is no need to add locale to androidManifest.
@Override
public boolean onOptionsItemSelected(MenuItem item) {
Locale locale = null;
switch (item.getItemId()) {
case R.id.action_en:
locale = new Locale("en_US");
Toast.makeText(this, "English", Toast.LENGTH_SHORT).show();
break;
case R.id.action_is:
locale = new Locale("is", "IS");
Toast.makeText(this, "Íslanska", Toast.LENGTH_SHORT).show();
break;
}
Resources res = getResources();
DisplayMetrics dm = res.getDisplayMetrics();
Configuration conf = res.getConfiguration();
conf.locale = locale;
res.updateConfiguration(conf, dm);
Intent refresh = new Intent(this, MainActivity.class);
startActivity(refresh);
finish();
return true;
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With