본문 바로가기

낙서장/Spring

[Spirng MVC] 다국어 처리 - MessageSource Setting

1. Spring MessageSource 구현체

1.1. org.springframework.context.support.StaticMessageSource  

      : MessageSource의 가장 간단한 구현체. 기본적인 다국어 기능을 지원하면서 테스트용도로 사용됩니다.

1.2.  org.springframework.context.support.ResourceBundleMessageSource

      :  ResourceBundle Class, MessageFormat Class 기반으로 만들어져 Bundle에 특정 명칭으로 접근이 가능합니다.

1.3. org.springframework.context.support.ReloadableResourceBundelMessageSource

      : Property  설정을 통해 Reloading 정보를 입력해 주기적인 Message Reloading을 수행합니다. 

      : Application 종료없이도 실행 도중에 변경이 가능한 장점이 있습니다.

2. MessageSource 샘플 구조 

2.1. web.xml에서 message-context.xml을 읽도록 설정한다.

2.2. message properties 생성한다. ex) labels_ko.properties

2.3. message-context.xml에 MessageSource와 사용하기 위한 MessageSourceAccessor 설정한다.

2.4 MessageSourceAccessor를 사용할 수 있도록 MessageUtils.java를 생성한다.

2.5 controller에서 테스트한다.

3.Web.xml 설정
//context road 방식
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath*:spring/context-*.xml</param-value>
</context-param>
//servlet mapping 방식
<servlet>
<servlet-name>action</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/config/springmvc/dispatcher-servlet.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
4. Message property 파일 작성

4.1. Message Source의 property 파일은 Nameing Rule을 지켜야 한다. ex) {basename}_언어코드_국가코드.properties

4.2. {basename}은 개발자가 사용목적에 따라 임의로 지정할 수 있다.

{basename}.properties Default Message 시스템 언어 및 지역에 맞는 property 파일이 존재하지 않을경우 사용됨
{basename}_en.properties 시스템 언어 코드가 영어일 때 사용됨
{basename}_ko.properties 시스템 언어 코드가 한글일 때 사용됨
{basename}_en_UK.properties 시스템 언어 코드가 영어일때 영국(국가코드)을 위한 메시지로 사용됨
5. Application Context Setting
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd">
// 프로퍼티 파일 위치 설정
<bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
<property name="basenames">
<list>
<value>classpath:/spring/message/message-common</value>
</list>
</property>
<property name="cacheSeconds">
<value>60</value>
</property>
// 한글 깨짐 방지 기본 인코딩 UTF-8 설정
<property name="defaultEncoding" value="UTF-8"/>
</bean>
// MessageSource를 사용하기 위한 Accessor 설정
<bean id="messageSourceAccessor" class="org.springframework.context.support.MessageSourceAccessor">
<constructor-arg ref="messageSource"/>
</bean>
// MessageSource를 사용하기위한 MessageUtils 매핑
<bean id="message" class="org.common.MessageUtils">
<property name="messageSourceAccessor" ref="messageSourceAccessor"/>
</bean>
// Default Location 설정
<bean id="localeResolver" class="org.springframework.web.servlet.i18n.SessionLocaleResolver">
<property name="defaultLocale" value="ko"></property>
</bean>
</beans>
6. MessageUtils
package org.common;
import java.util.Locale;
import org.springframework.context.support.MessageSourceAccessor;
public class MessageUtils {
private static MessageSourceAccessor msAcc = null;
public void setMessageSourceAccessor(MessageSourceAccessor msAcc) {
MessageUtils.msAcc = msAcc;
}
public static String getMessage(String code) {
return msAcc.getMessage(code, Locale.getDefault());
}
public static String getMessage(String code, Object[] objs) {
return msAcc.getMessage(code, objs, Locale.getDefault());
}
}

 

'낙서장 > Spring' 카테고리의 다른 글