본문 바로가기
프로그래밍/스프링프레임워크

Spring Boot 국제화(다국어 지원) 설정하기

by pentode 2019. 10. 19.

Spring Boot 웹 애플리케이션에서 다국어 지원을 위해서 설정하는 방법을 알아 봅니다. Spring Boot의 Starter라고 불리는 미리 설정되어 있는 것이 있는지 찾아보니 찾지 못했습니다. Java 설정을 이용해서 직접 설정하는 방법들을 주로 찾을 수 있었습니다.


이 예제는 이전 글 "Java Config로 메세지소스(MessageSource) 설정하기(다국어 지원)" 의 설정을 가져와서 만들었습니다. Spring Boot 관련 해서 검색을 해보면 jsp 보다는 다른 템플릿 엔진(주로 Thymeleaf)을 사용하는 경우가 많은 것 같습니다. 하지만 여기서는 jsp를 사용해 봅니다. 설정은 Thymeleaf를 사용하는 경우와 jsp를 사용하는 경우가 똑같고 jsp에서는 jstl을 사용하기 위한 추가 설정이 필요합니다.



1. MessageSource를 위한 Java Config 클래스를 추가합니다.


Spring Boot 애플리케이션은 단독 실행을 위해서 @SpringBootApplication 아노테이션을 가지고 main 메소드도 가지는 클래스가 제공됩니다. 이 클래스에 필요한 인터페이스를 구현하여 필요한 설정을 추가해도 되지만, 별도의 설정 클래스를 만들어도 됩니다.


이 예제에서는 @Configuration 아노테이션을 사용해서 설정 클래스를 만듭니다. 웹 컨텍스트 설정을 위해서 WebMvcConfigurer 인터페이스를 구현합니다.


package com.tistory.offbyone.springboot;


import org.springframework.context.annotation.Bean;

import org.springframework.context.annotation.Configuration;

import org.springframework.context.support.ReloadableResourceBundleMessageSource;

import org.springframework.web.servlet.config.annotation.InterceptorRegistry;

import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

import org.springframework.web.servlet.i18n.LocaleChangeInterceptor;

import org.springframework.web.servlet.i18n.SessionLocaleResolver;


@Configuration

public class SpringBootJavaJspConfig implements WebMvcConfigurer {

    /**

     * 메세지 소스를 생성한다.

     */

    @Bean

    public ReloadableResourceBundleMessageSource messageSource() {

        ReloadableResourceBundleMessageSource source = new ReloadableResourceBundleMessageSource();

        // 메세지 프로퍼티파일의 위치와 이름을 지정한다.

        source.setBasename("classpath:/messages/message");

        // 기본 인코딩을 지정한다.

        source.setDefaultEncoding("UTF-8");

        // 프로퍼티 파일의 변경을 감지할 시간 간격을 지정한다.

        source.setCacheSeconds(60);

        // 없는 메세지일 경우 예외를 발생시키는 대신 코드를 기본 메세지로 한다.

        source.setUseCodeAsDefaultMessage(true);

        return source;

    }


    /**

     * 변경된 언어 정보를 기억할 로케일 리졸버를 생성한다.

     * 여기서는 세션에 저장하는 방식을 사용한다.

     * @return

     */

    @Bean

    public SessionLocaleResolver localeResolver() {

        return new SessionLocaleResolver();

    }


    /**

     * 언어 변경을 위한 인터셉터를 생성한다.

     */

    @Bean

    public LocaleChangeInterceptor localeChangeInterceptor() {

        LocaleChangeInterceptor interceptor = new LocaleChangeInterceptor();

        interceptor.setParamName("lang");

        return interceptor;

    }


    /**

     * 인터셉터를 등록한다.

     */

    @Override

    public void addInterceptors(InterceptorRegistry registry) {

        registry.addInterceptor(localeChangeInterceptor());

    }

}



2. jsp에서 jstl을 사용하기 위해서 pom.xml 파일에 의존성을 추가합니다.


<dependency>

    <groupId>javax.servlet</groupId>

    <artifactId>jstl</artifactId>

    <version>1.2</version><!--$NO-MVN-MAN-VER$-->

</dependency>


의존성을 추가할 때 <version>1.2</version>이 들어가면 다음 경고가 뜹니다.


Duplicating managed version 1.2 for jstl


메이븐의 상위에서 관리되는 버전이 오버라이드 되어서 발생하는 경고라고 합니다. 버전 정보를 빼면 상위에 지정된 버전이 사용되는데, 이 버전이 원하는 버전이 아니라면 오버라이드 하면 될것 같습니다. 경고는 위에서 처럼 <version> 태그 뒤에 <!--$NO-MVN-MAN-VER$--> 주석을 사용해서 보이지 않게 할 수 있습니다.



3. 메세지 파일과 테스트용 컨트롤러와 jsp 파일


이전 글 "Java Config로 메세지소스(MessageSource) 설정하기(다국어 지원)"에서와 동일합니다. 예제의 전체소스를 글 끝에 추가했습니다. 아래 이미지는 프로젝트의 파일 구조 입니다.




4. 실행결과


실행 결과 입니다. 메세지 파일의 내용이 보여지고, lang 파라미터를 사용해서 언어를 바꿀 수 있습니다.




5. 예제 전체 소스 입니다.


springboot-java-jsp.zip




반응형