day4 class07 다국어 처리
다국어 처리란 하나의 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> <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 |