본문 바로가기
Programming/Spring

다국어 처리

by TinKerBellBass 2017. 8. 20.
728x90
반응형

참고도서

스프링 퀵 스타트
국내도서
저자 : 채규태
출판 : 루비페이퍼 2016.06.30
상세보기



1. 메시지 파일 작성

해당하는 언어에 따른 메시지 property 파일을 java/main/resources/message 폴더에 작성.
확장자는 .properties 이고 파일명은 언어에 해당하는 Locale 정보를 결합하여 작성

(1) 영어 메시지 파일

messageSource_en.properties

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# login.jsp
message.user.login.title=LOGIN
message.user.login.id=ID
message.user.login.password=PASSWORD
message.user.login.loginBtn=LOG-IN
 
message.user.login.language.en=English
message.user.login.language.ko=Korean
 
# getBoardList.jsp
message.board.list.mainTitle=BOARD LIST
message.board.list.welcomeMsg=! Welcome to my BOARD
message.board.list.search.condition.title=TITLE
message.board.list.search.condition.content=CONTENT
message.board.list.search.condition.btn=Search
message.board.list.table.head.seq=SEQ
message.board.list.table.head.title=TITLE
message.board.list.table.head.writer=WRITER
message.board.list.table.head.redDate=REGDATE
message.board.list.table.head.cnt=CNT
message.board.list.link.insertBoard=Insert Board
cs

(2) 한글 메시지 파일


한국어, 중국어, 일본어 등 아시아권의 언어는 유니코드로 등록해야 한다.

이클립스에서 한글로 작성하면 자동으로 유니코드로 변한다.

작성하기 힘들다면 텍스트 파일을 만들고 복붙하면 된다.


messageSource_ko.properties


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# login.jsp
message.user.login.title=\uB85C\uADF8\uC778
message.user.login.id=\uC544\uC774\uB514
message.user.login.password=\uBE44\uBC00\uBC88\uD638
message.user.login.loginBtn=\uB85C\uADF8\uC778
 
message.user.login.language.en=\uC601\uC5B4
message.user.login.language.ko=\uD55C\uAE00
 
# getBoardList.jsp
message.board.list.mainTitle=\uAC8C\uC2DC\uAE00 \uBAA9\uB85D
message.board.list.welcomeMsg=\uB2D8! \uAC8C\uC2DC\uD310\uC5D0 \uC624\uC2E0\uAC78 \uD658\uC601\uD569\uB2C8\uB2E4.
message.board.list.search.condition.title=\uC81C\uBAA9
message.board.list.search.condition.content=\uB0B4\uC6A9
message.board.list.search.condition.btn=\uAC80\uC0C9
message.board.list.table.head.seq=\uBC88\uD638
message.board.list.table.head.title=\uC81C\uBAA9
message.board.list.table.head.writer=\uC791\uC131\uC790
message.board.list.table.head.redDate=\uB4F1\uB85D\uC77C
message.board.list.table.head.cnt=\uC870\uD68C\uC218
message.board.list.link.insertBoard=\uC0C8\uAE00 \uB4F1\uB85D
cs


2. MessageSource 등록

작성한 메시지 파일을 읽어 들이는 MessageSource 클래스 빈 등록
View 에 관련된 사항이기 때문에 Presentation Layer 에 등록

1
2
3
4
5
6
7
8
9
10
11
<!-- presentaion-layer.xml 에 ResourceBundleMessageSource 클래스 등록 -->
<!-- id 속성 값은 반드시 messageSource 가 되어야 DispatcherServlet 이 인식할 수 있다 -->
    <bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
        <!-- ResourceBundleMessageSource 클래스의 setBasenames() 메소드를 이용해서 -->
        <!-- 메시지 파일들이 저장된 배열 객체를 넘겨줄 수 있다 -->
        <property name="basenames">
            <list>
                <value>message.messageSource</value>
            </list>
        </property>
    </bean>
cs


<property name="basenames"> 에 등록된 배열의 값이 message.messageSource 로 되어 있다.

그런데 작성한 메시지 파일은 messageSource._en.properties, messageSource_ko.properties 이다.

먄약 message.messageSource 가 패키지 이름이고 확장자 없이 파일 이름이 properties 라면 혼란이 생길 수 있다.


message.messageSource.properties 

-> message 패키지의 messageSource.properties 파일? message.messageSource 패키지의 properties 파일?


그렇기 때문에 확장자는 생략한다. 그리고 마지막 . 을 기준으로 왼쪽은 무조건 패키지, 오른쪽은 파일 이름으로 처리하면 된다.

