Struts Internationalization (i18n 国际化)

来源:互联网 发布:淘宝白色蝴蝶结衬衣 编辑:程序博客网 时间:2024/05/08 15:23

参考网址:

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"));

原创粉丝点击