在struts2中需要做国际化的有:
jsp页面的国际化,action错误信息的国际化,转换错误信息的国际化,校验错误信息的国际化
jsp页面的国际化
第一步
在src目录下新建tanggao_en_US.properties,内容为
username=username
password=password
tanggao_zh_CN.properties文件,内容为
username=\u7528\u6237\u540D
password=\u5BC6\u7801
第二步
在struts.xml中配置
<constant name="struts.custom.i18n.resources" value="tanggao"></constant>
其中的tanggao就是国际化资源文件的baseNmae
第三步 在jsp页面中显示 方法
<s:debug></s:debug>
<s:text name="username"></s:text>
<s:form action="Hello" >
<s:textfield name="username" key="username"></s:textfield>
<s:password name="password" key="password"> </s:password>
<s:submit></s:submit>
</s:form>
结果如下图:
action错误的国际化
在tanggao_en_US.properties中增加以下内容
username.invalid=username invalid…
在tanggao_zh_CN.properties中增加以下内容
username.invalid=\u7528\u6237\u540d\u4e0d\u5408\u6cd5…
修改HelloAction中的validate方法,将错误加到ActionError中,在这里将使用到ActionSupport中的getText方法获得和国际化资源文件相关的信息。
以username验证为例:
if (null == username || username.length() = "" || username.length() > 10) {
this.addActionError(this.getText("username.invalid"));
}
验证框架的国际化(field级别错误)
在message_en_US.properties文件中增加以下内容
username.xml.invalid=validate information
在message_zh_CN.properties文件中增加以下内容
username.xml.invalid=\u9a8c\u8bc1\u6846\u67b6\u4fe1\u606f
然后修改验证框架,需要将在properties文件中的内容增加到框架中。
以username为例
<field name="username">
<field-validator type="requiredstring">
<param name="trim">true</param>
<message key="username.xml.invalid"></message>
</field-validator>
</field>
在message标签中增加属性key,值为properties文件中的key
标签中key大多是和国际化相关的
国际化资源文件的分类
当应用程序很大时,需要国际化的东西会很多,因此需要将国际化资源文件进行分类。
需要知道的是在src中的properties文件是全局资源文件,另外还可以分为包级别的和类级别的
首先看看包级别的
命名规则为package_language_country.properties
新建package_en_US.properties,内容为
username.xml.invalid=package validate information
新建package_zh_CN.properties,内容为
username.xml.invalid=\u5305\u9a8c\u8bc1\u4fe1\u606f
可以看到输出的信息为“包验证信息”,由此可见包级别的国际化资源文件的优先级高于全局国际化资源文件。
类级别
新建HelloAction_en_US.properties,内容为
username.xml.invalid=class validate information
新建HellAction_zh_CN.properties,内容为
username.xml.invalid=\u7c7b\u9a8c\u8bc1\u4fe1\u606f
此时可以看到输出的信息为“类验证信息”。
由此可以得到国际化资源文件的优先级
全局<包级别<类级别
另外要进行表单的国际化时,要去掉theme=”simple”
在HelloAction_en_US.properties中增加
username.name=username
在HelloAction_zh_CN.properties中增加
username.name=\u7528\u6237\u540d
修改表单标签
<s:textfield name="username" key="username.name"></s:textfield>
注意到key一般是和国际化相关的。
另外除了用
另外除了用这个标签外,还可以使用这个标签
<s:i18n name="temp"></s:i18n>
标签中包含name,代表着可以定义资源文件的baseName,如可以定义成temp,那么对应着
temp_en_US.properties和temp_zh_CN.properties这两个资源文件。
如定义:
<s:i18n name="hello">
<s:text name="world">
<s:param>struts2</s:param>
</s:text>
</s:i18n>
注意到可以在标签中增加 标签。
在hello_en_US.properties文件中增加
world=hello {0}
hello_zh_CN.properties中增加
world=\u4f60\u597d,struts2
在struts2的默认拦截器栈中已经定义了i18n拦截器,所以struts2已经是一个国际化的框架了。
struts2会查找从客户端提交的request_locale属性,并存到session中的WW_TRANS_I18N_LOCALE字段
中。
这个 标签外,还可以使用 这个标签
<s:i18n name="temp"></s:i18n>
总结一下显示方法:
<s:textname="username"></s:text>
getText("username.invalid")
<message key="username.xml.invalid"></message>
<s:textfield name="username" key="username.name"></s:textfield>
<s:i18n name="temp"></s:i18n>