From 679d29ecaa403b81830015dcfe421f773457531e Mon Sep 17 00:00:00 2001 From: mote0230 Date: Mon, 2 May 2016 18:00:40 +0200 Subject: [PATCH 1/2] add fallback language --- index.js | 65 ++++++++++++++++++++++++++++++++++++++++++++++++---- package.json | 8 ++++++- 2 files changed, 68 insertions(+), 5 deletions(-) diff --git a/index.js b/index.js index 2cdbcb9..a021cf2 100644 --- a/index.js +++ b/index.js @@ -62,6 +62,25 @@ const currentTo = languages => { } } +// Get the Fallback language from the preferences +const currentFallback = languages => { + let langName = sp.prefs.langFallback || null + for(var key in languages ){ + if(languages[key].name == langName) + { + var langCode = key + } + } + if (!langCode.startsWith('zh')) { + langCode = langCode.replace(/-[a-zA-Z]+$/, '') + } + const lang = languages[langCode] + return { + code: langCode, + name: (lang && lang.name) || null, + } +} + // Utility function to create elements const eltCreator = doc => (name, props, attrs, parent) => { const elt = doc.createElement(name) @@ -179,13 +198,13 @@ const initMenu = (win, languages) => { } // Update the languages menu label (“Change Languages […]”) - const updateLangMenuLabel = detected => { + const updateLangMenuLabel = (detected, fallback) => { const from = detected ? languages[detected] : currentFrom(languages) - const to = currentTo(languages) + const to = fallback ? languages[fallback] : currentTo(languages) langMenu.setAttribute('label', format( LABEL_CHANGE_LANGUAGES, from.name + (detected ? ' - detected' : ''), - to.name + to.name + (fallback ? ' - fallback' : '') )) translatePage.setAttribute('label', format( LABEL_TRANSLATE_PAGE, from.code, to.code @@ -248,7 +267,45 @@ const initMenu = (win, languages) => { } const fromCode = currentFrom(languages).code const toCode = currentTo(languages).code + const fallbackCode = currentFallback(languages).code translate(fromCode, toCode, selection, res => { + if (sp.prefs.langFrom === 'auto' && res.detectedSource === toCode) { + //i don't know how to not copy paste this inline function in a semi recursive function call + translate(fromCode, fallbackCode, selection, res => { + switch (sp.prefs.dictionaryPref) { + case 'A': + if (res.alternatives) { + updateResult(res.translation, res.alternatives) + } else if (res.dictionary) { + updateResult(res.translation, res.dictionary) + } else { + updateResult(res.translation, res.synonyms) + } + break + case 'D': + if (res.dictionary) { + updateResult(res.translation, res.dictionary) + } else if (res.alternatives) { + updateResult(res.translation, res.alternatives) + } else { + updateResult(res.translation, res.synonyms) + } + break + case 'S': + if (res.synonyms) { + updateResult(res.translation, res.synonyms) + } else if (res.dictionary) { + updateResult(res.translation, res.dictionary) + } else { + updateResult(res.translation, res.alternatives) + } + break + } + if (sp.prefs.langFrom === 'auto') { + updateLangMenuLabel(res.detectedSource, fallbackCode) + } + }) + } switch (sp.prefs.dictionaryPref) { case 'A': if (res.alternatives) { @@ -279,7 +336,7 @@ const initMenu = (win, languages) => { break } if (sp.prefs.langFrom === 'auto') { - updateLangMenuLabel(res.detectedSource) + updateLangMenuLabel(res.detectedSource, null) } }) } diff --git a/package.json b/package.json index 28ee977..7026183 100644 --- a/package.json +++ b/package.json @@ -41,7 +41,13 @@ { "value": "D", "label": "Prefer dictonary" }, { "value": "S", "label": "Prefer synonyms" } ] - } + }, + { + "type": "string", + "name": "langFallback", + "value": "English", + "title": "Fallback language if auto language is same as source language. Please type as seen in the gtranslate context menu language picker." + } ], "dependencies": {}, "devDependencies": { From 78b8d4123fcdb98f8cf9e78fc6986d3e1099de45 Mon Sep 17 00:00:00 2001 From: mote0230 Date: Mon, 2 May 2016 18:09:40 +0200 Subject: [PATCH 2/2] fix spaces --- index.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/index.js b/index.js index a021cf2..c1f67f5 100644 --- a/index.js +++ b/index.js @@ -64,7 +64,7 @@ const currentTo = languages => { // Get the Fallback language from the preferences const currentFallback = languages => { - let langName = sp.prefs.langFallback || null + let langName = sp.prefs.langFallback || null for(var key in languages ){ if(languages[key].name == langName) { @@ -73,7 +73,7 @@ const currentFallback = languages => { } if (!langCode.startsWith('zh')) { langCode = langCode.replace(/-[a-zA-Z]+$/, '') - } + } const lang = languages[langCode] return { code: langCode, @@ -204,7 +204,7 @@ const initMenu = (win, languages) => { langMenu.setAttribute('label', format( LABEL_CHANGE_LANGUAGES, from.name + (detected ? ' - detected' : ''), - to.name + (fallback ? ' - fallback' : '') + to.name + (fallback ? ' - fallback' : '') )) translatePage.setAttribute('label', format( LABEL_TRANSLATE_PAGE, from.code, to.code