본문 바로가기

BackEnd/JSP

[JSP 웹 프로그래밍] 다국어 처리 1 (Locale Class)

728x90
반응형

1. 다국어 처리

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

   ▷ 다른 언어와 지역적 차이를 기술 변경 없이 소프트웨어에 바로 적용하는 것

   ▷ JSP 페이지에 JSTL의 fmt 태그를 이용하면 언어별로 페이지를 따로 만들 필요 없이 아주 간단하게 다국어를 지원할 수 있음

   ▷ 다국어는 다양한 언어와 지역에 적용될 수 있도록 하는 국제화(internationalization, i18n)와 언어별 구성 요소를 추가하여 특정 지역의 언어나 문화에 맞추는 지역화(localization, L10n)를 포함

 

◎ 지역화

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

   ▷ L10n으로 표기

 

◎ 지역화에 주로 고려되는 사항

   ▷ 숫자, 날짜, 시간의 형식

   ▷ 화폐의 표시

   ▷ 키보드의 지원

   ▷ 문자열의 순서와 정렬

   ▷ 심벌, 아이콘, 색상

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

   ▷ 지역별 법률의 차이

 

◎ 국제화

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

   ▷ i18n으로 표기

   ▷ 국제화는 어느 국가에서나 사용할 수 있게 하는 지역화 기능을 포함

   ▷ 국제화는 주로 다음과 같은 처리를 포함하여 지원해야 함

      ▶ 국제화 지원은 유니코드의 사용이나 기존의 인코딩을 적절히 처리하고 사용자 인터페이스에 표시할 문자열에는 문자 코드가 포함되지 않도록 설계 및 개발해야 함

      ▶ 국제화를 처리하는 정보에 언어 정보를 포함하거나, 세로쓰기/가로쓰기/우측에서 좌측으로의 가로쓰기 등 언어의 특성을 반영하는 처리 등을 지원해야 함

      ▶ 날짜와 시간 표시, 지역의 달력, 숫자 표시, 리스트의 정렬과 표시, 인명이나 주소의 처리 등 언어의 특성(언어적, 지역적, 문화적 특성 등)에 대한 사용자 설정 지원해야 함

      ▶ 국제화는 사용자의 요청이나 설정에 따라 필요시 사용되도록 지역화 정보를 코드와 분리해야 함

 

◎ Locale 클래스

   ▷ 특정 지리적, 정치적, 문화적 지역을 나타내는 클래스

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

      ▶ 예를 들어 웹 페이지에 보이는 메시지가 여러 가지 언어로 주어졌을 때 사용자가 어떤 언어로 출력할 것인지 결정할 수 있게 하는 수단이 바로 Locale 클래스

   ▷ Locale 클래스는 단순한 메시지뿐 아니라 숫자, 날짜, 시간 등을 표현하는데 사용

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

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

 

로케일 감지하기

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

 

 로케일 감지 메소드의 종류

 

◎ 로케일 감지 메소드 사용 예제

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import="java.util.Locale" %>
<%
	Locale locale = request.getLocale();
	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>Localization</title>
</head>
<body>
	<%
		out.println("로케일 언어 : " + displayLanguage + "<br />");
		out.println("로케일 언어 코드 : " + language + "<br />");
		out.println("로케일 국가 : " + displayCountry + "<br />");
		out.println("로케일 국가 코드 : " + country + "<br />");
	%>
</body>
</html>

 


마이크로 엣지에서는 아래의 두 개 : 로케일 국가, 로케일 국가 코드가 출력되지 않고 크롬에서는 출력이 됩니다!!

 

◎ 로케일 표현하기

   ▷ 언어 설정

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

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

 

 

   ▷ 날짜와 시간 설정

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

 

   ▷ 통화와 숫자 설정

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

 

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

<%@ 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>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.67) : <%=numberFormat.format(12345.67) %>
</body>
</html>

 

 

다국어 처리는 세계의 언어가 모두 다르기 때문에 해당 국가에서 해당 날짜, 시간 등이 연동되도록 합니다.

 

Locale Class를 통해서 날짜와 시간, 통화와 숫자 등을 표현할 수 있으니 잘 봐둬야겠어요!!

 

많은 분들의 피드백은 언제나 환영합니다!  많은 댓글 부탁드려요~~

 

728x90
반응형