package com.jumpstart.nls.example.helloworld; public class HelloWorld { static public void main(String[] args) { System.out.println("Copyright (c) IBM Corp. 2002."); System.out.println("Hello."); System.out.println("How are you?"); System.out.println("Goodbye."); }}
对于那些从 AbstractUIPlugin 中分类出来的插件,还可以在其 缺省首选项存储(pref_store.ini)和 对话框设置(dialog_settings.xml)中找到与本地语言相关的参数。Eclipse Workbench 本身并不使用缺省首选项存储,而是选择将缺省值存储到特性文件,然后通过 AbstractUIPlugin 的 initializeDefaultPreferences(IPreferenceStore) 方法初始化它们。 第 3 步:使用正确的语言环境敏感的数据格式、替代 API
请参考 Java Tutorial: Internationalization系列中的详细介绍。 第 4 步:以本国语言进行测试
测试是否可以翻译产品是很重要的,但已超出了本文的范围。但是,以后的文章(“测试国际化的 Eclipse 插件”)将提供验证产品的本地语言敏感问题的策略。 第 5 步:创建初始已翻译插件片段
现在,我们可以只把本国语言特性文件复制到同名且带有特定语言环境后缀的文件中(例如,MyMessages_xx.properties,其中 xx 是语言),然后前进到第 6 步, 准备和发送本国语言材料以供翻译。在这种情况下,产品是与其代码以及它支持的任何语言都作为一个安装交付的。
但是,这种方法有一些缺点。首先,代码及其本地语言资源都混杂在同一个目录/JAR 文件中。如果翻译比代码交付晚,那么必须更新插件 JAR 文件,尽管底层代码并没有更改。其次,除特性文件之外的其它文件(例如,HTML、XML、图像)本质上并不对语言环境敏感,因此必须将它们分离到每种语言的单独目录中。
为了解决这些问题,Eclipse Platform 引入了另一个与插件相对应的可重用组件的概念,叫作 插件片段。插件片段向其目标插件提供了附加功能。在运行时,这些插件组成部分与所有相关的片段合并在一起。这些组成部分可以包括代码组成部分和与插件相关的资源组成部分,如特性文件和 HTML 文件。换句话说,插件通过其类装入器访问片段的内容。 如何以及为什么使用片段来提供可翻译信息
插件片段是分发已翻译 Eclipse 信息(包括 HTML、XML、INI 和位图文件)的理想方式。由于以非入侵方式交付翻译,所以将 Eclipse Platform 翻译封装到片段 JAR 文件中,然后将其添加到现有 Eclipse 安装中不会更改或修改任何原始的运行时元素。这就引出了 语言包(language pack)的概念。
Eclipse Platform 以用片段中的运行时元素增补原始目标插件的方法来合并插件片段。这不会以任何方式移动、除去或修改目标插件。由于类装入器会寻找片段的资源,所以插件开发人员无需知道是从插件的 JAR 文件还是其片段的某个 JAR 文件装入资源。 Eclipse 语言包 JAR
Java 语言带有资源束功能,因此支持语言包的概念。Java 资源束不要求修改应用程序代码来支持另一种语言。*.properties 文件名称空间通过以下命名约定避免冲突: basename_lang_region_variant。在运行时, ResourceBundle 功能会针对当前语言环境寻找适当的特性文件。
在片段中部署文件(如 HTML 和 XML 文件)与在 Java 资源束中部署文件略有不同,因为 Eclipse 片段使用目录结构来区分不同的语言版本。 示例片段内容
插件和插件片段位于可以在 eclipse 子目录下直接找到的单独子目录中。考虑一下我们的示例片段,它部署在德语系统上,我们会看到一个 \nl 文件夹、一个 fragment.xml 和一个 nl1.jar 文件。
图 6. 片段子目录
通常,会根据资源束规则给已翻译的 *.properties 文件添加后缀,并将它们部署到 JAR 文件中。可是,当一个视图需要一种输入文件类型,而文件名称不象资源束一样是语言环境敏感的(如 *.xml),我们就要为文件的每一个语言版本定义一个子目录结构。上面的 de 子目录就是这样一个示例,其中 de = 德语。 片段清单
每个插件文件夹都可以随意地包含一个片段清单文件 fragment.xml。清单文件描述了插件片段,而且与插件清单文件(plugin.xml)几乎相同,只有以下两点除外: