Servlets - Internationalisierung

Bevor wir fortfahren, möchte ich drei wichtige Begriffe erläutern:

  • Internationalization (i18n) - Dies bedeutet, dass eine Website verschiedene Versionen von Inhalten bereitstellen kann, die in die Sprache oder Nationalität des Besuchers übersetzt wurden

  • Localization (l10n) - Dies bedeutet, dass einer Website Ressourcen hinzugefügt werden, um sie an eine bestimmte geografische oder kulturelle Region anzupassen.

  • locale- Dies ist eine bestimmte kulturelle oder geografische Region. Es wird normalerweise als Sprachsymbol bezeichnet, gefolgt von einem Landsymbol, das durch einen Unterstrich getrennt ist. Zum Beispiel steht "en_US" für das englische Gebietsschema für die USA.

Es gibt eine Reihe von Punkten, die beim Aufbau einer globalen Website beachtet werden sollten. Dieses Tutorial würde Ihnen keine vollständigen Details dazu geben, aber es würde Ihnen ein gutes Beispiel dafür geben, wie Sie Ihre Webseite der Internet-Community in verschiedenen Sprachen anbieten können, indem Sie ihren Standort, dh das Gebietsschema, unterscheiden.

Ein Servlet kann eine geeignete Version der Site basierend auf dem Gebietsschema des Anforderers abrufen und eine geeignete Site-Version entsprechend der lokalen Sprache, Kultur und Anforderungen bereitstellen. Es folgt die Methode des Anforderungsobjekts, das das Gebietsschemaobjekt zurückgibt.

java.util.Locale request.getLocale()

Gebietsschema erkennen

Im Folgenden finden Sie wichtige Methoden für das Gebietsschema, mit denen Sie den Standort, die Sprache und natürlich das Gebietsschema des Anforderers ermitteln können. Alle folgenden Methoden zeigen den im Browser des Antragstellers festgelegten Ländernamen und Sprachnamen an.

Sr.Nr. Methode & Beschreibung
1

String getCountry()

Diese Methode gibt den Länder- / Regionalcode in Großbuchstaben für dieses Gebietsschema im 2-Buchstaben-Format ISO 3166 zurück.

2

String getDisplayCountry()

Diese Methode gibt einen Namen für das Land des Gebietsschemas zurück, der für die Anzeige für den Benutzer geeignet ist.

3

String getLanguage()

Diese Methode gibt den Sprachcode für dieses Gebietsschema im ISO 639-Format in Kleinbuchstaben zurück.

4

String getDisplayLanguage()

Diese Methode gibt einen Namen für die Sprache des Gebietsschemas zurück, der für die Anzeige für den Benutzer geeignet ist.

5

String getISO3Country()

Diese Methode gibt eine dreistellige Abkürzung für das Land dieses Gebietsschemas zurück.

6

String getISO3Language()

Diese Methode gibt eine dreistellige Abkürzung für die Sprache dieses Gebietsschemas zurück.

Beispiel

Dieses Beispiel zeigt, wie Sie eine Sprache und ein zugehöriges Land für eine Anfrage anzeigen -

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

Spracheinstellung

Ein Servlet kann eine Seite ausgeben, die in einer westeuropäischen Sprache wie Englisch, Spanisch, Deutsch, Französisch, Italienisch, Niederländisch usw. geschrieben ist. Hier ist es wichtig, den ContentLanguage-Header so einzustellen, dass alle Zeichen richtig angezeigt werden.

Der zweite Punkt besteht darin, alle Sonderzeichen mithilfe von HTML-Entitäten anzuzeigen, z. B. "& # 241;" steht für "ñ" und "& # 161;" steht für "¡" wie folgt:

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

Länderspezifische Daten

Sie können die Klasse java.text.DateFormat und ihre statische Methode getDateTimeInstance () verwenden, um das für das Gebietsschema spezifische Datum und die Uhrzeit zu formatieren. Das folgende Beispiel zeigt, wie Datumsangaben für ein bestimmtes Gebietsschema formatiert werden:

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

Länderspezifische Währung

Sie können die Klasse java.txt.NumberFormat und ihre statische Methode getCurrencyInstance () verwenden, um eine Zahl, z. B. einen langen oder doppelten Typ, in einer länderspezifischen Währung zu formatieren. Das folgende Beispiel zeigt, wie die für ein bestimmtes Gebietsschema spezifische Währung formatiert wird:

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

Länderspezifischer Prozentsatz

Sie können die Klasse java.txt.NumberFormat und ihre statische Methode getPercentInstance () verwenden, um den länderspezifischen Prozentsatz abzurufen. Das folgende Beispiel zeigt, wie der Prozentsatz für ein bestimmtes Gebietsschema formatiert wird.

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