Servlet - Internazionalizzazione

Prima di procedere, lasciatemi spiegare tre termini importanti:

  • Internationalization (i18n) - Ciò significa consentire a un sito web di fornire diverse versioni di contenuti tradotti nella lingua o nazionalità del visitatore

  • Localization (l10n) - Ciò significa aggiungere risorse a un sito web per adattarsi a una particolare regione geografica o culturale.

  • locale- Questa è una particolare regione culturale o geografica. Di solito viene indicato come un simbolo della lingua seguito da un simbolo del paese che è separato da un trattino basso. Ad esempio "en_US" rappresenta la lingua inglese per gli Stati Uniti.

Ci sono un certo numero di elementi che dovrebbero essere presi cura durante la creazione di un sito web globale. Questo tutorial non ti darebbe dettagli completi su questo, ma ti darebbe un buon esempio di come puoi offrire la tua pagina web in diverse lingue alla comunità di Internet differenziando la loro posizione, cioè locale.

Un servlet può prelevare la versione appropriata del sito in base alle impostazioni locali del richiedente e fornire la versione appropriata del sito in base alla lingua, alla cultura e ai requisiti locali. Di seguito è riportato il metodo dell'oggetto richiesta che restituisce l'oggetto Locale.

java.util.Locale request.getLocale()

Rilevamento delle impostazioni locali

Di seguito sono riportati gli importanti metodi locali che è possibile utilizzare per rilevare la posizione, la lingua e, naturalmente, la locale del richiedente. Tutti i metodi seguenti visualizzano il nome del paese e il nome della lingua impostati nel browser del richiedente.

Sr.No. Metodo e descrizione
1

String getCountry()

Questo metodo restituisce il codice del paese / regione in lettere maiuscole per questa lingua nel formato ISO 3166 a 2 lettere.

2

String getDisplayCountry()

Questo metodo restituisce un nome per il paese della locale che è appropriato per la visualizzazione all'utente.

3

String getLanguage()

Questo metodo restituisce il codice della lingua in minuscolo per questa locale nel formato ISO 639.

4

String getDisplayLanguage()

Questo metodo restituisce un nome per la lingua della locale appropriata per la visualizzazione all'utente.

5

String getISO3Country()

Questo metodo restituisce un'abbreviazione di tre lettere per il paese di questa lingua.

6

String getISO3Language()

Questo metodo restituisce un'abbreviazione di tre lettere per la lingua di questa locale.

Esempio

Questo esempio mostra come visualizzare una lingua e un paese associato per una richiesta:

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

Impostazione delle lingue

Un servlet può produrre una pagina scritta in una lingua dell'Europa occidentale come inglese, spagnolo, tedesco, francese, italiano, olandese ecc. Qui è importante impostare l'intestazione ContentLanguage per visualizzare correttamente tutti i caratteri.

Il secondo punto è visualizzare tutti i caratteri speciali utilizzando entità HTML, ad esempio "& # 241;" rappresenta "ñ" e "& # 161;" rappresenta "¡" come segue:

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

Date specifiche locali

È possibile utilizzare la classe java.text.DateFormat e il suo metodo statico getDateTimeInstance () per formattare la data e l'ora specifiche della locale. Di seguito è riportato l'esempio che mostra come formattare date specifiche per una data locale:

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

Valuta specifica locale

È possibile utilizzare la classe java.txt.NumberFormat e il relativo metodo getCurrencyInstance () statico per formattare un numero, come un tipo long o double, in una valuta specifica della locale. Di seguito è riportato l'esempio che mostra come formattare la valuta specifica per una data locale:

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

Percentuale specifica locale

È possibile utilizzare la classe java.txt.NumberFormat e il suo metodo statico getPercentInstance () per ottenere una percentuale specifica della locale. Di seguito è riportato l'esempio che mostra come formattare la percentuale specifica per una data locale:

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