段是用来打包本地语言转换的简便方法。让我们更仔细地看看用于安装语言环境特定转换文件的目录结构。无论是用段打包或以原始插件交付已转换文件,都使用该目录结构。
有三种机制用来定位插件中的语言环境特定文件。
理解将使用哪个机制来访问任何必须转换的给定文件很重要,这样您将知道如何命名文件以及将它放置在文件系统中相对于插件的哪个位置。
平台核心定义对语言环境不同的文件使用特定于语言环境的子目录的目录结构。已转换文件放置在插件下称为 nl 的目录中。例如,以下安装树显示普通(无代码)插件,它带有 about.properties 文件的特定于语言环境的转换。各种转换显示为来自插件段而不是插件本身。这常见于将转换与基本内容分开提供的情况,不过您还可以将 nl 子目录放在插件本身下面。
acmeweb/ eclipse/ plugins/ com.example.acme.acmewebsupport_1.0.0/ plugin.xml about.properties (缺省语言环境) com.example.acme.fragmentofacmewebsupport_1.0.0/ fragment.xml (com.example.acme.acmewebsupport 1.0.0 的段) nl/ fr/ about.properties (法语语言环境) CA/ about.properties (加拿大法语语言环境) FR/ EURO/ about.properties (法国法语欧元) en/ about.properties (英语语言环境) CA/ about.properties (加拿大英语语言环境) US/ about.properties (美国英语语言环境) de/ about.properties (德语语言环境)
要转换的文件不包含在 JAR 文件中。每个文件应具有完全相同的文件名,但是要位于段(或插件)根目录中 nl 子目录下的子目录中。
运行时仅访问最特定的文件。文件路径被作为 Platform.find、IPluginDescriptor.find 和 Plugin.find 机制的一部分来搜索。例如,假定缺省语言环境是 en_CA,则 about.properties 的插件搜索如下所示:
somePlugin.find("$nl$/about.properties");
该方法将返回对应于根据以下顺序找到 about.properties 的第一个位置的 URL:
com.example.acme.acmewebsupport_1.0.0/nl/en/CA/about.properties com.example.acme.fragmentofacmewebsupport_1.0.0/nl/en/CA/about.properties ... <any other fragments> com.example.acme.acmewebsupport_1.0.0/nl/en/about.properties com.example.acme.fragmentofacmewebsupport_1.0.0/nl/en/about.properties ... com.example.acme.acmewebsupport_1.0.0/about.properties com.example.acme.fragmentofacmewebsupport_1.0.0/about.properties
插件使用此机制来搜索其它插件中的已知文件名。这包括以下已知文件名:
(注:很明显,列表中缺少 plugin.properties 和 fragment.properties。它们按下面所述的有点不同的方式进行处理。)
属性资源束的标准 Java 处理用于其它文件。已转换文件包含在 JAR 文件中,每个属性文件都具有特定于语言环境的名称,例如,“message_en_CA.properties”。这些文件在特定于包的子目录中,也可能在插件本身或其中一个插件段中出现。每个已转换属性文件可能只是一部分,这是因为键查找访问的是严格定义的属性文件链。
从 2.1 开始,NL 段的形状变得有点不同。以前所有转换文件(包括 plugin.properties)都是以 JAR 形式提供的。由于 plugin.properties 文件是在插件根目录提供的,这会造成不一致。
为使 NL 段适应新模型,从 JAR 中除去 plugin.properties
转换文件并将它们作为 fragment.xml 的同代放在段的根目录中。例如,org.eclipse.ui.workbench 的 NL 段的新形状如下所示:
org.eclipse.ui.workbench.nl/ fragment.xml plugin_fr.properties plugin_pt_BR.properties ... nl1.jar