国际化和本地化

最近一个项目需要国际化和本地化,这里将一些经验和想法与大家分享一下。
1. 需要国际化的资源分动态和静态。
动态资源存储在数据库中,如部门、菜单;静态资源为页面上显示的文本。
动态资源的国际化需要存储在数据库中,可以动态修改;显示时根据客户端语言获取对应的资源。
静态资源通过Struts可以很方便的实现国际化,对应JSP页面中的静态资源可以通过Struts标签很方便的实现
对于JS文件中的静态资源,也可以通过将文件中的静态资源定义为变量,然后通过Struts标签将变量值进行国际化;
还可以将JS文件中的静态资源按语言定义多个JS文件,根据不同语言加载不同的JS文件(Ext就是这么实现的)。
下面具体说一下Struts的国际化实现:
(1) 定义资源文件
ApplicationResources.properties 默认资源文件
ApplicationResources_zh_CN.properties 简体中文资源文件
ApplicationResources_en_US.properties 英文资源文件
说明:
(a) zh_CN为locale标识,zh标识语言(中文),CN标识国家(中国)
(b) 资源文件格式: key = value, 如title=标题
(c) 非英文资源需要利用JDK自动的native2ascii进行转码,转为Unicode编码,命令如下:
native2ascii ApplicationResourcesTemp.properties ApplicationResources_zh_CN.properties

(2) 配置文件
在struts-config.xml配置
<message-resources parameter="ApplicationResources" null="false"/>

(3) 使用国际化资源
通过Struts标签来引用国际化资源,如<bean:message key="title"/>,该标签根据当前Locale来获取显示对应资源,如果没有指定则获取浏览器Locale。
可以通过request.getLocale()方法来获取浏览器Locale。

(4) 指定Locale
由于Struts标签bean:message会首先查找Session中Globals.LOCALE_KEY属性是否有值,如果有则采用该值获取资源,因此可以通过以下语句指定Locale
request.getSession().setAttribute(Globals.LOCALE_KEY, currentLocale); 

2. 其他国际化和本地化
(1) 时间
时间的国际化主要是指存入数据库的时间,对于同一个时间需要根据用户所在的时区来显示。具体实现思路是:时间存入数据库时统一转换为标准时间即格林威治时间,显示时根据用户所在时区,进行转换后再显示
// 本地时间转为格林威治时间
public static Date localDateToGMTDate(Date date, TimeZone timeZone) {
    return new Date( date.getTime() - timeZone.getRawOffset());
}
// 格林威治时间转为本地时间
public static Date GMTDatetoLocalDate(Date date, TimeZone timeZone) {
    return new Date(date.getTime() + timeZone.getRawOffset());
}
说明:客户端时区需要通过JS获取浏览器时区,或者让用户选择,或者在用户信息中进行配置

(2) 货币,数字
货币和数字的国际化跟Locale有关,主要也是显示格式的问题
// 货币的国际化
NumberFormat nf1 = NumberFormat.getCurrencyInstance(Locale.US);
System.out.println(nf1.format(25.55));
// 数字的国际化
NumberFormat nf2 = NumberFormat.getInstance(Locale.CHINA);
System.out.println(nf2.format(123456.789));

日期数字货币国际化参考:
http://www.ibm.com/developerworks/cn/education/java/j-i18n/section6.html

struts2国际化参考:
http://www.blogjava.net/max/archive/2006/11/01/78536.html 
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值