Servlets - การทำให้เป็นสากล

ก่อนที่เราจะดำเนินการต่อให้ฉันอธิบายคำศัพท์สำคัญสามข้อ -

  • Internationalization (i18n) - หมายถึงการเปิดใช้งานเว็บไซต์เพื่อให้บริการเนื้อหาเวอร์ชันต่างๆที่แปลเป็นภาษาหรือสัญชาติของผู้เข้าชม

  • Localization (l10n) - นี่หมายถึงการเพิ่มทรัพยากรในเว็บไซต์เพื่อปรับให้เข้ากับภูมิภาคทางภูมิศาสตร์หรือวัฒนธรรมเฉพาะ

  • locale- นี่คือภูมิภาคทางวัฒนธรรมหรือทางภูมิศาสตร์โดยเฉพาะ โดยปกติจะเรียกว่าสัญลักษณ์ภาษาตามด้วยสัญลักษณ์ประเทศซึ่งคั่นด้วยเครื่องหมายขีดล่าง ตัวอย่างเช่น "en_US" แสดงถึงภาษาอังกฤษสำหรับสหรัฐอเมริกา

มีหลายรายการที่ควรได้รับการดูแลในขณะที่สร้างเว็บไซต์ทั่วโลก บทช่วยสอนนี้ไม่ได้ให้รายละเอียดที่สมบูรณ์เกี่ยวกับเรื่องนี้ แต่จะให้ตัวอย่างที่ดีเกี่ยวกับวิธีที่คุณสามารถนำเสนอหน้าเว็บของคุณในภาษาต่างๆให้กับชุมชนอินเทอร์เน็ตโดยการแยกความแตกต่างของสถานที่ตั้งเช่นโลแคล

servlet สามารถรับเวอร์ชันที่เหมาะสมของไซต์ตามโลแคลของผู้ร้องขอและจัดเตรียมเวอร์ชันไซต์ที่เหมาะสมตามภาษาวัฒนธรรมและข้อกำหนดในท้องถิ่น ต่อไปนี้เป็นวิธีการร้องขอวัตถุที่ส่งคืนวัตถุ Locale

java.util.Locale request.getLocale()

กำลังตรวจหาสถานที่

ต่อไปนี้เป็นวิธีการโลแคลที่สำคัญซึ่งคุณสามารถใช้เพื่อตรวจหาตำแหน่งภาษาและภาษาของหลักสูตรของผู้ร้องขอ วิธีการด้านล่างทั้งหมดแสดงชื่อประเทศและชื่อภาษาที่ตั้งไว้ในเบราว์เซอร์ของผู้ร้องขอ

ซีเนียร์ วิธีการและคำอธิบาย
1

String getCountry()

วิธีนี้ส่งคืนรหัสประเทศ / ภูมิภาคในตัวพิมพ์ใหญ่สำหรับโลแคลนี้ในรูปแบบ 2 ตัวอักษร ISO 3166

2

String getDisplayCountry()

วิธีนี้ส่งคืนชื่อสำหรับประเทศของโลแคลที่เหมาะสมสำหรับการแสดงต่อผู้ใช้

3

String getLanguage()

วิธีนี้ส่งคืนรหัสภาษาเป็นตัวพิมพ์เล็กสำหรับโลแคลนี้ในรูปแบบ ISO 639

4

String getDisplayLanguage()

เมธอดนี้ส่งคืนชื่อสำหรับภาษาของโลแคลที่เหมาะสมสำหรับการแสดงต่อผู้ใช้

5

String getISO3Country()

วิธีนี้ส่งคืนตัวย่อสามตัวอักษรสำหรับประเทศของสถานที่นี้

6

String getISO3Language()

วิธีนี้ส่งคืนตัวย่อสามตัวอักษรสำหรับภาษาของโลแคลนี้

ตัวอย่าง

ตัวอย่างนี้แสดงวิธีที่คุณแสดงภาษาและประเทศที่เกี่ยวข้องสำหรับคำขอ -

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

การตั้งค่าภาษา

servlet สามารถแสดงผลหน้าที่เขียนด้วยภาษายุโรปตะวันตกเช่นอังกฤษสเปนเยอรมันฝรั่งเศสอิตาลีดัตช์เป็นต้นที่นี่สิ่งสำคัญคือต้องตั้งค่าส่วนหัว ContentLanguage เพื่อแสดงอักขระทั้งหมดอย่างถูกต้อง

จุดที่สองคือการแสดงอักขระพิเศษทั้งหมดโดยใช้เอนทิตี HTML ตัวอย่างเช่น "& # 241;" แสดงถึง "ñ" และ "& # 161;" แทน "¡" ดังนี้:

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

วันที่เฉพาะของสถานที่

คุณสามารถใช้คลาส java.text.DateFormat และเมธอด getDateTimeInstance () แบบคงที่เพื่อจัดรูปแบบวันที่และเวลาเฉพาะสำหรับโลแคล ต่อไปนี้เป็นตัวอย่างที่แสดงวิธีจัดรูปแบบวันที่เฉพาะสำหรับสถานที่ที่กำหนด -

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

สกุลเงินเฉพาะของสถานที่

คุณสามารถใช้คลาส java.txt.NumberFormat และเมธอด getCurrencyInstance () แบบคงที่เพื่อจัดรูปแบบตัวเลขเช่นแบบยาวหรือแบบคู่ในสกุลเงินเฉพาะโลแคล ต่อไปนี้เป็นตัวอย่างที่แสดงวิธีจัดรูปแบบสกุลเงินเฉพาะสำหรับสถานที่ที่กำหนด -

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

เปอร์เซ็นต์เฉพาะของสถานที่

คุณสามารถใช้คลาส java.txt.NumberFormat และเมธอด getPercentInstance () แบบคงที่เพื่อรับเปอร์เซ็นต์เฉพาะโลแคล ต่อไปนี้เป็นตัวอย่างที่แสดงวิธีจัดรูปแบบเปอร์เซ็นต์เฉพาะสำหรับโลแคลที่กำหนด -

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