2013-05-31 2 views
3

내 문제는 모든 텍스트가 webservices에서 비롯된 것입니다. 그래서 처음에는 webservice를 호출하고 strings.xml에 텍스트를 설정해야합니다. strings.xml로 작성하는 것은 불가능하다는 것을 알고 있습니다.하지만 우리는 iOs에서 동일한 문제가 있었으며 해결책은 여기에서 발견되었습니다 http://iosapplove.com/archive/2013/01/localizable-strings-how-to-load-translations-dynamically-and-use-it-inside-your-iphone-app/.android, text from webservices

그럼 내 질문은 : 안드로이드에서도 비슷한 방법이 있습니까? (필자는 아니오라고 생각합니다)

데이터베이스 또는 sharedPreferences와 같은 다른 방법이 있지만 이러한 솔루션은별로 효과가 없습니다. 또한 응용 프로그램에는 많은 언어가 포함됩니다.

두 번째 질문 : 이렇게하는 가장 좋은 방법은 무엇입니까?

+0

정말 응용 프로그램에서 텍스트를 통합 할 수 없습니까? – njzk2

+0

예. 고객의 요청입니다. – mrroboaat

+0

인터넷에서 검색 한 경우 텍스트 파일로 저장하는 것이 어떤 문제입니까? 데이터베이스 또는 공유 환경 설정을 사용하지 않으려는 경우. –

답변

0

이미 알고 있듯이 strings.xml 파일은 APK에 존재하지 않습니다. 이것은 getResources(). getString (R.string.mystring)이 리턴 할 것을 변경할 수있는 방법이 없다는 것을 의미합니다.

"고객의 요청입니다."라고 말하면됩니다. 제 제안은 고객에게 "이것은 나쁜 생각입니다"라고 말합니다. 왜냐하면 그것은 정말로 그렇습니다.

고객이 계속되는 경우 유일한 언어로 텍스트를 다운로드하여 앱 외부 파일 저장소에 저장하는 것이 유일한 방법이라고 생각합니다. properties 파일을 사용하는 것이 좋습니다. Load it as an InputStreamget strings from it.

앱이 비행 모드이거나 시작했을 때 네트워크를 사용할 수 없다면 어떻게 될지 생각 했습니까? 기본값을 제공합니까?

또한이 솔루션을 사용하면 속성 파일에서 다운로드 한 번역에 시스템이 액세스 할 수 없으므로 TextViews 또는 유사한 XML 텍스트를 설정할 수 없습니다.

앞서 계속 진행한다면 속성 파일을 다른 클래스로 래핑하고 텍스트가 속성 파일에없는 경우 strings.xml에있는 텍스트로 되돌아 가도록 제안 할 것입니다. 또는 어떤 이유로 다운로드하지 않은 경우 :

class TextRetriever { 

    // the downloaded texts go here 
    private Properties properties; 

    private Context context; 

    public String getString(String key) { 
     String s = properties.getProperty(key); 
     // not found in properties file 
     if(s == null) { 
      // fall back to value in strings.xml 
      s = context.getResources().getIdentifier(key, "string", context.getPackageName()) 
     } 
     return s; 
    } 
}