假如这个世界上只剩下你一个人,当你正坐在屋子里的时候,这时突然响起了敲门声...
Struts2教程10:国际化
上一篇 / 下一篇 2008-05-20 22:25:51 / 个人分类:struts2
查看( 429 ) /
评论( 0 )
本文为原创,如需转载,请注明作者和出处,谢谢!
.[*t|-p2L D0ITPUB个人空间dJG"Q4Drx|eV
国际化的作用就是根据不同国家的用户在访问Web或其他类型的程序时,将各种信息以本地的常用形式显示出来,如界面信息在中国,就会显示中文信息,在以英文为主的国家里,就会显示英文信息。还有就是一些信息的格式,如日期格式等。
} CWM+P[-R;J)M{A\0ITPUB个人空间"cw"Z0u q
从属性文件中获得字符串信息是国际化的基本应用。在Struts2中使用的属性文件就是Java属性文件,扩展名为properties。在Struts2中的属性文件可以有很多默认的位置,Struts2可按如下的顺序(或步骤)来定位属性文件:
X,dFaK,]0
3p7\Xz0uN0 1. ActionClass.properties:属性文件名和动作类同名。Struts2会首先查询与当前访问的动作类同名,并且和ActionClass.class在同一个目录下的属性文件。ITPUB个人空间7E(C5a0cNq Sm
ITPUB个人空间@ qi.U-y
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包中的comopensymphonyxwork2目录中,由于放到jar文件中不太方便,因此,可以使一个和当前动作类在一个目录的类先继承ActionSupport,然后所有的动作类都继承于这个类。代码如下:ITPUB个人空间;ZJ:eCQ8Tf
ITPUB个人空间8vkW9B'Bh7Edc$p
public class MyActionSupport extends ActionSupportITPUB个人空间_w;g(Z2_o.M
{ITPUB个人空间bwb'uBn`RZ
... ...ITPUB个人空间 I{+?._L0H(DC
}
F6F]5sYy2H,s0public class ActionClass extends MyActionSupportITPUB个人空间 sa"UfaX)c:U$K
{
azVE\M0 ... ...
;@|Z#MC5K$y|0}ITPUB个人空间m%w*Hn+x qs
ITPUB个人空间H'_UuoG
这样的话,只要存在一个MyActionSupport.properties,在当前目录下的所有动作类都会读取这个文件。
2ZN$y7^wt ?Gq5zj0
0?-{.\pC P,?03. Interface.properties:这类文件和BaseClass.properties类似,Interface表示动作类实现的接口。ITPUB个人空间/~]MOu
G-t4w8D.hi04. 如果动作类实现了ModelDriven, 那么重复第1步。
Mx xP[ ]&XH.FLf*e0ITPUB个人空间_u ~"h#QgY
5. package.properties:大家要注意。这个文件就叫package.properties。不象Interface和BaseClass都是泛指。这个文件可以放到当前动作类的包的任何一层目录下。如当前动作类在action.test包中。那么package.properties可以放到action目录中,也可以放到action"test目录中。Struts2会从离动作类最近的位置开始查找package.properties文件。ITPUB个人空间`.W#Lg,@@]E
ITPUB个人空间Z2M8`{aV-y `o
6. 搜索il8n资源信息
:a(TE$Sp0ITPUB个人空间q,|TOd\.].^JH
7. 查找全局资源属性文件ITPUB个人空间4V._2cTPtxcCf}+n
!i%x{+G"f0 如下面是一个动作类
2w-ovvi`^)~0ITPUB个人空间h0t9JG6G|u
package action.test;ITPUB个人空间^+MU `;a en-B8J
ITPUB个人空间Nv3f's2\1vB)D
import org.apache.struts2.*;
0K0h;KC"J(p0import com.opensymphony.xwork2.ActionSupport;
M)T9tH2CT0ITPUB个人空间!YG-d&t&`K!`
public class Internationalizing extends ActionSupport
g)`3H Y&{'nC0{
4`w ~O%FZ6C(}'uj0 public String execute() throws ExceptionITPUB个人空间Ms dh4nU)\
{ITPUB个人空间,z:uVA3k
return "forward";ITPUB个人空间fH9K|x E$KAB
}
Uq.E;OpRzH2w0}ITPUB个人空间.\*kon8IdE!e
ITPUB个人空间R$W|s+j'q-~|w
在action est目录下有一个Internationalizing.properties文件,内容如下:
4qgb Wm RYDz1Q0ITPUB个人空间9o7[:i1sWh/b
delete = 删除ITPUB个人空间]4E@0\#kl.? b
ITPUB个人空间MP}T;v2L
save = 保存ITPUB个人空间%zp?4AX[
^'n0t%Dc4yNg0我们可以在jsp文件中使用如下几种方法取出资源信息:ITPUB个人空间;{Qyd1tK |'aJ
yW|A;\hb*r/@ s0<s:property value="getText('delete')"/>
,LUCA+p5VS[0
Y5{GDmO_9f0<s:text name="save" />ITPUB个人空间9z(gK.X!J:X4Z
ITPUB个人空间{;Bb(f/Q$X
3. 使用<s:il8n>标签。这个标签可以直接定位属性文件,如abc.properties在WEB-INFclasses est目录下,内容和Internationalizing.properties一样,则可以使用如下的代码读取abc.properties的内容:ITPUB个人空间4Y+y*QE,X.@e;iT1p
ITPUB个人空间AM$NtM;_(Y/q
<%@ taglib prefix="s" uri="/struts-tags" %>
p;G3D!U0}4Z V,OV1iI0<s:i18n name="test.abc">ITPUB个人空间1`!H8P5mDo$P:T!y p&B
<s:text name="save" />
u9vJ3~9w-~8RrKs0 <s:text name="delete" />ITPUB个人空间7t3jsa0TD,U
</s:i18n>
tq@6T6^(qL0
$rh'{n)l0当然,我们也可以使用全局的属性文件,在WEB-INF"classes目录下建立一个struts.properties文件,内容如下:ITPUB个人空间*s j'v kjHK7s
.[*t|-p2L D0ITPUB个人空间dJG"Q4Drx|eV
国际化的作用就是根据不同国家的用户在访问Web或其他类型的程序时,将各种信息以本地的常用形式显示出来,如界面信息在中国,就会显示中文信息,在以英文为主的国家里,就会显示英文信息。还有就是一些信息的格式,如日期格式等。
} CWM+P[-R;J)M{A\0ITPUB个人空间"cw"Z0u q
从属性文件中获得字符串信息是国际化的基本应用。在Struts2中使用的属性文件就是Java属性文件,扩展名为properties。在Struts2中的属性文件可以有很多默认的位置,Struts2可按如下的顺序(或步骤)来定位属性文件:
X,dFaK,]0
3p7\Xz0uN0 1. ActionClass.properties:属性文件名和动作类同名。Struts2会首先查询与当前访问的动作类同名,并且和ActionClass.class在同一个目录下的属性文件。ITPUB个人空间7E(C5a0cNq Sm
ITPUB个人空间@ qi.U-y
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包中的comopensymphonyxwork2目录中,由于放到jar文件中不太方便,因此,可以使一个和当前动作类在一个目录的类先继承ActionSupport,然后所有的动作类都继承于这个类。代码如下:ITPUB个人空间;ZJ:eCQ8Tf
ITPUB个人空间8vkW9B'Bh7Edc$p
public class MyActionSupport extends ActionSupportITPUB个人空间_w;g(Z2_o.M
{ITPUB个人空间bwb'uBn`RZ
... ...ITPUB个人空间 I{+?._L0H(DC
}
F6F]5sYy2H,s0public class ActionClass extends MyActionSupportITPUB个人空间 sa"UfaX)c:U$K
{
azVE\M0 ... ...
;@|Z#MC5K$y|0}ITPUB个人空间m%w*Hn+x qs
ITPUB个人空间H'_UuoG
这样的话,只要存在一个MyActionSupport.properties,在当前目录下的所有动作类都会读取这个文件。
2ZN$y7^wt ?Gq5zj0
0?-{.\pC P,?03. Interface.properties:这类文件和BaseClass.properties类似,Interface表示动作类实现的接口。ITPUB个人空间/~]MOu
G-t4w8D.hi04. 如果动作类实现了ModelDriven, 那么重复第1步。
Mx xP[ ]&XH.FLf*e0ITPUB个人空间_u ~"h#QgY
5. package.properties:大家要注意。这个文件就叫package.properties。不象Interface和BaseClass都是泛指。这个文件可以放到当前动作类的包的任何一层目录下。如当前动作类在action.test包中。那么package.properties可以放到action目录中,也可以放到action"test目录中。Struts2会从离动作类最近的位置开始查找package.properties文件。ITPUB个人空间`.W#Lg,@@]E
ITPUB个人空间Z2M8`{aV-y `o
6. 搜索il8n资源信息
:a(TE$Sp0ITPUB个人空间q,|TOd\.].^JH
7. 查找全局资源属性文件ITPUB个人空间4V._2cTPtxcCf}+n
!i%x{+G"f0 如下面是一个动作类
2w-ovvi`^)~0ITPUB个人空间h0t9JG6G|u
package action.test;ITPUB个人空间^+MU `;a en-B8J
ITPUB个人空间Nv3f's2\1vB)D
import org.apache.struts2.*;
0K0h;KC"J(p0import com.opensymphony.xwork2.ActionSupport;
M)T9tH2CT0ITPUB个人空间!YG-d&t&`K!`
public class Internationalizing extends ActionSupport
g)`3H Y&{'nC0{
4`w ~O%FZ6C(}'uj0 public String execute() throws ExceptionITPUB个人空间Ms dh4nU)\
{ITPUB个人空间,z:uVA3k
return "forward";ITPUB个人空间fH9K|x E$KAB
}
Uq.E;OpRzH2w0}ITPUB个人空间.\*kon8IdE!e
ITPUB个人空间R$W|s+j'q-~|w
在action est目录下有一个Internationalizing.properties文件,内容如下:
4qgb Wm RYDz1Q0ITPUB个人空间9o7[:i1sWh/b
delete = 删除ITPUB个人空间]4E@0\#kl.? b
ITPUB个人空间MP}T;v2L
save = 保存ITPUB个人空间%zp?4AX[
^'n0t%Dc4yNg0我们可以在jsp文件中使用如下几种方法取出资源信息:ITPUB个人空间;{Qyd1tK |'aJ
yW|A;\hb*r/@ s0<s:property value="getText('delete')"/>
,LUCA+p5VS[0
Y5{GDmO_9f0<s:text name="save" />ITPUB个人空间9z(gK.X!J:X4Z
ITPUB个人空间{;Bb(f/Q$X
3. 使用<s:il8n>标签。这个标签可以直接定位属性文件,如abc.properties在WEB-INFclasses est目录下,内容和Internationalizing.properties一样,则可以使用如下的代码读取abc.properties的内容:ITPUB个人空间4Y+y*QE,X.@e;iT1p
ITPUB个人空间AM$NtM;_(Y/q
<%@ taglib prefix="s" uri="/struts-tags" %>
p;G3D!U0}4Z V,OV1iI0<s:i18n name="test.abc">ITPUB个人空间1`!H8P5mDo$P:T!y p&B
<s:text name="save" />
u9vJ3~9w-~8RrKs0 <s:text name="delete" />ITPUB个人空间7t3jsa0TD,U
</s:i18n>
tq@6T6^(qL0
$rh'{n)l0当然,我们也可以使用全局的属性文件,在WEB-INF"classes目录下建立一个struts.properties文件,内容如下:ITPUB个人空间*s j'v kjHK7s