원본 본문으로 이동하기

스프링 i18n (다국어) : 1. 기본설정 및 타임리프에 적용

박용서 - 스프링 i18n (다국어) 시리즈 1. 기본설정 및 타임리프에 적용 - https://gs.saro.me/#!m=elec&jn=797 2. Locale Resolver - https://gs.saro.me/#!m=elec&jn=798 스프링 다국어를 타임리프에서 써보도록 하겠습니다. 1. 기본설정 import java.util.Locale; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.context.MessageSource; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; import org.springframework.context.support.ReloadableResourceBundleMessageSource; import org.springframework.web.servlet.LocaleResolver; import org.springframework.web.servlet.config.annotation.InterceptorRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; import org.springframework.web.servlet.i18n.LocaleChangeInterceptor; import org.springframework.web.servlet.i18n.SessionLocaleResolver; @Configuration @EnableAutoConfiguration @ComponentScan public class I18nConfig extends WebMvcConfigurerAdapter { @Bean public LocaleResolver localeResolver() { // 쿠키를 사용한 예제 CookieLocaleResolver resolver = new CookieLocaleResolver(); resolver.setCookieName("lang"); return resolver; } @Override public void addInterceptors(InterceptorRegistry registry) { LocaleChangeInterceptor localeChangeInterceptor = new LocaleChangeInterceptor(); localeChangeInterceptor.setParamName("lang"); registry.addInterceptor(localeChangeInterceptor); } @Bean public MessageSource messageSource() { ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource(); messageSource.setBasename("classpath:/i18n/messages"); messageSource.setDefaultEncoding("UTF-8"); return messageSource; } } MessageSource messageSource() 메시지 소스를 설정합니다. 위와같이 설정된 경우 아래처럼 세팅해줍니다. 리소스/i18n/messages.properties (기본값) 리소스/i18n/messages_ko.properties (한국어) 리소스/i18n/messages_{언어코드}.properties localeResolver 을 설정합니다. void addInterceptors(InterceptorRegistry registry) 언어 변경시 파라미터를 설정합니다. 위와 같이 설정된 경우 ?lang={언어코드} 로 언어를 바꿀 수 있습니다. LocaleResolver localeResolver() 이 부분의 설명은 다음장에서 다루도록 하겠습니다. 메시지 설정 리소스/i18n/messages_ko.properties title: 타이틀(한국어) hello: 안녕 home: 홈 리소스/i18n/messages_en.properties hello: hello home: home # 기본값을 확인하기위해 타이틀을 제거하였습니다. 뷰 (타임리프) 템플릿/main.html <!DOCTYPE html> <html> <head> <meta charset="utf-8"/> <title th:text="#{title}"></title> </head> <body> <div> <h1 th:text="#{home}"></h1> <h2 th:text="#{hello}"></h2> <a href="?lang=ko">한국어</a> <a href="?lang=en">영어</a> </div> </body> </html> 컨트롤러 - 타임리프가 알아서 잡아주기 때문에 특별히 할일이 없습니다. @RequestMapping(path = "/") public String root() { return "main"; } - 스프링 자바