zoukankan      html  css  js  c++  java
  • Struts2国际化——完整实例代码

    一、介绍

    国际化Internationalization的首末字符I和N之间字符数是18,简称I18N

    “国际化”是指一个应用程序在运行时,能够根据客户端请求所来自国家或地区语言的不同,而显示不同的语言界面。

    比如:你的电脑是中文操作系统,这个应用程序的界面使用中文文字;客户端是英文操作系统,就显示英文界面。

    国际化资源文件,后缀以properties作为扩展名,该文件以“键=值”(key=value)对的形式存储资源数据

    二、命名格式:

    1、资源文件名.properties

    2、资源文件名_语言种类.properties

    三、编码

      在国际化时,所有的字符都要使用标准的编码方式,需要把中文字符转换为Unicode代码。

      中文资源文件不能直接使用,必须转换为Unicode代码

      Eclipse中,在globalMessages_zh_CN.properties文件中,在等式右边输入中文,自动转换为Unicode编码方式,如图所示:

    三、应用实例

      登陆时调用中文资源文件如下:

    IE浏览器将英文[en-US]上移到顶部,如下:

    重新打开浏览器登陆页面,此时调用英文资源文件,如下

    Eclipse中实例目录结构,如下:

    1、编写国际化资源文件,将这两个文件放在和struts.xml同一个目录

    中文文件:globalMessages_zh_CN.properties

    英文文件:globalMessages_en_US.properties

     

    2、web.xml

    <?xml version="1.0" encoding="UTF-8"?>  
    <web-app  version="2.4" 
        xmlns="http://java.sun.com/xml/ns/j2ee" 
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
        xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
        http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">  
    
      
        <filter>  
            <!-- 配置Struts2核心Filter的名字 -->  
            <filter-name>struts2</filter-name>  
            <!-- 配置Struts2核心Filter的实现类 -->  
            <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>  
        </filter>  
        <!-- 配置Filter拦截的URL -->  
        <filter-mapping>  
            <!-- 配置Struts2的核心FilterDispatcher拦截所有用户请求 -->  
            <filter-name>struts2</filter-name>  
            <url-pattern>/*</url-pattern>  
        </filter-mapping>  
    
    </web-app>  

    3、编写视图组件

    (1)login.jsp

    <%@ page language="java" import="java.util.*" contentType="text/html; charset=utf-8"
        pageEncoding="utf-8"%>
    <%@ taglib prefix="s" uri="/struts-tags" %>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <!-- 使用text标签输出国际化消息 -->
    <title><s:text name="loginTitle" /></title>
    </head>
    <body>
        <s:form action="checkLogin" method="post">
            <!-- 表单元素的key值与资源文件的key对应 -->
            <s:textfield name="name" key="loginName"></s:textfield>
            <s:password name="password" key="loginPassword"></s:password>
            <s:submit key="loginSubmit"></s:submit>
        </s:form>
    </body>
    </html>

    (2)loginSuccess.jsp

    <%@ page language="java" import="java.util.*" contentType="text/html; charset=utf-8"
        pageEncoding="utf-8"%>
    <%@ taglib prefix="s" uri="/struts-tags" %>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <!-- 使用text标签输出国际化消息 -->
    <title><s:text name="successPage" /></title>
    </head>
    <body>
        <hr>
        <s:text name="loginName" />:<s:property value="name" /><br>
        <s:text name="loginPassword" />:<s:property value="password" />
        
    </body>
    </html>

    4、编写业务控制器

    LoginAction1.java

    package loginAction;
    
    import com.opensymphony.xwork2.ActionContext;
    import com.opensymphony.xwork2.ActionSupport;
    
    public class LoginAction1 extends ActionSupport{
    
        private String name;
        private String password;
        //用于定义标题信息
        private String tip;
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public String getPassword() {
            return password;
        }
        public void setPassword(String password) {
            this.password = password;
        }
        public String getTip() {
            return tip;
        }
        public void setTip(String tip) {
            this.tip = tip;
        }
        
        public String execute() throws Exception{
            if(getName().equals("QQ")&&getPassword().equals("123")){
                ActionContext.getContext().getSession().put("name", getName());
                return SUCCESS;
            }else{
                return ERROR;
            }
        }
        
    }

    5、在struts.xml中配置Action和国际资源文件

    <?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>
    <!-- 使用Struts2中的I18N拦截器,并通过constant元素配置常量,指定国际资源文件名字,
                value的值就是“资源文件名”
             -->
        <constant name="struts.custom.i18n.resources" value="globalMessages" />
        <constant name="struts.i18n.encoding" value="UTF-8" />
        <package name="I18N" extends="struts-default">
            <action name="checkLogin" class="loginAction.LoginAction1">
                <result name="success">/I18N/loginSuccess.jsp</result>
                <result name="error">/I18N/login.jsp</result>
            </action>
        </package>
    
    </struts>
  • 相关阅读:
    [十七]SpringBoot 之 使用自定义的properties
    【转】手摸手,带你用vue撸后台 系列三(实战篇)
    【转】手摸手,带你用vue撸后台 系列四(vueAdmin 一个极简的后台基础模板)
    【转】手摸手,带你用vue撸后台 系列二(登录权限篇)
    【转】手摸手,带你用vue撸后台 系列一
    【16】vuex2.0 之 getter
    【15】vuex2.0 之 modules
    【14】vuex2.0 之 mutation 和 action
    【13】vuex2.0 之 state
    【12】vue-router 之路由重定向
  • 原文地址:https://www.cnblogs.com/Donnnnnn/p/5676002.html
Copyright © 2011-2022 走看看