구리

TIL_210624_Spring 다국어 처리 본문

SPRING FRAMEWORK

TIL_210624_Spring 다국어 처리

guriguriguri 2021. 6. 23. 13:36

목차

1. 메시지 파일 작성
2. MessageSource 등록
3. LocaleResolver 등록
4. Locale 변경
5. JSP 파일 설정

 

 

 

1. 메시지 파일 작성

원하는 언어로 메시지 출력시 각 언어에 따른 메시지 파일을 작성해야 하며 확장자는 'properties'로 파일명은 언어에 해당하는 Locale 정보를 결합합니다.

 

(1) src/main/resources에 new File 생성하여 messageSource_en.properites, messageSource_ko.properites로 2개의 파일을 생성합니다.

 

(2) 영어 메시지 파일 작성

#login.jsp
message.user.login.title=LOGIN
message.user.login.id=ID
message.user.login.password=PASSOWORD
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.insertBaord=Insert Board

 

(3) 한글 메시지 파일 작성

한국어, 중국어 등 아시아권 언어 사용시 반드시 유니코드로 변환하여 등록

messageSource_ko.txt 파일 생성 후 작성

#login.jsp
message.user.login.title=로그인
message.user.login.id=아이디
message.user.login.password=비밀번호
message.user.login.loginBtn=로그인

message.user.login.language.en=영어
message.user.login.language.ko=한글

#getBoardList.jsp
message.board.list.mainTitle=게시글 목록
message.board.list.welcomeMsg=님! 게시판에 오신 것을 환영합니다.
message.board.list.search.condition.title=제목
message.board.list.search.condition.content=내용
message.board.list.search.condition.btn=검색
message.board.list.table.head.seq=번호
message.board.list.table.head.title=제목
message.board.list.table.head.writer=작성자
message.board.list.table.head.regDate=등록일
message.board.list.table.head.cnt=조회수
message.board.list.link.insertBaord=새글 등록

그리고 messageSource_ko.txt 파일의 모든 내용 복사하여 messageSource_ko.properties 파일에 붙여 넣으면 한글 프로퍼티 파일 생성 완료

 

코드 추가

코드추가

 

2. MessageSource 등록

presentation-layer.xml (컨트롤러 등록하는 스프링 파일)에 MessageSource 클래스를 <bean> 등록합니다.

<!-- 다국어 설정, MessageSource 등록 -->
	<bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
		<property name="basenames">
			<list>
				<value>message.messageSource</value>
			</list>
		</property>
	</bean>

ResourceBundleMessageSource 클래스 등록시 bean id 명은 고정이고 setBasenames() 메소드 통해 메시지 파일들이 저장된 배열 객체를 넘겨줘야 합니다. (MessageSource에 메시지 파일 등록시 확장자명은 생략)

 

3. LocaleResolver 등록

웹 브라우저가 서버 요청시 브라우저의 Locale 정보가 HTTP 요청 메시지 헤더에 자동으로 설정되어 전송되며

스프링은 LocaleResolver를 통해 클라이언트의 Locale 정보를 추출 후, 이에 해당하는 언어의 메시지를 적용합니다.

만약 스프링 설정 파일에 LocaleResolver 가 미등록되었다면 AcceptHeaderLocaleResolver가 기본으로 적용됩니다.

대체로 SessionLocaleResolver 를 가장 많이 사용합니다.

 

아래 코드를 presentation-layer.xml에 등록합니다

<!-- LocaleResolver 등록 -->
	<bean id="localeResolver" class="org.springframework.web.servlet.i18n.SessionLocaleResolver"></bean>

 

4. Locale 변경

 LocaleChangeInterceptor 클래스로 해당 화면의 언어를 변경할 수 있습니다. 

(<mvc:interceptors>를 통해 LocaleChangeInterceptor 객체를 인터셉터로 등록하며

클라이언트로부터 "lang"이라는 파라미터로 특정 Locale이 전송되면 해당 Locale로 변경한다는 설정을 의미합니다.)

<!-- LocaleChangeInterceptor  등록  -->
	<mvc:interceptors>
		<bean class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor">
			<property name="paramName" value="lang"></property>
		</bean>
	</mvc:interceptors>

 

5. JSP 파일 설정

(1) 로그인 화면

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ 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=UTF-8">
<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>

 

영어로 로그인 화면

(2) 글 목록 화면

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ 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=UTF-8">
<title><spring:message code="message.board.list.mainTitle" /></title>
</head>
<body>
	<center>
		<h1><spring:message code="message.board.list.mainTitle" /></h1>
		<h3>${userName }<spring:message code="message.board.list.welcomeMsg" />~~ 
		<a href="logout.do">Log-out</a></h3>
		
		<!-- 검색 시작 -->
		<form action="getBoardList.do" method="post">
			<table border="1" cellpadding="0" cellspacing="0" width="700">
				<tr>
					<td align="right">
						<select name="searchCondition">
						<c:forEach items="${conditionMap }" var="option">
							<option value="${option.value }" />${option.key}
						</c:forEach>
						</select>
						<input name="searchKeyword" type="text" />
						<input value="<spring:message code="message.board.list.search.condition.btn" />" type="submit" />
					</td>
				</tr>
				
			</table>
		</form>
		
		<table border="1" cellpadding="0" cellspacing="0" width="700">
			<tr>
				<th bgcolor="orange" width="100">
				<spring:message code="message.board.list.table.head.seq" /></th>
				<th bgcolor="orange" width="200">
				<spring:message code="message.board.list.table.head.title" /></th>
				<th bgcolor="orange" width="150">
				<spring:message code="message.board.list.table.head.writer" /></th>
				<th bgcolor="orange" width="150">
				<spring:message code="message.board.list.table.head.regDate" /></th>
				<th bgcolor="orange" width="100">
				<spring:message code="message.board.list.table.head.cnt" /></th>
			</tr>
			
			<c:forEach items="${boardList }" var="board">
				<tr>
					<td>${board.seq }</td>
					<td align="left"><a href="getBoard.do?seq=${board.seq }">${board.title }</a></td>
					<td>${board.writer }</td>
					<td>${board.regDate }</td>
					<td>${board.cnt }</td>
				</tr>
			</c:forEach>
			
		</table>
		<br />
		<a href="insertBoard.jsp">
			<spring:message code="message.board.list.link.insertBoard" />
		</a>
	</center>
</body>
</html>