浅谈struts2的国际化----i18n
可能大家在使用struts框架的时候,偶尔会看到这个词: i18n。也就是 Internationalization i 开头,n 结尾。 总共18个字母,今天的主要内容就是环绕这 四个字母。
struts2国际化是建立在 java 国际化的基础上的。通过提供不同国家、语言环境的消息资源。然后通过 ResourceBundle 载入指定Locale 相应的资源文件,取得文件里指定的 key 相应的信息。
Locale
对象表示了特定的地理、政治和文化地区。须要 Locale
来运行其任务的操作称为语言环境敏感的 操作。它使用
Locale
为用户量身定制信息。比如,显示一个数值就是语言环境敏感的操作。应该依据用户的国家、地区或文化的风俗/传统来格式化该数值。
ResourceBundle : public abstract class ResourceBundle extends Object
资源包包括特定于语言环境的对象。当程序须要一个特定于语言环境的资源时(如 String)。程序能够从适合当前用户语言环境的资源包中载入它。使用这样的方式,能够编写非常大程度上独立于用户语言环境的程序代码。它将资源包中大部分(即便不是所有)特定于语言环境的信息隔离开来。
可能大家对于 ResourceBundle 不太熟悉,但是它的子类,我们但是用的不能再熟悉的。
public class PropertyResourceBundle extends ResourceBundle
读取 xxx.properties 的内容 类载入器 以流的形式读取资源文件
PropertyResourceBundle.class.getClassLoader().getResourceAsStream( "db.properties")
连接数据库、log4j的配置,我们都用到了 xxx.properties 的配置文件 ,注意,这些配置文件要放在 类路径之下。
struts2的国际化分为三类:类级别的、包级别的和全局的。 优先级从左至右依次减少。
1、全局的配置方式为: a、在struts.xml中的<constant name="struts.custom.i18n.resources"value="message"></constant>指定baseName 国际化文件名称为:baseName_语言名_国家名.properties(如:message_zh_CN.properties)
b、全局的国际化资源文件放在src以下
2、包级别的: a、包级别的国际化资源文件放在该包以下
b、命名规则为:package_语言名_国名.properties(如:package_zh_CN.properties) 当中package不变,不是指的是包名,每一个包的国际化文件命名都这样
3、类级别的: a、与该类放在同一文件夹中
b、命名规则为:类名_语言名_国家名.properties(如:RegisterAction_zh_CN.properties)
訪问国际化消息的三种方式:
1、JSP页面输出国际化消息:使用struts 的标签<s:text.../> name 属性指定了国际化资源文件的 key
2、Action 类中訪问国际化消息,该 Action 继承 ActionSupport 实现 getText( ) ,接收一个 String 类型的參数。參数指定了国际化资源文件的 key
3、表单元素 Label 中输出国际化消息,为表单标签指定一个 key属性。指定了国际化资源文件的 key
知道大家认为理论非常枯燥。以下来结合实例解说: 配置步骤(以全局配置JSP输出国际化消息为例)
1、在 src 文件夹下加入资源文件,命名方式:baseName_language_country.properties,资源文件的编写: 以键值对的形式,注意名称一定要匹配
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />
2、在struts.xml文件里进行国际化配置,配置常量:<constant name="struts.custom.i18n.resources" value="baseName" /> 注意不要写错,要是你来质问我为什么没有效果。。。
。。
Struts 2提供了一个名i18n的拦截器(Interceptor),而且将其住注冊在默认的拦截器栈中(defaultStack)
<interceptor-ref name="i18n"/>
所以我们不须要再次配置一次国际化的拦截器
3、jsp页面表单元素记得加入一个 key 的属性 ,key的值就是资源文件里配置好的 name
4、大家能够看到页面上有两个超链接。传递的參数为 request_locale ,參数值与我们写好的资源文件命名的 language_country 相匹配。
在这里起到的作用就是切换语言环境。
struts2 的 I18nInterceptor拦截器会拦截所有的Action。它主要做的事情为从client发送过来的请求參数中寻找是否存在名为 request_locale 的參数。
若有。则将request_locale 的 value 转化为 locale 保存起来,该locale是保存在以WW_TRANS_I18N_LOCALE所命名的session里面的。
假设我们不做不论什么配置的话,client是不会发送request_locale參数的。它默认会用request的getLocale()方法得到默认locale,将其存放在session中。
以下我们来看一看效果
这个就是今天的内容了。
浅谈struts2的国际化----i18n的更多相关文章
- 浅谈struts2之chain
转自:http://blog.csdn.net/randomnet/article/details/8656759 前一段时间,有关chain的机制着实困绕了许久.尽管网上有许多关于chain的解说, ...
- 浅谈 Struts2 面试题收藏
Struts2面试题 一.工作原理 一个请求在Struts2框架中的处理大概分为以下几个步骤 1 客户端初始化一个指向Servlet容器(例如Tomcat)的请求 2 这个请求经过一系列的过滤器(Fi ...
- 小学生之浅谈Struts2与struts1的运行机制
Struts1工作原理图: 1.初始化:struts框架的总控制器ActionServlet是一个Servlet,它在web.xml中配置成自动启动的Servlet,在启动时总控制器会读取配置文件(s ...
- 浅谈Struts2
学过SSH框架很长一段时间了,一直没有很系统的总结一下,这里先简单谈谈Struts2. 为什么要用Struts2? 这里列举一些Servlet的缺点: 1.每写一个servlet在web.xml中都要 ...
- 浅谈Struts2拦截器的原理与实现
拦截器与过滤器 拦截器是对调用的Action起作用,它提供了一种机制可以使开发者定义在一个action执行的前后执行的代码,也可以在一个action执行前阻止其执行.同时也是提供了 ...
- [SSH 2] 以网站主页面浅谈Struts2配置
导读:前面总体的介绍了一下SSH框架,那么作为Struts这一支,具体是怎么配置的呢?本篇博客则主要是以自己做过的实例中的登录一条线,简单介绍一下struts2的配置,如有不妥之处,还请大家多提点提点 ...
- 浅谈Struts2(四)
一.Struts2的拦截器(Intercept) 作用:把多个Action中的共有代码,提取至拦截器,从而减少Action中的冗余代码. 1.Action拦截器 a.编写interceptor类 pu ...
- 浅谈Struts2(三)
一.Struts2收集client的参数 核心思路: <form method="post" action="XXXX"> <input ty ...
- 浅谈Struts2(二)
一.struts2的跳转 1.action跳转JSP a.默认为forward <action name="action1" class="com.liquidxu ...
随机推荐
- TextView -无法调节字体、边框的距离
今天调节一个字体边框距离,结果一直都实现不了,布局如下 <RelativeLayout xmlns:android="http://schemas.android.com/apk/re ...
- 使用NPOI时写的几个辅助方法
简介:包含:获取单元格合并信息GetMergedCellAddress.获取引用单元格字符串ConvertAddressToString.获取单元格字符串格式内容CellValueToString p ...
- buildroot使用
buildroot是一套自动化构建工具,比yocto简单. 项目地址:http://www.buildroot.org/ 培训资料地址:http://free-electrons.com/ 附带lin ...
- JS 原型模式创建对象
例子: class Test { constructor(val) { this.val = val } walk() { console.log(this) console.log('walk') ...
- BZOJ4372: 烁烁的游戏(动态点分治)
Description 背景:烁烁很喜欢爬树,这吓坏了树上的皮皮鼠.题意:给定一颗n个节点的树,边权均为1,初始树上没有皮皮鼠.烁烁他每次会跳到一个节点u,把周围与他距离不超过d的节点各吸引出w只皮皮 ...
- HDU——T 2824 The Euler function
http://acm.hdu.edu.cn/showproblem.php?pid=2824 Time Limit: 2000/1000 MS (Java/Others) Memory Limi ...
- Project Euler 435 Polynomials of Fibonacci numbers (矩阵快速幂)
题目链接: https://projecteuler.net/problem=435 题意: The Fibonacci numbers $ {f_n, n ≥ 0}$ are defined rec ...
- UML学习之初步总结
UML(Unified Modeling Language)即统一建模语言,是一种开放的方法,用于说明.可视化.构建和编写一个正在开发的.面向对象的.软件密集系统的制品的开放方法.UML展现了一系列最 ...
- 1.15 Python基础知识 - 函数
函数是可重用的程序代码段. 一.函数的声明和调用 声明格式: def 函数名([形参列表]): 函数体 调用格式: 函数名([实参列表]) 函数名:是一种标识符,命名规则为全小写字母,可以使用下划线增 ...
- Java基础学习总结(38)——Lombok的使用和原理
一.项目背景 在写Java程序的时候经常会遇到如下情形: 新建了一个Class类,然后在其中设置了几个字段,最后还需要花费很多时间来建立getter和setter方法 lombok项目的产生就是为 ...