Servlets - Internationalisation

Avant de continuer, laissez-moi vous expliquer trois termes importants -

  • Internationalization (i18n) - Cela signifie permettre à un site Web de fournir différentes versions de contenu traduites dans la langue ou la nationalité du visiteur

  • Localization (l10n) - Cela signifie ajouter des ressources à un site Web pour s'adapter à une région géographique ou culturelle particulière.

  • locale- Il s'agit d'une région culturelle ou géographique particulière. Il est généralement appelé symbole de langue suivi d'un symbole de pays séparé par un trait de soulignement. Par exemple, "en_US" représente les paramètres régionaux anglais pour les États-Unis.

Il y a un certain nombre d'éléments qui doivent être pris en compte lors de la création d'un site Web mondial. Ce tutoriel ne vous donnerait pas tous les détails à ce sujet, mais il vous donnerait un bon exemple sur la façon dont vous pouvez offrir votre page Web dans différentes langues à la communauté Internet en différenciant leur emplacement, c'est-à-dire les paramètres régionaux.

Un servlet peut récupérer la version appropriée du site en fonction des paramètres régionaux du demandeur et fournir une version de site appropriée en fonction de la langue, de la culture et des exigences locales. Voici la méthode d'objet de requête qui renvoie l'objet Locale.

java.util.Locale request.getLocale()

Détection des paramètres régionaux

Voici les méthodes locales importantes que vous pouvez utiliser pour détecter l'emplacement, la langue et bien sûr les paramètres régionaux du demandeur. Toutes les méthodes ci-dessous affichent le nom du pays et le nom de la langue définis dans le navigateur du demandeur.

N ° Sr. Méthode et description
1

String getCountry()

Cette méthode renvoie le code du pays / région en majuscules pour ce paramètre régional au format ISO 3166 à 2 lettres.

2

String getDisplayCountry()

Cette méthode renvoie un nom pour le pays des paramètres régionaux approprié pour l'affichage à l'utilisateur.

3

String getLanguage()

Cette méthode renvoie le code de langue en minuscules pour cette locale au format ISO 639.

4

String getDisplayLanguage()

Cette méthode renvoie un nom pour la langue des paramètres régionaux qui convient à l'affichage pour l'utilisateur.

5

String getISO3Country()

Cette méthode renvoie une abréviation de trois lettres pour le pays de cette locale.

6

String getISO3Language()

Cette méthode renvoie une abréviation de trois lettres pour la langue de cette locale.

Exemple

Cet exemple montre comment afficher une langue et un pays associé pour une demande -

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

Réglage des langues

Un servlet peut afficher une page écrite dans une langue d'Europe occidentale telle que l'anglais, l'espagnol, l'allemand, le français, l'italien, le néerlandais, etc. Ici, il est important de définir l'en-tête ContentLanguage pour afficher correctement tous les caractères.

Le deuxième point est d'afficher tous les caractères spéciaux à l'aide d'entités HTML, par exemple, "& # 241;" représente "ñ" et "& # 161;" représente "¡" comme suit:

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

Dates spécifiques aux paramètres régionaux

Vous pouvez utiliser la classe java.text.DateFormat et sa méthode statique getDateTimeInstance () pour formater la date et l'heure spécifiques aux paramètres régionaux. Voici l'exemple qui montre comment formater des dates spécifiques à une locale donnée -

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

Monnaie spécifique aux paramètres régionaux

Vous pouvez utiliser la classe java.txt.NumberFormat et sa méthode statique getCurrencyInstance () pour formater un nombre, tel qu'un type long ou double, dans une devise spécifique aux paramètres régionaux. Voici l'exemple qui montre comment formater une devise spécifique à une locale donnée -

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

Pourcentage spécifique aux paramètres régionaux

Vous pouvez utiliser la classe java.txt.NumberFormat et sa méthode statique getPercentInstance () pour obtenir un pourcentage spécifique aux paramètres régionaux. Voici l'exemple qui montre comment formater le pourcentage spécifique à une locale donnée -

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