서블릿 국제화


시작하기 전에 세 가지 중요한 용어를 살펴보겠습니다.

  • 국제화(i18n): 이는 웹사이트가 다양한 버전을 제공한다는 의미입니다. 방문자의 언어나 국적로 번역된 콘텐츠.

  • 현지화(l10n): 이는 웹사이트를 힌디어(힌디어)로 번역하는 등 특정 지리적 또는 문화적 영역에 맞게 웹사이트에 리소스를 추가하는 것을 의미합니다. ).

  • 지역: 특별한 문화적, 지리적 지역입니다. 일반적으로 밑줄과 국가 기호가 뒤따르는 언어 기호를 나타냅니다. 예를 들어 "en_US"는 미국의 영어 로케일을 나타냅니다.

글로벌 웹사이트를 구축할 때 고려해야 할 사항이 있습니다. 이 튜토리얼에서는 이러한 고려 사항을 자세히 다루지는 않지만 차등 타겟팅(예: 로케일 설정)을 사용하여 다양한 언어로 페이지를 렌더링하는 방법에 대한 좋은 예를 제공합니다.

서블릿은 요청자의 로케일에 따라 적절한 버전의 웹사이트를 선택하고 현지 언어, 문화 및 요구 사항에 따라 적절한 버전의 웹사이트를 제공할 수 있습니다. 다음은 Locale 객체를 반환하는 요청 객체의 메서드입니다.

java.util.Locale request.getLocale()

로케일 감지

아래 목록은 요청자의 지리적 위치, 언어 및 로케일을 감지하는 데 사용할 수 있는 중요한 로케일 방법입니다. 아래의 모든 방법은 요청자의 브라우저에 설정된 국가 이름과 언어 이름을 표시합니다.

< /tr>
일련번호방법 및 설명
1
序号方法 & 描述
1String getCountry()
该方法以 2 个大写字母形式的 ISO 3166 格式返回该区域设置的国家/地区代码。
2String getDisplayCountry()
该方法返回适合向用户显示的区域设置的国家的名称。
3String getLanguage()
该方法以小写字母形式的 ISO 639 格式返回该区域设置的语言代码。
4String getDisplayLanguage()
该方法返回适合向用户显示的区域设置的语言的名称。
5String getISO3Country()
该方法返回该区域设置的国家的三个字母缩写。
6String getISO3Language()
该方法返回该区域设置的语言的三个字母的缩写。
String getCountry()<🎜>
이 메소드는 이 로케일의 국가를 대문자 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&ntilde;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&ntilde;ol:" + "</h1>\n" +
     "<h1>" + "&iexcl;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>");
  }
}