ADF(JSF)框架中使用国际化
一、背景
最近,项目里有国际化的需求,我在上一篇(http://redhacker.iteye.com/admin/blogs/1039819)文章中,已经提出了一种解决方案的实现,但那种解决方案,不是遵循ADF开发框架本身的国际化思路,并且在Jdeveloper开发工具中,采用那种解决方案并不是最快速开发的方式。
这两天,我又重新审视这个主题,提出另外的一套解决方案,但实际上,早在去年,对于我将要提出的方案,我已经进行了研究探讨,只仅仅是因为处于i18n最原始的实现(jdk api)感兴趣,一时兴起,而提出了先前的那种方案,不过对于学习和理解i18n的原始实现,先前的方案确实是一个不错的例子。
二、说在前面
再讲述具体的方案之前,我很想跟大家分享一下我对国际化的理解,首先,让我们先来看看两个概念:
国际化(Internationalization)是设计一个适用于多种语言和地区的应用程序的过程。适用于多种语言和地区的含义是当使用不同语言及处于不同的地区的用户在使用这个应用程序时,应用程序必须使用他们能看懂的语言和符合他们文化习惯来显示信息。国际化简称为i18n,因为有18个字母在国际化的英文单词的字母i和n之间。一个国际化的程序通常是被存储在本地化的数据中,并且能被程序正确的动态的使用。支持新的语言时,不需要修改程序,不需要重新编译。 文化差异的数据,比如日期和货币,必须根据拥护的语言和习惯显示不同的格式。
这个概念是我从it-pub里的一篇文章里抄出来的,个人认为较为准确的该概括了i18n的含义及其范围。
让我们再看一个概念:
本地化(Localization)是指通过增加本地描述的构件(locale-specific components )和文字翻译工作来使应用程序适应于不同的语言和地区的过程。本地化被简称为l10n,应为有10个字母在本地化的英文单词的字母l和n之间。通常本地化最耗时的工作应该是文字翻译。本地化工作者们要根据地区的具体需求来为日期、数字和通货等数据建立新的格式。
对应于国际化,本地化大多是像把一个本来是某种语言的软件产品,进行汉化加工的过程,有被动修改的意思。而国际化,却像是对在一个软件进行开发时,进行多语言的支持所作出的努力,有主动设计的意思。
我们经常听到说某个软件的汉化版本,其实就是这个软件的中国化产品,而这种本地化,不会在软件使用过程中随意的切换语言。
而我们说SPA的财务软件支持国际化,通常是指,对于这一套软件的使用,在美国,我们使用英文的计算机操作系统,可以看到英文的SAP财务软件,在中国,我们使用中文计算机操作系统,看到的确实中文的SAP软件。实际上还有一种情形,那就是在中国,突然来了个美国人,他不懂中文,但他却想使用这套SPA软件,报销一笔到中国旅游的费用,他可以使用中文操作系统的计算机,通过语言切换,从而访问到英文的软件操作画面,达到报销的目的。
因此,我想说,国际化和本地化有着截然不同的区别,这是我们讨论国际化问题首先要明确的问题。
另外,i18n从概念看,不仅仅是对显示内容的过语言支持,他还涉及到了包括,文化习惯差异,时区,货币符号等内容。但就下面我提到的方案而言,我想说,对于除显示内容以外的国际化,尚未涉及,希望其他的ADF、JSF fans们能够补充......
三、缩略语约定
m 资财管理
c 物料编码管理模块
mc 资财管理中的物料编码管理模块
EO Entity Object
VO View Object
AM Application Module
四、国际化总体使用原则
m应用目前应当至少提供中文二种语言的国际化支持。
m应用国际化的粒度应做到每个作业画面中的所有文本元素。
m应用每种语言仅使用一个国际化资源文件。
m应用的国际化切换是根据用户所使用浏览器的语言环境自动切换。
m应用可以通过选择使用某种语言,并且这种选择是session级别的。
五、国际化的范围
1、每个作业画面中一般包括的元素有:按钮上的文本、Label、静态的文本(譬如:表头、温馨提示等一些说明性的文字)。
2、EO所有的属性的文本与校验异常进行国际化。原则上这些国际化信息应保持较强的通用性,提高EO上国际化信息的复用性。
3、VO应针对特定属性文本与校验信息进行国际化。原则上这些国际化信息是具有较强的业务特点,这里的国际化信息是为特定业务而制定的,从而覆盖EO上相对应属性的国际化信息,达到个性化定制的目的。由于我们在VO上也可能会实现一些业务方法,这些方法我们可能期望抛出一个业务异常,因此VO下的国际化资源文件也应当包含这些异常的国际化信息。
4、AM应针对整个系统模块的相关信息进行国际化。原则上这些国际化信息应具有全局性的特点,它应当包括:AM中业务方法的异常国际化信息;公用画面(譬如:登陆页面)的国际化信息;其他非EO、VO的国际化信息。
六、国际化资源文件命名规范
格式:系统别 + “_” + Bundle + “_” + Local.properties
举例:m_Bundle_en.properties
七、ADF框架国际化应用开发步骤
1、创建m应用国际化资源文件
a、右键点击mModel,选择“Project Properties”,打开项目属性面板,选择“Resource Bundle”,按图下设置。
b、点击确认后,系统自动生成com.jl.res包,并产生相应的m_Bundle.properties文件,如下图所示:
2、在作业画面使用国际化信息
直接从Data Control拖动过来的VVO/VO/EO的字段所产生的文本信息。这种文本信息,只要在VVO/VO/EO属性上已经定义了国际化资源信息,则从Data Controls中拖动到页面的属性会自动使用这些国际化信息。
例一:在EO上对lable进行国际化
a、找到T00mc002EO及其字段Mcname
b、双击Mcname,选择Control Hints
c、点击Label Text右边的“…”,打开添加信息画面,填入如下图所示内容,点select and save进行保存。返回属性编辑画面后点Apply,再点OK。
d、打开com.jl.res.m_Bundle.propertes,看到如下内容
e、新建F00mc001.jspx文件,从Data Controls面板拖入T00mc06V1上的Mcatycnname,创建一个ADF Input text组件。
例二:在jspx页面直接使用国际化步骤:
a、mUI项目引用mModel项目的资源文件。设置mUI的项目属性,如下:
b、在facese-config.xml里设置资源文件的位置,以及所支持的Local,如下图所示: