Смена языка не меняет текст - PullRequest
0 голосов
/ 04 января 2019

У меня выпадающий список, пользователь может выбрать язык English или Spanish.

Проблема в том, что при изменении языка он преобразует дату, время, текст диалога прогресса в испанский или английский, но определенные мной строки не преобразуются в указанный язык.

Хотя они конвертируются после 1 или 2 кликов, поэтому, когда я нажимаю ES, он не изменит строки на ES, но затем я нажму EN, он будет работать и преобразует всю строку в ES, что не является желаемым результатом.

Когда пользователь нажимает на любой язык, я выполняю следующий код.

languageSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {

 public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {

        selectedLanguage=  getResources().getStringArray(R.array.language_array)[i];
        loadLanguage(selectedLanguage.toLowerCase());
 }

Метод load language выполняет эти операции.

    public void loadLanguage(String language){

        String languageToLoad  = language;
        Locale locale = new Locale(languageToLoad);
        Locale.setDefault(locale);

        Configuration config = new Configuration();
        config.setLocale(locale);
        getBaseContext().getResources().updateConfiguration(config,
                getBaseContext().getResources().getDisplayMetrics());


        recreate(); 
 }

На каждом мероприятии я добавляю следующий код.

  @Override
    protected void attachBaseContext(Context newBase) {
        Locale locale = new Locale(LanguagePreference.getInstance().getUserLanguage(newBase));
        Context context = ContextWrapper.wrap(newBase, locale);
        super.attachBaseContext(context);
    }

Ниже приведен мой класс Context Wrapper.

  public static ContextWrapper wrap(Context context, Locale newLocale) {

        Resources res = context.getResources();
        Configuration configuration = res.getConfiguration();

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
            configuration.setLocale(newLocale);

            LocaleList localeList = new LocaleList(newLocale);
            LocaleList.setDefault(localeList);
            configuration.setLocales(localeList);

            context = context.createConfigurationContext(configuration);

        } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
            configuration.setLocale(newLocale);
            context = context.createConfigurationContext(configuration);

        } else {
            configuration.locale = newLocale;
            res.updateConfiguration(configuration, res.getDisplayMetrics());
        }

        return new ContextWrapper(context);
    }}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...