Struts2 国际化(二十一)

本文介绍Struts2框架中如何配置和使用国际化资源文件,包括全局、包和Action范围的资源文件配置方法,以及如何在JSP页面和Action中访问这些资源。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

国际化资源文件的搜索顺序 :action-->package--->parent package--->全局

[b][color=red]先说,采用临时文件和 i18n 标签来访问多个范围内的资源文件
要在jsp页面同时应用多个范围的资源文件,就采用 i18n 标签来指定,而且还不需要在struts.xml中配置[/color][/b]

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>



[b][color=red]再说全局资源文件 和 package 范围 和 action 范围的文件 有占位符的访问(需要配置)[/color][/b]

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>


[b][color=red]package范围的资源文件 (在struts.xml中配置)[/color][/b]
放在对应的包下面 命名: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>

[b][color=red]Action范围的资源文件(在struts.xml中配置)[/color][/b]
命名格式为: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 和上面的一样
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值