java webapp i18n處理實踐 | ![]() |
![]() |
執筆: 曹曉鋼 | |
Sunday,2004年June月13日 java webapp i18n處理實踐 這幾天筆者剛好在處理roller的i18n,做一下總結。 1, 對properties的處理,必須使用natice2ascii進行編譯;然后采用boudle load. <fmt:message key="bookmarkForm.correctBookmark" /> 2, 對jdbc連接的處理。對于特定的數據庫jdbc driver,需要調整參數。 3, 對request/response處理,可以采用servlet filter進行設置: (這段代碼是從roller的代碼中摘錄的,seasky指出其編寫不夠規范,需要refactor) 4。對每個頁面,在response和頁面中都要指定為utf-8
同時,在java代碼中進行template render時,指定utf-8: 6, 對Gzip的處理: 下載區中有一個例子。 7, 對regexp的處理。已經有報告說java.util.RegExp處理會導致輸出錯誤。估計也是里面變換的時候用byte[]和char[]倒來倒去出了錯。有條件的請try oro. 8,對lucene 的修改。 |
Struts原理與實踐(5) |
作者:羅會波 發文時間:2004.09.24 |
![]() |
一個支持i18n的應用程序應該有如下一些特征: 1增加支持的語言時要求不更改程序代碼 2字符元素、消息、和圖象保存在原代碼之外 3依賴于不同文化的數據如:日期時間、小數、及現金符號等數據對用戶的語言和地理位置應該有正確的格式 4應用程序能迅速地適應新語言和/或新地區 Struts主要采用兩個i18n組件來實現國際化編程: 第一個組件是一個被應用程序控制器管理的消息類,它引用包含地區相關信息串的資源包。第二個組件是一個JSP定制標簽, 用Struts實現國際化編程的標準做法是:生成一個java屬性文件集。每個文件包含您的應用程序要顯示的所有消息的鍵/值對。 這些文件的命名要遵守如下規則,代表英文消息的文件可作為缺省的文件,它的名稱是ApplicationResources.properties;其他語種的文件在文件名中都要帶上相應的地區和語言編碼串,如代表中文的文件名應為ApplicationResources_zh_CN.properties。并且其他語種的文件與ApplicationResources.properties文件要放在同一目錄中。 ApplicationResources.properties文件的鍵/值都是英文的,而其他語種文件的鍵是英文的,值則是對應的語言。如在我們前面的登錄例子中的鍵/值對:logon.jsp.prompt.username=Username:在中文文件中就是:logon.jsp.prompt.username=用戶名:當然,在實際應用時要把中文轉換為AscII碼。 有了上一篇文章和以上介紹的一些基礎知識后。我們就可以將我們的登錄程序進行國際化編程了。 首先,我們所有jsp頁面文件的字符集都設置為UTF-8。即在頁面文件的開始寫如下指令行: ,在我們的登錄例子中已經這樣做了,這里不需要再改動。 其次,將所有的request的字符集也設置為UTF-8。雖然,我們可以在每個文件中加入這樣的句子:request.setCharacterEncoding("UTF-8");來解決,但這樣顯得很麻煩。一種更簡單的解決方法是使用filter。具體步驟如下: 在mystruts\WEB-INF\classes目錄下再新建一個名為filters的目錄,新建一個名為:SetCharacterEncodingFilter的類,并保存在該目錄下。其實,這個類并不要您親自來寫,可以借用tomcat中的例子。現將該例子的程序節選如下:
其中,request.setCharacterEncoding(encoding);是一個關鍵句子。 為了讓該類工作,我們還要在web.xml文件中對它進行配置,配置代碼如下:
最后,就是準備資源包文件,我們以創建一個中文文件為例: 將ApplicationResources.properties文件打開,另存為ApplicationResources_zh.properties,這只是一個過渡性質的文件。將文件中鍵/值對的值都用中文表示。更改完后的代碼如下:
使用native2ascii工具將上面文件中的中文字符轉換為ascii碼,并生成一個最終使用的資源文件ApplicationResources_zh_CN.properties。 具體做法是打開一個dos窗口,到mystruts\WEB-INF\classes目錄下,運行如下語句: native2ascii -encoding GBK ApplicationResources_zh.properties ApplicationResources_zh_CN.properties 生成的文件ApplicationResources_zh_CN.properties的內容如下:
從這里可以看出,所有的中文字都轉換成了對應的Unicode碼。 現在,再運行登錄例子程序,您會發現它已經是顯示的中文了。在瀏覽器的"工具"--"Internet選項"的"語言首選項"對話框中,去掉"中文(中國)"加上英文,再試登錄程序,此時,又會顯示英文。這就是說不同國家(地區)的客戶都可以看到自己語言的內容,這就實現了國際化編程的基本要求。如果還要顯示其他語言,可采用類似處理中文的方法進行,這里就不細講了。 本文中的例子程序所采用的數據庫仍然是MS SQLServer2000,數據庫字符集為gbk。實驗表明,對簡、繁體中文,英文及日文字符都能支持。 參考文獻: 《Programming Jakarta Struts》Chuck Cavaness著 《Mastering Jakarta Struts》James Goodwill著 本文作者:羅會波 湖北省當陽市國稅局信息中心 可通過lhbf@sina.com與他聯系 |