Spring Validator를 사용하려고 보니 messae.properties 파일을 이용하여 문구를 표시하는 예제가 많았다.
ResourceBundleMessageSource 인터페이스를 이용한 것인데, 원래는 주로 다국어 처리를 위해 사용된다.
MessageSource만 이용하려다가 LocalResolver도 이용하여 다국어 지원 설정도 추가했다.
1. LocalResolver
LocalResolver는 3가지 종류가 있다.
- root-context.xml
<!-- AcceptHeaderLocaleResolver -->
<bean id="localeResolver" class="org.springframework.web.servlet.i18n.AcceptHeaderLocaleResolver" />
<!-- CookieLocaleResolver -->
<bean id="localeResolver" class="org.springframework.web.servlet.i18n.CookieLocaleResolver" >
<property name="cookieName" value="clientlanguage"/>
<property name="cookieMaxAge" value="100000"/>
<property name="cookiePath" value="web/cookie"/>
</bean>
<!-- SessionLocaleResolver -->
<bean id="localeResolver" class="org.springframework.web.servlet.i18n.SessionLocaleResolver" />
-- AcceptHeaderLocaleResolver은 Spring에서 기본(Default)로 된것으로 굳이 root-context.xml에 추가하지 않아도 작동한다. HTTP 요청 헤더의 Accept-Language를 참고한다.
-- CookieLocaleResolver는 clientlanguage에 locale정보가 저장되고 이 쿠키를 이용하여 locale이 설정된다.
-- SessionLocaleResolver는 locale정보가 Session에 저장된다
2. MessageSource
- root-context.xml
<bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
<property name="basename" value="classpath:properties/message" />
<property name="defaultEncoding" value="UTF-8" />
</bean>
- message.properties join.userid=User Id join.password=Password join.name=Name join.email=Email join.gender=Gender join.interests=Interests | - message_ko.properties join.userid=\uC544\uC774\uB514 join.password=\uBE44\uBC00\uBC88\uD638 join.name=\uC774\uB984 join.email=\uC774\uBA54\uC77C join.gender=\uC131\uBCC4 join.interests=\uAD00\uC2EC\uBD84\uC57C |
두가지의 properties 파일을 만들었다. 하나는 영문, 하나는 국문인데 properties파일에서는 한글을 쓰면 유니코드로 자동변환된다.
"message_언어.properties"가 기본 명칭이고 해당되는 locale의 언어에 해당되는 파일이 없을 경우에는 message.properties를 default로 한다.
- JSP
<%@ taglib uri="http://www.springframework.org/tags" prefix="spring"%>
<div class="form-group">
<label for="userid"><spring:message code="join.userid"/></label>
<input type="text" class="form-control" name="userid">
</div>
이렇게 설정한 후, 적용한 예시를 보면
locale에 따라 적용된 것을 볼 수 있다.
Controller에서 메세지를 확인하려면 MessageSourceAware 클래스를 상속받으면 가능하다.
@Controller
public class MemberController implements MessageSourceAware {
MessageSource message;
@Override
public void setMessageSource(MessageSource message) {
this.message = message;
}
public void test(Locale locale){
message.getMessage("join.userid", null, locale);
}
}
참고 - http://changpd.blogspot.kr/2013/05/localeresolver-messagesource.html
'Programming > >> Spring' 카테고리의 다른 글
[Spring] Spring Mybatis 설정 1 (2) | 2016.02.17 |
---|---|
[Spring] Spring Validator (1) | 2015.12.02 |
[Spring] Spring + Hibernate 설정 방법 고찰? (1) | 2015.11.24 |
[Spring] Spring + Hibernate4 + MySQL 설정 (0) | 2015.11.22 |
[Spring] Spring tiles 설정 + ViewResolver (0) | 2015.11.04 |
댓글