title=\uC790\uBC14 \uC11C\uBC84 \uD398\uC774\uC9C0
username=\uAD00\uB9AC\uC790
password=1234
title=Java Server Pages
username=admin
password=1234
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix = "fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<p>===== 기본 로케일 =====
<fmt:setLocale value="ko"/>
<fmt:setBundle basename="chapter09.com.bundle.myBundle" var="resourceBundle" />
<p> 제목 : <fmt:message key="title" bundle="${resourceBundle}"/>
<p> <fmt:message key="username" var="userMsg" bundle="${resourceBundle}"/>
이름 : ${userMsg}
<p>===== 영문 로케일 =====
<fmt:setLocale value="en"/>
<fmt:setBundle basename="chapter09.com.bundle.myBundle" var="resourceBundle" />
<p> 제목 : <fmt:message key="title" bundle="${resourceBundle}"/>
<p> 이름 : <fmt:message key="username" bundle="${resourceBundle}"/>
</body>
</html>



✅ 하고 싶었던 목표
chapter09.com.bundle.myBundle.properties라는 리소스 번들 파일을 기준으로,
- 기본 로케일(ko)에서는 한글 텍스트
- 영어 로케일(en)에서는 영어 텍스트
를 보여주는 페이지를 만들고자 했다.
❌ 문제 발생
처음 화면을 띄웠을 때, 이런 식으로 나왔다

딱 봐도 리소스 번들에서 키를 못 찾고 있다는 뜻이다. 근데 왜?
🔍 디버깅 과정
1. <fmt:setBundle>에서 let을 사용함 → ❌
처음에는 JSTL 태그에서 변수 선언할 때 JS 문법처럼 let을 썼었다
하지만 JSTL에서는 let이 아니라 **var**를 써야 한다!
2. 여전히 안 됨 → var 중복 선언 실수!
영문 로케일 쪽에서 다음처럼 중복 선언을 하고 있었음
문제는 바로 위의 한글 로케일 쪽에서도 userMsg라는 동일한 변수명을 쓰고 있었던 것.
두 로케일에서 같은 변수를 var로 선언해버리면 JSTL이 제대로 처리 못하는 경우가 발생함.
✅ 해결 방법
영문 로케일 쪽은 var 생략하고 바로 출력
3. 마지막 복병: chapter를 chatper로 오타
리소스 번들 파일 경로에서 무려 chapter09를 chatper09로 쓰고 있었음...
→ 당연히 myBundle.properties를 찾을 수 없어서 모든 키가 실패했던 것.
✅ 결과
위의 세 가지 문제를 모두 고치고 나니 드디어 다음처럼 정상 출력되었다:
💬 마무리 정리
문제 | 원인 | 해결법 |
???title??? | 키를 못 찾음 | 경로 오타 or 번들 미설정 |
let= 사용 | JSTL 문법 아님 | var=로 수정 |
변수 충돌 | 같은 이름 중복 선언 | 하나는 var 생략 |
경로 오타 | chatper → chapter | 정확한 경로 확인 |
'JSP > 다국어 처리' 카테고리의 다른 글
날짜/시간 태그의 기능과 사용법 (1) | 2025.05.29 |
---|---|
숫자 태그의 기능과 사용법 (0) | 2025.05.29 |