2016-11-08 5 views
0

src -> main -> res -> 값 아래에있는 string.xml 파일을 전체적으로 읽고 싶습니다.값 폴더에있는 파일을 읽는 방법

내 응용 프로그램에서 발생할 수있는 일부 현지화 문제를 처리하기 위해 특정 파일이 필요합니다. 선택한 장치 언어가 프랑스어이지만, 여전히 기본 영어 문자열의 일부 값을 원합니다. .xml 파일 은 특정 시나리오의 경우에만입니다. 따라서 values ​​/ strings.xml에있는 모든 리소스는 values-fr/strings.xml에 있어야하며 값 -fr 이 아닌 값은 옵션에서 제거해야합니다. 우리가 values/strings.xml에서 values-fr/strings.xml 파일에서 text_name의 값을 수신하지 것이기 때문에

  • 물론, getString(R.string.text_name)의 종류의 솔루션은 허용되지 않습니다.
  • 이뿐만 아니라 도움이되지 않습니다 :

    getResources().getIdentifier("text_name", "string", getPackageName()); 
    
  • 이뿐만 아니라 도움이되지 않습니다, string.xml 원시 자산이 아니기 때문에.

    context.getResources().openRawResource(R.raw.test) context.getAssets().open("values/string.xml");

내가 무엇을 시도했다, 그러나 아무도 나에게 내가 찾고 있어요 파일 포기하지 : 특정 사용

Uri.parse("android.resource://" + context.getPackageName() + resource_id_for_string_file); 
  • :

    1. 사용하여 URI를 파일 경로 :

      File file = new File("/src/res/values/strings.xml"); 
      File file = new File("/res/values/strings.xml"); 
      
    2. this post (class.getClass().getResourceAsStream(...))도 작동하지 않았습니다.

    솔직히 말해서 꽤 쉬울 지 모르지만 나는이 문제를 해결할 수있는 곳을 찾을 수 없습니다.

  • +0

    여전히 영어 값을 추가 할 수 있습니다를 통과해야 프랑스어 파일의 특정 키에 대해?! – Yazan

    +0

    접근 방식이 올바르지 않습니다. 'values-fr/strings.xml'과'values ​​/ strings.xml'에서 몇몇 값을 읽으려면 값/문자열에서 가져와야 할 값을 추가하지 마십시오. xml'을'values-fr/strings.xml'으로 변환합니다. 특정 로케일에 대한 값이없는 경우 기본 로케일이 사용됩니다. –

    +0

    고마워,하지만 가치 - fr을 문자열에있는 모든 리소스가 필요하기 때문에 그것은 도움이되지 않습니다 (특정 시나리오에서 해당 파일에 액세스 할 수 및 값/strings.xml 파일을 이동하려면) 원하는 경우 – Dus

    답변

    1

    영어로 텍스트를 원한다면 영어로 된 텍스트를 프랑스어 string.xml 파일로만 언급 할 것을 제안합니다. 자동으로 영어 string.xml 파일에서만 가져옵니다. 명시 적으로 읽을 필요는 없습니다. 또는 그 값을 프랑스 string.xml 파일에 추가하지 마십시오. 기본 string.xml 파일에서 직접 참조합니다.

    +1

    그게 아니라면, 나는 여러 경우에 그것을 통제 할 수 있기를 원합니다. 그래서 당신이 제안하는 것을 할 수 없습니다. – Dus

    0

    당신이해야 할 일이 있다면, 현재 로케일이 US 인 동안 app의 Locale을 (FR)로 설정 한 다음, 관련 파일에서 값을 가져올 getString()을 호출하고 다시 이 방법 (임시 로케일을 설정하기 전에) 원래 선택한 로케일이 당신이

    public String getString(int id, Locale fromLocale, Context ctx){ 
        final Locale oldDefaultLocale = Locale.getDefault(); 
    
        Locale.setDefault(fromLocale); 
        Configuration config = getBaseContext().getResources().getConfiguration(); 
        final Locale oldConfigLocale = config.locale; 
        config.locale = fromLocale; 
        ctx.getResources().updateConfiguration(config, 
          getBaseContext().getResources().getDisplayMetrics()); 
        final String result = ctx.getString(id); 
    
        Locale.setDefault(oldDefaultLocale); 
        config.locale = oldConfigLocale; 
        ctx.getResources().updateConfiguration(config, 
          getBaseContext().getResources().getDisplayMetrics()); 
    
        return result; 
    } 
    

    로케일 변경 사용 같은 API 메소드에게 꼬임을 유지하지/그것은 다른 뷰/자원에 영향을 미치지 않습니다 메소드 실행 시 즉시 복귀 ...당신은 부모 활동/조각이를 배치하면 화면에

    , 당신은 Context ctx을 통과하지 않아도하지만 백분율 클래스 또는 무언가에, 당신은