[쉽게 배우는 JSP 웹 프로그래밍] 9장 정리, 연습문제

다국어 처리의 개념과 방법을 소개하였으며, 이를 위해 Locale 클래스와 JSTL fmt 태그를 사용하는 방법을 설명하였다. Locale 클래스는 사용자의 지역 환경에 따라 지역적 문화의 정보를 담고 있으며, JSTL fmt 태그는 다국어 문서 처리를 위한 국제화 및 지역화 태그로, 날짜와 숫자 등을 형식화하는 기능을 제공한다.
Feb 26, 2024
[쉽게 배우는 JSP 웹 프로그래밍] 9장 정리, 연습문제

Locale 클래스를 이용한 다국어 처리

locale01.jsp

<%@ page contentType="text/html; charset=utf-8"%> <%@ page import="java.text.NumberFormat"%> <%@ page import="java.text.DateFormat"%> <%@ page import="java.util.*"%> <html> <head> <title>Internationalization</title> </head> <body> <h3>현재 로케일의 국가, 날짜, 통화</h3> <% Locale locale = request.getLocale(); Date currentDate = new Date(); DateFormat dateFormat = DateFormat.getDateInstance(DateFormat.FULL,locale); NumberFormat numberFormat = NumberFormat.getNumberInstance(locale); %> <p> 국가 : <%=locale.getDisplayCountry() %> <p> 날짜 : <%=dateFormat.format(currentDate) %> <p> 숫자(12345.67) : <%=numberFormat.format(12345.67) %> </body> </html>

핵심 키워드

  • Locale 클래스는 특정 지리적, 정치적, 문화적 지역을 나타내는 클래스로, 사용자의 지역 환경에 따라 결정되는 지역적 문화(언어, 날짜, 시간 등)의 정보를 담고 있다.
  • Locale 객체의 생성은 request 내장 객체를 이용하여 현재 웹 브라우저에 미리 정의된 언어나 국가 정보를 가져오는 방법을 따른다.
    • Locale 클래스를 사용하려면 JSP 페이지에 page 디렉티브 태그의 import 속성으로 패키지 java.util.Locale을 설정해야 한다.
 

JSTL fmt 태그를 이용한 다국어 처리

requestIncoding.jsp

<%@ page contentType="text/html; charset=euc-kr"%> <%@ taglib prefix="fmt" uri="http://java.sun.com/jstl/fmt" %> <html> <head> <title>Internationalization</title> </head> <body> <fmt:requestEncoding value="euc-kr"/> 요청 파라미터: <% out.println(request.getParameter("id")); %> <form method="post" action="#"> <p> 아이디 <input type="text" name="id"> <input type="submit" value="전송"> </form> </body> </html>

myBundle_ko.properties

title=\uC790\uBC14 \uC11C\uBC84 \uD398\uC774\uC9C0 username=\uAD00\uB9AC\uC790 password=1234

myBundle_en.properties

title=Java Server Pages username=admin password=1234

jstl_fmt01.jsp

<%@ page contentType="text/html; charset=utf-8"%> <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%> <html> <head> <title>Internationalization</title> </head> <body> <p> ----------기본 로케일---------- <fmt:setBundle basename="ch09.myBundle" var="resourceBundle" /> <p> 제목 : <fmt:message key="title" bundle="${resourceBundle}" /> <p> <fmt:message key="username" var="userMsg" bundle="${resourceBundle }" /> 이름 : ${userMsg} <p> ----------영문 로케일---------- <fmt:setLocale value="en"/> <fmt:setBundle basename="ch09.myBundle" var="resourceBundle" /> <p> 제목 : <fmt:message key="title" bundle="${resourceBundle}" /> <p> <fmt:message key="username" var="userMsg" bundle="${resourceBundle}" /> 이름 : ${userMsg} </body> </html>

jstl_fmt02.jsp

