程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> Struts2教程10:國際化

Struts2教程10:國際化

編輯:關於JAVA

國際化的作用就是根據不同國家的用戶在訪問Web或其他類型的程序時,將各種信息以本地的常用形式顯示出來,如界面信息在中國,就會顯示中文信息,在以英文為主的國家裡,就會顯示英文信息。還有就是一些信息的格式,如日期格式等。

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

1.ActionClass.properties:屬性文件名和動作類同名。Struts2會首先查詢與當前訪問的動作類同名,並且和ActionClass.class在同一個目錄下的屬性文件。

2.BaseClass.properties:BaseClass表示動作類的基類。所有動作類都會查找Object.properties文件(因為Object是所有Java類的基類),但要注意的是Object.properties文件可不能放到當前動作類的目錄中,由於Object在java.lang包中,因此,Object.properties要放到jdk包的java"lang目錄中。而對於ActionSupport.properties文件,當然也不能放到動作類的當前目錄中,由於ActionSupport類中com.opensymphony.xwork2名中,因此,需要將ActionSupport.properties文件放到xwork2.jar包中的com\opensymphony\xwork2目錄中,由於放到jar文件中不太方便,因此,可以使一個和當前動作類在一個目錄的類先繼承ActionSupport,然後所有的動作類都繼承於這個類。代碼如下:

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

這樣的話,只要存在一個MyActionSupport.properties,在當前目錄下的所有動作類都會讀取這個文件。

3.Interface.properties:這類文件和BaseClass.properties類似,Interface表示動作類實現的接口。

4.如果動作類實現了ModelDriven, 那麼重復第1步。

5.package.properties:大家要注意。這個文件就叫package.properties。不象Interface和BaseClass都是泛指。這個文件可以放到當前動作類的包的任何一層目錄下。如當前動作類在action.test包中。那麼package.properties可以放到action目錄中,也可以放到action"test目錄中。Struts2會從離動作類最近的位置開始查找package.properties文件。

6.搜索il8n資源信息

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

如下面是一個動作類

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目錄下有一個Internationalizing.properties文件,內容如下:

delete = 刪除

save = 保存

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

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

<s:text name="save" />

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

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

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

struts.custom.i18n.resources=my

在WEB-INF\classes目錄下建立一個my.properties文件,當Struts2按著上述的順序沒有找到相應的屬性文件時,最後就會考慮尋找全局的屬性文件,因此,就會找到my.properties。

還可以通過屬性文件名來讓Struts2按著客戶端浏覽器的語言環境來找符合某種語言的屬性文件。如有三個屬性文件language.properties、language_en.properties、language_zh.properties。如果客戶端的語言是中文,Struts2就會讀language_zh.properties,如果是英文,就會讀language_en.properties。如果這兩個文件的某個不存在,就會讀language.properties。讀者可通過IE的[工具]->[Internet]->[語言]來測試客戶端浏覽器的語言,如圖1所示:

圖1

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved