国际化资源包Resources Bundle

当对一个应用程序进行国际化处理时,所要用的各种语言版本的“标签”信息应该存放在不同的属性文件中,每一个这样的文件对应一种语言的版本。所有属性文件合在一起被称为资源包(Resource Bundle)。

属性文件的命名格式可分为以下两种:

l         文件名前缀.properties

l         文件名前缀_语言种类.properties

l         文件名前缀_语言种类_国家.roperties

文件名后缀必须为properties,前缀则由开发者自行确定,其中的语言种类字段必须是有效的ISO(International Standardization Organization,国际标准化组织)语言代码,ISO-639标准定义的这些代码格式为英文小写、双字符,具体见表5-1所示。

表5-1  ISO-639标准常用语言代码

语    言

编    码

汉语(Chinese)

Zh

英语(English)

En

法语(French)

Fr

德语(German)

De

日语(Japanese)

Ja

意大利语(Italian)

It

访问网址http://www.ics.uci.edu/pub/ietf/http/related/iso639.txt可以获取其他ISO-639标准语言代码。

 

 

关于l        文件名前缀_语言种类_国家.roperties这种命名方式,大部分情况下可以不具体到国家。如果具体到国家,例子如下:

ApplicationResources_en_US.properties
ApplicationResources_zh_CN.properties

 

 

 

资源文件需要存储在类的路径下,而且它的路径要作为初始化参数传送给ActionServlet时,路径的格式要符合完整Java类的标准命名规范。比如,如果资源文件存储在WEB-INF/classes目录中,文件名是 ApplicationResources.properties,那么需要传递的参数值是ApplicationResources。如果文件在WEB-INF/classes/com/test中,那么参数值就应该是com.test.ApplicationResources。

 

 

 

资源包需要在Struts配置文件struts-config.xml中进行配置。<message-resources>元素就是用来配置资源包的。

<message-resources parameter="ApplicationResources"/>

如果有多个资源包要配置,那么它们用key属性来进行区分。

<message-resources parameter="ApplicationResources"/>

<message-resources key="Image" parameter="ApplicationImageResources"/>

<message-resources key="XXX" parameter="ApplicationXXXResources"/>

其中,不带key属性的就是默认的资源包。

 

 

 

资源包建立好后,就可以对其进行访问了。访问的方式主要有两种:一种在JSP页面中通过<bean:message>标记来访问,另一种是在程序中访问。

 

 

在JSP页面中访问资源包,需要使用<bean:message>标记。在使用该标记之前,必须首先部署包含此标记的Struts标记库文件struts-bean.tld,具体操作步骤如下:

(1)将Struts发布包中提供的标记库文件struts-bean.tld复制到待进行国际化的应用程序所在项目的WEB-INF目录下。

(2)在使用该标记库的应用程序的部署文件web.xml的<web-app>元素中添加相应的<taglib>元素,具体语法格式如下:

<taglib>

    <taglib-uri>/WEB-INF/struts-bean.tld</taglib-uri>

    <taglib-location>/WEB-INF/struts-bean.tld</taglib-location>

</taglib>

(3)在使用<bean:message>标记的JSP源文件的开头引入此标记库,具体格式如下:

<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %>

 

 

 

 

在程序中访问资源包主要是在Action类中用到。Action提供了getResources()方法可以获得org.apache.struts.MessageResources类的一个实例。MessageResources代表资源包的一个类,它是一个抽象类,因此需要由Action的基类中的getResources()方法来返回它的一个实例。以下是一段程序示例:

//获得用户的Locale信息

Locale locale = getLocale(request);

//获取资源包

MessageResources message = getResources(request);

//从资源包中得到消息文本

String title = message.getMessage(locale,"title.login");

可以看到在调用了getResources()方法后,便可以获得相应的资源包,接下来,就可以按照request对象中的Locale信息来获取相应资源包中的文本。值得注意的是getMessage()有几种形式,如下所示:

getMessage(String key)

getMessage(Locale locale, String key)

getMessage(Locale locale, String key, Object[] args)

其中,最后一种getMessage()方法可以传入参数给资源包中的文件,更加灵活地实现消息的输出。

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值