서블릿-국제화
진행하기 전에 세 가지 중요한 용어를 설명하겠습니다.
Internationalization (i18n) − 이는 웹 사이트에서 방문자의 언어 또는 국적로 번역 된 다양한 버전의 콘텐츠를 제공 할 수 있음을 의미합니다.
Localization (l10n) − 이는 특정 지리적 또는 문화적 지역에 적응하기 위해 웹 사이트에 리소스를 추가하는 것을 의미합니다.
locale− 이것은 특정 문화 또는 지리적 지역입니다. 일반적으로 밑줄로 구분 된 국가 기호가 뒤 따르는 언어 기호라고합니다. 예를 들어 "en_US"는 미국의 영어 로케일을 나타냅니다.
글로벌 웹 사이트를 구축 할 때주의해야 할 항목이 많습니다. 이 튜토리얼은 이에 대한 완전한 세부 사항을 제공하지는 않지만 위치, 즉 로케일을 차별화하여 인터넷 커뮤니티에 다른 언어로 웹 페이지를 제공 할 수있는 방법에 대한 좋은 예를 제공합니다.
서블릿은 요청자의 로케일에 따라 적절한 버전의 사이트를 선택하고 현지 언어, 문화 및 요구 사항에 따라 적절한 사이트 버전을 제공 할 수 있습니다. 다음은 Locale 객체를 반환하는 요청 객체의 메서드입니다.
java.util.Locale request.getLocale()
로케일 감지
다음은 요청자의 위치, 언어 및 물론 로케일을 감지하는 데 사용할 수있는 중요한 로케일 방법입니다. 아래의 모든 방법은 요청자의 브라우저에 설정된 국가 이름과 언어 이름을 표시합니다.
Sr. 아니. | 방법 및 설명 |
---|---|
1 | String getCountry() 이 메서드는 ISO 3166 2 문자 형식으로이 로케일에 대한 국가 / 지역 코드를 대문자로 반환합니다. |
2 | String getDisplayCountry() 이 메소드는 사용자에게 표시하기에 적합한 로케일 국가의 이름을 리턴합니다. |
삼 | String getLanguage() 이 메소드는 ISO 639 형식으로이 로케일에 대해 소문자로 된 언어 코드를 리턴합니다. |
4 | String getDisplayLanguage() 이 메소드는 사용자에게 표시하기에 적합한 로케일 언어의 이름을 리턴합니다. |
5 | String getISO3Country() 이 메소드는이 로케일의 국가에 대한 3 자 약어를 리턴합니다. |
6 | String getISO3Language() 이 메소드는이 로케일의 언어에 대한 3 자 약어를 리턴합니다. |
예
이 예는 요청에 대한 언어 및 관련 국가를 표시하는 방법을 보여줍니다.
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.Locale;
public class GetLocale extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//Get the client's Locale
Locale locale = request.getLocale();
String language = locale.getLanguage();
String country = locale.getCountry();
// Set response content type
response.setContentType("text/html");
PrintWriter out = response.getWriter();
String title = "Detecting Locale";
String docType =
"<!doctype html public \"-//w3c//dtd html 4.0 " + "transitional//en\">\n";
out.println(docType +
"<html>\n" +
"<head><title>" + title + "</title></head>\n" +
"<body bgcolor = \"#f0f0f0\">\n" +
"<h1 align = \"center\">" + language + "</h1>\n" +
"<h2 align = \"center\">" + country + "</h2>\n" +
"</body>
</html>"
);
}
}
언어 설정
서블릿은 영어, 스페인어, 독일어, 프랑스어, 이탈리아어, 네덜란드어 등과 같은 서유럽 언어로 작성된 페이지를 출력 할 수 있습니다. 여기서 모든 문자를 올바르게 표시하도록 ContentLanguage 헤더를 설정하는 것이 중요합니다.
두 번째 요점은 "& # 241;"과 같은 HTML 엔티티를 사용하여 모든 특수 문자를 표시하는 것입니다. "ñ"및 "& # 161;" 다음과 같이 "¡"를 나타냅니다.
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.Locale;
public class DisplaySpanish extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// Set response content type
response.setContentType("text/html");
PrintWriter out = response.getWriter();
// Set spanish language code.
response.setHeader("Content-Language", "es");
String title = "En Español";
String docType =
"<!doctype html public \"-//w3c//dtd html 4.0 " + "transitional//en\">\n";
out.println(docType +
"<html>\n" +
"<head><title>" + title + "</title></head>\n" +
"<body bgcolor = \"#f0f0f0\">\n" +
"<h1>" + "En Español:" + "</h1>\n" +
"<h1>" + "¡Hola Mundo!" + "</h1>\n" +
"</body>
</html>"
);
}
}
로케일 특정 날짜
java.text.DateFormat 클래스 및 정적 getDateTimeInstance () 메소드를 사용하여 로케일에 특정한 날짜 및 시간을 형식화 할 수 있습니다. 다음은 주어진 로케일에 특정한 날짜 형식을 지정하는 방법을 보여주는 예입니다.
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.Locale;
import java.text.DateFormat;
import java.util.Date;
public class DateLocale extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// Set response content type
response.setContentType("text/html");
PrintWriter out = response.getWriter();
//Get the client's Locale
Locale locale = request.getLocale( );
String date = DateFormat.getDateTimeInstance(DateFormat.FULL,
DateFormat.SHORT, locale).format(new Date( ));
String title = "Locale Specific Dates";
String docType =
"<!doctype html public \"-//w3c//dtd html 4.0 " + "transitional//en\">\n";
out.println(docType +
"<html>\n" +
"<head><title>" + title + "</title></head>\n" +
"<body bgcolor = \"#f0f0f0\">\n" +
"<h1 align = \"center\">" + date + "</h1>\n" +
"</body>
</html>"
);
}
}
로케일 별 통화
java.txt.NumberFormat 클래스 및 정적 getCurrencyInstance () 메소드를 사용하여 로케일 특정 통화로 long 또는 double 유형과 같은 숫자를 형식화 할 수 있습니다. 다음은 주어진 로케일에 특정한 통화 형식을 지정하는 방법을 보여주는 예입니다.
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.Locale;
import java.text.NumberFormat;
import java.util.Date;
public class CurrencyLocale extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// Set response content type
response.setContentType("text/html");
PrintWriter out = response.getWriter();
//Get the client's Locale
Locale locale = request.getLocale( );
NumberFormat nft = NumberFormat.getCurrencyInstance(locale);
String formattedCurr = nft.format(1000000);
String title = "Locale Specific Currency";
String docType =
"<!doctype html public \"-//w3c//dtd html 4.0 " + "transitional//en\">\n";
out.println(docType +
"<html>\n" +
"<head><title>" + title + "</title></head>\n" +
"<body bgcolor = \"#f0f0f0\">\n" +
"<h1 align = \"center\">" + formattedCurr + "</h1>\n" +
"</body>
</html>"
);
}
}
로케일 특정 백분율
java.txt.NumberFormat 클래스 및 정적 getPercentInstance () 메소드를 사용하여 로케일 특정 백분율을 얻을 수 있습니다. 다음은 주어진 로케일에 특정한 백분율을 포맷하는 방법을 보여주는 예입니다.
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.Locale;
import java.text.NumberFormat;
import java.util.Date;
public class PercentageLocale extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// Set response content type
response.setContentType("text/html");
PrintWriter out = response.getWriter();
//Get the client's Locale
Locale locale = request.getLocale( );
NumberFormat nft = NumberFormat.getPercentInstance(locale);
String formattedPerc = nft.format(0.51);
String title = "Locale Specific Percentage";
String docType =
"<!doctype html public \"-//w3c//dtd html 4.0 " + "transitional//en\">\n";
out.println(docType +
"<html>\n" +
"<head><title>" + title + "</title></head>\n" +
"<body bgcolor = \"#f0f0f0\">\n" +
"<h1 align = \"center\">" + formattedPerc + "</h1>\n" +
"</body>
</html>"
);
}
}