我的项目包含多个插件,每个插件都包含具有近20种翻译的plugin.properties文件。
MANIFEST.MF文件定义存储外部插件字符串的属性文件的名称。

Bundle-Localization: plugin

我定义的插件名称如下
%plugin.name

Eclipse将在运行时在plugin.properties文件中搜索“%plugin.name”。

哪个类读出MANIFEST.MF Bundle-Localization条目,然后在“plugin.properties”文件中搜索带有后缀'%'后缀的字符串?

我想以这种方式找到并修补这些类,以便我可以首先查找其他一些目录/文件来作为“%plugin.name”标识符。使用这些新机制,我可以在我的产品中添加片段,并覆盖“plugin.properties”文件中的单行,而无需更改原始插件。
通过这些机制,我可以通过添加不同的片段来为多个客户创建构建过程。这些片段包括他们想要更改的客户名称和特殊字符串。

我想这样做,因为片段机制只会将文件添加到原始插件中。当插件中存在“plugin.properties”文件时,片段“plugin.properties”文件将被忽略。

更新1:

方法
class ManifestLocalization{
...
protected ResourceBundle getResourceBundle(String localeString) {
}
...
}

返回给定语言环境字符串的属性文件的ResourceBundle。
当有人问到现在如何首先查看片段以获取资源路径时,请发布它。

更新2:

ManifestLocalization类中的方法
    private URL findInResolved(String filePath, AbstractBundle bundleHost) {

        URL result = findInBundle(filePath, bundleHost);
        if (result != null)
            return result;
        return findInFragments(filePath, bundleHost);
    }

搜索属性文件并将其缓存。然后可以从缓存的文件中获取翻译。问题是,整个文件被缓存,而不是单个翻译。

一种解决方案是先读取片段文件,而不是读取捆绑文件。当两个文件都存在时,将它们合并为一个文件,然后将新的属性文件写入磁盘。返回新属性文件的URL,以便可以缓存新属性文件。

最佳答案

尽管我得到的信息有误……但我遇到了完全相同的问题。插件没有被激活两次,我无法找到片段Bundle-Localization key 。

我希望所有语言翻译都在plugin.properties中(我对此并不满意,但是管理单个文件要容易得多)。

我(一半)通过使用解决了问题

public void populate(Bundle bundle) {
    String localisation = (String) bundle.getHeaders().get("Bundle-Localization");
    Locale locale = Locale.getDefault();

    populate(bundle.getEntry(getFileName(localisation)));
    populate(bundle.getEntry(getFileName(localisation, locale.getLanguage())));
    populate(bundle.getEntry(getFileName(localisation, locale.getLanguage(), locale.getCountry())));
    populate(bundle.getResource(getFileName("fragment")));
    populate(bundle.getResource(getFileName("fragment", locale.getLanguage())));
    populate(bundle.getResource(getFileName("fragment", locale.getLanguage(), locale.getCountry())));
}

并简单地将我的片段本地化文件名为“fragment.properties”。

这不是特别优雅,但可以。

顺便说一句,要从片段中获取文件,您需要getResource,似乎片段文件位于类路径上,或者仅在使用getResource时才进行搜索。

如果有人有更好的方法,请纠正我。

一切顺利,

标记。

10-08 00:18