新的起點

          新的起點
          隨筆 - 9, 文章 - 1, 評論 - 1, 引用 - 0
          數據加載中……

          Struts的國際化

           

          (一)  軟件的本地化與國際化的概念
          本地化:對于已經開發好的軟件,使其支持一種新的語言,稱之為軟件的本地化。我們比較熟悉的是游戲的本地化。

          國際化:是指在軟件設計階段,就應該使其具有支持多種語言和地區的功能。當需要在應用中添加對一種新的語言和國家的支持時,不需要對已有的軟件返工,無需更改程序代碼。
          I18N
          簡稱的來歷

          (二)  Web應用的中文本地化
          原因:當數據流的源與目的地使用不同的字符編碼時,就需要對字符編碼進行正確的轉換。      

          ü         處理HTTP請求數據編碼:
          默認情況下,IE瀏覽器發送請求時采用”ISO-8859-1”字符編碼,如果Web應用要正確地讀取用戶發送的中文數據,則需要進行編碼轉換。
          一種方法是在處理請求前,設置HttpServletRequest對象的字符編碼:
          request.setCharacterEncoding();
          還有一種是對用戶輸入的請求數據進行編碼轉換:
          date = new String(date.getBytes(“ISO-8859-1”),”GBK”);

          ü         處理數據庫數據編碼:
          如果數據庫系統的字符編碼為”GBK”,那么可以直接存取數據庫中的中文數據,而無需進行編碼轉換。如果數據庫字符編碼為“ISO-8859-1”,那么必須先對來自數據庫的數據進行編碼轉換,然后才能使用。
          String field = rs.getString(“FF”);
          String field_cn = newString(field. getBytes(“ISO-8859-1”),”GBK”);

          ü         處理XML配置文件編碼
          如果XML文件中包含中文,可以將XML文件的字符編碼設為”GBK”

          ü         處理響應結果的編碼
          針對不同的文件類型,設置方式不同:
          對于Servlet文件:
          response.setContentType(“text/html;charset=GBK”);
          對于JSP文件:
          <% @ page contentType=” text/html;charset=GBK” %>
          對于HTML文件
          <META HTTP-EQUIV=”Content-Type” CONTENT=” text/html;charset=GBK”>

          (三)  JavaI18N的支持
          Java
          在其核心庫中提供了支持I18N的類和接口,下面簡要介紹:

          A. Locale(Java.util.Locale)

          Locale類的實例代表一種特定的語言和地區,如果Java類庫中的某個類在運行時需要根據Locale對象來調整其功能,那么就稱這個類是本地敏感的。例如:java.text.DateFormat.
          創建Locale對象時,需要明確地指定其語言和國家代碼:
          Locale cn = new Locale(“ch”,”CH”);
          Locale us = new Locale(“en”,”US”);
          Locale jsp = Locale.JAPAN ??????????????????????????????
          取得運行環境默認的Locale
          Locale defaultLocale = Locale.getDefault();

                       

          ResourceBundle

          提供存放和管理與Locale相關的資源的功能
          Struts中沒有使用這個類,而是提供了自己的類:
          org.apache.struts.util.MessageResources
          org.apache.struts.util.PropertyMessageResources

                       

          MessgeFormat

           

          (四)  Struts框架對國際化的支持
          Struts配置文件的<controller>元素的locale屬性為true時,Struts框架把用戶的locale實例保存在session范圍內,這樣框架能自動根據實例選擇合適的資源文件。

          (五)  對例子程序Helloapp國際化

          JSP文件的文本、圖片和按鈕進行國際化

          1.         設置字符編碼
          為了保證同一個JSP頁面能支持多種語言,可以將所有JSP頁面的字符編碼統一設置為”UTF-8”:
          <% @ page contentType=” text/html;charset= UTF-8” language=”java” %>

          2.         對文本國際化
          JSP文件之中不應該直接包含本地化的消息文本,而應該通過<bean:message>
          標簽從資源文件中獲得文本。
          <bean:message key=”hello.jsp.title” />

          3.         對按鈕國際化
          <html:submit property=hello.jsp.page.submit />
             <bean:message key=”hello.jsp. submit” />
          </html:reset>

          4.         對圖片國際化

           

          創建資源文件

          創建默認的資源文件:application.properties

           

          根據默認的資源文件,創建臨時中文資源:application_temp.properties

           

          JDK中提供了native2ascii命令,它能夠實現字符編碼轉換。命令如下:
          native2ascii –encoding gb2312 application_temp.properties application_zh_CN.properties

          創建英文資源文件:application_en.properties

          還需要注意一下資源文件的路徑問題!

           

          使用Servlet過濾器設置請求數據的字符編碼

          <filter>

          <filter-name>Set Character Encoding</filter-name>

          <filter-class>SetCharacterEncodingFilter</filter-class>

          </filter>

          <filter-mapping>

          <filter-name>Set Character Encoding</filter-name>

          <url-pattern>/*</url-pattern>

          </filter-mapping>


          public void doFilter(ServletRequest request, ServletResponse response,

              FilterChain chain)throws IOException, ServletException {

              request.setCharacterEncoding("UTF-8");

              // 傳遞控制到下一個過濾器

              chain.doFilter(request, response);

              }

           

           

          (六)  小結

          Struts進行國際化應該遵循以下的原則

          ü         盡量不在Servlet中使用含非英文字符的常量字符串。

          ü         對于JSP文件,應該對page指令中的charset屬性進行相應的設置。

          ü         不應該在JSP文件中直接包含本地化的消息資源,而應該統一放置到資源文件

          ü         不必再每個JSPServlet中設置HTTP請求的字符編碼,可以在Servlet過濾器中設置編碼

          ü         盡量使用“UTF-8”作為HTTP請求和相應的字符編碼,而不是“GBK”等。

          ü         充分考慮底層數據庫所使用的編碼,他可能會給應用程序的移植帶來麻煩。


          以上整理自孫衛勤《精通Struts
          By HAIING

          posted on 2008-01-15 17:49 軋鋼王子 閱讀(113) 評論(0)  編輯  收藏


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


          網站導航:
           
          主站蜘蛛池模板: 尼木县| 南昌市| 伊金霍洛旗| 宝兴县| 义乌市| 临朐县| 菏泽市| 中卫市| 鹤山市| 台州市| 普格县| 金华市| 秦安县| 天台县| 若尔盖县| 阿合奇县| 新安县| 怀化市| 金阳县| 庆阳市| 河曲县| 汶川县| 定安县| 永安市| 茶陵县| 兴宁市| 尤溪县| 洮南市| 蛟河市| 吉木萨尔县| 四子王旗| 庆阳市| 老河口市| 安吉县| 长治县| 苍梧县| 勃利县| 东安县| 彭阳县| 威海市| 丘北县|