
- Servlet 教程
- Servlet - 首頁
- Servlet - 概述
- Servlet - 環境設定
- Servlet - 生命週期
- Servlet - 示例
- Servlet - 表單資料
- Servlet - 客戶端請求
- Servlet - 伺服器響應
- Servlet - HTTP 狀態碼
- Servlet - 編寫過濾器
- Servlet - 異常處理
- Servlet - Cookie 處理
- Servlet - Session跟蹤
- Servlet - 資料庫訪問
- Servlet - 檔案上傳
- Servlet - 日期處理
- Servlet - 頁面重定向
- Servlet - 點選計數器
- Servlet - 自動重新整理
- Servlet - 傳送郵件
- Servlet - 打包
- Servlet - 除錯
- Servlet - 國際化
- Servlet - 註解
- Servlet 有用資源
- Servlet - 常見問題解答
- Servlet - 快速指南
- Servlet - 有用資源
- Servlet - 討論
Servlet - 國際化
在我們繼續之前,讓我解釋三個重要的術語:
國際化 (i18n) - 這意味著使網站能夠提供不同版本的翻譯內容,以適應訪問者的語言或國籍。
本地化 (l10n) - 這意味著向網站新增資源,以適應特定的地理區域或文化區域。
區域設定 (locale) - 這是一個特定的文化或地理區域。它通常指語言程式碼後跟國家/地區程式碼,兩者之間用下劃線分隔。例如,“en_US”表示美國的英語區域設定。
在構建全球性網站時,需要考慮許多因素。本教程不會提供這方面的完整細節,但它將提供一個很好的示例,說明如何透過區分訪問者的位置(即區域設定)為網際網路社群提供不同語言的網頁。
Servlet可以根據請求者的區域設定選擇合適的網站版本,並根據當地語言、文化和需求提供相應的網站版本。以下是request物件的返回Locale物件的方法。
java.util.Locale request.getLocale()
檢測區域設定
以下是您可以用來檢測請求者位置、語言和區域設定的重要區域設定方法。以下所有方法都顯示在請求者瀏覽器中設定的國家/地區名稱和語言名稱。
序號 | 方法及描述 |
---|---|
1 | String getCountry() 此方法返回此區域設定的國家/地區程式碼(大寫),採用ISO 3166 2字母格式。 |
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實體顯示所有特殊字元,例如,“ñ”表示“ñ”,“¡”表示“¡”,如下所示
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()方法以特定於區域設定的貨幣格式化數字(例如long或double型別)。以下示例演示如何格式化特定於給定區域設定的貨幣:
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>" ); } }