MessagSource는 사용자가 따로 작성해둔 property file에 key 값을 불러와 String값을 불러와준다.
따로 컴파일없이 property 파일만 바꿔주면 되서 에러메시지, 특정 안내문등을 저장해서 사용하면 좋다. 사실 가장 중요한 기능은 Locale(지역)에 따른 메시지 설정이 따로 가능하다는 것이다. 여기서는 ReloadableResourceBundleMessage를 사용하겠다. 이게 서버 재가동 없이 reload되서 편하다.
😊 다음과 같이 선언하여 사용한다.
<bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
<property name="basenames">
<list>
<value>classpath:/messages/common_msg</value>
</list>
</property>
<property name="defaultEncoding">
<value>UTF-8</value>
</property>
<property name="cacheSeconds">
<value>60</value>
</property>
</bean>
@Bean
public MessageSource messageSource() {
ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource();
messageSource.setBasenames("messages", "errors");
messageSource.setDefaultEncoding("utf-8");
return messageSource;
}
boot는 application.properties(또는 .yml)에 설정 파일명을 선언한다.
폴더단위는 페키지를 쓸때처럼 닷(.)
으로 작성한다. 파일 여러개는 콤마(,)
spring.messages.basename=messages,config.i18n.messages
설정을 안하더라도 기본적으로 boot는 spring.messages.basename=messages
를 등록하고 있는 셈이니, messages
로 시작하는 모든 properties
파일을 읽어드립니다.
😊 매번 불러오기 불편하므로 그냥 Service로 관리하자.
@Service
public class MessageUtils {
@Resource
MessageSource messageSource;
public String getMessage(String code, String args[]) {
return messageSource.getMessage(code, args, Locale.getDefault());
}
public String getEnMessage(String code, String args[]) {
return messageSource.getMessage(code, args, Locale.ENGLISH);
}
public String getKrMessage(String code, String args[]) {
return messageSource.getMessage(code, args, Locale.KOREA);
}
}
messageSource의 getMessage 변수는 다음과 같다. 그 밖에 매개변수를 갖는 메서드들은 각자 확인하기.
messageSource.getMessage(key, args, Locale)
- key : 파일의 키값을 작성한다.
- args : 사용자 메시지를 넣을 수 있다 array를 넘겨준다.
- Locale : 로케일 정보를 넣는다 defalut를 사용하면 한국이다.
😊 내용을 보면 ENGLISH, KOREA가 보이는데 지역을 저렇게 설정하면, 강제적으로 해당 언어의 파일을 불러온다. 파일 네이밍은 다음과 같다.
😊 파일을 다음과 같이 만들고 파일이름도 상단에 classpath:/messages/common_msg 에 맞춰 작성한다 .
😊 앞의 E01이 Key 이고 그뒤가 String Value값들이다.
{0}, {1}순으로 args 값들을 사용자가 메시지값을 넣을 수 있다.
@Resource
MessageUtils messageUtils;
public test(){
String messageTest = messageUtils.getMessage("E01", null);
System.out.println("messageTest :: "+ messageTest);
}