如何正确更新电子应用程序菜单标签?

How to properly update electron application menu labels?

我正在尝试在电子应用程序上添加翻译支持,但在更新应用程序菜单时遇到了问题。我提到开发已在 macOS 上完成和测试,但我也愿意让它在 Windows 上运行。

我知道菜单功能只能在主进程中管理,所以我使用 ipcMain 和 ipcRenderer 在主进程和渲染器进程之间进行通信。

问题是我正在更新一个标签,它似乎已更新(显示在日志中)但它没有在呈现的菜单中更新它。

    //Menu.getApplicationMenu() is in english
    
    mainMenu.language = "nl_nl";
    //updating 1 label
    mainMenu.object.items[0].submenu.items[0].label =i18n.__({phrase: 'Hello', locale: mainMenu.language}),
    
    Menu.setApplicationMenu(mainMenu.object);
    let currentMenu = Menu.getApplicationMenu();
    //currentMenu reflects the change but the rendered menu still shows the old value (english)

我认为你缺少 Menu.buildFromTemplate(mainMenu.object)

要使用 Menu.setApplicationMenu(template),您首先需要 运行 Menu.buildFromTemplate(mainMenu.object) 在模板上将其转换为 Menu.setApplicationMenu(template) 可以使用的东西。

会是这样的:

const menu = Menu.buildFromTemplate(template);
Menu.setApplicationMenu(menu);

Ref.