在我的应用程序中,为了进行本地化,我有一个values-ar
用于存放阿拉伯语字符串的文件夹。问题是在没有安装阿拉伯语的手机中,阿拉伯语字母似乎没有连接。我正在使用ArabicReshape 类来加入阿拉伯字母,但由于我的字符串太多,我无法手动继续一个一个地应用 reshaper 类。
我想知道我是否可以从文件中获取所有strings.xml
字符串,并通过循环将类一次性应用于字符串。这可能吗?
在我的应用程序中,为了进行本地化,我有一个values-ar
用于存放阿拉伯语字符串的文件夹。问题是在没有安装阿拉伯语的手机中,阿拉伯语字母似乎没有连接。我正在使用ArabicReshape 类来加入阿拉伯字母,但由于我的字符串太多,我无法手动继续一个一个地应用 reshaper 类。
我想知道我是否可以从文件中获取所有strings.xml
字符串,并通过循环将类一次性应用于字符串。这可能吗?
我不明白为什么您需要遍历所有字符串而不是在需要一个特定字符串时调用该类。
但正如你所问...
我想这可能会对你有所帮助;-)
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
}
}
您需要做的是将您的LOCALE设置为AR,以便资源管理器让您从 values-ar/strings.xml 中提取字符串,然后使用反射R.string.class.getFields()获取Field的列表. 然后遍历你的字符串并进行重塑。
尝试类似下面的代码片段:
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
}
}