码迷,mamicode.com
首页 > 其他好文 > 详细

struts2.1.6教程七、国际化

时间:2015-04-16 13:49:12      阅读:170      评论:0      收藏:0      [点我收藏+]

标签:

尽管国际化不是重点内容,但是也有必要了解它的使用。在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.选择使用资源文件

 

struts2.1.6教程七、国际化

标签:

原文地址:http://www.cnblogs.com/crazylqy/p/4431600.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!