Сервлеты - интернационализация

Прежде чем мы продолжим, позвольте мне объяснить три важных термина:

  • Internationalization (i18n) - Это означает, что веб-сайт может предоставлять различные версии контента, переведенные на язык или национальность посетителя.

  • Localization (l10n) - Это означает добавление ресурсов на веб-сайт для адаптации к конкретному географическому или культурному региону.

  • locale- Это особый культурный или географический регион. Обычно это символ языка, за которым следует символ страны, разделенный знаком подчеркивания. Например, «en_US» представляет собой английский язык для США.

Есть ряд вещей, о которых следует позаботиться при создании глобального веб-сайта. Этот учебник не даст вам полной информации по этому поводу, но он даст вам хороший пример того, как вы можете предложить свою веб-страницу на разных языках интернет-сообществу, дифференцируя их местоположение, то есть локаль.

Сервлет может выбрать подходящую версию сайта в зависимости от локали запрашивающего и предоставить соответствующую версию сайта в соответствии с местным языком, культурой и требованиями. Ниже приведен метод объекта запроса, который возвращает объект Locale.

java.util.Locale request.getLocale()

Определение локали

Ниже приведены важные методы локализации, которые вы можете использовать для определения местоположения, языка и, конечно же, локали запрашивающей стороны. Все перечисленные ниже методы отображают название страны и язык, заданные в браузере запрашивающей стороны.

Sr.No. Метод и описание
1

String getCountry()

Этот метод возвращает код страны / региона в верхнем регистре для данной локали в двухбуквенном формате ISO 3166.

2

String getDisplayCountry()

Этот метод возвращает название страны языкового стандарта, которое подходит для отображения пользователю.

3

String getLanguage()

Этот метод возвращает код языка в нижнем регистре для данной локали в формате ISO 639.

4

String getDisplayLanguage()

Этот метод возвращает имя языка локали, которое подходит для отображения пользователю.

5

String getISO3Country()

Этот метод возвращает трехбуквенное сокращение для страны этого языкового стандарта.

6

String getISO3Language()

Этот метод возвращает трехбуквенное сокращение для языка данной локали.

пример

В этом примере показано, как вы отображаете язык и связанную страну для запроса -

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>"
      );
   }
}

Настройка языков

Сервлет может выводить страницу, написанную на западноевропейском языке, таком как английский, испанский, немецкий, французский, итальянский, голландский и т. Д. Здесь важно установить заголовок ContentLanguage для правильного отображения всех символов.

Второй момент - отобразить все специальные символы с помощью сущностей HTML, например «& # 241;» представляет собой «ñ» и «& # 161;» представляет "¡" следующим образом:

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&ntilde;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&ntilde;ol:" + "</h1>\n" +
               "<h1>" + "&iexcl;Hola Mundo!" + "</h1>\n" +
            "</body>
         </html>"
      );
   }
}

Даты в зависимости от региона

Вы можете использовать класс java.text.DateFormat и его статический метод getDateTimeInstance () для форматирования даты и времени в зависимости от локали. Ниже приведен пример, который показывает, как форматировать даты, специфичные для данной локали.

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>"
      );
   }
}

Валюта для конкретной страны

Вы можете использовать класс java.txt.NumberFormat и его статический метод getCurrencyInstance () для форматирования числа, например длинного или двойного типа, в валюте конкретной локали. Ниже приведен пример, который показывает, как форматировать валюту, специфичную для данной локали.

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>"
      );
   }
}

Процент для конкретного региона

Вы можете использовать класс java.txt.NumberFormat и его статический метод getPercentInstance (), чтобы получить процентное значение для конкретного языкового стандарта. Ниже приведен пример, который показывает, как отформатировать процент, специфичный для данной локали.

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>"
      );
   }
}