Struts2——国际化

Java语言国际化API中,影响数据本地化的因素主要有两个:一个是用户的语言环境,另一个是用户的时区。

国际化:是设计和制造适应不同区域要求的产品的一种方式。它要求产品中抽离所有的与语言、国家/地区和文化相关的因素

本地化:解决网站,软件向其他国家推广时遇到的语言障碍问题。

Local类有Local(String language)和Local(String language,String country)两个常用的构造方法。其中language表示语言,它的取值范围在ISO-639定义的是小写的、两个字符组成的语言代码。

Local locale= new Locale("zh","CN");

在Locale中海定义了一个静态的方法getDefault(),用于获取本地系统默认的Locale对象。要查看Java支持的所有语言环境,可以调用Locale类中的静态方法getValiableLoacales()函数,该函数返回一个Local对象数组。

2.资源包

获取资源包有以下几种不同的获取方法。我们需要调用ResourceBundle类中的静态方法getBundle().

1)根据基名可以得到资源包,使用系统缺省的Locale对象,语法如下所示。

public static final ResourceBundle getBundle(String baseName)


2)根据基名和Locale对象获取资源包,语法如下

public static final ResourceBundle getBundle(String baseName,Locale locale)

3)从资源包中根据关键字取值

利用ResourceBundle类的getObject()方法,还可以从资源包中得到任何需要的对象,语法如下所示。

public final Object getObject(String key)


利用getBundle()方法可以得到对应于某个Locale对象的资源包,然后利用ResourceBundle类的getString()方法得到相应语言版本的字符串

public final String getString(String key)


如果在使用资源类的时候需要扩展资源类,那么必须要扩展ResourceBundle类,这个时候需要实现下面两个方法

:返回资源包的关键字枚举

public abstract Enumeration getKeys()


:从资源包中根据关键字得到对象

protected abstract Object handleGetObject(String key)


为了方便开发人员编写和使用,在java.util包中还提供了ListResourceBundle和PropertyResourceBundle两个资源类,他们都是从ResourceBundle类中派生出来的。

如果传布的资源都是字符串类型,可以使用PropertyResourceBundle类。该类对于不同的国家分别提供不同的文件,他们的属性文件名称都有一定的规律,都是资源类的命名方式,他们的扩展名都是.properties,文件的内容都是以键值对的形式存储的。

在加载资源的时候可以使用ResourceBundle类的getBundle()静态方法。该方法的执行顺序是,先加载资源类,如果没有成功则加载属性资源文件;如果成功则创建PropertyResourceBundle对象。

getBundle()会按照下列顺序查找资源包

ChinaResource_zh_CN.class

ChinaResource_zh_CN.properties

ChinaResource_zh.class

ChinaResource_zh.properties

ChinaResource.class

ChinaResource.properties

3.将用户注册国际化

1)使用struts.xml文件

<constant name="struts.custom.il8n.resource" value="globalMessages"></constant>


2)使用struts.properties文件

struts.custom.il8n.resources=globalMssages

3)使用web.xml文件

<init-param>

   <param-name>struts.custom.il8n.resources</param-name>

<param-value>globalMessages</param-value>

</init-param>

注意:struts.custom.il8n.resources:在struts2框架中,表示国际化的常量,是一个固定不变的值

globalMessages:表示全局国际化资源文件的basename值,对应的全局国际化资源文件可以使globalMessages_zh_CN.properties、globalMessages_en_US.properties等,这些文件名符合globalMessages_language_country的格式。

5.在文本中使用参数

1)占位符的方式

占位符的方式就是Java中设置消息文本参数的方式。相当于使用从{0}到{9}的占位符。当使用MessageFormat类的format()方法格式化消息字符串时,参数信息内容传递进来,替换掉消息文本的占位符。

2)OGNL表达式

使用OGNL表达式方式,不同于在标签中使用OGNL表达式,在消息文本中使用OGNL表达式的语法是:${ms}.

例如,设置用户登录时提示用户登录后的欢迎信息,资源文件的代码如下所示:

ms=${username},您好!欢迎登录窗体个人空间

在登录成功首页面内设置text标签,来输出资源文件中的消息内容,代码如下:

<s:text name="ms">

这样的话,不用通过${""}方式计算栈中的东西了。

6.访问国际化消息

 在struts2框架中,访问国际化消息主要有两种。

在JSP文件中:<s:text name="key"/>或者为表单元素指定一个Key属性

在Action类中:使用ActionSupport类的getText()方法。

 



 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值