JSP - Internacionalización | i18n | l10n
En este capítulo, discutiremos el concepto de internacionalización en JSP. Antes de continuar, comprendamos los siguientes tres términos importantes:
Internationalization (i18n) - Esto significa permitir que un sitio web proporcione diferentes versiones de contenido traducidas al idioma o nacionalidad del visitante.
Localization (l10n) - Esto significa agregar recursos a un sitio web para adaptarlo a una región geográfica o cultural en particular, por ejemplo, la traducción del hindi a un sitio web.
locale- Ésta es una región geográfica o cultural particular. Por lo general, se lo conoce como un símbolo de idioma seguido de un símbolo de país que están separados por un guión bajo. Por ejemplo, "en_US"representa la configuración regional en inglés de EE. UU.
Hay una serie de elementos que deben tenerse en cuenta al crear un sitio web global. Este tutorial no le dará detalles completos sobre esto, pero le dará un buen ejemplo de cómo puede ofrecer su página web en diferentes idiomas a la comunidad de Internet al diferenciar su ubicación, es decir, la configuración regional.
Una JSP puede elegir la versión adecuada del sitio según la configuración regional del solicitante y proporcionar la versión adecuada del sitio de acuerdo con el idioma, la cultura y los requisitos locales. A continuación se muestra el método del objeto de solicitud que devuelve el objeto Locale.
java.util.Locale request.getLocale()
Detectando la configuración regional
A continuación se muestran los métodos de configuración regional importantes que puede utilizar para detectar requester's location, language y por supuesto locale. Todos los métodos a continuación muestran el nombre del país y el nombre del idioma establecidos en el navegador del solicitante.
S.No. | Método y descripción |
---|---|
1 | String getCountry() Este método devuelve el código de país / región en mayúsculas para esta configuración regional en formato ISO 3166 de 2 letras. |
2 | String getDisplayCountry() Este método devuelve un nombre para el país de la configuración regional que es apropiado para mostrar al usuario. |
3 | String getLanguage() Este método devuelve el código de idioma en minúsculas para esta configuración regional en formato ISO 639. |
4 | String getDisplayLanguage() Este método devuelve un nombre para el idioma de la configuración regional que es apropiado para mostrar al usuario. |
5 | String getISO3Country() Este método devuelve una abreviatura de tres letras para el país de esta configuración regional. |
6 | String getISO3Language() Este método devuelve una abreviatura de tres letras para el idioma de esta configuración regional. |
Ejemplo
El siguiente ejemplo muestra cómo mostrar un idioma y un país asociado para una solicitud en una JSP:
<%@ page import = "java.io.*,java.util.Locale" %>
<%@ page import = "javax.servlet.*,javax.servlet.http.* "%>
<%
//Get the client's Locale
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 idiomas
Un JSP puede generar una página escrita en un idioma de Europa occidental como inglés, español, alemán, francés, italiano, holandés, etc. Aquí es importante configurar el encabezado Content-Language para mostrar todos los caracteres correctamente.
Otro punto importante es mostrar todos los caracteres especiales usando entidades HTML; por ejemplo,"ñ" representa "ñ"y "¡" representa "¡" como sigue -
<%@ 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>
Fechas específicas de la configuración regional
Puedes usar el java.text.DateFormat clase y su estática getDateTimeInstance( )método para formatear la fecha y la hora específicas de la configuración regional. A continuación se muestra el ejemplo que muestra cómo formatear fechas específicas para una configuración regional determinada:
<%@ 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 configuración regional
Puedes usar el java.txt.NumberFormat clase y su estática getCurrencyInstance( )método para formatear un número, como un tipo largo o doble, en una moneda específica de la configuración regional. A continuación se muestra el ejemplo que muestra cómo formatear una moneda específica para una configuración regional determinada:
<%@ 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 configuración regional
Puedes usar el java.txt.NumberFormat clase y su estática getPercentInstance( )método para obtener el porcentaje específico de la configuración regional. El siguiente ejemplo muestra cómo formatear el porcentaje específico de una configuración regional determinada:
<%@ 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>