MessageSource를 사용하여 국제화 기능 지원 :: 스프링(spring)/아이바티스(IBatis)/하이버네이트(Hibernate)[SSISO Community]
 
SSISO 카페 SSISO Source SSISO 구직 SSISO 쇼핑몰 SSISO 맛집
추천검색어 : JUnit   Log4j   ajax   spring   struts   struts-config.xml   Synchronized   책정보   Ajax 마스터하기   우측부분

스프링(spring)/아이바티스(IBatis)/하이버네이트(Hibernate)
[1]
등록일:2008-06-11 16:44:28 (0%)
작성자:
제목:MessageSource를 사용하여 국제화 기능 지원

Eclipse의 Properties Editor, Text Editor의 인코딩이 맞지 않아서 한글이 깨지는 경우가 발생한다. 그러므로 Eclipse의 Properties Editor, Text Editor을 사용하지 말고 Edit Plus와 같은 Editor를 사용해야 한다.

Spring의 MessageSource지원

Spring은 애플리케이션에서 사용하는 메세지에 대한 일관된 처리 및 국제화를 지원하기 위하여 MessageSource를 지원하고 있다. MessageSource 기능은 BeanFactory에서는 지원하지 않는 기능으로 ApplicationContext API에서 지원하고 있다.

MessageSource 예제

이 예제에서는 한글, 영어, Default 리소스 파일로 나누어서 예제를 실행해 보도록 하겠다.

Messages.properties
404.error={0} is not found!!
505.error=System Exception is happened!!
Messages_en.properties
404.error={0} is not found!!(This is English Resource)
505.error=System Exception is happened!!(This is English Resource)
Messages_ko_temp.properties
404.error={0}를 찾을 수 없습니다.!!
505.error=시스템 에러가 발생했습니다.!!
한글 MessageSource에 대한 처리 방법

한글을 포함하고 있는 MessageSource 파일을 그대로 사용할 경우 한글이 깨진다. 따라서 Messages_ko_temp.properties와 같이 임시 파일에 한글을 저장하고 native2ascii 명령어를 실행하여 다음과 같은 메세지를 포함하도록 해야한다.

Messages_ko_temp.properties가 위치한 디렉토리로 이동한 후 다음과 같이 실행하여 Messages_ko.properties 파일을 만든다.

native2ascii Messages_ko_temp.properties Messages_ko.properties

native2ascii -encoding UTF8 Messages_ko_temp.properties Messages_ko.properties

Messages_ko.properties
404.error={0}\ub97c \ucc3e\uc744 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.!!
505.error=\uc2dc\uc2a4\ud15c \uc5d0\ub7ec\uac00 \ubc1c\uc0dd\ud588\uc2b5\ub2c8\ub2e4.!!
messagesource.xml
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
    <bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
            <property name="basenames">
                <list>
                    <value>net.javajigi.session1.Messages</value>
                </list>    
            </property>
    </bean>
</beans>
MessageSourceDemo.java
import java.util.Locale;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;

public class MessageSourceDemo {
    public static void main(String[] args) throws Exception {
        ApplicationContext ctx = new FileSystemXmlApplicationContext(
                "./conf/messagesource.xml");
        Locale english = Locale.ENGLISH;
        System.out.println(ctx.getMessage("404.error", new Object[] { "index.jsp" }, english));
        
        Locale korea = new Locale("ko","KR","");
        System.out.println(ctx.getMessage("404.error", new Object[] { "main.jsp" }, korea));
        
        System.out.println(ctx.getMessage("505.error", null, english));
        System.out.println(ctx.getMessage("505.error", null, korea));
    }
}

MessageSource를 사용할 때의 고려사항

우리나라와 같이 2byte 문자를 사용하는 나라에서는 MessageSource를 사용할 때 여간 짜증나는 일이 아닐 수 없다. MessageSource에 변경사항이 발생할 때마다 native2ascii 명령어를 실행하여 MessageSource를 매번 새롭게 생성해 주어야 한다는 것이다.

이 같은 단점을 보완하기 위하여 ANT의 native2ascii를 이용하여 해결하는 방법이 있다. 그러나 이 방법 또한 매번 실행해주어야 하는 것은 같을 수 밖에 없다. 따라서 ANT를 사용하는 것이 최종적인 해결책은 아니라고 생각한다.

필자의 경우 MessageSource를 사용할 필요가 있을 경우에는 개발이 어느 정도 완료되기 전까지는 MessageSource를 영문으로만 작성하여 테스트를 진행한다. 영문의 내용이 문장에 맞지 않아도 상관없다. 개발이 거의 완료단계에 다다랐을 때 영문을 한글로 바꾸는 작업을 진행한다. 물론 이처럼 진행할 경우 해당 key값에 해당하는 메세지나 버튼 이름들을 프로젝트 진행 중 따로 관리해두는 것이 개발 막바지에 다다라서 추가적으로 큰 작업없이 메세지 처리를 손쉽게 해결할 수 있다.

[본문링크] MessageSource를 사용하여 국제화 기능 지원
[1]
코멘트(이글의 트랙백 주소:/cafe/tb_receive.php?no=30340
작성자
비밀번호

 

SSISOCommunity

[이전]

Copyright byCopyright ⓒ2005, SSISO Community All Rights Reserved.