자바 프로그램을 작성할 때, 로케일을 통한 국제화를 지원해야할 경우가 있다. 에러 메시지를 로케일에 따라 한국어로 찍었다가 일본어, 영어로 출력하는 경우를 생각해볼 수 있다. 자바는 리소스 번들(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 에 해당하는 값을 읽어온다.
댓글