В данной статье мы рассмотрим механизм интернационализации приложения при работе с сервлетами.
Существует много деталей, которые относятся к интернационализации (язык, формат даты, времени, валюты и т.д.). Данные о пользователе могут быть получены с помощью класса Locale. Он помогает нам обеспечивать интернационализацию.
Для понимания того, как это работает на практике, рассмотрим простой пример.
В качестве основы возьмём приложение из данной статьи.
Класс LocaleDemo.java
package net.proselyte.servletstutorial;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Locale;
/**
* Simple servlet that demonstrates work with {@link Locale}.
*
* @author Eugene Suleimanov
*/
public class LocaleDemo extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// Locale locale = new Locale("uk_UA");
Locale locale = new Locale("us_US");
String language = locale.getLanguage();
response.setContentType("text/html");
response.setCharacterEncoding("UTF-8");
String docType = "<!DOCTYPE html>";
String title = "Locale Demo";
PrintWriter writer = response.getWriter();
if (locale.getLanguage().equalsIgnoreCase("uk_ua")) {
title = "Демонстрация локализации";
writer.println(docType + "<html>" +
"<head>" +
"<title>" + title +
"</title>" +
"</head>" +
"<body>" +
"<h1>Данные локализации: </h1>" +
"<h2>Локализация: </h2>" + locale +
"<h2>Язык: </h2>" + language +
"</body>" +
"</html>");
} else {
writer.println(docType + "<html>" +
"<head>" +
"<title>" + title +
"</title>" +
"</head>" +
"<body>" +
"<h1>Locale Details: </h1>" +
"<h2>Locale: </h2>" + locale +
"<h2>Language: </h2>" + language +
"</body>" +
"</html>");
}
}
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
Файл web.xml
<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd" >
<web-app>
<display-name>Servlets Tutorial</display-name>
<servlet>
<servlet-name>SimpleServlet</servlet-name>
<servlet-class>net.proselyte.servletstutorial.SimpleServlet</servlet-class>
</servlet>
<servlet>
<servlet-name>LocaleDemo</servlet-name>
<servlet-class>net.proselyte.servletstutorial.LocaleDemo</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>SimpleServlet</servlet-name>
<url-pattern>/SimpleServlet</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>LocaleDemo</servlet-name>
<url-pattern>/LocaleDemo</url-pattern>
</servlet-mapping>
</web-app>
Выполним в консоли команду:
mvn tomcat7:run
Откроем браузер и перейдём по ссылке:
http://localhost:8088/LocaleDemo
В результате мы получим следующую страницу:
Если мы изменим класс LocaleDemo и выставим локализацию uk_UA:
package net.proselyte.servletstutorial;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Locale;
/**
* Simple servlet that demonstrates work with {@link Locale}.
*
* @author Eugene Suleimanov
*/
public class LocaleDemo extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
Locale locale = new Locale("uk_UA");
// Locale locale = new Locale("us_US");
String language = locale.getLanguage();
response.setContentType("text/html");
response.setCharacterEncoding("UTF-8");
String docType = "<!DOCTYPE html>";
String title = "Locale Demo";
PrintWriter writer = response.getWriter();
if (locale.getLanguage().equalsIgnoreCase("uk_ua")) {
title = "Демонстрация локализации";
writer.println(docType + "<html>" +
"<head>" +
"<title>" + title +
"</title>" +
"</head>" +
"<body>" +
"<h1>Данные локализации: </h1>" +
"<h2>Локализация: </h2>" + locale +
"<h2>Язык: </h2>" + language +
"</body>" +
"</html>");
} else {
writer.println(docType + "<html>" +
"<head>" +
"<title>" + title +
"</title>" +
"</head>" +
"<body>" +
"<h1>Locale Details: </h1>" +
"<h2>Locale: </h2>" + locale +
"<h2>Language: </h2>" + language +
"</body>" +
"</html>");
}
}
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
Выполним в консоли команду:
mvn tomcat7:run
Откроем браузер и перейдём по ссылке:
http://localhost:8088/LocaleDemo
В результате мы получим следующую страницу:
На этом мы заканчиваем изучение интернационализации при работе с сервлетами.
В следующей статье мы рассмотрим способ загрузки файлов.