尽管国际化不是重点内容,但是也有必要了解它的使用。在struts2中国际化有三种级别:分别是针对某个Action的action级别,针对package的package级别,针对webapp的webapp级别。下面我们建立struts2i18n项目来演示国际化在struts2中的使用。
1.action级别下的国际化
步骤一、首先是建立login.jsp及LoginAction,由于它们经常使用,在此省去它们的代码。
步骤二、建立资源文件,由于LoginAction在com.asm包中,所以我们应在com.asm包下我们建立两个资源文件:一个是中文LoginAction_zh_CN.properties、一个是英文LoginAction_en_US.properties。注意它们的名字相对固定,前面与Action的名字相同,后面是语言和国家代码。
英文资源文件内容如下:
login_page=login page login_username=userName login_password=password login_sex=sex login_male=male login_female=female login_submit=login login_reset=reset login_suc=Welcome {0}
中文资源文件,需要特别注意:我们应使用Myeclipse自带的MyEclipse properties Editer编辑器来打开此资源文件,并在properties视图下进行编辑,这样它会把中文进行编码(我们切换到source视图下可以看到经编码后的中文)。 这一步非常重要,否则会出现乱码。
步骤三,修改login.jsp中的内容:
<%@ page language="java" pageEncoding="utf-8"%> <%@ taglib uri="/struts-tags" prefix="s"%> <html> <body> <s:text name="login_page"/><br> <s:label key="login_username"/> <s:form action="/login.action" method="post"> <!-- <s:textfield label="用户名" name="username" required="true" /> --> <s:textfield label="%{getText(‘login_username‘)}" name="username" /> <!-- <s:password label="密码" name="password" required="true"/> --> <s:password key="login_password" name="password" /> <!-- <s:radio list="#{1:‘男‘,2:‘女‘}" value="1" label="性别" name="sex" /> --> <s:radio list="#{1:getText(‘login_male‘),2:getText(‘login_female‘)}" value="1" label="%{getText(‘login_sex‘)}" name="sex" /> <s:submit key="login_submit" /> <s:reset key="login_reset"/> </s:form> </body> </html>
说明:对资源文件的引用,我们采取了两种方式
:有的是通过在label中使用%{getText(‘资源文件中的key‘)}这样的形式,
有的是通过key=资源文件中的key这种形式。需要注意在radio标签中list对资源文件的引用。另外需要注意:
<s:text name="login_page"/><br> <s:label key="login_username"/>
它们的区别:前面是纯文本,后者是一个块。我们可以通过查看login.jsp的源码来证明。
步骤四、当我们直接访问login.jsp时会报错,因为在login.jsp中用到了资源文件,而资源文件又依赖于LoginAction,所以我们只能通过此Action来跳到login.jsp。但是使用包范围、全局范围的资源文件时,可以直接访问login.jsp文件实现国际化。操作步骤如下:
首先在LoginAction中增加一个方法:
public String doGoLogin() { return LOGIN; }
随后再在struts.xml中配置如下内容:
<package name="i18n" extends="struts-default" namespace="/"> <action name="login" class="com.asm.LoginAction"> <result name="success">success.jsp</result> <result name="login">login.jsp</result> </action> </package>
接着再编写一个link.jsp页面,内容如下:
<a href="<%=request.getContextPath() %>/login!goLogin.action">登录</a>
直接访问Action中的方法 格式:doX(大写)xxx ---- ActionName!x(小写)xxx.action 注意此方法和前面二.7中相关方法的区别。 我们通过此Action跳转到login.jsp这样便能成功访问到login.jsp页面。
步骤五、在success.jsp中使用资源文件,主要内容如下
<s:text name="login_suc"> <s:param value="%{username}"></s:param> </s:text>
说明:在前面的资源文件中,我们配置了login_suc=Welcome {0},其中{0}表示占位参数,这里我们使用<s:param>来给此参数赋值。
步骤六、测试:在ie的internet选项中改变语言实现国际化的访问。
2.配置package的资源文件
3.app级别的资源文件
4.使用资源文件的原理
5.选择使用资源文件