zoukankan      html  css  js  c++  java
  • 41.国际化

    转自:https://wenku.baidu.com/view/84fa86ae360cba1aa911da02.html

    尽管国际化不是重点内容,但是也有必要了解它的使用。在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中的内容:

    (我的补充:action必须继承ActionSupport类,该类封装了对资源文件的访问,首先寻找类级配置文件,无果则向上寻找包级配置文件,无果则向上寻找再上一层的包级配置文件。

    1访问继承了ActionSupport的action---2获取配置信息----3返回success并转向jsp页面---4在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选项中改变语言实现国际化的访问。

  • 相关阅读:
    Lua 数组
    javascript debugger
    Lua 字符串
    警告
    Lua中获取table长度
    Lua 运算符
    Lua 函数
    lua if 流程控制
    pairs 和 ipairs 的区别
    Lua 循环
  • 原文地址:https://www.cnblogs.com/sharpest/p/5591229.html
Copyright © 2011-2022 走看看