2010-06-28 3 views
2

리소스 번들 및 i18n을 많이 사용하는 J2SE 응용 프로그램 (키오스크 스타일 앱)으로 작업하고 있습니다. 여기에는 단순한 번역이 아니라 형식 및 기타 관심사가 포함됩니다. 리소스 로딩을 균질화 할 수있는 사용자 지정 논리가 있지만 상당히 간단합니다. 내가 가진 문제는 MissingResourceException입니다. 응용 프로그램에서 사용자 정의 논리를 무시하고 ResourceBundle 클래스를 직접 호출하여이 특정 번들을로드하더라도 Java는 특정 로켈에 대해 사용자 정의 논리를로드 할 수 없습니다. 여기에 스택 트레이스 루트 예외는 다음과 같습니다자바 누락 리소스

Caused by: java.util.MissingResourceException: Can't find bundle for base name version1/FormatResource, locale en_GB 
at java.util.ResourceBundle.throwMissingResourceException(ResourceBundle.java:836) 
at java.util.ResourceBundle.getBundleImpl(ResourceBundle.java:726) 
at java.util.ResourceBundle.getBundle(ResourceBundle.java:576) 

자원 번들 내 클래스 경로의 상단에 이클립스에서 클래스 폴더에 디렉토리 "버전 1"입니다. 이 폴더에는 동일한 리소스 번들 로딩 로직을 사용하여 잘로드 된 다른 리소스 번들뿐만 아니라 시스템 클래스 로더를 사용하여로드 할 때 잘로드되는 수많은 XML 구성이 포함되어 있습니다. 자원 번들에 대한 관련 파일은 다음과 같습니다 내 응용 프로그램이 폴란드 로케일로 시작되면

FormatResource_cs_CZ.properties 
FormatResource_en_GB.properties 
FormatResource_fr_BE.properties 
FormatResource_fr_FR.properties 
FormatResource_hu_HU.properties 
FormatResource_nl_BE.properties 
FormatResource_nl_NL.properties 
FormatResource_pl_PL.properties 
FormatResource_sk_SK.properties 

이 모든 것이 괜찮습니다. 폴란드어 로케일로 사용자로 로그인하면 모든 것이 정상입니다. 영국 사용자로 로그인하면 응용 프로그램은 모든 en_GB 번들 (번역, 포맷터 등)을로드하려고 시도하고이 번들에서 실패합니다. FormatResource_en_GB.properties은 클래스 경로에 있습니다. 위의 파일 목록은 명령 줄에서 복사하여 붙여 넣기합니다.

마지막으로 재미있는 점은 version1 디렉토리에 FormatResource_en_US.properties을 정의하면 FormatResource_pl_PL.properties 파일도로드되지 않아 응용 프로그램이 시작되지 않는다는 것입니다.

누구든지 아이디어가 있습니까?

답변

0

권한과 같은 운영 체제 문제 & 파일을 테스트 해 봅니다.

FormatResource_en_GB.properties의 이름을 바꿔서 작동 중일 때 FormatResource 파일 중 하나를 복사하십시오.

0

미국을 목록의 맨 위에 올릴 때 언급 한 것이 흥미 롭습니다. 그 중 하나를로드하고 다른 하나는로드하지 않는 것이 좋습니다 (폴란드어가 맨 위에있을 때와 비슷합니다). 다음 자원 번들을 찾을 때 로케일을 전환합니까? 또는 프로그램이 처음 시작했을 때 기본 설정을 유지하고 있습니까?

또 다른 생각은 클래스 로더와 관련이 있습니다. 속성 파일이 제대로 위치하지 않을 때마다 (클래스가 예상되는 위치에 있더라도) 클래스 로더가로드하는 방법을 살펴 보았습니다. . 대개 내가 의심했던 것 (다른 곳의 중복 된 파일 또는 서로 충돌하는 여러 클래스 로더와)이 다릅니다.

시도할만한 두 가지 생각.