Android 本地化 xml 文件
Android localize xml file
我有几个不同语言的 Xml,但是当我以编程方式获取 XmlResourceParser 时,我总是获取默认语言。
这就是我以编程方式获取 Xml 的方式:
XmlResourceParser xpp = TCXApplication.getContext().getResources().getXml(R.xml.some_name);
我的 Xml 看起来像这样:
<?xml version="1.0" encoding="utf-8"?>
<plist version="1.0">
<array>
<dict>
<key>type</key>
<string>some</string>
<key>other_some</key>
<array>
<string>...</string>
<string>...</string>
<string>...</string>
</array>
<key>other_other_some</key>
<array>
<string>...</string>
<string>...</string>
<string>...</string>
</array>
</dict>
</array>
</plist>
我在每种语言的不同文件夹中都有不同版本的文件(xml、xml-es、xml-fr、xml-it)但是即使我将设备语言更改为其他一些语言,我也始终获得默认版本...
难道我做错了什么?没有办法本地化 plist 吗?
感谢您的帮助。何塞
我终于设法本地化了我的 xml 文件,我所做的是将我的文件移动到 raw 文件夹,所以我最终得到了一个 (raw, raw-es, raw-it, raw- fr)
为了解析来自他们的信息,我使用:
private List<PlistItem> parse() {
try {
InputStream inputStream = MyApplication.getContext().getResources()
.openRawResource(R.raw.some);
XmlPullParserFactory pullParserFactory;
pullParserFactory = XmlPullParserFactory.newInstance();
XmlPullParser xmlPullParser = pullParserFactory.newPullParser();
xmlPullParser.setInput(inputStream, null);
String key = null;
PlistItem item = null;
int eventType = xmlPullParser.getEventType();
while (!(eventType == XmlPullParser.END_TAG
&& xmlPullParser.getName() != null
&& xmlPullParser.getName().equals("plist"))) {
if (eventType == XmlPullParser.START_DOCUMENT) {
list = new ArrayList<>();
} else if (eventType == XmlPullParser.START_TAG && xmlPullParser.getName().contentEquals(PLIST_ELEMENT_DICT)) {
item = new PlistItem();
} else if (eventType == XmlPullParser.END_TAG && xmlPullParser.getName().contentEquals(PLIST_ELEMENT_DICT)) {
list.add(item);
} else if (eventType == XmlPullParser.START_TAG && xmlPullParser.getName().contentEquals(PLIST_ELEMENT_KEY)) {
xmlPullParser.next();
key = xmlPullParser.getText();
} else if (eventType == XmlPullParser.START_TAG && xmlPullParser.getName().contentEquals(PLIST_ELEMENT_STRING)) {
xmlPullParser.next();
if (key != null && item != null) {
if (key.contentEquals(PLIST_VALUE_TYPE)) {
item.type = xmlPullParser.getText();
}
if (key.contentEquals(PLIST_VALUE_SOME)) {
item.some.add(xmlPullParser.getText());
}
if (key.contentEquals(PLIST_VALUE_OTHER_SOME)) {
item.otherSome.add(xmlPullParser.getText());
}
}
}
eventType = xmlPullParser.next();
}
inputStream.close();
} catch (Exception e) {
e.printStackTrace();
}
return list;
}
我希望这对以后的人有用。
问候
何塞
我有几个不同语言的 Xml,但是当我以编程方式获取 XmlResourceParser 时,我总是获取默认语言。
这就是我以编程方式获取 Xml 的方式:
XmlResourceParser xpp = TCXApplication.getContext().getResources().getXml(R.xml.some_name);
我的 Xml 看起来像这样:
<?xml version="1.0" encoding="utf-8"?>
<plist version="1.0">
<array>
<dict>
<key>type</key>
<string>some</string>
<key>other_some</key>
<array>
<string>...</string>
<string>...</string>
<string>...</string>
</array>
<key>other_other_some</key>
<array>
<string>...</string>
<string>...</string>
<string>...</string>
</array>
</dict>
</array>
</plist>
我在每种语言的不同文件夹中都有不同版本的文件(xml、xml-es、xml-fr、xml-it)但是即使我将设备语言更改为其他一些语言,我也始终获得默认版本... 难道我做错了什么?没有办法本地化 plist 吗?
感谢您的帮助。何塞
我终于设法本地化了我的 xml 文件,我所做的是将我的文件移动到 raw 文件夹,所以我最终得到了一个 (raw, raw-es, raw-it, raw- fr)
为了解析来自他们的信息,我使用:
private List<PlistItem> parse() {
try {
InputStream inputStream = MyApplication.getContext().getResources()
.openRawResource(R.raw.some);
XmlPullParserFactory pullParserFactory;
pullParserFactory = XmlPullParserFactory.newInstance();
XmlPullParser xmlPullParser = pullParserFactory.newPullParser();
xmlPullParser.setInput(inputStream, null);
String key = null;
PlistItem item = null;
int eventType = xmlPullParser.getEventType();
while (!(eventType == XmlPullParser.END_TAG
&& xmlPullParser.getName() != null
&& xmlPullParser.getName().equals("plist"))) {
if (eventType == XmlPullParser.START_DOCUMENT) {
list = new ArrayList<>();
} else if (eventType == XmlPullParser.START_TAG && xmlPullParser.getName().contentEquals(PLIST_ELEMENT_DICT)) {
item = new PlistItem();
} else if (eventType == XmlPullParser.END_TAG && xmlPullParser.getName().contentEquals(PLIST_ELEMENT_DICT)) {
list.add(item);
} else if (eventType == XmlPullParser.START_TAG && xmlPullParser.getName().contentEquals(PLIST_ELEMENT_KEY)) {
xmlPullParser.next();
key = xmlPullParser.getText();
} else if (eventType == XmlPullParser.START_TAG && xmlPullParser.getName().contentEquals(PLIST_ELEMENT_STRING)) {
xmlPullParser.next();
if (key != null && item != null) {
if (key.contentEquals(PLIST_VALUE_TYPE)) {
item.type = xmlPullParser.getText();
}
if (key.contentEquals(PLIST_VALUE_SOME)) {
item.some.add(xmlPullParser.getText());
}
if (key.contentEquals(PLIST_VALUE_OTHER_SOME)) {
item.otherSome.add(xmlPullParser.getText());
}
}
}
eventType = xmlPullParser.next();
}
inputStream.close();
} catch (Exception e) {
e.printStackTrace();
}
return list;
}
我希望这对以后的人有用。 问候 何塞