본문 바로가기
Backend/JSP

[JSP] 다국어 처리

by 그적 2020. 11. 20.

다국어 처리란?

: 웹 브라우저를 사용하는 국가에 따라 다양한 언어 및 지역을 지원하는 서비스

- 다른 언어와 지역적 차이를 기술 변경 없이 소프트웨어에 바로 적용할 수 있다.

- 국제화(internationalization, il18n), 지역화(localization, L10n)를 포함한다.

 

국제화 : 여러 국가에서 사용할 수 있도록 다국어를 지원하는 것

(고려사항)

- 유니코드 : 올바른 인코딩

- 언어의 특성 반영 : 가로 쓰기, 좌측에서 가로 쓰기, 세로 쓰기 등

- 사용자 패턴 설정 : 숫자 표시, 날씨와 시간 등

- 코드 분리 : 지역화의 정보를 코드와 분리한다.

 

지역화 : 사용 국가별 환경에서 특정 언어와 지역에 맞게 적합화 하는 것

(고려사항)

- 숫자, 날짜, 시간 형식

- 화폐

- 키보드

- 문화에 따라 오해 소지가 있거나 의미 없는 문자와 그림

 

 

① Locale 클래스

: 사용자의 지역 환경에 따라 결정되는 지역적 문화의 정보를 담고 있다.

  java.util.Locale 클래스를 import 해주어야 한다.

 

(객체 생성)   // 두 가지

import java.util.*;

// 1. 기존에 정의된 언어나 국가 정보를 가져오는 방법
Locale locale = request.getLocale();

// 2. Locale 클래스를 새로 설정하는 방법
Locale locale = new Locale("ko", "KR");

 

(기본 메소드)

메소드 반환 유형 설명
getDefault() static Locale 디폴트 로케일의 현재 값을 가져옴
getCountry() String 현재 로케일의 국가/지역 코드를 가져옴
getDisplayCountry() String 현재 로케일의 국가 이름을 가져옴
getLanguage() String 현재 로케일의 언어 코드를 가져옴
getDisplayLanguage() String 현재 로케일의 언어 일므을 얻어옴

(그 외 메소드)

클래스 메소드 설명
기본 내장 객체 setHeader("Content-Language", 언어값) 헤더 값에 (언어값)을 설정
DateFormat 클래스 getDateTimeInstance() 특정 날짜와 시간 형식 출력
NumberFormat 클래스 getCurrencyInstance()  특정 통화와 숫자 형식 츨략
(※ java.text.NumberFormat을 import해야함)

 

 

② JSTL fmt 태그

: 특정 지역에 따라 다른 메세지를 출력

  JSTL 라이브러리인 jstl.jar 파일이 필요, 혹은 아래 코드 작성

<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>

** 리소스 번들?

: 메세지 처리 태그에서 사용하는 파일로 '메세지 번들'이라고도 한다.

 - java.util.Properties 클래스에 정의된 방법으로 메세지를 읽어온다. (properties파일)

 - properties 파일 생성 방법 : eclipse에서 ctrl+N -> text 체크 -> General -> ntitled Text File -> filename.properties로 저장

 

 

(기본 메소드)

구분 태그 유형 설명
Locale 설정 setLocale 로케일 설정
  requestEncoding 요청 파라미터의 문자 인코딩 설정
메세지 처리 bundle 사용할 리소스번들 설정
  message 리소스번들에서 로케일에 맞는 메세지 출력
  setBundle 리소스번들을 특정 변수에 저장

(그 외 메소드)

구분 태그 유형 설명
날짜 formatDate() 날짜 형식 표현
  parseDate() 원하는 패턴의 날자 형식으로 변환
숫자 formatNumber 숫자 형식 표현
  parseNumber() 원하는 패턴의 숫자 형식으로 변환
시간 timeZone() 시간대 설정
  setTimeZone() 특정 범위의 시간대 설정

 

(사용 예시)

// setLocale 태그, requestEncoding 태그

<fmt:setLocale value="ko"/>
<fmt:requestEncoding value="utf-8"/>

// bundle 태그, message 태그

<fmt:bundle basename=basename="ch09.com.bundle.MyBundle" [prefix="key 이름"] >
                                                        // src/ch09.com.bundle에 저장된 MyBundle 번들
    <fmt:message key="hello"                            // 번들에 저장된 key 이름
         [bundle="setBundle 태그 변수 이름"]
         [var="메세지를 저장하는 변수 이름"]
         [scope="{page | request | session | application}"]
     />
</fmt:bundle>

// setBundle 태그

// src/ch09.com.bundle의 번들 경로를 MyBundle 변수에 저장
<fmt:setBundle basename="ch09.com.bundle.MyBundle" var="resourceBundle"/>

// resourceBundle 번들 경로에 저장된 hello 출력
<fmt:message key="hello" bundle="{$resourceBundle}" />

// resourceBundle 번들 경로에 저장된 username을 msg 변수에 저장
<fmt:message key="username" bundle="{$resourceBundle}" var="msg" />
${msg}          // 출력

 

댓글