From 4ab4bb4cb3118859a1df8b532e1636111c3d19cb Mon Sep 17 00:00:00 2001 From: JellyBrick Date: Sat, 2 Dec 2023 08:25:07 +0900 Subject: [PATCH] feat(menu): add 'to-help-translate' button --- src/i18n/resources/en.json | 5 +++- src/menu.ts | 48 ++++++++++++++++++++++++++------------ 2 files changed, 37 insertions(+), 16 deletions(-) diff --git a/src/i18n/resources/en.json b/src/i18n/resources/en.json index 7e1abd8c..b483faf1 100644 --- a/src/i18n/resources/en.json +++ b/src/i18n/resources/en.json @@ -126,7 +126,10 @@ "message": "Language will be changed after restart", "title": "Language Changed" }, - "label": "Language" + "label": "Language", + "submenu": { + "to-help-translate": "Want to help translate? Click here" + } }, "resume-on-start": "Resume last song when app starts", "single-instance-lock": "Single Instance Lock", diff --git a/src/menu.ts b/src/menu.ts index 64efdd87..b1930a9a 100644 --- a/src/menu.ts +++ b/src/menu.ts @@ -8,6 +8,7 @@ import { dialog, Menu, MenuItem, + shell, } from 'electron'; import prompt from 'custom-electron-prompt'; @@ -361,23 +362,40 @@ export const mainMenuTemplate = async ( }, { label: t('main.menu.options.submenu.language.label') + ' (Language)', - submenu: availableLanguages.map( - (lang): Electron.MenuItemConstructorOptions => ({ - label: `${languageResources[lang].translation.language.name} (${languageResources[lang].translation.language['local-name']})`, - type: 'checkbox', - checked: config.get('options.language') === lang, + submenu: [ + { + label: t( + 'main.menu.options.submenu.language.submenu.to-help-translate', + ), + type: 'normal', click() { - config.setMenuOption('options.language', lang); - refreshMenu(win); - setLanguage(lang); - dialog.showMessageBox(win, { - title: t('main.menu.options.submenu.language.dialog.title'), - message: t( - 'main.menu.options.submenu.language.dialog.message', - ), - }); + const url = 'https://hosted.weblate.org/engage/youtube-music/'; + shell.openExternal(url); }, - }), + } as Electron.MenuItemConstructorOptions, + ].concat( + availableLanguages + .map( + (lang): Electron.MenuItemConstructorOptions => ({ + label: `${languageResources[lang].translation.language.name} (${languageResources[lang].translation.language['local-name']})`, + type: 'checkbox', + checked: config.get('options.language') === lang, + click() { + config.setMenuOption('options.language', lang); + refreshMenu(win); + setLanguage(lang); + dialog.showMessageBox(win, { + title: t( + 'main.menu.options.submenu.language.dialog.title', + ), + message: t( + 'main.menu.options.submenu.language.dialog.message', + ), + }); + }, + }), + ) + .sort((a, b) => a.label!.localeCompare(b.label!)), ), }, { type: 'separator' },