[Spring] 다국어(i18n) 적용 하기.
ITWeb/개발일반 2020. 7. 6. 16:08다국어를 적용 하기 위한 Code Snippet
1. Javascript
- 구글링 해보시면 몇 가지 framework 들이 나옵니다.
- 쉽게 구현을 한다고 하면, 현재의 locale 정보를 cookie 또는 session 에서 읽어 와서 해당 하는 locale 의 message 파일 또는 변수를 가지고 설정 하면 됩니다.
예제)
let MESSAGE = new Object();
let INTL = MESSAGE["ko"];
document.addEventListener("DOMContentLoaded", function(){
let applicationLocale;
try {
applicationLocale = $.cookie("APPLICATION_LOCALE");
} catch (e) {
}
if(!applicationLocale) {
applicationLocale = "ko";
}
INTL = MESSAGE[applicationLocale];
});
MESSAGE.ko = {
"HELLO": "안녕"
};
MESSAGE.en = {
"HELLO": "Hello"
};
MESSAGE.ja = {
"HELLO": "こんにちは"
};
- 여기서 원래는 jquery 를 이용 하다 보니 $ 가 들어 갔었는데 $(document).ready(); 였으나 $를 찾지 못해서 걍 바꿔 놓았습니다.
- 코드 설명은 쉽습니다. 그냥 정적으로 정의해서 사용 하는 내용이라 보시면 다 아실 것 같습니다.
2. Spring Boot + Thymeleaf
Cookie 와 Session 두 가지로 적용이 가능 합니다.
구글링 해보시면 거의 똑같은 코드로 예제들이 나올 거예요.
그냥 담는 그릇을 Cookie 로 할건지 Session 으로 할 건지의 차이 라고 보시면 됩니다.
- 프로젝트에서 "Resource Bundle 'messages'" 를 추가해 주세요.
- 추가 하면서, ko, en, ja, zh 생성 하시면 됩니다.
- messages.properties
- messages_ko.properties
HELLO=안녕
- messages_en.properties
HELLO=Hello
- messages_zh.properties
- messages_ja.properties
HELLO=こんにちは
2.1 Session
@Configuration
public class LocaleConfig implements WebMvcConfigurer {
@Bean
public LocaleResolver localeResolver() {
SessionLocaleResolver sessionLocaleResolver = new SessionLocaleResolver();
sessionLocaleResolver.setDefaultLocale(Locale.KOREAN);
return sessionLocaleResolver;
}
@Bean
public LocaleChangeInterceptor localeChangeInterceptor() {
LocaleChangeInterceptor localeChangeInterceptor = new LocaleChangeInterceptor();
localeChangeInterceptor.setParamName("locale");
return localeChangeInterceptor;
}
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(localeChangeInterceptor());
}
}
2.2 Cookie
@Configuration
public class LocaleConfig implements WebMvcConfigurer {
@Bean
public LocaleResolver localeResolver() {
CookieLocaleResolver cookieLocaleResolver = new CookieLocaleResolver();
cookieLocaleResolver.setDefaultLocale(Locale.KOREAN);
cookieLocaleResolver.setCookieName("APPLICATION_LOCALE");
return cookieLocaleResolver;
}
@Bean
public LocaleChangeInterceptor localeChangeInterceptor() {
LocaleChangeInterceptor localeChangeInterceptor = new LocaleChangeInterceptor();
localeChangeInterceptor.setParamName("locale");
return localeChangeInterceptor;
}
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(localeChangeInterceptor());
}
}
그래서 Thymeleaf 에서는 아래와 같이 쓰시면 됩니다.
<h1 th:text="#{HELLO}"></h1>