【发布时间】:2011-06-20 15:54:02
【问题描述】:
我希望根据用户偏好设置应用程序语言,但到目前为止,它还不能按照我的意愿工作。
我已经设置了默认值:strings.xml 和 values-es,其中包含西班牙语的 strings.xml。我有一个菜单选项,可将用户带到偏好活动,他可以在其中选择语言。
所以这里是一些代码的摘录:
public class Preference extends PreferenceActivity implements
OnSharedPreferenceChangeListener {
......
// Set up a listener whenever a key changes
getPreferenceScreen().getSharedPreferences()
.registerOnSharedPreferenceChangeListener(this);
...}
//(......)
//and here I have the listener so when the language pref changes value the locale gets changed.
@Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences,
String key) {
if (key.equals("listPref2")) {
String idioma = sharedPreferences.getString("listPref2", "catala");
if ("castella".equals(idioma)) {
idioma = "es_ES";
Locale locale = new Locale(idioma);
Locale.setDefault(locale);
Configuration config = new Configuration();
config.locale = locale;
getApplicationContext().getResources().updateConfiguration(config,
getBaseContext().getResources().getDisplayMetrics());
}
}
}
因此,当我更改语言时它可以工作,但是当我稍后回来或重新启动模拟器时,语言会恢复为默认语言环境 en_US,并且应用程序语言会再次更改回默认值。我能做些什么来解决这个问题?
我知道我可以得到这个偏好(我可以从我的所有活动中访问它),然后每次设置语言环境,但我发现它有点重,没有办法在更 优雅的方式?
我想做的是,如果用户设置了语言,那么当他 2 天后回来时,他不必再次更改语言。
有什么想法吗?
【问题讨论】:
标签: android localization locale