java - eclipse RCP 中的 plugin.properties 机制

标签 java plugins rcp fragment

我的项目包含多个插件,每个插件都包含 plugin.properties 文件和近 20 个翻译。 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时才会被搜索。

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

祝一切顺利

标记。

关于java - eclipse RCP 中的 plugin.properties 机制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/673265/

相关文章:

java - 解析 xsd 以使用 JAXB 生成类时出现 NoSuchMethodError

javascript - 如何比较插件内部的 ID?

plugins - 如何在 Sublime Text 中使用控制台

grails - 使用带有可搜索插件的自定义ID列映射

java - Eclipse 4 RCP插件: How to programmatically import projects into workspace

java - 有没有办法从当前插件访问其他插件的资源文件夹?

java - 如何使 SWT 浏览器控件在 Linux(Ubuntu 14) 上使用 Mozilla/Firefox 而不是 WebKit

java - JDBC java.sql.Date() 比较给出 false

java - 为什么 HttpsURLConnection.getServer Certificates() 在 Java 6 和 Java 7 中返回不同的结果?