一、struts2国际化原理

根据不同的Locale读取不同的文本。

例如有两个资源文件:

第一个:message_zh_CN.properties

第二个:message_en_US.properties

当Locale=zh_CN时,就去第一个文件查找;当Locale=en_US时,就去第二个文件查找。

二、简单方式实现国际化

1. 新建一个maven的web项目,项目结构如下:

2. 在src/main/java目录下新建两个国际化资源文件message_zh_CN.properties、message_en_US.properties,然后将各个key-value对添加到这两个文件中,key字段一定要统一

message_zh_CN.properties:

info=\u4FE1\u606F
info_not_empty=\u4FE1\u606F\u4E0D\u80FD\u4E3A\u7A7A
submit=\u63D0\u4EA4

message_en_US.properties:

info=information
info_not_empty=info not empty
submit=submit

3. 配置struts.properties文件,这个文件也是放在src/main/java目录下的

struts.cunstom.i18n.resources=message
struts.i18n.encoding=utf-8

struts.cunstom.i18n.resources=message是为了告诉程序,国际化资源文件是message开头命名的资源文件。这个需要在struts的xml文件里面配置

 <?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd"> <struts> <!--告诉程序,国际化资源文件是message开头命名的资源文件。 -->
<constant name="struts.custom.i18n.resources" value="message" /> <package name="default" namespace="/" extends="struts-default"> </package> </struts>

4. Struts2的页面国际化,默认要走action才行,如果直接访问jsp文件,是没有国际化效果的,所以定义一个语言的LangAction,然后在struts.xml文件里面配置

LangAction:

 package com.study.struts2.demo;

 import com.opensymphony.xwork2.ActionSupport;

 public class LangAction extends ActionSupport {

     /**
*
*/
private static final long serialVersionUID = -5273948217476741834L; @Override
public String execute() throws Exception {
// TODO Auto-generated method stub
return SUCCESS;
} }

struts.xml:

 <?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd"> <struts> <!--告诉程序,国际化资源文件是message开头命名的资源文件。 -->
<constant name="struts.custom.i18n.resources" value="message" /> <package name="default" namespace="/" extends="struts-default"> <action name="lang" class="com.study.struts2.demo.LangAction">
<result name="success">index.jsp</result>
</action> </package> </struts>

5. 实现在index.jsp页面中的中英文切换

 <%@ page language="java" pageEncoding="UTF-8"%>
<!--引入struts2的标签 -->
<%@ taglib prefix="s" uri="/struts-tags"%>
<body>
<!--中英文切换按钮 -->
<a href="lang.action?request_locale=zh_CN">中文</a>
<a href="lang.action?request_locale=en_US">English</a> <p>
<a href="<s:url action='hello'/>">Hello World</a>
</p> <!--struts2的取值标签 value="<s:property value="msg" />"输入正确的被保留 -->
<form action="hello.action">
<!-- 信息: -->
<s:text name="info"></s:text>
<input type="text" name="msg" value="<s:property value="msg" />" />
<s:property value="fieldErrors['msg'][0]" />
<br> <input type="submit" value="<s:text name="submit"></s:text>">
</form> <!--验证通过后显示 -->
<h2>
<s:property value="msg" />
</h2>
</body>
</html>

5. 在tomcat里面启动项目输入地址验证http://localhost:8080/TestStruts2

中文页面:

英文页面:

三、过滤器方式实现国际化

后续补充。。。。。

四、把Locale放到session里面,从session里面取出Locale作国际化

后续补充。。。。。

