본문 바로가기
Hot Tech Reference/Spring Framework

[스크랩][Spring3 MVC] 국제화(Internationalization) & 현지화(Localization) 예제로 알아보기

by cusmaker 2014. 7. 3.
반응형

벌써 5번째 글이 되었습니다이전 글에서는 Tiles  스프링3 MVC에서 설정하고 사용하는 법에 대해서 살펴 봤습니다. Tiles 설정 파일을 정의 하기 위해서 org.springframework.web.servlet.view.tiles2.TilesConfigurer 클래스를  정의하는데 사용 했습니다이걸 이용해서 만들었던 HelloWorld 어플리케이션을 헤더와 푸터 메뉴 등으로 나누었습니다

이번 파트에서는 스프링3 MVC 국제화(Internationalization - I18N )  현지화(Localization - L10N )  대해서 알아보도록 하겠습니다.
이번  시리즈 내내 만들어왔던 Hello world 어플리케이션에 l10n  다라 i18n 기능을 덧붙여 보겠습니다.
소스가 없다면 이전글로 돌아가서 소스를 다운받아 실습하시기를 권해드립니다.

i18n 
 L10n 이란 무엇인가? 

컴퓨터에서 국제화와 현지화 라는것은다른 언어와 지역적인 차이들을 소프트웨어에 적용시킨다는 것을 말합니다.국제화라는 것은 여러가지 다른 언어와 지역적 차이들을 기술적인 변경 없이 소프트웨어에 적용할  있도록 설계하는 과정을 말합니다현지화 라는 것은 국제화가  소프트웨어에 특정 지역이나 언어에 대해서 지역특색의 컴포넌트를 추가한다거나 번역을해서 적용시키는 것을 말합니다.

용어는 i18n 이라고 자주 줄여 씁니다. ( internationalization  단어의 첫글자인 i  끝글자인 n 사이에 18개의 글자가 있다고해서 i18n  )
L10n 
에서는 대문자 L 쓰고 i18n 에서는 소문자 i 써서  소문자 l  대문자 I  혼동하는것을 피합니다.

목표

우리의 목표는 국제화현지화 기능을 스프링 MVC 어플리케이션에 추가하는 것입니다 끝마치고 나면 다음과 같은모습이 됩니다.

   

두개의 언어지원 기능을 추가  겁니다 : 영어와 독일어유저가 사용하는 브라우저의 지역적인 세팅에 따라서 적절한 언어가 선택됩니다.
 유저가 우상단에 있는 언어 선택 링크를 직접 클릭하여 언어를 변경할   있습니다.

메세지 자원 파일 (Message Resources File)

어플리케이션에서 표시되는 모든 문자를 담게  두개의 properties 파일을 만들 것입니다 두개의 파일은"resources" 라고 불리우는 자원 폴더에 저장  것입니다프로젝트 이름에 마우스 오른쪽 클릭 > New > Source Folder  클릭하고 이름을 resources  하여 자원 폴더를 만듭니다.

만든 폴더에 messages_de.properties  messages_en.properties 두개의 파일을 만들고 아래의 내용을 입력합니다.

File : resources/messages_en.properties

label.lastname=Last Name 
label.email=Email 
label.telephone=Telephone 
label.addcontact=Add Contact  

label.menu=Menu
label.title=Contact Manager 

label.footer=© ViralPatel.net 


File : resources/messages_de.properties

label.firstname=Vorname

label.lastname=Familiename

label.email=Email

label.telephone=Telefon

label.addcontact=Addieren Kontakt 

    

label.title=Kontakt Manager

label.menu=Menü

    

label.footer=© ViralPatel.net


스프링3 MVC에서 국제화(Internatinalization - i18n)  현지화( Localization - L10n) 설정해주기

방금 두개의 메시지들이 담긴 파일을 만들었습니다이제 이파일들을 스프링 설정에서 지정해 주는 작업을 해야 합니다.
그러기 위해서 org.springframework.context.support.ReloadableResourceBundleMessageSource 클래스를 사용할 것입니다.

 유저가 직접 언어를 선택할  있는 기능도 추가  것입니다 기능은 org.springframework.web.servlet.i18n.LocaleChangeInterceptor  클래스를 통해서 구현됩니다. LocaleChangeInterceptor 클래스는 지역적인 차이가 발생됐을  이것을 잡아냅니다그리고  변경 내역은 다음 요청에 대비하기 위해 쿠키에 저장됩니다이런 지역적인 변화를 쿠키에 저장하기 위해서 org.springframework.web.servlet.i18n.CookieLocaleResolver 클래스 파일이 사용됩니다.

다음 코드를 spring-servlet.xml 파일에 추가합니다.

File : WebContent/WEB-INF/spring-servlet.xml

view plaincopy to clipboardprint?

  1. <bean id="messageSource"  

  1.     class="org.springframework.context.support.ReloadableResourceBundleMessageSource">   
  2.     <property name="basename" value="classpath:messages" />   
  3.     <property name="defaultEncoding" value="UTF-8"/>   
  4. </bean>   
  5.      
  6. <bean id="localeChangeInterceptor"  
  7.     class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor">   
  8.     <property name="paramName" value="lang" />   
  9. </bean>   
  10.      
  11. <bean id="localeResolver"  
  12.     class="org.springframework.web.servlet.i18n.CookieLocaleResolver">   
  13.     <property name="defaultLocale" value="en"/>   
  14. </bean>   
  15.      
  16. <bean id="handlerMapping"  
  17.     class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping">   
  18.     <property name="interceptors">   
  19.         <ref bean="localeChangeInterceptor" />   
  20.     </property>   
  21. </bean>  



