1、配置国际化资源文件 四种方法

1、action范围资源文件:在action类所在路径建立 actionname_language_country.properties,适用于指定action类 如:TestAction_language_CN.properties
2、包范围资源文件:在包根路径下建立 package_language_country.properties,适用范围在properties所在包所有类,这里的package真的是直接下package,而不是包名 如:package_language_CN.properties
3、全局范围资源文件:在src下建立basename_language_country.properties,适用于整个项目 如:i18n.properties/i18n_en_US.properties/i18n_zh_CN.properties
4、临时资源文件(比较少用):在页面上使用s:i18n元素的name属性指定临时的国际化资源文件

2、需要在struts.xml中配置<constant name="struts.custom.i18n.resources" value="baseName"/>,如果不适用全局范围资源文件的话,value可以为空,如果使用全局范围文件的话,value需要是资源文件名

3、读取优先顺序:

临时资源文件>action范围资源文件>包范围资源文件>全局范围文件

4、访问国际化资源文件步骤
(1)action类:

  1. 实现TextProvider接口
  2. 使用getText(” “)方法取值

(2)页面:

  1. 使用s:text标签,使用表单标签对应的key属性读取值

5、如果想要页面上直接点击按钮实现语言转换,请求action时,request_locale参数值赋值为语言简写就可以了,如:en_US

6、如果想要在标签元素的label里面读取国际化资源文件的value值,就需要用%{}进行强制的OGNL转换 如:<s:textfield name="name" label="%{getText('name')}"></s:textfield>

7、struts.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><!-- 配置全局的国际化资源文件 --><!-- 这里的value里面的i18n是自定义的 可以是其他名字 --><constant name="struts.custom.i18n.resources" value="baseName"></constant><package name="default" namespace="/" extends="struts-default"><action name="testAction" class="com.demo.sshtest.TestAction"><result>/index1.jsp</result></action></package>
</struts>

这里的constant标签的value,如果不用全局资源文件来配置的话,value可以为空,也可以不为空

8、显示页面 index1.jsp

