티스토리 뷰

 

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

 

JSTL fmt 태그는 다국어 문서 처리를 위한 국제화 및 지역 태그이다.

JSTL 라이브러리는 날짜와 숫자 등을 형식화하는 기능을 제공하고 JSTL fmt 태그는 특정 지역에 따라 다른 메시지를 출력할 때 사용한다.

 

JSTL fmt 태그 라이브러리를 사용하기 위해서는 taglib 디렉티브 태그로 서식 라이브러리를 포함해야한다.

그리고 JSTL 라이브러리인 jstl.jar 파일을 필요로 한다.

 

WEB-INF 안의 lib에 jstl-1.2.jar 파일을 넣어준다.

 

아래는 taglib를 사용하여 서식 라이브러리를 포함하도록 해준 명령어

<%@ taglib prefic="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>

 

uri 속성 : 사용자가 정의한 태그의 설정 정보가 담긴 경로 주소이다.

prefix 속성 : uri에 설정한 주소를 사용자가 정의한 태그로 식별하는데 쓰이는 이름이다. 

 

* jstl-1.2.jar은 <%%> / <jsp:useBean /> 등의 해석을 돕는다. (크롬이 혼자서는 해석을 할 수 없기 때문)

 

*설정시 prefix를 꼭 사용해서 설정해야하는 이유

jstl이 fmt와 core를 가지고 해석을 한다. (두개말고도 존재함)

prefix에서 무엇을 식별하고 사용할지  정해주어야 fmt 또는 core을 해석 할 수 있다.

 

 

 

* JSTL fmt 태그의 종류

구분 태그 유형 설명
Locale 설정 setLocale 로케일을 설정한다.
requestEncoding 요청 파라미터의 문자 인코딩을 설정한다.
메시지 처리 bundle 사용할 리소스번들을 설정한다.
message 리소스번들에서 로케일에 맞는 메시지를 가져와 출력한다.
setBundle 리소스번들을 읽어와 특정 변수에 저장한다.
날짜 formatDate 날짜 형식을 표현한다.
parseDate 문자열에서 원하는 패턴의 날짜 형식으로 변환한다.
숫자 parseNumber 문자열에서 원하는 패턴의 숫자 형식으로 변환한다.
formatNumber 숫자 형식을 표현한다.
시간 setTimeZone 특정 범위의 시간대를 설정한다.
timeZone 시간대를 설정한다.

 

 

 

 

 

3.1 로케일 설정 태그의 기능과 사용법

 

- setLocale 태그

사용할 로케일을 설정하는 태그이다.

setLocale 태그는 다국어를 지원하는 웹 페이지를 만들 때 리소스번들인 .properties파일과 연결하여 사용한다.

 

<fmt:setLocale
	value = "언어 코드[_국가 코드]"
    [scope="{page|request|session|application}"]/>

위의 명령어는 setLocale 태그의 형식이다.

이때 scope의 기본 설정은 page이다.

 

* 언어 코드와 국가 코드를 모두 설정하는데

하는 이유? 국가 안에서도 여러 언어를 쓸 수 있고 언어

 

 

 

 

 

 

3.2 메시지 처리 태그의 기능과 사용법

 

리소스번들

리소스번들은 메시지 처리 태그에서 사용하는 파일이다.

이것을 메시지번들이라고 한다. (번들이라는 것은 묶음, 구성품이 같이 든것과 같다.)

파일은 보통 WEB-INF/classes/폴더에 있는데 이것에 직접 넣는 것이 아니라 실행을 하면 자동적으로 생성되어 컴파일된다.

리소스 번들은 java.util.properties 클래스에 정의,된 방법으로 메시지를 읽어오기 때문에 확장자가 properties인 파일이 반드시 있어야한다.

 

 

* 리소스번들로 사용하는 *.properties 파일의 종류

*.properties 파일 설명
파일 이름.proeprties 기본 메시지일 때 사용한다.
파일 이름_ko.properties 한글 메시지일 때 사용한다.
파일 이름_en.properties 영어 메시지일 때 사용한다.

 

 

 

* 한글, 영문 리소스번들 작성 예시

