[백업][가리사니] 스프링 i18n (다국어) : 1. 기본설정 및 타임리프에 적용
java, spring
이 문서는 가리사니 개발자 포럼에 올렸던 글의 백업 파일입니다. 오래된 문서가 많아 현재 상황과 맞지 않을 수 있습니다.
스프링 i18n (다국어) 시리즈
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"; }