====== Internationalization(국제화) ======
===== 개요 =====
전자정부 표준 프레임워크에서는 Spring MVC 에서 제공하는 LocaleResolver를 이용한다. \\
우리는 여기서 LocaleResolver를 알아보고 적용하는 설정과 다국어가 적용된 message resource 를 가져와 활용하는 것을 보도록 하겠다.\\
Spring MVC 는 다국어를 지원하기 위하여 아래와 같은 종류의 LocaleResolver 를 제공하고 있다.
* CookieLocaleResolver : 쿠키를 이용한 locale정보 사용
* SessionLocaleResolver : 세션을 이용한 locale정보 사용
* AcceptHeaderLocaleResolver : 클라이언트의 브라우져에 설정된 locale정보 사용
**8-O Bean 설정 파일에 정의하지 않을 경우 AcceptHeaderLocaleResolver 를 default 로 적용된다.**
===== 설명 =====
==== 3가지의 LocaleResolver ====
----
=== CookieLocaleResolver ===
CookieLocaleResolver 를 설정하는 경우 사용자의 쿠키에 설정된 Locale 을 읽어들인다.\\
samlple-servlet.xml
...
...
다음과 같은 속성을 사용할 수 있다.
^ 속성 ^ 기본값 ^ 설명 ^
| cookieName | classname + locale | 쿠키명 |
| cookieMaxAge | integer.MAX_INT | -1 로 해두면 브라우저를 닫을 때 없어짐 |
| cookiepath | / | Path 를 지정하면 해당하는 Path와 그 하위 Path 에서만 참조 |
=== SessionLocaleResolver ===
requst가 가지고 있는 session으로 부터 locale 정보를 가져온다.\\
samlple-servlet.xml
...
...
=== AcceptHeaderLocaleResolver ===
사용자의 보라우저에서 보내진 request 의 헤더에 accept-language 부분에서 Locale 을 읽어들인다.
사용자의 브라우져의 Locale 을 나타낸다.\\
samlple-servlet.xml
==== XML 설정 ====
----
===Web Configuration===
Web 을 통해 들어오는 요청을 Charset UTF-8 적용한다.
CharacterEncodingFilter 을 이용하여 encoding 할 수 이도록 아래와 같이 세팅한다.
web.xml
...
encoding-filter
org.springframework.web.filter.CharacterEncodingFilter
encoding
UTF-8
encoding-filter
/*
...
=== Spring Configuration ===
사용자의 브라우져의 Locale 정보를 이용하지 않고
사용자가 선택하여 언어를 직접 선택할 수 있도록 구현하려 한다면
CookieLocaleResolver 나 SessionLocaleResolver 를 이용한다.
먼저 다국어를 지원해야 하므로 메세지를 MessageSource 로 추출하여 구현해야 한다. \\
자세한 MessageSource 내용은 를 참고하길 바란다. \\
messageSource는 아래와 같이 설정하였다.
samlple-servlet.xml \\
**context-common.xml 등에 설정된 경우 설정할 필요는 없다. ** \\
classpath:/message/message
==== XML 설정 ====
message properties 파일은 아래와 같다. \\
locale에 따라 ko, en 으로 구분하였다. \\
message_ko.properties
view.category=카테고리
message_en.properties
view.category=category
ResourceBundleMessageSource 는 beannames 명으로 messages 을 받아오는데
디폴트의 경우는 messages.properties 에서 message를 받아오고
locale 이 한국어일 경우는 messages_ko_KRproperties 에서 받아오고
영어일 경우는 messages_en_US.properties 에서 받아온다.
아래와 같이 localeResover 과 localeChangeInterceptor 를 등록하고 Annotation 기반에서 동작할 수 있도록
**DefaultAnnotationHandlerMapping** 에 interceptor 로 등록을 해준다.
samlple-servlet.xml **(Spring 3.0이하) **
samlple-servlet.xml **(Spring 3.1이상, 실행환경 대부분 버전이 해당된다.) **
=== 설정 주의사항 ===
위의 내용이 설정되어 있을 경우 상단의 RequestMappingHandlerAdapter, RequestMappingHandlerMapping 설정이 적용되지 않는다.
mvc:annotation-driven이 기본 설정으로 위 bean을 생성하므로 servlet xml에 선언되어 있을 경우 주석 처리한다.
세부 내용은 [[egovframework:rte2:ptl:spring_mvc_tag_configuration|Spring MVC Tag Configuration]] 을 참고한다. \\
mvc:annotation-driven을 사용하려면 인터셉터를 명시적으로 선언해야 한다.
RequestMappingHandlerAdapter, RequestMappingHandlerMapping Bean의 설정 내용을 삭제하고, 아래의 코드를 추가한다.
\\
==== ====
SessionLocaleResolver 를 이용하여 위와 같이 하였을 경우 Locale 결정은 ** language ** 로 Request Parameter 로 넘기게 된다.
카테고리 용어가 영어와 한글로 바뀌는 것을 아래와 같이 볼 수 있다.
리스트를 보여주는 화면에 예를 보자면 Spring 메세지 태크를 이용하여
으로 표현한다.\\
<%@ taglib prefix="spring" uri=http://www.springframework.org/tags %>
....