</filter-mapping>
2. Spring 설정하기
Spring 의 application-servlet.xml 파일에 MessageSource 를 설정한다.
아래 설정은 ReloadableResourceBundleMessageSource 을 사용하여 설정을 바꾸면 다시 읽도록 처리 하였다.
<!--
MessageSource 를 선언하고 설정한다.
메시지는 classpath 에 선언된곳에 놓는다 .
-->
<bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
<property name="defaultEncoding" value="UTF-8"/>
<property name="basenames">
<list>
<value>classpath:/com/test/mydomain/message</value>
</list>
</property>
<property name="fallbackToSystemLocale" value="false"/>
<property name="cacheSeconds" value="60"/>
</bean>
<bean id="localeResolver" class="org.springframework.web.servlet.i18n.SessionLocaleResolver">
<property name="defaultLocale" value="ko" />
</bean>
<!-- java 에서 사용하기 위해 만든 클래스 -->
<bean id="prop" class="com.common.util.Prop" />
- /com/test/mydomain 이 패키지 위치에 다국어 문장을 포함한 파일을 넣는다.
message.property - 기본 언어 셋
message_ko.property - 한국어 언어셋
message_en.property - 영어 언어셋
- 파일의 내용은 다음과 같은 형식이다. ( 영어인 경우 아래 문장들이 영어로 번역되어 들어 가면된다.)
test.message=안녕하세요.test.hello={0}님 안녕하세요. {1}
{0}과 {1} 은 치환될 영역이다. 사용자가 해당 문구를 사용시에 치환해서 사용해야 하는 경우 이런식으로 메시지를 작성해서 치환하면 된다.
- 기본적으로 한국어를 사용하면 굳이 message_ko.property를 만들지 않아도 된다.
3. Locale을 설정하는 Controller 클래스 작성
/**
* 세션에 있는 로케일을 변환 하는 Controller 클래스
*/
@Controller
public class LocaleController {
@RequestMapping(value = "/changeLocale")
public String changeLocale(HttpServletRequest request, HttpServletResponse response, @RequestParam(required = false) String locale) {
HttpSession session = request.getSession();
Locale lo = null;
//step. 파라메터에 따라서 로케일 생성, 기본은 KOREAN
if (locale.matches("en")) {
lo = Locale.ENGLISH;
} else {
lo = Locale.KOREAN;
}
// step. Locale을 새로 설정한다. session.setAttribute(SessionLocaleResolver.LOCALE_SESSION_ATTRIBUTE_NAME, lo);
// step. 해당 컨트롤러에게 요청을 보낸 주소로 돌아간다.
String redirectURL = "redirect:" + request.getHeader("referer");
return redirectURL;
}
}
4. 현재 설정된 Locale을 확인 하는 클래스 작성
public class LocaleUtil {
/**
* 기본 로케일을 리턴한다. 기본은 한글이다.
*/
public static Locale getDefaultLocale() {
return Locale.KOREAN;
}
/**
* HttpServletRequest 를 받아서 저장되어 있를 locale 값을 리턴한다. 없는 경우는 기본 로케일을 리턴한다.
*/
public static Locale getLocale(HttpServletRequest request) {
Locale locale = null;
HttpSession session = request.getSession();
locale = (Locale)session.getAttribute(SessionLocaleResolver.LOCALE_SESSION_ATTRIBUTE_NAME);
if (locale == null ) {
locale = getDefaultLocale();
}
return locale;
}
}
5. 메시지를 언어 설정에 따라서 가져오는 클래스
public class Prop implements MessageSourceAware {
private static MessageSource msg;
public void setMessageSource (MessageSource msg) {
Prop.msg = msg;
}
/**
* 시스템 속성을 얻기위한 함수
* 호출 내용은 기존 메시지와 동일하나 기능적으로 구분하기 위해서 추가한 메소드 이다.
*/
public static String prop(String key) {
return Prop.msg(key);
}
public static String prop(String key, Locale locale) {
return Prop.msg(key, locale);
}
public static String propFormat(String key, Object...objects) {
return MessageFormat.format(Prop.msg(key),objects);
}
public static String propFormat(String key, Locale locale, Object...objects) {
return MessageFormat.format(Prop.msg(key, locale),objects);
}
/**
* 메지시를 리턴한다.
*/
public static String msg(String key){
return msg.getMessage(key, null, Locale.getDefault());
}
public static String msg(String key, Locale locale){
return msg.getMessage(key, null, locale);
}
}
6. javascript용 파일 생성하기
message.i18n.js 는 사용하기 편리 하도록 만든 파일이다. 파일 내용은 아래와 같다.
function loadBundles(lang) {
jQuery.i18n.properties({
name:'message',
path:'/js/message/prop/',
mode:'both',
language:lang,
callback: function() {
}
});
}
i18nProp = jQuery.i18n.prop;
7. JAVA에서 사용하는 방법
자바에서 controller 에서 HttpRequest 객체를 넣어서 현재 locale 를 얻어 온 다음에 Prop 클래스를 통해서 메시지를 가져 온다.
Locale locale = LocaleUtil.getLocale(request);
String message= Prop.propFormat("message.java", locale, "[Message]","java");
8. JSP에서 사용 하는 방법
spring tag 를 통해서 값을 가져온다.
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>
<spring:message code="message.jsp" arguments=" 메시지, JSP"/>
9. javascript 설정및 사용하는 방법
javascrpit 는 설정 파일을 별도로 만들었다. 이 경우 javascript에서 파일(message.i18n.js)을 지정해서 하나만 사용하는 편이 편하다.
<script type="text/javascript" language="JavaScript" src="/js/lib/jquery.i18n.properties-min-1.0.9.js"></script>
<script type="text/javascript" language="JavaScript" src="/js/message/message.i18n.js"></script>
<script type="text/javascript">
<!--
jQuery(document).ready(function() {
loadBundles('<%=(LocaleUtil.getLocale(request)).toString()%>');
});
//-->
</script>