JavaWEB開發-國際化

JavaWEB開發-國際化
國際化開發概述
軟件的國際化:軟件開發時,要使它能同時應對世界不同地區和國家的訪問,並針對不同地區和國家的訪問,提供相應的、符合來訪者閱讀習慣的頁面或數據。
國際化又稱爲 i18n:internationalization
合格的國際化軟件
軟件實現國際化,需具備哪些特徵:
對於程序中固定使用的文本元素,例如菜單欄、導航條等使用的文本元素、或錯誤提示信息,狀態信息等,需要根據來訪者的地區和國家,選擇不同語言的文本爲之服務。
對於程序動態產生的數據,例如(日期,貨幣等),軟件應能根據當前所在的國家或地區的文化習慣進行顯示。
固定文本元素的國際化 www.2cto.com
對於軟件中的菜單欄、導航條、錯誤提 示信息,狀態信息等這些固定不變的文本信息,可以把它們寫在一個properties文件中,並根據不同的國家編寫不同的properties文件。這一組properties文件稱之爲一個資源包。
在JavaAPI中提供了一個ResourceBundle 類用於描述一個資源包,並且 ResourceBundle類提供了相應的方法getBundle,這個方法可以根據來訪者的國家地區自動獲取與之對應的資源文件予以顯示。
創建資源包和資源文件
一個資源包中的每個資源文件都必須擁有共同的基名。除了基名,每個資源文件的名稱中還必須有標識其本地信息的附加部分。例如:一個資源包的基名是“myproperties”,則與中文、英文環境相對應的資源文件名則爲:
“myproperites_zh.properties” “myproperites_en.properties”
每個資源包都應有一個默認資源文件,這個文件不帶有標識本地信息的附加部分。若ResourceBundle對象在資源包中找不到與用戶匹配的資源文件,它將選擇該資源包中與用戶最相近的資源文件,如果再找不到,則使用默認資源文件。例如:
myproperites.properties
資源文件的書寫格式
資源文件的內容通常採用“關鍵字=值”的形式,軟件根據關鍵字檢索值顯示在頁面上。一個資源包中的所有資源文件的關鍵字必須相同,值則爲相應國家的文字。
並且資源文件中採用的是properties格式文件,所以文件中的所有字符都必須是ASCII字碼,對於像中文這樣的非ACSII字符,須先進行編碼。(java提供了一個native2ascII命令用於編碼)。例:
屬性文件是不能保存中文的
username=username
password=password
submit=submit
 resource_en.properties文件
username=\u7528\u6237\u540d
password=\u5bc6\u7801
submit=\u63d0\u4ea4
 resource_zh.properties文件
