一、国际化的概念

国际化是指web程序在运行时,根据客户端请求的国家、语言的不同而显示不同的界面。 
例如,如果请求来自中文客户端,则页面的显示,提示信息等都是中文,如果是英文客户端,则显示英文信息。 
国际化的英文单词是Internationalization,但因为单词太长,简称I18N,I是第一个字母,18表示中间的字母个数,N是最后一个字母。

二、java中国际化的思路

1.必须先提供程序需要的资源文件,资源文件是很多键值对组成,键是程序使用的部分,值是页面显示的部分。  资源文件的命名规则:Name_language_country.properties  name是资源文件的基本名,可以自由定义。language和country都必须使用java给我们提供的名称。  

2.通过类加载资源文件,然后显示在页面上,java程序国际化的关键类是ResourceBundle
它有一个静态方法:
-getBundle(String baseName,Locale locale):baseName是资源文件的基本名,我们自己定义的那个,locale代表国家/语言

  

三、java国际化案例

(1)创建两个国际化资源文件

              第一个文件:message_zh_CN.properties
内容:
hello=您好 第二个文件:message_en_US.properties
内容:
hello=hello,world

(2)在类中实现国际化

        public class I18NDemo {

            public static void main(String[] args) {
//根据locale加载国际化资源文件
ResourceBundle bundle=ResourceBundle.getBundle("com.cad.struts2.resource.message",Locale.CHINA);//加载中文资源文件,输出您好
//ResourceBundle bundle=ResourceBundle.getBundle("com.cad.struts2.resource.message",Locale.US);//加载英文资源文件,输出hello,world
String mess=bundle.getString("hello");
System.out.println(mess);
}
} 完成java国际化主要是提供不同语言的资源文件,然后使用ResourceBundle来根据不同的Locale加载语言资源文件,再根据指定Key来获取对应的字符串即可。 至于在jsp页面中显示国际化信息,可以使用jstl标签来完成。具体的可以百度。

四、struts2的国际化支持

struts2的国际化建立在java国际化之上。一样也是通过提供不同国家的资源文件,然后通过ResourceBundle加载指定Locale对应的资源文件,再通过指定key获取对应的信息。 

整个过程完成相同,只是struts2进行了进一步封装,简化了操作。

五、struts2的国际化步骤

1.让系统加载国际化资源文件,有两种方式
-自动加载:Action范围、包范围的国际化资源文件由系统自动加载
-手动加载:JSP范围、全局范围的国际化资源文件,分别使用标签,配置常量的方式来手动加载。 2.输出国际化,有两种方式
-在视图页面输出国际化信息,需要使用struts2标签库
-在Action类中输出国际化信息,需要使用ActionSupport的getText()方法

六、struts2中Action的国际化

(1)配置全局的国际化资源

                    1.创建国际化资源,和上面的一样
2.在struts.xml中配置
struts.xml中配置方法:<constant name="struts.custom.i18n.resources" value="com.cad.struts2.resource.message"></constant> 3.在action中通过getText方法获取值
public class I18NDemo2 extends ActionSupport {
public String execute(){
String value=getText("hello");
System.out.println(value);
return SUCCESS;
}
}

(2)配置包范围的国际化资源

                    包范围的国际化资源可以被该包下的所有Action使用。
包范围的国际化资源文件的名称为:package_language_country.properties 例如 package_zh_CN.properties
文件放在包的根路径下。 包范围的国际化资源不用在配置文件中配置。

(3)配置Action范围的国际化资源

                    Action范围的国际化资源只能被该Action使用
在Action类所在的路径创建文件:ActionName_language_country.properties 例如:ActionDemo_zh_CN.properties

  

七、Action类中国际化资源的加载顺序

    1.优先加载Action范围,当前Action类路径下的并且名字为ActionName的国际化资源文件 

    2.如果上一步未找到,并且Action有父类,则加载名字为Action父类的国际化资源文件 

    3.如果上一步未找到,并且Action有实现的接口,则加载名字为Action接口的国际化资源文件 

    4.如果上一步未找到,并且该Action实现接口ModelDriven,则对于getModel()方法返回的Model对象,重新执行第一步。
5.如果上一步未找到,则查找当前包范围的国际化资源文件 6.如果上一步未找到,则沿着当前包上溯,直到最顶层包中查找包范围的国际化资源文件 7.如果上一步未找到,则找全局的国际化资源文件。 8.如果上述所有步骤都没找到,则直接输出Key。

 

八、struts2视图资源的国际化

        需要用到<s:text>标签,这个标签如果不经过action,直接访问页面,则显示全局的国际化资源
如果经过action,通过结果视图返回到页面,则按照国际化资源的加载顺序显示,从Action类路径下开始
<body> <s:text name="hello"></s:text>
</body> 如果经过action,还想显示全局的国际化资源 ,可以用以下方式 显示指定名称的国际化资源
//指定全局国际化资源名称
<s:i18n name="com.cad.struts2.resource.message">
<s:text name="hello"></s:text>
</s:i18n> 如果<s:i18n> 标签当成表单标签的父标签,则表单标签的key属性会从国际化资源文件中加载信息

  

 

  

  

  

  

  

  

