반응형
MessageSource를 이용하여 다국어 처리
앞서 배운 MessageSource를 이용해서 도서 등록 페이지의 폼 필드 이름을
다국어로 처리하여 출력해봅니다.
servlet-context.xml
MessageSource 구현체의 빈 객체를 등록합니다.
<?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns="http://www.springframework.org/schema/mvc"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:beans="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd
http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">
<!-- DispatcherServlet Context: defines this servlet's request-processing infrastructure -->
<!-- Enables the Spring MVC @Controller programming model -->
<annotation-driven enable-matrix-variables="true"/>
<!-- Handles HTTP GET requests for /resources/** by efficiently serving up static resources in the ${webappRoot}/resources directory -->
<resources mapping="/resources/**" location="/resources/" />
<!-- Resolves views selected for rendering by @Controllers to .jsp resources in the /WEB-INF/views directory -->
<beans:bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<beans:property name="prefix" value="/WEB-INF/views/" />
<beans:property name="suffix" value=".jsp" />
</beans:bean>
<context:component-scan base-package="com.springmvc.*" />
<beans:bean id="multipartResolver"
class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<beans:property name="maxUploadSize" value="10240000"/>
</beans:bean>
<beans:bean id="messageSource"
class="org.springframework.context.support.ResourceBundleMessageSource">
<beans:property name="basename" value="messages"/>
<beans:property name="defaultEncoding" value="UTF-8"/>
</beans:bean>
<interceptors>
<beans:bean class="com.springmvc.interceptor.MonitoringInterceptor"/>
<beans:bean class="com.springmvc.interceptor.AuditingInterceptor"/>
</interceptors>
</beans:beans>
ResourceBundleMessageSource 클래스를 등록합니다.
메시지 리소스 파일은 mesages.properties가 됩니다.
한글을 출력하기 위해 인코딩은 UTF-8로 설정합니다.
messages_ko.properties
src/main/resources 폴더에 파일을 생성하고 다음과 같이 작성해줍니다.
addBook.form.title.label = \uB3C4\uC11C \uB4F1\uB85D
addBook.form.subtitle.label = \uC2E0\uADDC \uB3C4\uC11C \uB4F1\uB85D
addBook.form.bookId.label = \uB3C4\uC11CID
addBook.form.name.label = \uB3C4\uC11C\uBA85
addBook.form.unitPrice.label = \uAC00\uACA9
addBook.form.author.label = \uC800\uC790
addBook.form.description.label = \uC0C1\uC138\uC815\uBCF4
addBook.form.publisher.label = \uCD9C\uD310\uC0AC
addBook.form.category.label = \uBD84\uB958
addBook.form.unitsInStock.label = \uC7AC\uACE0\uC218
addBook.form.releaseDate.label = \uCD9C\uD310\uC77C
addBook.form.condition.label = \uC0C1\uD0DC
addBook.form.bookImage.label = \uB3C4\uC11C\uC774\uBBF8\uC9C0
addBook.form.button.label = \uB4F1\uB85D
messages_en.properties
src/main/resources 폴더에 파일을 생성하고 다음과 같이 작성해줍니다.
addBook.form.title.label = Book Addition
addBook.form.subtitle.label = New Book Registration
addBook.form.bookId.label = Book ID
addBook.form.name.label = Name
addBook.form.unitPrice.label = Unit Price
addBook.form.author.label = Author
addBook.form.description.label = Description
addBook.form.publisher.label = Publisher
addBook.form.category.label = Category
addBook.form.unitsInStock.label = Units in Stock
addBook.form.releaseDate.label = Release Date
addBook.form.condition.label = Condition
addBook.form.bookImage.label = Book Image
addBook.form.button.label = Addition
addBook.jsp
다국어 처리를 하기 위해서 <spring:message> 태그를 다음과 같이 수정해줍니다.
<%@ page contentType="text/html; charset=utf-8" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>
<html>
<head>
<link href="<c:url value="/resources/css/bootstrap.min.css"/>" rel="stylesheet">
<title>도서 등록</title>
</head>
<body>
<nav class="navbar navbar-expand navbar-dark bg-dark">
<div class="container">
<div class="navbar-header">
<a class="navbar-brand" href="./home">Home</a>
</div>
</div>
</nav>
<div class="jumbotron">
<div class="container">
<h1 class="display-3">
<spring:message code="addBook.form.title.label"/>
</h1>
</div>
</div>
<div class="container">
<div class="float-right">
<form:form action="${pageContext.request.contextPath }/logout" method="POST">
<input type="submit" class="btn btn-sm btn-success" value="Logout" />
</form:form>
</div>
<br><br>
<form:form modelAttribute="NewBook"
action="./add?${_csrf.parameterName }=${_csrf.token }"
class="form-horizontal"
enctype="multipart/form-data">
<fieldset>
<legend><spring:message code="addBook.form.subtitle.label"/></legend>
<div class="form-group row">
<label class="col-sm-2 control-label">
<spring:message code="addBook.form.bookId.label"/>
</label>
<div class="col-sm-3">
<form:input path="bookId" class="form-control"/>
</div>
</div>
<div class="form-group row">
<label class="col-sm-2 control-label">
<spring:message code="addBook.form.name.label"/>
</label>
<div class="col-sm-3">
<form:input path="name" class="form-control"/>
</div>
</div>
<div class="form-group row">
<label class="col-sm-2 control-label">
<spring:message code="addBook.form.unitPrice.label"/>
</label>
<div class="col-sm-3">
<form:input path="unitPrice" class="form-control"/>
</div>
</div>
<div class="form-group row">
<label class="col-sm-2 control-label">
<spring:message code="addBook.form.author.label"/>
</label>
<div class="col-sm-3">
<form:input path="author" class="form-control"/>
</div>
</div>
<div class="form-group row">
<label class="col-sm-2 control-label">
<spring:message code="addBook.form.description.label"/>
</label>
<div class="col-sm-5">
<form:textarea path="description" cols="50" rows="2" class="form-control"/>
</div>
</div>
<div class="form-group row">
<label class="col-sm-2 control-label">
<spring:message code="addBook.form.publisher.label"/>
</label>
<div class="col-sm-3">
<form:input path="publisher" class="form-control"/>
</div>
</div>
<div class="form-group row">
<label class="col-sm-2 control-label">
<spring:message code="addBook.form.category.label"/>
</label>
<div class="col-sm-3">
<form:input path="category" class="form-control"/>
</div>
</div>
<div class="form-group row">
<label class="col-sm-2 control-label">
<spring:message code="addBook.form.unitsInStock.label"/>
</label>
<div class="col-sm-3">
<form:input path="unitsInStock" class="form-control"/>
</div>
</div>
<div class="form-group row">
<label class="col-sm-2 control-label">
<spring:message code="addBook.form.releaseDate.label"/>
</label>
<div class="col-sm-3">
<form:input path="releaseDate" class="form-control"/>
</div>
</div>
<div class="form-group row">
<label class="col-sm-2 control-label">
<spring:message code="addBook.form.condition.label"/>
</label>
<div class="col-sm-3">
<form:radiobutton path="condition" value="New"/>New
<form:radiobutton path="condition" value="Old"/>Old
<form:radiobutton path="condition" value="E-Book"/>E-Book
</div>
</div>
<div class="form-group row">
<label class="col-sm-2 control-label">
<spring:message code="addBook.form.bookImage.label"/>
</label>
<div class="col-sm-7">
<form:input path="bookImage" type="file" class="form-control"/>
</div>
</div>
<div class="form-group row">
<div class="col-sm-offset-2 col-sm-10">
<input type="submit" class="btn btn-primary" value="<spring:message code="addBook.form.button.label"/>" />
</div>
</div>
</fieldset>
</form:form>
<hr>
<footer>
<p>© BookMarket</p>
</footer>
</div>
</body>
</html>
<spring:message> 태그를 사용하기 위해 스프링 태그 라이브러리를 선언하고
messages.properties 파일에서 폼 필드에 해당하는 값의 메시지를 읽어 와서 출력합니다.
실행 결과
/books/add를 입력합니다.
로케일이 한국인 경우입니다.
다음은 로케일이 영어인 경우입니다.
반응형
'SPRING' 카테고리의 다른 글
[SPRING]#47 도서 쇼핑몰 구현 (다국어 처리4) (0) | 2024.01.21 |
---|---|
[SPRING]#46 도서 쇼핑몰 구현 (다국어 처리3) (0) | 2024.01.20 |
[SPRING]#44 도서 쇼핑몰 구현 (다국어 처리1) (0) | 2024.01.20 |
[SPRING]#43 도서 쇼핑몰 구현 (로그 기록6) (0) | 2024.01.18 |
[SPRING]#42 도서 쇼핑몰 구현 (로그 기록5) (0) | 2024.01.18 |