교재 : 스프링코딩 공작소
스프링 코딩 공작소: 12장 다국어 처리: 도서 등록 페이지에서 다국어 페이지 만들기
더북(TheBook): (주)도서출판 길벗에서 제공하는 IT 도서 열람 서비스입니다.
thebook.io
12장
다국어 처리
웹 브라우저의 로케일(locale)에 따라 다양한 언어를 지원하는 서비스
인코딩, 디코딩에서 문제가 없도록 지원하는것
=> MessageSource 이용
다국어 처리
로케일 : 프로그램이 세계적으로 사용되면서 사용자의 나라 혹은 환경에 따라 결정되는 요소들을 의미
-> 나라별로 언어, 글자, 날짜나 시간의 양식, 통화 기호, 문자열 정렬 순서 등
국제화(internationalization)
여러 다른 언어와 지역적 차이에 따라 기술적인 변경 없이 소프트웨어에 적용할 수 있도록 설계하는 과정을 의미
-> MessageSource를 이용해야함
->LocalResolver와 LocaleChangeInterceptor를 이용
MessageSource : GET, POST 미리 확인함
LocalResovler : 어떤 언어를 해야하는지 확인
LocaleChangeInterceptor : 해당 언어로 바꿔주는 것, URL을 다국어로 변경
메세지 리소스 파일 작성
메세지 리소스 파일(*.properties) 환경설정 셋업
지원가능한 언어에 대해 메시지 리소스를 생성
key=value 쌍으로 구성
파일명 양식
파일 이름_언어 코드_국가 코드.properties
▼ 표 12-1 언어별로 구분한 파일 유형
파일 형식 | 설명 |
파일 이름.properties | 시스템의 언어 및 지역에 맞는 리소스 파일이 없을 때 사용합니다. |
파일 이름_ko.properties | 시스템 언어 코드가 한국어일 때 사용합니다. |
파일 이름_en.properties | 시스템 언어 코드가 영어일 때 사용합니다. |
파일 이름_en_UK.properties | 시스템 언어 코드가 영어고 영국(국가 코드)일 때 사용합니다. |
파일 이름_ja.properties | 시스템 언어 코드가 일본어일 때 사용합니다. |
경로 : src/main/resources
MessageSource 환경 설정
웹 브라우저의 로케일에 따라 다양한 언어의 메시지를 출력할 수 있도록 MessageSource 인터페이스를 제공
애플리케이션 컨텍스트(application context) : MessageSource 인터페이스의 구현체를 지원
이 구현체를 빈객체로 설정하면 messagesSource가 되어야 인식할 수 있음
<bean id="messageSource"
class="org.springframework.context.support.MessageSource 구현체">
<property name="basename" value="메시지 리소스 파일"/>
<property name="defaultEncoding" value="인코딩"/>
...
</bean>
MessageSource 구현체의 유형
▼ 표 12-2 MessageSource 구현체의 유형
유형 | 설명 |
ResourceBundleMessageSource | ResourceBundle과 MessageFormat 클래스 기반으로 만들어졌으며, 특정 이름으로 메시지에 접근할 수 있습니다. |
ReloadableResourceBundleMessageSource | <property name=“cacheSeconds” value=“2”/> 프로퍼티 설정으로 다시 시작하지 않고 애플리케이션 실행 도중에 메시지 정의를 다시 로드할 수 있습니다. |
servlet-context.xml에 등록 -> value속성값이 messages로 설정 -> messages.properties로 실제 메시지 가져옴
<?xml version="1.0" encoding="UTF-8"?>
<beans:beans...>
...
<beans:bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
<beans:property name="basename" value="messages"/>
</beans:bean>
</beans:beans>
뷰페이지에 메시지 출력
스프링 태그 라이브러리 선언해야함(jsp 파일에 삽입해야함)
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>
메시지 리소스 파일에서 메시지를 가져와 뷰 페이지에 출력함
▼ 표 12-3 <spring:message> 태그의 속성
속성 | 설명 |
arguments | 부가적인 인자를 넘겨줍니다. 콤마로 구분된 문자열, 객체 배열, 객체 하나를 넘깁니다. |
argumentSeparator | 넘겨줄 인자의 구분자를 설정합니다. 기본값은 콤마입니다. |
code | 추출할 메시지의 키를 지정합니다. 지정하지 않으면 text 속성에 입력한 값이 출력됩니다. |
htmlEscape | HTML의 기본 escape 속성을 오버라이딩합니다. 기본값은 false입니다. |
javaScriptEscape | 기본값은 false입니다. |
message | 스프링 MVC에서 유효성 검사를 거친 오류 메시지를 간단하게 보여 줄 때 사용합니다. |
scope | 결과 값을 변수에 지정할 때 변수 범위(page, request, session, application)를 정합니다. |
text | 해당 code 속성에서 가져온 값이 없을 때 기본으로 보여 주는 문자열입니다. 빈 값이면 null을 출력합니다. |
var | 결과 값을 저장할 때 사용합니다. 빈 값이면 JSP에 그대로 출력됩니다. |
스콥프(scope) 중요!!!!
페이지 단에서 변수를 사용할 수 있도록 할지, 아니면 모든 애플리케이션에서 활성화 될수 있는 것인지 정하는 요소
<spring:message> : 메시지 리소스 파일에서 메시지를 가져와 뷰 페이지에 출력
실습 내용은 나중에 정리!!! 꼭 정리 필요할거 같움ㅁ
servlet-context.xml에 MessageSource 구현체의 빈 객체를 등록
servlet-context.xml
<interceptors>
<beans:bean class="com.springmvc.interceptor.MonitoringInterceptor"/>
<beans:bean class="com.springmvc.interceptor.AuditingInterceptor"/>
</interceptors>
<beans:bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
<beans:property name="basename" value="messages"/>
<beans:property name="defaultEncoding" value="UTF-8"/>
</beans:bean>
jsp 파일내에
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>
상단에 추가
<spring:message code="addBook.form.title.label"/>
입력부분 태그를 수정
LocaleResolver
웹 브라우저의 로케일을 추출해서 알맞는 언어를 선택함
<bean id="localeResolver" class="org.springframework.web.servlet.i18n.LocaleResolver 구현체">
<property name="defaultLocal" value="로케일 언어"/>
...
</bean>
▼ 표 12-4 LocaleResolver 구현체의 유형
유형 | 설명 |
AcceptHeaderLocaleResolver | 웹 브라우저에 설정된 기본 로케일 정보를 사용합니다. HTTP 요청의 accept-language 헤더에 지정된 기본 로케일을 사용합니다. |
CookieLocaleResolver | 쿠키를 이용한 로케일 정보를 사용합니다. 사용자 지정 로케일, 표준 시간대 정보를 브라우저 쿠키로 유지합니다. |
SessionLocaleResolver | 세션을 이용한 로케일 정보를 사용합니다. 사용자 세션에서 locale 속성을 사용하여 지정된 기본 로케일 또는 요청의 accept-header 로케일로 대체합니다. |
FixedLocaleResolver | 특정 로케일을 지정합니다. 항상 고정된 기본 로케일을 반환하고 선택적으로 시간대를 반환합니다. |
CookieLocaleResolver와 SessionLocaleResolver로 로케일에 따라 원하는 언어를 선택하여 서비스할 수 있음
FixedLocaleResolver는 웹 브라우저의 로케일과는 상관없이 지정된 언어만 서비스함
LocaleChangeInterceptor 클래스를 사용하면 로케일을 변경하는 별도의 컨트롤러 클래스를 구현할 필요 없이 메시지를 해당 언어로 변경 가능
'IoT 빅데이터 응용 교육 과정_하계' 카테고리의 다른 글
[IoT 빅데이터 응용 교육 과정]23.07.10 13장 사용자 정의 애너테이션 (0) | 2023.07.10 |
---|---|
[IoT 빅데이터 응용 교육과정] 23.07.06 13장 유효성 검사 (0) | 2023.07.06 |
[IoT 빅데이터 응용 교육 과정] 23.07.05 11장 로그 기록 (0) | 2023.07.05 |
[IoT 빅데이터 응용 교육 과정]23307.04_2 10장 예외처리 (0) | 2023.07.04 |
[IoT 빅데이터 응용 교육과정]23.07.04 파일 업로드 (0) | 2023.07.04 |