ก่อนที่เราจะเริ่มต้น จำเป็นต้องอธิบายแนวคิดสำคัญหลายประการ:
การทำให้เป็นสากล (i18n): ระบุว่าเพจจะแสดงผลด้วยการแปลที่แตกต่างกันตามภาษาหรือประเทศของผู้เข้าชม
การแปลเป็นภาษาท้องถิ่น (l10n): การเพิ่มทรัพยากรลงในเว็บไซต์เพื่อปรับให้เข้ากับภูมิภาคและวัฒนธรรมที่แตกต่างกัน เช่นเดียวกับเว็บไซต์เวอร์ชันอินเดีย
ภูมิภาค: นี่คือภูมิภาคหรือวัฒนธรรมที่เฉพาะเจาะจง ซึ่งมักจะถือเป็นเครื่องหมายทางภาษาและเครื่องหมายระดับชาติที่เชื่อมต่อกันด้วยเครื่องหมายขีดล่าง ตัวอย่างเช่น "en_US" หมายถึงภูมิภาคที่พูดภาษาอังกฤษของสหรัฐอเมริกา
หากคุณต้องการสร้างเว็บไซต์ระดับโลก คุณต้องดูแลหลายรายการ บทนี้จะบอกรายละเอียดวิธีจัดการกับปัญหาความเป็นสากล และยกตัวอย่างเพื่อให้คุณเข้าใจลึกซึ้งยิ่งขึ้น
คอนเทนเนอร์ JSP สามารถจัดเตรียมเวอร์ชันเพจที่ถูกต้องตามแอตทริบิวต์ตำแหน่งที่ตั้งของคำขอ ถัดไป ไวยากรณ์ของวิธีการรับอ็อบเจ็กต์ Locale ผ่านอ็อบเจ็กต์คำขอจะได้รับ:
java.util.Locale request.getLocale()
ตารางต่อไปนี้แสดงรายการวิธีการที่สำคัญกว่าในออบเจ็กต์ Locale ซึ่งใช้ในการตรวจหาภูมิภาค ภาษา และภูมิภาคของออบเจ็กต์คำขอ วิธีการทั้งหมดนี้จะแสดงชื่อประเทศและชื่อภาษาในเบราว์เซอร์:
หมายเลขซีเรียล | วิธีการ และ คำอธิบาย |
---|---|
1 | สตริง getCountry() ส่งคืนรหัสประเทศ/ภูมิภาคเป็นตัวพิมพ์ใหญ่ภาษาอังกฤษ หรือภูมิภาคในรูปแบบ ISO 3166 ตัวอักษร 2 ตัว |
2 | สตริง getDisplayCountry() ส่งคืนชื่อประเทศที่จะแสดงแก่ผู้ใช้ |
3 | สตริง getLanguage() ส่งคืนรหัสภาษาเวอร์ชันตัวพิมพ์เล็กภาษาอังกฤษ หรือพื้นที่ในรูปแบบ ISO 639 |
4 | สตริง getDisplayLanguage() ส่งคืนชื่อภาษาที่จะแสดงให้กับผู้ใช้ |
5 | สตริง getISO3Country() ส่งคืนตัวย่อ 3 ตัวอักษรของชื่อประเทศ |
6 | สตริง getISO3Language() ส่งคืนตัวย่อ 3 ตัวอักษรของชื่อภาษา |
ตัวอย่างนี้แสดงวิธีการแสดงภาษาและประเทศใน JSP:
<%@ page import="java.io.*,java.util.Locale" %><%@ page import="javax.servlet.*,javax.servlet.http.* "%><% //รับลูกค้า ข้อมูลการแปลเทอร์มินัล Locale = request.getLocale(); String language = locale.getLanguage(); String Country = locale.getCountry(); %><html><head><title>การตรวจจับ สถานที่</title></head><body><center><h1>กำลังตรวจหาสถานที่</h1></center><p align="center"><% out.println("ภาษา : " + ภาษา + " <br />"); out.println("ประเทศ : " + ประเทศ + "<br />");%></p></body></html>
JSP สามารถใช้ภาษายุโรปตะวันตกเพื่อส่งออกหน้า เช่น อังกฤษ สเปน เยอรมัน ฝรั่งเศส อิตาลี ฯลฯ จะเห็นได้ว่าการตั้งค่าส่วนหัวของ Content-Language เพื่อแสดงอักขระทั้งหมดอย่างถูกต้องเป็นสิ่งสำคัญ
ประเด็นที่สองคือคุณต้องใช้เอนทิตีอักขระ HTML เพื่อแสดงอักขระพิเศษ ตัวอย่างเช่น "ñ" หมายถึง "?" และ "¡" หมายถึง "?":
<%@ page import="java.io.*,java.util.Locale" %><%@ page import="javax.servlet.*,javax.servlet.http.* "%><% // ตั้งค่าการตอบสนอง ประเภทเนื้อหา response.setContentType("text/html"); // ตั้งรหัสภาษาสเปน response.setHeader("Content-Language", "es"); String title = "En Espa?ol"; %><html><head><title><% out.print(หัวเรื่อง); %></title></head><body><center><h1><% out.print(หัวเรื่อง); </h1></center><div align="center"><p>สเปน?ol</p><p>?Hola Mundo!</p></div></body></html>
คุณสามารถใช้คลาส java.text.DateFormat และเมธอดสแตติก getDateTimeInstance() เพื่อจัดรูปแบบวันที่และเวลา ตัวอย่างต่อไปนี้แสดงวิธีจัดรูปแบบวันที่และเวลาตามช่วงที่ระบุ:
<%@ page import="java.io.*,java.util.Locale" %><%@ page import="javax.servlet.*,javax.servlet.http.* "%><%@ page import= "java.text.DateFormat,java.util.Date" %><% String title = "วันที่ระบุสถานที่"; // รับสถานที่เกิดเหตุของไคลเอ็นต์ สถานที่ = request.getLocale( ); DateFormat.getDateTimeInstance( DateFormat.FULL, DateFormat.SHORT, locale).format(วันที่ใหม่( )); %><html><head><title><% out.print(title); /head><body><center><h1><% out.print(title); %></h1></center><div align="center"><p>วันที่ท้องถิ่น: <% out.print(วันที่); %></p></div></body></html>
สามารถจัดรูปแบบตัวเลขได้โดยใช้คลาส java.text.NumberFormat และเมธอดสแตติก getCurrencyInstance() ตัวอย่างเช่น long และ double ในสกุลเงินเฉพาะภูมิภาค ตัวอย่างต่อไปนี้แสดงวิธีจัดรูปแบบสกุลเงินตามสถานที่ที่ระบุ:
<%@ page import="java.io.*,java.util.Locale" %><%@ page import="javax.servlet.*,javax.servlet.http.* "%><%@ page import= "java.text.NumberFormat,java.util.Date" %><% String title = "สกุลเงินเฉพาะของท้องถิ่น"; // รับ Locale Locale ของไคลเอ็นต์ = request.getLocale( ); NumberFormat nft = NumberFormat.getCurrencyInstance(locale); String formattedCurr = nft.format(1000000); %><html><head><title><% out.print(หัวเรื่อง); <center><h1><% out.print(title); %></h1></center><div align="center"><p>สกุลเงินที่จัดรูปแบบ: <% out.print(จัดรูปแบบ Curr); %></p></div></body></html>
คุณสามารถจัดรูปแบบเปอร์เซ็นต์ได้โดยใช้คลาส java.text.NumberFormat และเมธอดสแตติก getPercentInstance() ตัวอย่างต่อไปนี้แสดงวิธีจัดรูปแบบเปอร์เซ็นต์ตามช่วงที่ระบุ:
<%@ page import="java.io.*,java.util.Locale" %><%@ page import="javax.servlet.*,javax.servlet.http.* "%><%@ page import= "java.text.NumberFormat,java.util.Date" %><% String title = "เปอร์เซ็นต์เฉพาะสถานที่"; // รับ Locale Locale ของลูกค้า = request.getLocale( ); NumberFormat.getPercentInstance(locale); String formattedPerc = nft.format(0.51); %><html><head><title><% out.print(หัวเรื่อง); <center><h1><% out.print(title); %></h1></center><div align="center"><p>เปอร์เซ็นต์ที่จัดรูปแบบ: <% out.print(จัดรูปแบบ Perc); %></p></div></body></html>