English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Internationalisation Servlet

Avant de commencer, regardons d'abord trois termes importants :

  • Internationalisation (i18n) :Cela signifie que le site Web propose différentes versions de traduction en fonction de la langue ou de la nationalité de l'utilisateur.

  • Localisation (l10n) :Cela signifie ajouter des ressources au site Web pour qu'il s'adapte à une région géographique ou culturelle spécifique, par exemple, traduire le site Web en hindi (Hindi).

  • Configuration régionale (locale) :C'est une région culturelle ou géographique spéciale. Il s'agit généralement d'un symbole de langue suivi d'un trait de soulignement et d'un symbole de pays. Par exemple, "en_US" signifie une configuration régionale anglaise pour les États-Unis.

Lors de la création d'un site Web mondial, il y a quelques points à prendre en compte. Ce tutoriel ne couvre pas en détail ces points, mais il vous montre comment, par une bonne exemple, présenter des pages Web dans différentes langues grâce à une localisation différenciée (c'est-à-dire la configuration régionale).

Un servlet peut choisir la version correspondante du site Web en fonction de la configuration régionale du demandeur, et fournir la version du site Web correspondante en fonction de la langue, de la culture et des besoins locaux. Voici les méthodes retournées par l'objet request pour obtenir l'objet Locale.

java.util.Locale request.getLocale()

Détection de la configuration régionale

Ci-dessous, une liste des méthodes de configuration régionale importantes est présentée. Vous pouvez les utiliser pour détecter la localisation, la langue et les paramètres régionaux du demandeur. Toutes les méthodes ci-dessous affichent le nom du pays et le nom de la langue configurés dans le navigateur du demandeur.

Numéro de séquenceMéthode & Description
1String getCountry()
Cette méthode utilise 2 Un grand alphabet majuscule sous forme d'ISO 3166 /Format retourne le code du pays de la région
2
String getDisplayCountry()
3
String getLanguage() 639
4String getDisplayLanguage()
53Country()
Cette méthode retourne l'abréviation de trois lettres du pays de la région.
63Language()
Cette méthode retourne l'abréviation de trois lettres de la langue de la région.

Exemple en ligne

L'exemple suivant montre comment afficher la langue et le pays associés à une requête :

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
  {
      // Obtenir la configuration régionale client
      Locale locale = request.getLocale();
      String language = locale.getLanguage();
      String country = locale.getCountry();
      // Définir le type de contenu de la réponse
      response.setContentType("text/html;charset=UTF-8");
      PrintWriter out = response.getWriter();
      String title = "Détecter la configuration régionale";
      String docType = "<!DOCTYPE html> \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>");
  }
}

Paramètres de langue

Le Servlet peut afficher des pages écrites dans des langues d'Europe occidentale (comme l'anglais, l'espagnol, l'allemand, le français, l'italien, le néerlandais, etc.). Ici, pour afficher correctement tous les caractères, définir Content-L'en-tête Language est très important.

Le deuxième point est d'utiliser les entités HTML pour afficher tous les caractères spéciaux, par exemple, "ñ" représente "ñ", "¡" 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
  {
    // Définir le type de contenu de la réponse
    response.setContentType("text/html;charset=UTF-8");
    PrintWriter out = response.getWriter();
    // Définir le code de langue espagnol
    response.setHeader("Content-Language", "es");
    String title = "En Español";
    String docType = "<!DOCTYPE html> \n";
     out.println(docType +
     "<html>\n" +
     "<head><title>" + title + "</title></head>\n" +
     "<body bgcolor="#f0f0f0">\n" +
     "<h1>" + "En Español:" + "</h1>\n" +
     "<h1>" + "¡Hola Mundo!" + "</h1>\n" +
     "</body></html>");
  }
}

Date spécifique à la région

Vous pouvez utiliser la classe java.text.DateFormat et sa méthode statique getDateTimeInstance() pour formater les dates et heures spécifiques à la région. L'exemple suivant montre comment formater une date spécifique à une région 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
  {
    // Définir le type de contenu de la réponse
    response.setContentType("text/html;charset=UTF-8");
    PrintWriter out = response.getWriter();
    // Obtenir la configuration régionale client
    Locale locale = request.getLocale( );
    String date = DateFormat.getDateTimeInstance(
                                  DateFormat.FULL, 
                                  DateFormat.SHORT, 
                                  locale).format(new Date( ));
    String title = "Date spécifique à la localisation";
    String docType = "<!DOCTYPE html> \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 à la localisation

Vous pouvez utiliser la classe java.text.NumberFormat et sa méthode statique getCurrencyInstance() pour formater des nombres (comme des types long ou double) en monnaie spécifique à la localisation. L'exemple suivant montre comment formater une monnaie spécifique à une localisation 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
  {
    // Définir le type de contenu de la réponse
    response.setContentType("text/html;charset=UTF-8");
    PrintWriter out = response.getWriter();
    // Obtenir la configuration régionale client
    Locale locale = request.getLocale( );
    NumberFormat nft = NumberFormat.getCurrencyInstance(locale);
    String formattedCurr = nft.format(1000000);
    String title = "Monnaie spécifique à la localisation";
    String docType = "<!DOCTYPE html> \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 à la localisation

Vous pouvez utiliser la classe java.text.NumberFormat et sa méthode statique getPercentInstance() pour formater des pourcentages spécifiques à la localisation. L'exemple suivant montre comment formater un pourcentage spécifique à une localisation 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
  {
    // Définir le type de contenu de la réponse
    response.setContentType("text/html;charset=UTF-8");
    PrintWriter out = response.getWriter();
    // Obtenir la configuration régionale client
    Locale locale = request.getLocale( );
    NumberFormat nft = NumberFormat.getPercentInstance(locale);
    String formattedPerc = nft.format(0.51);
    String title = "Pourcentage spécifique à la région";
    String docType = "<!DOCTYPE html> \n";
      out.println(docType +
      "<html>\n" +
      "<head><title>" + title + "</title></head>\n" +
      "<body bgcolor="#f0f0f0">\n" +
      "<h1 align="center">" + formattedPerc + "</h1>\n" +
      "</body></html>");
  }
}