====== 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 | 쿠키명 | | cookieAge | nteger.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 내용은 [[egovframework:rte:fdl:resource|Resource]] 를 참고하길 바란다. \\ messageSource는 아래와 같이 설정하였다. samlple-servlet.xml classpath:/message/message 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 SessionLocaleResolver 를 이용하여 위와 같이 하였을 경우 Locale 결정은 ** language ** 로 Request Parameter 로 넘기게 된다. 카테고리 용어가 영어와 한글로 바뀌는 것을 아래와 같이 볼 수 있다. 리스트를 보여주는 화면에 예를 보자면 Spring 메세지 태크를 이용하여 으로 표현한다.\\ <%@ taglib prefix="spring" uri=http://www.springframework.org/tags %> .... .... 화면상으로 해당 페이지를 실행해보면 아래와 같다. \\ 한글인 경우 : http://localhost:8080/sample-web/sale/listCategory.do?language=ko {{:egovframework:rte:ptl:한글uri.jpg|}} 영어인 경우 : http://localhost:8080/sample-web/sale/listCategory.do?language=en {{:egovframework:rte:ptl:영어uri.jpg|}} === Java 소스내에서 locale 적용 메세지 가져오기 === 참고로 MessageSource 는 아래와 같은 메소드로 이루어져 있다.(실제로 여기서의 구현체는 ResourceBundleMessageSource 임.) {{:egovframework:rte:ptl:messagesource.jpg|}} String msg = messageSource.getMessage(messageKey, messageParameters, defaultMessage, locale); ===== N. 참고자료 =====
No. ID 사용여부 Description 등록자