編程實現固定文本的國際化
ResourceBundle類提供了一個靜態方法getBundle,該方法用於裝載資源文件,並創建ResourceBundle實例:
Locale currentLocale = Locale.getDefault();
ResourceBundle myResources =
ResourceBundle.getBundle(basename, currentLocale);
basename爲資源包基名(且必須爲完整路徑)。
如果與該locale對象匹配的資源包子類找不到。一般情況下,則選用默認資源文件予以顯示。
加載資源文件後, 程序就可以調用ResourceBundle 實例對象的 getString 方法獲取指定的資源信息名稱所對應的值。
String value = myResources.getString(“key");
在WEB應用中實現固定文本的國際化
動態數據的國際化
數值,貨幣,時間,日期等數據由於可能在程序運行時動態產生,所以無法像文字一樣簡單地將它們從應用程序中分離出來,而是需要特殊處理。Java 中提供瞭解決這些問題的 API 類(位於 java.util 包和 java.text 包中)
Locale 類
Locale 實例對象代表一個特定的地理,政治、文化區域。
一個 Locale 對象本身不會驗證它代表的語言和國家地區信息是否正確,只是向本地敏感的類提供國家地區信息,與國際化相關的格式化和解析任務由本地敏感的類去完成。(若JDK中的某個類在運行時需要根據 Locale 對象來調整其功能,這個類就稱爲本地敏感類)
與前面的Core標籤一樣,在使用標籤前需要先導入標籤庫,在JSP頁面中導入國際化標籤庫的語法如下:
< %@ taglib uri=" http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%>
在JSTL之中的國際化標籤主要包括<fmt:setLocale>、<fmt:bundle>、<fmt:setBundle>、<fmt:message>、<fmt:setLocale>:指定Locale環境。
<fmt:bundle>:指定消息資源使用的文件。
<fmt:setBundle>:設置消息資源文件。
<fmt:message>:顯示消息資源文件中指定key的消息,支持帶參數消息。
幾種主要的國際化標籤
<fmt:setLocale>
< fmt:setLocale>標籤用於在JSP頁面中顯式地設置用戶的本地化信息,並將設置的本地化信息以Locale對象的形式保存在某個Web域中,其在Web域中的屬性名稱爲“javax.servlet.jsp.jstl.fmt.locale”。使用<fmt:setLocale>標籤設置本地化信息後,國際化標籤庫中的其他標籤將使用該本地化信息,而忽略客戶端瀏覽器傳遞過來的本地信息。
<fmt:setLocale value="locale"
[variant="variant"]
[scope="{page|request|session|application}"] />
< fmt:setBundle>
< fmt:setBundle>標籤用於根據<fmt:setLocale>標籤設置的本地化信息創建一個資源包(ResourceBundle)實例對象,並將其綁定到一個Web域的屬性上。
標籤的語法格式如下:
<fmt:setBundle basename="basename"
[var="varName"]
[scope="{page|request|session|application}"] />
< fmt:bundle>標籤
<fmt:bundle>標籤與<fmt:setBundle>標籤的功能類似,但它創建的ResourceBundle實例對象只在其標籤體內有效。
<fmt:bundle basename="basename“ >
body content
< /fmt:bundle>
< fmt:message>標籤
<fmt:message>標籤用於從一個資源包中讀取信息並進行格式化輸出。
<fmt:message key="messageKey"
[bundle="resourceBundle"]
[var="varName"] [scope="{page|request|session|application}"] />
DateFormat類(國際化日期)
DateFormat 類可以將一個日期/時間對象格式化爲表示某個國家地區的日期/時間字符串。
DateFormat 類除了可按國家地區格式化輸出日期外,它還定義了一些用於描述日期/時間的顯示模式的 int 型的常量,包括FULL, LONG, MEDIUM, DEFAULT, SHORT,實例化DateFormat對象時,可以使用這些常量,控制日期/時間的顯示長度。
DateFormat類
例如,對於日期/時間“2005年9月15日下午4時41分20秒”,如設置了DateFormat的顯示模式,則日期/時間顯示樣式分別爲:
SHORT模式完全是數字的,在中文環境下顯示爲“05-9-15 下午4:41”;在英文環境下爲“9/15/05 4:41 PM”。
MEDIUM模式比SHORT模式長些,在中文環境顯示爲“2005-9-15 16:41:20”;在英文環境下顯示爲“Sep 15, 2005 4:41:20 PM”。
LONG模式比MEDIUM模式更長一些,在中文環境下顯示爲“2005年9月15日 下午04時41分20秒”;在英文環境下顯示爲“September 15, 2005 4:41:20 PM CST”。
FULL模式指定日期/時間的完整格式,在中文環境下顯示爲“2005年9月15日 星期四 下午04時41分20秒 CST”;在英文環境下,這個日期/時間顯示爲“Thursday, September 15, 2005 4:41:20 PM CST”。
實例化DateFormat類
實例化DateFormat類有九種方式,以下三種爲帶參形式,下面列出的三種方式也可以分別不帶參,或只帶顯示樣式的參數。
getDateInstance(int style, Locale aLocale):以指定的日期顯示模式和本地信息來獲得DateFormat實例對象,該實例對象不處理時間值部分。
getTimeInstance(int style, Locale aLocale):以指定的時間顯示模式和本地信息來獲得DateFormat實例對象,該實例對象不處理日期值部分。
getDateTimeInstance(int dateStyle, int timeStyle, Locale aLocale):以單獨指定的日期顯示模式、時間顯示模式和本地信息來獲得DateFormat實例對象。
DateFormat類
DateFormat 對象的方法:
format: 將date對象格式化爲符合某個本地環境習慣的字符串。
parse:將字符串解析爲日期/時間對象
注意:parse和format完全相反,一個是把date時間轉化爲相應地區和國家的顯示樣式,一個是把相應地區的時間日期轉化成date對象,該方法在使用時,解析的時間或日期要符合指定的國家、地區格式,否則會拋異常。
DateFormat 對象通常不是線程安全的,每個線程都應該創建自己的 DateFormat 實例對象
NumberFormat類
NumberFormat 可以將一個數值格式化爲符合某個國家地區習慣的數值字符串,也可以將符合某個國家地區習慣的數值字符串解析爲對應的數值
NumberFormat 類的方法:
format 方法:將一個數值格式化爲符合某個國家地區習慣的數值字符串
parse 方法:將符合某個國家地區習慣的數值字符串解析爲對應的數值。
NumberFormat類
實例化NumberFormat類時,可以使用locale對象作爲參數,也可以不使用,下面列出的是使用參數的。
getNumberInstance(Locale locale):以參數locale對象所標識的本地信息來獲得具有多種用途的NumberFormat實例對象
getIntegerInstance(Locale locale):以參數locale對象所標識的本地信息來獲得處理整數的NumberFormat實例對象
getCurrencyInstance(Locale locale):以參數locale對象所標識的本地信息來獲得處理貨幣的NumberFormat實例對象
getPercentInstance(Locale locale):以參數locale對象所標識的本地信息來獲得處理百分比數值的NumberFormat實例對象
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章