티스토리 뷰

학교공부/JSP

JSP - 7

날따라해봐요요롷게 2021. 3. 24. 15:14

<출처 : 쉽게 배우는 JSP 웹 프로그래밍>

 

다국어 처리

 

  • 다국어 처리의 개요
  • Locale 클래스를 이용한 다국어 처리
  • JSTL fmt 태그를 이용한 다국어 처리

 

  • 다국어 처리의 개요

JSP 페이지의 fmt 태그를 이용하여 언어지원을 통해 지역별 언어를 제공하도록 한다.

 

# 지역화

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

(숫자, 날짜, 시간형식, 화폐단위, 키보드지원, 문자열의 순서 정렬, 문화에 따른 문자 그림, 지역별 법률 차이)

 

# 국제화

 : 여러 국가에서 사용할 수 있도록 다국어 지원 -> i18n

 

#Locale 클래스를 이용한 다국어 처리

: 사용자의 지역 환경에 따라 결정되는 지역적문화 (언어, 날짜, 시간) 의 정보를 담고 있다.

웹 페이지에 보이는 언어를 어떤 언어로 보이게 할것인지 선택하도록 하는게 Locale 클래스이다.

Locale 객체의 생성은 request 내장객체를 이용하여 국가 정보를 가져온다. 

Locale 클래스를 사용하기 위해서는 JSP 페이지의 page 디렉티브 태그의 import 속성으로 패키지

import.util.Locale  --  ( java.util.Locale request.getLocale() )

- 인스턴스화 방법 : Locale locale = new Locale("ko", "KR");

- 미리 정의된 필드 값을 사용하는 방법 : Locale locale = Locale.KOREA;

 

#로케일 감지하기

 : 사용자가 속해 있는 국가와 언어 이름을 통해 해당 국가의 언어를 보여주는데 설정 국가와 이름을 알아내는 것을 로케일 감지 라고 한다.

 

로케일 감지 메서드

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

 

<%
	Locale locale = request.getLocale(); //지역을 우선 얻어오기!
    String displayLanguage = locale.getDisplayLanguage();
    String language = locale.getLanguage();
    String displayCountry = locale.getDisplayCountry();
    String country = locale.getCountry();
%>

 

# 로케일 표현하기

 : 다양한 국가의 언어를 제대로 표현하기 위해 response 내장 객체의 setHeader() 메서드를 사용한다.

해당 메서드의 Content-Language 헤더 값을 언어 코드로 설정, HTML 엔티티 코드나 이름을 사용하면 모든 특수문자를 출력 가능

 

-언어 설정.

<%@ page contentType="text/html; charset=utf-8"%>
<%@ page import="java.util.Locale" %>
<%
	response.setContentType("text/html");
	response.setHeader("Content-Language", "es");
	String title = "Espa&ntilde;ol";
%>
<html>
<head>
<title><% out.print(title); %></title>
</head>
<body>
	<p> Idioma : Espa&ntilde;ol</p>
	<p> &iexcl;Hola Mundo!</p>
</body>
</html>

response 내장객체 setHeader() 메서드를 이용하여 Content-Language 헤더 값에 스페인어 코드 es 를 설정

 

-날짜와 시간 설정

<%@ page contentType="text/html; charset=utf-8"%>
<%@ page import="java.util.Locale, java.util.Date" %>
<%@ page import = "java.text.DateFormat" %>
<%
	response.setContentType("text/html");
	response.setHeader("Content-Language", "es");
	String title = "Espa&ntilde;ol";
%>
<html>
<head>
<title></title>
</head>
<body>
	<%
		Locale locale = request.getLocale();
		String date = DateFormat.getDateTimeInstance(DateFormat.FULL,
        DateFormat.SHORT, locale).format(new Date());
	%>
	<p> 로케일의 날짜 형식
	<p> <%out.print(date); %>
</body>
</html>

로케일에 따른 날짜와 시간 형식을 표현하기 위해 - DateFormat 클래스의 getDateTimeInstance 메서드 사용

DateFormat 클래스를 사용하기 위해서 java.text.DateFormat 을 import 해야한다.

 

- 통화와 숫자 설정

