Struts2国际化

应用程序国际化

  • 软件的本地化:一个软件在某个国家或地区使用时,采用该国家或地区的语言,数字,货币,日期等习惯。
  • 软件的国际化:软件开发时,让它能支持多个国家和地区的本地化应用。使得应用软件能够适应多个地区的语言和文化风俗习惯。

  • 资源文件和资源包

    要用Struts实现国际化和本地化,首先要定义资源文件的名称,这个文件会包含用默认语言编写的会在程序中出现的所有消息。这些消息以”键-值“对的形式存储,如下:
    error.validation.localtion = The entered location is invalid
    当对一个应用程序进行国际化处理时,所要用的各种语言版本的”标签“信息应该存放在不同的属性文件中,每一个这样的文件对应一种语言版本。所有属性文件合在一起称为资源包(Resource Bundle)。
    属性文件的命名格式可分为以下两种:
    a)文件名前缀.properties
    b)文件名前缀_语言种类.properties文件名后缀必须是properties,前缀可自由书写,其中语言种类字段必须是有效的ISO语言代码。

  • 文件名前缀.properties默认的形式,当其他属性文件找不到时,会默认的寻找此属性文件。
    这里写图片描述


配置全局资源与输出国际化信息

1、 准备资源文件
2 、在struts.xml中使用struts.custom.i18n.resources常量即可加载全局资源文件

    <constant name="struts.custom.i18n.resources" 
                       value="cn.itcast.i18n.resource" />

resource为资源文件的基本名。
3、在jsp页面获取国际化的资源文件的信息

方法一:使用text标签: 用来显示一条国际化消息的数据标签. 相当于从property

标签调用 getText 方法. 该标签包含如下属性:
* name: 用来检索消息的键
* var:用来引用压入 ContextMap 栈的值的变量名
* 可以通过  param 子标签向 text 标签传递参数   <s:text name="item.username"/>

这里写图片描述

I18nAction 文件

package cn.itcast.i18n;

import com.opensymphony.xwork2.ActionSupport;

@SuppressWarnings("serial")
public class I18nAction extends ActionSupport {

    public String login(){
        System.out.println("I18nAction ************* login()");

        String username = this.getText("items.username");
        System.out.println("username = "+username);

        String psw = this.getText("items.psw");
        System.out.println("password = "+psw);

        return "success";
    }

}

jsp文件:

<%@ page language="java"  pageEncoding="UTF-8" contentType="text/html; charset=utf-8"%>
<%@ taglib uri="/struts-tags" prefix="s" %>
<html>
  <head>    
    <title>My JSP 'login.jsp' starting page</title>
  </head>
  <body>
       <s:i18n name="cn.itcast.i18n.resources">
       <form name="loginForm" method="post" 
            action="${pageContext.request.contextPath}/i18n/i18nAction_login.action">
         <table border="1">
           <tr>
              <td><s:text name="items.username" /></td>
              <td><input type="text" name="username"/></td>
           </tr>
           <tr>
              <td><s:text name="items.psw" /></td>
              <td><input type="password" name="psw"/></td>
           </tr>
         <tr>
              <td>&nbsp;</td>
              <td><input type="submit" value="<s:text name='items.login'/>"/></td>
           </tr>
         </table>
     <form>
     </s:i18n>
  </body>
</html>

这里写图片描述
这里写图片描述
这里写图片描述
后台输出:
这里写图片描述

方法二:使用ognl表达式

     可以使用 property 标签或是使用某个表单标签的 label 属性, 来显示一条调用 getText()
     方法而得到的本地消息: 
     <s:textfield name="username" label="%{getText('item.username')}" />
     <s:property value="%{getText('item.username')}" />

全局资源文件中含有占位符

这里写图片描述
使用text标签传递参数:
资源文件的信息
item.test={0},欢迎来到传智播客{1}

jsp页面
         <s:text name="item.test">
                <s:param>用户名</s:param>      {0}
                <s:param>密码</s:param>         {1}     
          </s:text>
<%@ page language="java"  pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s" %>
<html>
  <head>    
    <title>My JSP 'login.jsp' starting page</title>
  </head>
  <body>
  <br>
     <s:text name="item.username"/><br>

    <!-- item.test={0} 是  {1}  -->
     <s:text name="item.test">
       <s:param>用户名0</s:param>
       <s:param>密码1</s:param>
     </s:text>
  </body>
</html>

输出结果:
用户名,欢迎来到传智播客密码
这里写图片描述


在action中获取资源文件的信息

  • ActionSupport 类实现了 TextProvider 接口, 该接口负责提供对各种资源包和它们的底层文本消息的访问机制.
  • 当调用 getText() 方法时, 它将按以下顺序搜索相关的属性文件.
    • Action类的属性文件: 该文件的名字与相关的动作类的名字一样, 并且和那个动作类存放在同一个目录下
    • 动作类所实现的各个接口的属性文件
    • 动作类的各个父类的属性文件
    • 动作类的各个父类所实现的各个接口的属性文件
    • 如果动作类实现了 ModelDriven 接口, Struts 将调用 getModel() 方法
    • 并从模型对象的类开始沿着类的继承关系进行一次上溯搜索
    • 默认的包的属性文件
    • 继承关系中的下个父包里的资源包

这里写图片描述


国际化—JSP中直接访问某个资源文件

i18n 标签: 用来加载一个自定义的 ResourceBundle.不用做任何配置
name: 将被加载的资源集的 java 完全限定名

<s:i18n name=“resource">
    <s:text name=“item.username”/>
</s:i18n>
resource为类路径下资源文件的基本名。

      如果要访问的资源文件在类路径的某个包下,可以这样访问:
       <s:i18n name=“cn.itcast.i18n.resource">
    <s:text name=“item.test">
        <s:param>小张</s:param>
    </s:text>
       </s:i18n>
      上面访问cn.itcast.i18n包下基本名为resource的资源文件。

使用 native2ascii 程序转换字符编码

  • JDK 中提供了一个 native2ascii 工具程序,它可以将某种本地字符集编码的字符转换成 Unicode 转义序列的形式
  • DOS 下进入 test_cn_backup.properties文件所在目录,运行下面的命令后将在当前目录下生成一个名为
    test_zh_CN.properites 文件:

    native2ascii -encoding gb2312 源文件 目标文件.properites
    native2ascii -encoding gb2312 test_cn_backup.properties test_zh_CN.properites

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值