• Struts国际化


    应用程序国际化

      资源文件和资源包

      要用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常量即可加载全局资源文件

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

        resource为资源文件的基本名。

      3、在jsp页面获取国际化的资源文件的信息

        使用text标签: 用来显示一条国际化消息的数据标签. 相当于从property标签调用 getText 方法. 该标签包含如下属性:

        * name: 用来检索消息的键

        * var:用来引用压入 ContextMap 栈的值的变量名

        * 可以通过  param 子标签向 text 标签传递参数

        1 <s:text name="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>

       输出结果:

               用户名,欢迎,密码

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

      ActionSupport 类实现了 TextProvider 接口, 该接口负责提供对各种资源包和它们的底层文本消息的访问机制

      当调用 getText() 方法时, 它将按以下顺序搜索相关的属性文件. 

    •Action类的属性文件: 该文件的名字与相关的动作类的名字一样, 并且和那个动作类存放在同一个目录下
    •动作类所实现的各个接口的属性文件
    •动作类的各个父类的属性文件
    •动作类的各个父类所实现的各个接口的属性文件
    •如果动作类实现了 ModelDriven 接口, Struts 将调用 getModel() 方法并从模型对象的类开始沿着类的继承关系进行一次上溯搜索
    •默认的包的属性文件
    •继承关系中的下个父包里的资源包

        

     1 <%@ page language="java"  pageEncoding="UTF-8"%>
     2 <%@ taglib uri="/struts-tags" prefix="s" %>
     3 <html>
     4   <head>    
     5     <title>My JSP 'login.jsp' starting page</title>
     6   </head>
     7   <body>
     8   <br>
     9      <s:text name="item.username"/><br>
    10      
    11     <!-- item.test={0} 是  {1}  -->
    12      <s:text name="item.test">
    13        <s:param>用户名0</s:param>
    14        <s:param>密码1</s:param>
    15      </s:text>
    16   </body>
    17 </html>

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

      i18n 标签: 用来加载一个自定义的 ResourceBundle.不用做任何配置,不用在struts.xml配

        name: 将被加载的资源集的 java 完全限定名

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

          如果要访问的资源文件在类路径的某个包下,可以这样访问:

    1       <s:i18n name=“cn.itcast.i18n.resource">
    2         <s:text name=“item.test">
    3             <s:param>小张</s:param>
    4         </s:text>
    5       </s:i18n>
    6       上面访问cn.itcast.i18n包下基本名为resource的资源文件。

      i18n.jsp

     1 <%@ page language="java"  pageEncoding="UTF-8" contentType="text/html; charset=utf-8"%>
     2 <%@ taglib uri="/struts-tags" prefix="s" %>
     3 <html>
     4   <head>    
     5     <title>My JSP 'login.jsp' starting page</title>
     6   </head>
     7   <body>
     8        <s:i18n name="cn.itcast.i18n.resources">
     9        <form name="loginForm" method="post" 
    10             action="${pageContext.request.contextPath}/i18n/i18nAction_login.action">
    11          <table border="1">
    12            <tr>
    13               <td><s:text name="items.username" /></td>
    14               <td><input type="text" name="username"/></td>
    15            </tr>
    16            <tr>
    17               <td><s:text name="items.psw" /></td>
    18               <td><input type="password" name="psw"/></td>
    19            </tr>
    20          <tr>
    21               <td>&nbsp;</td>
    22               <td><input type="submit" value="<s:text name='items.login'/>"/></td>
    23            </tr>
    24          </table>
    25      <form>
    26      </s:i18n>
    27   </body>
    28 </html>

    使用 native2ascii 程序转换字符编码

      JDK 中提供了一个 native2ascii 工具程序,它可以将某种本地字符集编码的字符转换成 Unicode 转义序列的形式

      DOS 下进入 test_cn_backup.properties文件所在目录,运行下面的命令后将在当前目录下生成一个名为 test_zh_CN.properites 文件:

    1     native2ascii -encoding gb2312  源文件   目标文件.properites 
    2     native2ascii -encoding gb2312   test_cn_backup.txt    test_zh_CN.properites 

    样例代码:

    1、jsp

      login.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>
           <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> </td>
                  <td><input type="submit" value="<s:text name='items.login'/>"/></td>
               </tr>
             </table>
         <form>
      </body>
    </html>
    

      success.jsp

    <%@ page language="java"  pageEncoding="UTF-8" contentType="text/html; charset=utf-8"%>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
      <head>    
        <title>My JSP 'login.jsp' starting page</title>
      </head>
      <body>
      <br>
           成功!!!!!!!!!!!!!<br>
            <h1>xxxxxxxxxx</h1>
      </body>
    </html>
    

      i18n.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> </td>
                  <td><input type="submit" value="<s:text name='items.login'/>"/></td>
               </tr>
             </table>
         <form>
         </s:i18n>
      </body>
    </html>
    

      testParam.jsp

    <%@ 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>

    2、java

      I18nAction.java

    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";
    	}
    	
    }

    3、xml

      struts_i18n.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 name="i18n" namespace="/i18n" extends="struts-default">
    		<action name="i18nAction_login" class="cn.itcast.i18n.I18nAction" method="login">
    			<result name="success">/i18n/success.jsp</result>
    		</action>
    	</package>
    </struts>
    

      struts.xml

    <constant name="struts.custom.i18n.resources"value="cn.zengfansheng.i18n.resources</constant>
    <include file="cn/zengfansheng/struts/i18n/struts_i18n.xml"></include>
    

    4、properties

        resources.properties

    items.username=username
    items.psw=password
    items.login=login
    item.test={0}hacket{1}
    

        resources_zh_CN.properties

    items.username=username_en
    items.psw=password_en
    items.login=login_en
    item.test={0}\u5C0F\u52DD{1}

      resources_en_US.properties

    items.username=\u7528\u6237\u540D
    items.psw=\u5BC6\u7801
    items.login=\u767B\u5F55
    item.test={0}xiaosheng_en{1}
    

      

    by hacket
  • 相关阅读:
    耿建超英语语法---使动词
    tensorboard的安装及遇到的问题
    利用PIL实现图片的切割
    mysql explain
    laravel sql查询
    聚簇索引和非聚簇索引
    修改数据表结构导致的问题
    接口优化记录
    redis优化记录
    php 判断两个数组是否相等
  • 原文地址:https://www.cnblogs.com/hacket/p/3082674.html
Copyright © 2020-2023  润新知