messageSource 
 설정의 basename 프로퍼티의 값을 "classpath:messages"  설정한 것을 보시기 바랍니다
 설정으로 인해서 스프링은 기본적인 자원파일을 찾을 , messages_  시작하는 파일을 찾을 것입니다
.

JSP 
화면 변경하기

지금까지 두개의 메세지 파일일을 만들고 스프링에 설정을 완료  주었는데 이제 이를 JSP파일에서 사용할 차례이다실습하고 있는 어플리케이션의 jsp 파일들을 열고 아래의 내용을 수정한다.

File : WebContent/WEB-INF/jsp/header.jsp

view plaincopy to clipboardprint?

  1. <%@taglib uri="http://www.springframework.org/tags" prefix="spring"%>   
  2.       
  3. <h3><spring:message code="label.title"/></h3>   
  4.       
  5. <span style="float: right">   
  6.     <a href="?lang=en">en</a>   
  7.     |   
  8.     <a href="?lang=de">de</a>   
  9. </span>  



File : WebContent/WEB-INF/jsp/menu.jsp

view plaincopy to clipboardprint?

  1. <%@taglib uri="http://www.springframework.org/tags" prefix="spring"%>    
  2.     
  3. <p><spring:message code="label.menu"/></p>   



File : WebContent/WEB-INF/jsp/footer.jsp

view plaincopy to clipboardprint?

  1. <%@taglib uri="http://www.springframework.org/tags" prefix="spring"%>     
  2.     
  3. <spring:message code="label.footer"/>   



File : WebContent/WEB-INF/jsp/contact.jsp

view plaincopy to clipboardprint?

  1. <br />  
  2. <%@taglib uri="http://www.springframework.org/tags" prefix="spring"%>   
  3. <%@taglib uri="http://www.springframework.org/tags/form" prefix="form"%>   
  4. <html>   
  5. <head>   
  6.     <title>Spring 3 MVC Series - Contact Manager</title>   
  7. </head>   
  8. <body>   
  9.       
  10. <form:form method="post" action="addContact.html">   
  11.       
  12.     <table>   
  13.     <tr>   
  14.         <td><form:label path="firstname"><spring:message code="label.firstname"/></form:label></td>   
  15.         <td><form:input path="firstname" /></td>   
  16.     </tr>   
  17.     <tr>   
  18.         <td><form:label path="lastname"><spring:message code="label.lastname"/></form:label></td>   
  19.         <td><form:input path="lastname" /></td>   
  20.     </tr>   
  21.     <tr>   
  22.         <td><form:label path="lastname"><spring:message code="label.email"/></form:label></td>   
  23.         <td><form:input path="email" /></td>   
  24.     </tr>   
  25.     <tr>   
  26.         <td><form:label path="lastname"><spring:message code="label.telephone"/></form:label></td>   
  27.         <td><form:input path="telephone" /></td>   
  28.     </tr>   
  29.     <tr>   
  30.         <td colspan="2">   
  31.             <input type="submit" value="<spring:message code="label.addcontact"/>"/>   
  32.         </td>   
  33.     </tr>   
  34. </table>     
  35.       
  36. </form:form>   
  37. </body>   
  38. </html>  



위의 JSP에서 리소스 파일 에서 메세지를 읽어오기 위해 <spring:message> 태그를 사용했다는 것을 기억하시기 바랍니다.

header.jsp 
파일에서 우리가 기억해야  것은언어 선택을 위해 2개의 링크를 적어 줬다는 것입니다.
유저가  링크를 클릭 했을때, request  파라메터를 lang?=  설정해 주게 됩니다스프링에서는  파라메터를 LocaleChangeInterceptor  이용해서 가로채고적절한 지역 세팅으로 바꾸어 줍니다우리가 LocaleChangeInterceptor 클래스를 spring-servlet.xml 파일에 설정  , "param-name" 프로퍼티에 대해서 "lang"이라는 값을 설정해 주었다는 것을 기억하시기 바랍니다.

view plaincopy to clipboardprint?

  1. <property name="paramName" value="lang" />   


따라서 스프링은 "lang" 이라는 이름의 파라메터가 요청에 있는지 찾게 됩니다.

이제 준비 !

이제 국제화 & 현지화 기능 추가를 완료했습니다. Alt + Shift + X, R 단축키를 눌러 실행해 봅시다!


소스 코드 다운받기

 Spring3MVC-part5.zip


 글을 마지막으로 스프링3 MVC 따라하기 번역을 마치도록 하겠습니다.
사실  뒤에 스프링3 하이버네이트 연동하기에 대한 글이 한개  있지만현재 제가 사용하는 환경이 ibatis 이기때문에
제대로 살펴보지 못했습니다기회가 되면 후에 ibatis 연동하는 법에 대해서 글을 올리도록 하겠습니다.

감사합니다.

 

출처 - http://choija.com/212 


'Hot Tech Reference > Spring Framework' 카테고리의 다른 글

[스크랩] spring 4.x WebSocket  (1) 2014.08.24
[스크랩] spring 3.2 특징  (0) 2014.08.24
spring 메시지 컨버터  (0) 2014.01.27
@ResponseBody 이해하기  (0) 2014.01.27
spring mailSender를 이용한 메일보내기  (0) 2012.10.11