Servlets - Internacionalización
Antes de continuar, permítame explicar 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 adaptarse a una región geográfica o cultural en particular.
locale- Ésta es una región geográfica o cultural particular. Por lo general, se lo denomina símbolo de idioma seguido de un símbolo de país separado 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.
Un servlet puede recoger la versión adecuada del sitio en función de 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 la ubicación, el idioma y, por supuesto, la configuración regional del solicitante. Todos los métodos siguientes muestran el nombre del país y el nombre del idioma establecidos en el navegador del solicitante.
No Señor. | 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
Este ejemplo muestra cómo se muestra un idioma y un país asociado para 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 {
//Get the client's Locale
Locale locale = request.getLocale();
String language = locale.getLanguage();
String country = locale.getCountry();
// Set response content type
response.setContentType("text/html");
PrintWriter out = response.getWriter();
String title = "Detecting Locale";
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>"
);
}
}
Configuración de idiomas
Un servlet 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 ContentLanguage para que muestre todos los caracteres correctamente.
El segundo punto es mostrar todos los caracteres especiales utilizando entidades HTML, por ejemplo, "& # 241;" representa "ñ" y "& # 161;" representa "¡" de la siguiente manera:
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 {
// Set response content type
response.setContentType("text/html");
PrintWriter out = response.getWriter();
// Set spanish language code.
response.setHeader("Content-Language", "es");
String title = "En Españ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ñol:" + "</h1>\n" +
"<h1>" + "¡Hola Mundo!" + "</h1>\n" +
"</body>
</html>"
);
}
}
Fechas específicas de la configuración regional
Puede utilizar la clase java.text.DateFormat y su método estático getDateTimeInstance () 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:
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 {
// Set response content type
response.setContentType("text/html");
PrintWriter out = response.getWriter();
//Get the client's Locale
Locale locale = request.getLocale( );
String date = DateFormat.getDateTimeInstance(DateFormat.FULL,
DateFormat.SHORT, locale).format(new Date( ));
String title = "Locale Specific Dates";
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>"
);
}
}
Moneda específica de la configuración regional
Puede usar la clase java.txt.NumberFormat y su método estático getCurrencyInstance () 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:
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 {
// Set response content type
response.setContentType("text/html");
PrintWriter out = response.getWriter();
//Get the client's Locale
Locale locale = request.getLocale( );
NumberFormat nft = NumberFormat.getCurrencyInstance(locale);
String formattedCurr = nft.format(1000000);
String title = "Locale Specific Currency";
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>"
);
}
}
Porcentaje específico de la configuración regional
Puede usar la clase java.txt.NumberFormat y su método estático getPercentInstance () para obtener un porcentaje específico de la configuración regional. A continuación se muestra el ejemplo que muestra cómo formatear el porcentaje específico de una configuración regional determinada:
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 {
// Set response content type
response.setContentType("text/html");
PrintWriter out = response.getWriter();
//Get the client's Locale
Locale locale = request.getLocale( );
NumberFormat nft = NumberFormat.getPercentInstance(locale);
String formattedPerc = nft.format(0.51);
String title = "Locale Specific Percentage";
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>"
);
}
}