Struts從零開始四、Struts中的國際化[1]

      一、概念

  I18N作爲“國際化”的簡稱,其來源是明文單詞“internationlization”的首末字符“i”和“n”之間的字符數爲18。隨着全球經濟的遺體化爲一種主流的趨勢,軟件開發者應該開發出支持多國語言、國家化的web應用程序吧。也就是一個web應用程序在運行時能夠根據客戶端請求所來自的國家和語言的不同顯示不同的用戶界面。這樣,當需要在應用程序中添加對一種新的語言的支持時,不需要對已有的軟件返工,無需修改應用程序的程序代碼。

  二、Struts對國家化的支持

  在Struts框架中進行應用程序的國際化,支持重點在於應用程序的文本和圖像表示。最重要的工作就是準備Resurce Bundle 資源包。事實上,準備資源包的過程,就是把對應不同語言的用戶所涉及的文本和圖片保存在多個文本文件中,客戶端根據不同的環境需要進行更換。這些文件被稱爲“屬性文件”,所有屬性文件合在一起被稱爲資源包(Resource Bundle)。

  Struts建立於Java平臺之上,很容易建立國際化和本地化的應用程序。在這裏你要熟悉的關鍵概念是:

  1) Locale – 基礎的支持國際化的java類是java.util.Locale。每個Locale代表一個特別的國家和語言的選擇(加上一個可選的語言變量),以及一套格式假定,例如數字和日期等等。

  2) ResourceBundle – java.util.ResourceBundle類提供支持多種語言消息的基本工具。查看文檔中關於ResourceBundle類以及你的JDK版本的文檔包中關於國際化的更多內容。

  3) PropertyResourceBundle – 一個ResourceBundle類的標準實現允許你使用與初始化properties文件同樣的鍵/值的語法來定義資源。這對於使用爲用於一個web應用程序的消息準備資源包是非常方便的,因爲這寫消息通常都是面向文本的。

  4) MessageFormat – java.text.MessageFormat類允許你使用運行時的指定的參數替換一個消息字符串中的一部分(在這種情況下,是一個從一個資源包得到的消息)。這在你創建一個句子的場合中是有用的,但是詞會以不同的語言安照不同的順序出現。消息中的佔位符,字符串{0}用第一個運行時參數替換,{1}用第二個運行時參數替換,以此類推。

  5) MessageResources – Struts的類org.apache.struts.util.MessageResources使你能夠將一套資源包視做一個數據庫,並且允許你爲一個特定的Locale(通常是與當前用戶相對應)請求一個特定的消息,而不是爲服務器運行在其中的缺省的Locale請求消息。

  三、示例

  1、我們還在前面的登錄實例進行加工。

  2、在默認的applicationResources.properties文件中添加相應的消息文本。

label.username=username

  label.password=password

  button.submit=submit

  button.reset=reset

3、創建臨時中文資源文件:applicationResources_temp.propertyies

  label.username=用戶名

  label.password=密碼

  button.submit=確定

  button.reset=重置

  4、對臨時資源文件進行編碼轉換:

  在JDK中提供了native2ascii命令,它能夠實現字符編碼轉換。在DOS下執行以下命令,將生成按GBK以編碼的中文資源文件:

applicationResources_zh_CN.properties

  native2ascii –encoding gbk applicationResources_temp.properties

  applicationResources_zh_CN.properties

  生成的applicationResources_zh_CN.properties的內容如下:

label.username="u7528"u6237"u540d

  label.password="u5bc6"u7801

  button.submit="u786e"u5b9a

  button.reset="u91cd"u7f6e

  當web用戶的Locale爲中文時,Struts框架將自動選擇來自applicationResources_zh_CN.properties文件的消息文本。

  5、創建英文的資源文件:

  label.username=username

  label.password=password

  button.submit=submit

  button.reset=reset

  完成以上幾個步驟後,在web 應用程序的根目錄"WEB-INF目錄"classes目錄下應該有了三個資源文件:

  默認資源文件:applicationResource.properties

  中文資源文件:applicationResource_zh_CN.properties

  英文資源文件:applicationResource_en.properties

6、創建struts的Resource Bundle

  Struts配置文件中的元素定義了一個Resource Bundle。Resource Bundle的持久化消息文本存儲資源文件中,其擴展名爲“.properties”,裏面存放的都是“鍵/值”。

  在struts-config.xml中對Resource Bundle的配置代碼:

  表示默認的資源文件應該是applicationResources.properties,存放在應用程序的根目錄"WEB-INF目錄"classes目錄下。如果應用程序需要支持中文用戶,要在相同目錄下創建一個包涵中文消息的資源文件,文件名必須爲applicationResource_zh_CN.properties。

  7、修改login.jsp頁面

<html:form  action="login.do" method="post">

    <bean:message key="label.username"/>

    <html:text property="username" /><html:errors property="username"/>

    <br />

    <bean:message key="label.password"/>

    <html:text property="userpass" /><html:errors property="userpass"/>

    <br>

    <input type="submit" name="Submit" value="<bean:message key="button.submit"/>">

    <input type="reset" value="<bean:message key="button.reset"/>">

</html:form>

  <bean:message/>:用於訪問web應用資源的bean標籤,顯示Resource Boundle中的內容。

  8、運行程序

  1)如果你的瀏覽器默認設置爲中文,你鍵入地址,將看到的頁面如下:

                                      20089249651.jpg

  2)把你的瀏覽器的設置爲英文,然後刷新頁面,如下圖:

                            20089249388.jpg

                                     20089241809.jpg

  總結:國際化對於web應用程序來說很重要,如果你的web應用程序面對多個國家的話,要實現不同語言的切換,如果不使用國際化的話要麼只有一種語言,要麼在程序裏面改,現在一切都方面了,不過java對中文的支持並不好,並不是什麼地方都可以使用中文的,如在LookUpDispatchAction中就不能使用國際化哦。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章