Spring의 Message관리 정의

Spring 프로젝트에서 여러 곳에 사용되는 다양한 문구를 한 곳에서 관리할 수 있도록 하는 기능
국가별로 설정할 수도 있어서 국제화 기능을 제공합니다.

초기 설정

Spring에선 ResourceBundleMessageSourceBean으로 등록해주면 됩니다.

@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/ 경로에 넣어주면 됩니다.

image

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>

설명

#{…}으로 메시지의 코드를 입력하여 값을 가져오고 그 안쪽의 뒤에 (…) 부분에 인자값으로 넣을 값을 넣습니다.