앱을 개발하다 보면 의외로 resource bundle을 많이 사용하게 되는데, 그 resource bundle에 등록되어 있는 문자열을 좀 더 쉽게 JSTL Tag를 이용해 문자 추출해서 사용한다. 거기에 Formatting은 국제화를 지원해서 하나의 언어로 서비스 되는 문자가 지원되며 숫자, 날짜 데이터를 유저가 보기 편한 상태로 Format을 조정해서 출력한다.
학습목표
Formatting Tag를 이용해 Bundle을 이용할 수 있다.
다양한 Formatting Tag로 숫자, 날짜 포맷(Format)을 지정할 수 있다.
i18n Formatting
- Formatting Tag 중 가장 유용하게 사용할 수 있는 기법
- i18n : internationalization의 i와 n 사이에 18개의 알파벳이 있다는 것을 나타냄
- 제품이나 서비스를 특정 지역의 언어나 문화에 맞추는 작업을 쉽게 할 수 있도록 계획하거나 이행하는 과정
- 각 문화권에 맞는 언어로 서비스 제공(국제화)
i18n과 관련된 Tag
1. <fmt:setLocale>
- locale을 지정하는데 사용됨
- 특정 사용자의 locale을 지정하거나, 전체 웹 애플리케이션의 locale을 지정할 수 있음
- locale을 지정하면 locale에 맞는 resource bundle 및 포맷(Format) 지정
<fmt:setLocale value="locale" [scope="{page|request|session|application}"/>
<fmt:setLocale value="ko"/>
en=영어권, jp=일본어
<fmt:setBundle>
- resource bundle을 load하고 특정 범위에 변수를 지정
- Tag로 load한 resource bundle은 <fmt:message> Tag들을 사용하여 적용함
- resource properties 파일을 선언해서 사용
<fmt:setBundle base name="basename" [var="varName"] [scope="{page|request|session|application}"/></fmt:setBundle>
<fmt:setBundle basename="ch14.message"/>
<fmt:bundle>
- <fmt:bundle> ~ </fm:bundle>의 body 내에 있는 값들의 resource bundle을 지정함
- bundle Tag 의 사이, 즉 body에서 properties를 지정하기 위해 사용
<fmt:bundle base name="basename" ></fmt:bundle>
<fmt:bundle basename="ch14.message">
</fmt:bundle>
<fmt:message>
- resource bundle에 있는 값에 접근할 수 있음
- .properties에 등록되어 있는 문자열을 Key 값을 명시해 추출할 때 사용
1. body 없이 사용할 경우
<fmt:message key="messageKey" [bundle="reosurceBundle"] [var="varName"] [scope="{page|request|session|application}"/>
<fmt:message key="msg"/>
2. message 파라미터(Parameter)들을 body에 지정할 경우
<fmt:message key="messageKey" [bundle="reosurceBundle"] [var="varName"] [scope="{page|request|session|application}"/><fmt:param>
</fmt:message>
<fmt:message key="msg1">
<fmt:param value="10"></fmt:param>
<fmt:param value-"20"></fmt:param>
</fmt:message>
숫자, 날짜 Formatting
1. <fmt:formatNumber>
- 숫자, 퍼센트, 통화를 표시하기 위해서 사용됨
- 숫자는 표시할 때 천 단위로 콤마를 출력해서 표현해주면 편하다.
- 퍼센트를 표시할 때 %로 변환하여 출력
- 통화를 표시할 때 통화 기호를 붙여 출력
<fmt:formatNumber value="numericValue"
[type="{number|currency|percent}"] // 숫자, 통화, 퍼센트
[currencyCode="currencyCode"]
[currencySymbol="currencySymbol"] // 달러나 원 표시할때 Symbol
[groupingUsed="{true|false}"] // 천 단위로 그룹핑
[maxIntegerDigits="maxIntegerDigits"] // 정수 부분 최대 개수
[minIntegerDigits="minIntegerDigits"] // 정수 부분 최소 개수
[maxFractionDigits="maxFractionDigits"] // 소수점 뒷 자리 몇 자리
[minFractionDigits="minFractionDigits"]
[var="varName"]
[scope="{page|request|session|application}"]/>
<fmt:formatNumber value="0.5" type="percent"/><br/> // 50%
<fmt:formatNumber value="10000" tytpe="currency" currencySymbol="\\"/><br/> // \10,000
<fmt:formatNumber value="10000" tytpe="currency" currencySymbol="$"/> // $10,000
2. <fmt:formatDate>
- 날짜를 표시하는 다양한 포맷을 <fmt:formatDate> Tag를 사용하여 정의할 수 있음
- SW에서 시간, 날짜의 기본값은 TimeStamp값이라 유저에겐 의미가 없다. 따라서 유저가 보기 편한 형태로 변형시켜줌
<fmt:formatDate value="date"
[type="{time|date|both}"]
[dateStyle="{default|short|medium|long|full}"]
[timeStyle="{default|short|medium|long|full}"]
[timeZone="timeZone"]
[var="varName"]
[scope="{page|request|session|application}"]/>
<fmt:formatDate value="${now}" tyope="both"/><br/>
<fmt:formatDate value="${now}" pattern="yyyy년 MM월 dd일 hh시 mm분 ss초"/>
3. <fmt:parseNumber>
- 숫자를 parse하거나, percent, 통화 등을 표시하기 위해서 사용함
- 문자열로 표현된 숫자 값을 숫자 데이터로 변형 (formatNumber의 반대 개념)
<fmt:parseNumber value="numericValue"
[type="{number|currency|percent}"]
[integerOnly="{true|false}"]
[var="varName"]
[scope="{page|request|session|application}"]/>
4. <fmt:parseDate>
- 다양한 방법의 날짜 표시 가능
- 문자열로 표현된 날짜 값을 날짜 데이터로 변형
body 없이 사용할 경우
<fmt:parseDatevalue="dateString"
[type="{time|date|both}"]
[dateStyle="{default|short|medium|long|full}"]
[timeStyle="{default|short|medium|long|full}"]
[timeZone="timeZone"]
[parseLocale="parseLocale"]
[var="varName"]
[scope="{page|request|session|application}"]/>
5. <fmt:timeZone>
- <fmt:timeZone> Tag의 body 내에 있는 모든 Tag들의 time zone을 명시함
- 사용자별로 다른 time zone을 적용할 수 있음
<fmt:timeZone value="timeZone"
[var="varName"]>
body 내용
</fmt:timeZone>
실습
JSTL의 Formatting Library 테스트
resource bundle(리소스 번들) '.properties' 파일을 java가 들어간 위치에 작성함
locale에 따라 리소스 번들이 자동선택 되도록 파일명에 언더바로 locale 값을 지정함
message_en.properties
msg=Hello
msg1=Hello {0} World {1}
이 리소스 번들을 외부에서 이용할 때 전달하는 데이터를 중간중간 포함
{0} : 첫번째 전달한 데이터가 들어갈 자리
{1} : 두번째 전달한 데이터가 들어갈 자리
한국어 서비스를 위한 리소스 번들 파일을 동일 패키지에 생성
message_ko.properties
msg=\uC548\uB155\uD558\uC138\uC694
msg1=\uC548\uB155\uD558\uC138\uC694 {0} \uBC18\uAC11\uC2B5\uB2C8\uB2E4. {1}
"안녕하세요" "반갑습니다"를 입력하면 자동으로 변환해서 작성되고 유저에게 한국어 서비스를 하는데는 문제없음
JSP 파일 만들어서 리소스 번들 테스트
main.jsp
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
formatting Library 선언
<body>
<fmt:bundle basename="ch14.message">
<fmt:message>msg</fmt:message>
</fmt:bundle>
<br/>
<fmt:setBundle basename="ch14.message"/>
<fmt:message>msg</fmt:message>
<fmt:message key="msg1">
<fmt:param value="10"></fmt:param>
<fmt:param value="20"></fmt:param>
</fmt:message>
<br/>
<fmt:formatNumber value="1234567.89"/><br/>
<fmt:formatNumber value="0.5" type="percent"/><br/>
<fmt:formatNumber value="10000" type="currency" currencySymbol="$"/><br/>
<c:set var="now" value="<%=new java.util.Date() %>"/>
<fmt:formatDate value="${now }"/><br/>
<fmt:formatDate value="${now }" pattern="yyyy년 MM월 dd일, hh시 mm분 ss초"/>
</body>
언더바(_) locale이 en인지 ko인지는 클라이언트에 의해서 자동으로 선택되기 때문에 리소스번들 파일명을 언더바까지 적을 필요는 없음
위에 두 줄은 resource bundle을 이용
msg 라고만 지정했는데 한국어로 출력
'온라인 강좌 > JSP & Servlet 활용' 카테고리의 다른 글
16차시 MVC Model (0) | 2023.07.04 |
---|---|
15차시 Custom Tag (0) | 2023.07.03 |
13차시 JSTL - Core (0) | 2023.07.02 |
12차시 Expression Language (1) | 2023.07.01 |
11차시 Action Tag와 JSP Beans (0) | 2023.07.01 |