Локализация Oreo иногда не работает - PullRequest
0 голосов
/ 16 мая 2018

это дублирующий вопрос, но я не нашел решения из этих ответов, поэтому я отправляю этот вопрос, ищу решение больше недели ..

В Android локализация Oreo неработает несколько раз.Все строки отображаются только на языке устройства.

 if (languagecode.equals("1")) {
                    Resources res = getApplicationContext().getResources();
                    DisplayMetrics dm = res.getDisplayMetrics();
                    android.content.res.Configuration conf = 
                    res.getConfiguration();
                    conf.locale = new Locale("ml");
                    res.updateConfiguration(conf, dm);

                    txt_details.setText(R.string.card_det);
                    txt_no.setText(R.string.card_number);


                }
 if (languagecode.equals("2")) {
                    Resources res = getApplicationContext().getResources();
                    DisplayMetrics dm = res.getDisplayMetrics();
                    android.content.res.Configuration conf = 
                    res.getConfiguration();
                    conf.locale = new Locale("ta");
                    res.updateConfiguration(conf, dm);

                    txt_details.setText(R.string.card_det);
                    txt_no.setText(R.string.card_number);


                }

я пробовал

Android N программно менял язык

В Android Oreo локализация не работает

Как изменить язык приложения Android O / Oreo / api 26

https://www.reddit.com/r/androiddev/comments/8b2rol/solution_for_locale_language_change_not_working/

эти ответы не дают решения, пожалуйста, помогите мне

1 Ответ

0 голосов
/ 16 мая 2018

Этот код работал для меня в прошлом, он из удивительного проекта, частью которого я являюсь:

https://github.com/nu-art/cyborg-core/blob/92e2e6d9889be48244918eb85f54e9a79a14bb9e/src/main/java/com/nu/art/cyborg/core/modules/LocaleModule.java

Может быть, вам не хватает того, что в выражении if:

public void setLocale(String localeString) {
  Resources res = getResources();
  Configuration conf = res.getConfiguration();
  Locale locale = new Locale(localeString);
  Locale.setDefault(locale);
  if (VERSION.SDK_INT >= VERSION_CODES.JELLY_BEAN_MR1) {
    conf.setLocale(locale);
    getApplicationContext().createConfigurationContext(conf);
  }

  DisplayMetrics dm = res.getDisplayMetrics();
  if (VERSION.SDK_INT >= VERSION_CODES.N) {
    conf.setLocales(new LocaleList(locale));
  } else {
    conf.locale = locale;
  }
  res.updateConfiguration(conf, dm);
}

В любом случае, вместо дублирования кода, вызовите метод setLocale() с нужной локальной строкой:)

...