2020.12.31 / 16:51

Spring + locale에 따른 다국어 설정

금동이
추천 수 67

이번 글은 Spring 프로젝트에 다국어를 지원할 수 있게 설정하는 방법이다.

회사에서 한국, 영어, 일본, 중국어 페이지 내용이 다 다르다고 4벌을 짜자는 말같지도 않은 소리가 나와서 설정해봄.

웹을 하나만 개발하고 다국어 프로퍼티만 작성해서 프론트에 메세지를 주면 되는건데 말이지...

옛날사람들이 많아서 그런가 쫌 별루임...


암튼 나는 그렇게 하기 싫어 다국어 설정을 해본다.



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<!-- context-locale.xml -->
<?xml version="1.0" encoding="UTF-8"?>
 
    <bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
        <property name="basename" value="classpath:messages/messages"/>
        <property name="defaultEncoding" value="UTF-8"/>
    </bean>
    
    <bean id="localeResolver" class="org.springframework.web.servlet.i18n.SessionLocaleResolver">
        <property name="defaultLocale" value="ko"/>
    </bean>
    
</beans>
cs


xml로 빈 설정파일을 작성한다.

messageSource 는 locale에 맞게 해당 국가 언어 메세지 프로퍼티를 가져오기 위해 경로를 지정해준다.

나는 classpath 하위에 messages 폴더에 messages_en.properties, messages_ko.properties 등등 국가 메세지 파일들...


기본 인코딩을 utf-8로 지정하였다.


그 다음 localeResolver 는 3가지 방식이 있는데 나는 세션상태에 따른 locale을 가져와서 사용할 것이다.

그 외에 AcceptHeaderLocaleResolver 가 있는데 이녀석이 localeResolver의 디폴트 값이다.

localeResolver를 작성하지 않으면 디폴트로 AcceptHeaderLocaleResolver 으로 설정된다.

AcceptHeaderLocaleResolver 이녀석은 브라우저 설정된 언어값을 사용한다고 하니 사용자의 UI상의 언어변경으로 언어를 바꿔줄 수 없다.


그 다음은 CookieLocaleResolver 인데 이녀석은 말그대로 쿠키에 locale을 설정하고 바꿔주는 역할을 한다.

나는 세션을 주로 사용하므로 SessionLocaleResolver를 사용할 것이다.

그리고 디플트 국가언어로 ko 한국어를 지정해놓았다.


1
2
3
4
5
6
<!-- context-servlet.xml -->
    <interceptors>
        <beans:bean id="localeChangeInterceptor" class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor">
            <beans:property name="paramName" value="lang"/>
        </beans:bean>
    </interceptors>
cs


이부분은 파라미터로 국가코드를 바꿨을때 인터셉터해서 언어를 바꿔주는 역할을 하는 부분이다.

나는 필요없을 것 같긴한데... 파라미터로 날려서 바꿀 상황이 오지 않을까 해서 남겨놓는다.

예를 들면 이런식으로...

http://localhost:8000/default/?lang=en


이제 국가코드에 따른 메세지를 입력해준다.

일단 en과 ko 정도만 하자.


1
2
# messages_ko.properties
jb.common.title=스프링프로젝트
cs


1
2
# messages_en.properties
jb.common.title=SpringProject
cs


이렇게 같은 이름으로 영어와 한글을 작성해주면 된다.


여기서!

아마 이클립스내에 propertiesEditor 가 없는 분들은 한글 메세지파일이 utf-8 모양으로 나올것이다.


1
2
# messages_ko.properties
jb.common.title=\uc2a4\ud504\ub9c1\ud504\ub85c\uc81d\ud2b8
cs


그러면 프로퍼티 에디터를 이클립스에 다운받아서 메세지 프로퍼티파일만 '우클릭 - openWith' 에서 에디터를 바꿔주면 한글을 볼 수 있다.


이제 jsp 페이지에서 자동으로 국가코드에 따라 바뀔 수 있게 셋팅을 해줘야 겠지요~~


1
2
3
4
5
6
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>
...
    <h1>
        Hello world! <spring:message code="jb.common.title"/
    </h1>
...
cs


taglib 라이브러리 설정해주시고 

해당 국가별 언어설정할 곳에 메세지를 지정해주시면 됩니다.





다국어 페이지를 여러벌 작성하지 않고도 이렇게 사용할 수 있습니다.