博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
(十四)struts2的国际化
阅读量:6489 次
发布时间:2019-06-24

本文共 3547 字,大约阅读时间需要 11 分钟。

一、国际化的概念

国际化是指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中配置方法:
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视图资源的国际化

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

  

 

 

  

  

  

  

 

  

  

转载于:https://www.cnblogs.com/yuexiaoyun/p/9450255.html

你可能感兴趣的文章
Maven
查看>>
.NET 同步与异步之锁(Lock、Monitor)(七)
查看>>
前端大牛们都学过哪些?
查看>>
在iOS当中发送电子邮件和短信
查看>>
13~1003的和
查看>>
pycharm如何新项目如何不默认创建虚拟环境(吐槽)
查看>>
MySQL字段类型详解
查看>>
ORACLE 的游标
查看>>
虚拟机安装的UBUNTU全屏的方法:
查看>>
java虚拟机类加载器
查看>>
ASP.NET状态管理之八(会话Session)
查看>>
转载:大型网站架构演变和知识体系
查看>>
set集合
查看>>
SVN服务器的搭建和使用
查看>>
mvc中枚举的使用和绑定枚举值到DropDownListFor
查看>>
多目标跟踪的评价指标
查看>>
HTTPS(SSL)详解以及PHP调用方法
查看>>
突发小事件,USB接口问题
查看>>
Nginx负载均衡配置实例详解
查看>>
L1-009. N个数求和
查看>>