From 934fbd64aeadc73a9052c0482e350fba9e9ef597 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Felix=20H=C3=A4usler?= Date: Sat, 28 Nov 2020 12:54:10 +0100 Subject: [PATCH] Allow BCP-47 language codes in spell checker --- src/main/preferences/schema.json | 2 +- src/renderer/spellchecker/index.js | 6 ++++-- src/renderer/spellchecker/languageMap.js | 4 ++-- 3 files changed, 7 insertions(+), 5 deletions(-) diff --git a/src/main/preferences/schema.json b/src/main/preferences/schema.json index dd5d3bbbf..ddf2fff26 100644 --- a/src/main/preferences/schema.json +++ b/src/main/preferences/schema.json @@ -338,7 +338,7 @@ }, "spellcheckerLanguage": { "description": "Spelling--The spell checker language", - "pattern": "^[a-z]{2}(?:[-][A-Z]{2})?$", + "pattern": "^[a-z]{2,3}(?:[-](?:[0-9]|[a-zA-Z]){2,}){0,2}$", "default": "en-US" }, "imageInsertAction": { diff --git a/src/renderer/spellchecker/index.js b/src/renderer/spellchecker/index.js index d527fa97d..73599208d 100644 --- a/src/renderer/spellchecker/index.js +++ b/src/renderer/spellchecker/index.js @@ -296,8 +296,9 @@ export class SpellChecker { } if (!this.isHunspell) { - // NB: OS X will return lists that are half just a language, half - // language + locale, like ['en', 'pt_BR', 'ko'] + // NOTE: OS X will return lists that are half just a language, half + // language + locale, like ['en', 'pt_BR', 'ko'] and Windows also returns + // BCP-47 ones. return this.provider.currentSpellchecker.getAvailableDictionaries() .map(x => { if (x.length === 2) return fallbackLocales[x] @@ -307,6 +308,7 @@ export class SpellChecker { return null } }) + .filter(x => { return !!x }) } // Load hunspell dictionaries from disk. diff --git a/src/renderer/spellchecker/languageMap.js b/src/renderer/spellchecker/languageMap.js index 23c17ddda..2c4db0356 100644 --- a/src/renderer/spellchecker/languageMap.js +++ b/src/renderer/spellchecker/languageMap.js @@ -3,10 +3,10 @@ import langMap from 'iso-639-1' /** * Return the native language name by language code. * - * @param {string} langCode The ISO two or four-letter language code (e.g. en, en-US). + * @param {string} langCode The ISO two or four-letter language code (e.g. en, en-US) or BCP-47 code. */ export const getLanguageName = languageCode => { - if (!languageCode || (languageCode.length !== 2 && languageCode.length !== 5)) { + if (!languageCode || languageCode.length < 2) { return null }