Change app language in android 5.0 doesn't work
Asked Answered
M

4

7

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"/>
Mockery answered 11/8, 2015 at 15:6 Comment(3)
You need to use your activity context and not your application context.Increate
Does this answer your question? Change app language programmatically in AndroidPoltroon
Per-app language feature was just added to the latest Android API 33, that is still on Developer preview. See my answer at https://mcmap.net/q/64530/-change-app-language-programmatically-in-androidPoltroon
L
13

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);
Lection answered 11/8, 2015 at 16:48 Comment(0)
G
4

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;
}
Grillage answered 12/10, 2015 at 11:25 Comment(0)
A
1

Have you added android:configChanges="locale" in AndroidManifest.xml? I think the problem is in your AndroidManifest.xml file.

You can see example change locale on my github repository.

Azalea answered 11/8, 2015 at 15:47 Comment(0)
P
1

My solution was changing the locale before activity's

setContentView(R.layout.layout_main); 
Pursy answered 23/5, 2016 at 10:38 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.