본문 바로가기

낙서장/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' 카테고리의 다른 글

Maven 외부 라이브러리(jar) 추가  (0) 2022.12.05
MyBatis mapper $ # 차이  (0) 2022.07.25
dbcp 라이브러리 - HikariCP  (0) 2022.06.10
SPring Sms Library - 쿨에스엠에스 Setting(2)  (0) 2022.06.10
Spring Sms Library(1)  (0) 2022.06.10