Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何正确更新电子应用程序菜单标签?_Javascript_Node.js_Electron_Menuitem_Renderer - Fatal编程技术网

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

Javascript 如何正确更新电子应用程序菜单标签?,javascript,node.js,electron,menuitem,renderer,Javascript,Node.js,Electron,Menuitem,Renderer,我试图在一个电子应用程序上添加翻译支持,但在更新应用程序菜单时遇到了问题。我提到开发是在macOS上完成和测试的,但我也愿意让它在Windows上运行 我知道菜单功能只能在主进程中管理,所以我使用ipcMain和ipcdrenderer在主进程和渲染器进程之间进行通信 问题是,我正在更新一个标签,它似乎已更新(显示在日志中),但它不会在“渲染”菜单中更新它 //Menu.getApplicationMenu()是英文的 main menu.language=“nl\u nl”; //更新1个标

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

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

问题是,我正在更新一个标签,它似乎已更新(显示在日志中),但它不会在“渲染”菜单中更新它

//Menu.getApplicationMenu()是英文的
main menu.language=“nl\u nl”;
//更新1个标签
mainMenu.object.items[0]。子菜单.items[0]。label=i18n.\uuuu({短语:“Hello”,区域设置:mainMenu.language}),
Menu.setApplicationMenu(mainMenu.object);
让currentMenu=Menu.getApplicationMenu();

//currentMenu反映了更改,但呈现的菜单仍显示旧值(英文)
我认为您缺少的
菜单.buildFromTemplate(mainMenu.object)

要使用
菜单.setApplicationMenu(模板)
首先需要在模板上运行
菜单.buildFromTemplate(main Menu.object)
,将其转换为
菜单。setApplicationMenu(模板)
可以选择

应该是这样的:

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

我认为您缺少的
菜单.buildFromTemplate(mainMenu.object)

要使用
菜单.setApplicationMenu(模板)
首先需要在模板上运行
菜单.buildFromTemplate(main Menu.object)
,将其转换为
菜单。setApplicationMenu(模板)
可以选择

应该是这样的:

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

我已经在代码中的某个地方使用buildFromTemplate创建了一个菜单实例,这就是我刚刚设置它的原因,为了更新。嗯,
.setApplicationMenu
函数要求先通过
.buildFromTemplate
函数运行模板,这样即使菜单已经设置好,也只能通过运行它。显然,getApplicationMenu()返回的菜单无法使用setApplicationMenu更改和更新模板,但更改模板并重新构建它会起作用。所以你是对的。谢谢如果我的答案对你有用,你能接受吗?我已经在代码的某个地方用buildFromTemplate创建了一个菜单实例,这就是为什么我要设置它,为了更新。嗯,
.setApplicationMenu
函数要求先通过
.buildFromTemplate
函数运行模板,这样即使菜单已经设置好,也只能通过运行它。显然,getApplicationMenu()返回的菜单无法使用setApplicationMenu更改和更新模板,但更改模板并重新构建它会起作用。所以你是对的。谢谢如果我的回答对你有用,你能接受吗。