From cb0a85b8b282012705306b54e12c85f2564f5dc7 Mon Sep 17 00:00:00 2001 From: Xmader Date: Thu, 5 Nov 2020 01:15:29 -0500 Subject: [PATCH] v0.11.0 - i18n and l10n --- dist/main.js | 127 ++++++++++++++++++++++++++++++++++++---------- package-lock.json | 2 +- package.json | 2 +- 3 files changed, 103 insertions(+), 28 deletions(-) diff --git a/dist/main.js b/dist/main.js index 4b1c618..b3c677e 100644 --- a/dist/main.js +++ b/dist/main.js @@ -5,7 +5,7 @@ // @supportURL https://github.com/Xmader/musescore-downloader/issues // @updateURL https://msdl.librescore.org/install.user.js // @downloadURL https://msdl.librescore.org/install.user.js -// @version 0.10.4 +// @version 0.11.0 // @description download sheet music from musescore.com for free, no login or Musescore Pro required | 免登录、免 Musescore Pro,免费下载 musescore.com 上的曲谱 // @author Xmader // @match https://musescore.com/*/* @@ -26400,6 +26400,7 @@ Please pipe the document into a Node stream.\ }; /* eslint-disable @typescript-eslint/no-unsafe-return */ + /* eslint-disable @typescript-eslint/explicit-module-boundary-types */ const moduleLookup = (id, globalWebpackJson) => { const pack = globalWebpackJson.find(x => x[1][id]); return pack[1][id]; @@ -26627,6 +26628,85 @@ Please pipe the document into a Node stream.\ return score; }); + var en = createLocale({ + 'PROCESSING'() { + return 'Processing…'; + }, + 'BTN_ERROR'() { + return '❌Download Failed!'; + }, + 'DEPRECATION_NOTICE'(btnName) { + return `DEPRECATED!\nUse \`${btnName}\` inside \`Individual Parts\` instead.\n(This may still work. Click \`OK\` to continue.)`; + }, + 'DOWNLOAD'(fileType) { + return `Download ${fileType}`; + }, + 'DOWNLOAD_AUDIO'(fileType) { + return `Download ${fileType} Audio`; + }, + 'IND_PARTS'() { + return 'Individual Parts'; + }, + 'IND_PARTS_TOOLTIP'() { + return 'Download individual parts (BETA)'; + }, + 'FULL_SCORE'() { + return 'Full score'; + }, + }); + + var es = createLocale({ + 'PROCESSING'() { + return 'Cargando…'; + }, + 'BTN_ERROR'() { + return '❌¡Descarga Fallida!'; + }, + 'DEPRECATION_NOTICE'(btnName) { + return `¡OBSOLETO!\nParecer ser que \`${btnName}\` no funciona correctamente, use \`Partes Indivduales\` en su lugar.\n(Esto todavía puede funcionar. Haga click en \`Aceptar\` para continuar.)`; + }, + 'DOWNLOAD'(fileType) { + return `Descargar ${fileType}`; + }, + 'DOWNLOAD_AUDIO'(fileType) { + return `Descargar Audio ${fileType}`; + }, + 'IND_PARTS'() { + return 'Partes individuales'; + }, + 'IND_PARTS_TOOLTIP'() { + return 'Descargar partes individuales (BETA)'; + }, + 'FULL_SCORE'() { + return 'Partitura Completa'; + }, + }); + + /** + * type checking only so no missing keys + */ + function createLocale(obj) { + return Object.freeze(obj); + } + const locales = ((l) => Object.freeze(l))({ + en, + es, + }); + // detect browser language + const lang = (() => { + const names = Object.keys(locales); + const _lang = navigator.languages.find(l => { + // find the first occurrence of valid languages + return names.includes(l); + }); + return _lang || 'en'; + })(); + // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types + function i18n(key) { + const locale = locales[lang]; + return locale[key]; + } + /** * Select the original Download Button */ @@ -26694,11 +26774,6 @@ Please pipe the document into a Node stream.\ // eslint-disable-next-line @typescript-eslint/no-namespace var BtnAction; (function (BtnAction) { - BtnAction.PROCESSING_TEXT = 'Processing…'; - BtnAction.ERROR_TEXT = '❌Download Failed!'; - const deprecationNotice = (btnName) => { - return `DEPRECATED!\nUse \`${btnName}\` inside \`Individual Parts\` instead.\n(This may still work. Click \`OK\` to continue.)`; - }; const normalizeUrlInput = (url) => { if (typeof url === 'function') return url(); @@ -26722,9 +26797,9 @@ Please pipe the document into a Node stream.\ return (btnName, btn, setText) => __awaiter(this, void 0, void 0, function* () { const _onclick = btn.onclick; btn.onclick = null; - setText(BtnAction.PROCESSING_TEXT); + setText(i18n('PROCESSING')()); const w = window.open(''); - const txt = document.createTextNode(BtnAction.PROCESSING_TEXT); + const txt = document.createTextNode(i18n('PROCESSING')()); w.document.body.append(txt); // set page hooks // eslint-disable-next-line prefer-const @@ -26748,13 +26823,13 @@ Please pipe the document into a Node stream.\ return (name, btn, setText) => __awaiter(this, void 0, void 0, function* () { const _onclick = btn.onclick; btn.onclick = null; - setText(BtnAction.PROCESSING_TEXT); + setText(i18n('PROCESSING')()); try { yield fn(); setText(name); } catch (err) { - setText(BtnAction.ERROR_TEXT); + setText(i18n('BTN_ERROR')()); console.error(err); } btn.onclick = _onclick; @@ -26762,7 +26837,7 @@ Please pipe the document into a Node stream.\ }; BtnAction.deprecate = (action) => { return (name, btn, setText) => { - alert(deprecationNotice(name)); + alert(i18n('DEPRECATION_NOTICE')(name)); // eslint-disable-next-line @typescript-eslint/no-unsafe-return return action(name, btn, setText); }; @@ -26776,15 +26851,15 @@ Please pipe the document into a Node stream.\ const btnList = new BtnList(getDownloadBtn()); const filename = scoreinfo.fileName; btnList.add({ - name: 'Download MSCZ', + name: i18n('DOWNLOAD')('MSCZ'), action: BtnAction.process(downloadMscz), }); btnList.add({ - name: 'Download PDF', + name: i18n('DOWNLOAD')('PDF'), action: BtnAction.deprecate(BtnAction.process(downloadPDF)), }); btnList.add({ - name: 'Download MusicXML', + name: i18n('DOWNLOAD')('MusicXML'), action: BtnAction.mscoreWindow((w, score) => __awaiter(void 0, void 0, void 0, function* () { const mxl = yield score.saveMxl(); const data = new Blob([mxl]); @@ -26793,53 +26868,53 @@ Please pipe the document into a Node stream.\ })), }); btnList.add({ - name: 'Download MIDI', + name: i18n('DOWNLOAD')('MIDI'), action: BtnAction.deprecate(BtnAction.download(() => getFileUrl('midi'))), }); btnList.add({ - name: 'Download MP3', + name: i18n('DOWNLOAD')('MP3'), action: BtnAction.download(() => getFileUrl('mp3')), }); btnList.add({ - name: 'Individual Parts', - tooltip: 'Download individual parts (BETA)', + name: i18n('IND_PARTS')(), + tooltip: i18n('IND_PARTS_TOOLTIP')(), action: BtnAction.mscoreWindow((w, score, txt) => __awaiter(void 0, void 0, void 0, function* () { const metadata = yield score.metadata(); console.log('score metadata loaded by webmscore', metadata); // add the "full score" option as a "part" - metadata.excerpts.unshift({ id: -1, title: 'Full score', parts: [] }); + metadata.excerpts.unshift({ id: -1, title: i18n('FULL_SCORE')(), parts: [] }); // render the part selection page txt.remove(); const fieldset = w.document.createElement('fieldset'); w.document.body.append(fieldset); const downloads = [ { - name: 'Download PDF', + name: i18n('DOWNLOAD')('PDF'), fileExt: 'pdf', action: (score) => score.savePdf(), }, { - name: 'Download Part MSCZ', + name: i18n('DOWNLOAD')('MSCZ'), fileExt: 'mscz', action: (score) => score.saveMsc('mscz'), }, { - name: 'Download Part MusicXML', + name: i18n('DOWNLOAD')('MusicXML'), fileExt: 'mxl', action: (score) => score.saveMxl(), }, { - name: 'Download MIDI', + name: i18n('DOWNLOAD')('MIDI'), fileExt: 'mid', action: (score) => score.saveMidi(true, true), }, { - name: 'Download FLAC Audio', + name: i18n('DOWNLOAD_AUDIO')('FLAC'), fileExt: 'flac', action: (score) => loadSoundFont(score).then(() => score.saveAudio('flac')), }, { - name: 'Download OGG Audio', + name: i18n('DOWNLOAD_AUDIO')('OGG'), fileExt: 'ogg', action: (score) => loadSoundFont(score).then(() => score.saveAudio('ogg')), }, @@ -26877,7 +26952,7 @@ Please pipe the document into a Node stream.\ // lock the button when processing submitBtn.onclick = null; submitBtn.disabled = true; - submitBtn.value = 'Processing…'; + submitBtn.value = i18n('PROCESSING')(); const checked = fieldset.querySelector('input:checked'); const partName = checked.alt; const data = new Blob([yield d.action(score)]); diff --git a/package-lock.json b/package-lock.json index 31d68e3..e492fd4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "musescore-downloader", - "version": "0.10.4", + "version": "0.11.0", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index 93d2cd2..aa1880c 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "musescore-downloader", - "version": "0.10.4", + "version": "0.11.0", "description": "download sheet music from musescore.com for free, no login or Musescore Pro required | 免登录、免 Musescore Pro,免费下载 musescore.com 上的曲谱", "main": "dist/main.js", "repository": {