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

JSP 国际化

Avant de commencer, il est nécessaire d'expliquer quelques concepts importants :

  • Internationalisation (i18n) : Indique que une page présente différentes versions de traduction en fonction de la langue ou du pays de l'visitateur.
  • Localisation (l10n) : Ajouter des ressources au site pour qu'il puisse s'adapter à différentes régions et cultures. Par exemple, la version indonésienne du site.
  • Région : c'est une région ou une culture spécifique, généralement considérée comme un signe de langue et un signe de pays connectés par un trait de soulignement. Par exemple, "en_US" représente la région américaine de l'anglais.

Si vous souhaitez créer un site web mondial, vous devez vous soucier d'une série de projets. Ce chapitre vous expliquera en détail comment gérer les problèmes de globalization et fournira des exemples pour approfondir votre compréhension.

Le conteneur JSP peut fournir la version de page correcte en fonction de l'attribut locale de la requête. Ensuite, voici la syntaxe pour obtenir l'objet Locale à partir de l'objet requête :

java.util.Locale request.getLocale() 

Détection Locale

Le tableau suivant énumère les méthodes importantes de l'objet Locale, utilisées pour détecter la région, la langue et la région de l'objet request. Toutes ces méthodes afficheront le nom du pays et le nom de la langue dans le navigateur :

Numéro Méthode &
1 String getCountry()

Retourne le pays/Code de la région en majuscules anglaises, ou ISO 3166 2-
2 String getDisplayCountry()

3 String getLanguage()

Retourne le code de langue en minuscules anglaises, ou ISO 639
4 String getDisplayLanguage()

5 3Country()

Retourne le nom du pays3Abréviation
6 3Language()

Retourne le nom de la langue3Abréviation

Exemple de démonstration

Cette exemple nous montre comment afficher la langue et le pays dans JSP :

<%@ page import="java.io."*,java.util.Locale" %>
<%@ page import="javax.servlet.*,javax.servlet.http.* "%>
<%
   //Obtenir les informations de localisation du client
   Locale locale = request.getLocale();
   String language = locale.getLanguage();
   String country = locale.getCountry();
%>
<html>
<head>
<title>Détection de la Locale</title>
</head>
<body>
<center>
<h1>Détection de la Locale</h1>
</center>
<p align="center">
<% 
   out.println("Langue : "); + language  + "<br />");
   out.println("Pays  : "); + country   + "<br />");
%>
</p>
</body>
</html>

Paramètres de langue

JSP peut utiliser des langues d'Europe occidentale pour afficher une page, par exemple l'anglais, l'espagnol, l'allemand, le français, l'italien, etc. Il est donc évident que la définition du Content-Il est important de définir correctement l'en-tête d'information de langue pour afficher tous les caractères.

Deuxièmement, il est nécessaire d'utiliser des entités de caractères HTML pour afficher les caractères spéciaux, par exemple "ñ"représenteñ,"¡"représente¡ :

<%@ page import="java.io."*,java.util.Locale" %>
<%@ page import="javax.servlet.*,javax.servlet.http.* "%>
<%
    // Définir le type de contenu de la réponse
    response.setContentType("text");/html");
    // Définir le code de langue espagnole.
    response.setHeader("Content"-Language", "es");
    String title = "En Espa?ol";
%>
<html>
<head>
<title><%  out.print(title); %></title>
</head>
<body>
<center>
<h1><%  out.print(title); %></h1>
</center>
<div align="center">
<p>En Espa?ol</p>
<p>?Hola Mundo!/p>
</div>
</body>
</html>

Dates spécifiques à la région

Il est possible d'utiliser la classe java.text.DateFormat et sa méthode statique getDateTimeInstance() pour formater des dates et des heures. L'exemple suivant montre comment formater des dates et des heures en fonction de la région spécifiée :

<%@ page import="java.io."*,java.util.Locale" %>
<%@ page import="javax.servlet.*,javax.servlet.http.* "%>
<%@ page import="java.text.DateFormat,java.util.Date" %>
<%
    String title = "Dates spécifiques à la région";
    //Obtenir le Locale du client
    Locale locale = request.getLocale( );
    String date = DateFormat.getDateTimeInstance(
                                  DateFormat.FULL, 
                                  DateFormat.SHORT, 
                                  locale).format(new Date( ));
%>
<html>
<head>
<title><% out.print(title); %></title>
</head>
<body>
<center>
<h1><% out.print(title); %></h1>
</center>
<div align="center">
<p>Date locale : <%  out.print(date); %></p>
</div>
</body>
</html>

Monnaie spécifique à la région

Il est possible d'utiliser la classe java.text.NumberFormat et sa méthode statique getCurrencyInstance() pour formater des nombres. Par exemple, en monnaie spécifique à la région pour les types long et double. L'exemple suivant montre comment formater des monnaies en fonction de la région spécifiée :

<%@ page import="java.io."*,java.util.Locale" %>
<%@ page import="javax.servlet.*,javax.servlet.http.* "%>
<%@ page import="java.text.NumberFormat,java.util.Date" %>
<%
    String title = "Monnaie spécifique à la région";
    //Obtenir le Locale du client
    Locale locale = request.getLocale( );
    NumberFormat nft = NumberFormat.getCurrencyInstance(locale);
    String formattedCurr = nft.format(1000000);
%>
<html>
<head>
<title><% out.print(title); %></title>
</head>
<body>
<center>
<h1><% out.print(title); %></h1>
</center>
<div align="center">
<p>Monnaie formatée : <%  out.print(formattedCurr); %></p>
</div>
</body>
</html>

Pourcentage spécifique à la région

Il est possible d'utiliser la classe java.text.NumberFormat et sa méthode statique getPercentInstance() pour formater des pourcentages. L'exemple suivant nous montre comment formater des pourcentages en fonction de la région spécifiée :

<%@ page import="java.io."*,java.util.Locale" %>
<%@ page import="javax.servlet.*,javax.servlet.http.* "%>
<%@ page import="java.text.NumberFormat,java.util.Date" %>
<%
    String title = "Pourcentage Spécifique au Locale";
    //Obtenir le Locale du client
    Locale locale = request.getLocale( );
    NumberFormat nft = NumberFormat.getPercentInstance(locale);
    String formattedPerc = nft.format(0.51);
%>
<html>
<head>
<title><% out.print(title); %></title>
</head>
<body>
<center>
<h1><% out.print(title); %></h1>
</center>
<div align="center">
<p>Pourcentage Formatté: <%  out.print(formattedPerc); %></p>
</div>
</body>
</html>