<%@ page contentType="text/html; charset=utf-8"%>
<%@ page import="java.util.Locale, java.util.Date" %>
<%@ page import = "java.text.NumberFormat" %>
<html>
<head>
<title></title>
</head>
<body>
	<%
		Locale locale = request.getLocale();
		NumberFormat curency = NumberFormat.getCurrencyInstance(locale);
		NumberFormat percentage = NumberFormat.getPercentInstance(locale);
		String fcurency = curency.format(1234566);
		String fpercentage = percentage.format(0.25);
	%>
	<p> 로케일의 통화 형식 : <% out.print(fcurency);  %>
	<p> 로케일의 비율 형식 : <% out.print(fpercentage); %>
</body>
</html>

로케일에 따라 특정 통화나 숫자를 표현하기 위해서 NumberFormat 클래스의 getCurrencyInstance() 메서드를 사용한다. 특정 비율을 표현하는데 getPercentInstance() 메서드를 사용한다.

NumberFormat 클래스 사용을 위해서 java.text.NumberFormat 을 import 해야한다.

 

<%@ page contentType="text/html; charset=utf-8"%>
<%@ page import="java.text.NumberFormat"%>
<%@ page import="java.text.DateFormat"%>
<%@ page import="java.util.*"%>
<html>
<head>
<title>Internationalization</title>
</head>
<body>
	<h3>현재 로케일의 국가, 날짜, 통화</h3>
	<%
		Locale locale = request.getLocale();
		Date currentDate = new Date();
		DateFormat dateFormat = DateFormat.getDateInstance(DateFormat.FULL, locale);
		NumberFormat numberFormat = NumberFormat.getNumberInstance(locale);
	%>
	<p> 국가 : <%=locale.getDisplayCountry() %>
	<p> 날짜 : <%=dateFormat.format(currentDate) %>
	<p> 숫자 (12345.23) : <%=numberFormat.format(12345.23)%>
</body>
</html>

 

 

 

#JSTL fmt 태그를 이용한 다국어 처리

: JSTL fmt 태그는 다국어 문서 처리를 위한 국제화 및 지역화 태그이다. 

JSTL 라이브러리는 날짜와 숫자 등을 형식화 하는 기능을 제공한다. JSTL fmt 태그는 특정 지역에 따라 다른 메시지를 출력할 때 사용한다.

JSTL 라이브러리를 사용하기 위해서 jstl.jar 파일이 필요하다.

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

 

JSTL fmt 태그의 종류

구분 태그 유형 설명
Locale 설정 setLocale 로케일을 설정
requestEncoding 요청 파라미터의 문자 인코딩을 설정
메시지 처리 bundle 사용할 리소스번들을 사용
message 리소스 번들에서 로케일에 맞는 메시지 가져와서 출력
setBundle 리소스번들을 읽어와 특정 변수에 저장
날짜 formatDate 날짜 형식을 표현
parseDate 문자열에서 원하는 패턴의 날짜 형식으로 변환
숫자 parseNumber 문자열에서 원하는 패턴의 숫자 형식으로 변환
formatNumber 숫자 형식을 표현
시간 setTimeZone 특정 범위의 시간대를 설정
timeZone 시간대를 설정

## 로케일 설정 태그의 기능과 사용법

- setLocale 태그

 : 해당 태그는 국제화 태그가 사용할 로케일을 설정하는 태그이다. 다국어를 지원하는 웹 페이지를 만들 때 리소스번들인 *.properties 파일과 연계하여 사용

 

<fmt:setLocale

  value="언어코드[_국가_코드]"

  [scope="{page/request/session/application}"]/>

value 속성 값 언어코드는 두 글자로 된 소문자 / 국가 코드는 두 글자로 된 대문자

언어 코드와 국가 코드를 모두 설정하려면 붙임표(-) , 밑줄(_)로 구분

<%@ page contentType="text/html; charset=utf-8"%>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<html>
<head>
<title>Internationalization</title>
</head>
<body>
	<%=response.getLocale() %>
	
	<fmt:setLocale value="ko"/>
	<p><%=response.getLocale() %>
	
	<fmt:setLocale value="en"/>
	<p><%=response.getLocale() %>
</body>
</html>

