참고도서
|
1. 메시지 파일 작성
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | # 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.redDate=REGDATE message.board.list.table.head.cnt=CNT message.board.list.link.insertBoard=Insert Board | cs |
(2) 한글 메시지 파일
한국어, 중국어, 일본어 등 아시아권의 언어는 유니코드로 등록해야 한다.
이클립스에서 한글로 작성하면 자동으로 유니코드로 변한다.
작성하기 힘들다면 텍스트 파일을 만들고 복붙하면 된다.
messageSource_ko.properties
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | # 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.redDate=\uB4F1\uB85D\uC77C message.board.list.table.head.cnt=\uC870\uD68C\uC218 message.board.list.link.insertBoard=\uC0C8\uAE00 \uB4F1\uB85D | cs |
2. MessageSource 등록
1 2 3 4 5 6 7 8 9 10 11 | <!-- presentaion-layer.xml 에 ResourceBundleMessageSource 클래스 등록 --> <!-- id 속성 값은 반드시 messageSource 가 되어야 DispatcherServlet 이 인식할 수 있다 --> <bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource"> <!-- ResourceBundleMessageSource 클래스의 setBasenames() 메소드를 이용해서 --> <!-- 메시지 파일들이 저장된 배열 객체를 넘겨줄 수 있다 --> <property name="basenames"> <list> <value>message.messageSource</value> </list> </property> </bean> | cs |
<property name="basenames"> 에 등록된 배열의 값이 message.messageSource 로 되어 있다.
그런데 작성한 메시지 파일은 messageSource._en.properties, messageSource_ko.properties 이다.
먄약 message.messageSource 가 패키지 이름이고 확장자 없이 파일 이름이 properties 라면 혼란이 생길 수 있다.
message.messageSource.properties
-> message 패키지의 messageSource.properties 파일? message.messageSource 패키지의 properties 파일?
그렇기 때문에 확장자는 생략한다. 그리고 마지막 . 을 기준으로 왼쪽은 무조건 패키지, 오른쪽은 파일 이름으로 처리하면 된다.
message.messageSource -> message 패키지의 messageSource 파일
message.messageSource.properties -> message.messageSource 패키지의 properties 파일
그리고 _en, _ko 도 생략되어 있다. 만약 컴포넌트와 언어가 늘어난다면 하나하나 다 등록하기 힘들다.
그래서 스프링에서는 언어에 해당하는 정보를 메시지 파일에서 제거하는 방법을 선택하였다.
이렇게 하면 컴포넌트당 하나의 메시지 파일만 등록하면 되고,
새로운 언어가 추가되거나 삭제될 때에도 스프링 설정 파일을 수정할 필요가 없다.
어떤 메시지 파일을 선택할지는 기본 언어 설정과 Locale 의 변화에 따라 스프링이 자동으로 선택한다.
3. LocaleResolver 등록
스프링에서 지원하는 LocaleResolver
AcceptHeaderLocaleResolver |
브라우저에서 전송된 HTTP 요청 헤더의 Accept-Language에 설정된 Locale 정보 사용 |
CookieLocaleResolver |
Cookie에 저장된 Locale 정보 사용 |
SessionLocaleResolver |
HttpSession에 저장된 Locale 정보 사용 |
FixedLocaleResolver |
웹 요청과 무관하게 특정 Locale로 고정 |
LocaleResolver 를 등록하지 않으면 기본적으로 AcceptHeaderLocaleResolver 가 적용되고,
스프링에서는 SessionLocaleResolver 를 가장 많이 사용한다.
1 2 3 | <!-- presentaion-layer.xml 에 SessionLocaleResolver 클래스 등록 --> <!-- id 속성 값은 반드시 localeResolver 가 되어야 DispatcherServlet 이 인식할 수 있다 --> <bean id="localeResolver" class="org.springframework.web.servlet.i18n.SessionLocaleResolver"/> | cs |
4. Locale 변경하기
특정 언어로 화면을 보다가 해당 화면의 언어를 바꾸고 싶을 때는
스프링의 LocaleChangeInterceptor 클래스를 사용한다.
LocaleChangeInterceptor 클래스는 HnadlerInterceptor 인터페이스를 구현하였기 때문에,
스프링 설정 파일에 인터셉터로 등록해야 한다.
1 2 3 4 5 6 7 8 | <!-- presentation-layer.xml 에 LocaleChangeInterceptor 등록 --> <!-- namespace 에 mvc 등록 --> <mvc:interceptors> <bean class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor"> <!-- setParamNam() 메소드에 lang 이라는 파라미터로 특정 Locale이 전송되면 해당 Locale로 변경 --> <property name="paramName" value="lang" /> </bean> </mvc:interceptors> | cs |
5. JSP 에서 메시지 파일 사용
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | <!-- 태그 라이브러리 등록 --> <%@taglib uri="http://www.springframework.org/tags" prefix="spring"%> <!-- 사용법 --> <!-- <spring:message code="메시지 키값"/> --> <!-- 사용 예 --> <!-- message.user.login.title=LOGIN 으로 메시지 파일에 등록되어 있는 경우 --> <spring:message code="message.user.login.title"/> <!-- Locale 변경 사용 하기 --> <!-- setParamNam() 메소드에 lang 이라는 파라미터 값으로 en 이 전송 -> _en 메시지 파일 사용 --> <a href="login.do?lang=en"> <spring:message code="message.user.login.language.en" /> </a> <!-- setParamNam() 메소드에 lang 이라는 파라미터 값으로 ko 가 전송 -> _ko 메시지 파일 사용 --> <a href="login.do?lang=ko"> <spring:message code="message.user.login.language.ko" /> </a> | cs |
'Programming > Spring' 카테고리의 다른 글
Spring JdbcTemplate Method (0) | 2017.08.22 |
---|---|
데이터 변환 (0) | 2017.08.20 |
파일 업로드 / 예외처리 (0) | 2017.08.20 |
AOP 기초 (0) | 2017.08.19 |
Bean 라이프 사이클과 범위 (0) | 2017.08.19 |
댓글