2011-01-08 3 views
22

나는 모든 resourcebundle 값을 테이블에 가지고 있으며 요구 사항에 따라 형식을 지정합니다 .i 페이지 상단의 드롭 다운 메뉴에서 사용자 선택에 따라 웹 사이트의 언어를 변경해야합니다. 언어 코드를 en_US로 사용하면 잘 작동합니다. en-Us를 언어 코드로 사용하면 작동하지 않습니다. 무엇이 문제 일 수 있습니다. 따라야 할 올바른 것은 무엇입니까? 미국 자바에서 3166
에 의해 지정된 국가 코드 인 반면en-US와 en_US의 로캘을 만드는 것과 다른 점은 무엇입니까?

답변

17

"EN은"ISO 639에 의해 지정된 언어 코드는, 로케일 객체는 languageCode_countryCode (예 : ko 페이지) 및하지 languageCode- 같은 언어를 인식 countryCode.

21

"en-US"는 IETF language tag입니다. Java'a Locale 클래스는 명확하게 IETF 언어 태그를 기반으로했지만 국가 코드 (및 변형)에서 언어 코드를 분리 할 때 하이픈 대신 밑줄을 사용하므로 LocaletoString()을 호출하면 en_US이됩니다.

자바 7부터 Locale.forLanguageTag(String)toLanguageTag()을 사용하면 언어 태그와 Locale 개체간에 변환 할 수 있습니다.

문자열을 Locale 개체로 변환 할 때 첫 번째 구성 요소 (언어 코드)를 줄이고 두 번째 구성 요소 (국가 코드)를 대문자로 사용하여 구성 요소를 하이픈과 밑줄로 분리하여 정규화하는 것이 좋습니다.

+0

이 답변은 Java 코드에서 수행 할 작업에 대한 최선의 응답입니다. 다른 언어/프레임 워크의 경우 그다지 많지 않습니다. 다른 규칙이있는 프레임 워크간에 호출 할 때는 변환이 필요하다는 것을 알 필요가있는 코더의 "큰 실수"가 있습니다. 호출하는 프레임 워크의 규칙을 사용하는 것이 좋습니다. 다른 프레임 워크를 호출 할 때 변환을 수행하는 "프록시"를 제공하십시오. 왜? 호출 된 프레임 워크가 다른 규칙을 사용한다는 것을 알 필요가 없습니다. 기여자는 그 중 하나를 사용하여 하나의 대회 만 "볼"것입니다. – DaBlick

6

Locale us = Locale.forLanguageTag("en-US")us.toLanguageTag()을 사용할 수 있으며, 오류가 발생하기 쉬운 구현을 만들지 않고도 변환 작업을 수행 할 수 있습니다.

1

Java8 이후 로캘 초기화는 "en-US"언어 태그를 사용하여 수행해야합니다. Locale.forLanguageTag ("en-US"). toString(); en_US

Locale.forLanguageTag ("en_US")는 필수 로켈을 생성하지 않습니다. 시스템 로케일을 기본값으로 사용합니다. Locale.forLanguageTag ("en_US"). toString()이 null을 반환합니다.

관련 문제