【发布时间】:2015-12-28 13:21:39
【问题描述】:
我目前正在尝试本地化我的 android 应用程序,并且我已经设置了所有内容,但是每当我尝试更改语言时它都会加载相同的字符串资源。
我有以下字符串资源
values
values-am
values-om
SharedPreferences sharedPreferences = getSharedPreferences("MY_SHARED_PREF", MODE_PRIVATE);
String languageLocale = sharedPreferences.getString("SAVED_LANGUAGE_LOCALE", "am");
Log.d(TAG,languageLocale);
String languageToLoad = languageLocale; // your language
Locale locale = new Locale(languageToLoad);
Locale.setDefault(locale);
Configuration config = new Configuration();
config.locale = locale;
getBaseContext().getResources().updateConfiguration(config,
getBaseContext().getResources().getDisplayMetrics());
我还使用下面的代码在不同的活动中选择语言
RadioGroup.OnCheckedChangeListener radioGroupOnCheckedChangeListener =
new RadioGroup.OnCheckedChangeListener(){
@Override
public void onCheckedChanged(RadioGroup group, int checkedId) {
RadioButton checkedRadioButton = (RadioButton)mRadioGroup.findViewById(checkedId);
int checkedIndex = mRadioGroup.indexOfChild(checkedRadioButton);
//AppController languageSetting = (AppController)getApplication();
SavePreferences(KEY_SAVED_RADIO_BUTTON_INDEX, checkedIndex);
mLanguageId = checkedIndex + 1;
languageSetting.setLanguageId(mLanguageId);
switch (mLanguageId){
case 1:
SavePreferencesLocale(KEY_SAVED_LANGUAGE_LOCALE,"en");
mTest = "en";
break;
case 2:
SavePreferencesLocale(KEY_SAVED_LANGUAGE_LOCALE,"am");
mTest = "am";
break;
case 3:
SavePreferencesLocale(KEY_SAVED_LANGUAGE_LOCALE,"om");
mTest = "om";
break;
}
}};
现在的问题是,每当应用程序第一次启动时,它会加载正确的字符串资源,但是当我更改语言时,它会保留相同的字符串资源。这意味着例如。如果应用程序以 values-am 字符串资源开始,当我将其更改为 values-om 时,我仍然会看到 values-am 字符串,尽管为区域设置分配了正确的值(“om”)
【问题讨论】:
-
通过“保持相同的字符串资源” - 你的意思是它没有将视图中的当前值更新为本地化的值?
-
@aelimill 是的,我就是这个意思。
-
你需要手动更新所有需要的视图或者在activity中调用recreate()。可悲的是,但这是我知道让它自动工作的唯一方法
标签: android string localization resources