JSP Internacionalización
Antes de comenzar, es necesario explicar algunos conceptos importantes:
- Internacionalización (i18n): indica que una página presenta diferentes versiones traducidas según el idioma o país del visitante.
- Localización (l10n): añade 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 un área o cultura específica, generalmente considerada como un indicador de idioma y un indicador de país conectados por un guion bajo. Por ejemplo, "en_US" representa la región de inglés estadounidense.
Si se desea crear un sitio web globalizado, es necesario prestar atención a una serie de aspectos. Este capítulo le explicará en detalle cómo manejar los problemas de internacionalización y proporcionará algunos ejemplos para profundizar la comprensión.
El contenedor JSP puede proporcionar la versión correcta de la página según la propiedad locale de la solicitud (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 locale
La siguiente tabla enumera los métodos más importantes del objeto Locale, utilizados para detectar la región, el idioma y el área del objeto request. Todos estos métodos mostrarán el nombre del país y el nombre del idioma en el navegador:
| N.º | Método & Descripción |
|---|---|
| 1 | String getCountry()Devuelve el código de país/región en mayúsculas en inglés, o la región en formato ISO 3166 de 2 letras |
| 2 | String getDisplayCountry()Devuelve el nombre del país que se mostrará al usuario |
| 3 | String getLanguage()Devuelve el código de idioma en minúsculas en inglés, o la región en formato ISO 639 |
| 4 | String getDisplayLanguage()Devuelve el nombre del idioma que se mostrará al usuario |
| 5 | String getISO3Country()Devuelve la abreviatura de 3 letras del nombre del país |
| 6 | String getISO3Language()Devuelve la abreviatura de 3 letras del nombre del idioma |
Demostración de ejemplo
Este ejemplo nos muestra cómo mostrar el idioma y el país en JSP:
<%@ page import="java.io.*,java.util.Locale" %>
<%@ page import="javax.servlet.*,javax.servlet.http.* "%>
<%
//获取客户端本地化信息
Locale locale = request.getLocale();
String language = locale.getLanguage();
String country = locale.getCountry();
%>
<html>
<head>
<title>Detecting Locale</title>
</head>
<body>
<center>
<h1>Detecting Locale</h1>
</center>
<p align="center">
<%
out.println("Language : " + language + "<br />");
out.println("Country : " + country + "<br />");
%>
</p>
</body>
</html>
Configuración de idioma
JSP puede usar idiomas de Europa occidental para mostrar una página, como inglés, español, alemán, francés, italiano, etc. Por lo tanto, es importante configurar el encabezado de información Content-Language para mostrar correctamente todos los caracteres.
El segundo punto es que se necesitan usar entidades de caracteres HTML para mostrar caracteres especiales, por ejemplo "ñ" representa ñ, y "¡" representa ¡:
<%@ page import="java.io.*,java.util.Locale" %>
<%@ page import="javax.servlet.*,javax.servlet.http.* "%>
<%
// Set response content type
response.setContentType("text/html");
// Set spanish language code.
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>
</center>
<div align="center">
<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 = "Locale Specific Dates";
//Get the client's Locale
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>
</center>
<div align="center">
<p>Local Date: <% 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, los tipos long y double en la moneda específica de la región. El siguiente ejemplo muestra cómo formatear moneda 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 = "Locale Specific Currency";
//Get the client's Locale
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>
</center>
<div align="center">
<p>Formatted Currency: <% 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 = "Locale Specific Percentage";
//Get the client's Locale
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>
</center>
<div align="center">
<p>Formatted Percentage: <% out.print(formattedPerc); %></p>
</div>
</body>
</html>
Otras extensiones