티스토리 뷰

코딩/JSP

[10주 1일차] 다국어 처리

ehzim 2023. 12. 11. 23:26

CHAPTER09. 다국어 처리: 상품 등록 페이지의 다국어 처리하기

 

 

 

 

1. 다국어 처리의 개요

 

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

기술 변경 없이 소프트웨어에 적용한다.

JSP 페이지에 JSTL의 fmt 태그를 이용하면 별도의 페이지를 만들 필요 없이 간단하게 다국어를 지원할 수 있다.

다국어는 다양한 언어와 지역에 적용될 수 있도록하는 국제화와 언어별 구성 요소를 추가해 특정 지역의 언어나 문화에 맞추는 지역화를 포함한다.

 

 

 

 

 

1.1 지역화

지역화는 사용 국가별 환경에 맞게 시간 날짜 등을 적합화하는 것이다.

숫자, 날짜, 시간의 형식 / 화폐의 표시 / 키보드의 지원 / 문자열의 순서와 정렬 / 심벌, 아이콘, 색상 / 문화에 따라 오해의 소지가 있거나 의미가 ㅇ벗는 문자, 그림 / 지역별 법률의 차이 등을 고려해야한다.

 

 

 

 

 

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

 

Locale 클래스는 특정 지리적, 정치적, 문화적 지역을 나타내는 클래스이다.

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

어떤 언어로 출력할 것인지 결정할 수 있도록하는 수단이다.

 

Locale 객체의 생성은 request 내장 객체를 이용해 현재 웹 브라우저에 미리 정의된 언어나 국가 정보를 가져오는 방법이다.

Locale 클래스를 사용하려면 JSP 페이지에 page 디렉티브 태그의 import 속성으로 패키지 java.util.Locale을 설정해야한다.

java.util.Locale request.getLocale();

 

 

 

 

* Locale 클래스를 생성하는 다른 방법

 

1. 인스턴스화 방법

Locale locale = new Locale("ko", "KR");   //ko은 국가, KR은 언어

 

2. 미리 정의된 필드 값을 사용하는 방법

Locale locale = Locale.KOREA;

 

 

 

 

 

2.1 로케일 감지하기 (=지역 파악)

 

웹 브라우저에 설정된 국가와 언어 이름을 알아내는 것을 로케일 감지라고 한다.

로케일 감지할 때는 특정 메소드를 이용하여 웹 브라우저에 설정된 국가나 언어 정보를 얻을 수 있다.

(웹 브라우저(크롬) → 언어 정보(Request/head) )

 

 

* 로케일 감지 메소드 종류

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

 

* request 안의 head 모든 정보 담겨 있다.

 

 

 

 

로케일 감지 메소드 사용 예

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import="java.util.Locale" %>
<% Locale locale=request.getLocale();   //request head 사용하려면 request 안에서 사용(안에 모든게 담김)
	String displayLanguage = locale.getDisplayLanguage();
	String language = locale.getLanguage();
	String displayCountry = locale.getDisplayCountry();
	String country = locale.getCountry();
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
	out.println("로케일 언어 : "+ displayLanguage + "<br />");
	out.println("로케일 언어 코드 : "+ language + "<br />");
	out.println("로케일 국가 : " + displayCountry + "<br />");
	out.println("로케일 국가 코드 : " +country + "<br />");
%>
</body>
</html>

 

 

결과

 

2.2 로케일 표현하기

 

2.2.1 언어 설정

 

언어를 표현하기 위해서는 response 내장 객체의 setHeader() 메소드를 사용한다.

메소드에 Content-Language 헤더 값을 언어 코드로 설정하고 HTML 엔터티 코드나 이름을 사용하여 모든 특수문자를 출력할 수 있다.

 

 

 

 

 

2.2.2 날짜와 시간 설정

 

사용자의 로케일에 따라 특정 날짜와 시간 형식을 표현하기 위해 DateFormat 클래스의 getDateTimeInstance() 메소드를 사용한다. 

DateFormat 클래스를 사용하려면 JSP 페이지에 page 디렉티브 import 속성으로 패키지 java.text.DateFormat을 설정해야한다.

 

 

로케일의 날짜와 시간 설정 예

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import="java.util.Locale,java.util.Date"%>
<%@ page import="java.text.DateFormat" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</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>

 

결과

 

 

 

 

 

2.2.3 통화와 숫자 설정

 

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

특정 비율(퍼센트)을 표현하고자할때는 getPercentInstance() 메소드를 사용한다.

NumberFormat 클래스를 사용하려면 JSP 페이지에 page 디렉티브 태그의 improt 속성으로 패키지 java.text.NumberFormat을 설정해야한다.

 

 

 

 

 

로케일의 통화와 숫자 설정 예

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

 

결과

 

 

 

 

사용자의 로케일에 따라 국가, 날짜, 통화 형식 출력하기

예제 9-1

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import="java.text.NumberFormat" %>    
<%@ page import="java.text.DateFormat" %>
<%@ page import="java.util.*"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</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.67) : <%=numberFormat.format(12345.67) %>
</body>
</html>

 

결과

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday