MessageSource를 이용한 텍스트 메시지 처리
FRAMEWORK/SPRING 2013. 7. 15. 15:03□ MessageSource 인터페이스
■ 정의
- org.springframework.context.MessageSource interface
- 메시지의 국제화를 지원.
■ 메서드
- 지역 및 언어에 따라 알맞은 메시지를 구할 수 있음.
public interface MessageSource { String getMessage(String code, Object[] args, Locale locale) throws NoSuchMessageException; String getMessage(String code, Object[] args, String defaultMessage, Locale locale); String getMessage(MessageSourceResolvable resolvable, Locale locale) throws NoSuchMessageException; } |
■ ApplicationContext 클래스
○ 메시지 처리
- MessageSource 인터페이스를 상속 받고 있음.
(getMessage() 메서드를 이용하여 ApplicationContext로부터 지역 및 언어에 알맞은 메시지를 가져올 수 있음.)
- 등록된 빈 객체 중에서 이름이 'messageSource'인 MessageSource 타입의 빈 객체를 이용하여 메시지를 가져옴.
○ 'messageSource'가 이름인 빈 객체 정의
<bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource"> <property name="basename"> <value>message.greeting</value> </property> </bean> |
- basename 프로퍼티의 값은 메시지를 로딩할 때 사용할 ResourceBundle 의 베이스 이름.
(베이스 이름 : 패키지를 포함한 완전한 이름이어야 함.)
- message.greeting 값은 message 패키지에 있는 greeting 프로퍼티 파일로부터 메시지를 가져옴.
■ ResourceBundleMessageSource 클래스
○ 정의
- MessageSource 인터페이스의 구현 클래스.
- java.util.ResourceBundle을 이용하여 메시지를 읽어오는 MessageSource 구현체.
○ 한 개 이상의 프로퍼티 파일로부터 메시지 로딩
- <list> 태그 이용.
<bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource"> <property name="basenames"> <list> <value>message.greeting</value> <value>message.error</value> </list> </property> </bean> |
■ 프로퍼티 파일
○ 특징
- ResourceBundle은 프로퍼티 파일의 이름을 이용하여 언어 및 지역에 따른 메시지를 로딩.
○ message 프로퍼티 파일 파일명
- message.properties : 기본 메시지. 시스템의 언어 및 지역에 맞는 프로퍼티 파일이 존재하지 않을 경우에 사용.
- message_en.properties : 영어 메시지.
- message_ko.properties : 한글 메시지.
- message_en_UK.properties : 영국을 위한 영어 메시지
○ message 프로퍼티 파일
- 각 프로퍼티 파일은 해당 언어에 알맞은 메시지를 포함.
/* message_en.properties */ greeting = Hello! |
/* message_ko.properties */ <!-- '안녕하세요!'를 유니코드 값으로 변환한 값. --> greeting = \uc548\ub155\ud558\uc138\uc694! |
■ 메시지 로딩
- ApplicationContext.getMessage() 메서드를 이용.
Local locale = Locale.getDefault(); String greeting = context.getMessage("greeting", new Object[0], locale); Locale englishLocale = Locale.ENGLISH; String englishGreeting = context.getMessage("greeting", new Object[0], englishLocale); |
□ 빈 객체에서 메시지 이용
■ 빈 객체에서 MessageSource 사용 방법
- ApplicationContextAware 인터페이스 구현 뒤, setApplicationContext() 메서드를 통해 전달받은 ApplicationContext의
getMessage() 메서드를 이용하여 메시지 사용.
- MessageSourceAware 인터페이스 구현 뒤, setMessageSource() 메서드를 통해 전달받은 MessageSource의 getMessage()
메서드를 이용하여 메시지 사용.
■ MessageSourceAware 인터페이스를 사용하는 방법
○ 메서드
- MessageSourceAware 인터페이스는 MessageSource를 전달받을 수 있는 메서드를 정의.
public interface MessageSourceAware { void setMessageSource(MessageSource messageSource); } |
○ 사용
- MessageSourceAware 인터페이스를 구현한 빈 클래스는 setMessageSource() 메서드를 통해 전달받은 MessageSource를
이용하여 필요한 메시지를 가져와 사용.
public class LoginProcessorimplements MessageSourceAware { private MessageSource messageSource; public void setMessageSource(MessageSource messageSource) { this.messageSource = messageSource; } public void login(String username, String password) { ... Object[] args = new String[]{username}; String failMessage = messageSource.getMessage("login.fail", args, locale); ... } } |
'FRAMEWORK > SPRING' 카테고리의 다른 글
Spring Modules Validation (0) | 2013.07.31 |
---|---|
MessageSource 를 이용할 경우 한글문제 (한글 ascii 변환) (0) | 2013.07.25 |
다국어 처리 - localeResolver, messageSource (0) | 2013.07.15 |
Spring AOP용어의 정리 (0) | 2013.07.11 |
스프링 MVC의 주요 구성요소 (0) | 2013.07.05 |