유용

[유용] spring 다국어 처리 properties 분석하기

blackzapato 2021. 7. 23. 17:16
반응형

 

다국어 처리가 되어 있는 프로젝트에 처음 투입 됐을 때 조금 당황했다.

 

<th><fmt:message key='pms.common.title'/></th>

 

이런 식으로 직접적으로 view에 표출되는 문자가 전부 위와 같이 적용되어

어디 항목인지 정확히 파악하기 어려웠다.

 

또, pms.common.title을 이클립스에서 검색해서 보니 아래와 같은

이상한 문자로 가득한 properties가 있었다.

 

그래서 한글로 변경 하기 위해 조금 설정을 해줬다.

2021.07.24 - [유용] - [유용] 유니코드로 보이는 properties 한글로 변환 적용

 

 

출처 :   jsonobject.tistory.com/246

 

다시 돌아와서 나의 경우는 다국어 처리로 영어와 한글을 지원하는 웹이여서 

*_ko.properties, *_en.properties로 페이지마다 구성이 되어있었다.

 

찾아보니 유니코드라고 하긴 하는데

뭐지? 하며 바쁘니까 

대략 title이라고 적혀 있으니 제목 비슷한거 겠지? 와

JSP가 짜여져 있는 구조로만 문자를 유추해서 웹 개발을 하고 있는데

 

선배가 그렇게 하는 거 아니에요 하며

친절히 유니코드를 한글로 변환하는 방법을 알려주셨다. ㅎㅎ;;

 

덕분에 어렵지 않게 유니코드를 한글로 번역이 잘 되어 웹 개발하는데 큰 도움이 됐다.

이에 따라 자연스럽게 궁금점이 생겼는데 이번에 추가한 라이브러리가 유니코드를 한글로 번역해준 건 okay

but, 

어떻게 spring이 properties를 가져와 view에 적용시켜 준거지? 하는 궁금점도 생겨났다.

 

우선 view에선

<fmt:message key='pms.common.title'/>

 

fmt태그로 properties에 등록되어있는 문자를 key 형태로 가져오는구나?

 

근데 fmt는 뭐지?

<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>

fmt는 jstl에 포함되어 있는 거군

 

그럼 properties를 bean으로 가져오겠지라는 생각이 들었다.

그래서 찾아보니

<bean id="messageSourceAccessor" class="org.springframework.context.support.MessageSourceAccessor">
  <constructor-arg>
  	<ref local="messageSource"/>
  </constructor-arg>
</bean>

<bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
  <property name="basenames">
    <list>
      <value>message.pms.pms_common</value> <!-- properties 위치 -->
      <!-- ... 그 외의 다국어 properties 파일 -->
    </list>
  </property>
</bean>

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

messageSource

메시지들을 입력해놓을 파일에 대한 설정 (인코딩 방식, 파일 경로 등등)

 

messageSourceAccessor

다양한 getMessage 메서드를 제공하여 MessageSource의 메시지에 쉽게 액세스 할 수 있는 헬퍼 클래스

 

localeResolver

언어 설정

 

그런데 인터넷에 나와 있는 예제로는 

MessageSourceAccessor를 class 단에서 한번 더 언어설정 때문에 가공을 해주는데 비해

 

우리 프로젝트에서는 그렇지는 않고,

처음 웹페이지 진입 시 interceptor에서 세션에 있는 언어 값을 가져와서 초기화해주고

그 후 언어 변경 버튼을 누르면 Locale 클래스로 언어 값을 변경해 

localeResolver.setLocale(...)로 다시 세팅해주는 식으로 진행해주는 것으로 확인됐다

그러면 "pms_common_[lang]"과 같은 형태로 만들어둔

pms_common_[en].properties ->  pms_common_[ko].properties로 자동변환되어 

view에 언어가 변경된다.

 

해당 코드를 첨부하고 싶지만 프로젝트 코어중 하나인 내부 코드이므로 첨부는 못 할것 같습니다.

그래도 최대한 비슷한 코드를 만들어 놓으신 곳으로 링크를 걸어드리겠습니다.

 


도움이 된 블로그

 

https://whybk.tistory.com/33

 

[SPRING3.0] 메세지 처리

스프링에서 메세지 처리에 대해 정리합니다. 작업할 순서는 다음과 같습니다. ① application-context.xml 수정 ② properties 파일 생성 ③ Message 클래스 생성 1. 스프링에서는 메세지처리를 위한 인터페

whybk.tistory.com

https://joalog.tistory.com/61

 

alert문구를 하나의 파일로 만들어서 관리하자. springframework.org/tags

프로젝트 하나를 완성하고나서, gitHub에서 프로젝트 하나를 다운받아 보던 중, 보지 못했던 기술이 있어서 찾아보았습니다. 폼을 서브밋 할 때 사용하는 자바스크립트 함수입니다. chkInputValue라

joalog.tistory.com

https://yookeun.github.io/java/2015/08/12/spring-i18n/

 

Spring에서 다국어 적용하기

스프링에서 다국어처리는 의외로 간단하다, 특히 사용자가 언어를 자유롭게 설정하는 부분도 쉽게 가능하다. 아래와 같이 화면처리를 하고자 한다. 브라우저의 설정된 언어값을 읽어오거나, 아

yookeun.github.io

 

반응형