级别: 初级
Wei Wang (wangweiu@cn.ibm.com ), 软件工程师, IBM, Software Group
Yuan Yao Deng (dengyy@cn.ibm.com ), 软件工程师, IBM
2009 年 7 月 27 日
Eclipse Rich Client Platform (RCP) 逐渐在软件开发方面获得了广泛的认可。对于跨国公司来说,为世界范围内的客户交付支持多语言的软件变得越来越重要。通过本文,您可以学习到如何在 RCP 应用程序中全球化用户界面(UI)元素,包括窗口、菜单、工具栏、对话框、欢迎页面、闪屏和标准 Eclipse UI 元素。样例应用程序 Hello World 将向您演示整个流程。
Eclipse Rich Client Platform(RCP)有着许多优势,如开发迅速、自然的感观、可扩展性和多平台支持。许多公司都采用 RCP 来开发他们的软件。对于跨国公司来说,要把软件出售给世界各地的用户,交付支持多语言的软件正变得越来越重要。全球化是 RCP 软件开发的关键部分。通过使用 Hello World 样例,学习如何全球化一个 RCP 应用程序的 UI。
|
|
本文的样例将使用一些简单的功能实现 Hello World 应用程序全球化。图 1 显示的是 Hello World 应用程序的主 UI。
当您单击 File 菜单中的 Say Hello 时,将会弹出一个对话框 “Hello! This is a sample!”。打开应用程序或者单击帮助菜单里的 Welcome ,欢迎页面将出现在主 UI 上,提供一些介绍性信息。单击帮助菜单里的 About Hello World 将会显示应用程序和版本信息。这就是它的功能 — 非常简单。
Hello World 应用程序是由 Eclipse V3.4.1 创建,它以 “RCP application with an intro” 模板为基础,并遵循插件项目向导的步骤。完成向导后,需要一些附加代码。请参考本样例的源代码,您可以 下载 获得。本文的焦点在于全球化,因此,本文不会讨论实现其他功能的代码。
完成 Hello World 代码的编写后,默认情况下只支持英语。需要为此应用程序添加多语言支持。需要进行全球化的 UI 元素包括菜单、工具栏、对话框、闪屏、欢迎页面、插件和产品信息,以及标准的 Eclipse UI 元素。
|
|
同其他的 Java™ 应用程序一样,需要为 RCP 应用程序创建一个资源包。在本样例中,资源包放在 helloworld.resource 包中,并且命名为 “custom”。资源包文件名必须符合 Java 资源包的命名惯例:<resource_name>_<Language Code>_<Country Code>.properties 。例如,custom_fr.properties 是用于法语的资源包,而 custom_zh_CN.properties 是简体中文的资源包。更多有关语言和国家代码的信息,请参见 参考资料 。图 2 显示的是 Hello World 的资源包。
资源包文件包含了键/值对。这些键能够惟一地识别资源包中特定于位置的对象。需要对每个想要全球化的 UI 元素创建一个键/值。清单 1 显示了用于英语的属性文件。
清单 1. 资源包文件 custom_en.properties 的内容
|
现在,您需要一个实用程序来读取资源包。如清单 2 所示,CustomString
类提供了两个功能:
setBundle
根据位置初始化一个资源包对象。getString
用指定的语言返回一个给定键的值。
清单 2. 用于读取资源包(CustomString.java)的实用程序
|
资源包和实用程序准备就绪后,要通知应用程序在启动时应该使用哪种语言。Application.java 是 RCP 应用程序的入口。建议使用 start()
方法初始化资源包。Locale.getDefault()
返回默认系统位置,如下所示,然后返回的位置会被传递给 CustomString.setLocale()
中。应用程序将使用系统位置初始化资源包。
清单 3. 在 Application.java 中设定位置
|
常用资源包现在可以用于整个应用程序。下面的小节将讲解如何在 UI 里调用资源包。
|
|
在一个 RCP 应用程序里,菜单和工具栏条目是以动作的形式表示。菜单和工具栏可以使用代码或者扩展进行添加。我们的样例使用代码注册菜单动作。在动作定义类里,使用 setText()
方法在构造函数里对动作标签进行定义。文本将以菜单标签的形式显示。如您所见,现在文本只针对英语进行硬编码。修改过的代码在 setText()
方法中使用资源包替代 “Say Hello”
清单 4. 在 HelloAction.java 中为菜单和工具栏设置动作文本
|
对话框可以用不同代码在 UI 上显示文本,但是,全球化方法是相同的。您可以使用同样的方法把由 Java 代码生成的其他 UI 进行全球化 — 这并不局限于菜单、工具栏和对话框。
|
目前为止,UI 的全球化和典型的 Java 应用程序基本相似。下一小节将介绍 RCP 应用程序的特征。
|
|
闪 屏是应用程序加载时出现的一个图片。它通知用户应用程序正在加载,并且提供产品名和版权等应用程序信息。通常,在 RCP 应用程序中,闪屏被命名为 splash.bmp,并放在插件项目的根文件夹下。然而,放在根文件夹下的 splash.bmp 仅适用于英语。要想在一个多语言的应用程序中根据不同的语言提供不同的闪屏,需要遵循闪屏的路径规则。图 3 给出了一个示例。
把插件项目的根文件夹命名为 <plugin-root> 。必须把 splash.bmp 放在 <plugin-root> /nl/<Language Code>/<CountryCode> 下。例如,需要把用于简体中文的闪屏文件放在 <plugin-root> /nl/zh/CN。
|
|
欢 迎页面的特性是由 org.eclipse.ui.intro 插件提供的。可以通过定义专门的页面,把产品介绍给新用户。欢迎页面在产品首次启动时显示,它也是一个向用户介绍产品功能的途径。RCP 欢迎页面由一个介绍性的内容文件和页面文件(HTML、图片、CSS 等等)组成。
对于每种语言都可能准备了一组页面文件,因 此,需要根据位置使用不同的 introContent.xml 指向不同的欢迎页面。plugin.xml 引用了介绍性内容文件。把 plugin.xml 中的介绍性内容文件的名称提取为外部字符串。外部字符串存放在一个属性文件中,该文件的命名惯例为 plugin_<Language_Code>_<Country_Code>.properties。图 4 显示了这些文件之间的关系。
清单 6 中的代码片段来自于 plugin.xml。变量 %welcome.page
用于内容属性,而不是用于硬编码的文件名 introContent.xml。文件的真实名称放在了一个属性文件里,以便 plugin.xml 根据位置找到相关的内容文件。
|
以汉语为例。用户在汉语环境下启动 Hello World 应用程序时,plugin.xml 将会找到汉语的外部字符串文件 plugin_zh_CN.properties,并且会根据属性文件里的键名 welcome.page
获得文件名。如下所示,汉语的内容文件 introContent_zh_CN.xml 将被使用。
清单 7. plugin_zh_CN.properties 中的介绍性内容文件名
|
可 以看到 introContent_zh_CN.xml 是如何用 HTML 格式指向汉语欢迎页面的。welcome_zh_CN.html 是一个 HTML 文件,包含有使用汉语表述的产品介绍信息。在汉语 OS 中使用这个应用程序的人将看到用汉语显示的欢迎页面。
清单 8. 在 introContent_zh_CN.xml 中的欢迎页面
|
|
|
插件和产品的信息(如产品名、主窗口标题和 About 文本)也能够被全球化。这些信息存放在 plugin.xml 中。您可以使用与欢迎页面相同的全球化方法。只需要使用 plugin.xml 和 plugin.properties 来进行此项操作。plugin.xml 中的所有信息都可以被外部化到 plugin.properties 中。
|
使用前面的 plugin.properties 文件,还要再添加两项属性:product.name
和 about.text
。product.name
的值显示在窗口标题和 about 菜单中。当您打开 About 对话框时,将会显示 about.text
的值。
|
如果属性文件包含了非 ASCII 字符(产品名或者 about 文本),需要使用转义 Unicode 把文件从原生编码转换成 ASCII。<JDK_HOME>/bin/native2ascii
可以用来完成这种转换。对于汉语资源包 plugin_zh_CN.properties,就需要执行这种转换。转换后,plugin_zh_CN.properties 看上去就像清单 11。
清单 11. plugin_zh_CN.properties
|
|
|
Eclipse 有一些 UI 元素并不是您的应用程序的一部分,如最大化和最小化窗口按钮的 tool-tip。对于您的应用程序的 UI 来说,也要把这些 UI 元素全球化。幸运的是,Eclipse 帮助您解决了这个问题。下载 Eclipse 的语言包,然后把它们放在 RCP 应用程序的插件目录下。当启动应用程序时,UI 元素将自动被全球化。
|
|
在一个 RCP 应用程序中,包含有许多种 UI 元素。需要使用各种不同的方法把不同的 UI 元素全球化。本文介绍了工具栏、菜单、对话框、闪屏、欢迎页面、产品信息和标准的 Eclipse UI 元素的全球化(G11N)实现。
尽管样例程序 Hello World 的功能非常有限,但它涵盖了大部分的 UI 元素。现在您可以为 RCP 应用程序创建一个完全支持全球化的 UI 了。
|
|
描述 | 名字 | 大小 | 下载方法 |
---|---|---|---|
Hello World | os-eclipse-globalrcp-HelloWorld.zip | 161KB | HTTP |
关于下载方法的信息 |
学习
- 获取更多关于 Eclipse RCP 的细节,这是用于创建富客户机应用程序的最小插件组。
- 学习 Eclipse RCP 教程 ,内容包括:创建首个 RCP 应用程序;使用命令、视图、编辑器、对话框、首选项用法和首选项页面;外部 JAR 的使用;创建一个产品和品牌;以及为 RCP 应用程序添加帮助。
- 了解更多关于 Codes for the Representation of Names of Languages (ISO 639.2)和 国家名和代码元素 (ISO 3166-1 和相应的 ISO 3166-1-alpha-2 代码元素)的内容。
- Globalize your On Demand Business 讨论 IBM 如何注重国际市场竞争。
- 查阅 推荐 Eclipse 阅读清单 。
- 在 developerWorks 上浏览所有的 Eclipse 内容 。
- 不熟悉 Eclipse? 请阅读 developerWorks 文章 “Eclipse 平台入门 ”,学习它的起源和架构,以及如何用插件扩展 Eclipse。
- 通过查阅 IBM developerWorks Eclipse 项目资源 扩展您的 Eclipse 技术。
- 要收听针对软件开发人员的有趣访谈和讨论,请查阅 developerWorks podcasts 。
- 随时关注 developerWorks 技术活动 和网络广播 。
- 查阅免费的 developerWorks 演示中心 ,观看并了解 IBM 及开源技术和产品功能。
- 查阅最近将在全球举办的面向 IBM 开放源码开发人员的研讨会、交易展览、网络广播和其他 活动 。
- 访问 developerWorks Open source 专区 ,获得丰富的 how-to 信息、工具和项目更新,帮助您用开放源码技术进行开发,并与 IBM 产品结合使用。
获得产品和技术
- 在 IBM alphaWorks 上查阅最新的 Eclipse 技术下载 。
- 从 Eclipse Foundation 下载 Eclipse Platform 和其他项目 。
- 下载 IBM 产品评估试用软件 或 IBM SOA Sandbox for Reuse ,并开始使用来自 DB2®、Lotus®、Rational®、Tivoli® 和 WebSphere® 的应用程序开发工具和中间件产品。
- 使用 IBM 产品评估试用软件 改进您的下一个开发项目,这些软件可以通过下载获得。
讨论
- Eclipse Platform 新闻组 应当是讨论关于 Eclipse 的问题的第一站(选择此链接将启动默认的 Usenet 新闻阅读器应用程序并打开 eclipse.platform)。
- Eclipse 新闻组 中有很多参考资料适用于对使用和扩展 Eclipse 感兴趣的人员。
- 参与 developerWorks 博客 并加入 developerWorks 社区。
| Wei Wang 是 IBM China Software Development Lab 的一名软件工程师。他主要从事普及计算客户机技术。 |
Yuan Yao Deng 是 ECM Widgets 开发人员。他有 5 年多的 Eclipse 开发经验。 |