본문 바로가기
Programming/>> Spring

[Spring] Spring 다국어 지원

by 니키ᕕ( ᐛ )ᕗ 2015. 12. 2.

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

댓글