国际化资源文件的搜索顺序 :action-->package--->parent package--->全局
先说,采用临时文件和 i18n 标签来访问多个范围内的资源文件
要在jsp页面同时应用多个范围的资源文件,就采用 i18n 标签来指定,而且还不需要在struts.xml中配置
1.properties属性配置文件 将下面 三种不同范围的资源文件,放在对应的目录下面
2.jsp页面
<body>
====访问全局资源文件
<!--全局资源文件的 baseName-->
<s:i18n name="globalMessages">
<h3>
<s:text name="loginTitle"/>
</h3>
<s:form action="checkLogin" method="post">
<s:textfield name="loginName" key="loginName" />
<s:textfield name="loginPassword" key="loginPassword"/>
<s:submit key="loginBtn"/>
<s:token/>
</s:form>
<s:text name="loginName"></s:text>
</s:i18n>
====访问package范围的资源文件
<!--包资源文件的 完整路径->
<s:i18n name="com.sh.action.package">
<h3>
<s:text name="loginTitle"/>
</h3>
<s:form action="checkLogin" method="post">
<s:textfield name="loginName" key="loginName" />
<s:textfield name="loginPassword" key="loginPassword"/>
<s:submit key="loginBtn"/>
<s:token/>
</s:form>
</s:i18n>
====访问Action范围的资源文件
<!--Action范围资源文件的 完整路径->
<s:i18n name="com.sh.action.LoginAction">
<h3>
<s:text name="loginTitle"/>
</h3>
<s:form action="checkLogin" method="post">
<s:textfield name="loginName" key="loginName" />
<s:textfield name="loginPassword" key="loginPassword"/>
<s:submit key="loginBtn"/>
<s:token/>
</s:form>
</s:i18n>
</body>
再说全局资源文件 和 package 范围 和 action 范围的文件 有占位符的访问(需要配置)
1.Struts2框架将国际化信息定义在资源文件中,同时还需要在配置文件中对资源文明进行配置,告诉Struts2框架所有需要加载的资源文件。
baseName_language_country.properties
2.使用struts.xml文件
<!--在struts.xml文件中配置国际化资源文件,一般是通过设置常量来实现。-->
<constant name="struts.custom.i18n.resources" value="globaleMessages"/>
3.使用struts.properties文件
如果在struts.properties文件中实现,则使用key-value的代码格式,配置代码如下:
struts.custom.i18n.resources=globalMessages
4.使用web.xml文件
如果在web.xml文件中实现,则使用<param-name> 和<param-value>元素,配置代码如下:
<init-param>
<param-name>struts.custom.i18n.resources</param-name>
<param-value>globaleMessage</param-value>
</init-param>
5.配置Struts2国际化资源信息需要两个值
struts.custom.i18n.resources 和 globalMessages;
struts.custom.i18n.resources 在struts2框架中 表示国际化的常量,是一个固定不变的值,
globalMessage
表示全局国际化资源文件的basename值,所以对应的全局国际化资源文件,所以对应的全局国际化资源文件,可以是 globalMessage_zh_CN.properties,
globaleMessage_en_US.properties.等这些文件的命名格式符合
baseName_language_country的格式。
6.native2ascii 命令的使用
//在 jdk bin 目录下 建一个记事本 temp.xml
userName=姓名
userPassword=密码
win+r cmd cd D:\ProgramFiles\Java\jdk1.6.0_17\bin
native2ascii temp.text globalMessages_zh_CN.properties
7.Struts2的国际化支持占位符,从而可以更加灵活的输出国际化信息,占位符鼻息使用参数来填充。
A:在jsp中填充国际化资源信息是的占位符
通过<s:text>标签中嵌套多个<s:param>标签来填充占位符。
B:在Action中填充国际化资源信息时的占位符
这种情况在action中可以调用getTest()方法来填充占位符。
8.globalMessages_zh_CN.properties
loginBtn=登录
loginName=用户名
loginPassword=密码
loginTitle=用户登录
loginSuccess=欢迎 {0} 登录成功!
9.globalMessages_en_US.properties
loginBtn=Login
loginTitle=UserLogin
loginName=LoginName
loginPassword=LoginPassword
loginSuccess=welcome {0} login Success!
11.在action 中给占位符赋值 使用 getTest()
public String checkLogin(){
this.message=this.getText("loginSuccess",new String[]{this.loginName});
return SUCCESS;
}
12.struts.xml
<struts>
<!-- 定义国际化资源文件的基本名称 -->
<constant name="struts.custom.i18n.resources" value="globalMessages"/>
<constant name="struts.i18n.encoding" value="utf-8"/>
<package name="/user" extends="struts-default">
<action name="checkLogin" class="com.sh.action.LoginAction" method="checkLogin">
<result name="success">/index.jsp</result>
</action>
</package>
</struts>
13.login.jsp 有占位符的访问
<body>
<center>
<h3>第一种方式,在jsp页面里面填充带占位符的国际化信息<h3>
<s:text name="loginSuccess">
<s:param>
<s:property value="loginName"/>
</s:param>
</s:text>
<h3>第二种方式,在Action中填充带占位符的国际化信息</h3>
<s:property value="message"/>
</center>
</body>
14.没有占位符的访问
<body>
<center>
<h3>
<s:text name="loginTitle"/>
</h3>
<s:form action="checkLogin" method="post">
<s:textfield name="loginName" key="loginName"/>
<s:textfield name="loginPassword" key="loginPassword"/>
<s:submit key="loginBtn"/>
<s:token/>
</s:form>
</center>
</body>
package范围的资源文件 (在struts.xml中配置)
放在对应的包下面 命名:package_language_country.properties(固定格式)
com.ah.action/LoginAction.java
package com.sh.action;
import com.opensymphony.xwork2.ActionSupport;
public class LoginAction extends ActionSupport{
private String loginName;
private String loginPassword;
private String message;
public String checkLogin(){
this.message=this.getText("loginSuccess",new String[]{this.loginName});
return SUCCESS;
}
}
properties
//中文 com.sh.action/package_zh_CN.properties
loginBtn=package:登录
loginName=package:用户名
loginPassword=package:密码
loginTitle=package:用户登录
loginSuccess=package:欢迎 {0} 登录成功!
// 英文 com.sh.action/package_en_US.properties
loginBtn=package:Login
loginTitle=package:UserLogin
loginName=package:LoginName
loginPassword=package:LoginPassword
loginSuccess=package:welcome {0} login Success!
struts.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<!-- 定义包范围的 国际化资源文件的基本名称 package -->
<constant name="struts.custom.i18n.resources" value="com.sh.action.package"/>
<constant name="struts.i18n.encoding" value="utf-8"/>
<package name="/user" extends="struts-default">
<action name="checkLogin" class="com.sh.action.LoginAction" method="checkLogin">
<result name="success">/index.jsp</result>
</action>
</package>
</struts>
jsp
<body>
<center>
<h3>
<s:text name="loginTitle"/>
</h3>
<s:form action="checkLogin" method="post">
<s:textfield name="loginName" key="loginName" />
<s:textfield name="loginPassword" key="loginPassword"/>
<s:submit key="loginBtn"/>
<s:token/>
</s:form>
<s:text name="loginName"></s:text>
</center>
</body>
Action范围的资源文件(在struts.xml中配置)
命名格式为:ActionName_language_country.properties 放action同一级目录下面
//英文 LoginAction_en_US.properties
loginBtn=Action:Login
loginTitle=Action:UserLogin
loginName=Action:LoginName
loginPassword=Action:LoginPassword
loginSuccess=Action:welcome {0} login Success!
//中文 LoginAction_zh_CN.properties
loginBtn=Action:登录
loginName=Action:用户名
loginPassword=Action:密码
loginTitle=Action:用户登录
loginSuccess=Action:欢迎 {0} 登录成功!
struts.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<!-- 定义 Action 范围的国际化资源文件的基本名称 -->
<constant name="struts.custom.i18n.resources" value="com.sh.action.LoginAction"/>
<constant name="struts.i18n.encoding" value="utf-8"/>
<package name="/user" extends="struts-default">
<action name="checkLogin" class="com.sh.action.LoginAction" method="checkLogin">
<result name="success">/index.jsp</result>
</action>
</package>
</struts>
action , jsp 和上面的一样