Locale은 지역의 언어, 국가 등의 정보를 갖고 있는 객체입니다.
다음과 같이 Locale 객체 생성 및 Locale이 지원하는 메소드들에 대해서 알아보겠습니다.
- Locale 객체 생성
- Locale 정보 출력
- Default Locale
- 사용 가능한 모든 Locale
Locale 객체 생성
다양한 방법으로 Locale 객체를 생성할 수 있습니다.
생성자로 Locale 객체 생성
Locale 클래스는 다음과 같은 생성자들을 제공합니다.
- Locale(String language)
- Locale(String language, String country)
- Locale(String language, String country, String variant)
다음과 같이 Locale을 생성할 수 있습니다. 인자 language로 전달되는 en
은 Enlgish를 의미하고, country로 전달되는 인자 US
는 미국, GB
는 영국을 의미합니다.
Locale locale1 = new Locale("en", "US");
Locale locale2 = new Locale("en", "GB");
Builder로 Locale 객체 생성
다음과 같이 Bulider를 이용하여 Locale 객체를 생성할 수 있습니다.
Locale locale1 = new Locale.Builder()
.setLanguage("en")
.setRegion("US")
.build();
Constant로 Locale 객체 생성
Locale
클래스는 다음과 같이 일부 언어 및 국가들에 대한 Locale Constant를 제공합니다.
static public final Locale UK = createConstant("en", "GB");
static public final Locale US = createConstant("en", "US");
static public final Locale CANADA = createConstant("en", "CA");
....
모든 Locale Constant는 Oracle - Locale에서 확인하실 수 있습니다.
따라서 다음과 같이 객체를 새로 만들지 않고, 이미 만들어진 Constant를 사용할 수도 있습니다.
Locale locale1 = Locale.UK;
Locale locale2 = Locale.US;
미리 정의된 Constant를 보면 KOREA
, KOREAN
과 같이 국가 이름과 언어 이름이 각각 정의되어 있는 것을 볼 수 있습니다.
이것들의 차이점은, 국가 이름에는 language와 country code가 모두 설정되어있지만 언어 이름에는 language code만 설정되어 있다는 것입니다.
static public final Locale KOREA = createConstant("ko", "KR");
static public final Locale KOREAN = createConstant("ko", "");
Language, Country code
Language code는 ISO 639 alpha-2 또는 alpha-3의 language code가 설정되어야 합니다. Wikipedia - ISO 639-2 페이지를 보시면 코드들을 참조할 수 있습니다.
Country code 는 ISO 3166 alpha-2의 country code가 설정되어야 합니다. Wikipedia - 3166 페이지를 보시면 코드들을 참조할 수 있습니다.
Locale 정보 출력
다음과 같이 Locale의 정보를 출력해주는 다양한 메소드들이 제공됩니다.
Country 정보 출력
Locale locale1 = new Locale("en", "US");
System.out.println(locale1.getDisplayCountry());
System.out.println(locale1.getCountry());
System.out.println(locale1.getISO3Country());
- getDisplayCountry() : Country code가 아닌, 화면에 보여주기 적절한 이름을 리턴합니다. 예를 들어 Country code가
US
인 Locale은United States
를 리턴합니다. - getCountry() : Country code를 리턴합니다. code는 ISO 3166 2-letter code 또는 UN M.49 3-digit code 형태로 리턴됩니다.
- getISO3Country() : 3글자로 된 country code가 리턴됩니다. 만약 country 코드가 2글자로 설정하였더라도, 이 메소드는 3글자로 된 country code를 리턴합니다.
위 코드의 실행 결과는 다음과 같습니다.
United States
US
USA
Language 정보 출력
Locale locale1 = new Locale("en", "US");
System.out.println(locale1.getDisplayLanguage());
System.out.println(locale1.getLanguage());
System.out.println(locale1.getISO3Language());
- getDisplayLanguage() : Language code가 아닌, 화면에 보여주기 적절한 이름을 리턴합니다. 예를 들어, Language code가
en
인 Locale은English
를 리턴합니다. - getLanguage() : Language code를 리턴합니다.
- getISO3Languages() : 3글자로 된 language code를 리턴합니다.
위 코드의 실행 결과는 다음과 같습니다.
English
en
eng
getDisplayName()
getDisplayName()
는 Locale 정보를 화면에 보여주기 적절한 형식으로 문자열을 리턴합니다.
문자열은 getDisplayLanguage()
, getDisplayCountry()
등의 결과 값을 조합하여 만들어 집니다.
Locale locale1 = new Locale("en", "US");
System.out.println(locale1.getDisplayName());
위 코드의 실행결과는 다음과 같습니다.
English (United States)
getDisplayName(Locale inLocale)
getDisplayName()
에 인자로 Locale을 전달하면, 그 Locale의 언어로 문자열을 출력해 줍니다.
예를 들어, getDisplayName()
는 기본 Locale의 언어로 표현된 문자열이 출력됩니다.
하지만 getDisplayName(Locale.KOREA)
처럼 Locale을 전달하면 그 Locale의 언어로 표현된 문자열이 출력됩니다.
Locale locale = new Locale("fr", "CA");
System.out.println(locale.getDisplayName());
System.out.println(locale.getDisplayName(Locale.KOREA));
Output:
French (Canada)
프랑스어 (캐나다)
Locale.toString()
toString()
으로 Locale을 출력하면 Language_Country
형태로 출력됩니다.
Locale locale1 = new Locale("en", "US");
System.out.println(locale1);
Output:
en_US
Default Locale
Locale.getDefault()
는 JVM(Java Virtual Machine)에 설정된 기본 Locale 정보를 가져옵니다.
예를 들어 다음과 같이 기본 Locale 정보를 가져와 출력할 수 있습니다.
Locale defaultLocale = Locale.getDefault();
System.out.println(defaultLocale.getDisplayName());
Output:
English (United States)
Default Locale 변경
Locale.setDefault(Locale)
는 JVM의 기본 Locale 정보를 변경합니다.
다음과 같이 English (United States)
에서 français (Canada)
으로 기본 Locale을 변경할 수 있습니다.
Locale defaultLocale = Locale.getDefault();
System.out.println(defaultLocale.getDisplayName());
Locale locale = new Locale("fr", "CA");
Locale.setDefault(locale);
defaultLocale = Locale.getDefault();
System.out.println(defaultLocale.getDisplayName());
Output:
English (United States)
français (Canada)
사용 가능한 모든 Locale
Locale.getAvailableLocales()
는 사용 가능한 모든 Locale 객체들을 배열로 리턴합니다.
다음과 같이 모든 Locale 객체를 가져와서 출력할 수 있습니다.
Locale[] availableLocales = Locale.getAvailableLocales();
for (Locale locale : availableLocales) {
System.out.println(locale.getDisplayName());
}
Output:
Tigrinya (Ethiopia)
Tamil (Singapore)
Latvian
English (Niue)
Chinese (Simplified, Singapore)
Fulah (Adlam, Liberia)
English (Jamaica)
Kako
....
Related Posts
- Java - Unsupported class file major version 61 에러
- Java - String.matches()로 문자열 패턴 확인 및 다양한 예제 소개
- Java - 문자열 공백제거 (trim, replace)
- Java - replace()와 replaceAll()의 차이점
- Java - ArrayList 초기화, 4가지 방법
- Java - 배열 정렬(Sorting) (오름차순, 내림차순)
- Java - 문자열(String)을 비교하는 방법 (==, equals, compare)
- Java - StringBuilder 사용 방법, 예제
- Java - 로그 출력, 파일 저장 방법 (Logger 라이브러리)
- Java IllegalArgumentException 의미, 발생 이유
- Java - NullPointerException 원인, 해결 방법
- Seleninum의 ConnectionFailedException: Unable to establish websocket connection 해결
- Java - compareTo(), 객체 크기 비교
- Java - BufferedWriter로 파일 쓰기
- Java - BufferedReader로 파일 읽기
- Java charAt() 함수 알아보기
- Java - BigInteger 범위, 비교, 연산, 형변환
- Java contains()로 문자(대소문자 X) 포함 확인
- Java - Set(HashSet)를 배열로 변환
- Java - 문자열 첫번째 문자, 마지막 문자 확인
- Java - 문자열 한글자씩 자르기
- Java - 문자열 단어 개수 가져오기
- Java - 1초마다 반복 실행
- Java - 배열을 Set(HashSet)로 변환
- Java - 여러 Set(HashSet) 합치기
- Java - 명령행 인자 입력 받기
- Java - 리스트 역순으로 순회, 3가지 방법
- Java - 특정 조건으로 리스트 필터링, 3가지 방법
- Java - HashMap 모든 요소들의 합계, 평균 계산
- Java - 특정 조건으로 HashMap 필터링
- Java - 싱글톤(Singleton) 패턴 구현
- Java - 숫자 왼쪽에 0으로 채우기
- Java - String 배열 초기화 방법
- Java - 정렬된 순서로 Map(HashMap) 순회
- Java - HashMap에서 key, value 가져오기