参考网址:
http://ajava.org/readbook/open/sshzgf/5012.html
1、为什么需要国际化
国际化是商业系统中不可或缺的一部分,目前很多跨国的商务需求都需要实现多语言,对用户而言他们始终想看到用他们熟悉的语言显示的网站,因此这势必要求开发网站所采用的技术具有国际化的特点。若采用普通的编程方式实现国际化可能需要花费大量的时间和精力,而采用Struts则可以极大地简化程序员在做国际化时所需的工作。
Struts允许将不同语言的文字写在多个资源文件中,每个资源对应一种语言,在JSP页面上通过Struts标签 从资源文件中分别获取不同区域特征的文本,并显示在页面上,以此实现国际化的目的。
2、认识Struts国际化组件
要实现国际化,首先应该有存放各种版本语言编写的消息的地方。实际上,这些信息就被存储在多个文本文件中,每个文件对应着一种不同语言的版本。这些文件被称做资源文件,所有资源文件合在一起被称为资源包(Resource Bundle)。
资源文件必须以.properties结尾,文件名前缀可以任意命名,习惯上命名方式有以下两种:
l 文件名前缀.properties。
l 文件名前缀_语言种类.properties。
其中,语言种类字段必须是有效的ISO(International Standardization Organization,国际标准化组织)语言代码,ISO-639标准定义的这些代码格式为英文小写、双字符,如表1所示。
表1 ISO-639标准常用语言代码
语言 | 编码 |
汉语(Chinese) | zh |
英语(English) | en |
法语(French) | fr |
德语(German) | de |
日语(Japanese) | it |
意大利语(Italian) | ja |
在进行国际化处理时,资源文件中包含中文字符,若不进行编码转换页面将会出现乱码。在JDK中提供了一个native2ascii程序,它能够实现字符编码转换。例如要转换Application.properties文件中的字符,在DOS中执行以下的命令:
native2ascii -encoding GB2312 Application.properties
Application_zh.properties
经过native2ascii命令转换后,就得到一个新的文件Application_zh.properties,它的内容如下:
login.jsp.title=/u767b/u5f55/u9875/u9762
login.jsp.page.heading=
/u767b/u5f55/u9875/u9762
login.jsp.label.username=/u7528/u6237/u540d/uff1a
login.jsp.label.password=/u5bc6/u7801/uff1a
login.jsp.button.submit=/u63d0/u4ea4
login.jsp.button.reset=/u91cd/u5199
3、访问资源包的方式
访问资源包的方式主要包括两种:一种是在JSP页面中通过Struts标签 来访问,另一种是在程序中访问。
在JSP页面中通过Struts标签 来访问资源包需要以下两个步骤。将标签库描述文件struts-bean.tld复制到应用工程的WEB-INF目录下。
在JSP页面中引入标签库,引入的方式如下代码所示:
<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %>
在程序中访资源包可通过Action类提供的getResources()方法先获得 org.apache.struts.MessageResources类的一个实例,之后就可以按照request对象中的Locale信息来获取相应资源包中的文本,示例代码如下:
//获取请求的的Locale信息
Locale locale = getLocale(request);
//获取资源包
MessageResources message = getResources(request);
//从资源包中得到信息文本并输出
System.out.println(message.getMessage(locale,"login.jsp.page.heading"));