message.messageSource -> message 패키지의 messageSource 파일

message.messageSource.properties -> message.messageSource 패키지의 properties 파일


그리고 _en, _ko 도 생략되어 있다. 만약 컴포넌트와 언어가 늘어난다면 하나하나 다 등록하기 힘들다.

그래서 스프링에서는 언어에 해당하는 정보를 메시지 파일에서 제거하는 방법을 선택하였다.

이렇게 하면 컴포넌트당 하나의 메시지 파일만 등록하면 되고, 

새로운 언어가 추가되거나 삭제될 때에도 스프링 설정 파일을 수정할 필요가 없다.

어떤 메시지 파일을 선택할지는 기본 언어 설정과 Locale 의 변화에 따라 스프링이 자동으로 선택한다.


3. LocaleResolver 등록

웹브라우저가 서버에 요청하면 브라우저의 Locale 정보가 HTTP 요청 메시지 헤더에 자동으로 설정되어 전송된다.
이 때, 스프링은 LocaleResolver 를 통해서 클라이언트의 Locale 정보를 추출하고, 이 Locale 정보에 해당하는 언어의 메시지를 적용한다.


스프링에서 지원하는 LocaleResolver


 AcceptHeaderLocaleResolver 

 브라우저에서 전송된 HTTP 요청 헤더의 Accept-Language에 설정된 Locale 정보 사용

 CookieLocaleResolver

 Cookie에 저장된 Locale 정보 사용

 SessionLocaleResolver

 HttpSession에 저장된 Locale 정보 사용

 FixedLocaleResolver

 웹 요청과 무관하게 특정 Locale로 고정


LocaleResolver 를 등록하지 않으면 기본적으로 AcceptHeaderLocaleResolver 가 적용되고,

스프링에서는 SessionLocaleResolver 를 가장 많이 사용한다. 


1
2
3
<!-- presentaion-layer.xml 에 SessionLocaleResolver 클래스 등록 -->
<!-- id 속성 값은 반드시 localeResolver 가 되어야 DispatcherServlet 이 인식할 수 있다 -->
    <bean id="localeResolver" class="org.springframework.web.servlet.i18n.SessionLocaleResolver"/>    
cs

  

4. Locale 변경하기

특정 언어로 화면을 보다가 해당 화면의 언어를 바꾸고 싶을 때는

스프링의 LocaleChangeInterceptor 클래스를 사용한다. 

LocaleChangeInterceptor 클래스는 HnadlerInterceptor 인터페이스를 구현하였기 때문에,

스프링 설정 파일에 인터셉터로 등록해야 한다.


1
2
3
4
5
6
7
8
<!-- presentation-layer.xml 에 LocaleChangeInterceptor 등록 -->
<!-- namespace 에 mvc 등록 -->
<mvc:interceptors>
    <bean class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor">
        <!-- setParamNam() 메소드에 lang 이라는 파라미터로 특정 Locale이 전송되면 해당 Locale로 변경 -->
        <property name="paramName" value="lang" />
    </bean>
</mvc:interceptors>
cs

          

5. JSP 에서 메시지 파일 사용

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<!-- 태그 라이브러리 등록 -->
<%@taglib uri="http://www.springframework.org/tags" prefix="spring"%>
 
<!-- 사용법 -->
<!-- <spring:message code="메시지 키값"/> -->
 
<!-- 사용 예 -->
<!-- message.user.login.title=LOGIN 으로 메시지 파일에 등록되어 있는 경우 -->
<spring:message code="message.user.login.title"/>
 
<!-- Locale 변경 사용 하기 -->
<!-- setParamNam() 메소드에 lang 이라는 파라미터 값으로 en 이 전송 -> _en 메시지 파일 사용 --> 
<a href="login.do?lang=en">
    <spring:message code="message.user.login.language.en" />
</a>
&nbsp;&nbsp;
<!-- setParamNam() 메소드에 lang 이라는 파라미터 값으로 ko 가 전송 -> _ko 메시지 파일 사용 --> 
<a href="login.do?lang=ko">
    <spring:message code="message.user.login.language.ko" />
</a>
cs


728x90
반응형

'Programming > Spring' 카테고리의 다른 글

Spring JdbcTemplate Method  (0) 2017.08.22
데이터 변환  (0) 2017.08.20
파일 업로드 / 예외처리  (0) 2017.08.20
AOP 기초  (0) 2017.08.19
Bean 라이프 사이클과 범위  (0) 2017.08.19

댓글