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 |