2017-07-28 5 views
0

J'essaye d'ajouter le support de traduction sur une application d'électron, mais j'ai rencontré des problèmes en mettant à jour le menu d'application. Je mentionne que le développement est fait & testé sur macOS, mais je suis prêt à le faire fonctionner sur Windows aussi.Comment mettre à jour correctement les étiquettes des menus d'application électronique?

Je comprends que la fonction de menu est quelque chose qui peut être géré uniquement dans le processus principal, donc j'utilise ipcMain & ipcRenderer pour communiquer entre le processus de rendu principal &.

Le problème est que je suis en train de mettre à jour une étiquette, elle semble être mise à jour (affichée dans les journaux) mais elle ne la met pas à jour dans le menu rendu.

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

Répondre

1

Je pense que votre manque Menu.buildFromTemplate(mainMenu.object).

Pour utiliser Menu.setApplicationMenu(template) vous devez d'abord exécuter Menu.buildFromTemplate(mainMenu.object) sur le modèle pour le convertir en quelque chose que Menu.setApplicationMenu(template) peut ramasser.

Ce serait quelque chose comme ceci:

Example

Ref.

+0

J'ai déjà une instance de menu créé quelque part dans le code à l'aide buildFromTemplate, c'est pourquoi je suis mise juste, afin mettre à jour. – cristifilip

+1

Bien que la fonction '.setApplicationMenu' nécessite que le modèle soit d'abord exécuté par la fonction' .buildFromTemplate', il serait donc logique de l'exécuter même si le menu est déjà défini. – Mike

+0

Apparemment, le Menu retourné par getApplicationMenu() ne peut pas être modifié et mis à jour à l'aide de setApplicationMenu, mais le fait de changer le modèle et de le reconstruire fonctionne. Donc tu avais raison. Merci! – cristifilip