[Spring] 메시지 / 국제화 하기

728x90

 

메시지 소스

스프링은 다양한 메시지를 한 곳에서 관리할 수 있도록 메시지 기능을 제공한다.

인터페이스 MessageSource 와 구현체 ResourceBundleMessageSource 를 스프링 빈으로 등록하면 된다.

(스프링 부트를 사용하면 자동으로 등록한다.)

 

직접 등록

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

basenames : 설정 파일 이름 (여러 개 지정 가능) (/resources 아래에 두면 된다.)

 

스프링 부트

spring.messages.basename=messages

기본값으로 messages 라는 이름으로 등록되어, 사용할 수 있다.

 

사용 방법

/resources/messages.properties
hello=안녕
hello.name=안녕 {0}
/resources/messages_en.properties
hello=hello
hello.name=hello {0}

메시지 파일들을 생성한다.

{0} 부분은 매개변수를 전달받아 치환한다.

 

messageSource.getMessage(code, args, locale) 로 메시지 소스를 사용한다.

codeargs 정보를 전달하여 locale 정보와 맞는 파일에서 조회한다.

messageSource.getMessage(code, args, default, locale) 도 있다.

메시지가 없는 경우에 NoSuchMessageException 이 발생하며, default 에 기본 메시지를 지정할 수 있다.

 

만약 locale이 null 이면, 

1. Locale.getDefault() 를 호출하여 시스템의 기본 로케일 사용하여 파일 조회

2. 그래도 없으면 basename 파일을 조회

 

타임리프 사용법

#{...} 사용

${...} 매개변수 사용

 

LocaleResolver

스프링은 Accept-Language 헤더의 값을 기반으로 locale 을 선택한다.

하지만 인터페이스 LocaleResolver 의 구현체를 변경해서 쿠키/세션 기반의 locale 을 선택할 수도 있다.

 

> 참고 <

만약 인텔리제이에서 한글 깨짐이 발생한다면,

Setting > File Encodings 에서 Default encoding for properties files 를 UTF-8 로 변경하고

Transparent native-to-ascil conversion 도 체크

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

출처 | 스프링 MVC 2(김영한) - 인프런

728x90