2016-09-05 1 views
0

다른 언어로 된 여러 개의 XML이 있지만 프로그래밍 방식으로 XmlResourceParser를 얻으면 항상 기본 언어를 사용하게됩니다. Android localize xml 파일

내가 프로그래밍 방식으로 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를 지역화 할 방법이 없습니까?

도움 주셔서 감사합니다. Jose

답변

0

필자는 xml 파일을 현지화하는 작업을 마쳤습니다. 파일을 원시 폴더로 옮겨서 원시 파일 (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; 
    } 

나는 이것이 미래에 누군가를 위해 도움이 될 수 있기를 바랍니다 :

그리고 내가 사용하는 그들로부터 정보를 분석합니다. 감사 인사 호세