一、国际化的概念

国际化是指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. nginx日志文件切分

    定义cut_nginx_log.sh 日志文件脚本如下 #!/bin/bash#LOGS_PATH为日志存放路径LOGS_PATH=/weblog/nginx/logsYESTERDAY=$(date ...

  2. JS判断对象是否包含某个属性

    1.使用hasOwnProperty()判断 hasOwnProperty方法的参数就是要判断的属性名称,当对象的属性存在时返回true,否则返回false. var obj = { name:'ja ...

  3. Sapper:迈向理想的 Web 应用框架

    ​扎稳阵脚,再进一步. 注意:原文发表于2017-12-31,随着框架不断演进,部分内容可能已不适用. 给迫不及待的小伙伴们的快速入门:Sapper 文档 和快速模板 starter template ...

  4. Mybatis初步认识

    分三层 第一章 1.三层架构 界面层:和用户打交道,接收用户的请求参数明显是处理结果的(jsp,html,servlet) 业务逻辑层:接收了界面层传递的数据,计算逻辑,调用数据库,获取数据 数据访问 ...

  5. Java方法详解

    Java方法详解 什么是方法? Java方法是语句的集合,它们在一起执行一个功能. 方法是解决一类问题的步骤的有序组合 方法包含于类或对象中 方法在程序中被创建,在其他地方被引用 示例: packag ...

  6. BurpSuite生成快捷方式

    Win下 在win系统写个脚本,能方便快捷的打开burp. burp.bat @echo oFF if "%1" neq "1" ( >"%te ...

  7. ss_port_change - 一键修改ss配置与Centos7的Firewall策略脚本

    ss_port_change 修改ss配置与Centos7的Firewall策略脚本 注意是否需要修改config路径与ss服务的名 脚本的敏感字用了*代替 项目地址 Github 脚本 #!/bin ...

  8. 【转载】Android的事件分发(dispatchTouchEvent),拦截(onInterceptTouchEvent)与处理(onTouchEvent)

    出处:https://blog.csdn.net/caifengyao/article/details/65437695 在Android中,View的结构是树状的,所以,当触发触摸事件的时候,其事件 ...

  9. PAT-1152(Google Recruitment)字符串+素数

    Google Recruitment PAT-1152 本题最需要注意的是最后输出要以字符串形式输出,否则可能会出现前导0的情况. /** * @Author WaleGarrett * @Date ...

  10. Java 学习阶段性感想

    阶段性感想·操千曲而后晓声 回顾 从2月17日 到 今天 4月19日,我算是暂时完成了Java入门的学习了. 从基本语法到面向对象,从常见API到字符串集合,从文件处理到多线程,我学到了很多,很多很多 ...