2017-07-28 17 views
0

電子アプリケーションで翻訳サポートを追加しようとしていますが、アプリケーションメニューを更新するときに問題が発生しました。私は、開発がmacOS上でテストされた&であると言いますが、私はそれもWindows上で動作させることを望んでいます。電子アプリケーションのメニューラベルを正しく更新する方法は?

メニューの機能はメインプロセスでのみ管理できるものなので、&レンダリングプロセス間ではipcMain & ipcRendererを使用して通信しています。

問題は、1つのラベルを更新していて、更新されたように見える(ログに表示される)が、レンダリングされたメニューで更新されないということです。

//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)

答えて

1

私はあなたがMenu.buildFromTemplate(mainMenu.object)を行方不明だと思います。

Menu.setApplicationMenu(template)を使用するには、テンプレートにMenu.buildFromTemplate(mainMenu.object)を実行してから、Menu.setApplicationMenu(template)に変換する必要があります。

それはこのようなものになるだろう:

Example

Ref.

+0

私はすでに、私はちょうどために、それを設定しています理由です、buildFromTemplateを使用してコード内までどこかに作成したメニューのインスタンスを持っています更新する。 – cristifilip

+1

'.setApplicationMenu'関数は、テンプレートが' .buildFromTemplate'関数で最初に実行されるようにするため、メニューが既に設定されていても実行するのが理にかなっています。 – Mike

+0

明らかに、getApplicationMenu()によって返されたメニューは、setApplicationMenuを使って変更および更新することはできませんが、テンプレートを変更してビルドし直しても機能します。だからあなたは正しい。ありがとう! – cristifilip

関連する問題