일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 명시적 타입 변환
- 클라이언트 상태 관리 라이브러리
- 타입 단언
- 암묵적 타입 변환
- Compound Component
- Sparkplug
- AJIT
- TypeScript
- 좋은 PR
- JavaScript
- linux 배포판
- Recoil
- CS
- 주니어개발자
- task queue
- docker
- useLayoutEffect
- jotai
- 프로세스
- Redux Toolkit
- Headless 컴포넌트
- Microtask Queue
- Render Queue
- type assertion
- react
- prettier-plugin-tailwindcss
- useCallback
- zustand
- helm-chart
- Custom Hook
- Today
- Total
구리
TIL_210624_Spring 다국어 처리 본문
목차
1. 메시지 파일 작성
2. MessageSource 등록
3. LocaleResolver 등록
4. Locale 변경
5. JSP 파일 설정
1. 메시지 파일 작성
원하는 언어로 메시지 출력시 각 언어에 따른 메시지 파일을 작성해야 하며 확장자는 'properties'로 파일명은 언어에 해당하는 Locale 정보를 결합합니다.
(1) src/main/resources에 new File 생성하여 messageSource_en.properites, messageSource_ko.properites로 2개의 파일을 생성합니다.
(2) 영어 메시지 파일 작성
#login.jsp
message.user.login.title=LOGIN
message.user.login.id=ID
message.user.login.password=PASSOWORD
message.user.login.loginBtn=LOG-IN
message.user.login.language.en=English
message.user.login.language.ko=Korean
#getBoardList.jsp
message.board.list.mainTitle=BOARD LIST
message.board.list.welcomeMsg=! Welcome to my BOARD
message.board.list.search.condition.title=TITLE
message.board.list.search.condition.content=CONTENT
message.board.list.search.condition.btn=Search
message.board.list.table.head.seq=SEQ
message.board.list.table.head.title=TITLE
message.board.list.table.head.writer=WRITER
message.board.list.table.head.regDate=REGDATE
message.board.list.table.head.cnt=CNT
message.board.list.link.insertBaord=Insert Board
(3) 한글 메시지 파일 작성
한국어, 중국어 등 아시아권 언어 사용시 반드시 유니코드로 변환하여 등록
messageSource_ko.txt 파일 생성 후 작성
#login.jsp
message.user.login.title=로그인
message.user.login.id=아이디
message.user.login.password=비밀번호
message.user.login.loginBtn=로그인
message.user.login.language.en=영어
message.user.login.language.ko=한글
#getBoardList.jsp
message.board.list.mainTitle=게시글 목록
message.board.list.welcomeMsg=님! 게시판에 오신 것을 환영합니다.
message.board.list.search.condition.title=제목
message.board.list.search.condition.content=내용
message.board.list.search.condition.btn=검색
message.board.list.table.head.seq=번호
message.board.list.table.head.title=제목
message.board.list.table.head.writer=작성자
message.board.list.table.head.regDate=등록일
message.board.list.table.head.cnt=조회수
message.board.list.link.insertBaord=새글 등록
그리고 messageSource_ko.txt 파일의 모든 내용 복사하여 messageSource_ko.properties 파일에 붙여 넣으면 한글 프로퍼티 파일 생성 완료
코드 추가
코드추가
2. MessageSource 등록
presentation-layer.xml (컨트롤러 등록하는 스프링 파일)에 MessageSource 클래스를 <bean> 등록합니다.
<!-- 다국어 설정, MessageSource 등록 -->
<bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
<property name="basenames">
<list>
<value>message.messageSource</value>
</list>
</property>
</bean>
ResourceBundleMessageSource 클래스 등록시 bean id 명은 고정이고 setBasenames() 메소드 통해 메시지 파일들이 저장된 배열 객체를 넘겨줘야 합니다. (MessageSource에 메시지 파일 등록시 확장자명은 생략)
3. LocaleResolver 등록
웹 브라우저가 서버 요청시 브라우저의 Locale 정보가 HTTP 요청 메시지 헤더에 자동으로 설정되어 전송되며
스프링은 LocaleResolver를 통해 클라이언트의 Locale 정보를 추출 후, 이에 해당하는 언어의 메시지를 적용합니다.
만약 스프링 설정 파일에 LocaleResolver 가 미등록되었다면 AcceptHeaderLocaleResolver가 기본으로 적용됩니다.
대체로 SessionLocaleResolver 를 가장 많이 사용합니다.
아래 코드를 presentation-layer.xml에 등록합니다
<!-- LocaleResolver 등록 -->
<bean id="localeResolver" class="org.springframework.web.servlet.i18n.SessionLocaleResolver"></bean>
4. Locale 변경
LocaleChangeInterceptor 클래스로 해당 화면의 언어를 변경할 수 있습니다.
(<mvc:interceptors>를 통해 LocaleChangeInterceptor 객체를 인터셉터로 등록하며
클라이언트로부터 "lang"이라는 파라미터로 특정 Locale이 전송되면 해당 Locale로 변경한다는 설정을 의미합니다.)
<!-- LocaleChangeInterceptor 등록 -->
<mvc:interceptors>
<bean class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor">
<property name="paramName" value="lang"></property>
</bean>
</mvc:interceptors>
5. JSP 파일 설정
(1) 로그인 화면
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib uri="http://www.springframework.org/tags" prefix="spring" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title><spring:message code="message.user.login.title" /></title>
</head>
<body>
<center>
<h1><spring:message code="message.user.login.title" /></h1>
<a href="login.do?lang=en"><spring:message code="message.user.login.language.en" /></a>
<a href="login.do?lang=ko"><spring:message code="message.user.login.language.ko" /></a>
<hr />
<form action="login.do" method="post">
<table border="1" cellpadding="0" cellspacing="0">
<tr>
<td bgcolor="orange"><spring:message code="message.user.login.id" /></td>
<td><input type="text" name="id" value="${userVO.id }"></td>
</tr>
<tr>
<td bgcolor="orange"><spring:message code="message.user.login.password" /></td>
<td><input type="password" name="password" value="${userVO.password }"></td>
</tr>
<tr>
<td colspan="2" align="center"><input type="submit" value="<spring:message code="message.user.login.loginBtn" />"></td>
</tr>
</table>
</form>
</center>
</body>
</html>
(2) 글 목록 화면
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://www.springframework.org/tags" prefix="spring" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title><spring:message code="message.board.list.mainTitle" /></title>
</head>
<body>
<center>
<h1><spring:message code="message.board.list.mainTitle" /></h1>
<h3>${userName }<spring:message code="message.board.list.welcomeMsg" />~~
<a href="logout.do">Log-out</a></h3>
<!-- 검색 시작 -->
<form action="getBoardList.do" method="post">
<table border="1" cellpadding="0" cellspacing="0" width="700">
<tr>
<td align="right">
<select name="searchCondition">
<c:forEach items="${conditionMap }" var="option">
<option value="${option.value }" />${option.key}
</c:forEach>
</select>
<input name="searchKeyword" type="text" />
<input value="<spring:message code="message.board.list.search.condition.btn" />" type="submit" />
</td>
</tr>
</table>
</form>
<table border="1" cellpadding="0" cellspacing="0" width="700">
<tr>
<th bgcolor="orange" width="100">
<spring:message code="message.board.list.table.head.seq" /></th>
<th bgcolor="orange" width="200">
<spring:message code="message.board.list.table.head.title" /></th>
<th bgcolor="orange" width="150">
<spring:message code="message.board.list.table.head.writer" /></th>
<th bgcolor="orange" width="150">
<spring:message code="message.board.list.table.head.regDate" /></th>
<th bgcolor="orange" width="100">
<spring:message code="message.board.list.table.head.cnt" /></th>
</tr>
<c:forEach items="${boardList }" var="board">
<tr>
<td>${board.seq }</td>
<td align="left"><a href="getBoard.do?seq=${board.seq }">${board.title }</a></td>
<td>${board.writer }</td>
<td>${board.regDate }</td>
<td>${board.cnt }</td>
</tr>
</c:forEach>
</table>
<br />
<a href="insertBoard.jsp">
<spring:message code="message.board.list.link.insertBoard" />
</a>
</center>
</body>
</html>
'SPRING FRAMEWORK' 카테고리의 다른 글
TIL_210629_Spring Mybatis 프레임워크 시작 (0) | 2021.06.29 |
---|---|
TIL_210624_Spring 데이터 변환 (0) | 2021.06.23 |
TIL_210624_Spring 파일 업로드 처리 (0) | 2021.06.23 |
TIL_210623_SpringMVC_비즈니스 컴포넌트 사용, 비즈니스 컴포넌트 로딩, 검색 기능 구현 (0) | 2021.06.22 |
TIL_210623_SpringMVC_어노테이션 설정(@RequestMapping, ModelAttribute, RequestParam, SessionAttributes) (0) | 2021.06.22 |