Spring

[Spring] 메시지, 국제화

감자b 2024. 12. 27. 02:39

메시지, 국제화 기능

메시지 기능이란 화면이나 사용자에게 전달되는 텍스트 정보를 한 곳(messages.properties)에서 관리할 수 있는 기능을 의미한다. 그리고 이런 메시지 파일을 나라별로 만들어서 서비스의 다국어 처리를 하는 것을 국제화라고 한다.


MessageSource

위 기능을 사용하려면 MessageSource를 스프링 빈으로 등록해야 한다. (스프링 부트의 경우 자동 등록)

  • 스프링에서 국제화, 로컬화를 지원하기 위한 인터페이스로 구현체는 ResourceBundleMessageSource가 있다.
  • /resources 하위에 messages.properties 파일을 생성하면 이를 기본으로 사용하며, 국제화 기능을 사용하려면 messages 뒤에 언어 정보를 입력하면 된다. (messages_en.properties, messages_ko.properties)
// MessageSource 수동 등록
@Bean
public MessageSource messageSource() {
	ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource();
	messageSource.setBasenames("messages", "errors");
	messageSource.setDefaultEncoding("utf-8");
	return messageSource;
}
# MessageSource 설정. (스프링 부트의 경우 spring.messages.basename=messages 기본 값)
spring:
  messages:
    basename: messages
    encoding: UTF-8

 

error.message=기본 예외 메시지
error.user.message={0}님 예외 메시지

messages.properties

error.message=exception message

messages_en.properties

 


MessageSource 사용

빈으로 MessageSource가 등록되어 있으므로 @Autowired를 통해 객체를 주입받을 수 있다.

이후 messageSource.getMessage 메서드를 통해 메시지 파일에 정의한 메시지를 가져올 수 있다.

파라미터는 code(key), args, locale 정보가 들어가며 locale을 지정하지 않는다면 Locale.getDefault()을 호출해서 시스템의 기본 locale을 사용한다.

@SpringBootTest
public class MessageSourceTest {

    @Autowired
    MessageSource messageSource;

    @Test
    void test() {
        String message = messageSource.getMessage("error.message", null, null);
        Assertions.assertThat(message).isEqualTo("기본 예외 메시지");

        String userMessage = messageSource.getMessage("error.user.message", new Object[]{"hbb"}, null);
        Assertions.assertThat(userMessage).isEqualTo("hbb님 예외 메시지");

        String enMessage = messageSource.getMessage("error.message", new Object[]{"hbb"}, Locale.ENGLISH);
        Assertions.assertThat(enMessage).isEqualTo("exception message");
    }
}

 

만약에 아래와 같이 messages.properties에서 한글이 깨진다면

Settings -> Editor -> File Encodings → Default encoding for properties files 설정

  • ISO-8859-1 -> UTF-8
  • Transparent native-to-ascii conversion 체크


참고

 

스프링 MVC 2편 - 백엔드 웹 개발 활용 기술 강의 | 김영한 - 인프런

김영한 | 웹 애플리케이션 개발에 필요한 모든 웹 기술을 기초부터 이해하고, 완성할 수 있습니다. MVC 2편에서는 MVC 1편의 핵심 원리와 구조 위에 실무 웹 개발에 필요한 모든 활용 기술들을 학습

www.inflearn.com