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

Java 获取strings.xml中的所有字符串,java,android,string,localization,iteration,Java,Android,String,Localization,Iteration,在我的应用程序中,对于本地化,我有一个阿拉伯语字符串的values ar文件夹。问题是,在没有安装阿拉伯语的手机中,阿拉伯语字母表似乎没有连接。我正在使用来连接阿拉伯字母表,但是因为我有太多的字符串,我无法手动一个接一个地应用整形器类 我想知道是否可以从strings.xml文件中获取all字符串,并通过循环将类应用于字符串。这可能吗?我不明白为什么需要迭代所有字符串,而不是在需要一个特定字符串时调用类 但正如你所问 我想这可能对你有帮助;-) 您需要做的是将您的LOCALE设置为AR,以便资源

在我的应用程序中,对于本地化,我有一个阿拉伯语字符串的
values ar
文件夹。问题是,在没有安装阿拉伯语的手机中,阿拉伯语字母表似乎没有连接。我正在使用来连接阿拉伯字母表,但是因为我有太多的字符串,我无法手动一个接一个地应用整形器类


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

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

但正如你所问

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


您需要做的是将您的LOCALE设置为AR,以便资源管理器允许您从值AR/strings.xml中提取字符串,然后使用反射获取一个s列表。然后遍历字符串并进行重塑

请尝试类似以下代码段的操作:

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
    }
}

很遗憾,我认为这是不可能的…@Orabîg很抱歉让您失望,但这是可能的,请参阅答案;-)好的方面:)没有想到使用反射。格拉茨…我问是因为好奇。
循环中的
final
有什么用?对不起,我不明白。当我需要一个特定的字符串时,我如何调用该类?我无法尝试,因为我没有时间,也没有阿拉伯语知识,但是ArabicReshape.Reformate(StringStr)应该可以完成这个任务。我已经在做了。但是字符串太多,无法为每个字符串手动应用该类。哇。它起作用了。但是我得到了strings.xml字符串和其他一些额外的字符串。因为R类有
public static final类字符串{}
内部类。在这个类中,有一些额外的静态final变量,比如
public static final int abc\u action\u bar\u home\u description=0x7f060000包括strings.xml字符串。现在如何仅获取strings.xml字符串
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
    }
}