setLocale для изменения языка не действует в Android - PullRequest
0 голосов
/ 17 июня 2020

Если сгенерирован подписанный пакет - выпуск, мне не удалось программно изменить язык приложения на некоторых Android устройствах ..
, но если собрать APK-файлы, он будет работать на всех Android устройствах ..


Это список протестированных устройств:

✓ Samsung J7 prime

✓ Samsung A50

✓ Vivo y81

x Xiaomi Redmi Note 8


Это ресурс, который я использую:

  • значения (по умолчанию)
  • значения-ru
  • values-en-rUS
  • values-es-rES
  • values-in
  • values-in-rID

И это код, который я использую:

(Приложение - Приложение)

public class App extends Application {    

    @Override
    public void onCreate() {
        super.onCreate();
    }

    @Override
    public void onConfigurationChanged(@NonNull Configuration newConfig) {
        super.onConfigurationChanged(newConfig);

        new cgt_Languages(getApplicationContext());
    }

    @Override
    protected void attachBaseContext(Context base) {
        super.attachBaseContext(base);

        new cgt_Languages(base);
    }
}

(Класс - cgt_Languages)

public cgt_Languages(Context context) {
    try {
        //Check exists database
        cgt_pm_Languages pmLanguages = new cgt_pm_Languages(context);

        String idioma;
        String baseLocale;
        if ("in".equals(pmLanguages.getLanguage())) {
            idioma = "in";
            baseLocale = "ID";
        } else if ("es".equals(pmLanguages.getLanguage())) {
            idioma = "es";
            baseLocale = "ES";
        } else {
            idioma = "en";
            baseLocale = "US";
        }

        Locale locale = new Locale(idioma, baseLocale);
        Locale.setDefault(locale);
        Configuration configuration = new Configuration();
        configuration.setLocale(locale);

        // create configuration
        context.createConfigurationContext(configuration);

        // update configuration
        context.getResources().updateConfiguration(configuration, context.getResources().getDisplayMetrics());
    } catch (Exception e) {
        new cgt_ErrorMessage(context, e.toString(), "cgt_Languages - cgt_Languages", true, false).startErrorMessage("");
    }
}

(Фрагмент - fgtSetting)

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    new cgt_Languages(getContext());

    in.setOnClickListener(view1 -> {
        String idioma = "in";
        String baseLocale = "ID";

        Locale locale = new Locale(idioma, baseLocale);
        Locale.setDefault(locale);
        Configuration configuration = new Configuration(context.getResources().getConfiguration());

        if (Build.VERSION.SDK_INT >= 17) {
            configuration.setLocale(locale);
            context = context.createConfigurationContext(configuration);
        } else {
            configuration.locale = locale;
            context.getResources().updateConfiguration(configuration, context.getResources().getDisplayMetrics());
        }


        Intent intent = activity.getIntent();
        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        activity.startActivity(intent);
        activity.finish();
        activity.overridePendingTransition(0, 0);
    });
}

Мне нужна ваша помощь ..

1 Ответ

0 голосов
/ 24 августа 2020

Этот ответ сработал для меня:

bundle  {
    language {
    // Specifies that the app bundle should not support
    // configuration APKs for language resources. These
    // resources are instead packaged with each base and
    // dynamic feature APK.
    enableSplit = false
    }
}

Я получил ответ от этого

...