我有一个Spinner显示字符串数组的不同选项。所选字符串将存储到数据库中以供以后使用。 例如,微调器在英语(values-en)中显示此项目:
<string name="none">N - None</string>
<string name="month">M - Once a month or less</string>
<string name="oweek">W - Once a week</string>
用户选择一个,然后将字符串存储在数据库中。
问题是应用了不同的区域设置。例如,在西班牙语(values-es)中,我有以下选项:
<string name="none">N - Ninguno</string>
<string name="month">M - Una vez al mes o menos</string>
<string name="oweek">W - Una vez a la semana</string>
当用户选择一个字符串时,字符串将以以西班牙语存储到数据库中。我需要用英文存储它们。基本上,应用程序需要显示选项“N - Ninguno”并存储“N - None”。
有没有办法获取所选字符串的id并存储其他语言环境中的值?还是其他任何解决方案?
答案 0 :(得分:4)
我认为你有两种选择。
创建另一列以保存名称和实际字符串。
在数据库中存储默认语言。
我会选择第一个,但是如果你想在数据库中只使用英文字符串,然后用当前语言检查它们:
要从其他语言环境中获取字符串,您可以使用此功能。
private String getStringLocale(int resourceId, Locale newLocale){
Resources res = getResources();
Configuration conf = res.getConfiguration();
//Saving Locale so we can restore it later
Locale savedLocale = conf.locale;
//Set new Locale depending on the parameters we are getting
conf.locale = newLocale;
res.updateConfiguration(conf, null);
//Saving String
String str = res.getString(resourceId);
//Restoring original Locale
conf.locale = savedLocale;
res.updateConfiguration(conf, null);
return str;
}
并像这样使用它:
Log.d("LocaleSpanish", getStringLocale(R.string.app_name, new Locale("es")));
Log.d("LocaleEnglish", getStringLocale(R.string.app_name, new Locale("en")));