Руководство по Servlets. Интернационализация.

В данной статье мы рассмотрим механизм интернационализации приложения при работе с сервлетами.

Существует много деталей, которые относятся к интернационализации (язык, формат даты, времени, валюты и т.д.). Данные о пользователе могут быть получены с помощью класса 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

В результате мы получим следующую страницу:

servletsTutorialLocaleDemoUS

 

Если мы изменим класс 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

В результате мы получим следующую страницу:

servletsTutorialLocaleDemoUA

 

На этом мы заканчиваем изучение интернационализации при работе с сервлетами.

В следующей статье мы рассмотрим способ загрузки файлов.