<%@ page language="java" 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>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<!--
配置国际化资源文件 四种方法:
1、action范围资源文件:在action类所在路径建立 actionname_language_country.properties,适用于指定action类 如:TestAction_language_CN.properties
2、包范围资源文件:在包根路径下建立 package_language_country.properties,适用范围在properties所在包所有类 如:package_language_CN.properties
3、全局范围资源文件:在src下建立basename_language_country.properties,适用于整个项目 如:i18n.properties/i18n_en_US.properties(1)文件名就叫basename_language_country.properties(2)需要在struts.xml中配置<constant name="struts.custom.i18n.resources" value="baseName"/>
4、临时资源文件(比较少用):在页面上使用s:i18n元素的name属性指定临时的国际化资源文件
-->
<!--
资源文件加载顺序:离当前action越近,越优先打加载   即: 临时资源>基于action>基于包>基于全局
-->
<!--
在页面和action类中访问国际化资源文件步骤:
1、actino中实现TextProvider接口后,可以调用getText()方法取得值(可通过集成ActionSupport实现)
2、页面可以使用s:text标签,使用表单标签对应的key属性值实现(1)如果由占位符,则可以使用s:text标签的s:param子标签填充占位符(2)如果当前页面来自于action,可使用标签或OGNL直接访问action的属性值(访问值栈的属性值)
-->
<s:debug></s:debug>
<!-- 如果想在页面上直接点击按钮实现语言转换,只需要请求action时,在后面带上request_locale=语言,就可以了 -->
<a href="testAction?request_locale=en_US">English</a><br>
<a href="testAction?request_locale=zh_CN">中文</a><br>
<hr>
<br><!-- s:text的name属性写的是资源文件里面的属性key,s:param的value写的是action里面定义的时间参数date(即值栈里面的date对象) --><s:text name="datetime"><s:param value="date"></s:param></s:text><br><!-- i18n的properties中,可以直接用\${}代替占位符,然后把值栈里面的date对象放到\${}里面,来获取对应的值 --><s:text name="datetime2"></s:text>
<hr>
<s:form action="">form主题不为simple时,能用label<br><!-- label固定是name --><s:textfield name="name" label="name"></s:textfield><br><!--使用OGNL强制解析1、要label从资源文件中获取value值,就需要用 %{getText('')的方法2、因为这时候的国际化值是对象栈中的DefaultTextProvider的一个实例,整个对象提供访问资源文件的getText()方法3、struts2 框架label需要以 %{}包装着一个OGNL表达式getText(),强制进行OGNL解析--><s:textfield name="name" label="%{getText('name')}"></s:textfield><br><!-- key动态从资源文件读取name值 --><s:textfield name="name" key="name"></s:textfield><br><s:password name="pswd" key="pswd"></s:password><br><s:submit key="submit"></s:submit>
</s:form><hr>
<br><s:form action="" theme="simple">form主题为simple时这里label没用,所以要用s:text标签读取资源文件的值<br><s:text name="name"/>:<s:textfield name="name"></s:textfield><br><s:text name="pswd"/>:<s:password name="pswd"></s:password><br><!-- 遇到struts2标签 需要value里面拿值 就要用强制OGNL解析 --><s:submit value="%{getText('submit')}"></s:submit>
</s:form>
</body>
</html>

9、action类 TestAction.java

package com.demo.sshtest;import java.util.Arrays;
import java.util.Date;import com.opensymphony.xwork2.ActionSupport;public class TestAction extends ActionSupport{private static final long serialVersionUID = 1L;public Date date = null;public Date getDate() {return date;}public void setDate(Date date) {this.date = date;}@Overridepublic String execute() throws Exception {//这里定义一下date的格式 就能使前台或console输出的时候按照想要的时间格式输出date = new Date();//action中访问资源文件valueString name = getText("name");String pswd = getText("pswd");String submit = getText("submit");//读取带占位符的值String datetime = getText("datetime",Arrays.asList(date));System.out.println("name:"+name);System.out.println("pswd:"+pswd);System.out.println("submit:"+submit);System.out.println("datetime:"+datetime);return "success";}
}

10、英文资源文件 baseName_en_US.properties/package_en_US.properties/TestAction_en_US.properties

name=Username
pswd=Password
submit=submit
datetime=Time>>>{0}
datetime2=Time>>>${date}

这里为了区分三个properties文件的区别,所以会在value值的第一个字母加上数字来区分,而datetime2的date值,是直接读取值栈里面的date对象,来达到动态配置资源文件值的效果

11、中文资源文件
同上,只是value值为中文

12、项目目录

里面的index.jsp只是用来第一次打开index1.jsp的时候调用action初始化一下页面的语言值

13、运行效果

左边是eclipse的浏览器,页面默认显示语言是英文(即local值为en_US),右边是360浏览器,页面默认显示语言是中文(即local值为zh_CN)


这个是点击语言按钮后的运行结果,调用action时request_locale值为zh_CN,页面就会显示中文资源文件的对应值

14、项目demo
https://download.csdn.net/download/qq_22778717/10294774

SSH笔记-Struts2的语言国际化相关推荐

  1. SSH笔记-Struts2的通配符

    1.一个 Web 应用可能有成百上千个 action 声明. 可以利用 struts 提供的通配符映射机制把多个彼此相似的映射关系简化为一个映射关系 (就是一个action类里面包含多个能被不同act ...

  2. struts2中页面语言国际化的方法

    在struts2中,前端页面表示国际化的实现更加简单.简单的应用struts2提供的支持国际化的表达式即可快速方便的进行页面的国际化的实现.如何做呢?本文以英文和中文为例进行说明. 1,自定义stru ...

  3. 23 DesignPatterns学习笔记:C++语言实现 --- 2.2 Adapter

    23 DesignPatterns学习笔记:C++语言实现 --- 2.2 Adapter 2016-07-22 (www.cnblogs.com/icmzn) 模式理解 1. Adapter 定义 ...

  4. 数据结构源码笔记(C语言描述)汇总

    数据结构源码笔记(C语言):英文单词按字典序排序的基数排序 数据结构源码笔记(C语言):直接插入排序 数据结构源码笔记(C语言):直接选择排序 数据结构源码笔记(C语言):置换-选择算法 数据结构源码 ...

  5. 数据结构源码笔记(C语言):英文单词按字典序排序的基数排序

    //实现英文单词按字典序排序的基数排序算法#include<stdio.h> #include<malloc.h> #include<string.h>#defin ...

  6. 数据结构源码笔记(C语言):索引文件建立和查找

    //实现索引文件建立和查找算法#include<stdio.h> #include<malloc.h> #include<string.h> #include< ...

  7. 数据结构源码笔记(C语言):快速排序

    //实现快速排序算法 #include<stdio.h> #include<malloc.h> #define MAXE 20typedef int KeyType; type ...

  8. 数据结构源码笔记(C语言):冒泡排序

    //冒泡排序算法实现 #include<stdio.h> #include<malloc.h> #define MAXE 20typedef int KeyType; type ...

  9. 数据结构源码笔记(C语言):希尔插入排序

    //实现希尔插入排序算法 #include<stdio.h> #include<malloc.h> #define MAXE 20typedef int KeyType; ty ...

最新文章

  1. python软件在下载库文件_python – 并行下载多个文件的库或工具
  2. Eigen 矩阵运算库在实际项目中的使用
  3. 模拟/usaco 1.1.4 Broken Necklace
  4. elementui树形复选框_Element-ui表格树形控件结合复选框实践
  5. JavaScript 复习之 事件模型 和 Event对象
  6. iOS开发之FMDB
  7. 字符串换行截取_textwrap 文本自动换行与填充
  8. Android Studio之提示Gradle sync failed: Plugin with id ‘com.novoda.bintray-release‘ not found.
  9. GWT,GWT-Ext(SmartGWT),GXT(Ext GWT)常见任务
  10. 前端学习(1674):前端系列实战课程之手风琴效果
  11. resttemplate post提交json_SEO工具脚本,Python百度普通收录API提交工具
  12. python scheduler cron_Python轻量级定时任务调度框架“APScheduler”
  13. php dede 发布时间_DedeCMS发布时间显示多少天月年前
  14. wpf esc key 检测不到_爬虫笔记之requests检测网站编码方式(zozo.jp)(碎碎念) - CC11001100...
  15. BUUCTF-Misc-No.3
  16. docker代理设置ssl证书_家用主机 篇六:群晖Docker配置SSL证书实现https安全访问
  17. Pr 添加字幕 预览不显示 是你没有打开字幕开关
  18. 拿下阿里自动化测试岗23k*14薪offer的全程面试记录解析以及总结,一面二面三面,项目,功能,自动化,性能测试,面试题问答
  19. 历练熟女给老实木讷男孩的恋爱建议(转贴)
  20. 企业运维实战--MFS分布式文件系统

热门文章

  1. 无限领域服务器,图个好游戏:两周抖音播放超3.7亿,2年前的游戏一夜出圈,把服务器都挤爆了!...
  2. 数字IC验证:System Verilog学习 - 过程语句与控制流
  3. 监控线上服务器运行情况脚本
  4. MDXMDD重编辑Merriam Webster词典
  5. vue 循环加载动态组件以及传值
  6. 毒鸡汤语录php,很励志的毒鸡汤语录 关于爱情的10条毒鸡汤
  7. Oracle服务器性能优化
  8. JVM常量池和运行时常量池
  9. 高考考试可以拿计算机吗,高考“电脑阅卷”过程曝光,考生若能提前了解,考试少丢冤枉分...
  10. 将DataFrame的数字部分由字符串类型转换为数字类型