在本章中,我們將討論JSP中國際化的概念。 在我們繼續之前,先了解以下三個重要的術語 -
「en_US」
代表美國的英文語言環境。在建立全球網站時應該注意一些專案。 本教學不會給出完整的詳細資訊,但它將為您提供一個很好的例子,說明如何通過區分其位置(即語言環境)向網際網路社群提供不同語言的網頁。
JSP可以根據請求者的區域設定選擇適當的站點版本,並根據當地語言,文化和要求提供適當的站點版本。 下是返回Locale
物件的request
物件的方法。
java.util.Locale request.getLocale()
以下是可用於檢測請求者的區域,語言和當地語言環境的重要區域設定方法。以下所有方法顯示在請求者瀏覽器中設定的國家名稱和語言名稱。
編號 | 方法 | 描述 |
---|---|---|
1 | String getCountry() |
此方法以ISO 3166 的兩個字母格式為該區域設定返回大寫的國家/地區程式碼。 |
2 | String getDisplayCountry() |
此方法返回適合顯示給使用者的區域設定的國家/地區的名稱。 |
3 | String getLanguage() |
此方法以ISO 639 格式為該語言環境返回小寫的語言程式碼。 |
4 | String getDisplayLanguage() |
此方法返回適合顯示給使用者的語言環境的語言名稱。 |
5 | String getISO3Country() |
此方法返回此區域設定的國家/地區的三個字母的縮寫。 |
6 | String getISO3Language() |
此方法返回此語言環境的三個字母的縮寫。 |
為了方便演示,開啟Eclise建立一個動態Web專案,其專案結構如下所示 -
以下範例顯示如何在JSP中顯示請求的語言和關聯國家/地區,檔案:langcountry.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="java.io.*,java.util.Locale"%>
<%@ page import="javax.servlet.*,javax.servlet.http.* "%>
<%
//Get the client Locale
Locale locale = request.getLocale();
String language = locale.getLanguage();
String country = locale.getCountry();
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>檢測區域設定範例</title>
</head>
<body>
<div style="margin: auto; width: 90%">
<center>
<h1>檢測區域設定範例</h1>
</center>
<p align="center">
<%
out.println("語言 : " + language + "<br />");
out.println("國家 : " + country + "<br />");
%>
</p>
</div>
</body>
</html>
執行上面範例程式碼,得到以下結果 -
JSP可以輸出用西歐語言編寫的頁面,如英文,西班牙文,德文,法文,意大利文,荷蘭文等。這裡是設定Content-Language
頭來正確顯示所有的字元。
另一個重要的一點是使用HTML實體顯示所有的特殊字元; 例如「?」
代表「?」
,而「?」
代表「?」
,如下檔案:langset.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="java.io.*,java.util.Locale"%>
<%@ page import="javax.servlet.*,javax.servlet.http.* "%>
<%
// Set response content type
response.setContentType("text/html");
// Set spanish language code.
response.setHeader("Content-Language", "es");
String title = "En Espa?ol";
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>
<%
out.print(title);
%>
</title>
</head>
<body>
<center>
<h2>
<%
out.print(title);
%>
</h2>
</center>
<div align="center">
<p>En Espa?ol</p>
<p>?Hola Mundo!</p>
</div>
</body>
</html>
執行上面範例程式碼,得到以下結果 -
可以使用java.text.DateFormat
類及其靜態getDateTimeInstance()
方法來格式化特定於語言環境的日期和時間。以下是顯示如何格式化特定區域設定日期的範例,檔案:locale_date.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="java.io.*,java.util.Locale"%>
<%@ page import="javax.servlet.*,javax.servlet.http.* "%>
<%@ page import="java.text.DateFormat,java.util.Date"%>
<%
String title = "區域特定日期";
//Get the client's Locale
Locale locale = request.getLocale();
String date = DateFormat.getDateTimeInstance(DateFormat.FULL, DateFormat.SHORT, locale).format(new Date());
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<head>
<title>
<%
out.print(title);
%>
</title>
</head>
<body>
<center>
<h2>
<%
out.print(title);
%>
</h2>
</center>
<div align="center">
<p>
Local Date:
<%
out.print(date);
%>
</p>
</div>
</body>
執行上面範例程式碼,得到以下結果 -
可以使用java.txt.NumberFormat
類及其靜態getCurrencyInstance()
方法在特定區域設定中格式化數位,例如:long
或double
型別。 以下是顯示如何格式化給定區域設定的貨幣的範例,檔案:locale_currency.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="java.io.*,java.util.Locale"%>
<%@ page import="javax.servlet.*,javax.servlet.http.* "%>
<%@ page import="java.text.NumberFormat,java.util.Date"%>
<%
String title = "區域特定貨幣";
//Get the client's Locale
Locale locale = request.getLocale();
NumberFormat nft = NumberFormat.getCurrencyInstance(locale);
String formattedCurr = nft.format(1000000);
%>
<html>
<head>
<title>
<%
out.print(title);
%>
</title>
</head>
<body>
<center>
<h1>
<%
out.print(title);
%>
</h1>
</center>
<div align="center">
<p>
Formatted Currency:
<%
out.print(formattedCurr);
%>
</p>
</div>
</body>
</html>
執行上面範例程式碼,得到以下結果 -
可以使用java.txt.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 Specific Percentage";
//Get the client's Locale
Locale locale = request.getLocale( );
NumberFormat nft = NumberFormat.getPercentInstance(locale);
String formattedPerc = nft.format(0.51);
%>
執行上面範例程式碼,得到以下結果 -