스프링은 로케일(지역)에 상관없이 일관된 방법으로 문자열(메시지)을 관리할 수 있는 MessageSource 인터페이스를 정의하고 있습니다.
MessageSource 인터페이스의 정의
- 특정 로케일에 해당하는 메시지가 필요한 코드는 MessageSrouce의 getMessage() 메서드를 이용해서 필요한 메시지를 가져와서 사용합니다.
package.org.springframework.context;
import java.util.Locale;
public interface MessageSource{
String getMessage(String code, Obejct[] args,
String defaultMessage, Locale locale);
String getMessage(String code, Object[] args, Locale locale)
throws NoSuchMessageException;
...
}
getMessage() 메서드의 code 파라미터는 메시지를 구분하기 위한 코드이고 locale 파라미터는 지역을 구분하기 위한 Locale입니다.
같은 코드라도 지역에 따라 다른 메시지를 제공할 수 있도록 설계되어 있습니다.
해당 기능을 사용하면 국내에서 접근하면 한국어로 메시지를 보여주고 해외에서 접근하면 영어로 메시지를 보여주는 처리를 할 수 있습니다.
MessageSource의 구현체로는 자바의 프로퍼티 파일로부터 메시지를 읽어오는 ResourceBundleMessageSource 클래스를 사용합니다.
메시지 코드와 일치하는 이름을 가진 프로퍼티의 값을 메시지로 제공합니다.
리소스번들(ResourceBundle)을 사용하기 때문에 해당 프로퍼티 파일이 클래스 패스에 위치해야 합니다. (src/main/resources) 에 프로퍼티 파일 위치
<spring:message> 태그는 스프링 설정에 등록된 'messageSource' 빈을 이용해서 메시지를 구합니다.
MessageSource 빈을 등록한 Config
@Configuration
@EnableWebMvc
public class MvcConfig implements WebMvcConfigurer {
...
@Bean
public MessageSource messageSource() {
ResourceBundleMessageSource ms =
new ResourceBundleMessageSource();
ms.setBasenames("message.label");
ms.setDefaultEncoding("UTF-8");
return ms;
}
}
<spring:message> 를 실행하면 내부적으로 MessageSource의 getMessage()를 실행해서 필요한 메시지를 구합니다.
<spring:message> 예시
<%@ page contentType="text/html; charset=utf-8" %>
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>
<!DOCTYPE html>
<html>
<head>
<title><spring:message code="member.register"/></title>
</head>
<body>
<h2><spring:message code="term"/></h2>
<p>약관 내용</p>
<form action="step2" method="post">
<label>
<input type="checkbox" name="agree" value="true1">
<spring:message code="term.agree"/>
</label>
<input type="submit" value="<spring:message code="next.btn"/>"/>
</form>
</body>
</html>
src/main/resource/message/properties 파일
member.register=회원가입
term=약관
term.agree=약관동의
next.btn=다음단계
member.info=회원정보
email=이메일
name=이름
password=비밀번호
password.confirm=비밀번호 확인
register.btn=가입 완료
register.done=<strong>{0}님 ({1})</strong>, 회원 가입을 완료했습니다.
go.main=메인으로 이동
required=필수항목입니다.
bad.email=이메일이 올바르지 않습니다.
duplicate.email=중복된 이메일입니다.
nomatch.confirmPassword=비밀번호와 확인이 일치하지 않습니다.
<spring:message> 태그의 code 속성에 지정한 메시지가 존재하지 않으면 익셉션이 발생합니다.
JspTagException: No message under code 'member.register1' for locale 'ko'.
익셉션이 발생하면 code 값과 프로퍼티 파일의 프로퍼티 이름이 올바른지 확인해야 합니다.
'Spring' 카테고리의 다른 글
[Spring] 커맨드 객체의 값 검증과 에러 메시지 처리 1 (0) | 2024.05.11 |
---|---|
[Spring] <spring:message> 메시지 인자 처리 (0) | 2024.05.11 |
[Spring] Spring Message 기능 사용해보기 (0) | 2024.05.07 |
[Spring] GET , POST 방식에 동일 이름 커맨드 객체 사용하기 (0) | 2024.04.29 |
[Spring] ModelAndView 이용해서 뷰 선택하고 모델을 전달해보기 (0) | 2024.04.29 |