适用于法语和英语字符串的Android本地化

时间:2015-06-03 19:03:58

标签: android localization

我们正在构建一个产品,我们计划从服务器为英语和法语用户推送静态字符串,以达到性能目的。这两个字符串将同时被推送。我们正在提供导航抽屉的开关,以在英语和语言之间切换。由于这些字符串会随着时间的推移而不断变化,因此我们无法将它们保存在值和值-fr文件夹下。

现在有几个问题

  1. 当设备区域设置发生变化时,我们需要切换语言 在运行时使用这些字符串的应用程序。有没有办法 在运行时动态地将字符串加载到值和值-fr中 夹。

  2. 如果无法满足以上条件,我们计划对每一项进行检查     查看每个字符串,这将增加代码的复杂性。

  3. 对于我们可以实施的上述问题是否有任何替代或解决方案。非常感谢任何帮助。

2 个答案:

答案 0 :(得分:2)

  1. 不可能
  2. 我曾经做过类似的事情。我所做的是提供strings.xml一组空项目,仅仅是为了ID。当然,您也可以使用ids.xml来实现此目的。当应用程序启动时,我下载包含key, value对的文件,其中key是我在name中使用的strings.xml属性,并将其放在HashMap<String, String>中{1}}。最后,我有一位小经理,负责将id转换为nameretrievedHashMap的字符串转换为客户端。
  3. 从可维护性的角度来看,它可以成像/是一场噩梦。我强烈反对它,但我明白,有时候这是不可能的

答案 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">