隨筆 - 312, 文章 - 14, 評(píng)論 - 1393, 引用 - 0
          數(shù)據(jù)加載中……

          Struts2教程10:國(guó)際化

          本文為原創(chuàng),如需轉(zhuǎn)載,請(qǐng)注明作者和出處,謝謝!

          上一篇:Struts2教程9:實(shí)現(xiàn)自已的攔截器

          國(guó)際化的作用就是根據(jù)不同國(guó)家的用戶在訪問(wèn)Web或其他類型的程序時(shí),將各種信息以本地的常用形式顯示出來(lái),如界面信息在中國(guó),就會(huì)顯示中文信息,在以英文為主的國(guó)家里,就會(huì)顯示英文信息。還有就是一些信息的格式,如日期格式等。

          從屬性文件中獲得字符串信息是國(guó)際化的基本應(yīng)用。在Struts2中使用的屬性文件就是Java屬性文件,擴(kuò)展名為properties。在Struts2中的屬性文件可以有很多默認(rèn)的位置,Struts2可按如下的順序(或步驟)來(lái)定位屬性文件:

              1. ActionClass.properties
          :屬性文件名和動(dòng)作類同名。Struts2會(huì)首先查詢與當(dāng)前訪問(wèn)的動(dòng)作類同名,并且和ActionClass.class在同一個(gè)目錄下的屬性文件。

          2. BaseClass.propertiesBaseClass表示動(dòng)作類的基類。所有動(dòng)作類都會(huì)查找Object.properties文件(因?yàn)?/span>Object是所有Java類的基類),但要注意的是Object.properties文件可不能放到當(dāng)前動(dòng)作類的目錄中,由于Objectjava.lang包中,因此,Object.properties要放到jdk包的java"lang目錄中。而對(duì)于ActionSupport.properties文件,當(dāng)然也不能放到動(dòng)作類的當(dāng)前目錄中,由于ActionSupport類中com.opensymphony.xwork2名中,因此,需要將ActionSupport.properties文件放到xwork2.jar包中的com\opensymphony\xwork2目錄中,由于放到jar文件中不太方便,因此,可以使一個(gè)和當(dāng)前動(dòng)作類在一個(gè)目錄的類先繼承ActionSupport,然后所有的動(dòng)作類都繼承于這個(gè)類。代碼如下:


          public class MyActionSupport extends ActionSupport
          {
              ... ...
          }
          public class ActionClass extends MyActionSupport
          {
              ... ...
          }

          這樣的話,只要存在一個(gè)MyActionSupport.properties,在當(dāng)前目錄下的所有動(dòng)作類都會(huì)讀取這個(gè)文件。

          3. Interface.properties:這類文件和BaseClass.properties類似,Interface表示動(dòng)作類實(shí)現(xiàn)的接口。

          4. 如果動(dòng)作類實(shí)現(xiàn)了ModelDriven, 那么重復(fù)第1步。

          5. package.properties:大家要注意。這個(gè)文件就叫package.properties。不象InterfaceBaseClass都是泛指。這個(gè)文件可以放到當(dāng)前動(dòng)作類的包的任何一層目錄下。如當(dāng)前動(dòng)作類在action.test包中。那么package.properties可以放到action目錄中,也可以放到action"test目錄中。Struts2會(huì)從離動(dòng)作類最近的位置開(kāi)始查找package.properties文件。

          6. 搜索il8n資源信息

          7. 查找全局資源屬性文件

              如下面是一個(gè)動(dòng)作類


          package action.test;

          import org.apache.struts2.*;
          import com.opensymphony.xwork2.ActionSupport;

          public class Internationalizing extends ActionSupport        
          {
              
          public String execute() throws Exception
              {
                  
          return "forward";
              }
          }

          action\test目錄下有一個(gè)Internationalizing.properties文件,內(nèi)容如下:

          delete = 刪除

          save = 保存

          我們可以在jsp文件中使用如下幾種方法取出資源信息:

          <s:property value="getText('delete')"/>

          <s:text name="save" />

              3. 使用<s:il8n>標(biāo)簽。這個(gè)標(biāo)簽可以直接定位屬性文件,如abc.propertiesWEB-INF\classes\test目錄下,內(nèi)容和Internationalizing.properties一樣,則可以使用如下的代碼讀取abc.properties的內(nèi)容:


          <%@ taglib prefix="s" uri="/struts-tags" %>
          <s:i18n name="test.abc">
              <s:text name="save" />
              
          <s:text name="delete" />
          </s:i18n>

          當(dāng)然,我們也可以使用全局的屬性文件,在WEB-INF"classes目錄下建立一個(gè)struts.properties文件,內(nèi)容如下:

          struts.custom.i18n.resources=my

          WEB-INF\classes目錄下建立一個(gè)my.properties文件,當(dāng)Struts2按著上述的順序沒(méi)有找到相應(yīng)的屬性文件時(shí),最后就會(huì)考慮尋找全局的屬性文件,因此,就會(huì)找到my.properties

             還可以通過(guò)屬性文件名來(lái)讓Struts2按著客戶端瀏覽器的語(yǔ)言環(huán)境來(lái)找符合某種語(yǔ)言的屬性文件。如有三個(gè)屬性文件language.propertieslanguage_en.propertieslanguage_zh.properties。如果客戶端的語(yǔ)言是中文,Struts2就會(huì)讀language_zh.properties,如果是英文,就會(huì)讀language_en.properties。如果這兩個(gè)文件的某個(gè)不存在,就會(huì)讀language.properties。讀者可通過(guò)IE的[工具]->[Internet]->[語(yǔ)言]來(lái)測(cè)試客戶端瀏覽器的語(yǔ)言,如圖1所示:



                                                圖1







          Android開(kāi)發(fā)完全講義(第2版)(本書(shū)版權(quán)已輸出到臺(tái)灣)

          http://product.dangdang.com/product.aspx?product_id=22741502



          Android高薪之路:Android程序員面試寶典 http://book.360buy.com/10970314.html


          新浪微博:http://t.sina.com.cn/androidguy   昵稱:李寧_Lining

          posted on 2008-05-20 16:06 銀河使者 閱讀(9642) 評(píng)論(10)  編輯  收藏 所屬分類: Struts2 原創(chuàng)

          評(píng)論

          # re: Struts2教程10:國(guó)際化  回復(fù)  更多評(píng)論   

          學(xué)習(xí)學(xué)習(xí)。
          2008-05-20 16:25 | 莫名

          # re: Struts2教程10:國(guó)際化[未登錄](méi)  回復(fù)  更多評(píng)論   

          那么,這位兄臺(tái),我想請(qǐng)問(wèn)下如果我用的是extjs+spring+hibernate的架構(gòu),這個(gè)還可以生效嗎?
          2008-05-20 21:35 | 小魚(yú)

          # re: Struts2教程10:國(guó)際化  回復(fù)  更多評(píng)論   

          to 小魚(yú)

          只要你使用了struts2,就可以生效。 處理屬性文件是由jdk完成的,而尋找屬性文件,是由struts2完成的。

          但如果你不用struts2,spring也支持國(guó)際化,不防使用spring的國(guó)際化功能。
          2008-05-20 22:13 | 銀河使者

          # re: Struts2教程10:國(guó)際化  回復(fù)  更多評(píng)論   

          學(xué)習(xí),不錯(cuò)啊!加油!!!
          2008-06-09 23:57 | javajavajava

          # re: Struts2教程10:國(guó)際化  回復(fù)  更多評(píng)論   

          銀河使者,沒(méi)有了???
          2008-08-20 14:59 | bigheadbird

          # re: Struts2教程10:國(guó)際化  回復(fù)  更多評(píng)論   

          正打算往下寫呢,不過(guò)現(xiàn)在正在寫這方面的書(shū),時(shí)間有點(diǎn)緊,所以最近沒(méi)更新blog。等寫完了,會(huì)繼續(xù)深入探討struts 2。
          2008-08-20 15:19 | 銀河使者

          # re: Struts2教程10:國(guó)際化  回復(fù)  更多評(píng)論   

          樓主要出書(shū)嗎?要買來(lái)看看!
          2008-11-01 17:38 | daoyongyu

          # re: Struts2教程10:國(guó)際化[未登錄](méi)  回復(fù)  更多評(píng)論   

          沒(méi)有了?寫的很好,希望樓主繼續(xù)寫
          2010-07-23 11:23 | 楓葉

          # re: Struts2教程10:國(guó)際化  回復(fù)  更多評(píng)論   

          支持!!
          2011-03-23 10:00 | 廖世勇

          # re: Struts2教程10:國(guó)際化  回復(fù)  更多評(píng)論   

          真是一個(gè)java高手啊,寫的不錯(cuò),學(xué)習(xí)了!
          2012-05-29 21:33 | 愛(ài)來(lái)吧
          主站蜘蛛池模板: 黎川县| 昌黎县| 右玉县| 杂多县| 贡山| 平江县| 虹口区| 眉山市| 清河县| 陆河县| 河东区| 兴安盟| 通州市| 开原市| 建阳市| 诸城市| 阳东县| 孟州市| 莱芜市| 茶陵县| 南漳县| 通许县| 万年县| 平远县| 肥乡县| 雅安市| 建昌县| 开远市| 襄樊市| 哈密市| 古丈县| 城市| 巴楚县| 漳州市| 三亚市| 西吉县| 白城市| 黄山市| 谢通门县| 龙海市| 南澳县|