<%@ page contentType="text/html; charset=utf-8"%> <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%> <html> <head> <title>Internationalization</title> </head> <body> <p> 숫자 : <fmt:parseNumber value="3200100" var="fn"/> <!-- parseNumber는 연산이 가능하다 --> <p> <fmt:formatNumber value="3200100" type="number"/> <p> <fmt:formatNumber value="3200100" type="number" groupingUsed="false"/> <p> <fmt:formatNumber value="3200100" type="currency" groupingUsed="true"/> <p> <fmt:formatNumber value="3200100" type="currency" currencySymbol="&"/> <p> <fmt:formatNumber value="0.45" type="percent"/> <p> <fmt:formatNumber value="3200100" minIntegerDigits="10" minFractionDigits="2"/> <p> <fmt:formatNumber value="3200100.45" pattern=".000"/> <p> <fmt:formatNumber value="3200100.45" pattern="#,#00.0#"/> <p> ${fn+1 } </body> </html>

jstl_fmt03.jsp

<%@ page contentType="text/html; charset=utf-8"%> <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%> <html> <head> <title>Internationalization</title> </head> <body> <p> <jsp:useBean id="now" class="java.util.Date"/> <p> <fmt:formatDate value="${now }" type="date"/> <p> <fmt:formatDate value="${now }" type="time"/> <p> <fmt:formatDate value="${now }" type="both"/> <p> <fmt:formatDate value="${now }" type="both" dateStyle="default" timeStyle="default"/> <p> <fmt:formatDate value="${now }" type="both" dateStyle="short" timeStyle="short"/> <p> <fmt:formatDate value="${now }" type="both" dateStyle="medium" timeStyle="medium"/> <p> <fmt:formatDate value="${now }" type="both" dateStyle="long" timeStyle="long"/> <p> <fmt:formatDate value="${now }" type="both" dateStyle="full" timeStyle="full"/> <p> <fmt:formatDate value="${now }" type="both" pattern="yyyy년MM월dd일 HH시mm분ss초 E요일"/> </body> </html>

jstl_fmt04.jsp

<%@ page contentType="text/html; charset=utf-8"%> <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%> <html> <head> <title>Internationalization</title> </head> <body> <jsp:useBean id="now" class="java.util.Date" /> <p> 한국 : <fmt:formatDate value="${now }" type="both" dateStyle="full" timeStyle="full" /> <p> <fmt:timeZone value="America/New_York"> 뉴욕 : <fmt:formatDate value="${now }" type="both" dateStyle="full" timeStyle="full" /> </fmt:timeZone> <p> <fmt:timeZone value="Eurpoe/London"> 런던 : <fmt:formatDate value="${now }" type="both" dateStyle="full" timeStyle="full" /> </fmt:timeZone> </body> </html>
 

핵심 키워드

  • JSTL fmt 태그는 다국어 문서 처리를 위한 국제화 및 지역화 태그다. 날짜와 숫자 등을 형식화하는 기능을 제공하는 JSTL 라이브러리인 JSTL fmt 태그는 특정 지역에 따라 다른 메시지를 출력할 때 사용한다.
    • JSTL fmt 태그는 중복 작업을 없애고 하나의 JSP 페이지에서 다양한 언어에 맞는 메시지를 출력하게 한다.
    • JSTL fmt 태그 라이브러리를 사용하려면 JSP 페이지에 taglib 디렉티브 태그로 서식 라이브러리를 포함해야 한다. 또한 jstl.jar 파일이 필요하다.
      • setLocale 태그는 국제화 태그가 사용할 로케일을 설정하는 태그다.
      • requestEncoding 태그는 요청 파라미터의 문자 인코딩을 설정하는 태그다.
      • 리소스번들은 메시지 처리 태그에서 사용하는 파일이다.
      • bundle 태그는 사용할 리소스들을 설정하는 태그다.
      • message 태그는 bundle 태그에 설정한 리소스들에서 메시지를 읽어와 출력하는 태그다.
      • setbundle 태그는 리소스번들을 가져와 변수로 저장한 후 JSP 페이지 어디에서나 사용할 수 있는 태그다.
      • formatNumber 태그는 숫자를 형식에 맞춰 출력하는 태그다.
      • parseNumber 태그는 formatNumber 태그와 반대로 사용자가 설정한 패턴 문자열에서 숫자를 추출하는 태그다.
      • formatDate 태그는 날짜 정보를 담고 있는 갹체를 형식화하여 출력하는 태그다.
      • timeZone 태그는 시간대별로 시간을 처리하는 태그다.
      • setTimeZone 태그는 특정 영역 범위의 시간대별로 시간을 처리하는 태그다.
 

