2016-09-05 8 views
0

私はいくつかの言語で複数のXmlを持っていますが、XmlResourceParserをプログラム的に取得すると、私はいつもデフォルト言語を取得しています。Android localize xmlファイル

これは私がプログラム的にXMLを取得しています方法です:

XmlResourceParser xpp = TCXApplication.getContext().getResources().getXml(R.xml.some_name); 

私のXMLは次のようになります。私は、すべての言語の異なるフォルダにこのファイルの異なるバージョン(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-es、xml-fr、xml-it)、私はデバイス言語を他の言語に変更しても、常にデフォルトのバージョンを取得しています... 何か間違っていますか? plistをローカライズする方法はありませんか?

ありがとうございます。 Jose

答えて

0

最終的に私のXMLファイルをローカライズすることができました。ファイルを元のフォルダに移動してしまったので、(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; 
    } 

私は、これは将来的に誰かのために有用であることを願って:

とは、私が使用してそれらの情報を解析します。 よろしくお願いいたします。 Jose

関連する問題