posts - 70,comments - 408,trackbacks - 0

          萬維網(wǎng)World Wide Web的迅猛發(fā)展推動了跨國業(yè)務(wù)的發(fā)展,為了使企業(yè)的Web應(yīng)用能支持全球客戶,軟件開發(fā)應(yīng)用發(fā)出了支持多國語言,國際化的Web應(yīng)用.國際化簡稱I18N指的是在軟件設(shè)計階段,就應(yīng)該使軟件具有支持多種語言和地區(qū)的功能.這樣當需要在應(yīng)用中添加對一種新的語言和國家的支持的時候,不需要對自己的軟件返工,無需修改應(yīng)用的程序代碼.簡單的說,本地化意味著針對不同的語言的客戶,發(fā)出不同的軟件版本.國際化意味著同一個軟件可以面向使用不同語言的客戶.如果一個應(yīng)用支持國際化,應(yīng)該具備以下特征:

          1)???? 當應(yīng)用需要支持一種新的語言時,無需修改應(yīng)用源代碼.

          2)???? 文本,消息和圖片從源程序代碼中抽取出來,存儲在外部.

          3)???? 應(yīng)該根據(jù)用戶語言和地理位置,對于特定文化和相關(guān)的數(shù)據(jù),如日期,時間,貨幣進行格式轉(zhuǎn)換.

          4)???? 支持非標準字符集.

          5)???? 可以方便快捷的對應(yīng)用做出調(diào)整,使它適應(yīng)新的語言和地區(qū).

          Web應(yīng)用使用本地化或者國際化都會涉及字符編碼轉(zhuǎn)換的問題,默認的情況下IE瀏覽

          器發(fā)送請求的時候采用ISO-8859-1字符編碼,如果Web應(yīng)用程序要正確的讀取用戶發(fā)送的中文數(shù)據(jù),則需要進行編碼轉(zhuǎn)換.一種方式是在處理請求前,先設(shè)置HttpServletRequest對象的字符編碼,如下:

          request.setCharacterEncoding(“gb2312”);

          還有一種方法是對用戶輸入的請求數(shù)據(jù)進行編碼轉(zhuǎn)換如下:

          String data=request.getParameter(“data”);

          ? If(data!=null)

          Data=new String(data.getBytes(“ISO-8859-1”),”GB2312”);

          如果數(shù)據(jù)庫系統(tǒng)的字符編碼是GB2312,那么可以直接讀取數(shù)據(jù)庫的中文數(shù)據(jù),如果數(shù)據(jù)庫的字符集是ISO-8859-1那么必須先對來自數(shù)據(jù)庫的數(shù)據(jù)進行編碼轉(zhuǎn)換,然后才能使用.如果在XML文件中包含中文,可以將XML文件的字符編碼設(shè)置為GB2312,例如:

          還可以設(shè)置相應(yīng)對象的字符編碼.例如:

          ?Servlet:response.setContentType(“text/html;charset=GB2312”);

          ?JSP:<%@page contentType=”text/html;charset=GB2312”%>

          ?HTML:

          JAVA在其核心庫中提供了支持I18N的類和接口,java.util.Locale類是重要的JAVA的支持I18N的類,在JAVA語言中幾乎所有對國際化和本地化的支持都依賴與這個類.關(guān)于這個類的詳細介紹應(yīng)參閱JAVA語言的API.ResourceBundle類也是在java.util包中,這個類提供和存放了管理與Locale相關(guān)的資源的功能,這些資源包括文本或者按鈕的,狀態(tài)信息圖片名,錯誤信息,網(wǎng)頁標題等.Struts框架并沒有直接使用JAVA語言提供的ResourceBundle類,在Struts框架中提供了兩個類,他們都在org.apache.struts.util包中.這兩個類具有ResourceBundle相似的功能,分別是MessageResources和PropertyMessageResources類.

          說了半天自己感覺我闡述的很亂,因為都是一些需要了解的知識所以我大略說了一下,下面我詳細的介紹一下Struts框架對國際化的支持.主要是體現(xiàn)在能夠輸出和用戶Locale相符合的文本和圖片上.當Struts配置文件的元素的locale屬性為truts的時候,Struts框架把用戶的Locale實例保存在Session范圍內(nèi),這樣Struts礦局愛能夠根據(jù)這個實例來從ResourceBundle中選擇合適的資源文本.最簡單的說就是用戶如果是cn就去cn的本地資源文件中讀取信息,如果是ch就去ch的本地資源文本文件中讀取數(shù)據(jù).首先要創(chuàng)建Struts的ResourceBundle,對于多個應(yīng)用模塊的Struts應(yīng)用,可以為每一個子應(yīng)用配置一個或者多個ResourceBundle應(yīng)用中的每一個模塊都可以訪問這些Bundle,配置文件中每個元素定義了一個ResourceBundle,當應(yīng)用包含多個的時候,用Key屬性來區(qū)別它們.這只好的.properties文件一般放在Web應(yīng)用的classes目錄下,其實配置沒什么就是按照固定的套路,重點要研討的應(yīng)該是如何訪問ResourceBundle.Struts應(yīng)用,子應(yīng)用模塊,ResourceBundle和資源文件之間存在以下的關(guān)系:

          1)???? 一個Struts應(yīng)用可以有多個子應(yīng)用模塊,必須有一個默認的子應(yīng)用模塊.只能一個.

          2)???? 一個子應(yīng)用模塊可以有多個ResourceBundle,必須有一個默認的Bundle,只能一個.

          3)???? 一個ResourceBundle可以有多個資源文件,必須有一個默認的文件,只能有一個.

          Action類中定義了getResources(request)方法,可以返回默認的MessageResources

          對象,代表當前應(yīng)用模塊使用默認的ResourceBundle.如果要獲得特定的MessageResources對象可以調(diào)用Action基類的getResources(request.key)方法,其中參數(shù)key和Struts配置文件中的元素的key屬性對應(yīng).得到MessageResources對象后,可以通過方法來訪問消息文本.例如:

          public ActionForward execute(ActionMapping mapping,

          ???????????????????????????? ActionForm form,

          ???????????????????????????? HttpServletRequest request,

          ???????????????????????????? HttpServletResponse response)

          throws Exception{

          Locale locale = getLocale(request);

          MessageResources messages = getResources(request);

          String msg = messages.getMessage(locale,”hello.error”);

          ……

          }

          org.apache.struts.util.MessageResources的getMessage()方法有好幾種重載的形式,下面列出常用的幾種:

          1)???? 根據(jù)參數(shù)指定的Locale檢查對應(yīng)的資源文件,然后返回參數(shù)的key對應(yīng)的消息文本getMessage(java.util.Locale locale,String key)

          2)???? 根據(jù)參數(shù)指定的Locale檢查對應(yīng)的資源文件,然后返回參數(shù)和key對應(yīng)的文本args參數(shù)用于替換符合消息文本的參數(shù):

          getMessage(java.util.Locale locale,String key,Object[] args)

          使用ResourceBundle綁定的Struts組件例如:

          1)???? ActionMessage類和標簽.

          2)???? StringBean標簽庫和標簽.

          3)???? Validator驗證框架中訪問ResourceBundle.

          4)???? 在聲明類型異常處理中訪問ResourceBundle.

          國際化應(yīng)用的問題感覺理解上不是很容易,可以查閱相關(guān)的資料百度和Google可是中

          國和世界的大寶箱哦. (網(wǎng)友們的支持,是我繼續(xù)寫技術(shù)文章的動力!)
          posted on 2005-10-28 16:23 我心依舊 閱讀(2050) 評論(1)  編輯  收藏

          FeedBack:
          # re: Struts框架國際化(原創(chuàng))
          2009-10-06 10:48 | amen
          你把人家第九章的內(nèi)容(哪本書就不用我提了吧?)摘抄一下,就號稱是自己的原創(chuàng)??讓我這個一貫潛水,看帖不回的人都忍不住。。。。。bs~  回復  更多評論
            

          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導航:
           
          主站蜘蛛池模板: 大足县| 翁牛特旗| 西宁市| 蚌埠市| 巨野县| 怀化市| 城步| 上虞市| 甘肃省| 静乐县| 蛟河市| 黄山市| 涪陵区| 兴宁市| 小金县| 田东县| 广昌县| 临安市| 洪洞县| 乡宁县| 陆良县| 郎溪县| 左权县| 青龙| 宾川县| 莱州市| 玉屏| 三台县| 兖州市| 双江| 淮滨县| 香格里拉县| 龙海市| 六枝特区| 鄢陵县| 达孜县| 卢龙县| 洪洞县| 新沂市| 肇东市| 汝州市|