5. 메시지와 국제화
포스트
취소

5. 메시지와 국제화

    index

  1. 서론
  2. 기획 및 명세
  3. 패키지 트리
  4. 프로젝트 환경
  5. 메시지와 국제화
  6. 예외 다루기
  7. 검증
  8. 계정 관련
  9. 권한 인터셉터
  10. 도서 관련
  11. 대여 관련
  12. 오프라인 관련
  13. about ajax
  14. 지식 공유 - ajax
  15. DTO, Form, VO, Entity
  16. 후기




국제화는 이번 프로젝트에서 꽤 귀여운 기능 아닐까?

메시지와 국제화에 대하여 알아보자.

틀린 내용이 있을 수 있지만, 내 머릿속에선 거의 맞다고 생각되는 내용들이다.



메시지, 국제화를 위한 준비

properties


Desktop View

내가 원하는 code 에 대한 keyword 를 key = value 형식으로 나열한다.
“en”, “ko” 와 같은 국가 코드를 적지 않는다면,
Default message 로 인식 된다.

예를 들어, Locale 이 “en” 으로 되어 있다면 “en” 의 keyword 를 사용하지만
“en” 이 아니라면, 아무 국가 코드도 없는 messages.properties 가 적용 된다.

즉, 원하는 국가의 keyword 를 손수 작성해줘야 된다.
적어도 스프링 레거시 프로젝트에서는 이렇게 사용했다.



messageSource


Desktop View

메시지와 국제화 properties 파일 작성이 완료되었다면,
이를 인식시켜주기 위해 MessageSource 객체로 읽어줘야 된다.
사진처럼 간단히 Basename 을 파일 이름까지 적어주면 된다.

Desktop View

ReloadableResourceBundleMessageSource 에 대한 설명이다.
딱히 모르겠다.
“WEB-INF” 같이, classpath 이외의 경로에 있는 파일도 읽어주는 것 같다.
스프링을 사용한다면, 그냥 권장하는 걸 쓰면 된다고 생각한다.



message tag


Desktop View

레거시 프로젝트에서 국제화를 적용하려면,
message 태그라는 것을 사용해야 한다.

이게 무슨 말이냐면~

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

jsp 파일 상단에 이렇게 태그 라이브러리를 추가하고,

Desktop View

아까 정리했던 properties 파일의 코드들을
위와 같이 적재적소에 기입해주는 것이다.

아마 눈치 빠르신 분들은 알겠지만
화면 상에 보이는 모든 텍스트들은 이미지 파일에 합쳐진 게 아니여야 된다.

하나라도 다른 언어가 있다면, 안하니만 못하는 화면을 보게 된다.



LocaleChangeInterceptor

Desktop View

이 인터셉터는 빈을 등록할 때 설정한 paramName 으로,
요청 시 “lang” 파라미터를 확인하고 LocaleResolver 를 통해
클라이언트 Locale 을 지정한다.


CookieLocaleResolver

Desktop View

내부에 선언된 메소드 중 몇 가지이다.
쿠키를 통한 클라이언트 Locale 지정을 담당한다.


버튼 하나로 국제화 하기

Desktop View

Desktop View

ENG 버튼을 누르는 상황을 연출했다.

간단 요약

  1. ENG 버튼을 클릭
  2. ajax 를 사용하여 root 경로로 쿼리파라미터 “lang=en” 을 함께 요청
  3. 인터셉터가 인지 후 “en” 쿠키 반환
  4. 페이지를 reload 하면 새 요청시 CookielocaleResolver 를 통해 en 으로 인식
  5. message 태그의 value 를 “en” 에 해당하는 값으로 렌더링



자바스크립트

Desktop View

KOR 또는 ENG 버튼을 눌렀을 때
ajax 로 root 경로에 쿼리 파라미터를 함께 요청한다.
바로 현재 location 으로 reload 하여
국제화가 적용된 화면을 렌더링 시킨다.



Response Header


Desktop View

ENG 를 눌렀을 때의 Response Header
new Cookie("lang","en") 가 응답된다.
위 ajax 요청에 대한 응답이다.



이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.