본문 바로가기
WEB/JSP Servlet

JSTL : 국제화 태그

by 노랑파랑 2016. 10. 30.
반응형




국제화 태그

* 특정 지역에따라 다른 메세지를 출력해야 할 때 사용한다. 예를들면 한글 브라우저에서는 한글 메세지, 영문 브라우저는 영어 메세지 출력

* 중복 작업을 없애고 하나의 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
java.util.Locale 

파싱할 때 사용할 로케일 지정. 

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