在语言环境中按值翻译字符串

时间:2016-10-05 14:38:38

标签: android

android API是否支持按值翻译字符串资源?

我知道我可以为不同的语言环境创建多个XML文件。我的问题是我从服务器获取了#34;默认语言环境"所以,我无法使用getString(int)

我想要getTranslation("myValueInDefaultLocale", "target locale")

之类的东西

1 个答案:

答案 0 :(得分:1)

没有有效的方法来执行您的要求,而是修改服务器。如果您无法更改服务器,则可以执行此操作:

  1. 保存当前区域设置
  2. 以编程方式切换到默认语言环境
  3. 遍历查找特定字符串的所有字符串资源
  4. 保存字符串的ID
  5. 切换回已保存的区域设置
  6. 在所需的区域设置中按ID获取字符串的翻译值
  7. 但这会有效非常慢。不要说我没有警告你。

    以下是代码示例:

    String translateFrom = "server reply";
    
    Resources res = getResources();
    Configuration conf = res.getConfiguration();
    Locale savedLocale = conf.locale;
    conf.locale = defaultLocale; // set to default locale here
    res.updateConfiguration(conf, null);
    
    // iterate through all string resources in default locale
    int idTranslateTo = 0;
    Field fields[] = R.string.class.getFields();
    for (Field field : fields) {
        int id = getResources().getIdentifier(field.getName(), "string", this.getPackageName()));
        if (translateFrom.equals(res.getString(id)) {
            idTranslateTo = id;
            break;
        }
    }
    
    // restore original locale
    conf.locale = savedLocale;
    res.updateConfiguration(conf, null);
    
    // retrieve translated string from saved locale
    if (idTranslateTo != 0) {
        String translateTo = res.getString(idTranslateTo);
    }