이전 포스팅에서 content negotiation을 배울 때, Accept-Language header를 이용하면, 원하는 언어에 맞는 response를 받을 수 있다고 했었다. 해당 방법에 대해 정리해보자.
스프링과 스프링부트에서 국제화를 다루는 일반적인 방법은, 파일을 message.properties라는 이름으로 정의하는 것이다.
good.morning.message=Good Morning
프로퍼티의 키(good.morning.message)와 값(Good Morning)은 개발자가 임의로 정의해도 된다.
(뜻에는 안 맞지만, bad.morning.message=Good Morning 이따구로 해도 됨)
import java.util.Locale;
import org.springframework.context.MessageSource;
import org.springframework.context.i18n.LocaleContextHolder;
@RestController
public class HelloWorldController {
private MessageSource messageSource;
@Autowired
public HelloWorldController(MessageSource messageSource) {
this.messageSource = messageSource;
}
@GetMapping(path = "/hello-world-internationalized")
public String helloWorldInternationalized() {
Locale locale = LocaleContextHolder.getLocale();
return messageSource.getMessage("good.morning.message", null, "Default Message", locale );
//return "Hello World V2";
// - Example: `en` - English (Good Morning)
// - Example: `nl` - Dutch (Goedemorgen)
// - Example: `fr` - French (Bonjour)
// - Example: `de` - Deutsch (Guten Morgen)
}
}
good.morning.message=Goedemorgen
실행결과
이때 nl 헤더명은 파일명 messages_nl.properties와 같고, 이는 국제화 표준 약속이다.
이를 어기고 파일명과 헤더명을 마음대로 작성하면, 스프링의 MessageSource를 굳이 커스터마이징해야 되서 귀찮아진다.
참고 및 출처
이 시리즈는 Udemy 강의의 내용을 정리한 것입니다.
https://www.udemy.com/course/spring-boot-and-spring-framework-korean/