在我們開始之前,讓我來解釋一下三個重要術語:
國際化(i18n): 這意味著使一個網站,提供了不同版本的內容翻譯成訪問者的語言或國籍。
本地化(l10n): 這意味著將資源添加到一個網站,例如印地文翻譯到一個網站,以使其適應特定的地理或文化區域。
區域設置: 這是一個特殊的文化或地理區域。它通常被稱為後跟一個下劃線被分離的一個國家符號作為語言符號。例如用“en_US”表示美國英語語言環境。
有一些項目需要建立一個全球性的網站。本教學將不會給你完整的細節上,但它會給你一個很好的例子可以提供您的網頁在不同的語言,通過差異化的定位,即以互聯網社區。語言環境。
servlet可以根據請求者的語言環境拾取相應的版本的網站,並根據當地的語言,文化和要求,提供相應的網站版本。以下是請求對象的方法返回的Locale對象。
java.util.Locale request.getLocale()
下麵,你可以用它來檢測請求者的地理位置,語言和區域設置,這是重要的語言環境方法。下麵的方法顯示國家名稱和語言名稱在請求者的瀏覽器中設置。
S.N. | 方法 & 描述 |
---|---|
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 - by www.gitbook.net 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可以在頁麵西輸出歐語言,如英語,西班牙語,德語,法語,意大利語,荷蘭語等在這裡,它是重要的設置內容語言頭,以正確顯示所有的字符。
第二點是使用HTML實體顯示所有的特殊字符,例如, "ñ" 代表 "ñ", and "¡" 代表 "¡" vk:
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 -by www.gitbook.net 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-by www.gitbook.net 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 - by www.gitbook.net 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>"); } }