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ñ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ñol:" + "</h1>\n" +
"<h1>" + "¡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>"
);
}
}