IoT 빅데이터 응용 교육 과정_하계

[IoT 빅데이터 응용 교육 과정] 23.07.06 12장 다국어 처리

연지양갱 2023. 7. 6. 11:21
728x90
반응형
SMALL

교재 : 스프링코딩 공작소

https://thebook.io/080266/041

 

스프링 코딩 공작소: 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 클래스를 사용하면 로케일을 변경하는 별도의 컨트롤러 클래스를 구현할 필요 없이 메시지를 해당 언어로 변경 가능

 

 

 

 

 

 

 

 

 

반응형