(十四)struts2的国际化的更多相关文章

  1. 十四、Struts2的国际化

    十四.Struts2的国际化 1.配置全局国际化消息资源包 配置全局消息资源包 <!--配置全局消息资源包 -->     <constant name="struts.c ...

  2. 二十四、Struts2中的UI标签

    二十四.Struts2中的UI标签 Struts2中UI标签的优势: 数据回显 页面布局和排版(Freemark),struts2提供了一些常用的排版(主题:xhtml默认 simple ajax) ...

  3. struts2官方 中文教程 系列十四:主题Theme

    介绍 当您使用一个Struts 2标签时,例如 <s:select ..../>  在您的web页面中,Struts 2框架会生成HTML,它会显示外观并控制select控件的布局.样式和 ...

  4. struts2使用拦截器完成登陆显示用户信息操作和Struts2的国际化

    其实学习框架,就是为了可以很好的很快的完成我们的需求,而学习struts2只是为了替代之前用的servlet这一层,框架使开发更加简单,所以作为一个小菜鸟,特别感谢那些超级无敌变态开发的框架供我们使用 ...

  5. 浅谈struts2的国际化----i18n

    可能大家在使用struts框架的时候,偶尔会看到这个词: i18n.也就是 Internationalization    i 开头,n 结尾. 总共18个字母,今天的主要内容就是环绕这 四个字母. ...

  6. Solon Web 开发,十四、与Spring、Jsr330的常用注解对比

    Solon Web 开发 一.开始 二.开发知识准备 三.打包与运行 四.请求上下文 五.数据访问.事务与缓存应用 六.过滤器.处理.拦截器 七.视图模板与Mvc注解 八.校验.及定制与扩展 九.跨域 ...

  7. 我的MYSQL学习心得(十四) 备份和恢复

    我的MYSQL学习心得(十四) 备份和恢复 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) ...

  8. 雅虎(yahoo)前端优化十四条军规

    第一条.尽可能的减少 HTTP 的请求数 (Make Fewer HTTP Requests ) http请求是要开销的,想办法减少请求数自然可以提高网页速度.常用的方法,合并css,js(将一个页面 ...

  9. Bootstrap<基础二十四> 缩略图

    Bootstrap 缩略图.大多数站点都需要在网格中布局图像.视频.文本等.Bootstrap 通过缩略图为此提供了一种简便的方式.使用 Bootstrap 创建缩略图的步骤如下: 在图像周围添加带有 ...

随机推荐

  1. 200万枚SPC空投来袭,这样的薅羊毛活动你确定不参加吗?

    在过去的2020年,币圈真的是很火爆,很多人在参与数字货币交易或DeFi挖矿中赚到了大钱.但是转眼到了2021年,DeFi进入了下半场,区块链市场也进入了新的阶段,那么区块链的下一个爆点是什么呢?很多 ...

  2. golang官方嵌入文件到可执行程序

    目录 前言 示例程序 嵌入文件直接访问 嵌入文件列表 总结 前言 在go官方出嵌入文件的方法前我在网上找过,并且自己还研究过,虽然没有问题,但是既然官方支持还是用起来吧. 看了下go源码embed/e ...

  3. 扒几个 3D 模型备用

    前言 在上一篇中,我展示了 OpenGL 开发的基本过程,算是向 3D 世界迈出的一小步吧.对于简单的 3D 物体,比如立方体.球体.圆环等等,我们只需要简单的计算就可以得到他们的顶点的坐标.但是仅仅 ...

  4. 使paramiko库执行命令时,在给定的时间强制退出

    原因: 使用paramiko库ssh连接到远端云主机上时,非常偶现卡死现象,连接无法退出(可以是执行命令时云主机重启等造成).需要给定一段时间,不管命令执行是否卡住,都退出连接,显示命令执行超时错误. ...

  5. MySql_176. 第二高的薪水 + limit + distinct + null

    MySql_176. 第二高的薪水 LeetCode_MySql_176 题目描述 题解分析 代码实现 # Write your MySQL query statement below select( ...

  6. 167. 两数之和 II - 输入有序数组 + 哈希表 + 双指针

    167. 两数之和 II - 输入有序数组 LeetCode_167 题目描述 方法一:暴力法(使用哈希表) class Solution { public int[] twoSum(int[] nu ...

  7. CVE-2019-10758-Mongo-express-远程代码执行

    漏洞分析 https://xz.aliyun.com/t/7056 漏洞简介 mongo-express是一款mongodb的第三方Web界面,使用node和express开发. 如果攻击者可以成功登 ...

  8. 如何在 Istio 中支持 Dubbo、Thrift、Redis 以及任何七层协议?

    赵化冰,腾讯云高级工程师,Istio Member,ServiceMesher管理委员,Istio 项目贡献者, Aerika 项目创建者 ,热衷于开源.网络和云计算.目前主要从事服务网格的开源和研发 ...

  9. 在windows10中启动VmWare时,只要一启动虚拟机,电脑就会蓝屏死机(终止代码:SYSTEM_SERVICE_EXCEPTION)

    在windows10中启动VmWare时,只要一启动虚拟机,电脑就会蓝屏死机(终止代码:SYSTEM_SERVICE_EXCEPTION) 没错就是这个,绿色的死亡按钮 原因: 第一种:windows ...

  10. HTTP 状态码(转载)

    本文由 简悦 SimpRead 转码, 原文地址 www.cnblogs.com HTTP 状态码 (HTTP Status Code) 状态码并不是每个都有,为了后期扩展.[update201705 ...