본문 바로가기
Old Posts/Java

[Java] 리소스 번들(ResourceBundle) 사용법 및 예제

by A6K 2021. 6. 29.

자바 프로그램을 작성할 때, 로케일을 통한 국제화를 지원해야할 경우가 있다. 에러 메시지를 로케일에 따라 한국어로 찍었다가 일본어, 영어로 출력하는 경우를 생각해볼 수 있다. 자바는 리소스 번들(ResourceBundle)을 통해 이런 기능을 지원한다.

ResourceBundle

리소스번들은 한번에 여러 로케일(언어와 국가)을 처리할 수 있다. 쉽게 현지화할 수 있고, 다른 언어로 번역해서 사용할 수 있다. 향후에 더 많은 로케일이 지원되어 쉽게 수정할 수 있다.

국제화 지원을 위한 프로퍼티 파일은 다음과 같이 구성되어야 한다.

${프로퍼티명}_${언어코드}_${국가코드}.properties
${프로퍼티명}_${언어코드}.properties
${프로퍼티명}.properties

예를 들어, 'message_en_US.properties' 파일은 미국에서 사용하는 영어로 구성된 메시지들을 모아놓은 프로퍼티 파일이다. 리소스번들은 "${프로퍼티명}_${언어코드}_${국가코드}.properties" -> "${프로퍼티명}_${언어코드}.properties" -> "${프로퍼티명}.properties" 순으로 프로퍼티 파일을 찾는다. 만약 모든 로케일에서 사용하고 싶다면 그냥 "${프로퍼티명}.properties"에 값들을 구성하면 된다.

리소스 번들 로드

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

이 코드를 실행하면 message 프로퍼티에 대한 내용을 로드한다.

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

이 코드를 실행하면 JVM의 로케일에 해당하는 프로퍼티 파일을 로드한다. 프로퍼티 파일을 로드할 때 이런식으로 로케일을 명시하면 적당한 프로퍼티 파일을 읽어서 로드하게 된다. 

getBundle() 메소드는 "WEB-INF/classes/"를 기준으로 패키지에 있는 프로퍼티 파일을 읽는다. 만약 

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

이 코드가 정상적으로 프로퍼티를 로드하려면, "WEB-INF/classes/"에 "message_en_US.properties" 혹은 "message_en.properties" 또는 "message.properties" 파일이 위치해있어야한다.

프로퍼티 값 가져오기

리소스번들 객체의 getString() 메소드를 이용해서 프로퍼티 값을 가져올 수 있다.

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

프로퍼티 파일에서 key 에 해당하는 값을 읽어온다. 

댓글