以编程方式本地化我的所有应用程序
问题描述:
我想以编程方式查找我的所有应用程序。对于这一点,我已经创建了所需的文件夹:以编程方式本地化我的所有应用程序
如果我改变我的设备的语言,该语言在我的应用程序更改。但我想选择语言。
为此,我创建了首选项活动。在本次活动结束后,我写了这个代码:
...
mPreferenceLeguage.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object value) {
leng = value.toString();
int lengIndex = Integer.parseInt(leng) - 1;
// Update leguage summary
mPreferenceLeguage.setDefaultValue(lengIndex);
mPreferenceLeguage.setSummary(mPreferenceLeguage.getEntries()[lengIndex]);
if(leng.equals("1")){
saveLocale("en");
} else if(leng.equals("2")){
saveLocale("eu");
} else{
saveLocale("es");
}
return true;
}
});
}
public void saveLocale(String lang) {
String langPref = "Language";
SharedPreferences prefs = getSharedPreferences("CommonPrefs",
Activity.MODE_PRIVATE);
SharedPreferences.Editor editor = prefs.edit();
editor.putString(langPref, lang);
editor.commit();
}
而在MainActivity,下面的代码:
...
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main1);
loadLocale();
...
public void loadLocale() {
String langPref = "Language";
SharedPreferences prefs = getSharedPreferences("CommonPrefs",
Activity.MODE_PRIVATE);
String language = prefs.getString(langPref, "");
changeLang(language);
}
public void changeLang(String lang) {
if (lang.equalsIgnoreCase(""))
return;
myLocale = new Locale(lang);
Locale.setDefault(myLocale);
android.content.res.Configuration config = new android.content.res.Configuration();
config.locale = myLocale;
getBaseContext().getResources().updateConfiguration(config,getBaseContext().getResources().getDisplayMetrics());
}
的语言改变了,但inmediately。重新启动应用程序时,语言会发生变化。
我想这个chage将是中立的。对此,我试图在SaveLocale()方法的末尾重新调用Preference活动中的MainActivity。
我能做些什么来解决它?
答
要皮卡配置更改,如本地化修改,请确保您已注册为您的活动适当的配置变化在Android清单:
https://developer.android.com/reference/android/R.attr.html#configChanges
您可以处理在配置更改您的活动(在正确注册后)通过获取onConfigurationChanged
中的更改。
见Activity#onConfigurationChanged
文档的更多信息: https://developer.android.com/reference/android/app/Activity.html#onConfigurationChanged(android.content.res.Configuration)
答
/**Use below code Spinet it will work fine you need to recreate your
activity to change the language instantly without re-starting the app**/
Note: language ---> "en" or "eu" or "es". Based on your preference
private void updateLanguage(String language)
{
Locale locale = new Locale(language);
Locale.setDefault(locale);
Configuration config = new Configuration();
config.locale = locale;
getBaseContext().getResources().updateConfiguration(config, getBaseContext().getResources().getDisplayMetrics());
SharedPreferences languagepref = getSharedPreferences("language",MODE_PRIVATE);
SharedPreferences.Editor editor = languagepref.edit();
editor.putString("languageToLoad",language);
editor.apply();
recreate();
}
Override
public void recreate()
{
if (android.os.Build.VERSION.SDK_INT >= 14)
{
super.recreate();
}
else
{
startActivity(getIntent());
finish();
}
}