Учебники

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

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

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

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

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

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

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

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

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

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

java.util.Locale request.getLocale() 

Обнаружение локали

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

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

Строка getCountry ()

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

2

Строка getDisplayCountry ()

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

3

Строка getLanguage ()

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

4

Строка getDisplayLanguage ()

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

5

Строка getISO3Country ()

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

6

Строка getISO3Language ()

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

Строка getCountry ()

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

Строка getDisplayCountry ()

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

Строка getLanguage ()

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

Строка getDisplayLanguage ()

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

Строка getISO3Country ()

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

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

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