spring로 검색한 결과 :: 시소커뮤니티[SSISO Community]
 
SSISO 카페 SSISO Source SSISO 구직 SSISO 쇼핑몰 SSISO 맛집
추천검색어 : JUnit   Log4j   ajax   spring   struts   struts-config.xml   Synchronized   책정보   Ajax 마스터하기   우측부분

회원가입 I 비밀번호 찾기


SSISO Community검색
SSISO Community메뉴
[카페목록보기]
[블로그등록하기]  
[블로그리스트]  
SSISO Community카페
블로그 카테고리
정치 경제
문화 칼럼
비디오게임 스포츠
핫이슈 TV
포토 온라인게임
PC게임 에뮬게임
라이프 사람들
유머 만화애니
방송 1
1 1
1 1
1 1
1 1
1

spring로 검색한 결과
등록일:2008-06-11 16:44:28
작성자:
제목:MessageSource를 사용하여 국제화 기능 지원


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

spring%EC%9D%98MessageSource%EC%A7%80%EC%9B%90>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값에 해당하는 메세지나 버튼 이름들을 프로젝트 진행 중 따로 관리해두는 것이 개발 막바지에 다다라서 추가적으로 큰 작업없이 메세지 처리를 손쉽게 해결할 수 있다.