spring

day4 class07 다국어 처리

일상다반ㅅㅏ 2019. 2. 16. 18:45

다국어 처리란 하나의 JSP 페이지를 다양한 언어로 서비스하는 것이다.


1. 메시지 파일 작성

- src/main/resources 폴더에 패키지를 생성헌다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# messageSource_en.properties
 
# 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.regDate=REGDATE
message.board.list.table.head.cnt=CNT
message.board.list.link.insertBoard=Insert Board
cs


- 한글 메시지는 유니코드로 변환하여 등록해야 한다.

- 일반 텍스트 문서에서 작성하여 properties파일에 붙여 넣으면 유니코드로 변경된다

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# messageSource_ko.properties
 
# 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.regDate=\uB4F1\uB85D\uC77C
message.board.list.table.head.cnt=\uC870\uD68C\uC218
message.board.list.link.insertBoard=\uC0C8\uAE00 \uB4F1\uB85D
cs




2. messageSource.txt등록

- messageSource도 아이디가 정해져 있다.

- basenames는 메시지 파일이 저당된 배열형태로 받아야 하는데 관리를 위해 마지막 '.'을 기준으로 왼쪽은 무조건 패키지 경로로 처리하고 오른쪽은 파일 이름으로 하고, 파일 이름은 지정하는 언어와 확장자는 생략하여 등록할 수 있도록 규정되었다고 한다.

>>> 이 과정을 위해 messageSoruce.txt 파일을 추가한 건가 싶었는데 지워도 상관 없네...

- LocaleResolver을 이용하여 언어 지원방식을 설정한다.

LocaleResolver 종류 

기능 설명 

AcceptHeaderLocaleResolver 

브라우저에서 전송된 HTTP 요청 헤더에서 Accept-Language에 설정된 Locale로 메시지를 적용한다. 

CookieLocaleResolver 

Cookie에 저장된 Locale 정보를 추출하여 메시지를 적용한다. 

SessionLocaleResolver 

HttpSession에 저장된 Locale 정보를 추출하여 메시지를 적용한다.

가장 많이 사용하는 방법이다. 

FixedLocaleResolver 

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

- 화면단에서 언어를 선택하여 언어 설정을 변경할 경우 LocaleChangeInterceptor을 사용한다. mvc 네임스페이스를 추가해줘야 한다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<!-- presentaiton-layer.xml -->
 
<!-- 다국어 설정 -->
<!-- MessageSource 등록 -->
<bean id="messageSource"
    class="org.springframework.context.support.ResourceBundleMessageSource">
    <property name="basenames">
        <list>
            <value>message.messageSource</value>
        </list>
    </property>
</bean>
 
<!-- LocaleResolver 등록 -->
<bean id="localeResolver"
    class="org.springframework.web.servlet.i18n.SessionLocaleResolver"></bean>
 
<!-- LocaleChangeInterceptor 등록 -->
<mvc:interceptors>
    <bean class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor">
        <property name="paramName" value="lang" />
    </bean>
</mvc:interceptors>
cs




3. JSP 수정

- 작성한 메시지 파일을 사용하기 위해선 태그 라이브러리를 추가해야 한다.

- properties에서 작성한 키 값에 맞춰 해당 문구의 자리에 입력해준다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
// login.jsp
 
<%@ page contentType="text/html; charset=EUC-KR"%>
<%@ taglib uri="http://www.springframework.org/tags" prefix="spring" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title><spring:message code="message.user.login.title"/></title>
</head>
<body>
 
<center>
    <h1><spring:message code="message.user.login.title"/></h1>
    <a href="login.do?lang=en"><spring:message code="message.user.login.language.en"/></a>&nbsp;&nbsp;
    <a href="login.do?lang=ko"><spring:message code="message.user.login.language.ko"/></a>
    <hr>
    <form action="login.do" method="post">
        <table border="1" cellpadding="0" cellspacing="0">
            <tr>
                <td bgcolor="orange"><spring:message code="message.user.login.id"/></td>
                <td><input type="text" name="id" value="${userVO.id }"/></td>
            </tr>
            <tr>
                <td bgcolor="orange"><spring:message code="message.user.login.password"/></td>
                <td><input type="password" name="password" value="${userVO.password }"/></td>
            </tr>
            <tr>
                <td colspan="2" align="center">
                    <input type="submit" value="<spring:message code="message.user.login.loginBtn"/>"/>
                </td>
            </tr>
        </table>
    </form>
</center>
 
</body>
</html>
cs