我们正在构建一个产品,我们计划从服务器为英语和法语用户推送静态字符串,以达到性能目的。这两个字符串将同时被推送。我们正在提供导航抽屉的开关,以在英语和语言之间切换。由于这些字符串会随着时间的推移而不断变化,因此我们无法将它们保存在值和值-fr文件夹下。
现在有几个问题
当设备区域设置发生变化时,我们需要切换语言 在运行时使用这些字符串的应用程序。有没有办法 在运行时动态地将字符串加载到值和值-fr中 夹。
如果无法满足以上条件,我们计划对每一项进行检查 查看每个字符串,这将增加代码的复杂性。
对于我们可以实施的上述问题是否有任何替代或解决方案。非常感谢任何帮助。
答案 0 :(得分:2)
strings.xml
一组空项目,仅仅是为了ID。当然,您也可以使用ids.xml
来实现此目的。当应用程序启动时,我下载包含key, value
对的文件,其中key
是我在name
中使用的strings.xml
属性,并将其放在HashMap<String, String>
中{1}}。最后,我有一位小经理,负责将id
转换为name
,retrieved
将HashMap
的字符串转换为客户端。 从可维护性的角度来看,它可以成像/是一场噩梦。我强烈反对它,但我明白,有时候这是不可能的
答案 1 :(得分:0)
使用Application类
public class MyApplication extends Application {
private static MyApplication instance = null;
private String frenchValue;
private String englishValue;
private String env_lang_Value;
public String getFrenchValue() {
return frenchValue;
}
public void setFrenchValue(String frenchValue) {
UnravelApplication.frenchValue = frenchValue;
}
public String getEnglishValue() {
return englishValue;
}
public void setEnglishValue(String englishValue) {
UnravelApplication.englishValue = englishValue;
}
public String getEnv_lang_Value() {
return env_lang_Value;
}
public void setEnv_lang_Value(String env_lang_Value) {
UnravelApplication.env_lang_Value = env_lang_Value;
}
private MyApplication() {
// Exists only to defeat instantiation.
}
public static MyApplication getInstance() {
if(instance == null) {
instance = new MyApplication();
}
return instance;
}
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
if (newConfig.locale.getLanguage() == Configuration.locale.ENGLISH) {
env_lang_value=englishValue
}
if (newConfig.locale.getLanguage() == Configuration.locale.FRENCH) {
env_lang_value=frenchValue
}
}
}
从服务器接收推送静态字符串时从任何活动
public MyActivity extends Activity{
MyApplication myApplication = MyApplication.getInstance();
//to set while getting strings from server for both english and french
myApplication.setEnglishValue(englishValue);
myApplication.setFrenchValue(frenchValue);
if(Locale.getDefault().getDisplayLanguage().equalsIgnoreCase("English"))
myApplication.setEnv_lang_value=englishValue;
if(Locale.getDefault().getDisplayLanguage().equalsIgnoreCase("French"))
myApplication.setEnv_lang_value=frenchValue;
//to get value
String currentValue=myApplication.getEnv_lang_value;
}
不要忘记在AndroidManifest.xml标签中指定应用程序类名称
<application android:icon="@drawable/icon" android:label="@string/app_name" android:name="MyApplication">