2011-01-17 3 views
7

Java 1.6에서 사용할 수있는 로케일에 추가 로케일을 추가하는 방법을 찾고 있습니다. 하지만 내가 만들고자하는 로케일에는 ISO-3166 국가 코드 나 ISO-639 언어 코드가 없습니다. 어쨌든 이것을 할 수있는 방법이 있습니까? 사용 가능한 Java 로케일 목록을 확장하는 방법

그래서 내가

처럼 뭔가를 기존 로케일을 확장 생각 나는 추가 할 로케일은 언어 이름에 차이가 있지만 인종 그룹이 작은, 더 까다 롭고 그들은 자신의 정체성 ;-)에 대해 수
UserDefinedLocale extends Locale { 
    UserDefinedLocale (Locale parentLocale) {...} 
} 

하지만 java.util.Locale의이 특히 하드 주위에 뭔가를 해킹 할 수있는, 최종 ... 그래서

, 자바 로케일 목록이 철저하다는 생각은? 내가 처음으로 더 많은 로케일을 놓칠까요?

답변

1

this answer를 참조하십시오

은 ... 당신은 SPI를 통해 추가 로케일에 대한 지원에 연결할 수 있습니다 ( here 설명). 예를 들어, 새로운 로케일에 날짜 포맷터를 제공하려면 DateFormatProvider 서비스를 구현하면됩니다. 기존 구현을 꾸미면이 작업을 수행 할 수 있습니다. ICU4J 라이브러리에서 원하는 지원을 제공하는지 살펴볼 수 있습니다.

+0

감사합니다. 슬프게도 모든 사용자 JRE를 조작하는 것은 내 응용 프로그램의 옵션이 아닙니다. "로케일 구분 서비스 SPI는 표준 Java 확장 메커니즘을 기반으로하므로 MANIFEST 파일에 몇 가지 트릭을 넣어 JAR 파일로 패키지화 할 수 있습니다. 여기서 찾을 수 있습니다) 확장 디렉토리에 배치하십시오. " – alfonx

4

java.util Locale에 대한 javadoc을 읽으십시오.

는 말한다 : 그것은 또한 말한다

: 는 "이 클래스의 생성자를 사용하여 로케일 객체를 생성"로케일 객체가 지역의 단지 식별자이기 때문에 "어떤 유효성 검사가 당신이 때를 수행하지 않습니다 로케일 구성 "

또한 다음과 같이 말합니다 : "로켈은 얻고 자하는 객체의 종류 (NumberFormat)를 식별하기위한 메커니즘입니다. 로켈은 객체 식별을위한 메커니즘 일 뿐이며 객체를 식별하는 메커니즘이 아닙니다. 객체 자체 "

그리고 마지막으로, getAvailableLocales에 대한 자바 독() 메소드는 말한다 :

"반환되는 배열은 자바 런타임 환경 설치 LocaleServiceProvider 구현에 의해 지원되는 로케일의 조합을 나타냅니다"그래서 당신은 언어 코드를 발명 할 필요가있는 표준 목록에 없으며 로케일의 식별자로 사용하십시오.

+0

_ "표준 목록에없는 언어 코드를 만들어서 로케일의 식별자로 사용해야합니다."_ - LocaleServiceProvider를 설치하는 것에 대해 인용 한 부분을 놓치셨습니까? –

+0

바로 가기에 동의합니다. 그러나 OP가 "사용 가능한 로케일 목록을 확장하는 것"에 대해 명시 적으로 설명하지 않았기 때문에, 나는 그가 원하는 것을 그가 새 인스턴스를 생성하기 위해 필요로한다고 생각했습니다. ResourceBundle을 사용하면 새로운 Locale 이외의 다른 것이 필요하지 않습니다. 번호 및 날짜 형식은 다른 언어의 규칙을 재사용 할 수 있습니다. 그러면 새 국가 코드 또는 변형 코드 만 사용해야 할 것입니다. –

관련 문제