2016-08-07 2 views
0

ResourceBundle 국제화를 위해로드하기 위해 내 프로젝트의 클래스 경로가 아닌 다른 폴더에서 .properties 파일을로드하려고합니다.[i18n] 클래스 패스에서 리소스 번들로드하기

MyProject 
    | 
    - src 
     | 
     -com 
     | 
      -company 
      | 
       -UI 
       -launcher 
       -resources 
        | 
        -i18n.properties 
        -i18n_en_US.properties 
        -i18n_es_ES.properties 
        -i18n_zh_CN.properties 

물론, 그것은 src 폴더로 같은 수준 아래의 모든 i18n 파일을 넣는 것보다 명확이다 :이 같은 구조를 가지고있다. 그래서 어떻게 그들을로드 할 수 있습니까? 보다 정확하게, 리소스 번들을로드하는 과정에서 baseName 부분을 어떻게 넣어야합니까?

bundle = ResourceBundle.getBundle(baseName,localeInSettings); 

나는 그 답을 보았지만 그렇게 명확하지는 않다. 내가 뭔가를 발견하면, 나는 그것을 모두와 공유하고 그것을 더 분명하게하러옵니다.

+0

요점은 "src"위치는 중요하지 않습니다. 문제는 배포하는 것을 빌드 할 때 어디에서 복사합니까? – GhostCat

+0

만약 모든 클래스를 jar 파일로 압축한다면 jar 파일 내부 구조가 변경되어 위치가 바뀔 수 있습니까? 그래서 나는 그것이 기본적으로 바뀌지 않아야한다고 생각한다. 그것을 피해야합니다 .. – FaithReaper

답변

0

아직 클래스 경로에 있습니다. 그냥 기본 패키지가 아닙니다. 실험이 입증 있도록 기본 이름이

com.company.resources.i18n 
0

해야한다, 양쪽 형태 일 : 첫 번째

com/WindThunderStudio/resources/i18n 

그리고,

com.WindThunderStudio.resources.i18n 

를, 그것은 일반적인 특성 파일을로드 다르다 완전한 경로 앞에 "/"를 사용하여 절대 경로를 기록하지 마십시오.

둘째, baseName에서 "정규화 된 이름", 즉 "."이 (가) 사용되기 때문에 첫 번째 양식이 모두 예상대로 작동합니다. 두 번째 형식으로 JavaDoc 페이지 ResourceBundle에서 인용 할 수 있습니다.

참고 : baseName 인수는 정규화 된 클래스 이름이어야합니다. 다만, 이전의 버젼과의 호환성을 위해서 (때문에), Sun의 Java SE Runtime Environment에서는 이것을 검증하지 않기 때문에, 완전 클래스 명 (「.」를 사용) 대신에 패스 명 (「/」를 사용)을 지정해 PropertyResourceBundles에 액세스 할 수 있습니다. .