다국어 처리
이전에는 다른 언어로 서비스를 해야했을때 jsp 파일 자체를 여러개 제작해야 했습니다.
하지만 Spring 프로젝트에서는 메세지 파일만을 제작하여 활용 가능합니다.
메세지 파일 작성하기
# key = value
header.page.title = MAIN PAGE
header.title = INSERT TITLE
header.content = INSERT CONTENT
header.file = SELECT FILE
header.btn = INSERT
body.image = DEFAULT IMAGE
footer.goback = GO BACK MAIN
messageFile_en.properties
# key = value
header.page.title = \uBA54\uC778 \uD398\uC774
header.title = \uC81C\uBAA9 \uC791\uC131 # 제목 작성
header.content = \uB0B4\uC6A9 \uC791\uC131 # 내용 작성
header.file = \uD30C\uC77C \uC120\uD0DD # 파일 선택
header.btn = \uAE00 \uC791\uC131 # 글 작성
body.image = \uC378\uB124\uC77C # 썸네일
footer.goback = \uBA54\uC778\uC73C\uB85C \uB3CC\uC544\uAC00\uAE30 # 메인으로 돌아가기
messageFile_ko.properties
메세지 파일은 'key = value' 형식으로 이루어져 있습니다. 키 값을 설정한 뒤에 해당 언어로 내용을 작성하면 됩니다. 영어 이외의 글자는 자동으로 유니코드로 변환됩니다.
메세지 파일 위치
메세지 파일을 Resolver가 읽어들일 수 있도록 src/main/resources/message에 파일 경로를 설정합니다. 파일명은 '패키지명File_언어.properties'로 설정합니다.
Resolver 클래스 등록
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.2.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.2.xsd">
...
<bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
<property name="basenames">
<list>
<value>message.messageFile</value>
</list>
</property>
</bean>
</beans>
DispatcherServlet-servlet.xml
메세지 파일을 읽어들을 수 있는 Resolver 클래스를 등록합니다. 언어 설정(en, ko)은 자동으로 붙여주고 확장자(.properties)는 패키지 경로와 혼동될 수 있기 때문에 en.properties / ko.properties 등을 작성하지 않습니다.
LocaleChangeInterceptor 클래스 등록
웹 브라우저에서 서버에게 요청을 하면 HTTP 요청 헤더 내에 브라우저의 Locale 정보가 포함됩니다. 이 Locale 정보는 클라이언트의 지역 및 언어 환경을 나타내며, 서버는 이 정보를 활용하여 사용자에게 해당 언어로 적절한 응답을 제공할 수 있습니다.
DispatcherServlet-servlet.xml의 네임스페이스에 mvc를 추가합니다.
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.2.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.2.xsd">
...
<bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
<property name="basenames">
<list>
<value>message.messageFile</value>
</list>
</property>
</bean>
<bean id="localeResolver" class="org.springframework.web.servlet.i18n.SessionLocaleResolver" />
<mvc:interceptors>
<bean class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor">
<property name="paramName" value="lang" />
</bean>
</mvc:interceptors>
</beans>
DispatcherServlet-servlet.xml
LocaleChangeInterceptor는 Spring Framework에서 제공하는 인터셉터중 하나로, 웹 어플리케이션에서 사용자의 Locale 정보를 동적으로 변경하고 관리하는 데 사용됩니다. 이 인터셉터는 주로 다국어 지원 및 지역화를 구현하는 데 활용되며 인위적으로 다른언어로 서비스 할 수 있습니다.
페이지에 적용시키기
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://www.springframework.org/tags" prefix="spring" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>글작성페이지</title>
</head>
<body>
<h1><a href="insertBoard.do?lang=en">EN</a>|<a href="insertBoard.do?lang=ko">KO</a></h1>
<form action="insertBoard.do" method="POST" enctype="multipart/form-data">
<input type="hidden" name="writer" value="${member}">
<input type="text" name="title" required placeholder="<spring:message code='header.title' />"> <br>
<input type="text" name="content" required placeholder="<spring:message code='header.content' />"> <br>
<input type="file" name="fileUpload" onchange="thumbnail(this);" value="<spring:message code='header.file' />"> <br>
<input type="submit" value="<spring:message code='header.btn' />">
</form>
<hr>
<img alt="<spring:message code='body.image' />" src="" id="thumbnailImage">
<hr>
<a href="main.do"><spring:message code='footer.goback' /></a>
<script>
function thumbnail(input) {
if (input.files && input.files[0]) {
var reader = new FileReader();
reader.onload = function(e) {
document.getElementById('thumbnailImage').src = e.target.result;
};
reader.readAsDataURL(input.files[0]);
}
else {
document.getElementById('thumbnailImage').src = "";
}
}
</script>
</body>
</html>
insertBoard.jsp
다국어 메세지를 처리하고 출력하기 위해서는 <spring:message> 태그를 사용할 수 있습니다. 이 태그를 사용하려면 먼저 <%@ taglib uri="http://www.springframework.org/tags" prefix="spring" %> 태그 라이브러리를 선언해야 합니다. 그 다음 <
spring:message code="message.code" /> 태그를 사용합니다. message.code는 출력할 메세지의 코드 키 입니다. 이 코드 키는 메세지 소스에 정의된 메세지 properties 파일에서 해당하는 메세지를 찾아 출력합니다.
결과 화면
영어와 한국어로 나오는 모습을 볼 수 있습니다.
GitHub
https://github.com/Qkrwnsgus0522/Spring