Android本地化xml文件

Posted

技术标签:

【中文标题】Android本地化xml文件【英文标题】:Android localize xml file 【发布时间】:2016-09-05 18:08:45 【问题描述】:

我有几个不同语言的 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?

感谢您的帮助。何塞

【问题讨论】:

【参考方案1】:

我终于设法本地化了我的 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;
    

我希望这对将来的某人有用。 问候 何塞

【讨论】:

以上是关于Android本地化xml文件的主要内容,如果未能解决你的问题,请参考以下文章

Java / Android - 读取、操作 XML 文件并将其保存到内部存储

Android设置本地字体文件ttf

前端操作xml,从本地获取xml格式的文件,并且解析xml文件,拿到需要的值

前端操作xml,从本地获取xml格式的文件,并且解析xml文件,拿到需要的值

前端操作xml,从本地获取xml格式的文件,并且解析xml文件,拿到需要的值

如何解析<IMG SRC =";值QUOT;从这个XML使用DOM