From a7ea5135996e429ebf0a3f11850b71f5d107c3ff Mon Sep 17 00:00:00 2001 From: Wojciech Stanisz Date: Tue, 27 Jun 2023 17:24:07 +0200 Subject: [PATCH 01/11] Working version with everything in one file --- desktop/main.js | 358 +++++++++++++++++++++++++++++++----------------- 1 file changed, 230 insertions(+), 128 deletions(-) diff --git a/desktop/main.js b/desktop/main.js index 5e8896a84331..af8ff17e142e 100644 --- a/desktop/main.js +++ b/desktop/main.js @@ -71,7 +71,7 @@ let downloadedVersion; // Note that we have to subscribe to this separately and cannot use Localize.translateLocal, // because the only way code can be shared between the main and renderer processes at runtime is via the context bridge // So we track preferredLocale separately via ELECTRON_EVENTS.LOCALE_UPDATED -let preferredLocale = CONST.LOCALES.DEFAULT; +const preferredLocale = CONST.LOCALES.DEFAULT; const appProtocol = CONST.DEEPLINK_BASE_URL.replace('://', ''); @@ -150,8 +150,8 @@ const electronUpdater = (browserWindow) => ({ autoUpdater.on(ELECTRON_EVENTS.UPDATE_DOWNLOADED, (info) => { const systemMenu = Menu.getApplicationMenu(); downloadedVersion = info.version; - systemMenu.getMenuItemById(`updateAppMenuItem-${preferredLocale}`).visible = true; - systemMenu.getMenuItemById(`checkForUpdateMenuItem-${preferredLocale}`).visible = false; + systemMenu.getMenuItemById(`update`).visible = true; + systemMenu.getMenuItemById(`check-for-updates`).visible = false; if (browserWindow.isVisible()) { browserWindow.webContents.send(ELECTRON_EVENTS.UPDATE_DOWNLOADED, info.version); } else { @@ -167,70 +167,6 @@ const electronUpdater = (browserWindow) => ({ }, }); -/* - * @param {Menu} systemMenu - */ -const localizeMenuItems = (browserWindow, systemMenu) => { - // List the Expensify Chat instance under the Window menu, even when it's hidden - systemMenu.insert( - 4, - new MenuItem({ - id: `historyMenuItem-${preferredLocale}`, - label: Localize.translate(preferredLocale, 'desktopApplicationMenu.history'), - submenu: [ - { - id: `backMenuItem-${preferredLocale}`, - label: Localize.translate(preferredLocale, 'historyMenu.back'), - accelerator: process.platform === 'darwin' ? 'Cmd+[' : 'Shift+[', - click: () => { - browserWindow.webContents.goBack(); - }, - }, - { - id: `forwardMenuItem-${preferredLocale}`, - label: Localize.translate(preferredLocale, 'historyMenu.forward'), - accelerator: process.platform === 'darwin' ? 'Cmd+]' : 'Shift+]', - click: () => { - browserWindow.webContents.goForward(); - }, - }, - ], - }), - ); - - // Defines the system-level menu item to manually apply an update - // This menu item should become visible after an update is downloaded and ready to be applied - const updateAppMenuItem = new MenuItem({ - id: `updateAppMenuItem-${preferredLocale}`, - label: Localize.translate(preferredLocale, 'desktopApplicationMenu.updateExpensify'), - visible: false, - click: quitAndInstallWithUpdate, - }); - - // System-level menu item to manually check for App updates - const checkForUpdateMenuItem = new MenuItem({ - id: `checkForUpdateMenuItem-${preferredLocale}`, - label: Localize.translate(preferredLocale, 'desktopApplicationMenu.checkForUpdates'), - visible: true, - click: manuallyCheckForUpdates, - }); - - // Defines the system-level menu item for opening keyboard shortcuts modal - const keyboardShortcutsMenuItem = new MenuItem({ - id: `keyboardShortcutsMenuItem-${preferredLocale}`, - label: Localize.translate(preferredLocale, 'initialSettingsPage.aboutPage.viewKeyboardShortcuts'), - accelerator: 'CmdOrCtrl+I', - click: () => { - showKeyboardShortcutsModal(browserWindow); - }, - }); - - const appMenu = _.find(systemMenu.items, (item) => item.role === 'appmenu'); - appMenu.submenu.insert(1, updateAppMenuItem); - appMenu.submenu.insert(2, checkForUpdateMenuItem); - appMenu.submenu.insert(3, keyboardShortcutsMenuItem); -}; - const mainWindow = () => { let deeplinkUrl; let browserWindow; @@ -328,41 +264,230 @@ const mainWindow = () => { browserWindow.setTitle('New Expensify'); } - const systemMenu = Menu.getApplicationMenu(); - - // Register the custom Paste and Match Style command and place it near the default shortcut of the same role. - const editMenu = _.find(systemMenu.items, (item) => item.role === 'editmenu'); - editMenu.submenu.insert( - 6, - new MenuItem({ - role: 'pasteAndMatchStyle', - accelerator: 'CmdOrCtrl+Shift+V', - }), - ); - - // Append custom context menu items using the preferred language of the user. - localizeMenuItems(browserWindow, systemMenu); - - // On mac, pressing cmd++ actually sends a cmd+=. cmd++ is generally the zoom in shortcut, but this is - // not properly listened for by electron. Adding in an invisible cmd+= listener fixes this. - const viewWindow = _.find(systemMenu.items, (item) => item.role === 'viewmenu'); - viewWindow.submenu.append( - new MenuItem({ - role: 'zoomin', - accelerator: 'CommandOrControl+=', - visible: false, - }), - ); - const windowMenu = _.find(systemMenu.items, (item) => item.role === 'windowmenu'); - windowMenu.submenu.append(new MenuItem({type: 'separator'})); - windowMenu.submenu.append( - new MenuItem({ + const setLabelsInMenuTemplate = (submenu, labels) => + _.map(submenu, (menu) => { + const newMenu = _.clone(menu); + const labelTranslation = _.find(labels, (translation) => translation.id === menu.id); + if (labelTranslation && labelTranslation.label) { + newMenu.label = labelTranslation.label; + } + if (menu.submenu) { + newMenu.submenu = setLabelsInMenuTemplate(menu.submenu, labels); + } + return newMenu; + }); + + const labelsEng = [ + {id: 'main-menu', label: 'New Expensify'}, + {id: 'about', label: 'About New Expensify'}, + {id: 'update', label: 'Update New Expensify'}, + {id: 'check-for-updates', label: 'Check for updates'}, + {id: 'view-shortcuts', label: 'View keyboard shortcuts'}, + {id: 'services', label: 'Services'}, + {id: 'hide', label: 'Hide New Expensify'}, + {id: 'hide-others', label: 'Hide Others'}, + {id: 'show-all', label: 'Show All'}, + {id: 'quit', label: 'Quit New Expensify'}, + + {id: 'file-menu', label: 'File'}, + {id: 'close-window', label: 'Close Window'}, + + {id: 'edit-menu', label: 'Edit'}, + {id: 'undo', label: 'Undo'}, + {id: 'redo', label: 'Redo'}, + {id: 'cut', label: 'Cut'}, + {id: 'copy', label: 'Copy'}, + {id: 'paste', label: 'Paste'}, + {id: 'pasteAndMatchStyle', label: 'Paste and Match Style'}, + {id: 'delete', label: 'Delete'}, + {id: 'selectAll', label: 'Select All'}, + {id: 'speech-submenu', label: 'Speech'}, + {id: 'startSpeaking', label: 'Start Speaking'}, + {id: 'stopSpeaking', label: 'Stop Speaking'}, + + {id: 'view-menu', label: 'View'}, + {id: 'reload', label: 'Reload'}, + {id: 'forceReload', label: 'Force Reload'}, + {id: 'resetZoom', label: 'Actual Size'}, + {id: 'zoomIn', label: 'Zoom In'}, + {id: 'zoomOut', label: 'Zoom Out'}, + {id: 'togglefullscreen', label: 'Toggle Full Screen'}, + + {id: 'history-menu', label: 'History'}, + {id: 'back', label: 'Back'}, + {id: 'forward', label: 'Forward'}, + + {id: 'window-menu', label: 'Window'}, + + {id: 'help-menu', label: 'Help'}, + {id: 'learn-more', label: 'Learn more'}, + {id: 'documentation', label: 'Documentation'}, + {id: 'community-discissions', label: 'Community Discussions'}, + {id: 'search-issues', label: 'Search Issues'}, + ]; + + const labelsEsp = [ + {id: 'main-menu', label: 'Nuevo Expensify'}, + {id: 'about', label: 'Sobre Nuevo Expensify'}, + {id: 'update', label: 'Actualizar Nuevo Expensify'}, + {id: 'check-for-updates', label: 'Buscar actualizaciones'}, + {id: 'view-shortcuts', label: 'Ver atajos de teclado'}, + {id: 'services', label: 'Servicios'}, + {id: 'hide', label: 'Ocultar Nuevo Expensify'}, + {id: 'hide-others', label: 'Ocultar otros'}, + {id: 'show-all', label: 'Mostrar todos'}, + {id: 'quit', label: 'Salir de Nuevo Expensify'}, + + {id: 'file-menu', label: 'Archivo'}, + {id: 'close-window', label: 'Cerrar ventana'}, + + {id: 'edit-menu', label: 'Editar'}, + {id: 'undo', label: 'Deshacer'}, + {id: 'redo', label: 'Rehacer'}, + {id: 'cut', label: 'Cortar'}, + {id: 'copy', label: 'Copiar'}, + {id: 'paste', label: 'Pegar'}, + {id: 'pasteAndMatchStyle', label: 'Pegar adaptando el estilo'}, + {id: 'delete', label: 'Eliminar'}, + {id: 'selectAll', label: 'Seleccionar todo'}, + {id: 'speech-submenu', label: 'Voz'}, + {id: 'startSpeaking', label: 'Empezar a hablar'}, + {id: 'stopSpeaking', label: 'Dejar de Hablar'}, + + {id: 'view-menu', label: 'Ver'}, + {id: 'reload', label: 'Cargar de nuevo'}, + {id: 'forceReload', label: 'Forzar recarga'}, + {id: 'resetZoom', label: 'Tamaño real'}, + {id: 'zoomIn', label: 'Acercar'}, + {id: 'zoomOut', label: 'Alejar'}, + {id: 'togglefullscreen', label: 'Alternar pantalla completa'}, + + {id: 'history-menu', label: 'Historial'}, + {id: 'back', label: 'Atrás'}, + {id: 'forward', label: 'Adelante'}, + + {id: 'window-menu', label: 'Ventana'}, + + {id: 'help-menu', label: 'Ayuda'}, + {id: 'learn-more', label: 'Más información'}, + {id: 'documentation', label: 'Documentación'}, + {id: 'community-discissions', label: 'Debates de la comunidad'}, + {id: 'search-issues', label: 'Buscar problemas'}, + ]; + + const initialMenuTemplate = [ + { + id: 'main-menu', label: 'New Expensify', - accelerator: 'CmdOrCtrl+1', - click: () => browserWindow.show(), - }), - ); - Menu.setApplicationMenu(systemMenu); + submenu: [ + {id: 'about', role: 'about'}, + {id: 'update', label: 'Update new Expensify', click: quitAndInstallWithUpdate, visible: false}, + {id: 'check-for-updates', label: 'Check for updates', click: manuallyCheckForUpdates}, + { + id: 'view-shortcuts', + label: 'View keyboard shortcuts', + accelerator: 'CmdOrCtrl+I', + click: () => { + showKeyboardShortcutsModal(browserWindow); + }, + }, + {type: 'separator'}, + {id: 'services', role: 'services'}, + {type: 'separator'}, + {id: 'hide', role: 'hide'}, + {id: 'hide-others', role: 'hideOthers'}, + {id: 'show-all', role: 'unhide'}, + {type: 'separator'}, + {id: 'quit', role: 'quit'}, + ], + }, + { + id: 'file-menu', + label: 'File', + submenu: [{id: 'close-window', role: 'close', accelerator: 'Cmd+w'}], + }, + { + id: 'edit-menu', + label: 'Edit', + submenu: [ + {id: 'undo', role: 'undo'}, + {id: 'redo', role: 'redo'}, + {type: 'separator'}, + {id: 'cut', role: 'cut'}, + {id: 'copy', role: 'copy'}, + {id: 'paste', role: 'paste'}, + {id: 'pasteAndMatchStyle', role: 'pasteAndMatchStyle'}, + {id: 'delete', role: 'delete'}, + {id: 'selectAll', role: 'selectAll'}, + {type: 'separator'}, + { + id: 'speech-submenu', + label: 'Speech', + submenu: [ + {id: 'startSpeaking', role: 'startSpeaking'}, + {id: 'stopSpeaking', role: 'stopSpeaking'}, + ], + }, + ], + }, + { + id: 'view-menu', + label: 'View', + submenu: [ + {id: 'reload', role: 'reload'}, + {id: 'forceReload', role: 'forceReload'}, + {type: 'separator'}, + {id: 'resetZoom', role: 'resetZoom'}, + {id: 'zoomIn', role: 'zoomIn'}, + {id: 'zoomOut', role: 'zoomOut'}, + {type: 'separator'}, + {id: 'togglefullscreen', role: 'togglefullscreen'}, + ], + }, + { + id: 'history-menu', + label: 'History', + submenu: [ + { + id: 'back', + role: 'back', + accelerator: process.platform === 'darwin' ? 'Cmd+[' : 'Shift+[', + click: () => { + browserWindow.webContents.goBack(); + }, + }, + { + id: 'forward', + role: 'forward', + accelerator: process.platform === 'darwin' ? 'Cmd+]' : 'Shift+]', + click: () => { + browserWindow.webContents.goForward(); + }, + }, + ], + }, + { + id: 'window-menu', + role: 'windowMenu', + }, + { + id: 'help-menu', + label: 'Help', + role: 'help', + submenu: [ + {id: 'learn-more', label: 'Learn more'}, + {id: 'documentation', label: 'Documentation'}, + {id: 'community-discissions', label: 'Community Discussions'}, + {id: 'search-issues', label: 'Search Issues'}, + ], + }, + ]; + + const translatedMenu = setLabelsInMenuTemplate(initialMenuTemplate, labelsEng); + + // Build and set the initial menu + const initialMenu = Menu.buildFromTemplate(translatedMenu); + Menu.setApplicationMenu(initialMenu); // When the user clicks a link that has target="_blank" (which is all external links) // open the default browser instead of a new electron window @@ -439,34 +564,11 @@ const mainWindow = () => { } ipcMain.on(ELECTRON_EVENTS.LOCALE_UPDATED, (event, updatedLocale) => { - // Store the old locale so we can hide/remove these items after adding/showing the new ones. - const outdatedLocale = preferredLocale; - preferredLocale = updatedLocale; - - const currentHistoryMenuItem = systemMenu.getMenuItemById(`historyMenuItem-${outdatedLocale}`); - const currentUpdateAppMenuItem = systemMenu.getMenuItemById(`updateAppMenuItem-${outdatedLocale}`); - const currentCheckForUpdateMenuItem = systemMenu.getMenuItemById(`checkForUpdateMenuItem-${outdatedLocale}`); - const currentKeyboardShortcutsMenuItem = systemMenu.getMenuItemById(`keyboardShortcutsMenuItem-${outdatedLocale}`); - - // If we have previously added those languages, don't add new menu items, reshow them. - if (!systemMenu.getMenuItemById(`updateAppMenuItem-${updatedLocale}`)) { - // Update the labels and ids to use the translations. - localizeMenuItems(browserWindow, systemMenu); + if (updatedLocale === 'en') { + Menu.setApplicationMenu(Menu.buildFromTemplate(setLabelsInMenuTemplate(initialMenuTemplate, labelsEng))); + } else if (updatedLocale === 'es') { + Menu.setApplicationMenu( Menu.buildFromTemplate(setLabelsInMenuTemplate(initialMenuTemplate, labelsEsp))); } - - // Show the localized menu items if there were visible before we updated the locale. - systemMenu.getMenuItemById(`updateAppMenuItem-${updatedLocale}`).visible = currentUpdateAppMenuItem.visible; - systemMenu.getMenuItemById(`checkForUpdateMenuItem-${updatedLocale}`).visible = currentCheckForUpdateMenuItem.visible; - systemMenu.getMenuItemById(`keyboardShortcutsMenuItem-${updatedLocale}`).visible = currentKeyboardShortcutsMenuItem.visible; - systemMenu.getMenuItemById(`historyMenuItem-${updatedLocale}`).visible = currentHistoryMenuItem.visible; - - // Since we can't remove menu items, we hide the old ones. - currentUpdateAppMenuItem.visible = false; - currentCheckForUpdateMenuItem.visible = false; - currentKeyboardShortcutsMenuItem.visible = false; - currentHistoryMenuItem.visible = false; - - Menu.setApplicationMenu(systemMenu); }); ipcMain.on(ELECTRON_EVENTS.REQUEST_VISIBILITY, (event) => { From 4aaab9298771f39ae08ccda6856f828ff566674b Mon Sep 17 00:00:00 2001 From: Wojciech Stanisz Date: Tue, 27 Jun 2023 17:27:15 +0200 Subject: [PATCH 02/11] Run prettier --- desktop/main.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/desktop/main.js b/desktop/main.js index af8ff17e142e..971bc1d659e8 100644 --- a/desktop/main.js +++ b/desktop/main.js @@ -567,7 +567,7 @@ const mainWindow = () => { if (updatedLocale === 'en') { Menu.setApplicationMenu(Menu.buildFromTemplate(setLabelsInMenuTemplate(initialMenuTemplate, labelsEng))); } else if (updatedLocale === 'es') { - Menu.setApplicationMenu( Menu.buildFromTemplate(setLabelsInMenuTemplate(initialMenuTemplate, labelsEsp))); + Menu.setApplicationMenu(Menu.buildFromTemplate(setLabelsInMenuTemplate(initialMenuTemplate, labelsEsp))); } }); From e9a5937a046d6301f0e486b2b3ca067d91a2f87e Mon Sep 17 00:00:00 2001 From: Wojciech Stanisz Date: Thu, 29 Jun 2023 21:28:25 +0200 Subject: [PATCH 03/11] Use Localize --- desktop/main.js | 150 ++++++++------------------------------------ src/languages/en.js | 42 ++++++++++++- src/languages/es.js | 42 ++++++++++++- 3 files changed, 103 insertions(+), 131 deletions(-) diff --git a/desktop/main.js b/desktop/main.js index 971bc1d659e8..0016f0c82e9d 100644 --- a/desktop/main.js +++ b/desktop/main.js @@ -264,127 +264,31 @@ const mainWindow = () => { browserWindow.setTitle('New Expensify'); } - const setLabelsInMenuTemplate = (submenu, labels) => + const setLabelsInMenuTemplate = (submenu, updatedLocale) => _.map(submenu, (menu) => { const newMenu = _.clone(menu); - const labelTranslation = _.find(labels, (translation) => translation.id === menu.id); - if (labelTranslation && labelTranslation.label) { - newMenu.label = labelTranslation.label; + if (menu.id) { + const labelTranslation = Localize.translate(updatedLocale, `desktopApplicationMenu.${menu.id}`); + if (labelTranslation) { + newMenu.label = labelTranslation; + } } if (menu.submenu) { - newMenu.submenu = setLabelsInMenuTemplate(menu.submenu, labels); + newMenu.submenu = setLabelsInMenuTemplate(menu.submenu, updatedLocale); } return newMenu; }); - const labelsEng = [ - {id: 'main-menu', label: 'New Expensify'}, - {id: 'about', label: 'About New Expensify'}, - {id: 'update', label: 'Update New Expensify'}, - {id: 'check-for-updates', label: 'Check for updates'}, - {id: 'view-shortcuts', label: 'View keyboard shortcuts'}, - {id: 'services', label: 'Services'}, - {id: 'hide', label: 'Hide New Expensify'}, - {id: 'hide-others', label: 'Hide Others'}, - {id: 'show-all', label: 'Show All'}, - {id: 'quit', label: 'Quit New Expensify'}, - - {id: 'file-menu', label: 'File'}, - {id: 'close-window', label: 'Close Window'}, - - {id: 'edit-menu', label: 'Edit'}, - {id: 'undo', label: 'Undo'}, - {id: 'redo', label: 'Redo'}, - {id: 'cut', label: 'Cut'}, - {id: 'copy', label: 'Copy'}, - {id: 'paste', label: 'Paste'}, - {id: 'pasteAndMatchStyle', label: 'Paste and Match Style'}, - {id: 'delete', label: 'Delete'}, - {id: 'selectAll', label: 'Select All'}, - {id: 'speech-submenu', label: 'Speech'}, - {id: 'startSpeaking', label: 'Start Speaking'}, - {id: 'stopSpeaking', label: 'Stop Speaking'}, - - {id: 'view-menu', label: 'View'}, - {id: 'reload', label: 'Reload'}, - {id: 'forceReload', label: 'Force Reload'}, - {id: 'resetZoom', label: 'Actual Size'}, - {id: 'zoomIn', label: 'Zoom In'}, - {id: 'zoomOut', label: 'Zoom Out'}, - {id: 'togglefullscreen', label: 'Toggle Full Screen'}, - - {id: 'history-menu', label: 'History'}, - {id: 'back', label: 'Back'}, - {id: 'forward', label: 'Forward'}, - - {id: 'window-menu', label: 'Window'}, - - {id: 'help-menu', label: 'Help'}, - {id: 'learn-more', label: 'Learn more'}, - {id: 'documentation', label: 'Documentation'}, - {id: 'community-discissions', label: 'Community Discussions'}, - {id: 'search-issues', label: 'Search Issues'}, - ]; - - const labelsEsp = [ - {id: 'main-menu', label: 'Nuevo Expensify'}, - {id: 'about', label: 'Sobre Nuevo Expensify'}, - {id: 'update', label: 'Actualizar Nuevo Expensify'}, - {id: 'check-for-updates', label: 'Buscar actualizaciones'}, - {id: 'view-shortcuts', label: 'Ver atajos de teclado'}, - {id: 'services', label: 'Servicios'}, - {id: 'hide', label: 'Ocultar Nuevo Expensify'}, - {id: 'hide-others', label: 'Ocultar otros'}, - {id: 'show-all', label: 'Mostrar todos'}, - {id: 'quit', label: 'Salir de Nuevo Expensify'}, - - {id: 'file-menu', label: 'Archivo'}, - {id: 'close-window', label: 'Cerrar ventana'}, - - {id: 'edit-menu', label: 'Editar'}, - {id: 'undo', label: 'Deshacer'}, - {id: 'redo', label: 'Rehacer'}, - {id: 'cut', label: 'Cortar'}, - {id: 'copy', label: 'Copiar'}, - {id: 'paste', label: 'Pegar'}, - {id: 'pasteAndMatchStyle', label: 'Pegar adaptando el estilo'}, - {id: 'delete', label: 'Eliminar'}, - {id: 'selectAll', label: 'Seleccionar todo'}, - {id: 'speech-submenu', label: 'Voz'}, - {id: 'startSpeaking', label: 'Empezar a hablar'}, - {id: 'stopSpeaking', label: 'Dejar de Hablar'}, - - {id: 'view-menu', label: 'Ver'}, - {id: 'reload', label: 'Cargar de nuevo'}, - {id: 'forceReload', label: 'Forzar recarga'}, - {id: 'resetZoom', label: 'Tamaño real'}, - {id: 'zoomIn', label: 'Acercar'}, - {id: 'zoomOut', label: 'Alejar'}, - {id: 'togglefullscreen', label: 'Alternar pantalla completa'}, - - {id: 'history-menu', label: 'Historial'}, - {id: 'back', label: 'Atrás'}, - {id: 'forward', label: 'Adelante'}, - - {id: 'window-menu', label: 'Ventana'}, - - {id: 'help-menu', label: 'Ayuda'}, - {id: 'learn-more', label: 'Más información'}, - {id: 'documentation', label: 'Documentación'}, - {id: 'community-discissions', label: 'Debates de la comunidad'}, - {id: 'search-issues', label: 'Buscar problemas'}, - ]; - const initialMenuTemplate = [ { - id: 'main-menu', + id: 'mainMenu', label: 'New Expensify', submenu: [ {id: 'about', role: 'about'}, {id: 'update', label: 'Update new Expensify', click: quitAndInstallWithUpdate, visible: false}, - {id: 'check-for-updates', label: 'Check for updates', click: manuallyCheckForUpdates}, + {id: 'checkForUpdates', label: 'Check for updates', click: manuallyCheckForUpdates}, { - id: 'view-shortcuts', + id: 'viewShortcuts', label: 'View keyboard shortcuts', accelerator: 'CmdOrCtrl+I', click: () => { @@ -395,19 +299,19 @@ const mainWindow = () => { {id: 'services', role: 'services'}, {type: 'separator'}, {id: 'hide', role: 'hide'}, - {id: 'hide-others', role: 'hideOthers'}, - {id: 'show-all', role: 'unhide'}, + {id: 'hideOthers', role: 'hideOthers'}, + {id: 'showAll', role: 'unhide'}, {type: 'separator'}, {id: 'quit', role: 'quit'}, ], }, { - id: 'file-menu', + id: 'fileMenu', label: 'File', - submenu: [{id: 'close-window', role: 'close', accelerator: 'Cmd+w'}], + submenu: [{id: 'closeWindow', role: 'close', accelerator: 'Cmd+w'}], }, { - id: 'edit-menu', + id: 'editMenu', label: 'Edit', submenu: [ {id: 'undo', role: 'undo'}, @@ -421,7 +325,7 @@ const mainWindow = () => { {id: 'selectAll', role: 'selectAll'}, {type: 'separator'}, { - id: 'speech-submenu', + id: 'speechSubmenu', label: 'Speech', submenu: [ {id: 'startSpeaking', role: 'startSpeaking'}, @@ -431,7 +335,7 @@ const mainWindow = () => { ], }, { - id: 'view-menu', + id: 'viewMenu', label: 'View', submenu: [ {id: 'reload', role: 'reload'}, @@ -445,7 +349,7 @@ const mainWindow = () => { ], }, { - id: 'history-menu', + id: 'historyMenu', label: 'History', submenu: [ { @@ -467,23 +371,23 @@ const mainWindow = () => { ], }, { - id: 'window-menu', + id: 'windowMenu', role: 'windowMenu', }, { - id: 'help-menu', + id: 'helpMenu', label: 'Help', role: 'help', submenu: [ - {id: 'learn-more', label: 'Learn more'}, + {id: 'learnMore', label: 'Learn more'}, {id: 'documentation', label: 'Documentation'}, - {id: 'community-discissions', label: 'Community Discussions'}, - {id: 'search-issues', label: 'Search Issues'}, + {id: 'communityDiscissions', label: 'Community Discussions'}, + {id: 'searchIssues', label: 'Search Issues'}, ], }, ]; - const translatedMenu = setLabelsInMenuTemplate(initialMenuTemplate, labelsEng); + const translatedMenu = setLabelsInMenuTemplate(initialMenuTemplate, preferredLocale); // Build and set the initial menu const initialMenu = Menu.buildFromTemplate(translatedMenu); @@ -564,11 +468,7 @@ const mainWindow = () => { } ipcMain.on(ELECTRON_EVENTS.LOCALE_UPDATED, (event, updatedLocale) => { - if (updatedLocale === 'en') { - Menu.setApplicationMenu(Menu.buildFromTemplate(setLabelsInMenuTemplate(initialMenuTemplate, labelsEng))); - } else if (updatedLocale === 'es') { - Menu.setApplicationMenu(Menu.buildFromTemplate(setLabelsInMenuTemplate(initialMenuTemplate, labelsEsp))); - } + Menu.setApplicationMenu(Menu.buildFromTemplate(setLabelsInMenuTemplate(initialMenuTemplate, updatedLocale))); }); ipcMain.on(ELECTRON_EVENTS.REQUEST_VISIBILITY, (event) => { diff --git a/src/languages/en.js b/src/languages/en.js index 18110b85349c..50aeb71e8c1b 100755 --- a/src/languages/en.js +++ b/src/languages/en.js @@ -1328,10 +1328,46 @@ export default { }, }, desktopApplicationMenu: { - aboutExpensify: 'About New Expensify', - updateExpensify: 'Update New Expensify', + mainMenu: 'New Expensify', + about: 'About New Expensify', + update: 'Update New Expensify', checkForUpdates: 'Check for updates', - history: 'History', + viewShortcuts: 'View keyboard shortcuts', + services: 'Services', + hide: 'Hide New Expensify', + hideOthers: 'Hide Others', + showAll: 'Show All', + quit: 'Quit New Expensify', + fileMenu: 'File', + closeWindow: 'Close Window', + editMenu: 'Edit', + undo: 'Undo', + redo: 'Redo', + cut: 'Cut', + copy: 'Copy', + paste: 'Paste', + pasteAndMatchStyle: 'Paste and Match Style', + delete: 'Delete', + selectAll: 'Select All', + speechSubmenu: 'Speech', + startSpeaking: 'Start Speaking', + stopSpeaking: 'Stop Speaking', + viewMenu: 'View', + reload: 'Reload', + forceReload: 'Force Reload', + resetZoom: 'Actual Size', + zoomIn: 'Zoom In', + zoomOut: 'Zoom Out', + togglefullscreen: 'Toggle Full Screen', + historyMenu: 'History', + back: 'Back', + forward: 'Forward', + windowMenu: 'Window', + helpMenu: 'Help', + learnMore: 'Learn more', + documentation: 'Documentation', + communityDiscissions: 'Community Discussions', + searchIssues: 'Search Issues', }, historyMenu: { forward: 'Forward', diff --git a/src/languages/es.js b/src/languages/es.js index 49b4cc04f2cb..3cf7fc57b1d7 100644 --- a/src/languages/es.js +++ b/src/languages/es.js @@ -1336,10 +1336,46 @@ export default { }, }, desktopApplicationMenu: { - aboutExpensify: 'Sobre Nuevo Expensify', - updateExpensify: 'Actualizar Nuevo Expensify', + mainMenu: 'Nuevo Expensify', + about: 'Sobre Nuevo Expensify', + update: 'Actualizar Nuevo Expensify', checkForUpdates: 'Buscar actualizaciones', - history: 'Historial', + viewShortcuts: 'Ver atajos de teclado', + services: 'Servicios', + hide: 'Ocultar Nuevo Expensify', + hideOthers: 'Ocultar otros', + showAll: 'Mostrar todos', + quit: 'Salir de Nuevo Expensify', + fileMenu: 'Archivo', + closeWindow: 'Cerrar ventana', + editMenu: 'Editar', + undo: 'Deshacer', + redo: 'Rehacer', + cut: 'Cortar', + copy: 'Copiar', + paste: 'Pegar', + pasteAndMatchStyle: 'Pegar adaptando el estilo', + delete: 'Eliminar', + selectAll: 'Seleccionar todo', + speechSubmenu: 'Voz', + startSpeaking: 'Empezar a hablar', + stopSpeaking: 'Dejar de Hablar', + viewMenu: 'Ver', + reload: 'Cargar de nuevo', + forceReload: 'Forzar recarga', + resetZoom: 'Tamaño real', + zoomIn: 'Acercar', + zoomOut: 'Alejar', + togglefullscreen: 'Alternar pantalla completa', + historyMenu: 'Historial', + back: 'Atrás', + forward: 'Adelante', + windowMenu: 'Ventana', + helpMenu: 'Ayuda', + learnMore: 'Más información', + documentation: 'Documentación', + communityDiscissions: 'Debates de la comunidad', + searchIssues: 'Buscar problemas', }, historyMenu: { forward: 'Adelante', From 46996e932f468135bb0894de019d71fc29de6c53 Mon Sep 17 00:00:00 2001 From: Wojciech Stanisz Date: Thu, 29 Jun 2023 22:07:52 +0200 Subject: [PATCH 04/11] Use localized text instead hardcoded strings in template --- desktop/main.js | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/desktop/main.js b/desktop/main.js index 0016f0c82e9d..38e16f8b8e95 100644 --- a/desktop/main.js +++ b/desktop/main.js @@ -282,14 +282,14 @@ const mainWindow = () => { const initialMenuTemplate = [ { id: 'mainMenu', - label: 'New Expensify', + label: Localize.translate(preferredLocale, `desktopApplicationMenu.mainMenu`), submenu: [ {id: 'about', role: 'about'}, - {id: 'update', label: 'Update new Expensify', click: quitAndInstallWithUpdate, visible: false}, - {id: 'checkForUpdates', label: 'Check for updates', click: manuallyCheckForUpdates}, + {id: 'update', label: Localize.translate(preferredLocale, `desktopApplicationMenu.update`), click: quitAndInstallWithUpdate, visible: false}, + {id: 'checkForUpdates', label: Localize.translate(preferredLocale, `desktopApplicationMenu.checkForUpdates`), click: manuallyCheckForUpdates}, { id: 'viewShortcuts', - label: 'View keyboard shortcuts', + label: Localize.translate(preferredLocale, `desktopApplicationMenu.viewShortcuts`), accelerator: 'CmdOrCtrl+I', click: () => { showKeyboardShortcutsModal(browserWindow); @@ -307,12 +307,12 @@ const mainWindow = () => { }, { id: 'fileMenu', - label: 'File', + label: Localize.translate(preferredLocale, `desktopApplicationMenu.fileMenu`), submenu: [{id: 'closeWindow', role: 'close', accelerator: 'Cmd+w'}], }, { id: 'editMenu', - label: 'Edit', + label: Localize.translate(preferredLocale, `desktopApplicationMenu.editMenu`), submenu: [ {id: 'undo', role: 'undo'}, {id: 'redo', role: 'redo'}, @@ -326,7 +326,7 @@ const mainWindow = () => { {type: 'separator'}, { id: 'speechSubmenu', - label: 'Speech', + label: Localize.translate(preferredLocale, `desktopApplicationMenu.speechSubmenu`), submenu: [ {id: 'startSpeaking', role: 'startSpeaking'}, {id: 'stopSpeaking', role: 'stopSpeaking'}, @@ -336,7 +336,7 @@ const mainWindow = () => { }, { id: 'viewMenu', - label: 'View', + label: Localize.translate(preferredLocale, `desktopApplicationMenu.viewMenu`), submenu: [ {id: 'reload', role: 'reload'}, {id: 'forceReload', role: 'forceReload'}, @@ -350,7 +350,7 @@ const mainWindow = () => { }, { id: 'historyMenu', - label: 'History', + label: Localize.translate(preferredLocale, `desktopApplicationMenu.historyMenu`), submenu: [ { id: 'back', @@ -376,13 +376,13 @@ const mainWindow = () => { }, { id: 'helpMenu', - label: 'Help', + label: Localize.translate(preferredLocale, `desktopApplicationMenu.helpMenu`), role: 'help', submenu: [ - {id: 'learnMore', label: 'Learn more'}, - {id: 'documentation', label: 'Documentation'}, - {id: 'communityDiscissions', label: 'Community Discussions'}, - {id: 'searchIssues', label: 'Search Issues'}, + {id: 'learnMore', label: Localize.translate(preferredLocale, `desktopApplicationMenu.learnMore`)}, + {id: 'documentation', label: Localize.translate(preferredLocale, `desktopApplicationMenu.documentation`)}, + {id: 'communityDiscissions', label: Localize.translate(preferredLocale, `desktopApplicationMenu.communityDiscissions`)}, + {id: 'searchIssues', label: Localize.translate(preferredLocale, `desktopApplicationMenu.searchIssues`)}, ], }, ]; From 67a2b7c8dffbba7ce9d52103e3dd52efa783b52f Mon Sep 17 00:00:00 2001 From: Wojciech Stanisz Date: Thu, 29 Jun 2023 22:26:41 +0200 Subject: [PATCH 05/11] USe expensify links in help tab --- desktop/main.js | 17 +++++++++++++---- src/CONST.js | 7 +++++++ src/languages/en.js | 2 +- src/languages/es.js | 2 +- 4 files changed, 22 insertions(+), 6 deletions(-) diff --git a/desktop/main.js b/desktop/main.js index 38e16f8b8e95..7f46aea1e554 100644 --- a/desktop/main.js +++ b/desktop/main.js @@ -5,6 +5,7 @@ const contextMenu = require('electron-context-menu'); const {autoUpdater} = require('electron-updater'); const log = require('electron-log'); const {machineId} = require('node-machine-id'); +const { Link } = require('@react-navigation/native'); const ELECTRON_EVENTS = require('./ELECTRON_EVENTS'); const checkForUpdates = require('../src/libs/checkForUpdates'); const CONFIG = require('../src/CONFIG').default; @@ -379,10 +380,18 @@ const mainWindow = () => { label: Localize.translate(preferredLocale, `desktopApplicationMenu.helpMenu`), role: 'help', submenu: [ - {id: 'learnMore', label: Localize.translate(preferredLocale, `desktopApplicationMenu.learnMore`)}, - {id: 'documentation', label: Localize.translate(preferredLocale, `desktopApplicationMenu.documentation`)}, - {id: 'communityDiscissions', label: Localize.translate(preferredLocale, `desktopApplicationMenu.communityDiscissions`)}, - {id: 'searchIssues', label: Localize.translate(preferredLocale, `desktopApplicationMenu.searchIssues`)}, + {id: 'learnMore', label: Localize.translate(preferredLocale, `desktopApplicationMenu.learnMore`), click: () => { + Link.openExternalLink(CONST.MENU_HELP_URLS.LEARN_MORE); + }, }, + {id: 'documentation', label: Localize.translate(preferredLocale, `desktopApplicationMenu.documentation`), click: () => { + Link.openExternalLink(CONST.MENU_HELP_URLS.DOCUMENTATION); + },}, + {id: 'communityDiscussions', label: Localize.translate(preferredLocale, `desktopApplicationMenu.communityDiscussions`), click: () => { + Link.openExternalLink(CONST.MENU_HELP_URLS.COMMUNITY_DISCUSSIONS); + },}, + {id: 'searchIssues', label: Localize.translate(preferredLocale, `desktopApplicationMenu.searchIssues`), click: () => { + Link.openExternalLink(CONST.MENU_HELP_URLS.SEARCH_ISSUES); + },}, ], }, ]; diff --git a/src/CONST.js b/src/CONST.js index 4c04ee5228e2..9c704ef4acea 100755 --- a/src/CONST.js +++ b/src/CONST.js @@ -2450,6 +2450,13 @@ const CONST = { NUMBER_OF_TAPS: 4, }, + MENU_HELP_URLS: { + LEARN_MORE: 'https://www.expensify.com', + DOCUMENTATION: 'https://github.com/Expensify/App/blob/main/README.md', + COMMUNITY_DISCUSSIONS: 'https://expensify.slack.com/archives/C01GTK53T8Q', + SEARCH_ISSUES: 'https://github.com/Expensify/App/issues', + }, + PAYPAL_SUPPORTED_CURRENCIES: [ 'AUD', 'BRL', diff --git a/src/languages/en.js b/src/languages/en.js index bd64a0658bb5..facac4284742 100755 --- a/src/languages/en.js +++ b/src/languages/en.js @@ -1375,7 +1375,7 @@ export default { helpMenu: 'Help', learnMore: 'Learn more', documentation: 'Documentation', - communityDiscissions: 'Community Discussions', + communityDiscussions: 'Community Discussions', searchIssues: 'Search Issues', }, historyMenu: { diff --git a/src/languages/es.js b/src/languages/es.js index c27d5e48ee67..651a778c4f20 100644 --- a/src/languages/es.js +++ b/src/languages/es.js @@ -1384,7 +1384,7 @@ export default { helpMenu: 'Ayuda', learnMore: 'Más información', documentation: 'Documentación', - communityDiscissions: 'Debates de la comunidad', + communityDiscussions: 'Debates de la comunidad', searchIssues: 'Buscar problemas', }, historyMenu: { From 0a20f03ea5b7f01972c404114fbeeac097405887 Mon Sep 17 00:00:00 2001 From: Wojciech Stanisz Date: Thu, 29 Jun 2023 22:48:20 +0200 Subject: [PATCH 06/11] USe same syntax in initialization and update functions --- desktop/main.js | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/desktop/main.js b/desktop/main.js index 7f46aea1e554..251a58448e62 100644 --- a/desktop/main.js +++ b/desktop/main.js @@ -396,10 +396,8 @@ const mainWindow = () => { }, ]; - const translatedMenu = setLabelsInMenuTemplate(initialMenuTemplate, preferredLocale); - // Build and set the initial menu - const initialMenu = Menu.buildFromTemplate(translatedMenu); + const initialMenu = Menu.buildFromTemplate(setLabelsInMenuTemplate(initialMenuTemplate, preferredLocale)); Menu.setApplicationMenu(initialMenu); // When the user clicks a link that has target="_blank" (which is all external links) From 32a88d5f81b4c68913a19823ad93352301b86af3 Mon Sep 17 00:00:00 2001 From: Wojciech Stanisz Date: Thu, 29 Jun 2023 22:57:04 +0200 Subject: [PATCH 07/11] Move setLabelsInMenuTemplate to menu section --- desktop/main.js | 32 ++++++++++++++++++-------------- 1 file changed, 18 insertions(+), 14 deletions(-) diff --git a/desktop/main.js b/desktop/main.js index 251a58448e62..26b98b5305d2 100644 --- a/desktop/main.js +++ b/desktop/main.js @@ -168,6 +168,24 @@ const electronUpdater = (browserWindow) => ({ }, }); +/* + * @param {Menu} systemMenu + */ +const setLabelsInMenuTemplate = (submenu, updatedLocale) => +_.map(submenu, (menu) => { + const newMenu = _.clone(menu); + if (menu.id) { + const labelTranslation = Localize.translate(updatedLocale, `desktopApplicationMenu.${menu.id}`); + if (labelTranslation) { + newMenu.label = labelTranslation; + } + } + if (menu.submenu) { + newMenu.submenu = setLabelsInMenuTemplate(menu.submenu, updatedLocale); + } + return newMenu; +}); + const mainWindow = () => { let deeplinkUrl; let browserWindow; @@ -265,20 +283,6 @@ const mainWindow = () => { browserWindow.setTitle('New Expensify'); } - const setLabelsInMenuTemplate = (submenu, updatedLocale) => - _.map(submenu, (menu) => { - const newMenu = _.clone(menu); - if (menu.id) { - const labelTranslation = Localize.translate(updatedLocale, `desktopApplicationMenu.${menu.id}`); - if (labelTranslation) { - newMenu.label = labelTranslation; - } - } - if (menu.submenu) { - newMenu.submenu = setLabelsInMenuTemplate(menu.submenu, updatedLocale); - } - return newMenu; - }); const initialMenuTemplate = [ { From e92b38cc2e20e53ba35a6eb2b5881abf1b77de3d Mon Sep 17 00:00:00 2001 From: Wojciech Stanisz Date: Thu, 29 Jun 2023 22:58:36 +0200 Subject: [PATCH 08/11] USe old name localizeMenuItems --- desktop/main.js | 73 +++++++++++++++++++++++++++++-------------------- 1 file changed, 44 insertions(+), 29 deletions(-) diff --git a/desktop/main.js b/desktop/main.js index 26b98b5305d2..ef38bd515fea 100644 --- a/desktop/main.js +++ b/desktop/main.js @@ -5,7 +5,7 @@ const contextMenu = require('electron-context-menu'); const {autoUpdater} = require('electron-updater'); const log = require('electron-log'); const {machineId} = require('node-machine-id'); -const { Link } = require('@react-navigation/native'); +const {Link} = require('@react-navigation/native'); const ELECTRON_EVENTS = require('./ELECTRON_EVENTS'); const checkForUpdates = require('../src/libs/checkForUpdates'); const CONFIG = require('../src/CONFIG').default; @@ -171,20 +171,20 @@ const electronUpdater = (browserWindow) => ({ /* * @param {Menu} systemMenu */ -const setLabelsInMenuTemplate = (submenu, updatedLocale) => -_.map(submenu, (menu) => { - const newMenu = _.clone(menu); - if (menu.id) { - const labelTranslation = Localize.translate(updatedLocale, `desktopApplicationMenu.${menu.id}`); - if (labelTranslation) { - newMenu.label = labelTranslation; +const localizeMenuItems = (submenu, updatedLocale) => + _.map(submenu, (menu) => { + const newMenu = _.clone(menu); + if (menu.id) { + const labelTranslation = Localize.translate(updatedLocale, `desktopApplicationMenu.${menu.id}`); + if (labelTranslation) { + newMenu.label = labelTranslation; + } } - } - if (menu.submenu) { - newMenu.submenu = setLabelsInMenuTemplate(menu.submenu, updatedLocale); - } - return newMenu; -}); + if (menu.submenu) { + newMenu.submenu = localizeMenuItems(menu.submenu, updatedLocale); + } + return newMenu; + }); const mainWindow = () => { let deeplinkUrl; @@ -283,7 +283,6 @@ const mainWindow = () => { browserWindow.setTitle('New Expensify'); } - const initialMenuTemplate = [ { id: 'mainMenu', @@ -384,24 +383,40 @@ const mainWindow = () => { label: Localize.translate(preferredLocale, `desktopApplicationMenu.helpMenu`), role: 'help', submenu: [ - {id: 'learnMore', label: Localize.translate(preferredLocale, `desktopApplicationMenu.learnMore`), click: () => { - Link.openExternalLink(CONST.MENU_HELP_URLS.LEARN_MORE); - }, }, - {id: 'documentation', label: Localize.translate(preferredLocale, `desktopApplicationMenu.documentation`), click: () => { - Link.openExternalLink(CONST.MENU_HELP_URLS.DOCUMENTATION); - },}, - {id: 'communityDiscussions', label: Localize.translate(preferredLocale, `desktopApplicationMenu.communityDiscussions`), click: () => { - Link.openExternalLink(CONST.MENU_HELP_URLS.COMMUNITY_DISCUSSIONS); - },}, - {id: 'searchIssues', label: Localize.translate(preferredLocale, `desktopApplicationMenu.searchIssues`), click: () => { - Link.openExternalLink(CONST.MENU_HELP_URLS.SEARCH_ISSUES); - },}, + { + id: 'learnMore', + label: Localize.translate(preferredLocale, `desktopApplicationMenu.learnMore`), + click: () => { + Link.openExternalLink(CONST.MENU_HELP_URLS.LEARN_MORE); + }, + }, + { + id: 'documentation', + label: Localize.translate(preferredLocale, `desktopApplicationMenu.documentation`), + click: () => { + Link.openExternalLink(CONST.MENU_HELP_URLS.DOCUMENTATION); + }, + }, + { + id: 'communityDiscussions', + label: Localize.translate(preferredLocale, `desktopApplicationMenu.communityDiscussions`), + click: () => { + Link.openExternalLink(CONST.MENU_HELP_URLS.COMMUNITY_DISCUSSIONS); + }, + }, + { + id: 'searchIssues', + label: Localize.translate(preferredLocale, `desktopApplicationMenu.searchIssues`), + click: () => { + Link.openExternalLink(CONST.MENU_HELP_URLS.SEARCH_ISSUES); + }, + }, ], }, ]; // Build and set the initial menu - const initialMenu = Menu.buildFromTemplate(setLabelsInMenuTemplate(initialMenuTemplate, preferredLocale)); + const initialMenu = Menu.buildFromTemplate(localizeMenuItems(initialMenuTemplate, preferredLocale)); Menu.setApplicationMenu(initialMenu); // When the user clicks a link that has target="_blank" (which is all external links) @@ -479,7 +494,7 @@ const mainWindow = () => { } ipcMain.on(ELECTRON_EVENTS.LOCALE_UPDATED, (event, updatedLocale) => { - Menu.setApplicationMenu(Menu.buildFromTemplate(setLabelsInMenuTemplate(initialMenuTemplate, updatedLocale))); + Menu.setApplicationMenu(Menu.buildFromTemplate(localizeMenuItems(initialMenuTemplate, updatedLocale))); }); ipcMain.on(ELECTRON_EVENTS.REQUEST_VISIBILITY, (event) => { From 11b42a2f5e886d08f8e23d00c91df358121d9fb1 Mon Sep 17 00:00:00 2001 From: Wojciech Stanisz Date: Thu, 29 Jun 2023 23:15:55 +0200 Subject: [PATCH 09/11] Make links work --- desktop/main.js | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/desktop/main.js b/desktop/main.js index ef38bd515fea..12c1e8b7ab89 100644 --- a/desktop/main.js +++ b/desktop/main.js @@ -5,7 +5,6 @@ const contextMenu = require('electron-context-menu'); const {autoUpdater} = require('electron-updater'); const log = require('electron-log'); const {machineId} = require('node-machine-id'); -const {Link} = require('@react-navigation/native'); const ELECTRON_EVENTS = require('./ELECTRON_EVENTS'); const checkForUpdates = require('../src/libs/checkForUpdates'); const CONFIG = require('../src/CONFIG').default; @@ -387,28 +386,28 @@ const mainWindow = () => { id: 'learnMore', label: Localize.translate(preferredLocale, `desktopApplicationMenu.learnMore`), click: () => { - Link.openExternalLink(CONST.MENU_HELP_URLS.LEARN_MORE); + shell.openExternal(CONST.MENU_HELP_URLS.LEARN_MORE); }, }, { id: 'documentation', label: Localize.translate(preferredLocale, `desktopApplicationMenu.documentation`), click: () => { - Link.openExternalLink(CONST.MENU_HELP_URLS.DOCUMENTATION); + shell.openExternal(CONST.MENU_HELP_URLS.DOCUMENTATION); }, }, { id: 'communityDiscussions', label: Localize.translate(preferredLocale, `desktopApplicationMenu.communityDiscussions`), click: () => { - Link.openExternalLink(CONST.MENU_HELP_URLS.COMMUNITY_DISCUSSIONS); + shell.openExternal(CONST.MENU_HELP_URLS.COMMUNITY_DISCUSSIONS); }, }, { id: 'searchIssues', label: Localize.translate(preferredLocale, `desktopApplicationMenu.searchIssues`), click: () => { - Link.openExternalLink(CONST.MENU_HELP_URLS.SEARCH_ISSUES); + shell.openExternal(CONST.MENU_HELP_URLS.SEARCH_ISSUES); }, }, ], From 5ccdff393250fb45ca2b779805fe2bf60394b55b Mon Sep 17 00:00:00 2001 From: Wojciech Stanisz Date: Thu, 29 Jun 2023 23:29:21 +0200 Subject: [PATCH 10/11] Fix id --- desktop/main.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/desktop/main.js b/desktop/main.js index 12c1e8b7ab89..8cfe8e6d32ab 100644 --- a/desktop/main.js +++ b/desktop/main.js @@ -151,7 +151,7 @@ const electronUpdater = (browserWindow) => ({ const systemMenu = Menu.getApplicationMenu(); downloadedVersion = info.version; systemMenu.getMenuItemById(`update`).visible = true; - systemMenu.getMenuItemById(`check-for-updates`).visible = false; + systemMenu.getMenuItemById(`checkForUpdates`).visible = false; if (browserWindow.isVisible()) { browserWindow.webContents.send(ELECTRON_EVENTS.UPDATE_DOWNLOADED, info.version); } else { From 4864d132aa6a3d8304560389c70d77892867b55b Mon Sep 17 00:00:00 2001 From: Wojciech Stanisz Date: Tue, 18 Jul 2023 17:42:33 +0200 Subject: [PATCH 11/11] Translate window menu --- desktop/main.js | 1 + src/languages/en.js | 3 +++ src/languages/es.js | 3 +++ 3 files changed, 7 insertions(+) diff --git a/desktop/main.js b/desktop/main.js index 8cfe8e6d32ab..ea8d5d1a8860 100644 --- a/desktop/main.js +++ b/desktop/main.js @@ -376,6 +376,7 @@ const mainWindow = () => { { id: 'windowMenu', role: 'windowMenu', + submenu: [{id: 'minimize', role: 'minimize'}, {id: 'zoom', role: 'zoom'}, {type: 'separator'}, {id: 'front', role: 'front'}], }, { id: 'helpMenu', diff --git a/src/languages/en.js b/src/languages/en.js index 9cdbad18db69..b5172917c847 100755 --- a/src/languages/en.js +++ b/src/languages/en.js @@ -1406,6 +1406,9 @@ export default { back: 'Back', forward: 'Forward', windowMenu: 'Window', + minimize: 'Minimize', + zoom: 'Zoom', + front: 'Bring All to Front', helpMenu: 'Help', learnMore: 'Learn more', documentation: 'Documentation', diff --git a/src/languages/es.js b/src/languages/es.js index 5e3e0ebae4b7..f1ccb01c79a4 100644 --- a/src/languages/es.js +++ b/src/languages/es.js @@ -1417,6 +1417,9 @@ export default { back: 'Atrás', forward: 'Adelante', windowMenu: 'Ventana', + minimize: 'Minimizar', + zoom: 'Zoom', + front: 'Traer todo al frente', helpMenu: 'Ayuda', learnMore: 'Más información', documentation: 'Documentación',