티스토리 뷰
3. JSTL fmt 태그를 이용한 다국어 처리
JSTL fmt 태그는 다국어 문서 처리를 위한 국제화 및 지역 태그이다.
JSTL 라이브러리는 날짜와 숫자 등을 형식화하는 기능을 제공하고 JSTL fmt 태그는 특정 지역에 따라 다른 메시지를 출력할 때 사용한다.
JSTL fmt 태그 라이브러리를 사용하기 위해서는 taglib 디렉티브 태그로 서식 라이브러리를 포함해야한다.
그리고 JSTL 라이브러리인 jstl.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>
결과
'코딩 > JSP' 카테고리의 다른 글
웹쇼핑몰:상품 등록 페이지의 보안 처리하기 (0) | 2023.12.13 |
---|---|
[10주 2일차] 시큐리티 (1) (1) | 2023.12.12 |
웹쇼핑몰 : 상품 등록 페이지의 다국어 처리하기 (0) | 2023.12.12 |
웹쇼핑몰 : 상품 등록 데이터의 유효성 검사하기 (0) | 2023.12.11 |
[10주 1일차] 다국어 처리 (0) | 2023.12.11 |
- Total
- Today
- Yesterday