struts2系列(四):struts2国际化的多种方式的更多相关文章

  1. (Struts2学习系列四)Struts2指定配置文件

    我们的每个action都在struts.xml里配置的话,就会出现很多的xml语句,单单一个struts.xml就会变得很大,所以我们会在struts.xml里使用include引入其他的.xml文件 ...

  2. Redis系列四 - 分布式锁的实现方式

    前言 分布式锁一般有3中实现方式: 数据库乐观锁: 基于Redis的分布式锁: 基于ZooKeeper的分布式锁. 以下将详细介绍如何正确地实现Redis分布式锁. 可靠性 首先,为了确保分布式锁的可 ...

  3. HTML系列:js和css多种方式实现隔行变色

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  4. struts2官方 中文教程 系列四:Action

    先贴个本帖的地址,免得其它网站被爬去了struts2教程 官方系列四:Action  即 http://www.cnblogs.com/linghaoxinpian/p/6905521.html 下载 ...

  5. Struts2第四天

    Struts2第四天 昨天: 自定义的拦截器:继续methodFilterInterceptor,可以指定哪些方法需要拦截或者不拦截. Intercepters(配置拦截器),intercepter( ...

  6. 【SSH框架】之Struts2系列(二)

    微信公众号:compassblog 欢迎关注.转发,互相学习,共同进步! 有任何问题,请后台留言联 1.Struts2常量配置 (1).Struts2默认常量配置文件路径,如下图: (2).Strut ...

  7. 【SSH框架】之Struts2系列(一)

    微信公众号:compassblog 欢迎关注.转发,互相学习,共同进步! 有任何问题,请后台留言联系 1.Struts2框架概述 (1).什么是Struts2 Struts2是一种基于MVC模式的轻量 ...

  8. Struts2 中的数据传输的几种方式

    1.     如何将参数从界面传递到Action? 你可以把Struts2中的Action看做是Struts1的Action+ActionForm,即只需在Action中定义相关的属性(要有gette ...

  9. 【中间件】Struts2系列漏洞POC小结

    #Struts2-045 ''' CVE-2017-5638 影响范围:Struts 2.3.5 – Struts 2.3.31,Struts 2.5 – Struts 2.5.10 触发条件:基于J ...

随机推荐

  1. Http协议基本知识简介

    HTTP协议是指超文本传输协议,位于应用层,HTTP规定数据格式,然后用tcp进行传输. 请求响应模式:简单理解为客户端对服务器发起请求,服务器响应客户端. 主要特点 无连接:无连接的含义是限制每次连 ...

  2. 定位页面元素之xpath详解以及定位不到测试元素的常见问题

    一.定位元素的方法 id:首选的识别属性,W3C标准推荐为页面每一个元素设置一个独一无二的ID属性, 如果没有且很难找到唯一属性,解决方法:(1)找开发把id或者name加上.如果不行,解决思路可以是 ...

  3. Javascript跳转页面和打开新窗口等方法

    1.在原来的窗体中直接跳转用onClick="window.location.href='你所要跳转的页面';" 2.在新窗体中打开页面用:onclick="window ...

  4. Hibernate中的主键生成器generator

    本文讲述Hibernate的generator属性的意义.Generator属性有7种class,本文简略描述了这7种class的意义和用法. [xhtml] view plaincopy <c ...

  5. JDBC操作数据库之修改数据

    使用JDBC修改数据库中的数据,起操作方法是和添加数据差不多的,只不过在修改数据的时候还要用到UPDATE语句来实现的,例如:把图书信息id为1的图书数量改为100,其sql语句是:update bo ...

  6. 双击打开Jar文件

    最近发现个诡异的问题,java环境变量明明配好了.但是双击xx.jar文件,就是不能直接打开运行. 先想到了第一个解决办法: 运行cmd.exe,cd到jar目录,执行 javaw -jar xxx. ...

  7. Java中增强for循环的用法

    此方法在jdk1.5之后才出现. 1:遍历数组 语法: for (Type value : array) { expression value; } 例子: void Sum() { int[] ar ...

  8. OpenStack Pike超详细搭建文档 LinuxBridge版

    前言 搭建前必须看我 本文档搭建的是分布式P版openstack(1 controller + N compute + 1 cinder)的文档. openstack版本为Pike. 搭建的时候,请严 ...

  9. 反射结合xml简单的模拟spring创建bean

    框架最底层其实就是通过反射实现的,就像spring,当你配置各种各样的bean时都是以配置文件的形式配置的,你需要用到哪些bean就配哪些,spring容器就会根据你的需求去动态加载,这儿写一个简单的 ...

  10. Excel的实用函数

    在介绍Excel函数前先说明两个概念:公式和函数. 公式:由用户自行设计对工作表进行计算和处理的计算式,以等号"="开始,其内部可以包括函数.引用.运算符和常量. 函数:即是预先定 ...