Java 未翻译fragment.e4xmi提供的MenuItems,缺少contributorURI
我的Eclipse4RCP应用程序有一个奇怪的问题,由于缺少Java 未翻译fragment.e4xmi提供的MenuItems,缺少contributorURI,java,eclipse,osgi,eclipse-rcp,Java,Eclipse,Osgi,Eclipse Rcp,我的Eclipse4RCP应用程序有一个奇怪的问题,由于缺少contributorURI,它有时无法翻译某些菜单项 处境 我目前正在开发一个由多个本地化插件组成的Eclipse4RCP应用程序 其中一个插件是com.mobatime.nms.masterclock.common.ui。它的fragment.e4xmi将一些本地化的MenuItems添加到主菜单栏,主菜单栏由另一个插件(com.mobatime.nms.app)的应用程序.e4xmi控制。对于本地化,我的意思是MenuItem的标
contributorURI
,它有时无法翻译某些菜单项
处境
我目前正在开发一个由多个本地化插件组成的Eclipse4RCP应用程序
其中一个插件是com.mobatime.nms.masterclock.common.ui
。它的fragment.e4xmi
将一些本地化的MenuItems
添加到主菜单栏,主菜单栏由另一个插件(com.mobatime.nms.app
)的应用程序.e4xmi
控制。对于本地化,我的意思是MenuItem
的标签是在OSGI-INF/l10n/bundle.properties
文件中定义的OSGI
变量(例如%commands.somecommand
)
然而,在我的应用程序中,大约50%的启动中,masterclock
插件提供的MenuItems
没有被翻译,因此OSGI
变量的名称被用作MenuItem
的标签
我已经发现的事情
- 在互联网上做了一些研究之后,我发现这显然描述了一个与我的问题相对类似的问题。然而,这个线程已经有五年的历史了,他们发现的所描述的bug在旧版本的EclipseSDK中得到了修复
- 我将ModelSpy插件导入到我的应用程序中,因为它有助于找到我上面提到的线程中的bug。检查
菜单项后,我发现当缺少翻译时,每个项目的
没有设置贡献者URI
- 翻译正确后,已贡献的
菜单项的
包含贡献者URI
平台:/plugin/com.mobatime.nms.masterclock.common.ui
- 我们使用最新版本的Eclipse库(SDK、RCP等)
- 这些库的较旧版本也会出现此问题(我们之前使用了4.4.2版)
- EclipseIDE中的常规构建和调试会话之间没有区别,错误无处不在
- 在其他项目上,正确填写了
。贡献者URI
- 在
元数据的org.eclipse.e4.workbench
文件中,contributorURI未保存在受影响的workbench.xmi
上MenuItems
- 使用
时,不会出现问题-clearPersistedState
有人知道如何解决这个问题吗?我做了一些进一步的研究,发现在我的情况下,问题与应用程序启动和应用程序.e4xmi加载的时间有关 受影响菜单项的contributorUri被正确地保存到该文件中(与我在第一篇文章中所写的内容相矛盾),但是当从该文件加载应用程序模型时,Uri不是从该文件中正确读取就是没有设置为菜单项 我目前的解决方法是在应用程序启动时手动设置受影响菜单项的contributorUri。这很可能不是最好的解决方案,但目前它仍然有效:
MTrimmedWindow trim = (MTrimmedWindow) modelService.find("your-window-id", application);
MMenu menu = (MMenu)modelService.find("your-menu-id", trim.getMainMenu());
if(menu != null) {
for(MMenuElement item : menu.getChildren()) {
if(item instanceof MHandledMenuItem && item.getElementId().contains("some-common-string-in-the-menuitem-id")) {
item.setContributorURI("platform:/plugin/com.example.yourcontributingplugin");
}
}
}
您是在使用持久化状态以便从保存的状态重新加载模型,还是在使用
-clearPersistedState
来防止这种情况(因此每次都从片段构建模型)?我没有使用clearPersistedState
,但是当我将其添加到调试配置中时,问题不再发生。可能是Eclipse的持久性逻辑中存在错误?您可以查看org.Eclipse.e4.workbench
元数据中workbench.xmi
文件中的持久化状态,以查看是否保存了contributorURI。工作台文件不会为受影响的MenuItems
保存contributorURI。。。我在原来的帖子中添加了新信息。