다국어 처리

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

    JSP 페이지에 JSTL의 fmt 태그를 이용하면 언어별로 페이지를 따로 만들 필요 없이 

    아주 간단하게 다국어를 지원할 수 있다.

     

    i18n

    Internationalization

    국제화 

     

    L10n

    localization

    지역화 

     

    로케일 감지하기

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

     

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

     


    Locale 클래스를 이용한 다국어 처리 예제 Chap15_MultiLanguage

    locale01.jsp

    <%@page import="java.text.NumberFormat"%>
    <%@page import="java.text.SimpleDateFormat"%>
    <%@page import="java.text.DateFormat"%>
    <%@page import="java.util.Date"%>
    <%@page import="java.util.Locale"%>
    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html>
    <html>
    <head>
      <meta charset="UTF-8">
      <title>Locale클래스를 이용한 다국어 처리-1</title>
    </head>
    <body>
    	<h3>현제 로케일의 국가, 날짜, 통화</h3>
    	<%
    		//요청한 클라이언트의 Locale가져옴
    		Locale locale = request.getLocale();
    		Date date = new Date();
    		//DateFormat : 정해진 포멧을 상수(FULL, LONG, MEDIUM, SHORT)로 제공하고 있는 클래스
    		DateFormat dateFormat = DateFormat.getDateInstance(DateFormat.FULL, locale);
    		//SimpleDateFormat : DateFormat을 상속받고, 원하는 출력 형태를 직접 지정하고자 할때 사용
    		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    		NumberFormat numberFormat = NumberFormat.getNumberInstance(locale);
    		
    	%>
    	<p>날짜  : <%=date %>
    	<p>날짜2 : <%=dateFormat.format(date) %> 
    	<p>날짜3 : <%=sdf.format(date) %> 
    	
    	<p>국가 : <%=locale.getDisplayCountry() %>
    	<p>국가코드 : <%=locale.getCountry() %>
    	<p>국가언어 : <%=locale.getDisplayLanguage() %>
    	<p>국가언어 : <%=locale.getDisplayLanguage(locale) %>
    	<p>국가언어 : <%=locale.getDisplayName() %>
    	
    	<p>숫자(123456.67) : <%=numberFormat.format(123456.67) %>
    </body>
    </html>


    Locale클래스를 인스턴스로 생성하여 처리

    locale02.jsp

    <%@page import="java.text.NumberFormat"%>
    <%@page import="java.text.SimpleDateFormat"%>
    <%@page import="java.text.DateFormat"%>
    <%@page import="java.util.Date"%>
    <%@page import="java.util.Locale"%>
    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html>
    <html>
    <head>
      <meta charset="UTF-8">
      <title>Locale클래스를 이용한 다국어 처리-2</title>
    </head>
    <body>
    	<h3>Locale클래스를 인스턴스로 생성하여 처리</h3>
    	<%
    		//Locale locale = new Locale("fr", "CA");	//인스턴스 생성
    		Locale locale = Locale.TAIWAN;				//Loclae클래스의 상수 이용
    		Date date = new Date();
    		//DateFormat : 정해진 포멧을 상수(FULL, LONG, MEDIUM, SHORT)로 제공하고 있는 클래스
    		DateFormat dateFormat = DateFormat.getDateInstance(DateFormat.FULL, locale);
    		//SimpleDateFormat : DateFormat을 상속받고, 원하는 출력 형태를 직접 지정하고자 할때 사용
    		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    		NumberFormat numberFormat = NumberFormat.getNumberInstance(locale);
    		
    	%>
    		<p>날짜  : <%=date %>
    		<p>날짜2 : <%=dateFormat.format(date) %> 
    		<p>날짜3 : <%=sdf.format(date) %> 
    		
    		<p>국가 : <%=locale.getDisplayCountry() %>
    		<p>국가코드 : <%=locale.getCountry() %>
    		<p>국가언어 : <%=locale.getDisplayLanguage() %>
    		<p>국가언어 : <%=locale.getDisplayLanguage(locale) %>
    		<p>국가언어 : <%=locale.getDisplayName() %>
    		
    		<p>숫자(123456.67) : <%=numberFormat.format(123456.67) %>
    	
    </body>
    </html>


    모든 Locale인자값 출력하기

    allLocale.jsp

    <%@page import="java.util.Locale"%>
    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html>
    <html>
    <head>
      <meta charset="UTF-8">
      <title>모든 Locale인자값 출력하기</title>
    </head>
    <body>
    	<%
    		for(Locale locale : Locale.getAvailableLocales()) {
    	%>
    		<p>언어코드 : <%=locale.getLanguage() %>
    		<p>국가코드 : <%=locale.getCountry() %>
    		<p>국가명 : <%=locale.getDisplayCountry() %>
    		<p>언어,국가 : <%=locale.getDisplayName() %>
    		
    	<%
    		}
    	%>
    	<p>총 Locale수 : <%=Locale.getAvailableLocales().length %>
    </body>
    </html>


    request객체의 setChracterEncoding()과 같은 기능을 한다

     


    플러그인 설치하기

    properties editor 검색

    ResourceBundle Editor 1.0.5 Install

    ResourceBundle Editor 1.0.5 Install
    jar파일

    kjh95.tistory.com/265

    태그 라이브러리 jar

     

    JSP | EL, JSTL 태그 라이브러리

    EL, JSTL 태그 라이브러리 EL - 표현 언어 EL(Expression Language)란, 표현식 또는 액션태그를 대신해서 값을 표현하는 언어 EL의 내장객체 JSTL - 자바서버 페이지 표준 태그 라이브러리 EL 표기법 예제 E.

    kjh95.tistory.com


    한글을 입력한 동시에 유니코드값으로 변경되는 에디터 설정하기

    myBundle_ko.properties

    #Generated by ResourceBundle Editor (http://essiembre.github.io/eclipse-rbe/)
    title=\uC790\uBC14 \uC11C\uBC84 \uD398\uC774\uC9C0
    username=\uAD00\uB9AC\uC790 
    password=1234
    title=자바 서버 페이지
    username=관리자
    password=1234

    myBundle_en.properties

    #Generated by ResourceBundle Editor (http://essiembre.github.io/eclipse-rbe/)
    title=Java Server Page
    username=admin
    password=1234

    다국어처리-fmt태그-01(로케일)

    jstl_fmt.jsp

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    
    <!-- fmt태그 라이브러리 사용하기위해 teglib 지시자 설정 -->
    <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
    <!DOCTYPE html>
    <html>
    <head>
      <meta charset="UTF-8">
      <title>다국어처리-fmt태그-01(로케일)</title>
    </head>
    <body>
    	<p>--------------------------기본 로케일--------------------------</p>
    	<!-- 가져올 번들을 resourceBundle변수에 저장함  -->
    	<fmt:setBundle basename="kr.gov.bundle.myBundle_ko" var="resourceBundle"/> <!-- /Chap15_MultiLanguage/src/kr/gov/bundle/myBundle_ko.properties를  kr.gov.bundle.myBundle_ko로 변경-->
    	<p>제목 : <fmt:message key="title" bundle="${resourceBundle }"/> 		<!-- fmt:message : 지정한 언어에 해당하는 언어를 표시함 -->
    	
    	<!-- username의 키를 주면 value값 관리자를 리턴하는데 그 값을 user변수에 저장 -->
    	<p><fmt:message key="username" var="user" bundle="${resourceBundle }"/> 
    	이름 : ${user }
    	<p>비밀번호 : <fmt:message key="password" bundle="${resourceBundle }" />
    	
    	<p>--------------------------영문 로케일--------------------------</p>
    	<fmt:setLocale value="en"/>
    	<fmt:setBundle basename="kr.gov.bundle.myBundle_en" var="resourceBundle"/> <!-- /Chap15_MultiLanguage/src/kr/gov/bundle/myBundle_ko.properties를  kr.gov.bundle.myBundle_ko로 변경-->
    	<p>제목 : <fmt:message key="title" bundle="${resourceBundle }"/> 		<!-- fmt:message : 지정한 언어에 해당하는 언어를 표시함 -->
    	
    	<!-- username의 키를 주면 value값 관리자를 리턴하는데 그 값을 user변수에 저장 -->
    	<p><fmt:message key="username" var="user" bundle="${resourceBundle }"/> 
    	이름 : ${user }
    	<p>비밀번호 : <fmt:message key="password" bundle="${resourceBundle }" />
    	
    </body>
    </html>


    다국어처리-fmt태그-02(숫자)

    jstl_fmt_number.jsp

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
    <!DOCTYPE html>
    <html>
    <head>
      <meta charset="UTF-8">
      <title>다국어처리-fmt태그-02(숫자)</title>
    </head>
    <body>
    	<!-- setLocale태그 이용하여 로케일 정해주면 그에 맞는 숫자,통화가 그 로케일로 맞춰진다. -->
    	<fmt:setLocale value="en_US"/>
    	
    	<!-- fmt:formatNumber태그는 기본적으로 groupingUsed속성이 true로 되어 있어서
    		천단위자리에 ,로 구분되어진다. false하면 없어진다.-->
    	<p>숫자 : <fmt:formatNumber value="4545000"/> <!-- 천자리 구분(기본값) -->
    	<p>숫자 : <fmt:formatNumber value="4545000" groupingUsed="true"/>
    	<p>숫자 : <fmt:formatNumber value="4545000" groupingUsed="false"/><!-- 천자리구분 안함 -->
    	
    	<p><fmt:formatNumber value="4545000" type="currency"/> <!-- ₩ -->
    	<p><fmt:formatNumber value="4545000" type="currency" currencySymbol="원"/>
    	
    	<p><fmt:formatNumber value="0.45" type="percent"/> <!-- 45% -->
    	
    	<!-- minIntegerDigits : 최대자리수, minFractionDigits : 소주점 자리 -->
    	<p><fmt:formatNumber value="4545000" minIntegerDigits="10" minFractionDigits="2"/>
    	
    	<!-- 0은 자리수를 차지하고, #은 있으면 출력하고 없으면 출력을 하지 않음 -->
    	<p><fmt:formatNumber value="4545000" pattern="0000000000.000"/> <!-- 0004545000.000 -->
    	<p><fmt:formatNumber value="4545000" pattern="#########.###"/> <!-- 4545000 -->
    </body>
    </html>


    다국어처리-fmt태그-03(날짜)

    jstl_fmt_date.jsp

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%> 
    <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
    <!DOCTYPE html>
    <html>
    <head>
      <meta charset="UTF-8">
      <title>다국어처리-fmt태그-03(날짜)</title>
    </head>
    <body>
    	<!-- jsp:useBean : 액션태그 -->
    	<p><jsp:useBean id="now" class="java.util.Date" />
    	
    	<!-- type에 따라서 출력내용 바뀜 -->
    	<p>date타입 : <fmt:formatDate value="${now }" type="date"/>
    	<p>time타입 : <fmt:formatDate value="${now }" type="time"/>
    	<p>both타입 : <fmt:formatDate value="${now }" type="both"/>
    	
    	<!-- dateStyle에 따라 출력 내용이 바뀜 -->
    	<p>default 스타일 : <fmt:formatDate value="${now }" type="both" dateStyle="default"/>
    	<p>short 스타일 : <fmt:formatDate value="${now }" type="both" dateStyle="short"/> <!-- 21. 1. 22. 오후 3:16:38 -->
    	<p>medium 스타일 : <fmt:formatDate value="${now }" type="both" dateStyle="medium"/>
    	<p>long 스타일 : <fmt:formatDate value="${now }" type="both" dateStyle="long"/>
    	<p>full 스타일 : <fmt:formatDate value="${now }" type="both" dateStyle="full"/>
    	
    	<!-- 직접 패턴을 주는 방법 -->
    	<p>패턴주기 : <fmt:formatDate value="${now }" type="both" pattern="yyyy년 MM월 dd일 HH시 mm분 ss초 E요일"/>
    	<p>패턴주기 : <fmt:formatDate value="${now }" type="both" pattern="yyyy-MM-dd HH:mm:ss"/>
    	
    </body>
    </html>


    다국어처리-fmt태그-04(타임존)

    jstl_fmt_timeZone.jsp

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
        
    <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    
    <!DOCTYPE html>
    <html>
    <head>
      <meta charset="UTF-8">
      <title>다국어처리-fmt태그-04(타임존)</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="America/New_York">
    		<p>뉴욕 : <fmt:formatDate value="${now }" type="both" dateStyle="full" timeStyle="full"/>
    	</fmt:timeZone>
    	
    	<p><fmt:timeZone value="Europe/rundon">
    		<p>런던 : <fmt:formatDate value="${now }" type="both" dateStyle="full" timeStyle="full"/>
    	</fmt:timeZone>
    	
    	<h2>타임존 목록</h2>
    	<c:forEach var="id" items="<%=java.util.TimeZone.getAvailableIDs() %>">
    		타임존 이름 : ${id }<br/>	
    	</c:forEach>
    	
    	<p>총 타임존의 수 : <c:out value="<%=java.util.TimeZone.getAvailableIDs().length %>"></c:out>
    </body>
    </html>

    ......

     

    • 네이버 블러그 공유하기
    • 네이버 밴드에 공유하기
    • 페이스북 공유하기
    • 카카오스토리 공유하기
    loading