J2EE Web元件中中文及相關的問題(五) (轉)

worldblog發表於2007-08-17
J2EE Web元件中中文及相關的問題(五) (轉)[@more@]

四、  國際化:namespace prefix = o ns = "urn:schemas--com::office" />

在前面第五小節中的form.裡,也許臺灣省的客戶更喜歡

我們首先在appWEB-INFclasses中建立三個區域相關的資源。中文簡體版:

#LocalStrings_zh_CN.properties

page.title=國際化

form.label=請輸入你的姓名

form.button=提交

中文繁體版:

#LocalStrings_zh_TW.properties

page.title=國際化

form.label=請輸入您的姓名

form.button=提交

英文版:

#LocalStrings_tw.properties

page.title=internationalization

form.label=Please enter your name

form.button=submit

LocalStrings_zh_CN.properties、LocalStrings_zh_TW.properties和LocalStrings_tw.properties這三個檔案均以預設的編碼方式儲存。form.jsp改成:

 

 

<b style="mso-bidi-font-weight: normal"></b>

 

 

 

 

 

  ">

 

 

beans.LocalStrings的原始檔如下:

package beans;

 

import .util.ReBundle;

import java.io.UnsupportedEncodingException;

import java.util.Locale;

public class LocalStrings

{

  protected ResourceBundle rb;

  protected boolean encoded;

  public LocalStrings(String baseName, Locale locale)

  {

  this.rb = ResourceBundle.getBundle(baseName, locale);

  if(locale.getCountry().equals("CN") || locale.getCountry().equals("TW"))

  encoded = true;

  }

  public String getString(String key)

  {

  String value = rb.getString(key);

  if(encoded)

  {

  try

  {

  byte bs[] = value.getBytes("ISO-8859-1");

  return new String(bs, "GBK");

  }

  catch(UnsupportedEncodingException uee)

  {

  return value;

  }

  }

  return value;

  }

}

從訪問form.jsp,我們應該看到正確的輸出,然後透過瀏覽的Inte選項,將瀏覽器的語言設定成“中文(臺灣)[zh-tw]”,再訪問form.jsp,我們就能看到繁體字的提示資訊了;再將瀏覽器語言設定成“英語(美國)[en-us]”,再訪問form.jsp。為什麼要用LocalStrings到重新編碼這些字串呢,檢視ResourceBundle的源可以發現,它讀取檔案中時,並沒有對字串進行編碼,所以我們不得不在LocalStrings中對使用正確的編碼對這些區域相關的字串編碼。

五、  一些建議

我們用(Java 2 Enterprise Edition/ Java 2 Platform, Enterprise Edition,Java 2企業版)開發的企業應用程式,可能在一些支援J2EE規範的之間移植,而這些伺服器的平臺也可能不同。我們的客戶的或所使用的瀏覽器,也有可能不同,所以我們應努力遵循一些建議:

l  從請求頭中判斷出的作業系統、瀏覽器和所使用的語言,而用適當的方法進行相應的響應頭中的charset的設定。

l  儘量不在中使用含非英文字元的常量字串。

l  對於JSP檔案,只要頁面中存在不被伺服器忽略的含非英文字元的常量字串,就應該對page指令中的pageEncoding屬性進行相應的設定。

l  使用過濾器來設定透過

ServletRequest.setCharaterEncoding(String encoding);

來設定請求實體的編碼,而不是在每個JSP或Servlet中設定。拋棄在Servlet設定content-Type的習慣,讓過濾器根據不同的資源和使用者透過

ServletResponse.setContentyType(String type);

來設定。

l  儘量使用UTF-8作編碼,而不是GBK或GB2312。

l  充分考濾到底層所使用的編碼,它可能在應用程式的移植中帶來麻煩。

l  不能簡單有效地判斷出使用者瀏覽器編碼提交的資料所使用的編碼,是程式設計師的一大遺憾,如果對現有的標準進行擴充套件,修改form元素的enctype,讓這個屬性也完全相容MIME的charset,Web應用程式的開發,又少去了一些麻煩。

 

 

附錄A. 本文所有的實驗,環境如下:

l  作業系統  MS 2000 Server

l  區域設定  中文(中國)

l  系統語言  中文(簡體)  預設

l  瀏覽器  Microsoft Internet Explorer 6.0b

l  Java虛擬機器  J2SDK 1.4.0-b92

l  Java伺服器  4.0.4

 

附錄B. 參考資料:

1.  Java技術及其應用/王克宏主編;董麗編著.—北京:高等教育出版社,1999(2001重印)

2.  JSP指南(第二版)/(美)布朗(Brown, S.)等著;王軍 等 譯.—北京:電子工業出版社,2002.10 (Wrox程式設計師參考系列)書名原文:Professional JSP 2nd Edition

3.  JSP站點設計程式設計指南/(美)杜飛(Duffey, K.)等著;王軍 等 譯.—北京:電子工業出版社,2002.7 (Wrox程式設計師參考系列)書名原文:Professional JSP Site Design

4.  J2EE伺服器端高階程式設計指南/(美)阿拉瑪拉尤(Allamaraju, S.)等著;聞道工作室譯.—北京:機械工業出版社,2001.9 (Wrox程式設計師參考系列)書名原文:Professional Java Server Programming J2EE Edition

5.  XML高階程式設計(第二版)/(英)布伯克(Birbeck, M.)等著;裴劍鋒等譯.—2版. —北京:機械工業出版社,2002.5 (Wrox程式設計師參考系列)書名原文:Professional XML 2nd Edition

6.  Java程式設計思想(英文版·第2版)/(美)埃克爾(Eckel, B.)著.—北京:機械工業出版社,2002.1(經典原版書庫)書名原文:Thinking in Java (Second Edition)

7.  技術實踐——Just XSL/(美)森普遜(Simpson, J.E.)著;彭仕安等譯.—北京:機械工業出版社,2002.7 (Internet新技術叢書)書名原文:Just XSL

8.  Java程式設計技術內幕/(美)休斯(Hughes, M.)著;劉勇先等譯.—北京:國防工業出版社,2002.3 (程式設計經典譯叢)書名原文:Java Network Programming

9.  Java TM 2 SDK, Standard Edition Documentation Version 1.4.0.

—Sun Microsystems, Inc.

10.  HTML 4.01 Specification. —W3C,1999.12.24.

 

11.  Hypertext Traner Protocol -- HTTP/1.1/菲爾丁(Fielding, R) 等著. —IETF,1999.6. /rfc2616.txt">

12.  Java中文處理學習筆記——Hello Unicode/車東.—CSDN_文件中心

13.  完全手冊/(美)鮑威爾(Powell, T.)等著;牛力等譯. —北京:電子工業出版社,2002.7(完全手冊叢書)書名原文:JavaScript:The Complete Reference


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-963161/,如需轉載,請註明出處,否則將追究法律責任。

相關文章