value로 소문자로 된 언어코드를 받는다. response.getLocale() 메서드를 이용해 로케일 출력.

 

 

-requestEncoding 태그

 : 요청 마라미터의 문자 인코딩을 설정하는 태그 -> request 내장 객체의 setCharacterEncoding() 메서드와 동일한 역할

<fmt:requestEncoding value="문자인코딩" />

 

<%@ page contentType="text/html; charset=utf-8"%>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<html>
<head>
<title>Internationalization</title>
</head>
<body>
	<fmt:requestEncoding value="euc-kr"/>
	요청 파라미터 : 
	<%
		out.print(request.getParameter("id"));
	%>
	<form method="post" action="#" >
		<p> 아이디 <input type="text" name="id">
			<input type="submit" value="전송">
	</form>
</body>
</html>

 

## 메시지 처리 태그의 기능과 사용법

- 리소스번들

 : 리소스번들은 메시지 처리 태그에서 사용하는 메시지번들이라고 한다.

리소스번들은 java.util.Properties 클래스에 정의된 방법으로 메시지를 읽어오기 때문에 확장자가 properties인 파일이 반드시 있어야한다.

*.properties 파일의 종류

- 파일이름.properties : 기본 메시지일 때 사용

- 파일이름_ko.properties : 한글 메시지일 때 사용

- 파일이름_en.properties : 영어 메시지일 때 사용

 

-bundle 태그

 : 사용할 리소스번들을 설정하는 태그, 리소스번들로 사용할 *.properties 파일을 읽어오는 역할을 하며 message 태그와 함께 사용

<fmt:bundle basename="리소스번들" [prefix="key 이름"]>

</fmt:bundle>

 

- message 태그

 : bundle 태그에 설정한 리소스번들에서 메시지를 읽어와 출력하는 태그

<fmt:message

key="메시지 key 이름"

[bundle="setBundle 태그의 변수 이름"]

[var="메시지를 저장하는 변수 이름"]

[scope="{page/request/session/application}"] />

key 속성 값은 리소스번들로 사용하는 *.properties 파일에서 메시지를 읽어와 var 속성 값인 메시지 변수에 저장

 

- setBundle 태그

 : 리소스번들을 가져와 변수로 저장 후 JSP 페이지 어디에서나 사용

<fmt:setBundle

basename="리소스번들"

[var="리소스번들을 저장할 변수 이름"]

[scope="{page/request/session/application}"]/>

 

<%@ page contentType="text/html; charset=utf-8"%>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<html>
<head>
<title>Internationalization</title>
</head>
<body>
	<p> -------- 기본 로케일 --------
		<fmt:setBundle basename="ch09.com.bundle.myBundle" var="resourceBundle" />
	<p> 제목 : <fmt:message key="title" bundle="${resourceBundle}"/>
	<p><fmt:message key="username" var="userMsg" bundle="${resourceBundle}" />
		 이름 : ${userMsg}
	<p> ------- 영문 로케일 -------
		<fmt:setLocale value="en"/>
		<fmt:setBundle basename="ch09.com.bundle.myBundle" var ="resourceBundle"/>
	<p> 제목 : <fmt:message key="title" bundle="${resourceBundle}" />
	<p> 이름 : <fmt:message key="username" bundle="${resourceBundle}" />
</body>
</html>

 

##숫자 태그의 기능과 사용법

-formatNumber 태그

: 숫자를 형식에 맞춰 출력하는 태그

 

-parseNumber 태그

 : formatNumber 태그와 반대로 사용자가 설정한 패턴 문자열에서 숫자를 추출하는 태그

 

<%@ page contentType="text/html; charset=utf-8"%>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<html>
<head>
<title>Internationalization</title>
</head>
<body>
	<p> 숫자 : <fmt:formatNumber value="3200100"/>
	<p> <fmt:formatNumber value="3200100" type="number"/>
	<p> <fmt:formatNumber value="3200100" type="number" groupingUsed="false"/>
	<p> <fmt:formatNumber value="3200100" type="number" groupingUsed="true"/>
	<p> <fmt:formatNumber value="3200100" type="currency" currencySymbol="&"/>
	<p> <fmt:formatNumber value="0.45" type="percent"/>
	<p> <fmt:formatNumber value="3200100" minIntegerDigits="10" minFractionDigits="2"/>
	<p> <fmt:formatNumber value="3200100.45" pattern=".000"/>
	<p> <fmt:formatNumber value="3200100.456" pattern="#,#00.0#"/>
