▶ 주제 : Spring boot에서 다국어 지원하기 (1).
Spring boot에서 클라이언트의 언어&국가정보를 인식하는 방법과 언어&국가정보가 없을 경우에 대해 대처하는 방법을 알아보자.
▶ 관련 문서
▶ 작성 환경
▷ Spring boot 2.0
▶ 방법
Spring에서는 클라이언트가 서버로 request를 했을 때 Locale이라는 객체를 통하여 클라이언트의 언어&국가정보를 식별할 수 있다.
이용할 클래스 목록은 다음과 같다.
첫 번째, LocaleResolver. 클라이언트의 언어&국가정보를 인식하는 클래스.
두 번째, Locale. 클라이언트의 언어&국가정보를 표현할 클래스.
▶ LocaleResolver
LocaleResolver는 클라이언트의 언어&국가정보를 인식할 클래스로, 우선 Bean 등록을 해주어야 한다.
종류는 다음과 같다.
AcceptHeaderLocaleResolver : http 통신 때 사용되는 Accept-Language 필드를 이용하여 언어&국가정보를 인식. (Spring 기본 LocaleResolver)
CookieLocaleResolver : 쿠키를 이용해 언어&국가정보를 인식.
SessionLocaleResolver : 세션을 이용해 언어&국가정보를 인식.
FixedLocaleResolver : 모든 요청에 대해 특정한 언어&국가정보로 인식.
이번 예시에서는 AcceptHeaderLocaleResolver를 이용할 것이다.
@Configuration
@EnableWebMvc
public class WebConfig {
@Bean
public LocaleResolver localeResolver() {
AcceptHeaderLocaleResolver localeResolver = new AcceptHeaderLocaleResolver();
// 언어&국가정보가 없는 경우 미국으로 인식하도록 설정
localeResolver.setDefaultLocale(Locale.US);
return localeResolver;
}
}
LocaleResolver를 Bean으로 등록한다. 여러 종류의 LocaleResolver 클래스 중에서 원하는 것을 등록해주면 된다.
나는 AcceptHeaderLocaleResolver를 적용했는데 이것을 사용하면 서버로 들어온 http 통신의 Accept-Language 필드 값을 읽어들여 언어&국가정보를 인식하게 된다.
Accept-Language 필드는 언어코드-국가코드 형태로 들어있어야 한다. 언어코드는 ISO 639-1 alpha-2, 국가코드는 ISO 3166-1 alpha-2 표준을 맞춰주어야한다.
언어가 한국어, 국가가 대한민국이면 Accept-Language : ko-KR
언어가 영어, 국가가 미국이면 Accept-Language : en-US
언어가 중국어, 국가가 대만이면 Accept-Language : zh-TW
그리고 반드시 언어&국가정보가 없을 경우에 대한 기본값 설정을 권장한다. 이유는 다음과 같다.
이 소스코드는 AcceptHeaderLocaleResolver.java의 실제 구현 소스인데 주석을 번역하자면,
"클라이언트가 요청한 request의 header에 Accept-Language가 없을 경우 미리 설정한 defaultLocale을 지정하도록 한다. defaultLocale을 지정하지 않은 경우엔 서버가 작동하고 있는 컴퓨터 환경의 언어&국가정보를 따르게 된다."
라고 쓰여있다.
무슨 뜻이냐면, 내가 한국에서 다국어 기능이 들어간 서버를 배포했는데 클라이언트가 따로 요구한 언어&국가정보가 없을 경우에는 내 시스템이 한국으로 설정되기 때문에 한국어로 지원을 하게 된다는 뜻이다. 그러니 가급적이면 기본값을 영어로 설정해두도록 하자.
▶ Locale
Locale은 언어&국가정보를 표현하는 클래스로, LocaleResolver를 Bean으로 등록하였다면 Controller 클래스에서 Locale을 인식하여 사용할 수 있다.
@Controller
public class testController {
@RequestMapping(value = "test", method = RequestMethod.GET)
// Header가 파싱되어 locale을 자동으로 받아옴
public void test (Locale locale) {
...
}
}
Accept-Language의 포맷과 내용이 살짝 다른데 지역이 대한민국일 때 Accept-Language가 ko-KR이었다면, Locale이 인식한 정보는 ko_KR로 가지고 있게 된다.
'Programming > Spring' 카테고리의 다른 글
[Spring boot] Spring boot에서 다국어 지원하기 (2) (0) | 2019.04.08 |
---|
댓글