English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

国际化Servlet

Herramientas en línea

  • Antes de comenzar, veamos tres términos importantes:18n):Esto significa que un sitio web ofrece diferentes versiones de contenido traducido al idioma o país de origen del visitante.

  • Localización (l10n):Esto significa agregar recursos al sitio web para que se adapte a una región geográfica o cultural específica, por ejemplo, la traducción del sitio web al hindi (Hindi).

  • Configuración regional (locale):Es un área cultural o geográfica especial. Generalmente se refiere a un símbolo de idioma seguido de un guión bajo y un símbolo de país. Por ejemplo, "en_US" representa la configuración regional del inglés para EE. UU.

Al crear un sitio web global, hay ciertos aspectos a tener en cuenta. Este tutorial no explicará todos los detalles de estos aspectos, pero le mostrará cómo presentar las páginas web en diferentes idiomas a través de la ubicación diferenciada (es decir, la configuración regional) con un excelente ejemplo.

Los Servlet pueden obtener la versión correspondiente del sitio web según la configuración regional del solicitante y proporcionar la versión del sitio web correspondiente según el idioma, la cultura y las necesidades locales. A continuación, se muestra el método que devuelve el objeto Locale en el objeto request.

java.util.Locale request.getLocale()

Detección de configuración regional

A continuación, se enumeran los métodos de configuración regional importantes, que puede usar para detectar la ubicación geográfica, el idioma y la configuración regional del solicitante. Todos los métodos enumerados muestran el nombre del país y el nombre del idioma configurados en el navegador del solicitante.

Número de secuenciaMétodo & Descripción
1String getCountry()
Este método utiliza 2 Una forma de mayúsculas de ISO 3166 /Este método devuelve el código de región de la configuración regional en formato.
2
String getDisplayCountry()
3
String getLanguage() 639
4String getDisplayLanguage()
53Country()
Este método devuelve el acrónimo de tres letras del país de la configuración regional.
63Language()
Este método devuelve el acrónimo de tres letras del idioma de la configuración regional.

Ejemplo en línea

Este ejemplo muestra cómo mostrar el idioma y el país relacionados de una solicitud:

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;charset=UTF-8");
      PrintWriter out = response.getWriter();
      String title = "Detectar configuración regional";
      String docType = "<!DOCTYPE html> \n";
      out.println(docType +
        "<html>\n" +
        "<head><title>" + title + "</title></head>\n" +
        "<body bgcolor="#f0f0f0">\n" +
        "<h1 align="center">" + idioma + "</h1>\n" +
        "<h2 align="center">" + país + "</h2>\n" +
        "</body></html>");
  }
}

Configuración de idioma

El Servlet puede generar páginas escritas en idiomas de Europa Occidental (como inglés, español, alemán, francés, italiano, holandés, etc.). Aquí, para poder mostrar todos los caracteres correctamente, se establece Content-La cabecera Language es muy importante.

El segundo punto es utilizar entidades HTML para mostrar todos los caracteres especiales, por ejemplo, "ñ" representa "ñ" y "¡" representa "¡" como se muestra a continuación:

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;charset=UTF-8");
    PrintWriter out = response.getWriter();
    // Establecer código de idioma español
    response.setHeader("Content-Language", "es");
    String title = "En Español";
    String docType = "<!DOCTYPE html> \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>");
  }
}

Fecha específica de la configuración regional

Puede utilizar la clase java.text.DateFormat y su método estático getDateTimeInstance() para formatear fechas y horas específicas de la configuración regional. A continuación, se muestra un ejemplo de cómo formatear una fecha específica de una configuración regional dada:

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;charset=UTF-8");
    PrintWriter out = response.getWriter();
    // 获取客户端的区域设置
    Locale locale = request.getLocale( );
    String date = DateFormat.getDateTimeInstance(
                                  DateFormat.FULL, 
                                  DateFormat.SHORT, 
                                  locale).format(new Date( ));
    String title = "Fecha específica del entorno regional";
    String docType = "<!DOCTYPE html> \n";
      out.println(docType +
      "<html>\n" +
      "<head><title>" + title + "</title></head>\n" +
      "<body bgcolor="#f0f0f0">\n" +
      "<h1 align="center">" + date + "</h1>\n" +
      "</body></html>");
  }
}

Moneda específica del entorno regional

Puede usar la clase java.text.NumberFormat y su método estático getCurrencyInstance() para formatear números (por ejemplo, de tipo long o double) como moneda específica del entorno regional. A continuación se muestra un ejemplo de cómo formatear monedas específicas de un entorno regional dado:

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;charset=UTF-8");
    PrintWriter out = response.getWriter();
    // 获取客户端的区域设置
    Locale locale = request.getLocale( );
    NumberFormat nft = NumberFormat.getCurrencyInstance(locale);
    String formattedCurr = nft.format(1000000);
    String title = "Moneda específica del entorno regional";
    String docType = "<!DOCTYPE html> \n";
      out.println(docType +
      "<html>\n" +
      "<head><title>" + title + "</title></head>\n" +
      "<body bgcolor="#f0f0f0">\n" +
      "<h1 align="center">" + formattedCurr + "</h1>\n" +
      "</body></html>");
  }
}

Porcentaje específico del entorno regional

Puede usar la clase java.text.NumberFormat y su método estático getPercentInstance() para formatear porcentajes específicos del entorno regional. A continuación se muestra un ejemplo de cómo formatear porcentajes específicos de un entorno regional dado:

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;charset=UTF-8");
    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> \n";
      out.println(docType +
      "<html>\n" +
      "<head><title>" + title + "</title></head>\n" +
      "<body bgcolor="#f0f0f0">\n" +
      "<h1 align="center">" + formattedPerc + "</h1>\n" +
      "</body></html>");
  }
}