From 48575c09caee14f832d8bb05120dccd5478e4faa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bruno=20K=C3=BChnen=20Meneguello?= <1322552+bkmeneguello@users.noreply.github.com> Date: Tue, 16 Feb 2021 23:07:13 -0300 Subject: [PATCH 1/4] Adds languages combo to preferences --- nw/config.py | 10 ++++++++++ nw/gui/preferences.py | 20 ++++++++++++++++++++ 2 files changed, 30 insertions(+) diff --git a/nw/config.py b/nw/config.py index 5cf71b85a..88984d5a7 100644 --- a/nw/config.py +++ b/nw/config.py @@ -393,6 +393,16 @@ def initLocalisation(self, nwApp): return + def listLanguages(self): + langs = dict(map(lambda lang: (lang, QLocale(lang).nativeLanguageName().title()), + map(lambda v: v[0][3:], + filter(lambda v: v[0].startswith("nw_") and v[1] == ".qm", + map(os.path.splitext, os.listdir(self.nwLangPath)))))) + if "en" not in langs: + langs["en"] = QLocale("en").nativeLanguageName().title() + + return sorted(langs.items(), key=lambda x: x[0]) + def loadConfig(self): """Load preferences from file and replace default settings. """ diff --git a/nw/gui/preferences.py b/nw/gui/preferences.py index 8234ebf38..7e8bbd017 100644 --- a/nw/gui/preferences.py +++ b/nw/gui/preferences.py @@ -138,6 +138,23 @@ def __init__(self, theParent): # ============= self.mainForm.addGroupLabel(self.tr("Look and Feel")) + ## Select Locale + self.guiLang = QComboBox() + self.guiLang.setMinimumWidth(self.mainConf.pxInt(200)) + self.theLangs = self.mainConf.listLanguages() + print(self.theLangs) + for lang, langName in self.theLangs: + self.guiLang.addItem(langName, lang) + langIdx = self.guiLang.findData(self.mainConf.guiLang) + if langIdx != -1: + self.guiLang.setCurrentIndex(langIdx) + + self.mainForm.addRow( + self.tr("Main GUI language"), + self.guiLang, + self.tr("Changing this requires restarting novelWriter.") + ) + ## Select Theme self.guiTheme = QComboBox() self.guiTheme.setMinimumWidth(self.mainConf.pxInt(200)) @@ -240,6 +257,7 @@ def __init__(self, theParent): def saveValues(self): """Save the values set for this tab. """ + guiLang = self.guiLang.currentData() guiTheme = self.guiTheme.currentData() guiIcons = self.guiIcons.currentData() guiDark = self.guiDark.isChecked() @@ -248,12 +266,14 @@ def saveValues(self): # Check if restart is needed needsRestart = False + needsRestart |= self.mainConf.guiLang != guiLang needsRestart |= self.mainConf.guiTheme != guiTheme needsRestart |= self.mainConf.guiIcons != guiIcons needsRestart |= self.mainConf.guiDark != guiDark needsRestart |= self.mainConf.guiFont != guiFont needsRestart |= self.mainConf.guiFontSize != guiFontSize + self.mainConf.guiLang = guiLang self.mainConf.guiTheme = guiTheme self.mainConf.guiIcons = guiIcons self.mainConf.guiDark = guiDark From 7591095f2a2a367c8ce4f8e8c143755d4142529a Mon Sep 17 00:00:00 2001 From: "Veronica K. B. Olsen" <1619840+vkbo@users.noreply.github.com> Date: Wed, 17 Feb 2021 09:28:25 +0100 Subject: [PATCH 2/4] Rewrite listLanguages function to add more checks and fix misidentification of default language --- nw/config.py | 25 +++++++++++++++++-------- nw/gui/preferences.py | 7 ++++--- 2 files changed, 21 insertions(+), 11 deletions(-) diff --git a/nw/config.py b/nw/config.py index 88984d5a7..618bfd3c1 100644 --- a/nw/config.py +++ b/nw/config.py @@ -394,14 +394,23 @@ def initLocalisation(self, nwApp): return def listLanguages(self): - langs = dict(map(lambda lang: (lang, QLocale(lang).nativeLanguageName().title()), - map(lambda v: v[0][3:], - filter(lambda v: v[0].startswith("nw_") and v[1] == ".qm", - map(os.path.splitext, os.listdir(self.nwLangPath)))))) - if "en" not in langs: - langs["en"] = QLocale("en").nativeLanguageName().title() - - return sorted(langs.items(), key=lambda x: x[0]) + """List localisation files in the i18n folder. The default GUI + language 'en_GB' is British English. + """ + langList = { + "en_GB": QLocale("en_GB").nativeLanguageName().title() + } + for qmFile in os.listdir(self.nwLangPath): + if not os.path.isfile(os.path.join(self.nwLangPath, qmFile)): + continue + if not qmFile.startswith("nw_") or not qmFile.endswith(".qm"): + continue + qmLang = qmFile[3:-3] + qmName = QLocale(qmLang).nativeLanguageName().title() + if qmLang and qmName: + langList[qmLang] = qmName + + return sorted(langList.items(), key=lambda x: x[0]) def loadConfig(self): """Load preferences from file and replace default settings. diff --git a/nw/gui/preferences.py b/nw/gui/preferences.py index 7e8bbd017..4e9a26279 100644 --- a/nw/gui/preferences.py +++ b/nw/gui/preferences.py @@ -137,10 +137,11 @@ def __init__(self, theParent): # Look and Feel # ============= self.mainForm.addGroupLabel(self.tr("Look and Feel")) + minWidth = self.mainConf.pxInt(200) ## Select Locale self.guiLang = QComboBox() - self.guiLang.setMinimumWidth(self.mainConf.pxInt(200)) + self.guiLang.setMinimumWidth(minWidth) self.theLangs = self.mainConf.listLanguages() print(self.theLangs) for lang, langName in self.theLangs: @@ -157,7 +158,7 @@ def __init__(self, theParent): ## Select Theme self.guiTheme = QComboBox() - self.guiTheme.setMinimumWidth(self.mainConf.pxInt(200)) + self.guiTheme.setMinimumWidth(minWidth) self.theThemes = self.theTheme.listThemes() for themeDir, themeName in self.theThemes: self.guiTheme.addItem(themeName, themeDir) @@ -173,7 +174,7 @@ def __init__(self, theParent): ## Select Icon Theme self.guiIcons = QComboBox() - self.guiIcons.setMinimumWidth(self.mainConf.pxInt(200)) + self.guiIcons.setMinimumWidth(minWidth) self.theIcons = self.theTheme.theIcons.listThemes() for iconDir, iconName in self.theIcons: self.guiIcons.addItem(iconName, iconDir) From fb0906667972459771c5202e0afd38eb8e765714 Mon Sep 17 00:00:00 2001 From: "Veronica K. B. Olsen" <1619840+vkbo@users.noreply.github.com> Date: Wed, 17 Feb 2021 09:53:27 +0100 Subject: [PATCH 3/4] Remove debug print and add test coverage --- .gitignore | 2 + i18n/nw_pt.qm | Bin 117878 -> 0 bytes i18n/phrases_pt.qph | 447 ---------------------------- nw/gui/preferences.py | 1 - tests/conftest.py | 8 + tests/dummy.py | 10 + tests/files/nw_en_GB.qm | 1 + tests/test_base/test_base_config.py | 20 +- 8 files changed, 38 insertions(+), 451 deletions(-) delete mode 100644 i18n/nw_pt.qm delete mode 100644 i18n/phrases_pt.qph create mode 100644 tests/files/nw_en_GB.qm diff --git a/.gitignore b/.gitignore index 3d1b337ed..5d442ef0f 100644 --- a/.gitignore +++ b/.gitignore @@ -7,6 +7,8 @@ *.egg-info setup.iss novelwriter.desktop +i18n/*.qm +i18n/*.qph # Documentation /docs/build/ diff --git a/i18n/nw_pt.qm b/i18n/nw_pt.qm deleted file mode 100644 index 81046adfb7cb0ad9f301ee8acb4485af41d67321..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 117878 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

