DolphaGo/TIL

[Spring] 메세지 국제화 시 주의할 점

Opened this issue · 0 comments

image

  • messages 파일을 springBoot에서 기본으로 읽어주기에, MessageSource 객체로 사용하면 그만이겠거니 했다.
  • 그런데 문제는 제대로 동작하지 않아서였는데, 원인은 messages_{언어}.properties 만 import 한채로 돌렸기 때문이다.

image

  • messages.properties 파일이 없다면, MessageSource는 DelegatingMessageSource Bean으로 돌아간다.
    • 이는 부모 메세지 소스가 있으면 해당 메세지 소스에게 넘기고, 없으면 디폴트 메세지를 검사한다. 디폴트 메세지도 없다면 null을 반환한다.
    • 그러니까 최후의 보루같은 녀석이다.
  • 하지만, messages.properties 파일이 있다면, MessageSource는 AbstractMessageSource 를 타게 된다.

image

이 곳에서는 다음과 같은 로직을 타는데,

image

  1. 로케일 설정 안되어있으면, 기본 로케일 가져올 것
  2. MessageFormat 에서 번들에서 값을 읽어들인다.

image

이 번들의 기본 이름은 messages이다.
image

Locale과 조합하여 가져온 번들 내의 파일에서 메세지를 가져온다. (Map형식으로 가져오는 것을 알 수 있다.)
image


결론 : AbstractMessageSource 를 타고, Messages 번들을 이용하여 국제화를 할 것이라면, 로케일로 구분한 파일 뿐만 아니라, messages.properties 가장 기본 파일도 넣어주자.