본문 바로가기
프로그래밍/java

[Spring Boot] JSP 사용시 다국어 적용하기

by 뜨끔쓰 2022. 5. 2.
728x90
728x90

프로젝트를 진행하며 다국어 처리가 필요한 부분이 있어 SpringBoot와 JSP 조합에서 다국어 처리를 하는법을 정리하려고합니다.

 

사용자의 요청에 따라 스프링에서는 LocaleResolver를 이용해서 Locale를 추출하여 Locale 객체를 이용해 해당하는 언어의 메시지를 선택하도록 되어있다.

 

일반적으로 스프링이 제공하는 LocaleResolver 구현 클래스들은 다음과 같다.

종류 설명
AcceptHeaderLocaleResolver http 통신에 사용되는 Accept-Language 헤더로부터 언어&국가 정보를 받는다.
(Spring 기본 LocaleResolver)
CookieLocaleResolver 쿠키를 이용하여 언어&국가 정보를 받는다.
(setLocale() 메소드 => 쿠키에 Locale정보 저장)
SessionLocaleResolver 세션을 이용하여 언어&국가 정보를 받는다.
(setLocale() 메소드 => 세션에 Locale정보 저장)
FixedLocaleResolver 모든 요청에 대해 고정 언어&국가정보를 사용한다.
(setLocale() 메소드가 없음)

관련 공식문서: https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/web/servlet/LocaleResolver.html

 

 

이번예시에서는 SessionLocaleResolver를 사용 하여 진행할 예정입니다.

 

일단 스프링에서 사용하기 위해 Bean 등록 부터 진행한다. 여러종류의 LocaleResolver 클래스 중에 원하는 것으로 등록하면 된다. (여기서는 SessionLocaleResolver)

 

@Bean
public SessionLocaleResolver localeResolver() {
    SessionLocaleResolver sessionLocaleResolver = new SessionLocaleResolver();
    sessionLocaleResolver.setDefaultLocale(new Locale("ko"));
    return sessionLocaleResolver;
}

기본 언어는 ko로 설정! LocalResolver는 locale을 결정하는 일을 한다고 보면 된다.

 

그런다음 LocaleChangeInterceptor를 이용하면 url 뒤에 특정 locale 인자값을 받아 언어 변경이 가능하다!

당연히 이것도 Bean을 추가한다.

    @Bean
    public LocaleChangeInterceptor localeChangeInterceptor() {
        LocaleChangeInterceptor localeChangeInterceptor = new LocaleChangeInterceptor();
        localeChangeInterceptor.setParamName("lang");
        return localeChangeInterceptor;
    }
    
    @Override
    /* 인터셉터에 추가해준다. */
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(localeChangeInterceptor());
    }

이렇게하면 만약 http://localhost/test?lang=kr 로 요청이 들어 오면 locale을 kr로 바꿔준다!

주로 페이지의 selectbox를 추가하여 언어를 선택할 수 있도록 세팅하면 된다.

이런식으로 Selectbox 사용

이런식으로 Selectbox를 이용하면 손쉽게 언어 변경이 가능하다.

 

그다음으로 jsp에서 사용하기 위해 각 언어별 message파일 셋팅이 필요하다.

 

우선 yml을 사용하기 때문에 yml 파일에 아래 파일 경로를 설정한다.

spring:
  messages:
    basename: messages/messages

 

message파일경로

경로를 설정했다면 이제 내용물을 채워주면 된다.

EX)

그 후 우리는 JSP에 사용할 것이기 때문에 JSP 파일에 아래처럼 사용하면된다.

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> 
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> 
<%@ taglib uri="http://www.springframework.org/tags" prefix="spring" %> 
<!DOCTYPE html> 
<html> 
    <head> 
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 
    <title>
        <spring:message code="site.title" text="스프링 테스트 사이트 - default" />
    </title> 
    </head> 
    <body> 
    <div>
    	<spring:message code="site.body" arguments="1" text="{0}번째 본문입니다." />
    </div>
</body> 
</html>

 

이렇게 작성하면 각 code에 맞는 다국어가 자동으로 셋팅되고 사용자에게 보여진다!

 

또한 arguments를 추가하여 값을 동적으로 변경도 가능합니다. 

 

간략하게 글을 작성하였지만 필요한 정보는 다 작성한 것 같다. 직접 적용해보며 알아가면 더 좋을 것 같다!

 

부족한 글 읽어주셔서 감사합니다. 

728x90
반응형

댓글