N0e8i)D0lB>bJ_D6S$~;#i2YfXI?q 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 diff --git a/i18n/phrases_pt.qph b/i18n/phrases_pt.qph deleted file mode 100644 index 7b58cb0bf..000000000 --- a/i18n/phrases_pt.qph +++ /dev/null @@ -1,447 +0,0 @@ - - - - Point of View - Ponto de Vista - - - Characters - Personagens - - - Plot - Enredo - - - Timeline - Linha do Tempo - - - Locations - Lugares - - - Objects - Objetos - - - Entities - Entidades - - - None - Nenhum - - - Novel - Livro - - - Entity - Entidade - - - Outtakes - Removidos - - - Trash - Lixeira - - - Title Page - Página de Título - - - Book - Livro - - - Plain Page - Página - - - Partition - Partição - - - Unnumbered - Sem Numeração - - - Scene - Cena - - - Note - Nota - - - Title - Título - - - Level - Nível - - - Document - Documento - - - Line - Linha - - - Chars - Caracteres - - - Words - Palavras - - - Synopsis - Sinopse - - - About - Sobre - - - Release - Versões - - - About novelWriter - Sobre o novelWriter - - - Credits - Créditos - - - Author - Autor - - - Credit - Créditos - - - License - Licença - - - Theme - Tema - - - Icons - Ícones - - - Syntax - Sintaxe - - - Website - Website - - - Chapter - Capítulo - - - Section - Seção - - - Font family - Família da fonte - - - Font size - Tamanho da fonte - - - Justify text - Texto justificado - - - Print - Imprimir - - - Build Project - Construir o Projeto - - - Save As - Salvar Como - - - Close - Fechar - - - Plain Text - Texto Simples - - - Plain HTML - HTML Simples - - - Save Document As - Salvar Documento Como - - - Unknown - Desconhecido - - - Look and Feel - Aparência - - - Project Backup - Cópia de Segurança - - - Path - Caminho - - - Status - Estado - - - Replace - Substituir - - - Search - Pesquisa - - - Handle - Referência - - - References - Referências - - - Label - Rótulo - - - Class - Classe - - - Layout - Leiaute - - - Characters - Caracteres - - - Editor - Editor - - - Project - Projeto - - - Provider - Provedor - - - unknown - desconhecido - - - Paragraphs - Parágrafos - - - Default - Padrão - - - Working title - Nome do projeto - - - Project path - Caminho do projeto - - - Project Stats - Estatíticas do Projeto - - - Folders - Diretórios - - - Documents - Documentos - - - Word count - Contagem de palavras - - - Keyword - Palavra-chave - - - New - Novo - - - Delete - Remover - - - Save - Salvar - - - Name - Nome - - - New Item - Novo Item - - - Last Opened - Aberto Pela Última Vez - - - Settings - Configurações - - - Details - Detalhes - - - Importance - Importância - - - Auto-Replace - Substituir automaticamente - - - Flag - Opção - - - Flags - Opções - - - (New Entry) - - - - New File - Novo Arquivo - - - New Folder - Novo Diretório - - - Histogram - Histograma - - - Finished - Finalizado - - - Done - Pronto - - - Finish - Terminar - - - Auto-Replace - Substituição Automática - - - No Suggestions - Sem Sugestões - - - Browse - Procurar - - - Tag - Etiqueta - - - Draft - Rascunho - - - Minor - Menor - - - Major - Maior - - - Backup - Cópia de Segurança - - - Undo - Desfazer - - - Release - Lançamento - - - Pages - Páginas - - - Page - Página - - - Progress - Progresso - - - Chapters - Capítulos - - - Scenes - Cenas - - - Revisions - Revisões - - - seconds - segundos - - diff --git a/nw/gui/preferences.py b/nw/gui/preferences.py index 4e9a26279..aa7946d69 100644 --- a/nw/gui/preferences.py +++ b/nw/gui/preferences.py @@ -143,7 +143,6 @@ def __init__(self, theParent): self.guiLang = QComboBox() self.guiLang.setMinimumWidth(minWidth) self.theLangs = self.mainConf.listLanguages() - print(self.theLangs) for lang, langName in self.theLangs: self.guiLang.addItem(langName, lang) langIdx = self.guiLang.findData(self.mainConf.guiLang) diff --git a/tests/conftest.py b/tests/conftest.py index 57956aff6..59fd5c5d4 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -61,6 +61,14 @@ def refDir(): theDir = os.path.join(testDir, "reference") return theDir +@pytest.fixture(scope="session") +def filesDir(): + """The folder where additional test files are stored. + """ + testDir = os.path.dirname(__file__) + theDir = os.path.join(testDir, "files") + return theDir + @pytest.fixture(scope="session") def outDir(tmpDir): """An output folder for test results diff --git a/tests/dummy.py b/tests/dummy.py index 72ac5e21b..653fca584 100644 --- a/tests/dummy.py +++ b/tests/dummy.py @@ -91,6 +91,16 @@ def setStatus(self, theText): # END Class DummyStatusBar +class DummyApp: + + def __init__(self): + return + + def installTranslator(self, theLang): + return + +# END Class DummyApp + # =========================================================================== # # Error Functions # Dummy functions that will raise errors instead. diff --git a/tests/files/nw_en_GB.qm b/tests/files/nw_en_GB.qm new file mode 100644 index 000000000..be651eede --- /dev/null +++ b/tests/files/nw_en_GB.qm @@ -0,0 +1 @@ + Date: Wed, 17 Feb 2021 09:59:53 +0100 Subject: [PATCH 4/4] Fix instantiation of DummyApp --- tests/test_base/test_base_config.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tests/test_base/test_base_config.py b/tests/test_base/test_base_config.py index d155b6e71..1197ec196 100644 --- a/tests/test_base/test_base_config.py +++ b/tests/test_base/test_base_config.py @@ -202,7 +202,8 @@ def testBaseConfig_Init(monkeypatch, tmpDir, fncDir, outDir, refDir, filesDir): writeFile(os.path.join(i18nDir, "nw_en_GB.ts"), "") writeFile(os.path.join(i18nDir, "nw_abcd.qm"), "") - tstConf.initLocalisation(DummyApp) + tstApp = DummyApp() + tstConf.initLocalisation(tstApp) theList = tstConf.listLanguages() assert theList == [("en_GB", "British English")]