몇몇 웹 사이트들은 전세계의 누구나 이용할 수 있도록 여러 언어를 제공하고 있습니다.
예를 들어 다음은 독일 분데스리가의 도르트문트라는 축구팀의 홈페이지인데요. 축구팀 같은 경우 전세계의 팬들을 위해 다양한 홈페이지에서 다양한 언어를 지원하고 있습니다. 각각 독일어와 영어를 선택했을 때 같은 페이지에서 언어만 변환된 것을 볼 수 있습니다.
이러한 언어 변환 기능을 JSTL에서 구현할 수 있도록 다국어 라이브러리를 제공하고 있습니다. 다국어 라이브러리는 포매팅 라이브러리에 포함되어 있으며 코어 라이브러리가 접두사 c
를 사용한 것 처럼 포매팅 라이브러리는 fmt
접두사를 사용합니다.
다국어 라이브러리(포매팅 라이브러리)를 사용하기 위해 반드시 태그라이브 디렉티브 태그를 사용해서 라이브러리를 JSP 문서에 포함시켜 주세요.
<%@ taglib url="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
다음은 다국어 라이브러리에서 사용할 수 있는 태그들 입니다.
태그 | 설명 |
---|---|
<fmt:setLocale> | 언어를 설정 |
<fmt:message> | 지정한 언어에 해당하는 언어 표시 |
<fmt:setBundle> | 사용할 번들 설정 |
<fmt:setParam> | 전달할 매개변수 설정 |
<fmt:requestEncoding> | 요청 매개변수의 인코딩 설정 |
번들(Bundle)
은properties
라는 확장자를 가진 파일을 의미합니다.
포매팅 라이브러리는 언어말고도 숫자와 날짜 포맷 설정도 가능합니다. 다음 태그들은 숫자와 날짜포매팅 태그들입니다.
태그 | 설명 |
---|---|
<fmt:formatNumber> | 숫자 포맷 설정 |
<fmt:formatDate> | 날짜 포맷 설정 |
<fmt:timeZone> | 지정한 국가/지역의 시간 지정 |
<fmt:setTimeZone> | 지정한 국가/지역의 시간 지정 |
<fmt:timeZone>
, <fmt:setTimeZone>
의 설명이 둘 다 지정한 국가/지역의 시간으로 설정한다고 되어있는데요. <fmt:timeZone>
은 태그를 닫고 열은 사이에서만 시간이 적용되고, <fmt:setTimeZone>
은 문서 전반에 시간이 적용된다는 차이점이 있습니다.
이때, 국가/지역 설정은 value="국가/지역"
속성을 통해 설정합니다.
숫자 포맷은 다양한 속성들을 통해서 자세한 설정이 가능합니다.
속성 | 설명 |
---|---|
value | 출력할 숫자 설정 |
type | 출력 타입 설정. percent -> %, number -> 숫자, currency -> 통화($ 등) |
groupingUsing | 구분자(, 등)를 사용해서 구분할지 설정 |
currencyCode | 통화 코드 지정. USD, KRW, JPY 등 |
currencySymbol | 통화 표시 기호 설정 |
var | formatNumber 태그의 결과값 저장 변수명 |
scope | 변수 스코프 설정 |
pattern | 숫자 출력 양식 지정. 자바 DecimalFormat 클래스 형식을 따름 |
속성 | 설명 |
---|---|
value | 출력할 날짜 설정 |
type | 출력 타입 설정. data -> 날짜만, time -> 시간만, both -> 날짜와 시간 |
dateStyle | 날짜 출력 포맷 지정. DateFormat 클래스의 형식 사용 |
timeStyle | 시간 출력 포맷 지정. DateFormat 클래스의 형식 사용 |
pattern | 출력 형식 직접 지정. SimpleDateFormat 클래스의 패턴 사용 |
timeZone | 특정 나라의 시간대로 설정 |
formatNumber
와formatDate
의 형식에 등장하는 자바 클래스에 대한 설명은 이 포스트를 참조해주세요.
( +DateFormat 클래스
는 공식 문서)
문자열 처리도 정말 많이 사용하는 기능인데요. JSTL은 문자열 처리를 지원하기 위해 몇 가지 함수를 제공하고 있습니다.
함수 라이브러리의 접두사는
fn
입니다.<%@ taglib url="http://java.sun.com/jsp/jstl/fn" prefix="fn" %>
주의할 점은 여태까지의 태그와는 다르게 함수이기 때문에 꺾쇠<>
가 사용되지 않습니다.
다음은 자주 사용되는 JSTL 문자열 처리 함수입니다.
문자열 처리 함수 | 설명 | 리턴값 타입 |
---|---|---|
fn:contains(a, b) | 문자열 a에 b가 포함되었는지 여부 | boolean |
fn:endWith(a, b) | 문자열 a가 b로 끝나는지 여부 | boolean |
fn:indexOf(a, b) | 문자열 a에서 b가 위치한 index 반환(최초 위치) | int |
fn:length(str) | 문자열 str의 길이 반환 | int |
fn:replace(str, a, b) | 문자열 str에서 문자 a를 b로 교체 | String |
fn:toUpperCase(a) | 문자 a를 모두 대문자로 변환 | String |
fn:toLowerCase(a) | 문자 a를 모두 소문자로 변환 | String |
fn:subString(str, a, b) | 문자열 str에서 index 번호 a에서 b까지의 문자열을 잘라서 반환 | String |
fn:split(str, a) | 문자열 str에서 a 문자를 기준으로 분할 | String[] |
fn:trim(str) | 문자열 str의 공백 삭제 후 반환 | String |
fn:subString(str, a, b)
에서 인덱스 번호 a부터 b까지 자르는데요.
인덱스 번호
이기 때문에 0부터 세어서 실제로는a+1
번 문자부터 자르기 시작합니다. 그리고 종료는 b를 포함하지 않기 때문에b-1
번까지 잘라낸다고 보시면 됩니다.즉,
fn:subString("hello", 1, 3)
은"el"
을 반환합니다.