(key는 같아야한다. value는 다름 (name은 key 다음 값은 value)

//message_ko.properties 파일일 경우
name = 홍길순

 

//message_en.properties 파일인 경우
name=your name

 

 

 

 

 

 

* 리소스번들로 사용하는 *.properties 파일

폴더 안에 위치하며 디렉터리의 깊이ㅔ 따라서 패키지 형식의 이름으로 되어 있다.

로케일이 ko이면 testBundle_ko.properteis 파일을 읽어온다.

만약 붙지않거나 없는 언어를 지정했다면 default(기본)을 가져와 testBundle.properties 파일을 읽어온다.

 

 

 

 

 

- bundle 태그

bundle 태그는 사용할 리소스번들을 설정하는 태그이다.

bundle 태그는 리소스번들로 사용할 *.properties 파일을 읽어오는 역할을 하고 message 태그와 함께 사용한다.

 

<fmt:bundle basename="리소스번들" [prefix="key 이름"]>
	//body 내용
</fmt:bundle>

 

* basename 어떤 파일 쓸지 정해주는 것이다.

* 그렇기 때문에 반드시 확장자가 properties인 파일을 설정해야한다.

 

 

 

 

- message 태그

message 태그는 bundle 태그에 설정한 리소스번들에서 메시지를 읽어와 출력하는 태그이다.

<fmt:message
	key="메시지 key 이름"
    [bundle="setBundle 태그의 변수 이름"]
    [var="메시지를 저장하는 변수 이름"]
    [scope="{page|request|session|application}"]/>

 

*scope의 기본 값은 page이다.

 

 

*bundle 태그와 message 태그 사용 예시

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<fmt:bundle basename="resourceBundle.message">
    <p> <fmt:message key="name" />
    	<fmt:message key="hello" var="msg" />
    <p> ${msg}
    </fmt:bundle>
</body>
</html>

 

 

 

 

 

 - setBundle 태그

setBundle 태그는 리소스번들을 가져와 변수로 저장한 후 JSP 페이지 어디에서나 사용할 수 있는 태그이다.

setBundle 태그는 bundle 태그를 대체해서 사용할 수 있다.

 

<fmt:setBundle
	basename="리소스번들"
    [var="리소스번들을 저장할 변수 이름"]
    [scope="{page|request|session|application}"]/> //기본 값은 page

 

 

 

 

 

사용자의 로케일에 따라 리소스번들의 메시지 출력하기

예제 9-2

 

bundle/myBundle.properties

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

 

 

bundle/myBundle_en.properties

title=Java Server Pages
username=admin
password=1234

 

 

jstl_fmt01.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<p>---------기본 로케일---------		
		<fmt:setLocale value="ko" />
		<fmt:setBundle basename="bundle.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="bundle.myBundle" var="resourceBundle" />
	<p> 제목 : <fmt:message key="title" bundle="${resourceBundle}" />
	<p> 이름 : <fmt:message key="username" bundle="${resourceBundle}" />	
</body>
</html>

 

결과

이때 <fmt:setLocale value:"ko" /> 를 붙이지 않으면 default로 한국어를 입력했어도 한글로 출력되지 않는다.

그 이유는 윈도우때문인데 윈도우 서버의 기본 로케일이 영어이기때문에 영어로 출력된다.

 

 

 

 

 

 

3.3 숫자 태그의 기능과 사용법

 

- formatNumber 태그

formatNumber 태그는 숫자를 형식에 맞춰 출력하는 태그이다.

 

 

 

 

예제 9-3

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>    
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<p> 숫자 : <fmt:formatNumber value="3200100" />
	<p> <fmt:formatNumber value="3200100" type="number" />
	<p> <fmt:formatNumber value="3200100" type="number" groupingUsed="false" />
	<p> <fmt:formatNumber value="3200100" type="currency" groupingUsed="ture" />
	<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.456" pattern="#,#00.0#" />
</body>
</html>

 

결과

 

 

 

 

 

 

3.4 날짜 태그의 기능과 사용법

 

- formaDate 태그

formatDate 태그는 날짜 정보를 담고 있는 객체를 형식화하여 출력하는 태그이다.

 

 

- parseDate 태그

parseDate 태그는 문자열로 표시된 날짜와 시간 값을 java.util.date변환하는 태그이다.

 

 

 

 

 

사용자의 로케일에 따라 날짜 형태 출력하기

예제 9-4

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>        
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</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="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>

 

결과

 

 

 

 

 

 

 

 

3.5 시간 태그의 기능과 사용법

 

timeZone 태그

시간대별로 시간을 처리하는 태그.

 

setTimeZone 태그

특정 영역 범위의 시간대별로 시간을 처리하는 태그

 

 

 

사용자의 로케일에 따라 타임존 출력하기

예제 9-5

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>    
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</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="Europs/London">
			런던 : <fmt:formatDate value="${now}" type="both"
			dateStyle="full" timeStyle="full" />
			</fmt:timeZone>	
</body>
</html>

 

결과

 

 

 

 

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday