서블릿 국제화
시작하기 전에 세 가지 중요한 용어를 살펴보겠습니다.
국제화(i18n): 이는 웹사이트가 다양한 버전을 제공한다는 의미입니다. 방문자의 언어나 국적로 번역된 콘텐츠.
현지화(l10n): 이는 웹사이트를 힌디어(힌디어)로 번역하는 등 특정 지리적 또는 문화적 영역에 맞게 웹사이트에 리소스를 추가하는 것을 의미합니다. ).
지역: 특별한 문화적, 지리적 지역입니다. 일반적으로 밑줄과 국가 기호가 뒤따르는 언어 기호를 나타냅니다. 예를 들어 "en_US"는 미국의 영어 로케일을 나타냅니다.
글로벌 웹사이트를 구축할 때 고려해야 할 사항이 있습니다. 이 튜토리얼에서는 이러한 고려 사항을 자세히 다루지는 않지만 차등 타겟팅(예: 로케일 설정)을 사용하여 다양한 언어로 페이지를 렌더링하는 방법에 대한 좋은 예를 제공합니다.
서블릿은 요청자의 로케일에 따라 적절한 버전의 웹사이트를 선택하고 현지 언어, 문화 및 요구 사항에 따라 적절한 버전의 웹사이트를 제공할 수 있습니다. 다음은 Locale 객체를 반환하는 요청 객체의 메서드입니다.
java.util.Locale request.getLocale()
로케일 감지
아래 목록은 요청자의 지리적 위치, 언어 및 로케일을 감지하는 데 사용할 수 있는 중요한 로케일 방법입니다. 아래의 모든 방법은 요청자의 브라우저에 설정된 국가 이름과 언어 이름을 표시합니다.
일련번호 | 방법 및 설명 | < /tr>||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
1 |
이 메소드는 이 로케일의 국가를 대문자 2개를 포함하는 ISO 3166 형식으로 반환합니다. 암호. | ||||||||||||||
2 | <🎜>String getDisplayCountry()<🎜> 이 메소드는 표시되는 로캘에 적합한 국가 이름을 반환합니다. 사용자. | ||||||||||||||
3 | <🎜>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 { // 获取客户端的区域设置 Locale locale = request.getLocale(); String language = locale.getLanguage(); String country = locale.getCountry(); // 设置响应内容类型 response.setContentType("text/html"); PrintWriter out = response.getWriter(); String title = "检测区域设置"; 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>"); } }
언어 설정
서블릿은 서유럽 언어로 출력할 수 있습니다 ( 영어, 스페인어, 독일어, 프랑스어, 이탈리아어, 네덜란드어 등과 같은). 여기서 모든 문자를 정확하게 표시하기 위해서는 Content-Language 헤더를 설정하는 것이 매우 중요합니다.
두 번째 요점은 HTML 엔터티를 사용하여 모든 특수 문자를 표시하는 것입니다. 예를 들어 "ñ"은 "ñ"을 의미하고 "¡"은 "¡"를 의미합니다.
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 { // 设置响应内容类型 response.setContentType("text/html"); PrintWriter out = response.getWriter(); // 设置西班牙语言代码 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 { // 设置响应内容类型 response.setContentType("text/html"); PrintWriter out = response.getWriter(); // 获取客户端的区域设置 Locale locale = request.getLocale( ); String date = DateFormat.getDateTimeInstance( DateFormat.FULL, DateFormat.SHORT, locale).format(new Date( )); String title = "特定于区域设置的日期"; 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.text.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 { // 设置响应内容类型 response.setContentType("text/html"); PrintWriter out = response.getWriter(); // 获取客户端的区域设置 Locale locale = request.getLocale( ); NumberFormat nft = NumberFormat.getCurrencyInstance(locale); String formattedCurr = nft.format(1000000); String title = "特定于区域设置的货币"; 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.text.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 { // 设置响应内容类型 response.setContentType("text/html"); PrintWriter out = response.getWriter(); // 获取客户端的区域设置 Locale locale = request.getLocale( ); NumberFormat nft = NumberFormat.getPercentInstance(locale); String formattedPerc = nft.format(0.51); String title = "特定于区域设置的百分比"; 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>"); } }