다국어 처리 개요
다국어 처리란 웹 브라우저의 locale에 따라 다양한 언어를 지원하는 것입니다.
로케일이란 사용자의 나라 혹은 환경에 따라 결정되는 요소들을 의미합니다.
예를 들면 언어, 글자, 날짜, 통화 기호 등이 있습니다.
스프링 MVC에서 사용자의 로케일에 따라 표시되는 언어를 변경하는 서비스인
국제화를 지원합니다.
국제화란 기술의 변경 없이 지역적 차이에 따라 소프트웨어에 적용 가능하게 하는 과정을 의미합니다.
다시 말해서 코드 수정 없이 로케일에 따라 언어를 변경할 수 있습니다.
다국어 처리를 하기 위해서는 MessageSource를 적용해야 합니다.
MessageSource를 사용해서 화면에 출력할 메시지를 다국어로 쉽게 표현 가능합니다.
MesageSource를 기반으로 하는 LocaleResolver와 LocaleChaneInterceptor를 이용하면은
사용자가 웹에서 원하는 언어를 자유롭게 선택하거나 변경이 가능합니다.
MessageSource를 이용한 다국어 처리
각 언어에 대해 메시지 리소스 파일(*.properties)을 생성하여
출력할 메시지를 작성합니다.
메시지 리소스 파일은 key=value 쌍으로 구성됩니다.
key는 뷰 페이지에서 메시지를 참조할 때 사용됩니다.
기본 언어의 메시지 리소스 파일을 '파일 이름.properties' 형태로 작성합니다.
예를 들어 기본 언어가 한국어고, 메시지 리소스 파일을 messages.properties라고 작성합니다.
key는 'Person.form.Enter.message'고 value는 '당신의 정보를 입력하세요.' 라면
다음과 같이 작성해줍니다.
Person.form.Enter.message = 당신의 정보를 입력하세요.
key 값을 이용해서 뷰 페이지에 value에 설정된 메시지를 출력합니다.
특정 언어별로 메시지 리소스 파일을 작성해야 하는데 이때 형식은 다음과 같습니다.
파일 형식 | 설명 |
파일 이름.properties | 시스템의 언어 및 지역에 맞는 리소스 파일이 없을 때 사용 |
파일 이름_ko.properties | 시스템 언어 코드가 한국어일 때 사용 |
파일 이름_en.properties | 시스템 언어 코드가 영어일 때 사용 |
파일 이름_en_UK.properties | 시스템 언어 코드가 영어고 영국일 때 사용 |
파일 이름_ja.properties | 시스템 언어 코드가 일본어일 때 사용 |
메시지 리소스 파일은 src/main/resources 폴더에 위치해야합니다.
MessageSource 환경 설정
스프링 MVC는 로케일에 따른 다국어 처리를 위해 MessageSource 인터페이스를 제공합니다.
MessageSource 인터페이스는 메시지 리소스 파일의 메시지를 가져와 화면에 출력합니다.
스프링에서 빈 객체의 생성과 관계 설정, 사용 등 기능을 담당하는 애플리케이션 컨텍스트는
MessageSource 인터페이스 구현체를 지원합니다.
스프링 MVC 설정 파일인 servlet-context.xml에 MessageSource 인터페이스의 구현체를
빈 객체로 등록하여 애플리케이션 컨텍스트에서 원하는 메시지를 가져올 수 있습니다.
빈 객체로 설정하는 형식은 다음과 같습니다.
<bean id="messageSource"
class="org.springframework.context.support.MessageSource 구현체">
<property name="basename" value="메시지 리소스 파일"/>
<property name="defaultEncoding" value="인코딩"/>
...
</bean>
id 속성 값은 반드시 messageSource가 되어야 합니다.
다음은 빈 객체로 설정 가능한 MessageSource 구현체의 유형입니다.
유형 | 설명 |
ResourceBundleMessageSource | ResourceBundle과 MessageFormat 클래스 기반으로 만들어졌으며, 특정 이름으로 메시지 접근 가능 |
ReloadableResourceBundleMessageSource | <property name="cacheSeconds" value="2"/> 프로퍼티 설정으로 다시 시작하지 않고 애플리케이션 실행 도중 메시지 정의를 다시 로드 가능 |
다음은 servlet-context.xml 파일에 등록하는 예시입니다.
<?xml version="1.0" encoding="UTF-8"?>
<beans:beans...>
...
<beans:bean id="messageSource"
class="org.springframework.context.supprot.ResourceBundleMessageSource">
<bean:property name="basename" value="messages"/>
</beans:bean>
</beans:beans>
뷰 페이지에 메시지 출력
메시지 리소스 파일에서 메시지를 가져와 뷰 페이지에 출력하려면 메시지 태그를 사용합니다.
다음과 같이 태그 라이브러리를 선언해줍니다.
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>
그리고 <spring:message> 태그를 사용해서 메시지 리소스 파일의 메시지를 뷰 페이지에 출력합니다.
<spring:message> 태그 속성은 다음과 가틋ㅂ니다.
속성 | 설명 |
arguments | 부가적인 인자를 넘김 콤마로 구분된 문자열, 객체 배열, 객체 하나를 넘김 |
argumentSeparator | 넘겨줄 인자의 구분자 설정 기본값은 콤마 |
code | 추출할 메시지의 키 지정 지정하지 않으면 text 속성에 입력한 값 출력 |
htmlEscape | HTML의 기본 escape 속성 오버라이딩 기본값은 false |
javaScriptEscape | 기본값은 false |
message | 스프링 MVC에서 유효성 검사를 거친 오류 메시지 간단하게 출력 |
scope | 결과 값을 변수에 지정할 때 변수 범위 지정 |
text | 해당 code 속성에서 가져온 값이 없을 때 기본으로 보여 주는 문자열 빈 값이면 null 출력 |
var | 결과 값을 저장할 때 사용 빈 값이면 JSP에 그대로 출력 |
다음은 메시지 리소스 파일에서 메시지를 가져와 뷰 페이지에 출력하는 예시입니다.
messages_ko.properties 파일을 추가해줍니다.
Person.form.Enter.message = \uB2F9\uC2E0\uC758 \uC815\uBCF4\uB97C \uC785\uB825\uD558\uC138\uC694.
한글로 작성하여도 실제 저장되는 파일 내용은 다음과 같습니다.
message_en.properties 파일을 추가해줍니다.
Person.form.Enter.message = Input your information
위 두 파일은 src/main/resources 폴더 아래에 저장합니다.
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>
Example01Controller.java 파일입니다.
package com.springmvc.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class Example01Controller {
@RequestMapping("/exam01")
public String requestMethod() {
return "webpage12_01";
}
}
톰캣 서버 실행 후 /exam01 을 입력하면 다음과 같이 나옵니다.
윈도 설정에서 언어를 영어로 선택하고 다시 실행을 해봅니다.
'SPRING' 카테고리의 다른 글
[SPRING]#46 도서 쇼핑몰 구현 (다국어 처리3) (0) | 2024.01.20 |
---|---|
[SPRING]#45 도서 쇼핑몰 구현 (다국어 처리2) (0) | 2024.01.20 |
[SPRING]#43 도서 쇼핑몰 구현 (로그 기록6) (0) | 2024.01.18 |
[SPRING]#42 도서 쇼핑몰 구현 (로그 기록5) (0) | 2024.01.18 |
[SPRING]#41 도서 쇼핑몰 구현 (로그 기록4) (0) | 2024.01.17 |