Изменение языка приложения на устройствах со строкой API 22 не изменяется

#android #android-studio #android-layout #localization #android-configchanges

#Android #android-studio #android-макет #локализация #android-изменения конфигурации

Вопрос:

Я хочу изменить строку при изменении локали приложения

есть фрагмент профиля

     @Override
    public void onClick(View v) {
        Intent intent = null;
        switch (v.getId()) {
            case R.id.changeLanguageButton:
                if (PrefManager.getLocale(getActivity()).equals("en")) {
                    setLocale("ar");
                } else {
                    setLocale("en");
                }
                break;
        }
    }

    public void setLocale(String lang ) {
        Locale locale = new Locale(lang);
        Locale.setDefault(locale);
        Configuration config = new Configuration();
        config.locale = locale;
        config.setLayoutDirection(locale);
        getActivity().getBaseContext().getResources().updateConfiguration(config, getActivity().getApplication().getResources().getDisplayMetrics());
        PrefManager.saveLocale(getActivity(), lang);

        Intent intent = new Intent(getActivity(), SplashActivity.class);
        startActivity(intent);

    }
 

Происходит всплеск активности

 @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        if (PrefManager.getLocale(this) == null){
            setLocale("en");
        }else if (PrefManager.getLocale(this).equals("en")){
            setLocale("en");
        }else {
            setLocale("ar");
        }

        setContentView(R.layout.activity_splash);

        new Handler().postDelayed(new Runnable(){
            @Override
            public void run() {
                Intent mainIntent = new Intent(SplashActivity.this,MainActivity.class);
                Splash.this.startActivity(mainIntent);
                Splash.this.finish();
            }
        }, 3000);

    }

    public void setLocale(String lang) {
        Locale locale = new Locale(lang);
        Locale.setDefault(locale);
        Configuration config = new Configuration();
        config.locale = locale;
        config.setLayoutDirection(locale);
        this.getBaseContext().getResources().updateConfiguration(config, this.getApplication().getResources().getDisplayMetrics());
        PrefManager.saveLocale(this, lang);
    }
 

Проблема в том, что этот код работает на устройстве с API 23 и переводит все строки, но не работает на устройстве с API 22, он просто меняет только направление макета

Мой minSdkVersion 19 и targetSdkVersion 29

Ответ №1:

Я нашел ответ, если кому-то интересно

Я изменил арабское строковое имя файла с «string (ar-rEG)» на «string (ar)»

и это работает нормально