fragment.e4xmi 提供的 MenuItems 未被翻译,contributorURI 丢失

MenuItems contributed by fragment.e4xmi are not being translated, contributorURI is missing

我的 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.

的标签

我已经知道的事情

附加信息

有人知道如何解决这个问题吗?

我做了一些进一步的研究,发现在我的情况下,问题与应用程序启动和加载 application.e4xmi 的时间有关。

受影响的 MenuItems 的 contributorUri 被正确保存到该文件中(与我在初始 post 中所写的内容相矛盾),但是当从文件加载应用程序模型时,Uri 不是从文件中正确读取或未设置到 MenuItem。

我目前的解决方法是在应用程序启动时手动为受影响的 MenuItems 设置 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");
        }
    }
}

我不知道这个问题是否仍然相关,但我遇到了类似的问题并在不需要变通方法的情况下解决了它:在我的例子中,它有助于设置 apply-属性 plugin-xml 始终或默认。在设置为 notexists

之前
<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>