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