我对android dev很陌生,我有一点本地化问题。我有一个应用程序,用户可以在其中选择使用除设备当前语言之外的其他默认语言。例如,居住在德国并将手机设置为“德语”的法国用户可能希望以法语使用我的应用程序(出于各种原因),但不想将手机的默认语言设置为法语。
我的应用程序只有一个活动,我在其中加载和卸载一些视图。这是一个非常简单的应用程序,但内容很大(文本和图像)。
为此,我使用下面的代码。
它运作良好,但存在一些问题:
当用户使用适当的按钮选择新语言并重新启动应用程序时(或者如果我强制应用程序完成()...):只有第一个视图使用新语言。下一个视图仍设置为以前的语言。
如果用户选择关闭他的设备,同样的问题:只有活动的第一个视图设置为选择的语言(从首选项中读取变量。)。
但是,如果用户第二次选择重新启动应用程序,所有视图和子视图都会正确设置为新语言。
而且,如果用户之前至少重新启动了一次应用程序,则每次语言更改都会成功完成。无需再次重新启动应用程序。
那么,有没有办法正确设置新语言
应用程序首次重新启动后立即
如果用户之前已经关闭并打开了他的设备
任何帮助将不胜感激。这是我使用的代码(简化):
public void onCreate(Bundle savedInstanceState) {
SharedPreferences myPrefs;
myPrefs = getSharedPreferences("langage", MODE_PRIVATE);
String langageToLoad = myPrefs.getString("langageToLoad", "");
changeLangage(langageToLoad);
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
(...some other code...)
}
public void setLangageEn(View view){
changeLangage( "en");
setPreference( "en");
// finish(); // optionnal
}
public void changeLangage(String langage) {
Locale locale = new Locale(langage);
Locale systemLocale = Locale.getDefault();
if (systemLocale != null && systemLocale.equals(locale)) {
return;
}
Locale.setDefault(locale);
android.content.res.Configuration config = new android.content.res.Configuration();
config.locale = locale;
getResources().updateConfiguration(config, getResources().getDisplayMetrics());
}
public void setPreference( String langage){
SharedPreferences languagepref = getSharedPreferences("langage",MODE_PRIVATE);
SharedPreferences.Editor editor = languagepref.edit();
editor.putString("langageToLoad",langage );
editor.commit();
}