JSP/다국어 처리

리소스번들 메시지 출력하기

별초롱언니 2025. 5. 28. 17:40

 

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