Java - Locale 클래스

JS · 30 Jan 2021

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
....
댓글을 보거나 쓰려면 이 버튼을 눌러주세요.
codechachaCopyright ©2019 codechacha