연습문제

practice01.jsp

01 다국어 처리는 웹 브라우저를 사용하는 국가에 따라 다양한 언어 및 지역을 지원하는 서비스다. 02 java.util.Locale request.getLocale(); 03 setLocae 태그는 로케일을 설정한다. requestEncoding 태그는 요청 파라미터의 문자 인코딩을 설정한다. bundle 태그는 사용할 리소스번들을 설정한다. message 태그는 리소스번들에서 로케일에 맞는 메시지를 가져와 출력한다. setBundle 태그는 리소스번들을 읽어와 특정 변수에 저장한다. formatDate 태그는 날짜 형식을 표현한다. parseDate 태그는 문자열에서 원하는 패턴의 날짜 형식으로 변환한다. parseNumber 태그는 문자열에서 원하는 패턴의 숫자 형식으로 변환한다. formatNumber 태그는 숫자 형식을 표현한다. setTimeZone 태그는 특정 범위의 시간대를 설정한다. timeZone 태그는 시간대를 설정한다.

practice04.jsp

<%@ page contentType="text/html; charset=utf-8"%> <%@ page import="java.util.*"%> <html> <head> <title>Internationalization</title> </head> <body> <h3>현재 로케일</h3> <% Locale locale = request.getLocale(); %> <p> 언어 : <%=locale.getDisplayLanguage() %> <p> 국가 : <%=locale.getDisplayCountry() %> </body> </html>

practice05.jsp

<%@ page contentType="text/html; charset=utf-8"%> <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%> <html> <head> <title>Validation</title> </head> <body> <fmt:setLocale value='<%=request.getParameter("language")%>' /> <fmt:bundle basename="ch09.practice05"> <div class="text-right"> <a href="?language=ko">Korean</a>|<a href="?language=en">English</a> </div> <form name="loginForm" method="post" onsubmit="return checkform();"> <p> <fmt:message key="id" /> : <input type="text" id="id" name="id"> <p> <fmt:message key="passwd" /> : <input type="password" id="passwd" name="passwd"> <p> <input type="submit" value="<fmt:message key="button" />"> </form> </fmt:bundle> </body> </html>

practice06

message_en.properties

title = Book Addition bookId = Book ID name = Name unitPrice = Unit Price author = Author description = Description publisher = Publisher category = Category unitsInStock = Units in Stock totalPages = TotalPages releaseDate = ReleaseDate condition = Condition bookImage = Image condition_New = New condition_Old = Old condition_Refurbished = E-Book button = Insert

message_ko.properties

title = \uB3C4\uC11C \uB4F1\uB85D bookId = \uB3C4\uC11C \uC544\uC774\uB514 name = \uB3C4\uC11C\uBA85 unitPrice = \uAC00\uACA9 author = \uC800\uC790 description = \uC0C1\uC138 \uC124\uBA85 publisher = \uCD9C\uD310\uC0AC category = \uBD84\uB958 unitsInStock = \uC7AC\uACE0 \uC218 totalPages = \uCD1D \uD398\uC774\uC9C0 \uC218 releaseDate = \uCD9C\uD310\uC77C condition = \uC0C1\uD0DC bookImage = \uC774\uBBF8\uC9C0 condition_New = \uC2E0\uADDC \uB3C4\uC11C condition_Old = \uC911\uACE0 \uB3C4\uC11C condition_Refurbished = E-Book button = \uB4F1\uB85D

