我的项目包含多个插件,每个插件都包含带有近 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,以便可以缓存新的属性文件。