티스토리 뷰

[JAVA]/Spring

[Spring] 다국어 처리

춘햄 2021. 6. 28. 14:27

Spring은 jsp 페이지를 다양한 언어로 지원할 수 있도록 할 수 있는 다국어 처리 기능 또한 가지고 있다. 

1개의 페이지를 3가지 언어로 제작하려면, 언어별로 jsp 파일을 만들 필요가 없이 properties 파일을 사용하여 자동 맵핑하게끔 할 수 있다.


1. message 파일 작성

 

사용자가 원하는 언어로 메시지를 출력하려면 각 언어에 따른 메시지 파일을 작성해야 한다. 기본적이로 이 메시지 파일은 properties 파일을 이용하며, 해당 언어를 사용하는 Locale 정보를 결합하여 작성한다. (한글의 경우,  txt 파일로 먼저 작성 후, properties 파일에 옮기면 STS 가 알아서 변환해준다.)

 

 1) messageSource_ko.properties

# login.jsp
message.user.login.title=\uB85C\uADF8\uC778
message.user.login.id=\uC544\uC774\uB514
message.user.login.password=\uBE44\uBC00\uBC88\uD638
message.user.login.loginBtn=\uB85C\uADF8\uC778

message.user.login.language.en=\uC601\uC5B4
message.user.login.language.ko=\uD55C\uAE00

# getBoardList.jsp
message.board.list.mainTitle=\uAC8C\uC2DC\uAE00 \uBAA9\uB85D
message.board.list.welcomeMsg=\uB2D8! \uAC8C\uC2DC\uD310\uC5D0 \uC624\uC2E0\uAC78 \uD658\uC601\uD569\uB2C8\uB2E4.
message.board.list.search.condition.title=\uC81C\uBAA9
message.board.list.search.condition.content=\uB0B4\uC6A9
message.board.list.search.condition.btn=\uAC80\uC0C9
message.board.list.table.head.seq=\uBC88\uD638
message.board.list.table.head.title=\uC81C\uBAA9
message.board.list.table.head.writer=\uC791\uC131\uC790
message.board.list.table.head.regDate=\uB4F1\uB85D\uC77C
message.board.list.table.head.cnt=\uC870\uD68C\uC218
message.board.list.link.insertBoard=\uC0C8\uAE00 \uB4F1\uB85D

-----------------------------------------messageSource_ko.txt----------------------------------

# login.jsp
message.user.login.title=로그인
message.user.login.id=아이디
message.user.login.password=비밀번호
message.user.login.loginBtn=로그인

message.user.login.language.en=영어
message.user.login.language.ko=한글

# getBoardList.jsp
message.board.list.mainTitle=게시글 등록
message.board.list.welcomeMsg=님! 게시판에 오신 걸 환영합니다.
message.board.list.search.condition.title=제목
message.board.list.search.condition.content=내용
message.board.list.search.condition.btn=검색
message.board.list.table.head.seq=번호
message.board.list.table.head.title=제목
message.board.list.table.head.writer=작성자
message.board.list.table.head.regDate=등록일
message.board.list.table.head.cnt=조회수
message.board.list.link.insertBoard=새글 등록

 

2) messageSource_en.properties

# login.jsp
message.user.login.title=LOGIN
message.user.login.id=ID
message.user.login.password=PASSWORD
message.user.login.loginBtn=LOG-IN

message.user.login.language.en=English
message.user.login.language.ko=Korean

# getBoardList.jsp
message.board.list.mainTitle=BOARD LIST
message.board.list.welcomeMsg=! Welcome to my BOARD
message.board.list.search.condition.title=TITLE
message.board.list.search.condition.content=CONTENT
message.board.list.search.condition.btn=Search
message.board.list.table.head.seq=SEQ
message.board.list.table.head.title=TITLE
message.board.list.table.head.writer=WRITER
message.board.list.table.head.regDate=REGDATE
message.board.list.table.head.cnt=CNT
message.board.list.link.insertBoard=Insert Board

 

2. MessageSource 등록

 

언어별 파일 작성을 끝냈으면, 스프링 설정 파일에서 이 메시지 파일들을 읽어 들이는 MessageSource 클래스를 bean 객체로 등록해야 한다.

 

◎presentation-layer.xml

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

이때, 프로퍼티 변수는 리스트 형태로 들어가기 때문에 확장자명이나 _ko, _en 같은 꼬리말은 생략 가능하다.

 

 

3. LocaleResolver 등록

 

웹브라우저가 서버에 요청하면 브라우저의 Locale 정보가 HTTP 요청 메시지 헤더에 자동으로 설정되어 전송된다. 이때, 스프링은 LocaleResolver 를 통해서 클라이언트의 Locale 정보를 추출하고, 이 Locale 정보에 해당하는 언어의 메시지를 적용한다.

 

◎presentation-layer.xml

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

 

4. Locale 변경하기

 

브라우저에 설정된 Locale 언어 이외에 다른 언어로 화면을 변경하고 싶을 때는 LocaleChangeInterceptor 클래스를 이용하여 변경이 가능하다.

 

◎presentation-layer.xml

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

 

5. jsp 화면 처리

 

jsp 파일에서 메시지 파일에 등록한 메시지로 화면을 구성하려면 스프링에서 제공하는 태그 라이브러리를 이용해야 한다.

<%@ taglib uri="http://www.springframework.org/tags" prefix="spring" %>   

 

그러고 나서 다음처럼 <spring:message/> 태그의 code 속성 값으로 메시지 파일에 등록된 메시지 키를 등록하면 Locale에 해당하는 메시지를 출력할 수 있다.

<title><spring:message code="message.user.login.title"></spring:message></title>

 

Comments