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

Internacionalización de JSP

Antes de comenzar, es necesario explicar algunos conceptos importantes:

  • Internacionalización (i18n): Indica que una página presenta diferentes versiones de traducción según el idioma o el país del visitante.
  • Localización (l10n): Añadir recursos al sitio web para que se adapte a diferentes regiones y culturas. Por ejemplo, la versión en hindi del sitio web.
  • Región: Es una región o cultura específica, generalmente considerada como un marcador de idioma y un marcador de país conectados por guiones bajos. Por ejemplo, "en_US" representa la región de inglés de Estados Unidos.

Si desea crear un sitio web globalizado, debe preocuparse por una serie de proyectos. Este capítulo le explicará en detalle cómo manejar problemas de internacionalización y proporcionará algunos ejemplos para profundizar en la comprensión.

El contenedor JSP puede proporcionar la versión de página correcta según el atributo locale de request. A continuación, se muestra la sintaxis para obtener el objeto Locale a través del objeto request:

java.util.Locale request.getLocale() 

Detectar Localidad

La tabla a continuación enumera los métodos importantes del objeto Locale, utilizados para detectar la región y el idioma del objeto request. Todos estos métodos mostrarán el nombre del país y el idioma en el navegador:

Número Método &
1 String getCountry()

Devuelve el país/Código de región en mayúsculas, o ISO 3166 2-
2 String getDisplayCountry()

3 String getLanguage()

Devuelve el código de idioma en minúsculas, o ISO 639
4 String getDisplayLanguage()

5 3Country()

Devuelve el nombre del país3Abreviatura
6 3Language()

Devuelve el nombre del idioma3Abreviatura

Demostración de ejemplo

Este ejemplo nos muestra cómo mostrar idioma y país en JSP:

<%@ page import="java.io."*,java.util.Locale" %>
<%@ page import="javax.servlet."*,javax.servlet.http.* "%>
<%
   //Obtener información de localización del cliente
   Locale locale = request.getLocale();
   String language = locale.getLanguage();
   String country = locale.getCountry();
%>
<html
<head
<title>Detectando Localidad</title>
</head>
<body
<center>
<h1>Detectando Localidad</h1>
</centrado>
<p align="center">
<% 
   out.println("Idioma : "); + language  + "<br />");
   out.println("País  : "); + country   + "<br />");
%>
</p>
</body>
</html>

Configuración de idioma

JSP puede usar idiomas de Europa Occidental para generar una página, como inglés, español, alemán, francés, italiano, etc. Por lo tanto, el establecimiento de Content-Es muy importante que la información de encabezado de idioma se muestre correctamente para mostrar todos los caracteres.

El segundo punto es que es necesario usar entidades de caracteres HTML para mostrar caracteres especiales, como "ñ" representa & #241;, "¡" representa & #161; :

<%@ page import="java.io."*,java.util.Locale" %>
<%@ page import="javax.servlet."*,javax.servlet.http.* "%>
<%
    // Establecer tipo de contenido de respuesta
    response.setContentType("text");/html");
    // Establecer código de idioma español.
    response.setHeader("Content"-Language", "es");
    String title = "En Español";
%>
<html
<head
<title><%  out.print(title); %></title>
</head>
<body
<center>
<h1><%  out.print(title); %></h1>
</centrado>
<div alineado="centrado">
<p>En Español</p>
<p>?Hola Mundo!</p>
</div>
</body>
</html>

Fecha específica de la región

Se puede usar la clase java.text.DateFormat y su método estático getDateTimeInstance() para formatear fechas y horas. El siguiente ejemplo muestra cómo formatear fechas y horas según la región especificada:

<%@ page import="java.io."*,java.util.Locale" %>
<%@ page import="javax.servlet."*,javax.servlet.http.* "%>
<%@ page import="java.text.DateFormat,java.util.Date" %>
<%
    String title = "Fechas específicas de la región";
    //Obtener el Locale del cliente
    Locale locale = request.getLocale( );
    String date = DateFormat.getDateTimeInstance(
                                  DateFormat.FULL, 
                                  DateFormat.SHORT, 
                                  locale).format(new Date( ));
%>
<html
<head
<title><% out.print(title); %></title>
</head>
<body
<center>
<h1><% out.print(title); %></h1>
</centrado>
<div alineado="centrado">
<p>Fecha local: <%  out.print(date); %></p>
</div>
</body>
</html>

Moneda específica de la región

Se puede usar la clase java.text.NumberFormat y su método estático getCurrencyInstance() para formatear números. Por ejemplo, en monedas específicas de la región de tipo long y double. El siguiente ejemplo muestra cómo formatear monedas según la región especificada:

<%@ page import="java.io."*,java.util.Locale" %>
<%@ page import="javax.servlet."*,javax.servlet.http.* "%>
<%@ page import="java.text.NumberFormat,java.util.Date" %>
<%
    String title = "Moneda específica de la región";
    //Obtener el Locale del cliente
    Locale locale = request.getLocale( );
    NumberFormat nft = NumberFormat.getCurrencyInstance(locale);
    String formattedCurr = nft.format(1000000);
%>
<html
<head
<title><% out.print(title); %></title>
</head>
<body
<center>
<h1><% out.print(title); %></h1>
</centrado>
<div alineado="centrado">
<p>Currency Formatted: <%  out.print(formattedCurr); %></p>
</div>
</body>
</html>

Porcentaje específico de la región

Se puede usar la clase java.text.NumberFormat y su método estático getPercentInstance() para formatear porcentajes. El siguiente ejemplo nos muestra cómo formatear porcentajes según la región especificada:

<%@ page import="java.io."*,java.util.Locale" %>
<%@ page import="javax.servlet."*,javax.servlet.http.* "%>
<%@ page import="java.text.NumberFormat,java.util.Date" %>
<%
    String title = "Porcentaje Específico del Locale";
    //Obtener el Locale del cliente
    Locale locale = request.getLocale( );
    NumberFormat nft = NumberFormat.getPercentInstance(locale);
    String formattedPerc = nft.format(0.51);
%>
<html
<head
<title><% out.print(title); %></title>
</head>
<body
<center>
<h1><% out.print(title); %></h1>
</centrado>
<div alineado="centrado">
<p>Porcentaje Formateado: <%  out.print(formattedPerc); %></p>
</div>
</body>
</html>