javaandroidandroid-studiolocalizationsetlocale

setLocale for change language has no effect in Android


If Generated Signed Bundle - Release, i failed to change the language of an app programmatically on some Android devices..
but if Build Apk(s), it's work on all Android devices..


This is a list of devices that have been tested :

✓ Samsung J7 prime

✓ Samsung A50

✓ Vivo y81

x Xiaomi Redmi Note 8


This is a resource that i use :

And this is the code that I use :

(Application - App)

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);
    }
}

(Class - 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("");
    }
}

(Fragment - 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);
    });
}

I need your help..


Solution

  • This answer worked for me :

    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
        }
    }
    

    I have got the answer from this