我遇到了一个关于应用本地化的小问题:
情况就是这样——我为我的用户提供了一个选项,无论系统语言如何,我都可以始终以挪威语使用该应用程序。
它在大多数情况下都可以正常工作(我进入设置,选中该框以强制使用挪威语,按“返回”,之前的活动以挪威语显示 - 同样的事情“相反”),但是 - 仅更改语言似乎为我的“后台堆栈”中的第一个活动正确更新(重新加载资源)。
举例说明一个典型场景:
用户启动应用程序,并显示主要活动(英文)。从那里,他选择了第二个活动(也是英语)。然后他进入设置(从第二个活动的菜单中)并设置偏好以强制使用挪威语。
然后当他导航回来时,第二个活动被正确更新并以挪威语显示(到目前为止一切都很好)。但是,当他再次按“返回”返回主活动时,它仍然显示为英文......
如果他退出并再次启动应用程序,主要活动将以挪威语正确显示...
这里有没有聪明人对我应该做什么提出建议?
相关源代码:
每个活动中包含设置显示语言的代码:
在 onCreate 中:Globals.locale_default = Locale.getDefault().getDisplayLanguage();
public void onStart() {
super.onStart();
forceNorwegian = settings.getBoolean(getString(R.string.pref_key_forceNorwegian).toString(), false);
if (forceNorwegian) {
languageCheck("no");
} else {
Globals.locale = null;
languageCheck(Globals.locale_default);
}
}
public void languageCheck(String lang) {
Globals.locale = new Locale( lang );
// Check the current system locale and change it to Norwegian if it's not already the default
Globals.checkLocale( this );
if (Globals.language_changed) {
// Restart activity
Intent restart = getIntent();
finish();
Globals.language_changed = false;
startActivity(restart);
}
}
全局.java:
public class Globals {
public static Locale locale = null;
public static String locale_default = null;
public static boolean language_changed = false;
public static void checkLocale( Activity a ) {
if( locale == null )
return;
Configuration config = a.getBaseContext().getResources().getConfiguration();
if( !config.locale.equals( locale ) )
{ // Change to the new locale. Everything will need to be closed or reloaded.
config.locale = locale;
a.getBaseContext().getResources().updateConfiguration( config, null );
language_changed = true;
}
}
}