wake-up-neo.com

Wie kann ich die Sprache programmgesteuert ändern?

Ich möchte die Sprache programmgesteuert ändern.

Ich habe also zwei XML-Dateien erstellt.

values-it
-->string.xml

values-en
-->string.xml

Dies ist der Code in MainActivity, um die Sprache der gesamten Anwendung zu ändern:

//ITALIENISCH

Resources res = getApplicationContext().getResources();
DisplayMetrics dm = res.getDisplayMetrics();
Android.content.res.Configuration conf = res.getConfiguration();
conf.locale = new Locale("it");
res.updateConfiguration(conf, dm);

//ENGLISCH

Resources res2 = getApplicationContext().getResources();
DisplayMetrics dm2 = res2.getDisplayMetrics();
Android.content.res.Configuration conf2 = res2.getConfiguration();
conf2.locale = new Locale("en");
res2.updateConfiguration(conf2, dm2);

Wenn ich jetzt die englische Sprache einstelle (zum Beispiel), wird der Code fehlerfrei ausgeführt, der Text wird jedoch nicht geändert.
Wenn ich die Ausrichtung meines Geräts ändere, ändert das Etikett den Text korrekt.

Wie kann ich nun meinen Code ändern, um das Label automatisch zu aktualisieren?

5
bircastri
 AlertDialog.Builder builder = new AlertDialog.Builder(DashboardActivity.this);
            builder.setTitle(R.string.languages);
            // Add the buttons
            builder.setPositiveButton(R.string.english, new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int id) {
                    String languageToLoad = "en"; // your language
                    Locale locale = new Locale(languageToLoad);
                    Locale.setDefault(locale);
                    Configuration config = new Configuration();
                    config.locale = locale;
                    getBaseContext().getResources().updateConfiguration(config,
                            getBaseContext().getResources().getDisplayMetrics());
                    dialog.dismiss();
                    rEditor.putString("language", languageToLoad);
                    rEditor.commit();



                    Intent refresh = new Intent(DashboardActivity.this, DashboardActivity.class);
                    startActivity(refresh);
                    finish();

                }
            });
            builder.setNegativeButton(R.string.gujarati, new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int id) {
                    // User cancelled the dialog

                    String languageToLoad = "gu"; // your language
                    Locale locale = new Locale(languageToLoad);
                    Locale.setDefault(locale);
                    Configuration config = new Configuration();
                    config.locale = locale;
                    getBaseContext().getResources().updateConfiguration(config,
                            getBaseContext().getResources().getDisplayMetrics());
                    dialog.dismiss();
                    rEditor.putString("language", languageToLoad);
                    rEditor.commit();


                    Intent refresh = new Intent(DashboardActivity.this, DashboardActivity.class);
                    startActivity(refresh);
                    finish();

                }
            });

            builder.create().show();

sie müssen die Aktivität erneut laden, um den Text in der neuen Sprache anzuzeigen.

7

sie müssen Ihre Aktivität aktualisieren, um Ressourcen zu laden, die jedoch die Ausrichtung ändern. Versuche dies 

private void restartActivity() { 
 Intent intent = getIntent(); 
 finish(); 
 startActivity(intent);
}
4
Yasir Ali

Der beste Weg wäre, alle TextView.setText() in eine Methode zu schreiben. Rufen Sie diese Methode in Ihrer onResume(); auf, um sie zum ersten Mal festzulegen. Rufen Sie dann diese Methode ab, wenn Sie die Sprache zurückgesetzt haben. (Die Aktivität geht durch onStart()onResume() usw., wenn Sie die Ausrichtung ändern)

2
Flummox

Wenn Sie Ihr Problem noch nicht gelöst haben, können Sie dies versuchen. Es funktioniert für mich, hoffe es wird dir helfen. Sie können es in Zukunft weiterempfehlen

mSwitch = (Switch) findViewById(R.id.language_switch);

    mSwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
        @RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN_MR1)
        @Override
        public void onCheckedChanged(CompoundButton compoundButton, boolean isChecked) {
                if (isChecked){
                    mSwitch.setTextColor(Color.GRAY);
                    String languageToLoad = "es";
                    Locale locale = new Locale(languageToLoad);
                    Locale.setDefault(locale);
                    Configuration configuration = new Configuration();
                    configuration.setLocale(locale);
                    Toast.makeText(getApplicationContext(), "spanish is set", Toast.LENGTH_SHORT).show();
                    getBaseContext().getResources().updateConfiguration(configuration, getBaseContext().getResources().getDisplayMetrics());
                } else {
                    String languageToLoad = "en";
                    Locale locale = new Locale(languageToLoad);
                    Locale.setDefault(locale);
                    Configuration configuration = new Configuration();
                    configuration.setLocale(locale);
                    Toast.makeText(getApplicationContext(), "english is set", Toast.LENGTH_SHORT).show();
                    getBaseContext().getResources().updateConfiguration(configuration, getBaseContext().getResources().getDisplayMetrics());
                }
        }
    });
1
fazeel zama

Das ist wie wir es machen:

com.Android.internal.app.LocalePicker.updateLocales(LocaleList locales)

0
Zbigniew Mazur