[Java JSP] JSTL <fmt> 태그로 국제화 처리하기

khj·2025년 4월 14일

Java

목록 보기
8/11
post-thumbnail

Java 기반의 웹 애플리케이션에서 다국어 지원을 구현해야 할 때, JSP에서는 JSTL의 태그를 많이 사용합니다.


✅ JSTL 태그란?

JSTL(JavaServer Pages Standard Tag Library)의 태그는 국제화(i18n) 및 지역화(l10n) 처리를 위한 태그 라이브러리입니다.
날짜, 숫자, 메시지를 사용자 로케일에 맞게 포맷하거나 번역할 수 있도록 도와줍니다.

JSP에서 태그를 사용하기 위해서는 JSTL 라이브러리가 필요하며, 다음과 같은 선언을 통해 사용할 수 있습니다.

<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>

✅ 주요 기능

1. 로케일 설정 - <fmt:setLocale>

현재 페이지에 사용할 로케일을 설정합니다.

<fmt:setLocale value="en_US" />
  • ko_KR: 한국어
  • en_US: 미국 영어
  • ja_JP: 일본어 등

2. 메시지 번역 - <fmt:setBundle> + <fmt:message>

다국어 텍스트를 출력할 때 사용합니다. 리소스 번들(properties 파일)과 함께 동작합니다.

<fmt:setBundle basename="messages" />
<fmt:message key="greeting" />

resources/messages.properties

greeting=안녕하세요!

resources/messages_en.properties

greeting=Hello!

로케일에 따라 자동으로 적절한 텍스트를 불러옵니다.


3. 숫자 포맷팅 - <fmt:formatNumber>

숫자를 로케일에 맞게 포맷합니다.

<fmt:formatNumber value="1234567.89" type="currency" />
  • type="number": 일반 숫자
  • type="currency": 통화
  • type="percent": 백분율
  • pattern: 직접 숫자 포맷을 지정할 수도 있음

4. 날짜 포맷팅 - <fmt:formatDate>

날짜와 시간을 로케일에 맞춰 포맷합니다.

<fmt:formatDate value="${now}" type="date" dateStyle="long" />
  • type: date, time, both
  • dateStyle: short, medium, long, full

5. 문자열 파싱 - <fmt:parseDate>, <fmt:parseNumber>

문자열을 날짜나 숫자 객체로 변환합니다.

<fmt:parseDate value="2025-04-14" pattern="yyyy-MM-dd" var="parsedDate" />

✅ 전체 예제

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>

<fmt:setLocale value="en_US" />
<fmt:setBundle basename="messages" />

<h3><fmt:message key="greeting" /></h3>
<p>가격: <fmt:formatNumber value="10000" type="currency" /></p>
<p>오늘 날짜: <fmt:formatDate value="${now}" type="both" /></p>

✅ 정리

태그 설명
<fmt:setLocale> 현재 페이지의 언어 설정
<fmt:setBundle> 메시지 파일 설정
<fmt:message> 다국어 메시지 출력
<fmt:formatNumber> 숫자 포맷팅 (통화, 백분율 등)
<fmt:formatDate> 날짜 포맷팅
<fmt:parseDate> 문자열 → 날짜 변환
<fmt:parseNumber> 문자열 → 숫자 변환
profile
Spring, Django 개발 블로그

0개의 댓글