일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 배열
- 이름 마스킹
- forEach
- 스프링
- 형변환
- array
- 자바
- Java
- 맛집
- url 치환
- set
- 모바일게임
- 원펀맨: 최강의 남자
- 자바스크립트
- html
- 개발
- SQL
- jQuery
- React
- Oracle
- 오라클
- JSTL
- 원펀맨
- JavaScript
- JSX
- 리액트
- table
- JS
- url 변환
- spring
- Today
- Total
특별한 일상
[jsp/servlet] JSTL 사용법 : 국제화 태그 <fmt: 본문
안녕하세요. 소다맛사탕 입니다.
지난 포스팅인 '코어 태그', 'XML 태그'에 이어 오늘은 국제화 태그(fmt) 라이브러리에 대한 사용법을 알아 보겠습니다.
국제화 태그 라이브러리를 사용하려면 앞서서 상단 선언에 이와 같이 선언한다.
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
※ 국제화 태그 라이브러리
특정 지역에 따라서 알맞은 메시지를 출력해주고 싶은 경우에 사용.
기능 분류 | 태그 | 설명 |
로케일 지정(Locale) | setLocale | Locale을 지정. |
requestEncoding | 요청 파라미터의 캐릭터 인코딩을 지정. | |
메시지 처리 | bundle | 사용할 번들을 지정. |
message | 지역에 알맞은 메시지를 출력. | |
setBundle | 리소스 번들을 읽어와 특정 변수에 저장. | |
숫자 및 날짜 포맷팅 | formatNumber | 숫자를 포맷팅. |
formatDate | Date 객체를 포맷팅. | |
parseDate | 문자열로 표시된 날짜를 분석해 Date객체로 변환. | |
parseNumber | 문자열로 표시된 날짜를 분석해 숫자로 변환. | |
setTimeZone | 시간대 정보를 특정 변수에 저장. | |
timeZone | 시간대를 지정. |
1. 로케일 지정(Locale)
1-1. <fmt:setLocale>
; 국제화 태그들이 사용할 로케일을 지정한다.
<fmt:setLocale value="ko" scope="request" />
<%--
헤더값이 'ko'일 경우 한글 메시지를 우선순위로
'en'일 경우 영문 메시지를 우선순위로 처리.
value : 국가코드 형식으로 지정
value 값이 없으면 기본 로케일.
scope : Locale이 영향을 미치는 범위. 기본값 page
--%>
일반적으로 웹 브라우저가 전송한 Accept-Header의 갑세 따라서 메시지를 출력하기에 거의 쓰지 않는다.
1-2. <fmt:requestEncoding> 태그
; 요청 파라미터의 캐릭터 인코딩을 지정한다.
<fmt:requestEncoding value="euc-kr" />
<%--
request.setCharacterEncoding("euc-kr");
과 동일
한글 euc-kr
기본 및 국제(영어) utf-8
--%>
2. 메시지 처리
메시지 처리 태그에서 사용할 리소스 번들 파일을 작성해야 한다.
클래스 패스에 위치해야 하기 때문에 웹에서 사용할 메시지 번들 파일은
WEB-INF/classes 또는 WEB-INF/lib에 포함된 jar파일에 포함시키면 된다.
-- WEB-INF/classes/resources/message.properties
TEST1 = this is test1
TEST2 = this is message
TEST3 = this name is {0}
2-1. <fmt:bundle> 태그
; 태그 몸체에서 사용할 리소스 번들을 지정한다.
2-2. <fmt:message>
; 메시지를 출력한다.
기본적으로 위의 두 태그가 동시에 쓰이기에 예시를 같이 작성합니다.
<fmt:bundle basename="resources.message">
<fmt:message key="TEST2" />
</fmt:bundle>
<%--
this is message 출력
basename : String 타입. 사용할 리소스 번들의 이름.
prefix : String 타입. bundle 태그의 내부에서 사용되는
message 태그의 key 속성의 값 앞에 자동으로 붙게 될 문자열.
--%>
<fmt:bundle basename="resources.error" prefix="SYSTEM_">
<fmt:message key="001" />
</fmt:bundle>
<fmt:bundle basename="resources.error">
<fmt:message key="SYSTEM_001" />
</fmt:bundle>
<%-- 출처 : 쌍용강북교육센터 --%>
리소스 번들이 제공하는 메시지 중에서는 message.properties에서 TEST3와 같이
{0}, {1}, {2}와 같이 변경 가능한 요소를 제공하는 메세지도 존재.
<fmt:message key="TEST3">
<fmt:param value="${name}"/>
</fmt:message>
<%-- 메시지에 n개이상 존재시 --%>
<fmt:message key="TEST3">
<fmt:param value="${name}"/>
<fmt:param value="${phone}"/>
<fmt:param value="${detail}"/>
</fmt:message>
<%--
순서대로
{0}, {1}, {2}값
--%>
2-3. <fmt:setBundle> 태그
; 리소스 번들을 변수로 저장한 후, 어디서나 사용할 수 있도록 함.
<fmt:setBundle var="message" basename="resources.message" />
...
<fmt:message bundle=${message}" key="TEST1" />
<%--
setBundle을 지정하면 message 태그를 사용해
setBundle에 지정한 번들을 사용할 수 있다.
basename : String 타입. 읽어올 리소스 번들의 이름.
var : String 타입. 리소스 번들을 저장할 변수명.
scope : String 타입. 변수를 저장할 영역.
--%>
3. 숫자 및 날짜 포맷팅
3-1. <fmt:formatNumber> 태그
; 숫자를 양식에 맞춰 문자열(String)로 변환해준다.
<fmt:formatNumber value="숫자" [type="값타입"][pattern="패턴"]
[currentCode="통화코드"][currencySymbol="통화심볼"]
[groupingUsed="(true|false)"][var="변수명"][scope="영역"] />
---ex>
<c:set var="price" value="10000" />
<fmt:formatNumber value="${price}" type="number" var="valNum" />
통화 : <fmt:formatNumber value="${price}"
type="currency" currencySymbol="원" />
퍼센트 : <fmt:formatNumber value="${price}"
type="percent" groupingUsed="false" />
숫자 : ${valNum}
패턴 : <fmt:formatNumber value="${price}" pattern="00000000.00" />
<%-- 출력값
통화 : 원10,000
퍼센트 : 10000%
숫자 : 10,000
패턴 : 00010000.00
--%>
3-2. <fmt:formatDate> 태그
; 날짜 정보를 담고 있는 객체를 포맷팅하여 출력한다.
<fmt:formatDate value="날짜값" [type="값타입"]
[dateStyle="날짜스타일"][timeStyle="시간스타일"]
[pattern="패턴"][timeZone="타임존"]
[var="변수"][scope="영역"] />
<%--
type : time, date, both 중 한가지 값
dateStyle : default, short, medium, long, full 중 한가지 값
timeStyle : default, short, medium, long, full 중 한가지 값
--%>
---ex>
<c:set var="now" value="<%= new Java.util.Date() %>" />
<br>
<fmt:formatDate value="${now}" type="date" dateStyle="full" />
<br>
<fmt:formatDate value="${now}" type="date" dateStyle="short" />
<br>
<fmt:formatDate value="${now}" type="time" /><br>
<fmt:formatDate value="${now}" type="both"
dateStyle="full" timeStyle="full" /><br>
<fmt:formatDate value="${now}" type="date" pattern="z a h:mm" />
<%-- 출력값
2021년 5월 2일 일요일
21.5.2
오전 11:01:03
2021년 5월 2일 일요일 오전 11시 01분 03초 KST
KST 오전 11:01
--%>
3-3. <fmt:parseDate> 태그
; 문자열로 표시된 날짜 및 시간 값을 데이트 형식으로 파싱해주는 기능을 제공한다.
<fmt:parseDate value="날짜값"
[type="타입"][dateStyle="날짜스타일][timeStyle="시간스타일"]
[pattern="패턴"][timeZone="타임존"][parseLocale="로케일"]
[var="변수"][scope="영역"] />
<%--
type : time, date, both 중 한가지 값
dateStyle : default, short, medium, long, full 중 한가지 값
timeStyle : default, short, medium, long, full 중 한가지 값
--%>
---ex>
<fmt:parseDate value="2010-01-05 11:11:42"
pattern="yyyy-MM-dd HH:mm:ss" var="date" />
${date}
<%-- 출력값
2010-01-05 11:11:42
--%>
3-4. <fmt:parseNumber> 태그
; 문자열을 숫자로 변환해준다.
<fmt:parseNumber value="값" [type="값타입"][pattern="패턴"]
[parseLocale="통화코드"][integerOnly="true|false"]
[var="변수명"][scope="영역"] />
---ex>
<fmt:parseNumber value="1,234.56" pattern="0,000.00" var="num" />
${num}
<%-- 출력값
123456
--%>
3-5. <fmt:setTimeZone> 태그
; 시간대별로 시간을 처리할 수 있는 기능을 제공한다.
3-6. <fmt:timeZone> 태그
; 마찬가지다...
기본적으로 timezone 태그는 비슷한 기능이고 사용법도 같기에 예시를 같이 작성한다.
<fmt:timeZone value="HongKong">
<fmt:formatDate ... /> <%-- 사용하는 시간을 홍콩에 맞춤--%>
</fmt:timeZone>
---ex>
<c:set var="now" value="<%= new Java.util.Date() %>" />
<fmt:timeZone value="HongKong">
<fmt:formatDate value="${now}" typ="both"
dateStyle="full" timeStyle="full" />
</fmt:timeZone>
<%-- 출력값
2021 5월 2일 일요일 오후 1시 10분 10초 KST
2021 5월 2일 일요일 오후 12시 10분 10초 HKT
--%>
국제화 태그 fmt 중 가장 많이 쓰는건 아무래도 String 포맷팅 또는 number 포맷팅이기에
API 문서를 통해 더 자세하게 알아봤으면 좋겠습니다.
docs.oracle.com/javaee/5/jstl/1.1/docs/tlddocs/fmt/tld-summary.html
'IT•개발 끄적 > Jsp&Servlet' 카테고리의 다른 글
[jsp/servlet] JSTL 사용법 : XML 태그 <x: (0) | 2021.04.22 |
---|---|
[jsp/servlet] JSTL 사용법 : 코어 태그 <c: (0) | 2021.04.21 |
[jsp/servlet] JSTL 사용법 및 선언 (0) | 2021.04.21 |