【发布时间】:2017-06-18 00:45:41
【问题描述】:
我的 Eclipse 4 RCP 应用程序有一个奇怪的问题,由于缺少 contributorURI,它有时无法翻译某些菜单项。
情况
我目前正在开发一个由多个本地化插件组成的 Eclipse 4 RCP 应用程序。
其中一个插件是com.mobatime.nms.masterclock.common.ui。它的fragment.e4xmi 向主菜单栏贡献了一些本地化的MenuItems,该主菜单栏由另一个插件(com.mobatime.nms.app)的Application.e4xmi“控制”。本地化是指MenuItem 的标签是在OSGI-INF/l10n/bundle.properties 文件中定义的OSGI 变量(例如%commands.somecommand)。
但是,在我的应用程序启动的大约 50% 中,masterclock 插件贡献的 MenuItems 没有被翻译,因此 OSGI 变量的名称是用作MenuItem 的标签。
我已经发现的事情
-
在网上查了一些资料,发现this thread 明显描述了一个和我比较相似的问题。然而,该线程已经有五年的历史了,他们发现的描述的错误已在旧版本的 Eclipse SDK 中修复。
-
我将 ModelSpy 插件导入到我的应用程序中,因为它有助于在我上面提到的线程中找到错误。查看
MenuItems后发现翻译缺失时,每一项的contributorURI都没有设置。 -
当翻译正确完成时,贡献的
MenuItem的contributerURI包含platform:/plugin/com.mobatime.nms.masterclock.common.ui。
其他信息
- 我们使用最新版本的 Eclipse 库(SDK、RCP 等)。
- 这些库的旧版本(我们之前使用的是 4.4.2 版本)也会出现此问题。
- Eclipse IDE 中的常规构建和调试会话之间没有区别,错误无处不在。
- 在其他项目上,
contributorURI填写正确。 - 在
org.eclipse.e4.workbench元数据的workbench.xmi文件中,contributorURI 未保存在受影响的MenuItems上。 - 使用
-clearPersistedState时不会出现问题。
有人知道如何解决这个问题吗?
【问题讨论】:
-
您是使用持久化状态以便从保存状态重新加载模型,还是使用
-clearPersistedState来防止这种情况(因此模型每次都是从片段构建的)? -
我没有使用
clearPersistedState,但是当我将它添加到我的调试配置中时,问题不再出现。可能是 Eclipse 的持久性逻辑中的一个错误? -
您可以查看
org.eclipse.e4.workbench元数据中workbench.xmi文件中的持久化状态,以查看contributorURI 是否正在保存。 -
工作台文件没有保存受影响
MenuItems的contributorURI...我在原帖中添加了新信息。
标签: java eclipse osgi eclipse-rcp