국제화 태그
* 특정 지역에따라 다른 메세지를 출력해야 할 때 사용한다. 예를들면 한글 브라우저에서는 한글 메세지, 영문 브라우저는 영어 메세지 출력
* 중복 작업을 없애고 하나의 JSP페이지에서 다양한 언어에 맞는 메세지를 출력할 수 있도록 해주는 태그를 제공한다.
국제화 태그 라이브러리
기능 분류 |
태그 |
설명 |
로케일 지정 |
setLocale |
Locale을 지정한다. |
requestEncoding |
요청 파라미터의 캐릭터 인코딩을 지정한다. |
|
메세지 처리 |
bundle |
사용할 번들을 지정한다. |
message |
지역에 알맞은 메세지를 출력한다. |
|
setBundle |
리소스 번들을 읽어와 특정 변수에 저장한다. |
|
숫자 및 날짜 포맷팅 |
formatNumber |
숫자를 포맷팅한다. |
formatDate |
Date 객체를 포맷팅한다. |
|
parseDate |
문자열로 표시된 날짜를 분석해서 Date 객체로 변환한다. |
|
parseNumber |
문자열로 표시된 날짜를 분석해서 숫자로 변환한다. |
|
setTimeZone |
시간대 정보를 특정 변수에 지정한다. |
|
timeZone |
시간대를 지정한다. |
1. 로케일 지정 태그
* 웹 브라우저는 Accept-Language 헤더를 사용해 수용 가능한 언어 목록을 전송하는데, JSTL 국제화 태그는 이 헤더 값을 이용해서 언어별로 알맞은 처리를 한다.
1] <fmt:setLocale>
* Accept-Language 헤더에 지정되있지 않은 언어를 사용하도록 지정할 때 사용한다.
* 일반적으로는 브라우저가 전송한 Accept-Language 헤더 값에 맞게 메세지를 출력하기때문에 사용하는 경우는 드물다
1) 기본 사용
<%@ taglib prefix = "fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<fmt:setLocale value="ko" scope="request" />
value : Locale을 "언어코드_국가코드" 형식으로 지정한다. 두 글자 언어코드는 반드시 지정해야 하며, 국가 코드는 추가로 지정할 수 있다. 두 코드는 _(밑줄)이나 -(하이픈)으로 구분한다. value값이 null이면 기본 로케일을 사용하는데 JVM의 기본 로케일 또는 web.xml 파일에서 설정한 로케일을 기본 로케일을 사용한다.
scope : 지정한 Locale이 영향을 미치는 범위를 지정한다. 기본값은 page
2] <fmt:requestEncoding>
* 요청 파라미터의 캐릭터 인코딩을 지정한다.
1) 기본 사용
<fmt:requestEncoding value="utf-8" />
// 다음 코드와 동일
request.setCharacterEncoding("utf-8");
2. 리소스 번들
* 메세지 처리 태그에서 사용할 리소스 번들 파일을 작성한다.
* 번들 파일은 클래스 파일에 위치해야한다. WEB-INF/classes 폴더에 작성하거나, WEB-INF/lib에 포함된 jar 파일에 포함시켜야 한다.
* 리소스 번들은 java.util.Properties 클래스에 정의된 방법으로 파일을 읽어오는데, 이 클래스는 알파벳이나 숫자, 라틴문자 등을 제외한
나머지 언어에 대해서는 유니코드의 코드값으로 표현하도록 한다.
1) 영문 리소스 번들 예제
<!-- /pro/WEB-INF/classes/resource/message_er.properties -->
TITEL = Hello
ID = Your ID is {0} // 변경 가능한 요소
2) 한글 리소스 번들 예제
<!-- /pro/WEB-INF/classes/resource/message_ko.properties.src -->
TITLE = 안녕하세요
ID = 당신의 ID는 {0}입니다.
* JSTL 리소스 번들은 기본 구현을 사용한다. 기본 구현은 한글을 직접적으로 사용할 수 없으며, 각 글자를 유니코드 숫자로 표시한 형태로 변환하는 것을 사용할 수 있다. 변환을 할 때는 JDK가 제공하는 native2ascii.exe를 사용한다.
* 명령 프롬프트에서 아래 명령어를 실행하면 리소스 번들 파일을 생성할 수 있다.
C:\...\resource>native2ascii message_ko.properties.src message_ko.properties
3. 메세지 처리 태그
* 언어권에따라 알맞은 메세지를 출력한다.
1] <fmt:bundle> | <fmt:message>
* <fmt:bundle> : 사용할 메세지 번들(리소스 번들)을 지정하며 <fmt:message> 태그와 함께 사용한다.
* <fmt:message> : 메세지를 출력한다.
* 웹 브라우저 언어 설정과 상관없이 <fmt:bundle> 태그가 사용하는 리소스 번들의 로케일을 변경하고 싶다면 <fmt:setLocale value="로케일 코드"> 사용
1) 기본 사용
<fmt:bundle basename="resource.message">
...
<fmt:message key="TITLE">
...
</fmt:bundle>
//다음 두 태그는 동일한 결과를 나타낸다.
<fmt:bundle basename="resource.error" prefix="SYSTEM_">
<fmt:message key="01">
</fmt:bundle>
<fmt:bundle basename="resource.error">
<fmt:message key="SYSTEM_01">
</fmt:bundle>
2) 태그 속성 요약
속성 |
표현식 / EL |
타입 |
설명 |
basename |
사용 가능 |
String |
사용할 리소스 번들 이름 |
prefix |
사용 가능 |
String |
bundle 태그의 내부에서 사용되는 message 태그의 key 속성 값 앞에 자동으로 붙게될 문자열 |
3) <fmt:message> 태그 속성
key : 읽어올 메세지 키 값
var : 메세지를 저장할 변수 명
scope : 변수가 지정되는 영역 지정
bundle : <fmt:setBundle> 태그를 사용해서 생성한 번들로부터 메세지를 읽어올 때 사용
* 리소스 번들의 변경 가능한 요소( {0}, (1) ...)들의 값을 지정하려면 <fmt:param>태그를 사용한다.
* 메세지에 {n}이 한 개 이상 들어가면 순서대로 태그를 사용해 대입한다.
<fmt:message key="ID">
<fmt:param value="${id}" /> <!-- {0}에 들어간다 -->
<fmt:param value="${name}" /> <!-- {1}에 들어간다 -->
<fmt:message>
2] <fmt:serBundle> | <fmt:message>
* <fmt:setBundle> : 리소스 번들을 변수로 저장한 후에 어디서나 사용할 수 있도록 해준다.
1) 기본 사용
<fmt:setBundle var="message" basename="resource.message" />
...
<fmt:message bundle="${message}" key="TITLE" />
* <fmt:setBundle>로 리소스 번들을 지정하면 <fmt:message> 태그의 bundle 속성을 사용해 지정한 리소스 번들을 사용할 수 있다.
2) 태그 속성 요약
속성 |
표현식 / EL |
타입 |
설명 |
basename |
사용 가능 |
String |
읽어올 리소스 번들의 이름 |
var |
사용 불가 |
String |
리소스 번들을 저장할 변수명 |
scope |
사용 불가 |
String |
변수를 저장할 영역 |
3] <fmt:message> 리소스 번들 검색 순서
1) bundle 속성에 지정한 리소스 번들 사용
2) <fmt:bundle> 태그에 중첩된 경우 <fmt:bundle> 태그에 지정한 리소스 번들 사용
3) 1과2 모두 아닐 경우 기본 리소스 번들 사용. 기본 리소스 번들은 web.xml 파일에 javax.servlet.jsp.jstl.fmt.localizationContext 컨텍스트 속성을 통해 설정 할 수 있다.
4. 숫자 및 날짜 포맷팅 태그
* 숫자와 날짜를 포맷팅 할 때 사용한다.
1] <fmt:formatNumber>
* 숫자를 양식에 맞춰 출력한다.
1) 기본 사용
<fmt:formatNumber value="숫자값" [type="값타입"] [pattern="패턴"]
[currentCode="통화코드"] [currencySymbol="통화심볼"]
[groupingUsed="( true | false )"] [var="변수명"] [scope="영역"] />
2) 태그 속성 설명
속성 |
표현식 / EL |
타입 |
설명 |
value |
사용 가능 |
String Number |
양식에 맞춰 출력할 숫자를 지정 |
type |
사용 가능 |
String |
어떤 양식으로 출력할지 지정. number(숫자), percent(%), currency(통화) 기본값은 number |
pattern |
사용 가능 |
String |
직접 숫자가 출력되는 양식을 지정. java.text.DecimalFormat 틀래스에 정의되어 있는 패턴을 사용한다. |
currenctCode |
사용 가능 |
String |
통화 코드 지정. 통화 토드는 ISO 4217에 정의되어 있다. |
currencySymbol |
사용 가능 |
String |
통화를 표현할 기호를 표시. type속성값이 currency일 때만 의미가 있다. |
groupingUsed |
사용 가능 |
boolean |
콤마와 같이 단위를 구분할 때 사용하는 기호를 사용할지 여부를 결정. 기본값은 true |
var |
사용 불가 |
String |
포맷팅한 결과를 저장할 변수명을 지정. 저장할 변수 타입은 String이다. 지정하지 않으면 결과를 곧바로 출력한다. |
scope |
사용 불가 |
String |
변수를 저장할 영역을 지정한다. 기본값은 page |
3) 사용 예
통화 : <fmt:formatNumber value="${price}"
type="currency" currencySymbol="원"/>
2] <fmt:parseNumber>
* 문자열을 숫자 타입으로 변환해주는 기능을 제공한다.
1) 기본 사용
<fmt:parseNumber value="값" [type="값타입"] [pattern="패턴"]
{paresLocale="통화코드"] [integerOnly=" ( ture | false )"]
[var="변수명"] [scope="영역"] />
2) 태그 속성 요약
속성 |
표현식 / EL |
타입 |
설명 |
value |
사용 가능 |
Strimg |
파싱할 문자열을 지정한다. |
type |
사용 가능 |
String |
value 속성의 문자열 타입을 지정한다 number, currency, percentage가 올 수 있다. 기본값 : number |
pattern |
사용 가능 |
String |
직접 파싱할 때 사용할 양식을 지정 |
parseLocale |
사용 가능 |
String java.util.Locale |
파싱할 때 사용할 로케일을 지정 |
integerOnly |
사용 가능 |
boolean |
정수 부분만 파싱할 지의 여부를 지정한다. 기본값 : false |
var |
사용 불가 |
String |
파싱한 결과를 저장할 변수명 지정 |
scope |
사용 불가 |
String |
변수를 저장할 영역을 지정. 기본값 :page |
3] <fmt:formatDate>
* 날짜 정보를 담고 있는 객체를 포맷팅하여 출력할 때 사용한다.
1) 기본 사용
<fmt:formatDate value="날짜값"
[type="타입"] [dateStyle="날짜 스타일"] [timeStyle="시간 스타일"]
[pattern="패턴"] [timeZone="타임존"]
[var="변수명"] [scope="영역"] />
2) 태그 속성 요약
속성 |
표현식 / EL |
타입 |
설명 |
value |
사용 가능 |
java.util.Date |
포맷팅할 시간 값을 지정 |
type |
사용 가능 |
String |
날짜, 시간 또는 둘 다 포맷팅할지의 여부를 지정. tiem, date, both 중 한가지 값을 갖는다 기본값 : date |
dateStyle |
사용 가능 |
String |
날짜에 대해 미리 정의된 포맷팅을 스타일을 지정한다. default, short, medium, long, full 중 한가지 값을 갖는다. 기본값 : default |
timeStyle |
사용 가능 |
String |
시간에 대해 미리 정의된 포맷팅 스타일을 지정한다. default, short, medium, long, full 중 한가지 값을 갖는다. 기본값 : default |
pattern |
사용 가능 |
String |
직접 파싱할 때 사용할 양식을 지정한다. java.text.DateFormat에 있는 양식을 사용한다. |
tiemZone |
사용 가능 |
String java.util.timeZone |
시간대를 변경하고 싶을 때 사용한다. |
var |
사용 불가 |
String |
파싱한 결과를 저장할 변수명을 지정 |
scope |
사용 불가 |
String |
변수를 지정할 영역을 지정. 기본값 : page |
4] <fmt:parseDate>
* 문자열로 표시된 날짜와 시간 값을 java.util.Date로 파싱해주는 기능을 제공한다.
1) 기본 사용
<fmt:parseDate value="날짜값"
[type="타입"] [dateStyle="날짜 스타일"] [timeStyle="시간 스타일"]
[pattern="패턴"] [timeZone="타임존"] [parseLocale="로케일"]
[var="변수명"] [scope="영역"]/>
2) 태그 속성 요약
속성 |
표현식 / EL |
타입 |
설명 |
value |
사용 가능 |
java.util.Date |
포맷팅할 시간 값을 지정 |
type |
사용 가능 |
String |
날짜, 시간 또는 둘 다 포맷팅할지의 여부를 지정. tiem, date, both 중 한가지 값을 갖는다 기본값 : date |
dateStyle |
사용 가능 |
String |
날짜에 대해 미리 정의된 포맷팅을 스타일을 지정한다. default, short, medium, long, full 중 한가지 값을 갖는다. 기본값 : default |
timeStyle |
사용 가능 |
String |
시간에 대해 미리 정의된 포맷팅 스타일을 지정한다. default, short, medium, long, full 중 한가지 값을 갖는다. 기본값 : default |
pattern |
사용 가능 |
String |
직접 파싱할 때 사용할 양식을 지정한다. java.text.DateFormat에 있는 양식을 사용한다. |
tiemZone |
사용 가능 |
String java.util.timeZone |
시간대를 변경하고 싶을 때 사용한다. |
parseLocale | 사용 가능 | String | 파싱할 때 사용할 로케일 지정. |
var |
사용 불가 |
String |
파싱한 결과를 저장할 변수명을 지정 |
scope |
사용 불가 |
String |
변수를 지정할 영역을 지정. 기본값 : page |
3) 사용 예
<fmt:parseDate value="2016-10-30 14:32:00"
pattern="yyyy-MM-dd HH:mm:ss" var="date"/>
${date}
5] <fmt:timeZone> | <fmt:setTimeZone>
* 나라 별 시간 차이가 나며, 시간대별 권역을 묶어 같은 시간을 사용학 있다. JSTL 포맷팅 태그도 시간대별로 시간을 처리할 수 있는 기능을 제공하는데 이때 사용되는 태그이다.
*<fmt:timeZone>
* value 속성으로 시간대를 입력받으면 태그 안에서 사용된 <fmt:formatDate>태그에 영향을 미친다.
* value 속성 값은 String이나 TimeZone 객체를 줄 수 있다. 만약 속성 값을 문자열로 주고 싶다면 java.util.TimeZone 클래스를 이용해 문자열 값을 구할 수 있다.
5. web.xml 파일 설정
* web.xml 파일에 국제화 관련 태그 기본값을 설정한다.
1) 국제화 관련 켄텍스트 초기화 파라미터
속성 이름 |
설명 |
javax.servlet.jsp.jstl.fmt.localizationContext |
기본으로 사용할 리소스 번들을 지정. 리소스 번들의 basename을 입력 |
javax.servlet.jsp.jatl.fmt.locale |
기본으로 사용할 로케일 지정 |
javax.servlet.jsp.jatl.fmt.timeZone |
기본으로 사용할 시간대 지정 |
2) 사용예
<web-app...>
...
<context-param>
<param-name>javax.servlet.jsp.jstl.fmt.timeZone</param-name>
<param-value>HongKong</param-value>
</comtext-param>
..
</web-app>
'WEB > JSP Servlet' 카테고리의 다른 글
표현언어 : 기초, 연산자 (0) | 2016.11.02 |
---|---|
JSTL : 함수 (0) | 2016.10.30 |
JSTL : 코어 태그 (0) | 2016.10.28 |
표준 태그 라이브러리 (0) | 2016.10.28 |
<jsp:forward> (0) | 2016.10.28 |