プログラムで言語を変更したい。
したがって、2つのxmlファイルを作成しました。
values-it
-->string.xml
values-en
-->string.xml
これは、アプリケーション全体の言語を変更するMainActivityのコードです。
//イタリア語
Resources res = getApplicationContext().getResources();
DisplayMetrics dm = res.getDisplayMetrics();
Android.content.res.Configuration conf = res.getConfiguration();
conf.locale = new Locale("it");
res.updateConfiguration(conf, dm);
//英語
Resources res2 = getApplicationContext().getResources();
DisplayMetrics dm2 = res2.getDisplayMetrics();
Android.content.res.Configuration conf2 = res2.getConfiguration();
conf2.locale = new Locale("en");
res2.updateConfiguration(conf2, dm2);
たとえば、英語を設定した場合、コードはエラーなしで実行されますが、ラベルはテキストを変更しません。
デバイスの向きを変更すると、ラベルのテキストが正しく変更されます。
ラベルを自動的に更新するようにコードを変更するにはどうすればよいですか?
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();
新しい言語のテキストを表示するには、アクティビティをリロードする必要があります。これは再起動を意味します。
方向を変更した場合に行うリソースをロードするには、アクティビティを更新する必要があります。これを試して
private void restartActivity() {
Intent intent = getIntent();
finish();
startActivity(intent);
}
最善の方法は、すべてのTextView.setText()
をメソッドに入れることです。 onResume();
でそのメソッドを呼び出して、最初に設定します。次に、言語をリセットしたときにそのメソッドを思い出してください。 (方向を変更すると、アクティビティはonStart()
onResume()
などを通過します)
問題をまだ解決していない場合は、これを試すことができます。それは私のために働きます、それがあなたを助けることを願っています。後で参照できます
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());
}
}
});
これが俺たちのやり方です:
com.Android.internal.app.LocalePicker.updateLocales(LocaleList locales)