Spring의 Message관리 정의
Spring 프로젝트에서 여러 곳에 사용되는 다양한 문구를 한 곳에서 관리할 수 있도록 하는 기능
국가별로 설정할 수도 있어서 국제화 기능을 제공합니다.
초기 설정
Spring에선 ResourceBundleMessageSource
를 Bean으로 등록해주면 됩니다.
@Bean
public MessageSource messageSource() {
ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource();
messageSource.setBasenames("messages", "errors"); //properties 파일명
messageSource.setDefaultEncoding("utf-8");
return messageSource;
}
Spring Boot에서는 자동으로 등록이 되어 있어서 application.properties
에서 설정해주면 됩니다.
spring.messages.basename=messages
메시지 파일은 src/main/resources/
경로에 넣어주면 됩니다.
Message 파일 생성
messages.properties에 저장하고 싶은 문구들을 코드=문구 형태로 저장합니다.
# messages.properties
hello=안녕
hello.name=안녕 {0}
# messages_en.properties
hello=hi
hello.name=hi {0}
Spring 소스 내에서 사용
MessageSource 클래스를 사용하면 메시지를 소스로 불러오는 것이 가능합니다.
@Autowired
MessageSource ms;
ms.getMessage("hello", null, Locale.ENGLISH) // hi
ms.getMessage("hello", new Object[]{"Spring"}, null) // 안녕 Spring
정리
getMessage에는 일반적으로 총 3개의 인자가 들어옵니다.
첫번째: 코드값 두번째: 인자값 세번째: 지역
인자값으로는 한개의 인자만 있다 하더라도 Object 타입의 배열로 전달해야합니다.
ThymeLeaf에 적용
ThymeLeaf의 메시지 표현식을 통해 정해놓은 문구를 코드를 입력하여 가져올 수 있음
<div th:text="#{hello.name(${user.name})}"></h2>
설명
#{…}으로 메시지의 코드를 입력하여 값을 가져오고 그 안쪽의 뒤에 (…) 부분에 인자값으로 넣을 값을 넣습니다.