스프링 MVC 2편 - 메시지, 국제화

hyuk·2024년 1월 28일
0
post-thumbnail

📌 메시지, 국제화란?

기존 화면에 보이던 글자들을 변경하게 될 경우, 하나하나 찾아가면서 변경하는 것은 쉽지 않은 일이다. 이런 다양한 메시지들은 한 곳에서 관리하게 되면 유지보수 및 변경에 용이한데 이런 기능을 메시지 기능이라 한다.

타임리프의 메시지 표현식 #{. . .}를 사용하면 스프링의 메시지를 편리하게 조회할 수 있다.

<label for="memberGrade" th:text="#{memberGrade}"></label>

더 나아가 각 나라별로 쓰이는 언어에 맞춰 관리하면 서비스를 국제화할 수 있다.

messages.properties
messages_ko.properties , messages_en.properties , messages_jp.properties · · ·

국제화 언어 선택

  • HTTP accept-language 헤더 값 사용
  • 사용자가 직접 언어를 선택하는 방법
  • 쿠키 . . .

📌 스프링 메시지 소스 설정

메시지 관리 기능은 스프링이 제공하는 MessageSource를 스프링 빈으로 등록하여 사용한다.

  • MessageSource - 인터페이스
  • ResourceBundleMessageSource - 인터페이스 구현체 ( 이를 스프링 빈으로 등록 )

메시지 소스를 직접 등록하는 방법과 자동 등록하는 방법이 존재한다.

1. 직접 등록

@Bean
public MessageSource messageSource() {
 	ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource();
 	messageSource.setBasenames("messages", "information");
 	messageSource.setDefaultEncoding("utf-8");
 	return messageSource;
}

basenames : 설정 파일의 이름을 지정하는 것으로, 여러 파일을 지정 가능하다.
defaultEncoding : 인코딩 정보를 지정한다. utf-8 을 사용하면 된다.


추가로, 국제화 기능을 사용하고자 하면 파일명 마지막에 언어 정보를 주면 된다. 찾을 수 있는 국제화 파일이 없으면 messages.properties (언어정보가 없는 파일명)를 기본으로 사용한다.

2. 자동 등록

스프링 부트를 사용하면 스프링 부트가 MessageSource를 자동으로 스프링 빈으로 등록해준다.

MessageSource를 스프링 빈으로 등록하지 않고, 별도의 설정없이 다음과 같이 설정하게 되면 "messages" 라는 이름으로 등록된다.

application.properties

  • spring.messages.basename=messages,config.i18n.messages

📌 스프링 메시지 소스 사용

public interface MessageSource {

	String getMessage(String code, @Nullable Object[] args, 
    				  @Nullable String defaultMessage, Locale locale);
                      
	String getMessage(String code, @Nullable Object[] args, 
     				  Locale locale) throws NoSuchMessageException;
}
  • code : 메시지 코드로 메시지 관리 파일에 있는 KEY 값
  • args : 매개변수를 사용할 때 사용된다.
  • locale : 언어 설정 정보로 국제화 파일을 선택할 때, 쓰인다.
    EX ) localeen_US의 경우, messages_en_USmessages_enmessages 순서로 찾는다.

메시지가 없는 경우에는 NoSuchMessageException 이 발생하지만, 기본 메시지 defaultMessage를 사용할 경우, 기본 메시지가 반환된다.

Locale 정보가 없는 경우 Locale.getDefault() 을 호출해서 시스템의 기본 로케일을 사용합니다.


📌 본 포스트는 스프링 MVC 2편 - 백엔드 웹 개발 핵심 기술 통해 학습한 내용을 요약 및 정리한 것입니다.

profile
차곡차곡쌓아가는학습노트

0개의 댓글