addBook.jsp

<%@ page contentType="text/html; charset=utf-8"%> <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%> <html> <head> <link rel="stylesheet" href="./resources/css/bootstrap.min.css" /> <script type="text/javascript" src="./resources/js/validation.js"></script> <title>도서 등록</title> </head> <body> <fmt:setLocale value='<%=request.getParameter("language")%>' /> <fmt:bundle basename="bundle.message"> <jsp:include page="menu.jsp" /> <div class="jumbotron"> <div class="container"> <h1 class="display-3"> <fmt:message key="title" /> </h1> </div> </div> <div class="container"> <div class="text-right"> <a href="?language=ko">Korean</a>|<a href="?language=en">English</a> </div> <form name="newProduct" action="./processAddBook.jsp" class="form-horizontal" method="post" enctype="multipart/form-data"> <div class="form-group row"> <label class="col-sm-2"><fmt:message key="bookId" /></label> <div class="col-sm-3"> <input type="text" id="bookId" name="bookId" class="form-control"> </div> </div> <div class="form-group row"> <label class="col-sm-2"><fmt:message key="name" /></label> <div class="col-sm-3"> <input type="text" id="name" name="name" class="form-control"> </div> </div> <div class="form-group row"> <label class="col-sm-2"><fmt:message key="unitPrice" /></label> <div class="col-sm-3"> <input type="text" id="unitPrice" name="unitPrice" class="form-control"> </div> </div> <div class="form-group row"> <label class="col-sm-2"><fmt:message key="author" /></label> <div class="col-sm-3"> <input type="text" name="author" class="form-control"> </div> </div> <div class="form-group row"> <label class="col-sm-2"><fmt:message key="publisher" /></label> <div class="col-sm-3"> <input type="text" name="publisher" class="form-control"> </div> </div> <div class="form-group row"> <label class="col-sm-2"><fmt:message key="releaseDate" /></label> <div class="col-sm-3"> <input type="text" name="releaseDate" class="form-control"> </div> </div> <div class="form-group row"> <label class="col-sm-2"><fmt:message key="totalPages" /></label> <div class="col-sm-3"> <input type="text" name="totalPages" class="form-control"> </div> </div> <div class="form-group row"> <label class="col-sm-2"><fmt:message key="description" /></label> <div class="col-sm-5"> <textarea name="description" cols="50" rows="2" class="form-control"></textarea> </div> </div> <div class="form-group row"> <label class="col-sm-2"><fmt:message key="category" /></label> <div class="col-sm-3"> <input type="text" name="category" class="form-control"> </div> </div> <div class="form-group row"> <label class="col-sm-2"><fmt:message key="unitsInStock" /></label> <div class="col-sm-3"> <input type="text" id="unitsInStock" name="unitsInStock" class="form-control"> </div> </div> <div class="form-group row"> <label class="col-sm-2"><fmt:message key="condition" /></label> <div class="col-sm-5"> <input type="radio" name="condition" value="New "> <fmt:message key="condition_New" /> <input type="radio" name="condition" value="Old "> <fmt:message key="condition_Old" /> <input type="radio" name="condition" value="Refurbished "> <fmt:message key="condition_Refurbished" /> </div> </div> <div class="form-group row"> <label class="col-sm-2"><fmt:message key="bookImage" /></label> <div class="col-sm5"> <input type="file" name="bookImage" 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="<fmt:message key="button" />" onclick="CheckAddBook()"> </div> </div> </form> </div> </fmt:bundle> </body> </html>
 

결론

해당 코드를 작성하면서 다국어 처리의 개념, Locale 클래스를 이용한 다국어 처리 방법, JSTL fmt 태그를 이용한 다국어 처리 방법을 익힐 수 있었다.
Share article

More articles

See more posts

👨🏻‍💻DriedPollack's Blog