获取strings.xml中的所有字符串

时间:2013-01-17 22:33:14

标签: java android string localization iteration

在我的应用中,对于本地化,我有一个用于阿拉伯字符串的values-ar文件夹。问题是在没有安装阿拉伯语的手机中阿拉伯字母似乎没有连接。我正在使用ArabicReshape class加入阿拉伯语字母表,但由于我有太多字符串,我无法手动继续逐个应用整形器类。

我想知道我是否可以从strings.xml文件中获取所有字符串,并通过循环遍历将类应用于字符串。这可能吗?

2 个答案:

答案 0 :(得分:6)

我不明白为什么你需要迭代所有字符串而不是在需要一个特定字符串时调用该类。

但正如你问的那样......

我想这可能对你有帮助; - )

Field[] fields = R.string.class.getFields();
    for(final Field field : fields) {
       String name = field.getName(); //name of string
       try{
           int id = field.getInt(R.string.class); //id of string
       }catch (Exception ex) {
           //do smth
       }
    }

答案 1 :(得分:1)

您需要做的是将 LOCALE 设置为 AR ,以便资源管理器允许您从values-ar / strings.xml中提取字符串,然后使用反射Field获取R.string.class.getFields()的列表。然后遍历你的字符串并进行重塑。

尝试类似以下代码段:

Resources resources = getResources();
int resourceId = 0;
String resourceString;
Field[] stringFields = R.string.class.getFields();
for(Field stringField : stringFields) {

    try {
        resourceId = stringField.getInt(R.string.class);
    } catch (IllegalArgumentException e) {
        e.printStackTrace();
        continue;
    } catch (IllegalAccessException e) {
        e.printStackTrace();
        continue;
    }

    resourceString = resources.getString(resourceId);
    if(resourceString != null && resourceString.length() > 0) {
        // do your reshaping on the resoureString
    }
}