백/Spring, Spring Boot

[Spring] 다국어 처리 properties파일 리소스 파일, 다양한 언어 처리 하기

연지양갱 2023. 7. 6. 17:36
728x90
반응형
SMALL

교재 : 

스프링 코딩 공작소 

https://thebook.io/080266/0414/

 

스프링 코딩 공작소: 12.1 다국어 처리의 개요

더북(TheBook): (주)도서출판 길벗에서 제공하는 IT 도서 열람 서비스입니다.

thebook.io

 

다국어 처리

로케일(locale)에 따라 다양한 언어를 지원하는 서비스

=> 코드를 수정할 필요 없이 웹 브라우저의 로케일을 기준으로 각 언어에 해당하는 메시지로 변경하는 서비스

 

 

 

로케일이란?

사용자의 언어, 국가뿐만 아니라 사용자 인터페이스에서 사용자가 선호하는 사항을 지정한 매개변수의 모임이다.

ex) 나라별로 언어, 글자, 날짜나 시간의 양식, 통화 기호, 문자열 정렬 순서 등이 다름

 

 


다국어 처리 하려면 자유롭게 설정 할 수 있도록  " MessageSource " 를 적용해야함

 

스프링 MVC가 지원하는 게 여러 가지가 있다.

 

 

프로젝트에 지원 가능한 각 언어에 대해 메시지 리소스 파일(*.properties)을 생성하여 출력할 메시지를 작성한다. 

properties 메시지 리소스 파일은 해당 매개변수값을 인코딩 디코딩 할 수 있도록 언어를 지원해주는 파일이다. 

key=value 쌍으로 구성되어 있으면서 뷰 페이지에 보여주는 값들을 해당 언어로 변경해줄 수 있도록 담겨있는 집합? 이라고 생각하면 된다.

 

예를 들어

Person.form.Enter.message = 당신의 정보를 입력하세요.

key값 = Person.form.Enter.message

value 값 = 당신의 정보를 입력하세요.

 

 

파일 이름의 양식 : 파일 이름_언어 코드_국가 코드.properties

 

▼ 표 12-1 언어별로 구분한 파일 유형

파일 형식 설명
파일 이름.properties 시스템의 언어 및 지역에 맞는 리소스 파일이 없을 때 사용합니다.
파일 이름_ko.properties 시스템 언어 코드가 한국어일 때 사용합니다.
파일 이름_en.properties 시스템 언어 코드가 영어일 때 사용합니다.
파일 이름_en_UK.properties 시스템 언어 코드가 영어고 영국(국가 코드)일 때 사용합니다.
파일 이름_ja.properties 시스템 언어 코드가 일본어일 때 사용합니다.

 

 

mvc 패턴의 프로젝트를 생성하면

1. src/main/resources 경로에 messages_ko.properties(한국어 리소스 파일)messages_end.properties(영어 리소스 파일) 작성하는 파일을 생성한다.

 

2. messages_ko.properties 파일에 

Person.form.Enter.message = 당신의 정보를 입력하세요.

삽입하면

▲ 그림 12-2  실제 messages_ko.properties 파일

이렇게 되는데 한글을 인코딩/디코딩 할수 있도록 자동으로 작성된다.

 

messages_en.properties 파일에

Person.form.Enter.message = Input your information

삽입하면

▲ 그림 12-3  실제 messages_en.properties 파일

영어는 바로 되니까 저렇게 작성됨ㅁ

 

 

3. 작성한 MessageSource를 가져가도록 하는 환경설정이 필요함

MessageSource 인터페이스의 구현체를 지원하기 때문에 servelt-context.xml파일에 MessageSource 인터페이스의 구현체를 빈 객체로 등록하면 된다.

<bean id="messageSource"
      class="org.springframework.context.support.MessageSource 구현체">
    <property name="basename" value="메시지 리소스 파일"/>
    <property name="defaultEncoding" value="인코딩"/>
    ...
</bean>

이런 방식으로 입력하면됨ㅁㅁ

 

 

▼ 표 12-2 빈 객체로 설정할 수 있는 MessageSource 구현체의 유형

유형 설명
ResourceBundleMessageSource ResourceBundle MessageFormat 클래스 기반으로 만들어졌으며, 특정 이름으로 메시지에 접근할 수 있습니다.
ReloadableResourceBundleMessageSource <property name=“cacheSeconds” value=“2”/> 프로퍼티 설정으로 다시 시작하지 않고 애플리케이션 실행 도중에 메시지 정의를 다시 로드할 수 있습니다.

 

빈 객체에 

 

    <beans:bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
        <beans:property name="basename" value="messages"/>
    </beans:bean>

를 넣어주면 환경설정이 완료된 것이다.

 

4. 다음이 환경설정을 해줬던 것을 뷰페이지에서 보여줘야 하기 때문에 뷰 페이지 상단에 라이브러리를 불러와야 한다.

jsp 파일 상단에 

<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>

prefix : 태그 이름이 spring인 라이브러리의 태그를 사용할 것임

-><spring:message> 태그 속성

 

▼ 표 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에 그대로 출력됩니다.

 

 

5. 뷰 페이지에서 해당 라이브러리와 태그를 불러주면 된다!!

webpage12_01.jsp

<%@ page contentType="text/html; charset=utf-8" %>
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>
<html>
<head>
<title>Internationalization</title>
</head>

<body>
<h2>다국어 처리</h2>
    <spring:message code="Person.form.Enter.message"/>
</body>
</html>

<spring:message code="Preson.form.Enter.messgae"/>

spring : 스프링 태그를 가져올거임

emssage : 스프링 태그의 message를 사용할 것임

-> 스프링 MVC에서 유효성 검사를 거친 오류 메시지를 간단하게 보여 줄 때 사용

-> 확인한 뒤에 값을 불러오겠다..? 

code : 추출할 메시지의 키를 지정합니다. 지정하지 않으면 text 속성에 입력한 값이 출력됩니다.

-> properties 메시지 리소스 파일에 저장했던 Person.form.Enter.message key값을 찾아서 value값을 출력할 것이다.

 

 

6. Controller 값 저장함

package com.springmvc.chap12;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;

@Controller
public class Example01Controller {

    @GetMapping("/exam01")
    public String requestMethod() {
        return "webpage12_01";
    }
}

서버키고 실행 시킨 뒤 /exam01을 입력하면 

webpage12_01을 보여줌

 

 


 

정리하면

환경설정으로 servelt-context에 MessageSource를 불러올 수 있도록 라이브러리를 등록해주고

properties 리소스 파일에 매개변수값들을 모두 저장해둔다

뷰페이지에서 리소스 파일을 넣을 수 있는 spring 태그를 넣어준다.

그리고 controller는 동일하게 작성해주면 된다.

 

 

클릭하여 언어를 변경하도록 하는 부분은 

아래 실습을 시도해보면 될것 같다.

https://thebook.io/080266/0438/

 

스프링 코딩 공작소: 12.3.2 LocaleChangeInterceptor를 이용한 로케일 변경

더북(TheBook): (주)도서출판 길벗에서 제공하는 IT 도서 열람 서비스입니다.

thebook.io

 

 

 

참고

1. 로케일이란 https://ko.wikipedia.org/wiki/%EB%A1%9C%EC%BC%80%EC%9D%BC

 

반응형