Springboot Locale 설정
다국어 처리를 해야해 스프링의 LocaleResolver를 사용했다.
스프링이 제공하는 LocaleResolver에는 헤더의 Accept-Language 값을 사용하는 AcceptHeaderLocaleResolver, 쿠키에 Locale 정보를 저장하는 CookieLocaleResolver, 세션에 저장하는 SessionLocaleResolver, 요청과 상관없이 특정한 Locale을 설정하는 FixedLocaleResolver이 있는데 비교적 컨트롤이 쉬울 것 같은 CookieLocaleResolver를 사용했다.
@Configuration
public class LocaleConfiguration extends WebMvcConfigurerAdapter {
@Bean
public MessageSource messageSource() {
ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource();
messageSource.setBasename("/messages");
messageSource.setDefaultEncoding("UTF-8");
return messageSource;
}
@Bean
public LocaleResolver localeResolver() {
CookieLocaleResolver localeResolver = new CookieLocaleResolver();
localeResolver.setCookieName("cookieName");
localeResolver.setDefaultLocale(Locale.ENGLISH);
return localeResolver;
}
@Bean
public LocaleChangeInterceptor localeChangeInterceptor() {
LocaleChangeInterceptor localeChangeInterceptor = new LocaleChangeInterceptor();
localeChangeInterceptor.setParamName("lang");
return localeChangeInterceptor;
}
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(localeChangeInterceptor
}
}
MessageSource
MessageSource는 로케일 프로퍼티 파일 관련 설정을 하는 역할이다. setBasename으로 설정된 경로 밑에 언어별 프로퍼티 파일을 위치시키면 된다. /messages 경로를 잡아 /resources/messages 폴더 밑에 프로퍼티 파일들을 위치시켰다.LocaleResolver
CookieLocaleResolver는 쿠키에 Locale 정보가 존재하지 않으면, defaultLocale 프로퍼티를 Locale로 사용한다. defaultLocale 프로퍼티의 값이 null인 경우 Accept-language 헤더로부터 Locale 정보를 추출한다.LocaleChangeInterceptor
LocaleChangeInterceptor는 요청을 가로채서 언어를 체크하는 역할을 한다.
@Controller
@RequestMapping("/")
public class Controller {
@RequestMapping(value = "/")
public String main(Model model, @RequestParam(name = "lang") String lang) {
return "/";
}
사용자가 최초 사이트에 진입할 때 루트경로에서 쿼리스트링으로 언어값을 전달 받아 쿠키에 Locale 정보를 저장하고, 그 이후부터는 쿠키에서 해당하는 언어의 값을 가져와 사용한다.
<%@ taglib uri="http://www.springframework.org/tags" prefix="spring"%>
jsp 에서는 spring 태그를 이용해 <spring:message code="name"/> 로 프로퍼티 파일에 있는 값을 가져온다.
참고 : https://www.baeldung.com/spring-boot-internationalization