我的Eclipse 4 RCP应用程序存在一个奇怪的问题,由于缺少contributorURI
,有时无法翻译某些菜单项。
我目前正在开发一个Eclipse 4 RCP应用程序,它由多个本地化插件组成。
其中一个插件是com.mobatime.nms.masterclock.common.ui
。其fragment.e4xmi
为主菜单栏提供了一些本地化的MenuItems
,该菜单栏由另一个插件Application.e4xmi
“com.mobatime.nms.app
”控制。对于本地化,我的意思是MenuItem
的标签是在OSGI
文件中定义的%commands.somecommand
变量(例如OSGI-INF/l10n/bundle.properties
)。
但是,在我的应用程序的所有启动的大约50%上,MenuItems
插件所贡献的masterclock
未被翻译,因此{的名称{1}}变量用作OSGI
的标签。
经过对互联网的一些研究,我发现this thread显然描述了一个与我相似的问题。但是,该线程已有五年的历史了,他们发现的描述错误已在旧版Eclipse SDK中得到修复。
我将ModelSpy插件导入到我的应用程序中,因为它有助于在我上面提到的线程中找到错误。在检查MenuItem
后,我发现在缺少翻译时,每个项目的MenuItems
都未设置。
翻译完成后,提供的contributorURI
的{{1}}包含contributerURI
。
MenuItem
正在正确填写。 platform:/plugin/com.mobatime.nms.masterclock.common.ui
元数据的contributorURI
文件中,contributorURI未保存在受影响的workbench.xmi
上。org.eclipse.e4.workbench
时,问题不会发生。有人知道如何解决这个问题吗?
答案 0 :(得分:0)
我做了一些进一步的研究,发现在我的情况下,问题与应用程序何时启动并且加载了application.e4xmi有关。
受影响的MenuItems的contributorUri正在被正确保存到该文件中(与我在初始帖子中写的相反),但是当从文件加载应用程序模型时,Uri无法从文件中正确读取或未设置为MenuItem。
我目前的解决方法是在应用程序启动时手动为受影响的MenuItem设置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");
}
}
}
答案 1 :(得分:0)
我不知道这个问题是否仍然具有相关性,但我遇到了类似的问题并在不需要解决方法的情况下解决了它:在我的情况下,它有助于将 plugin-xml 中的 apply-property 设置为 always或默认。之前设置为不存在
<extension
id=*yourextensionid*
point="org.eclipse.e4.workbench.model">
<fragment
uri="fragment.e4xmi">
</fragment>
或
<extension
id=*yourextensionid*
point="org.eclipse.e4.workbench.model">
<fragment
apply="always"
uri="fragment.e4xmi">
</fragment>