一、背景
最近,项目里有国际化的需求,我在上一篇(
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,如下图所示:
c、打开“命令提示行”,执行native2ascii 命令,输入“欢迎”,得到相应的Unicode码
d、在m_Bundle.properties文件里,定义一个(key-value)资源,如下:
e、新建F00mc002.jspx文件,向页面拖入 Output Text组件
f、设置Output Text的属性面板上的value属性
3、在业务逻辑使用国际化信息
在ADF中所有业务异常必须采用JboException异常或其子类,这样ADF框架才能捕获该异常。
例三:
步骤:
a、双击Mc01AM,打开配置页面,切换到Java配置区,生成Mc01AMImpl与Mc01AMDefImpl文件。
b、在Mc01AMDefImpl.java中重写finishedLoading()方法,如图所示:
c、在m_Bundle.propertes文件中加入如下红框中的信息
d、在Mc01AMImpl.java中加入testException()方法
e、将testException()方法向UI层暴漏
f、新建F00mc003.jspx文件,并将testException()方法从Data Controls拖动到JSF页面,以按钮的形式表现
g、运行F00mc003.jspx,点击testException按钮,出现如下画面
八、注意事项
1、国际化文本在作业页面中的显示问题
在进行作业画面设计时,应考虑到不同语言所占用的页面空间不同,例如,如中文 ‘工号’ 英文为‘job number’中文长度为4,但英文长度为9。虽然没有一定的比例公式,但一般而言,应尽可能增加其长度 。
2、国际化资源文件的维护问题
由于m应用中只存在一个资源文件,在提交版本库时,请手动编辑资源文件,并且按照开发人员区分不同的编辑区,这样可以防止资源文件难于进行Merge提交。
九、国际化资源文件区域(Local)对照表
代号 说明 举例
zh 简体中文 m_Bundle_zh.properties
zh_TW 繁体中文 m_Bundle_zh_TW.properties
en-US 美国英语 m_Bundle_en_US.properties
ru_RU 俄语 m_Bundle_ru_RU.properties
十、参考:
ADF:
http://www.oracle.com/technology/documentation/jdev/b25947_01/index.htmsl
JSR227:
http://jcp.org/en/jsr/detail?id=227
JSF:
http://myfaces.apache.org
- 大小: 31.3 KB
- 大小: 11.6 KB
- 大小: 17.7 KB
- 大小: 19.1 KB
- 大小: 21.6 KB
- 大小: 7.5 KB
- 大小: 7.4 KB
- 大小: 30.5 KB
- 大小: 15 KB
- 大小: 9.7 KB
- 大小: 8.6 KB
- 大小: 7.3 KB
- 大小: 10.3 KB
- 大小: 28.7 KB
- 大小: 18.2 KB
- 大小: 9.6 KB
- 大小: 35.4 KB
- 大小: 17.2 KB
- 大小: 38.1 KB
- 大小: 32.5 KB
分享到:
相关推荐
### Oracle ADF与JSF框架:全面开发指南 #### 标题解读:最全的JSF框架Oracle ADF开发资料分享 标题明确指出这是一份关于JSF(JavaServer Faces)框架下的Oracle ADF(Application Development Framework)的开发...
在Oracle ADF框架下实现应用国际化(i18n)是一项重要的功能,它使得软件可以适应不同语言和地区的用户需求。以下是对该主题的详细阐述: 一、Oracle ADF应用国际化基础 Oracle ADF支持JDK的Java国际化(i18n)标准...
ADF 框架概述 Oracle 应用开发框架(ADF)是一种强大的 J2EE 开发框架,旨在简化 J2EE 开发、提高开发效率和降低开发难度。ADF 框架基于模型 - 视图 - 控制器(MVC)设计模式,通过将应用分为三个层面:模型层、视...
这意味着开发者可以在保持代码整洁的同时,利用丰富的JSF组件快速构建复杂的用户界面,同时通过AGS ADF的丰富功能实现数据访问、业务逻辑处理等功能,形成一个高效且模块化的设计。 #### 三、从JSF到AGS ADF:跨越...
ADF Task Flow是Jdeveloper11新加入的用于...它比原来简单的JSF Flow功能更加强大,使JSF页面不仅仅只可以指向另一个JSF页面,还可以指向事件或者另一个ADF Task Flow。ADF Task Flow分为有限制和无限制的两种
ADF 的核心是基于 JSF(JavaServer Faces)技术,JSF 是一个用于构建用户界面的 Java 框架,它简化了创建动态、交互式的 Web 页面的过程。JSF 提供了一个模型-视图-控制器(MVC)架构,使得开发者可以专注于业务逻辑...
ArcGIS Server Java ADF案例教程提供了一个非常有价值的资源,对于那些希望深入学习和使用ArcGIS Server进行WebGIS开发的Java开发者来说,了解ADF选择JSF框架的原因以及JSF框架的特性是非常重要的。虽然参考资料有限...
如果验证失败,`validate()`方法会抛出`ValidatorException`,JSF框架会捕获这个异常并显示相应的错误消息给用户。`FacesMessage`对象用于创建这个错误消息,其中`SEVERITY_ERROR`表示严重错误,而`"年龄错误"`和`...
**ADF(Application Development Framework)** 是Oracle公司推出的一款基于Java EE平台的企业级开发框架,它为企业构建富客户端和Web应用程序提供了强大的支持。ADF利用模型-视图-控制器(MVC)设计模式,简化了...
ADF框架还支持国际化和本地化,开发者可以利用ADF提供的工具来处理多语言环境的应用,确保应用界面能够根据不同用户的语言偏好显示相应的本地化内容。 在安全方面,ADF Web界面开发指南同样提供了指南,如何利用...
文档还提供了一些关于如何在 ADF 应用程序中使用 JavaScript 的最佳实践,包括但不限于代码组织、性能优化和安全性方面的建议。遵循这些最佳实践可以帮助开发者构建出更加健壮和易于维护的应用程序。
在ADF(Oracle ADF)中传递参数给后端的Bean是一个常见的需求,这通常涉及到将参数值传递给Java Bean以便处理用户的请求。根据提供的文件内容,以下是四种在ADF中传递参数给Bean的方法: 1. 使用f:param标签传递...
3. **View层**:ADF Faces组件可以直接在JSF页面中使用,通过声明式或编程式方式配置,提供了丰富的可视化效果和用户体验。 4. **皮肤和主题**:ADF支持自定义皮肤和主题,开发者可以调整UI外观以满足不同品牌和...
通过分析和运行这个演示应用,开发者可以直观地了解如何在实际项目中使用这些组件,以及如何在不同Web服务器上部署ADF Faces应用。 总结来说,"ADF Faces rich client Demo"是一个展示ADF Faces Rich Client组件...
【标题】"ADF Java 登录 工具"指的是在Java环境中使用Oracle Application Development Framework (ADF) 开发的一个用于用户登录的工具。ADF是Oracle提供的一种企业级Java EE框架,它简化了用户界面(UI)的开发,...
- **简介**:ADF Faces Rich Client是ADF框架的一部分,提供了一组基于JSF的UI组件,用于创建高度交互的Web应用程序。 - **核心特点**: - 支持Ajax操作,实现异步数据交换。 - 丰富的UI组件库,包括表格、树形...