[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`) 로 메시지 소스를 사용한다.

`code` 에 `args` 정보를 전달하여 `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