Изменить язык приложения в android 5.0 не работает

Я использую этот код ниже, чтобы изменить свой язык приложения при нажатии кнопки (например, с французского на английский), он отлично работает на Android 4.0 +, но на 5.0 он этого не делает.

Locale localeEn = new Locale("en_US");
Locale.setDefault(localeEn);
Configuration configEn = new Configuration();
configEn.locale = localeEn;
getApplicationContext().getResources().updateConfiguration(configEn, null);
this.recreate();

Любые подсказки, почему бы вам понравиться?

изменить: это мой манифест (с android: configChanges)

<activity
            android:name=".activities.LoginActivity"
            android:configChanges="orientation|locale"
            android:label="@string/app_name"
            android:screenOrientation="portrait"/>

Ответ 1

Попробуйте изменить это:

Locale localeEn = new Locale("en_US");
Locale.setDefault(localeEn);

к этому

String language = "en";
String country = "US";
Locale locale = new Locale(language , country);

Ответ 2

Мое решение, которое я получил от Udhay, работает, когда пользователь меняет язык в панели действий, а приложение "обновляется" с выбранным языком. Я использую android 6.0.

Не нужно добавлять locale в 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;
}

Ответ 3

Добавили ли вы android:configChanges="locale" в AndroidManifest.xml? Я думаю, проблема в вашем файле AndroidManifest.xml.

Вы можете увидеть пример change locale на мой репозиторий github.

Ответ 4

Мое решение меняло язык перед действиями

setContentView(R.layout.layout_main);