Android изменить локальную конфигурацию не работает

Я создаю приложение, которое поставляется на двух языках, используя настройку активности, где пользователь может изменить язык. Как только пользователь выбрал какой-либо язык, я хочу сохранить его / ее выбор, чтобы при повторном запуске приложения появился новый язык. Я сделал все, что связано с макетами на разных языках и в разных ориентациях.

Моя проблема

когда я запускаю приложение, оно всегда запускается в English язык, хотя я печатаю язык локали и результат Arabic,

намек

когда пользователь меняет язык с действия по настройке и нажимает "Сохранить", приложение отлично работает на новом языке. К сожалению, при перезапуске приложения оно не запускается на этом новом языке.

Мой код

Tags.java - класс, который содержит только три строки:

public class Tags {
    public final static String LANGUAGE = "Language";
    public final static String ENGLISH_LANGUAGE = "en";
    public final static String ARABIC_LANGUAGE = "ar";
}

Всплывающее действие - действие, с которого запускается приложение:

someData = getSharedPreferences(filename, 0);
android.content.SharedPreferences.Editor editor = someData.edit();
if (!someData.contains(Tags.LANGUAGE)) {
    editor.putString(Tags.LANGUAGE, Tags.ENGLISH_LANGUAGE);
    Locale locale = new Locale(Tags.ENGLISH_LANGUAGE);
    Locale.setDefault(locale);
    android.content.res.Configuration config = new android.content.res.Configuration();
    config.locale = locale;
    getBaseContext().getResources().updateConfiguration(config, getBaseContext().getResources().getDisplayMetrics());
    Setting.setLanguage(Tags.ENGLISH_LANGUAGE);
} else {
    String currentLanguage = someData.getString(Tags.LANGUAGE, Tags.ENGLISH_LANGUAGE);
    Setting.setLanguage(currentLanguage);
    Log.e("currnetLanPHone", Setting.getLanguage());
    if (currentLanguage.equalsIgnoreCase(Tags.ENGLISH_LANGUAGE)) {
        Locale locale = new Locale(Tags.ENGLISH_LANGUAGE);
        Locale.setDefault(locale);
        android.content.res.Configuration config = new android.content.res.Configuration();
        config.locale = locale;
        getBaseContext().getResources().updateConfiguration(config, getBaseContext().getResources().getDisplayMetrics());
    } else {
        Locale locale = new Locale(Tags.ARABIC_LANGUAGE);
        Locale.setDefault(locale);
        android.content.res.Configuration config = new android.content.res.Configuration();
        config.locale = locale;
        getBaseContext().getResources().updateConfiguration(config, getBaseContext().getResources().getDisplayMetrics());
    }
}
editor.commit();

Это смущает меня, потому что, как я объяснил ранее, язык приложения изменяется, и новые макеты загружаются, когда я меняю язык с Setting activity,

Я уверен, что вы попросите меня дать вам код Setting activity чтобы сравнить то, что я сделал в этом упражнении с всплеском. Этот код выглядит следующим образом:

Настройка деятельности

if (s_language.getSelectedItem().toString().equalsIgnoreCase("English")) {
    editor.putString(Tags.LANGUAGE, Tags.ENGLISH_LANGUAGE);
    Locale locale = new Locale(Tags.ENGLISH_LANGUAGE);
    Locale.setDefault(locale);
    Log.e("Inside", Tags.ENGLISH_LANGUAGE);
    android.content.res.Configuration config = new android.content.res.Configuration();
    config.locale = locale;
    getBaseContext().getResources().updateConfiguration(config, getBaseContext().getResources().getDisplayMetrics());
    Setting.setLanguage(Tags.ENGLISH_LANGUAGE);
} else {
    editor.putString(Tags.LANGUAGE, Tags.ARABIC_LANGUAGE);
    Locale locale = new Locale(Tags.ARABIC_LANGUAGE);
    Locale.setDefault(locale);
    android.content.res.Configuration config = new android.content.res.Configuration();
    config.locale = locale;
    getBaseContext().getResources().updateConfiguration(config, getBaseContext().getResources().getDisplayMetrics());
    Setting.setLanguage(Tags.ARABIC_LANGUAGE);
}
editor.commit();

Код довольно прост, я использовал Spineer s_language из двух значений.

Проблема может заключаться в том, что при настройке активности, когда пользователь нажимает save , Setting деятельность закончена в splash активность, я проверяю язык в oncreate функции, прежде чем продолжить деятельность и завершить ее после выполнения ряда шагов. Я не думаю, что завершение упражнения является проблемой, но я просто сказал вам, чтобы прояснить образ.

Как я могу решить эту проблему?

0 ответов

Другие вопросы по тегам