본문 바로가기

개발자노트/Spring

Spring - 다국어처리(국제화)

[다국어 처리(국제화)]
   하나의 페이지를 여러가지의 언어로 서비스하는 것
   과거에는 언어별로 페이지를 다르게 제작함
    -> 프레임워크의 다국어처리기능을 사용(별도 페이지 제작 xxx)

 

 

 

 

 

1) 메세지 파일 제작

    1-1 .properties
           언어 선택을 Locale 코드 정보로 수행
    1-2) 파일명에 언어에 해당하는 Locale 코드를 추가
            ex) xxx_en.properties, xxx_ko.properties, ...
     1-3) 파일 내부에는 메세지 키+메세지 값을 작성
            유니코드로 작성

 

 

1-1. src/main/resources에 패키지로 message 추가

1-2. New - 일반 File로 만들기 (ex) xxx_en.properties, xxx_ko.properties, ...

 

1-3. 파일 내부에는 메세지 키+메세지 값을 작성

      영어를 제외한 언어는 유니코드로 작성

en.properties
ko.properties

 

 

 

2) 스프링설정파일에게 메세지 파일들을 읽어들일수있도록 클래스 추가

DS.xml에 MessageSource 클래스 <bean> 등록

  <bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
      <property name="basenames">
         <list>
            <value>message.messageSource</value>
         </list>
      </property>
   </bean>

원래라면 message.messageSource_en.properties / message.messageSource_kr.properties 라고 적어야할텐데

 

❓❓ 왜 경로.message 만 사용할까?

. 는 경로를 읽는 구분점이라 패키지인지 확장자인지 알기 힘들기 때문에,

message 파일은 무조건 확장자를 properties를 쓰기로 정함

그리고 Locale 정보를 xml 변화 없이 추가할 수 있다! ( ex. 지원 언어들이 더 추가되게 된다면 )

 

 

 

3) Locale 정보를 알아서 판단해줄 LocaleResolver 등록

SessionLocaleResolver

  <bean id="localeResolver" class="org.springframework.web.servlet.i18n.SessionLocaleResolver" />

 

 

4) Locale 정보를 변경해서 사용하고싶을때?

LocaleChangeInterceptor 클래스 등록
lang 파라미터로 Locale 정보를 변경

 

- mvc namespace 추가가 필요하다!

<mvc:interceptors>
      <bean class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor">
         <property name="paramName" value="lang" />
      </bean>
   </mvc:interceptors>

 

 

 

 

5) 사용해보자!

커스텀 태그처럼 상단에 <%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %> 등록


<spring:message code="메세지 키" />

 

 

현재 언어를 바꾸는 기능은 들어가있지 않고 접속한 지역을 확인해 제공해주고 있어 한글만 확인이 가능할 것이다.

그렇다면 사용자가 사용할 언어를 바꾸고 싶을 땐 어떡할까?

 

다음과 같이 특정 요청에 파라미터 Lang으로 값을 주면

LocaleChangeInterceptor 가 읽고 언어설정을 바꾸는 것도 가능하다.