[Spring] 메세지 국제화 시 주의할 점
Opened this issue · 0 comments
DolphaGo commented
- messages 파일을 springBoot에서 기본으로 읽어주기에, MessageSource 객체로 사용하면 그만이겠거니 했다.
- 그런데 문제는 제대로 동작하지 않아서였는데, 원인은 messages_{언어}.properties 만 import 한채로 돌렸기 때문이다.
messages.properties
파일이 없다면, MessageSource는 DelegatingMessageSource Bean으로 돌아간다.- 이는 부모 메세지 소스가 있으면 해당 메세지 소스에게 넘기고, 없으면 디폴트 메세지를 검사한다. 디폴트 메세지도 없다면 null을 반환한다.
- 그러니까 최후의 보루같은 녀석이다.
- 하지만,
messages.properties
파일이 있다면, MessageSource는AbstractMessageSource
를 타게 된다.
이 곳에서는 다음과 같은 로직을 타는데,
- 로케일 설정 안되어있으면, 기본 로케일 가져올 것
- MessageFormat 에서 번들에서 값을 읽어들인다.
Locale과 조합하여 가져온 번들 내의 파일에서 메세지를 가져온다. (Map형식으로 가져오는 것을 알 수 있다.)
결론 : AbstractMessageSource 를 타고, Messages 번들을 이용하여 국제화를 할 것이라면, 로케일로 구분한 파일 뿐만 아니라, messages.properties
가장 기본 파일도 넣어주자.