来自资源的Android本地化
我目前正在尝试本地化我的android应用程序,我已经设置好了所有内容,但每当我尝试更改语言时,它总是加载相同的字符串资源 我有以下字符串资源来自资源的Android本地化,android,string,localization,resources,Android,String,Localization,Resources,我目前正在尝试本地化我的android应用程序,我已经设置好了所有内容,但每当我尝试更改语言时,它总是加载相同的字符串资源 我有以下字符串资源 values values-am values-om SharedPreferences sharedPreferences = getSharedPreferences("MY_SHARED_PREF", MODE_PRIVATE); String languageLocale = sharedPreferences.getString("SAVED
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;
}
}};
现在的问题是,每当应用程序第一次启动时,它都会加载正确的字符串资源,但当我更改语言时,它会保留相同的字符串资源。这意味着,例如,当我将应用程序更改为值om时,如果应用程序以值am字符串资源启动,我仍然可以看到值am字符串,尽管已为区域设置分配了正确的值(“om”)您需要在
onCheckedChanged()
中的每个语言选择上调用以下代码
设置区域设置后,使用重新创建()
重新启动活动。以下是一些内容:
String languageLocale = sharedPreferences.getString("SAVED_LANGUAGE_LOCALE", "am");
借**
getString(““保存的语言环境”、“am”)
**你不需要字符串“am”。这个“am”你只需要。putString()
应该像
String languageLocale = sharedPreferences.getString("KEY_SAVED_LANGUAGE_LOCALE");
意图刷新和调用
Locale locale = new Locale("ar");
Locale.setDefault(locale);
Configuration config = new Configuration();
config.locale = locale; getBaseContext().getResources().updateConfiguration(config, getBaseContext().getResources().getDisplayMetrics());
this.setContentView(R.layout.activity_main_category_page);
“保留相同的字符串资源”-您的意思是它没有将视图中的当前值更新为本地化的值?@aelimill是的,这就是我的意思。您需要手动更新所有需要的视图或调用recreate()在活动中。遗憾的是,这是我知道的使其自动工作的唯一方法。我尝试过,但仍然没有成功。下面是我所做的更改。我通过清除缓存并终止应用程序的进程来解决问题。换句话说,我必须再次手动启动应用程序。我觉得我的解决方案并不完美,我认为仍然存在问题一种更好的方法。我用它来访问我在共享首选项中保存的内容。我用Log.d(标记,languageLocale)对它进行了测试,它正好提供了我所需要的内容。字符串“am”只是一个默认值,其中是putString()?如果你在我的第一篇文章中看到函数SavePreferencesLocale()名为
private void savepreferences缩放(字符串键,字符串值){SharedReferences SharedReferences=GetSharedReferences(“MY_SHARED_PREF”,MODE_private”);SharedReferences.Editor=SharedReferences.edit();Editor.putString(键,值);Editor.commit()}
Locale locale = new Locale("ar");
Locale.setDefault(locale);
Configuration config = new Configuration();
config.locale = locale; getBaseContext().getResources().updateConfiguration(config, getBaseContext().getResources().getDisplayMetrics());
this.setContentView(R.layout.activity_main_category_page);