</html>

## 날짜 태그의 기능과 사용법

 - formatDate 태그

 : 날짜 정보를 담고 있는 객체를 형식화하여 출력하는 태그

- parseDate 태그

: 문자열로 표시된 날짜와 시간 값을 java.util.Date 로 변환하는 태그

 

<%@ page contentType="text/html; charset=utf-8"%>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<html>
<head>
<title>Internationalization</title>
</head>
<body>
	<p><fmt:parseDate value="12345678901234" pattern="yyyyMMddHHmmss"/>
    <p><fmt:parseDate value="12345678901234" pattern="yyyyMMddHHmmss"
    var="date" scope="page"/>
    <p><fmt:parseDate value=${date} pattern="yyyy-MM-dd HH:mm" />
</body>
</html>

 

<%@ page contentType="text/html; charset=utf-8"%>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<html>
<head>
<title>Internationalization</title>
</head>
<body>
	<p> <jsp:useBean id="now" class="java.util.Date"/>
	<p> <fmt:formatDate value="${now}" type="date"/>
	<p> <fmt:formatDate value="${now}" type="time"/>
	<p> <fmt:formatDate value="${now}" type="both"/>
	<p> <fmt:formatDate value="${now}" type="both" dateStyle="default" timeStyle="default"/>
	<p> <fmt:formatDate value="${now}" type="both" dateStyle="short" timeStyle="short"/>
	<p> <fmt:formatDate value="${now}" type="both" dateStyle="medium" timeStyle="medium"/>
	<p> <fmt:formatDate value="${now}" type="both" dateStyle="long" timeStyle="long"/>
	<p> <fmt:formatDate value="${now}" type="both" dateStyle="full" timeStyle="full"/>
	<p> <fmt:formatDate value="${now}" type="both" pattern="yyyy년MM월dd일 HH시mm분ss초 E요일"/>
</body>
</html>

Date 클래스를 이용하여 현재 날짜를 얻어오도록 useBean 태그를 사용

현재 날짜를 표현하기 위해 <fmt:formatDate> 태그에 type 속성 date, time을 설정

현재 날짜를 패턴으로 표현하기 위해 패턴을 설정

 

## 시간 태그의 기능과 사용법

- timeZone 태그

 : 시간대별로 시간을 처리하는 태그

<fmt:timeZone value="타임존">

</fmt>

 

- setTimeZone 태그

 : 특정 영역 범위의 시간대별로 시간을 처리하는 태그

 

<%@ page contentType="text/html; charset=utf-8"%>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<html>
<head>
<title>Internationalization</title>
</head>
<body>
	<p> <jsp:useBean id="now" class="java.util.Date"/>
	<p> 한국 : <fmt:formatDate value="${now}" type="both" dateStyle="full" timeStyle="full"/>
	<p> <fmt:timeZone value="Ameriaca/New_York">
		뉴욕 : <fmt:formatDate value="${now}"  type="both" dateStyle="full" timeStyle="full"/>
	</fmt:timeZone>
	<p> <fmt:timeZone value="Europe/London">
		런던 : <fmt:formatDate value="${now}"  type="both" dateStyle="full" timeStyle="full"/>
	</fmt:timeZone>
</body>
</html>

현재 날짜, 시간을 모두 표현하기 위해 <fmt:formatDate> 태그에 type을 both로 설정

전체 표현 형식을 표현하기 위해 dateStyle, timeStyle 속성값을 full로 작성

현재 날짜의 시간대를 America/New_York 으로 표현하도록 timeZone 태그를 작성한다.

 

<출처 : 쉽게 배우는 JSP 웹 프로그래밍>

'학교공부 > JSP' 카테고리의 다른 글

JSP - 10  (0) 2021.04.15
JSP - 9  (0) 2021.04.06
JSP - 4  (0) 2021.03.09
JSP - 3  (0) 2021.03.09
JSP - 2  (0) 2021.03.09
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
글 보관함