在我的應用中,對於本地化我有一個values-ar
阿拉伯字符串文件夾。問題在於阿拉伯語字母在沒有安裝阿拉伯語的手機中顯示爲未連接。我使用ArabicReshape class加入阿拉伯字母,但由於字符串太多,我無法一個接一個地手動繼續應用整形類。獲取strings.xml中的所有字符串
我想知道我是否可以從strings.xml
文件中獲得全部字符串,並通過循環遍歷它們將該類應用於字符串。這可能嗎?
在我的應用中,對於本地化我有一個values-ar
阿拉伯字符串文件夾。問題在於阿拉伯語字母在沒有安裝阿拉伯語的手機中顯示爲未連接。我使用ArabicReshape class加入阿拉伯字母,但由於字符串太多,我無法一個接一個地手動繼續應用整形類。獲取strings.xml中的所有字符串
我想知道我是否可以從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
}
}
我不認爲這是可能的不幸...... –
@Orabîg抱歉讓你們失望,但是這是可能的,看到的答案;-) –
好點:)沒有想到使用反射。格拉茨... –