Java 프레임워크 만들기 - JSP

자바 리소스번들을 이용한 다국어 메시지 처리 - Java ResourceBundle, 이클립스(Eclipse)

carrotweb 2021. 4. 11. 17:54
728x90
반응형

ResourceBundle은 키(key)와 값(value)으로 구성된 프로퍼티 파일(properties)을 읽고 저장할 수 있는 기능을 제공합니다. 그리고 로케일(locale)을 통해 국제화를 지원합니다.

ResourceBundle은 다음의 특징을 가지는 있습니다.

- 쉽게 현지화할 수 있고 다른 언어로 번역해서 사용할 수 있습니다.

- 한 번에 여러 로케일(언어와 국가)을 처리합니다.

- 향후에 더 많은 로케일(언어와 국가)이 지원되게 쉽게 수정할 수 있습니다.

국제화 지원을 위해 프로퍼티 파일 명은 "{프로퍼티명}_{언어코드}_{국가코드}"으로 구성됩니다.

ResourceBundle은 "{프로퍼티명}_{언어코드}_{국가코드}" -> "{프로퍼티명}_{언어코드}" -> "{프로퍼티명}" 순으로 프로퍼티 파일을 찾아 처리합니다.

예를 들어, 프로퍼티 파일 명이 "message_en_US.properties"라면 언어코드가 "en"(영어)이고 국가코드가 "US"(미국)인 "message" 프로퍼티입니다. 그리고 동일한 언어권("en")에 사용하고 싶다면 "{국가코드}"을 제외한 "message_en.properties"로 파일명으로 하고, 모든 언어권에서 사용하고 싶다면 "message.properties"으로 파일명을 구성하면 됩니다.

ResourceBundle resourceBundle = ResourceBundle.getBundle("message");

시스템 JVM의 로케일(locale)로 읽고 싶다면

ResourceBundle resourceBundle = ResourceBundle.getBundle("message", Locale.getDefault());

사용자 웹 브라우저 로케일(locale)로 읽고 싶다면

ResourceBundle resourceBundle = ResourceBundle.getBundle("message", request.getLocale());

이렇게 로케일(locale)을 적용하면 시스템이나 사용자 웹 브라우저 환경에 맞게 적용할 수 있습니다.

"getBundle"는 "WEB-INF/classes/"를 기준(컴파일된 위치)으로 패키지에 있는 프로퍼티 파일(.properties)을 읽습니다.

예를 들어, "test.message"라면

ResourceBundle resourceBundle = ResourceBundle.getBundle("test.message");

"WEB-INF/classes/test/"에 "message_en_US.properties"이거나 "message_en.properties" 또는 "message.properties" 파일명으로 프로퍼티 파일이 있어야 합니다.

프로퍼티 파일은 프로젝트의 "Java Resources"에서 "src/main/resources"을 기준으로 구성하면 됩니다.

 

"getString"를 통해 프로퍼티 파일에서 값을 가져올 수 있습니다.

String value = resourceBundle.getString("key1");
System.out.println("key value : " + value);

"message.properties"파일에서 "key1"를 읽어와 출력합니다.

key value : value1

프로퍼티 파일에서 "키"는 "."(도트)를 포함하여 처리할 수 있습니다.

String value = resourceBundle.getString("key2.text1");
System.out.println("key value : " + value);

"message.properties"파일에서 "key2.text1"를 읽어와 출력합니다.

key value : value2

 

728x90
반응형