片段是用来封装本地语言转换的简便方法。让我们更仔细地看看用于安装语言环境特定转换文件的目录结构。无论是用片段封装或以原始插件交付已转换文件,都使用该目录结构。
有两种机制用来定位插件中的语言环境特定文件。
理解将使用哪个机制来访问任何必须转换的给定文件很重要,这样您将知道如何命名文件以及将它放置在文件系统中相对于插件的哪个位置。
平台核心定义一种目录结构,它对语言环境不同的文件使用特定于语言环境的子目录。已转换文件放置在插件下称为 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 子目录下的子目录中。
运行时仅访问最特定的文件。文件路径被作为 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.xml。由于历史原因,这些文件被看作 Java 属性资源束并使用其它机制。)
属性资源束的标准 Java 处理被用于其它文件。已转换文件包含在 JAR 文件中,每个属性文件都具有语言环境特定名称,如“message_en_CA.properties”。这些文件在特定于包的子目录中,可能出现在插件自身或其片段之一中。每个已转换的属性文件都可能是部分的,因为键查找访问良好定义的属性文件链。
如上所述,使用此技术访问 plugin.properties 和 fragment.xml。