From 7f84c3c71c18007c770c8ef5938ae4e3973880e4 Mon Sep 17 00:00:00 2001 From: "Veronica K. B. Olsen" <1619840+vkbo@users.noreply.github.com> Date: Wed, 17 Feb 2021 01:36:06 +0100 Subject: [PATCH 01/13] Ignore compiled linguistics files --- .gitignore | 2 + i18n/nw_pt.qm | Bin 117878 -> 0 bytes i18n/phrases_pt.qph | 447 -------------------------------------------- 3 files changed, 2 insertions(+), 447 deletions(-) delete mode 100644 i18n/nw_pt.qm delete mode 100644 i18n/phrases_pt.qph diff --git a/.gitignore b/.gitignore index 3d1b337e..cd5e1013 100644 --- a/.gitignore +++ b/.gitignore @@ -7,6 +7,8 @@ *.egg-info setup.iss novelwriter.desktop +*.qm +*.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 7b58cb0b..00000000 --- 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 - - From 1f0e6c0426d21fc6466a7c7bc1d0eb755b781384 Mon Sep 17 00:00:00 2001 From: "Veronica K. B. Olsen" <1619840+vkbo@users.noreply.github.com> Date: Wed, 17 Feb 2021 01:37:28 +0100 Subject: [PATCH 02/13] Fix a bunch of missing translation tags and fix a few default strings --- novelWriter.pro | 3 ++- nw/config.py | 4 ++-- nw/core/project.py | 2 +- nw/gui/build.py | 2 +- nw/gui/custom.py | 6 +++--- nw/gui/docmerge.py | 2 +- nw/gui/docsplit.py | 2 +- nw/gui/itemeditor.py | 2 +- nw/gui/preferences.py | 2 +- nw/gui/projsettings.py | 2 +- nw/guimain.py | 2 +- 11 files changed, 15 insertions(+), 14 deletions(-) diff --git a/novelWriter.pro b/novelWriter.pro index b2da5800..ccf57676 100644 --- a/novelWriter.pro +++ b/novelWriter.pro @@ -30,4 +30,5 @@ SOURCES += \ nw/guimain.py TRANSLATIONS += \ - i18n/nw_pt.ts + i18n/nw_pt.ts \ + i18n/nw_nb-NO.ts diff --git a/nw/config.py b/nw/config.py index 5cf71b85..ad7e13ca 100644 --- a/nw/config.py +++ b/nw/config.py @@ -1060,7 +1060,7 @@ class Config: try: import enchant # noqa: F401 self.hasEnchant = True - logger.debug("Checking package 'pyenchant': Ok") + logger.debug("Checking package 'pyenchant': OK") except Exception: self.hasEnchant = False logger.debug("Checking package 'pyenchant': Missing") @@ -1068,7 +1068,7 @@ class Config: assistPath = shutil.which("assistant") self.hasAssistant = assistPath is not None if self.hasAssistant: - logger.debug("Checking executable 'assistant': Ok") + logger.debug("Checking executable 'assistant': OK") else: logger.debug("Checking executable 'assistant': Missing") diff --git a/nw/core/project.py b/nw/core/project.py index 02fa3fd3..bf0271c6 100644 --- a/nw/core/project.py +++ b/nw/core/project.py @@ -203,7 +203,7 @@ class NWProject(): self.autoReplace = {} self.titleFormat = { "title" : r"%title%", - "chapter" : self.tr(r"Chapter %ch%: %title%"), + "chapter" : self.tr("Chapter")+r" %ch%: %title%", "unnumbered" : r"%title%", "scene" : r"* * *", "section" : r"", diff --git a/nw/gui/build.py b/nw/gui/build.py index 95bd2c40..1e818733 100644 --- a/nw/gui/build.py +++ b/nw/gui/build.py @@ -257,7 +257,7 @@ class GuiBuildNovel(QDialog): # Styling Options # =============== - self.styleGroup = QGroupBox("Styling Options", self) + self.styleGroup = QGroupBox(self.tr("Styling Options"), self) self.styleForm = QGridLayout(self) self.styleGroup.setLayout(self.styleForm) diff --git a/nw/gui/custom.py b/nw/gui/custom.py index 4b187f21..e1ae95e1 100644 --- a/nw/gui/custom.py +++ b/nw/gui/custom.py @@ -39,7 +39,7 @@ from PyQt5.QtWidgets import ( QStylePainter, QStyleOptionTab, QListWidget, QListWidgetItem, QFrame ) -from nw.constants import nwUnicode, nwQuotes +from nw.constants import trConst, nwUnicode, nwQuotes logger = logging.getLogger(__name__) @@ -487,7 +487,7 @@ class QuotesDialog(QDialog): minSize = 100 for sKey, sLabel in nwQuotes.SYMBOLS.items(): - theText = "[ %s ] %s" % (sKey, sLabel) + theText = "[ %s ] %s" % (sKey, trConst(sLabel)) minSize = max(minSize, qMetrics.boundingRect(theText).width()) qtItem = QListWidgetItem(theText) qtItem.setData(Qt.UserRole, sKey) @@ -500,7 +500,7 @@ class QuotesDialog(QDialog): # Buttons self.buttonBox = QDialogButtonBox(QDialogButtonBox.Ok | QDialogButtonBox.Cancel) - self.buttonBox.button(QDialogButtonBox.Ok).setText(self.tr("Ok")) + self.buttonBox.button(QDialogButtonBox.Ok).setText(self.tr("OK")) self.buttonBox.button(QDialogButtonBox.Cancel).setText(self.tr("Cancel")) self.buttonBox.accepted.connect(self._doAccept) self.buttonBox.rejected.connect(self._doReject) diff --git a/nw/gui/docmerge.py b/nw/gui/docmerge.py index 2d2c8887..dfe928d5 100644 --- a/nw/gui/docmerge.py +++ b/nw/gui/docmerge.py @@ -66,7 +66,7 @@ class GuiDocMerge(QDialog): self.listBox.setMinimumHeight(self.mainConf.pxInt(180)) self.buttonBox = QDialogButtonBox(QDialogButtonBox.Ok | QDialogButtonBox.Cancel) - self.buttonBox.button(QDialogButtonBox.Ok).setText(self.tr("Ok")) + self.buttonBox.button(QDialogButtonBox.Ok).setText(self.tr("OK")) self.buttonBox.button(QDialogButtonBox.Cancel).setText(self.tr("Cancel")) self.buttonBox.accepted.connect(self._doMerge) self.buttonBox.rejected.connect(self._doClose) diff --git a/nw/gui/docsplit.py b/nw/gui/docsplit.py index b72f9b3c..034a986c 100644 --- a/nw/gui/docsplit.py +++ b/nw/gui/docsplit.py @@ -82,7 +82,7 @@ class GuiDocSplit(QDialog): self.splitLevel.currentIndexChanged.connect(self._populateList) self.buttonBox = QDialogButtonBox(QDialogButtonBox.Ok | QDialogButtonBox.Cancel) - self.buttonBox.button(QDialogButtonBox.Ok).setText(self.tr("Ok")) + self.buttonBox.button(QDialogButtonBox.Ok).setText(self.tr("OK")) self.buttonBox.button(QDialogButtonBox.Cancel).setText(self.tr("Cancel")) self.buttonBox.accepted.connect(self._doSplit) self.buttonBox.rejected.connect(self._doClose) diff --git a/nw/gui/itemeditor.py b/nw/gui/itemeditor.py index 107172f0..17393579 100644 --- a/nw/gui/itemeditor.py +++ b/nw/gui/itemeditor.py @@ -117,7 +117,7 @@ class GuiItemEditor(QDialog): # Buttons self.buttonBox = QDialogButtonBox(QDialogButtonBox.Ok | QDialogButtonBox.Cancel) - self.buttonBox.button(QDialogButtonBox.Ok).setText(self.tr("Ok")) + self.buttonBox.button(QDialogButtonBox.Ok).setText(self.tr("OK")) self.buttonBox.button(QDialogButtonBox.Cancel).setText(self.tr("Cancel")) self.buttonBox.accepted.connect(self._doSave) self.buttonBox.rejected.connect(self._doClose) diff --git a/nw/gui/preferences.py b/nw/gui/preferences.py index 8234ebf3..5952f9c5 100644 --- a/nw/gui/preferences.py +++ b/nw/gui/preferences.py @@ -70,7 +70,7 @@ class GuiPreferences(PagedDialog): self.addTab(self.tabAuto, self.tr("Automation")) self.buttonBox = QDialogButtonBox(QDialogButtonBox.Ok | QDialogButtonBox.Cancel) - self.buttonBox.button(QDialogButtonBox.Ok).setText(self.tr("Ok")) + self.buttonBox.button(QDialogButtonBox.Ok).setText(self.tr("OK")) self.buttonBox.button(QDialogButtonBox.Cancel).setText(self.tr("Cancel")) self.buttonBox.accepted.connect(self._doSave) self.buttonBox.rejected.connect(self._doClose) diff --git a/nw/gui/projsettings.py b/nw/gui/projsettings.py index 39cfe930..b7e13bbb 100644 --- a/nw/gui/projsettings.py +++ b/nw/gui/projsettings.py @@ -77,7 +77,7 @@ class GuiProjectSettings(PagedDialog): self.addTab(self.tabReplace, self.tr("Auto-Replace")) self.buttonBox = QDialogButtonBox(QDialogButtonBox.Ok | QDialogButtonBox.Cancel) - self.buttonBox.button(QDialogButtonBox.Ok).setText(self.tr("Ok")) + self.buttonBox.button(QDialogButtonBox.Ok).setText(self.tr("OK")) self.buttonBox.button(QDialogButtonBox.Cancel).setText(self.tr("Cancel")) self.buttonBox.accepted.connect(self._doSave) self.buttonBox.rejected.connect(self._doClose) diff --git a/nw/guimain.py b/nw/guimain.py index f059ef16..50a0f6fa 100644 --- a/nw/guimain.py +++ b/nw/guimain.py @@ -290,7 +290,7 @@ class GuiMain(QMainWindow): self.openProject(self.mainConf.cmdOpen) logger.debug("novelWriter is ready ...") - self.setStatus("novelWriter is ready ...") + self.setStatus(self.tr("novelWriter is ready ...")) return From 5fc01fe68528d9eedf2cc0fe0557da86b222ead0 Mon Sep 17 00:00:00 2001 From: "Veronica K. B. Olsen" <1619840+vkbo@users.noreply.github.com> Date: Wed, 17 Feb 2021 01:43:12 +0100 Subject: [PATCH 03/13] Add the updated translation files --- i18n/nw_nb-NO.ts | 4699 ++++++++++++++++++++++++++++++++++++++++++++++ i18n/nw_pt.ts | 83 +- 2 files changed, 4746 insertions(+), 36 deletions(-) create mode 100644 i18n/nw_nb-NO.ts diff --git a/i18n/nw_nb-NO.ts b/i18n/nw_nb-NO.ts new file mode 100644 index 00000000..02714bb9 --- /dev/null +++ b/i18n/nw_nb-NO.ts @@ -0,0 +1,4699 @@ + + + + Constant + + + None + Ingen + + + + Novel + Roman + + + + Plot + Plott + + + + Characters + Karakter + + + + Locations + Lokasjon + + + + Timeline + Tidslinje + + + + Objects + Objekt + + + + Entity + Enhet + + + + Custom + Annet + + + + Outtakes + Uttak + + + + Trash + Søppel + + + + Title Page + Tittelside + + + + Book + Bok + + + + Plain Page + Enkel side + + + + Partition + Partisjon + + + + Unnumbered + Unumrert + + + + Chapter + Kapittel + + + + Scene + Scene + + + + Note + Notat + + + + Tag + Knagg + + + + Point of View + Synsvinkel + + + + Focus + Fokus + + + + Entities + Enheter + + + + Title + Tittel + + + + Level + Nivå + + + + Document + Dokument + + + + Line + Linje + + + + Chars + Tegn + + + + Words + Ord + + + + Pars + Avsn. + + + + POV + Synsv. + + + + Synopsis + Sammendrag + + + + Straight single quotation mark + Rett, enkelt sitattegn + + + + Straight double quotation mark + Rett, dobbelt sitattegn + + + + Left single quotation mark + Venstre, enkelt sitattegn + + + + Right single quotation mark + Høyre, enkelt sitattegn + + + + Single low-9 quotation mark + Enkelt, lavt 9 sitattegn + + + + Single high-reversed-9 quotation mark + Enkelt, høyt, reversert 9 sitattegn + + + + Left double quotation mark + Venstre, dobbelt sitattegn + + + + Right double quotation mark + Høyre, dobbelt sitattegn + + + + Double low-9 quotation mark + Dobbelt, lavt 9 sitattegn + + + + Double high-reversed-9 quotation mark + Dobbelt, høyt, reversert 9 sitattegn + + + + Double low-reversed-9 quotation mark + Dobbelt, lavt, reversert 9 sitattegn + + + + Single left-pointing angle quotation mark + Enkelt, venstre, angulært sitattegn + + + + Single right-pointing angle quotation mark + Enkelt, høyre, angulært sitattegn + + + + Left-pointing double angle quotation mark + Dobbelt, venstre, angulært sitattegn + + + + Right-pointing double angle quotation mark + Dobbelt, høyre, angulært sitattegn + + + + Left corner bracket + Venstre hjørnevinkel + + + + Right corner bracket + Høyre hjørnevinkel + + + + Left white corner bracket + Venstre, hvit hjørnevinkel + + + + Right white corner bracket + Høyre, hvit hjørnevinkel + + + + GuiAbout + + + About novelWriter + Om novelWriter + + + + About + Om + + + + Release + Utgivelse + + + + License + Lisens + + + + OK + OK + + + + Website: {0} + Webside: {0} + + + + Credits + Krediteringer + + + + novelWriter is a markdown-like text editor designed for organising and writing novels. It is written in Python 3 with a Qt5 GUI, using PyQt5. + + + + + novelWriter is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. + + + + + novelWriter is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + + + + + See the License tab for the full license text, or visit the GNU website at {0} for more details. + + + + + Theme: {0} + Tema: {0} + + + + Author: {0} + Ansvarlig: {0} + + + + Credit: {0} + Kreditert: {0} + + + + License: {0} + Lisens: {0} + + + + Icons: {0} + Ikoner: {0} + + + + Syntax: {0} + Syntaks: {0} + + + + GuiBuildNovel + + + Build Novel Project + Bygg Romanprosjekt + + + + Title Formats for Novel Files + Tittelformater + + + + Formatting Codes: + Formatteringskoder: + + + + {0} for the title as set in the document + + + + + {0} for chapter number (1, 2, 3) + + + + + {0} for chapter number as a word (one, two) + + + + + {0} for chapter number in upper case Roman + + + + + {0} for chapter number in lower case Roman + + + + + {0} for scene number within chapter + + + + + {0} for scene number within novel + + + + + Leave blank to skip this heading, or set to a static text, like for instance '{0}', to make a separator. The separator will be centred automatically and only appear between sections of the same type. + + + + + Title + Tittel + + + + Chapter + Kapittel + + + + Unnumbered + Unumrert + + + + Scene + Scene + + + + Section + Seksjon + + + + Font Options + Skriftvalg + + + + Font family + Skriftfamilie + + + + Font size + Skriftstørrelse + + + + Line height + Linjehøyde + + + + Justify text + Rette marger + + + + Disable styling + Slå av styling + + + + Include Options + Inkluderinger + + + + Include synopsis + Inkluder sammendrag + + + + Include comments + Inkluder kommentarer + + + + Include keywords + Inkluder kodeord + + + + Include body text + Includer tekst + + + + File Filter Options + Fil-filtrering + + + + Include files with layouts other than 'Note'. + Inkluder filer som ikke er notater. + + + + Include files with layout 'Note'. + Inkluder filer som er notater. + + + + Ignore the 'Include when building project' setting and include all files in the output. + Ignorer 'ta med ved eksport'-instilling og ta med alle filer i resultatet. + + + + Include novel files + Includer romanfiler + + + + Include note files + Inkluder notatfiler + + + + Ignore export flag + Ignorer 'ta med'-flagg + + + + Export Options + Eksportvalg + + + + Replace tabs with spaces + Erstatt tabulator-tegn + + + + Replace Unicode in HTML + Erstatt Unicode med HTML + + + + Build Preview + Forhåndsvisning + + + + Print + Skriv ut + + + + Print Preview + Forhåndsvisning av utskrift + + + + Print to PDF + Skriv ut til PDF + + + + Save As + Lagre som + + + + Open Document (.odt) + + + + + Flat Open Document (.fodt) + + + + + novelWriter HTML (.htm) + + + + + novelWriter Markdown (.nwd) + + + + + Standard Markdown (.md) + + + + + GitHub Markdown (.md) + + + + + JSON + novelWriter HTML (.json) + + + + + JSON + novelWriters Markdown (.json) + + + + + Close + Lukk + + + + Failed to generate preview. The result is too big. + + + + + There were problems when building the project + + + + + Open Document + + + + + Flat Open Document + + + + + Plain HTML + Enkel HTML + + + + novelWriter Markdown + + + + + Standard Markdown + + + + + GitHub Markdown + + + + + JSON + novelWriter HTML + + + + + JSON + novelWriter Markdown + + + + + PDF + + + + + Save Document As + Lagre domunent som + + + + Unknown format + Ukjent format + + + + {0} file successfully written to: + Lagring av {0} var vellykket, og filen ble skrevet til: + + + + Failed to write {0} file. {1} + Misslykkes i å skrive {0} til. {1} + + + + Styling Options + Styling + + + + GuiBuildNovelDocView + + + This area will show the content of the document to be exported or printed. Press the "Build Preview" button to generate content. + + + + + Unknown + Ukjent + + + + <b>Build Time:</b> {0} + <b>Bygget den:</b> {0} + + + + GuiDocEditFooter + + + Status + Status + + + + Line: {0} ({1}) + Linje: {0} ({1}) + + + + Words: {0} ({1}) + Ord: {0} ({1}) + + + + Document size is {0} bytes + Dokumentet er {0} byte + + + + GuiDocEditHeader + + + Edit document meta + Rediger dokumentinstillinger + + + + Search document + Søk i dokumentet + + + + Toggle Focus Mode + Slå av/på "fokus modus" + + + + Close the document + Lukk dokumentet + + + + GuiDocEditSearch + + + Search + Søk + + + + Replace + Erstatt + + + + Case Sensitive + Skill store/små bokstaver + + + + Match case + Søket skiller mellom store og små bokstaver + + + + Whole Words Only + Kun hele ord + + + + Match whole words + Søk kun etter hele ord + + + + RegEx Mode + RegEx modus + + + + Search using regular expressions + Søk ved hjelp av "regular expressions" + + + + Loop Search + Søk rundt + + + + Loop the search when reaching the end + Begynn søket på nytt når enden er nådd + + + + Search Next File + Søk neste file + + + + Continue searching in the next file + Fortsett søket i neste fil + + + + Preserve Case + Behold store/små bokstaver + + + + Preserve case on replace + Behold store og små bokstaver på samme sted ved erstatt + + + + Close Search + Lukk søk + + + + Close the search box [{0}] + Lukk søkeboksen [{0}] + + + + Show/hide the replace text box + Vis/skjul erstatt-boksen + + + + Find in current document + Søk i det åpne dokumentet + + + + Find and replace in current document + Søk og erstatt i det åpne dokumentet + + + + GuiDocEditor + + + The document you are trying to open is too big. The document size is {0} MB. The maximum size allowed is {1} MB. + + + + + The text you are trying to add is too big. The text size is {0} MB. The maximum size allowed is {1} MB. + + + + + Spell check complete + + + + + File Location + + + + + The currently open file is saved in: + + + + + The document has grown too big and you cannot add more text to it. The maximum size of a single novelWriter document is {0} MB. + + + + + Follow Tag + + + + + Cut + Klipp + + + + Copy + Kopier + + + + Paste + Lim + + + + Select All + Velg alt + + + + Select Word + Velg ord + + + + Select Paragraph + Velg avsnitt + + + + Spelling Suggestion(s) + Forslag, stavekontroll + + + + No Suggestions + Ingen forslag + + + + Add Word to Dictionary + Legg til ord i ordbok + + + + Please selection some text before calling replace quotes. + + + + + GuiDocMerge + + + Merge Documents + + + + + Documents to Merge + + + + + Drag and drop items to change the order. + + + + + Cancel + Avbryt + + + + No source documents found. Nothing to do. + + + + + No source document selected. Nothing to do. + + + + + Could not parse source document. + + + + + Element selected in the project tree must be a folder. + + + + + OK + OK + + + + GuiDocSplit + + + Split Document + + + + + Document Headers + + + + + Select the maximum level to split into files. + + + + + Split on Header Level 1 (Title) + + + + + Split up to Header Level 2 (Chapter) + + + + + Split up to Header Level 3 (Scene) + + + + + Split up to Header Level 4 (Section) + + + + + Cancel + Avbryt + + + + No source document selected. Nothing to do. + + + + + Could not parse source document. + + + + + No headers found. Nothing to do. + + + + + Cannot add new folder for the document split. Maximum folder depth has been reached. Please move the file to another level in the project tree. + + + + + The document will be split into {0} file(s) in a new folder. The original document will remain intact. + + + + + Continue with the splitting process? + + + + + Element selected in the project tree must be a file. + + + + + OK + OK + + + + GuiDocViewFooter + + + Show/hide the references panel + + + + + Activate to freeze the content of the references panel when changing document + + + + + Show comments + + + + + Show synopsis comments + + + + + References + + + + + Sticky + + + + + Comments + + + + + Synopsis + Sammendrag + + + + GuiDocViewHeader + + + Go backward + + + + + Go forward + + + + + Reload the document + + + + + Close the document + Lukk dokumentet + + + + GuiDocViewer + + + An error occurred while generating the preview. + + + + + Could not find the reference for tag '{0}'. It either doesn't exist, or the index is out of date. The index can be updated from the Tools menu, or by pressing {1}. + + + + + Copy + Kopier + + + + Select All + Velg alt + + + + Select Word + Velg ord + + + + Select Paragraph + Velg avsnitt + + + + GuiIcons + + + Could not load theme config file. + Kunne ikke laste temaets konfigurasjonsfil. + + + + GuiItemDetails + + + Label + Navn + + + + Status + Status + + + + Class + + + + + Layout + + + + + Characters + Karakter + + + + Words + Ord + + + + Paragraphs + Avsnitt + + + + GuiItemEditor + + + Item Settings + + + + + Include when building project + + + + + Cancel + Avbryt + + + + Label + Navn + + + + Status + Status + + + + Layout + + + + + OK + OK + + + + GuiMain + + + Project + Prosjekt + + + + Novel + Roman + + + + Project Details + Prosjektdetaljer + + + + Writing Statistics + Statistikk + + + + Project Settings + Prosjektinstillinger + + + + Editor + Editor + + + + Outline + Disposisjon + + + + Cannot create new project when another project is open. + + + + + A project already exists in that location. Please choose another folder. + + + + + New project created ... + + + + + Close Project + Lukke prosjektet + + + + Close the current project? + Ønsker du å lukke dette prosjektet? + + + + Changes are saved automatically. + Endringer lagres automatisk. + + + + Backup Project + + + + + Backup the current project? + + + + + The project was locked by the computer '{0}' ({1} {2}), last active on {3}. + + + + + Project Locked + Prosjektlås + + + + The project is already open by another instance of novelWriter, and is therefore locked. Override lock and continue anyway? + + + + + Note: If the program or the computer previously crashed, the lock can safely be overridden. If, however, another instance of novelWriter has the project open, overriding the lock may corrupt the project, and is not recommended. + + + + + The project index is outdated or broken. Rebuilding index. + + + + + Text files ({0}) + Tekstfiler ({0}) + + + + Markdown files ({0}) + Markdown-filer ({0}) + + + + novelWriter files ({0}) + novelWriter-filer ({0}) + + + + All files ({0}) + Alle filer ({0}) + + + + Import File + Importer fil + + + + Could not read file. The file must be an existing text file. + + + + + Please open a document to import the text file into. + + + + + Import Document + Importer dokument + + + + Importing the file will overwrite the current content of the document. Do you want to proceed? + + + + + Indexing: '{0}' + Indekserer: '{0}' + + + + Unknown item + Ukjent enhet + + + + Indexing completed in {0} ms + Indekseringen to {0} ms + + + + The project index has been successfully rebuilt. + Prosjektets indeks har blitt bygget på nytt. + + + + Save novelWriter Project + Lagre novelWriter-prosjektet + + + + Information + Informasjon + + + + Warning + Advarsel + + + + Error + Feil + + + + This is a bug! + Dette er en systemfeil! + + + + Internal Error + Intern feil + + + + Exit + Avslutt + + + + Do you want to exit novelWriter? + Ønsker du å avslutte novelWriter? + + + + novelWriter is ready ... + + + + + GuiMainMenu + + + &Project + + + + + New Project + Nytt Prosjekt + + + + Create new project + + + + + Open Project + + + + + Open project + + + + + Save Project + + + + + Save project + + + + + Close Project + Lukke prosjektet + + + + Close project + + + + + Project Settings + Prosjektinstillinger + + + + Project settings + + + + + Project Details + Prosjektdetaljer + + + + Project details + + + + + Create Root Folder + + + + + Novel Root + + + + + Plot Root + + + + + Character Root + + + + + Location Root + + + + + Timeline Root + + + + + Object Root + + + + + Entity Root + + + + + Custom Root + + + + + Outtakes Root + + + + + Create Folder + + + + + Create folder + + + + + Edit Item + + + + + Change project item settings + + + + + Delete Item + + + + + Delete selected project item + + + + + Move Item Up + + + + + Move project item up + + + + + Move Item Down + + + + + Move project item down + + + + + Undo Last Move + + + + + Undo last item move + + + + + Empty Trash + Tøm søpla + + + + Permanently delete all files in the Trash folder + + + + + Exit + Avslutt + + + + Exit novelWriter + + + + + &Document + + + + + New Document + + + + + Create new document + + + + + Open Document + + + + + Open selected document + + + + + Save Document + + + + + Save current document + + + + + Close Document + + + + + Close current document + + + + + View Document + + + + + View document as HTML + + + + + Close Document View + + + + + Close document view pane + + + + + Show File Details + + + + + Shows a message box with the document location in the project folder + + + + + Import from File + + + + + Import document from a text or markdown file + + + + + Merge Folder to Document + + + + + Merge a folder of documents to a single document + + + + + Split Document to Folder + + + + + Split a document into a folder of multiple documents + + + + + &Edit + + + + + Undo + + + + + Undo last change + + + + + Redo + + + + + Redo last change + + + + + Cut + Klipp + + + + Cut selected text + + + + + Copy + Kopier + + + + Copy selected text + + + + + Paste + Lim + + + + Paste text from clipboard + + + + + Select All + Velg alt + + + + Select all text in document + + + + + Select Paragraph + Velg avsnitt + + + + Select all text in paragraph + + + + + &View + + + + + Focus Project Tree + + + + + Move focus to project tree + + + + + Focus Document Editor + + + + + Move focus to left document pane + + + + + Focus Document Viewer + + + + + Move focus to right document pane + + + + + Focus Outline + + + + + Move focus to outline + + + + + Go Backward + + + + + Move backward in the view history of the right pane + + + + + Go Forward + + + + + Move forward in the view history of the right pane + + + + + Focus Mode + + + + + Toggles a distraction free mode, only showing text editor + + + + + Full Screen Mode + + + + + Maximises the main window + + + + + &Insert + + + + + Dashes + + + + + Short Dash + + + + + Insert short dash (en dash) + + + + + Long Dash + + + + + Insert long dash (em dash) + + + + + Horizontal Bar + + + + + Insert a horizontal bar (quotation dash) + + + + + Figure Dash + + + + + Insert figure dash (same width as a number character) + + + + + Quote Marks + + + + + Left Single Quote + + + + + Insert left single quote + + + + + Right Single Quote + + + + + Insert right single quote + + + + + Left Double Quote + + + + + Insert left double quote + + + + + Right Double Quote + + + + + Insert right double quote + + + + + Alternative Apostrophe + + + + + Insert modifier letter single apostrophe + + + + + General Punctuation + + + + + Ellipsis + + + + + Insert ellipsis + + + + + Prime + + + + + Insert a prime symbol + + + + + Double Prime + + + + + Insert a double prime symbol + + + + + Breaks and Spaces + + + + + Hard Line Break + + + + + Insert a hard line break + + + + + Non-Breaking Space + + + + + Insert a non-breaking space + + + + + Thin Space + + + + + Insert a thin space + + + + + Thin Non-Breaking Space + + + + + Insert a thin non-breaking space + + + + + Other Symbols + + + + + List Bullet + + + + + Insert a list bullet + + + + + Hyphen Bullet + + + + + Insert a hyphen bullet (alternative bullet) + + + + + Flower Mark + + + + + Insert a flower mark (alternative bullet) + + + + + Per Mille + + + + + Insert a per mille symbol + + + + + Degree Symbol + + + + + Insert a degree symbol + + + + + Minus Sign + + + + + Insert a minus sign (not a hypen or dash) + + + + + Times Sign + + + + + Insert a times sign (multiplication cross) + + + + + Division Sign + + + + + Insert a division sign + + + + + Tags and References + + + + + &Search + + + + + Find + + + + + Find text in document + + + + + Replace + Erstatt + + + + Replace text in document + + + + + Find Next + + + + + Find next occurrence of text in document + + + + + Find Previous + + + + + Find previous occurrence of text in document + + + + + Replace Next + + + + + Find and replace next occurrence of text in document + + + + + &Format + + + + + Emphasis + + + + + Add emphasis to selected text (italic) + + + + + Strong Emphasis + + + + + Add strong emphasis to selected text (bold) + + + + + Strikethrough + + + + + Add strikethrough to selected text + + + + + Wrap Double Quotes + + + + + Wrap selected text in double quotes + + + + + Wrap Single Quotes + + + + + Wrap selected text in single quotes + + + + + Header 1 + + + + + Change the block format to Header 1 + + + + + Header 2 + + + + + Change the block format to Header 2 + + + + + Header 3 + + + + + Change the block format to Header 3 + + + + + Header 4 + + + + + Change the block format to Header 4 + + + + + Comment + + + + + Change the block format to comment + + + + + Remove Block Format + + + + + Strips block format + + + + + Replace Single Quotes + + + + + Replace all straight single quotes in selected text + + + + + Replace Double Quotes + + + + + Replace all straight double quotes in selected text + + + + + &Tools + + + + + Check Spelling + + + + + Toggle check spelling + + + + + Re-Run Spell Check + + + + + Run the spell checker on current document + + + + + Project Word List + + + + + Edit the project's word list + + + + + Rebuild Index + + + + + Rebuild the tag indices and word counts + + + + + Rebuild Outline + + + + + Rebuild the novel outline tree + + + + + Auto-Update Outline + + + + + Update project outline when a novel file is changed + + + + + Backup Project Folder + + + + + Backup Project + + + + + Build Novel Project + Bygg Romanprosjekt + + + + Launch the Build novel project tool + + + + + Writing Statistics + Statistikk + + + + Show the writing statistics dialog + + + + + Preferences + Instillinger + + + + &Help + + + + + About novelWriter + Om novelWriter + + + + About Qt5 + + + + + Documentation (Local) + + + + + View local documentation with Qt Assistant + + + + + Documentation (Online) + + + + + View online documentation at {0} + + + + + Report an Issue (GitHub) + + + + + Report a bug or issue on GitHub at {0} + + + + + Ask a Question (GitHub) + + + + + Ask a question on GitHub at {0} + + + + + Latest Release (GitHub) + + + + + Open the Releases page on GitHub at {0} + + + + + The novelWriter Website + + + + + Open the novelWriter website at {0} + + + + + GuiMainStatus + + + None + Ingen + + + + Editor + Editor + + + + Project + Prosjekt + + + + Session Time + + + + + Words: {0} ({1}) + Ord: {0} ({1}) + + + + Project word count (session change) + + + + + GuiNovelTree + + + Title + Tittel + + + + Words + Ord + + + + POV + Synsv. + + + + Section title + Seksjonens tittel + + + + Word count + Antall ord + + + + Point-of-view character + Synsvinkel-karakter + + + + GuiOutlineDetails + + + Title + Tittel + + + + Chapter + Kapittel + + + + Scene + Scene + + + + Section + Seksjon + + + + Document + Dokument + + + + Status + Status + + + + Characters + Karakter + + + + Words + Ord + + + + Paragraphs + Avsnitt + + + + Synopsis + Sammendrag + + + + Title Details + Oversikt + + + + Reference Tags + Referanser + + + + GuiOutlineHeaderMenu + + + Select Columns + Velg kolonner + + + + GuiPreferences + + + Preferences + Instillinger + + + + General + Generelt + + + + Projects + Prosjekt + + + + Documents + Dokument + + + + Editor + Editor + + + + Highlighting + Farger + + + + Automation + Automasjon + + + + Cancel + Avbryt + + + + Some changes will not be applied until novelWriter has been restarted. + Noen endringer vil ikke tas i bruk før neste gang novelWriter startes. + + + + OK + OK + + + + GuiPreferencesAutomation + + + Automatic Features + + + + + Auto-select word under cursor + + + + + Apply formatting to word under cursor if no selection is made. + + + + + Auto-replace text as you type + + + + + Allow the editor to replace symbols as you type. + + + + + Replace as You Type + + + + + Auto-replace single quotes + + + + + Try to guess which is an opening or a closing single quote. + + + + + Auto-replace double quotes + + + + + Try to guess which is an opening or a closing double quote. + + + + + Auto-replace dashes + + + + + Double and triple hyphens become short and long dashes. + + + + + Auto-replace dots + + + + + Three consecutive dots become ellipsis. + + + + + Quotation Style + + + + + Single quote open style + + + + + The symbol to use for a leading single quote. + + + + + Single quote close style + + + + + The symbol to use for a trailing single quote. + + + + + Double quote open style + + + + + The symbol to use for a leading double quote. + + + + + Double quote close style + + + + + The symbol to use for a trailing double quote. + + + + + GuiPreferencesDocuments + + + Text Style + + + + + Font family + Skriftfamilie + + + + Font for the document editor and viewer. + + + + + Font size + Skriftstørrelse + + + + Font size for the document editor and viewer. + + + + + pt + + + + + Text Flow + + + + + Maximum text width in "Normal Mode" + + + + + Horizontal margins are scaled automatically. + + + + + px + + + + + Maximum text width in "Focus Mode" + + + + + Disable maximum text width in "Normal Mode" + + + + + Text width is defined by the margins only. + + + + + Hide document footer in "Focus Mode" + + + + + Hide the information bar at the bottom of the document. + + + + + Justify the text margins in editor and viewer + + + + + Lay out text with straight edges in the editor and viewer. + + + + + Text margin + + + + + If maximum width is set, this becomes the minimum margin. + + + + + Tab width + + + + + The width of a tab key press in the editor and viewer. + + + + + GuiPreferencesEditor + + + Spell Checking + + + + + Internal + + + + + Spell check provider + + + + + Note that the internal spell check tool is quite slow. + + + + + Spell check language + + + + + Available languages are determined by your system. + + + + + Big document limit + + + + + Full spell checking is disabled above this limit. + + + + + kB + + + + + Word Count + + + + + Word count interval + + + + + How often the word count is updated. + + + + + seconds + + + + + Writing Guides + + + + + Show tabs and spaces + + + + + Add symbols to indicate tabs and spaces in the editor. + + + + + Show line endings + + + + + Add a symbol to indicate line endings in the editor. + + + + + Scroll Behaviour + + + + + Scroll past end of the document + + + + + Also improves trypewriter scrolling for short documents. + + + + + Typewriter style scrolling when you type + + + + + Try to keep the cursor at a fixed vertical position. + + + + + Minimum position for Typewriter scrolling + + + + + Percentage of the editor height from the top. + + + + + GuiPreferencesGeneral + + + Look and Feel + + + + + Main GUI theme + + + + + Changing this requires restarting novelWriter. + + + + + Main icon theme + + + + + Prefer icons for dark backgrounds + + + + + May improve the look of icons on dark themes. + + + + + Font family + Skriftfamilie + + + + Font size + Skriftstørrelse + + + + pt + + + + + GUI Settings + + + + + Show full path in document header + + + + + Add the parent folder names to the header. + + + + + Hide vertical scroll bars in main windows + + + + + Scrolling available with mouse wheel and keys only. + + + + + Hide horizontal scroll bars in main windows + + + + + GuiPreferencesProjects + + + Automatic Save + + + + + Save document interval + + + + + How often the open document is automatically saved. + + + + + seconds + + + + + Save project interval + + + + + How often the open project is automatically saved. + + + + + Project Backup + + + + + Browse + + + + + Backup storage location + + + + + Path: {0} + + + + + Run backup when the project is closed + + + + + Can be overridden for individual projects in project settings. + + + + + Ask before running backup + + + + + If off, backups will run in the background. + + + + + Session Timer + + + + + Pause the session timer when not writing + + + + + Also pauses when the application window does not have focus. + + + + + Editor inactive time before pausing timer + + + + + User activity includes typing and changing the content. + + + + + minutes + + + + + Backup Directory + + + + + GuiPreferencesSyntax + + + Highlighting Theme + + + + + Highlighting theme + + + + + Colour theme to apply to the editor and viewer. + + + + + Quotes & Dialogue + + + + + Highlight text wrapped in quotes + + + + + Applies to single, double and straight quotes. + + + + + Allow open-ended single quotes + + + + + Highlight single-quoted line with no closing quote. + + + + + Allow open-ended double quotes + + + + + Highlight double-quoted line with no closing quote. + + + + + Text Emphasis + + + + + Add highlight colour to emphasised text + + + + + Applies to emphasis (italic) and strong (bold). + + + + + GuiProjectDetails + + + Project Details + Prosjektdetaljer + + + + Overview + + + + + Contents + + + + + Close + Lukk + + + + GuiProjectDetailsContents + + + Title + Tittel + + + + Words + Ord + + + + Pages + + + + + Page + + + + + Progress + + + + + Typical word count for a 5 by 8 inch book page with 11 pt font is 350. + + + + + Start counting page numbers from this page. + + + + + Assume a new chapter or partition always start on an odd numbered page. + + + + + Words per page + + + + + Count pages from + + + + + Clear double pages + + + + + Table of Contents + + + + + END + + + + + GuiProjectDetailsMain + + + Working Title: {0} + + + + + By {0} + + + + + Words + Ord + + + + Chapters + + + + + Scenes + + + + + Revisions + + + + + Editing Time + + + + + Path + + + + + GuiProjectEditMain + + + Project Settings + Prosjektinstillinger + + + + Working title + + + + + Should be set only once. + + + + + Novel title + + + + + Change whenever you want! + + + + + Author(s) + + + + + One name per line. + + + + + Default + + + + + Spell check language + + + + + Overrides main preferences. + + + + + No backup on close + + + + + GuiProjectEditReplace + + + Keyword + + + + + Replace With + + + + + Save entry + + + + + Add new entry + + + + + Delete selected entry + + + + + Text Replace List for Preview and Export + + + + + GuiProjectEditStatus + + + New + Ny + + + + Delete + + + + + Save + + + + + Colour + + + + + Name + + + + + Novel File Status Levels + + + + + Note File Importance Levels + + + + + Select Colour + + + + + New Item + + + + + Cannot delete status item that is in use. + + + + + {0} [{1}] + + + + + GuiProjectLoad + + + Open Project + + + + + Working Title + + + + + Words + Ord + + + + Last Opened + + + + + Recently Opened Projects + + + + + Path + + + + + Open + + + + + Cancel + Avbryt + + + + New + Ny + + + + Remove + + + + + novelWriter Project File ({0}) + + + + + All files ({0}) + Alle filer ({0}) + + + + Open novelWriter Project + + + + + Remove Entry + + + + + Remove '{0}' from the recent projects list? The project files will not be deleted. + + + + + GuiProjectSettings + + + Project Settings + Prosjektinstillinger + + + + Settings + + + + + Status + Status + + + + Importance + + + + + Auto-Replace + + + + + Cancel + Avbryt + + + + OK + OK + + + + GuiProjectTree + + + Label + Navn + + + + Words + Ord + + + + Inc + Inkl + + + + Flags + Flagg + + + + Item label + Enhetens navn + + + + Word count + Antall ord + + + + Include in build + Ta med ved eksport + + + + Status, class, and layout flags + Flagg for status, klasse, og format + + + + Please select a valid location in the tree to add the document. + + + + + Please select a valid location in the tree to add the folder. + + + + + Did not find anywhere to add the file or folder! + + + + + Cannot add new files or folders to the {0} folder. + + + + + New File + Ny fil + + + + Cannot add new folder to this item. + + + + + Maximum folder depth has been reached. + + + + + New Folder + Ny mappe + + + + There is currently no Trash folder in this project. + + + + + The Trash folder is already empty. + + + + + Empty Trash + Tøm søpla + + + + Permanently delete {0} file(s) from Trash? + + + + + Delete File + Slett fil + + + + Permanently delete file '{0}'? + + + + + Move file '{0}' to Trash? + + + + + Cannot delete folder. It is not empty. Recursive deletion is not supported. Please delete the content first. + + + + + Cannot delete root folder. It is not empty. Recursive deletion is not supported. Please delete the content first. + + + + + The item cannot be moved to that location. + + + + + There is nowhere to add item with name '{0}' + + + + + GuiProjectTreeMenu + + + Edit Project Item + + + + + Open Document + + + + + View Document + + + + + Toggle Included Flag + + + + + New File + Ny fil + + + + New Folder + Ny mappe + + + + Delete Item + + + + + Empty Trash + Tøm søpla + + + + Move Item Up + + + + + Move Item Down + + + + + GuiTheme + + + Could not load theme config file. + Kunne ikke laste temaets konfigurasjonsfil. + + + + Could not load syntax file. + + + + + GuiWordList + + + Project Word List + + + + + Add new entry + + + + + Delete selected entry + + + + + Save + + + + + Close + Lukk + + + + Cannot add a blank word. + + + + + The word '{0}' is already in the word list. + + + + + GuiWritingStats + + + Writing Statistics + Statistikk + + + + Session Start + + + + + Length + + + + + Idle + + + + + Words + Ord + + + + Histogram + + + + + Sum Totals + + + + + Total Time: + + + + + Idle Time: + + + + + Filtered Time: + + + + + Novel Word Count: + + + + + Notes Word Count: + + + + + Total Word Count: + + + + + Filters + + + + + Count novel files + + + + + Count note files + + + + + Hide zero word count + + + + + Hide negative word count + + + + + Group entries by day + + + + + Show idle time + + + + + Word count cap for the histogram + + + + + Close + Lukk + + + + Save As + Lagre som + + + + JSON Data File (.json) + + + + + CSV Data File (.csv) + + + + + JSON Data File + + + + + CSV Data File + + + + + Save Document As + Lagre domunent som + + + + Failed to read session log file. + + + + + NWDoc + + + Failed to open document file. + + + + + Opened Document: {0} + + + + + Could not save document. + + + + + Saved Document: {0} + + + + + Could not delete document file. + + + + + NWErrorMessage + + + Close + Lukk + + + + NWProject + + + Trash + Søppel + + + + New + Ny + + + + Note + Notat + + + + Draft + Utkast + + + + Finished + Ferdig + + + + Minor + Mindre + + + + Major + Større + + + + Main + Hoved + + + + New Project + Nytt Prosjekt + + + + By + Av + + + + Novel + Roman + + + + Plot + Plott + + + + Characters + Karakterer + + + + World + Verden + + + + Title Page + Tittelside + + + + New Chapter + Nytt Kapittel + + + + New Scene + Ny Scene + + + + Chapter {0} + Kapittel {0} + + + + Scene {0} + Scene {0} + + + + File not found: {0} + + + + + Failed to parse project xml. + + + + + Attempting to open backup project file instead. + + + + + Unknown + Ukjent + + + + Project file does not appear to be a novelWriterXML file. + + + + + Old Project Version + + + + + The project file and data is created by a novelWriter version lower than 0.7. Do you want to upgrade the project to the most recent format? + + + + + Note that after the upgrade, you cannot open the project with an older version of novelWriter any more, so make sure you have a recent backup. + + + + + Unknown or unsupported novelWriter project file format. The project cannot be opened by this version of novelWriter. The file was saved with novelWriter version {0}. + + + + + Version Conflict + + + + + This project was saved by a newer version of novelWriter, version {0}. This is version {1}. If you continue to open the project, some attributes and settings may not be preserved, but the overall project should be fine. Continue opening the project? + + + + + Opened Project: {0} + + + + + Project path not set, cannot save project. + + + + + Failed to save project. + + + + + Saved Project: {0} + + + + + Backing up project ... + + + + + Cannot backup project because no backup path is set. Please set a valid backup location in Tools > Preferences. + + + + + Cannot backup project because no project name is set. Please set a Working Title in Project > Project Settings. + + + + + Cannot backup project because the backup path does not exist. Please set a valid backup location in Tools > Preferences. + + + + + Could not create backup folder. + + + + + Cannot backup project because the backup path is within the project folder to be backed up. Please choose a different backup path in Tools > Preferences. + + + + + Backup from {0} + + + + + Backup archive file written to: {0} + + + + + Could not write backup archive. + + + + + Project backed up to '{0}' + + + + + Failed to create a new example project. + + + + + Failed to create a new example project. Could not find the necessary files. They seem to be missing from this installation. + + + + + Could not create new project folder. + + + + + New project folder is not empty. Each project requires a dedicated project folder. + + + + + You must set a valid backup path in preferences to use the automatic project backup feature. + + + + + You must set a valid project name in project settings to use the automatic project backup feature. + + + + + and + og + + + + Found {0} orphaned file(s) in project folder. + + + + + Recovered + Gjennopprettet + + + + [{0}] {1} + + + + + Recovered File {0} + Gjennopprettet fil {0} + + + + One or more orphaned files could not be added back into the project. Make sure at least a Novel root folder exists. + Én eller flere gjennopprettede filer kunne ikke bli lagt til i posjektet. Pass på at "Roman"-mappen i det minste eksisterer. + + + + Not a folder: {0} + Ikke en mappe: {0} + + + + Could not move: {0} + Kunne ikke flytte: {0} + + + + Could not delete: {0} + Kunne ikke slette: {0} + + + + Could not make folder: {0} + Kunne ikke lage mappe: {0} + + + + Could not move item {0} to {1}. + Kunne ikke flytte {0} til {1}. + + + + Chapter + Kapittel + + + + ProjWizardCustomPage + + + Custom Project Options + + + + + Select which additional root folders to make, and how to populate the Novel folder. If you don't want to add chapters or scenes, set the values to 0. You can add scenes without chapters. + + + + + Additional Root Folders + + + + + {0} folder + + + + + Populate Novel Folder + + + + + Add chapters + + + + + Scenes (per chapter) + + + + + Add chapter folders + + + + + ProjWizardFinalPage + + + Finished + Ferdig + + + + All done. + + + + + Press '{0}' to create the new project. + + + + + Done + + + + + Finish + + + + + ProjWizardFolderPage + + + Select Project Folder + + + + + Select a location to store the project. A new project folder will be created in the selected location. + + + + + Required + + + + + Project Path + + + + + ProjWizardIntroPage + + + Create New Project + + + + + Provide at least a working title. The working title should not be change beyond this point as it is used by the application for generating file names for for instance backups. The other fields are optional and can be changed at any time in Project Settings. + + + + + Side image by {0}, {1} + + + + + Required + + + + + Optional + + + + + Optional. One name per line. + + + + + Working Title + + + + + Novel Title + + + + + Author(s) + + + + + ProjWizardPopulatePage + + + Populate Project + + + + + Choose how to pre-fill the project. Either with a minimal set of starter items, an example project explaining and showing many of the features, or show further custom options on the next page. + + + + + Fill the project with a minimal set of items + + + + + Fill the project with example files + + + + + Show detailed options for filling the project + + + + + QuotesDialog + + + Cancel + Avbryt + + + + OK + OK + + + + Tokenizer + + + Document '{0}' is too big ({1} MB). Skipping. + Dokumentet '{0}' er for stort ({1} MB). Hopper over. + + + + ERROR + + + + diff --git a/i18n/nw_pt.ts b/i18n/nw_pt.ts index cce1aeca..ec87932e 100644 --- a/i18n/nw_pt.ts +++ b/i18n/nw_pt.ts @@ -1,5 +1,6 @@ - + + Constant @@ -678,6 +679,11 @@ JSON + novelWriter Markdown JSON + Markdown do novelWriter + + + Styling Options + + GuiBuildNovelDocView @@ -966,16 +972,16 @@ Element selected in the project tree must be a folder. O elemento selecionado na árvore do projeto deve ser um diretório. - - - Ok - OK - Cancel Cancelar + + + OK + OK + GuiDocSplit @@ -1049,16 +1055,16 @@ The document will be split into {0} file(s) in a new folder. The original document will remain intact. O documento será dividio em {0} arquivo(s) em um novo diretório. O documento original será mantido intacto. - - - Ok - OK - Cancel Cancelar + + + OK + OK + GuiDocViewFooter @@ -1232,16 +1238,16 @@ Layout Leiaute - - - Ok - OK - Cancel Cancelar + + + OK + OK + GuiMain @@ -1450,6 +1456,11 @@ All files ({0}) Todos os arquivos ({0}) + + + novelWriter is ready ... + + GuiMainMenu @@ -2733,16 +2744,16 @@ Automation Automação - - - Ok - OK - Cancel Cancelar + + + OK + OK + GuiPreferencesAutomation @@ -3740,16 +3751,16 @@ Auto-Replace Substituição Automática - - - Ok - OK - Cancel Cancelar + + + OK + OK + GuiProjectTree @@ -4184,11 +4195,6 @@ Trash Lixeira - - - Chapter %ch%: %title% - Capítulo %ch%: %title% - New @@ -4489,6 +4495,11 @@ and e + + + Chapter + Capítulo + ProjWizardCustomPage @@ -4662,16 +4673,16 @@ QuotesDialog - - - Ok - OK - Cancel Cancelar + + + OK + OK + Tokenizer From 51564d1adc5723e98257e5aac6332772bea6e62e Mon Sep 17 00:00:00 2001 From: "Veronica K. B. Olsen" <1619840+vkbo@users.noreply.github.com> Date: Wed, 17 Feb 2021 10:08:48 +0100 Subject: [PATCH 04/13] Rename nb-NO to nb_NO --- i18n/{nw_nb-NO.ts => nw_nb_NO.ts} | 0 novelWriter.pro | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) rename i18n/{nw_nb-NO.ts => nw_nb_NO.ts} (100%) diff --git a/i18n/nw_nb-NO.ts b/i18n/nw_nb_NO.ts similarity index 100% rename from i18n/nw_nb-NO.ts rename to i18n/nw_nb_NO.ts diff --git a/novelWriter.pro b/novelWriter.pro index ccf57676..a21751e1 100644 --- a/novelWriter.pro +++ b/novelWriter.pro @@ -31,4 +31,4 @@ SOURCES += \ TRANSLATIONS += \ i18n/nw_pt.ts \ - i18n/nw_nb-NO.ts + i18n/nw_nb_NO.ts From 35b8e389a34514baa1bcfc8f231568a40bbce676 Mon Sep 17 00:00:00 2001 From: "Veronica K. B. Olsen" <1619840+vkbo@users.noreply.github.com> Date: Wed, 17 Feb 2021 12:14:57 +0100 Subject: [PATCH 05/13] The project language files should obviously also be in the i18n folder --- {nw/assets/lang => i18n}/project_en.json | 0 {nw/assets/lang => i18n}/project_nb_NO.json | 0 {nw/assets/lang => i18n}/project_nn_NO.json | 0 nw/config.py | 4 +--- nw/core/project.py | 6 +++--- nw/core/toodt.py | 2 +- 6 files changed, 5 insertions(+), 7 deletions(-) rename {nw/assets/lang => i18n}/project_en.json (100%) rename {nw/assets/lang => i18n}/project_nb_NO.json (100%) rename {nw/assets/lang => i18n}/project_nn_NO.json (100%) diff --git a/nw/assets/lang/project_en.json b/i18n/project_en.json similarity index 100% rename from nw/assets/lang/project_en.json rename to i18n/project_en.json diff --git a/nw/assets/lang/project_nb_NO.json b/i18n/project_nb_NO.json similarity index 100% rename from nw/assets/lang/project_nb_NO.json rename to i18n/project_nb_NO.json diff --git a/nw/assets/lang/project_nn_NO.json b/i18n/project_nn_NO.json similarity index 100% rename from nw/assets/lang/project_nn_NO.json rename to i18n/project_nn_NO.json diff --git a/nw/config.py b/nw/config.py index 7daeb540..037520c8 100644 --- a/nw/config.py +++ b/nw/config.py @@ -76,7 +76,6 @@ class Config: self.themeRoot = None # The full path to the nw/assets/themes folder self.dictPath = None # The full path to the nw/assets/dict folder self.iconPath = None # The full path to the nw/assets/icons folder - self.langPath = None # The full path to the nw/assets/lang folder self.helpPath = None # The full path to the novelwriter .qhc help file # Runtime Settings and Variables @@ -298,7 +297,6 @@ class Config: self.themeRoot = os.path.join(self.assetPath, "themes") self.dictPath = os.path.join(self.assetPath, "dict") self.iconPath = os.path.join(self.assetPath, "icons") - self.langPath = os.path.join(self.assetPath, "lang") self.appIcon = os.path.join(self.iconPath, "novelwriter.svg") # Internationalisation @@ -384,7 +382,7 @@ class Config: for lngPath, lngBase in langList: for lngCode in self.qLocal.uiLanguages(): qTrans = QTranslator() - lngFile = "%s_%s" % (lngBase, lngCode) + lngFile = "%s_%s" % (lngBase, lngCode.replace("-", "_")) if lngFile not in self.qtTrans: if qTrans.load(lngFile, lngPath): logger.debug("Loaded: %s" % qTrans.filePath()) diff --git a/nw/core/project.py b/nw/core/project.py index bf0271c6..3c06ce73 100644 --- a/nw/core/project.py +++ b/nw/core/project.py @@ -1254,9 +1254,9 @@ class NWProject(): theLang = "en" lngShort = theLang.split("_")[0] - loadFile = os.path.join(self.mainConf.langPath, "project_en.json") - chkFile1 = os.path.join(self.mainConf.langPath, "project_%s.json" % theLang) - chkFile2 = os.path.join(self.mainConf.langPath, "project_%s.json" % lngShort) + loadFile = os.path.join(self.mainConf.nwLangPath, "project_en.json") + chkFile1 = os.path.join(self.mainConf.nwLangPath, "project_%s.json" % theLang) + chkFile2 = os.path.join(self.mainConf.nwLangPath, "project_%s.json" % lngShort) if os.path.isfile(chkFile1): loadFile = chkFile1 diff --git a/nw/core/toodt.py b/nw/core/toodt.py index 0de95281..d1519a9d 100644 --- a/nw/core/toodt.py +++ b/nw/core/toodt.py @@ -563,7 +563,7 @@ class ToOdt(Tokenizer): ## if len(theText) != len(theFmt): - # Genrate dummy format if there isn't any + # Generate dummy format if there isn't any or it doesn't match theFmt = " "*len(theText) # XML functions From 6c877115958ca797babbf08ee3afdb948b144fec Mon Sep 17 00:00:00 2001 From: "Veronica K. B. Olsen" <1619840+vkbo@users.noreply.github.com> Date: Wed, 17 Feb 2021 12:32:00 +0100 Subject: [PATCH 06/13] Add internationalisation README --- i18n/README.md | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 i18n/README.md diff --git a/i18n/README.md b/i18n/README.md new file mode 100644 index 00000000..e3b54c6e --- /dev/null +++ b/i18n/README.md @@ -0,0 +1,52 @@ +# novelWriter Internationalisation + +The `i18n` folder contains the internationalisation files for novelWriter. +There are two types of files. The `nw_XX.qm` files are for localisation of the +main GUI, and the `project_XX.json` files are JSON files with translation maps +for the novelWriter projects. + +## GUI Localisation + +The `.qm` files are not generated by default. They can be built with: +```bash +python3 setup.py qtlrelease +``` + +To add a new translation file, please add a new entry in the `novelWriter.pro` +file under the `TRANSLATIONS` variable. Please use the underscore syntax for +file names as the importer expects this format. + +After adding the entry in the `.pro` file, run: +```bash +python3 setup.py qtlupdate +``` + +This will build a new `nw_XX.ts` file for the language you just added. The file +can then be edited with the Qt 5 Linguist application. Please select "English" +and "United Kingdom" as the source langauge when prompted. + +When you're done editing, you can build the `nw_XX.qm` file and test it in +novelWriter. + +**Note:** This requires that you have the tools Qt 5 Linguist and `pylupdate5` +installed on your system. + +## Project Localisation + +Projects can have a different language setting than the GUI itself. The files +with format `project_XX.json` are simple translation maps for text that goes +into the exported documents. + +The files are loaded based on the main GUI spell check language or the +project's spell check language. The project's spell check language takes +precedence over the GUI spell check language. + +Since these are used mainly as replacement lookups, they are maintained as +plain JSON files. The main usage is to generate chapter headers as number +words. + +There is no trick to using these files. Just copy the `project_en.json` file, +rename it, and edit it. Please use the underscore as separator if a language +needs to be localised to a specific country under a language. The importer will +for instance look for `en_GB` or `en_US` first, then use `en` if either is not +found. If there are no matching files, the project falls back to using English. From 185974a3ea2129a7dfb2efcdbe8d3a70da2e7340 Mon Sep 17 00:00:00 2001 From: "Veronica K. B. Olsen" <1619840+vkbo@users.noreply.github.com> Date: Wed, 17 Feb 2021 16:30:29 +0100 Subject: [PATCH 07/13] Add a basic project_pt.json file --- i18n/project_en.json | 2 +- i18n/project_nb_NO.json | 2 +- i18n/project_nn_NO.json | 2 +- i18n/project_pt.json | 5 +++++ 4 files changed, 8 insertions(+), 3 deletions(-) create mode 100644 i18n/project_pt.json diff --git a/i18n/project_en.json b/i18n/project_en.json index e1bfbb37..a0432c75 100644 --- a/i18n/project_en.json +++ b/i18n/project_en.json @@ -102,4 +102,4 @@ "97": "Ninety-Seven", "98": "Ninety-Eight", "99": "Ninety-Nine" -} \ No newline at end of file +} diff --git a/i18n/project_nb_NO.json b/i18n/project_nb_NO.json index 06ce164b..39010cf2 100644 --- a/i18n/project_nb_NO.json +++ b/i18n/project_nb_NO.json @@ -102,4 +102,4 @@ "97": "nittisju", "98": "nittiåtte", "99": "nittini" -} \ No newline at end of file +} diff --git a/i18n/project_nn_NO.json b/i18n/project_nn_NO.json index 1ee2f2ee..09b99a4e 100644 --- a/i18n/project_nn_NO.json +++ b/i18n/project_nn_NO.json @@ -102,4 +102,4 @@ "97": "nittisju", "98": "nittiåtte", "99": "nittini" -} \ No newline at end of file +} diff --git a/i18n/project_pt.json b/i18n/project_pt.json new file mode 100644 index 00000000..84dba670 --- /dev/null +++ b/i18n/project_pt.json @@ -0,0 +1,5 @@ +{ + "Synopsis": "Sinopse", + "Comment": "Comentários", + "Notes": "Notas" +} From 5a685474ffa2e0710c98ce579bafc5a984640c96 Mon Sep 17 00:00:00 2001 From: "Veronica K. B. Olsen" <1619840+vkbo@users.noreply.github.com> Date: Wed, 17 Feb 2021 16:31:37 +0100 Subject: [PATCH 08/13] Move the remanining two functions in the tools.py file to other source files --- nw/common.py | 23 ++++++ nw/core/__init__.py | 4 +- nw/core/index.py | 66 +++++++++++++++- nw/core/tokenizer.py | 2 +- nw/core/tools.py | 118 ---------------------------- nw/gui/projdetails.py | 2 +- tests/test_base/test_base_common.py | 29 ++++++- tests/test_core/test_core_index.py | 33 +++++++- tests/test_core/test_core_tools.py | 83 ------------------- 9 files changed, 149 insertions(+), 211 deletions(-) delete mode 100644 nw/core/tools.py delete mode 100644 tests/test_core/test_core_tools.py diff --git a/nw/common.py b/nw/common.py index 826f7370..4464f287 100644 --- a/nw/common.py +++ b/nw/common.py @@ -311,3 +311,26 @@ def getGuiItem(theName): if qWidget.objectName() == theName: return qWidget return None + +def numberToRoman(numVal, isLower=False): + """Convert an integer to a roman number. + """ + if not isinstance(numVal, int): + return "NAN" + if numVal < 1 or numVal > 4999: + return "OOR" + + theValues = [ + (1000, "M"), (900, "CM"), (500, "D"), (400, "CD"), (100, "C"), (90, "XC"), + (50, "L"), (40, "XL"), (10, "X"), (9, "IX"), (5, "V"), (4, "IV"), (1, "I"), + ] + + romNum = "" + for theDiv, theSym in theValues: + n = numVal//theDiv + romNum += n*theSym + numVal -= n*theDiv + if numVal <= 0: + break + + return romNum.lower() if isLower else romNum diff --git a/nw/core/__init__.py b/nw/core/__init__.py index be0aeeb2..f79492a3 100644 --- a/nw/core/__init__.py +++ b/nw/core/__init__.py @@ -1,17 +1,15 @@ # -*- coding: utf-8 -*- from nw.core.document import NWDoc -from nw.core.index import NWIndex +from nw.core.index import NWIndex, countWords from nw.core.project import NWProject from nw.core.spellcheck import NWSpellCheck, NWSpellEnchant, NWSpellSimple from nw.core.tohtml import ToHtml from nw.core.toodt import ToOdt from nw.core.tomd import ToMarkdown -from nw.core.tools import countWords, numberToRoman __all__ = [ "countWords", - "numberToRoman", "NWDoc", "NWIndex", "NWProject", diff --git a/nw/core/index.py b/nw/core/index.py index f6bdf0ae..93aed47e 100644 --- a/nw/core/index.py +++ b/nw/core/index.py @@ -5,7 +5,8 @@ novelWriter – Project Index Data class for the project index of tags, headers and references File History: -Created: 2019-05-27 [0.1.4] +Created: 2019-04-22 [0.0.1] countWords +Created: 2019-05-27 [0.1.4] NWIndex This file is a part of novelWriter Copyright 2018–2021, Veronica Berglyd Olsen @@ -32,10 +33,10 @@ import os from time import time from nw.constants import ( - nwFiles, nwKeyWords, nwItemType, nwItemClass, nwItemLayout, nwAlert + nwFiles, nwKeyWords, nwItemType, nwItemClass, nwItemLayout, nwAlert, + nwUnicode ) from nw.core.document import NWDoc -from nw.core.tools import countWords from nw.common import isHandle, isTitleTag, isItemClass, isItemLayout logger = logging.getLogger(__name__) @@ -906,3 +907,62 @@ class NWIndex(): return # END Class NWIndex + +# =============================================================================================== # +# Simple Word Counter +# =============================================================================================== # + +def countWords(theText): + """Count words in a piece of text, skipping special syntax and + comments. + """ + charCount = 0 + wordCount = 0 + paraCount = 0 + prevEmpty = True + + # We need to treat dashes as word separators for counting words. + # The check+replace apprach is much faster that direct replace for + # large texts, and a bit slower for small texts, but in the latter + # case it doesn't matter. + if nwUnicode.U_ENDASH in theText: + theText = theText.replace(nwUnicode.U_ENDASH, " ") + if nwUnicode.U_EMDASH in theText: + theText = theText.replace(nwUnicode.U_EMDASH, " ") + + for aLine in theText.splitlines(): + + countPara = True + theLen = len(aLine) + + if theLen == 0: + prevEmpty = True + continue + if aLine[0] == "@" or aLine[0] == "%": + continue + + if aLine[0:5] == "#### ": + wordCount -= 1 + charCount -= 5 + countPara = False + elif aLine[0:4] == "### ": + wordCount -= 1 + charCount -= 4 + countPara = False + elif aLine[0:3] == "## ": + wordCount -= 1 + charCount -= 3 + countPara = False + elif aLine[0:2] == "# ": + wordCount -= 1 + charCount -= 2 + countPara = False + + wordCount += len(aLine.split()) + charCount += theLen + if countPara and prevEmpty: + paraCount += 1 + + prevEmpty = not countPara + + return charCount, wordCount, paraCount diff --git a/nw/core/tokenizer.py b/nw/core/tokenizer.py index 260a230e..989db48f 100644 --- a/nw/core/tokenizer.py +++ b/nw/core/tokenizer.py @@ -33,7 +33,7 @@ from functools import partial from PyQt5.QtCore import QCoreApplication, QRegularExpression from nw.core.document import NWDoc -from nw.core.tools import numberToRoman +from nw.common import numberToRoman from nw.constants import nwConst, nwUnicode, nwItemLayout, nwItemType, nwRegEx logger = logging.getLogger(__name__) diff --git a/nw/core/tools.py b/nw/core/tools.py deleted file mode 100644 index a3dff45b..00000000 --- a/nw/core/tools.py +++ /dev/null @@ -1,118 +0,0 @@ -# -*- coding: utf-8 -*- -""" -novelWriter – Various Tools -=========================== -Various core tool functions - -File History: -Created: 2019-04-22 [0.0.1] countWords -Created: 2020-07-05 [0.10.0] numberToRoman - -This file is a part of novelWriter -Copyright 2018–2021, Veronica Berglyd Olsen - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 3 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program. If not, see . -""" - -import logging - -from nw.constants import nwUnicode - -logger = logging.getLogger(__name__) - -# =============================================================================================== # -# Simple Word Counter -# =============================================================================================== # - -def countWords(theText): - """Count words in a piece of text, skipping special syntax and - comments. - """ - charCount = 0 - wordCount = 0 - paraCount = 0 - prevEmpty = True - - # We need to treat dashes as word separators for counting words. - # The check+replace apprach is much faster that direct replace for - # large texts, and a bit slower for small texts, but in the latter - # case it doesn't matter. - if nwUnicode.U_ENDASH in theText: - theText = theText.replace(nwUnicode.U_ENDASH, " ") - if nwUnicode.U_EMDASH in theText: - theText = theText.replace(nwUnicode.U_EMDASH, " ") - - for aLine in theText.splitlines(): - - countPara = True - theLen = len(aLine) - - if theLen == 0: - prevEmpty = True - continue - if aLine[0] == "@" or aLine[0] == "%": - continue - - if aLine[0:5] == "#### ": - wordCount -= 1 - charCount -= 5 - countPara = False - elif aLine[0:4] == "### ": - wordCount -= 1 - charCount -= 4 - countPara = False - elif aLine[0:3] == "## ": - wordCount -= 1 - charCount -= 3 - countPara = False - elif aLine[0:2] == "# ": - wordCount -= 1 - charCount -= 2 - countPara = False - - wordCount += len(aLine.split()) - charCount += theLen - if countPara and prevEmpty: - paraCount += 1 - - prevEmpty = not countPara - - return charCount, wordCount, paraCount - -# =============================================================================================== # -# Convert an Integer to a Roman Number -# =============================================================================================== # - -def numberToRoman(numVal, isLower=False): - """Convert an integer to a roman number. - """ - if not isinstance(numVal, int): - return "NAN" - if numVal < 1 or numVal > 4999: - return "OOR" - - theValues = [ - (1000, "M"), (900, "CM"), (500, "D"), (400, "CD"), (100, "C"), (90, "XC"), - (50, "L"), (40, "XL"), (10, "X"), (9, "IX"), (5, "V"), (4, "IV"), (1, "I"), - ] - - romNum = "" - for theDiv, theSym in theValues: - n = numVal//theDiv - romNum += n*theSym - numVal -= n*theDiv - if numVal <= 0: - break - - return romNum.lower() if isLower else romNum diff --git a/nw/gui/projdetails.py b/nw/gui/projdetails.py index 1ee40f6f..ba393261 100644 --- a/nw/gui/projdetails.py +++ b/nw/gui/projdetails.py @@ -37,7 +37,7 @@ from PyQt5.QtWidgets import ( from nw.gui.custom import PagedDialog, QSwitch from nw.constants import nwUnicode -from nw.core import numberToRoman +from nw.common import numberToRoman logger = logging.getLogger(__name__) diff --git a/tests/test_base/test_base_common.py b/tests/test_base/test_base_common.py index 4b076a64..03c408cd 100644 --- a/tests/test_base/test_base_common.py +++ b/tests/test_base/test_base_common.py @@ -27,7 +27,7 @@ from nw.common import ( checkString, checkBool, checkInt, colRange, formatInt, transferCase, fuzzyTime, checkHandle, formatTimeStamp, formatTime, hexToInt, makeFileNameSafe, isHandle, isTitleTag, isItemClass, isItemType, - isItemLayout + isItemLayout, numberToRoman ) from tools import cmpList @@ -325,3 +325,30 @@ def testBaseCommon_MakeFileNameSafe(): assert makeFileNameSafe("aaaa bbbb") == "aaaa bbbb" # END Test testBaseCommon_MakeFileNameSafe + +@pytest.mark.core +def testBaseCommon_RomanNumbers(): + """Test conversion of integers to Roman numbers. + """ + assert numberToRoman(None, False) == "NAN" + assert numberToRoman(0, False) == "OOR" + assert numberToRoman(1, False) == "I" + assert numberToRoman(2, False) == "II" + assert numberToRoman(3, False) == "III" + assert numberToRoman(4, False) == "IV" + assert numberToRoman(5, False) == "V" + assert numberToRoman(6, False) == "VI" + assert numberToRoman(7, False) == "VII" + assert numberToRoman(8, False) == "VIII" + assert numberToRoman(9, False) == "IX" + assert numberToRoman(10, False) == "X" + assert numberToRoman(14, False) == "XIV" + assert numberToRoman(42, False) == "XLII" + assert numberToRoman(99, False) == "XCIX" + assert numberToRoman(142, False) == "CXLII" + assert numberToRoman(542, False) == "DXLII" + assert numberToRoman(999, False) == "CMXCIX" + assert numberToRoman(2010, False) == "MMX" + assert numberToRoman(999, True) == "cmxcix" + +# END Test testBaseCommon_RomanNumbers diff --git a/tests/test_core/test_core_index.py b/tests/test_core/test_core_index.py index 9b1c656a..2d5f8f12 100644 --- a/tests/test_core/test_core_index.py +++ b/tests/test_core/test_core_index.py @@ -29,7 +29,7 @@ from shutil import copyfile from tools import cmpFiles from nw.core.project import NWProject -from nw.core.index import NWIndex +from nw.core.index import NWIndex, countWords from nw.constants import nwItemClass, nwItemLayout @pytest.mark.core @@ -1161,3 +1161,34 @@ def testCoreIndex_CheckTextCounts(dummyGUI): theIndex._checkTextCounts() # END Test testCoreIndex_CheckTextCounts + +@pytest.mark.core +def testCoreIndex_CountWords(): + """Test the word counter and the exclusion filers. + """ + testText = ( + "# Heading One\n" + "## Heading Two\n" + "### Heading Three\n" + "#### Heading Four\n" + "\n" + "@tag: value\n" + "\n" + "% A comment that should n ot be counted.\n" + "\n" + "The first paragraph.\n" + "\n" + "The second paragraph.\n" + "\n" + "\n" + "The third paragraph.\n" + "\n" + "Dashes\u2013and even longer\u2014dashes." + ) + cC, wC, pC = countWords(testText) + + assert cC == 138 + assert wC == 22 + assert pC == 4 + +# END Test testCoreIndex_CountWords diff --git a/tests/test_core/test_core_tools.py b/tests/test_core/test_core_tools.py deleted file mode 100644 index 77faf444..00000000 --- a/tests/test_core/test_core_tools.py +++ /dev/null @@ -1,83 +0,0 @@ -# -*- coding: utf-8 -*- -""" -novelWriter – Core Tools Tester -=============================== - -This file is a part of novelWriter -Copyright 2018–2021, Veronica Berglyd Olsen - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 3 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program. If not, see . -""" - -import pytest - -from nw.core.tools import countWords, numberToRoman - -@pytest.mark.core -def testCoreTools_CountWords(): - """Test the word counter and the exclusion filers. - """ - testText = ( - "# Heading One\n" - "## Heading Two\n" - "### Heading Three\n" - "#### Heading Four\n" - "\n" - "@tag: value\n" - "\n" - "% A comment that should n ot be counted.\n" - "\n" - "The first paragraph.\n" - "\n" - "The second paragraph.\n" - "\n" - "\n" - "The third paragraph.\n" - "\n" - "Dashes\u2013and even longer\u2014dashes." - ) - cC, wC, pC = countWords(testText) - - assert cC == 138 - assert wC == 22 - assert pC == 4 - -# END Test testCoreTools_CountWords - -@pytest.mark.core -def testCoreTools_RomanNumbers(): - """Test conversion of integers to Roman numbers. - """ - assert numberToRoman(None, False) == "NAN" - assert numberToRoman(0, False) == "OOR" - assert numberToRoman(1, False) == "I" - assert numberToRoman(2, False) == "II" - assert numberToRoman(3, False) == "III" - assert numberToRoman(4, False) == "IV" - assert numberToRoman(5, False) == "V" - assert numberToRoman(6, False) == "VI" - assert numberToRoman(7, False) == "VII" - assert numberToRoman(8, False) == "VIII" - assert numberToRoman(9, False) == "IX" - assert numberToRoman(10, False) == "X" - assert numberToRoman(14, False) == "XIV" - assert numberToRoman(42, False) == "XLII" - assert numberToRoman(99, False) == "XCIX" - assert numberToRoman(142, False) == "CXLII" - assert numberToRoman(542, False) == "DXLII" - assert numberToRoman(999, False) == "CMXCIX" - assert numberToRoman(2010, False) == "MMX" - assert numberToRoman(999, True) == "cmxcix" - -# END Test testCoreTools_RomanNumbers From be8f98f6c7ade642d0aef928ee35c8db545b8ee2 Mon Sep 17 00:00:00 2001 From: "Veronica K. B. Olsen" <1619840+vkbo@users.noreply.github.com> Date: Wed, 17 Feb 2021 19:10:50 +0100 Subject: [PATCH 09/13] Add more translations --- novelWriter.pro | 1 + nw/common.py | 57 +++++++++++++++++++++++++++++++----------- nw/gui/preferences.py | 3 +-- nw/gui/projsettings.py | 9 ++++--- 4 files changed, 51 insertions(+), 19 deletions(-) diff --git a/novelWriter.pro b/novelWriter.pro index a21751e1..82f33934 100644 --- a/novelWriter.pro +++ b/novelWriter.pro @@ -26,6 +26,7 @@ SOURCES += \ nw/gui/theme.py \ nw/gui/wordlist.py \ nw/gui/writingstats.py \ + nw/common.py \ nw/error.py \ nw/guimain.py diff --git a/nw/common.py b/nw/common.py index 4464f287..e4015563 100644 --- a/nw/common.py +++ b/nw/common.py @@ -29,6 +29,7 @@ import logging from datetime import datetime from PyQt5.QtWidgets import qApp +from PyQt5.QtCore import QCoreApplication from nw.constants import ( nwConst, nwUnicode, nwItemClass, nwItemType, nwItemLayout @@ -267,33 +268,61 @@ def fuzzyTime(secDiff): """Converts a time difference in seconds into a fuzzy time string. """ if secDiff < 0: - return "in the future" + return QCoreApplication.translate( + "Common", "in the future" + ) elif secDiff < 30: - return "just now" + return QCoreApplication.translate( + "Common", "just now" + ) elif secDiff < 90: - return "a minute ago" + return QCoreApplication.translate( + "Common", "a minute ago" + ) elif secDiff < 3300: # 55 minutes - return "%d minutes ago" % int(round(secDiff/60)) + return QCoreApplication.translate( + "Common", "{0} minutes ago").format(int(round(secDiff/60)) + ) elif secDiff < 5400: # 90 minutes - return "an hour ago" + return QCoreApplication.translate( + "Common", "an hour ago" + ) elif secDiff < 84600: # 23.5 hours - return "%d hours ago" % int(round(secDiff/3600)) + return QCoreApplication.translate( + "Common", "{0} hours ago").format(int(round(secDiff/3600)) + ) elif secDiff < 129600: # 1.5 days - return "a day ago" + return QCoreApplication.translate( + "Common", "a day ago" + ) elif secDiff < 561600: # 6.5 days - return "%d days ago" % int(round(secDiff/86400)) + return QCoreApplication.translate( + "Common", "{0} days ago").format(int(round(secDiff/86400)) + ) elif secDiff < 907200: # 10.5 days - return "a week ago" + return QCoreApplication.translate( + "Common", "a week ago" + ) elif secDiff < 2419200: # 28 days - return "%d weeks ago" % int(round(secDiff/604800)) + return QCoreApplication.translate( + "Common", "{0} weeks ago").format(int(round(secDiff/604800)) + ) elif secDiff < 3888000: # 45 days - return "a month ago" + return QCoreApplication.translate( + "Common", "a month ago" + ) elif secDiff < 29808000: # 345 days - return "%d months ago" % int(round(secDiff/2592000)) + return QCoreApplication.translate( + "Common", "{0} months ago").format(int(round(secDiff/2592000)) + ) elif secDiff < 47336400: # 1.5 years - return "a year ago" + return QCoreApplication.translate( + "Common", "a year ago" + ) else: - return "%d years ago" % int(round(secDiff/31557600)) + return QCoreApplication.translate( + "Common", "{0} years ago").format(int(round(secDiff/31557600)) + ) def makeFileNameSafe(theText): """Returns a filename safe version of the text. diff --git a/nw/gui/preferences.py b/nw/gui/preferences.py index a919b120..09a0c3a9 100644 --- a/nw/gui/preferences.py +++ b/nw/gui/preferences.py @@ -828,8 +828,7 @@ class GuiPreferencesEditor(QWidget): for spTag, spProv in theDict.listDictionaries(): qLocal = QLocale(spTag) spLang = qLocal.nativeLanguageName().title() - spName = qLocal.bcp47Name() - self.spellLangList.addItem("%s (%s) [%s]" % (spLang, spName, spProv), spTag) + self.spellLangList.addItem("%s [%s]" % (spLang, spProv), spTag) spellIdx = self.spellLangList.findData(self.mainConf.spellLanguage) if spellIdx != -1: diff --git a/nw/gui/projsettings.py b/nw/gui/projsettings.py index b7e13bbb..c09cbfdb 100644 --- a/nw/gui/projsettings.py +++ b/nw/gui/projsettings.py @@ -27,7 +27,7 @@ along with this program. If not, see . import nw import logging -from PyQt5.QtCore import Qt +from PyQt5.QtCore import Qt, QLocale from PyQt5.QtGui import QIcon, QPixmap, QColor, QBrush from PyQt5.QtWidgets import ( QHBoxLayout, QVBoxLayout, QLineEdit, QPlainTextEdit, QLabel, QWidget, @@ -207,11 +207,14 @@ class GuiProjectEditMain(QWidget): ) self.spellLang = QComboBox(self) + self.spellLang.setFixedWidth(xW) theDict = self.theParent.docEditor.theDict self.spellLang.addItem(self.tr("Default"), "None") if theDict is not None: - for spTag, spName in theDict.listDictionaries(): - self.spellLang.addItem(spName, spTag) + for spTag, spProv in theDict.listDictionaries(): + qLocal = QLocale(spTag) + spLang = qLocal.nativeLanguageName().title() + self.spellLang.addItem("%s [%s]" % (spLang, spProv), spTag) self.mainForm.addRow( self.tr("Spell check language"), From e114873e4ce2b5f30ff91f66b668ba33165e7c3e Mon Sep 17 00:00:00 2001 From: "Veronica K. B. Olsen" <1619840+vkbo@users.noreply.github.com> Date: Wed, 17 Feb 2021 21:54:56 +0100 Subject: [PATCH 10/13] Remove deprecated meta entry support in project files --- nw/core/project.py | 47 ++++------------------------ tests/test_core/test_core_project.py | 21 +------------ 2 files changed, 7 insertions(+), 61 deletions(-) diff --git a/nw/core/project.py b/nw/core/project.py index 3c06ce73..4019fcbc 100644 --- a/nw/core/project.py +++ b/nw/core/project.py @@ -443,16 +443,10 @@ class NWProject(): xRoot = nwXML.getroot() nwxRoot = xRoot.tag - appVersion = xRoot.attrib.get("appVersion", self.tr("Unknown")) - hexVersion = xRoot.attrib.get("hexVersion", "0x0") + appVersion = xRoot.attrib.get("appVersion", self.tr("Unknown")) + hexVersion = xRoot.attrib.get("hexVersion", "0x0") fileVersion = xRoot.attrib.get("fileVersion", self.tr("Unknown")) - # The following are deprecated and will be removed - # The settings have been moved to the tag - self.saveCount = checkInt(xRoot.attrib.get("saveCount", 0), 0, False) - self.autoCount = checkInt(xRoot.attrib.get("autoCount", 0), 0, False) - self.editTime = checkInt(xRoot.attrib.get("editTime", 0), 0, False) - logger.verbose("XML root is %s" % nwxRoot) logger.verbose("File version is %s" % fileVersion) @@ -479,27 +473,7 @@ class NWProject(): # parser will lose the autoReplace settings if allowed to # read the file. Introduced in version 0.10. - if fileVersion == "1.0": - msgYes = self.theParent.askQuestion( - self.tr("Old Project Version"), - "%s

%s" % ( - self.tr( - "The project file and data is created by a novelWriter version " - "lower than 0.7. Do you want to upgrade the project to the " - "most recent format?" - ), - self.tr( - "Note that after the upgrade, you cannot open the project with " - "an older version of novelWriter any more, so make sure you " - "have a recent backup." - ) - ) - ) - if not msgYes: - self.clearProject() - return False - - elif fileVersion != "1.1" and fileVersion != "1.2": + if fileVersion not in ("1.0", "1.1", "1.2"): self.makeAlert(( self.tr( "Unknown or unsupported novelWriter project file format. " @@ -518,7 +492,7 @@ class NWProject(): self.tr("Version Conflict"), self.tr( "This project was saved by a newer version of novelWriter, version " - "{0}. This is version {1}. If you continue to open the project, " + "{0}. This is version {1}. If you continue to open the project, " "some attributes and settings may not be preserved, but the " "overall project should be fine. Continue opening the project?" ).format(appVersion, nw.__version__) @@ -552,10 +526,6 @@ class NWProject(): elif xItem.tag == "editTime": self.editTime = checkInt(xItem.text, 0) - # The following is deprecated, and will be removed - elif xItem.tag == "backup": - self.doBackup = checkBool(xItem.text, False) - elif xChild.tag == "settings": logger.debug("Found project settings") for xItem in xChild: @@ -585,13 +555,8 @@ class NWProject(): self.importItems.unpackXML(xItem) elif xItem.tag == "autoReplace": for xEntry in xItem: - if xEntry.tag == "entry": - if "key" in xEntry.attrib: - self.autoReplace[xEntry.attrib["key"]] = checkString( - xEntry.text, None, False - ) - else: # Old format - self.autoReplace[xEntry.tag] = checkString( + if xEntry.tag == "entry" and "key" in xEntry.attrib: + self.autoReplace[xEntry.attrib["key"]] = checkString( xEntry.text, None, False ) elif xItem.tag == "titleFormat": diff --git a/tests/test_core/test_core_project.py b/tests/test_core/test_core_project.py index 07967b86..d6806984 100644 --- a/tests/test_core/test_core_project.py +++ b/tests/test_core/test_core_project.py @@ -368,7 +368,7 @@ def testCoreProject_Open(monkeypatch, nwMinimal, dummyGUI): # Wrong file version writeFile(rName, ( - "\n" + "\n" "\n" - "\n" - "\n" - "\n" - "B\n" - "\n" - "\n" - "\n" - )) - assert theProject.openProject(nwMinimal) is True - assert theProject.autoReplace == {"A": "B"} - assert theProject.closeProject() - # Clean up XML files os.unlink(rName) os.unlink(bName) From 3a1367a1d82255381a7a2fdff9975c8c79ed7d74 Mon Sep 17 00:00:00 2001 From: "Veronica K. B. Olsen" <1619840+vkbo@users.noreply.github.com> Date: Wed, 17 Feb 2021 21:55:23 +0100 Subject: [PATCH 11/13] Finish the first iteration of the Norwegian translation --- i18n/nw_nb_NO.ts | 1830 +++++++++++++++++++++++--------------------- nw/gui/projtree.py | 6 +- 2 files changed, 949 insertions(+), 887 deletions(-) diff --git a/i18n/nw_nb_NO.ts b/i18n/nw_nb_NO.ts index 02714bb9..e17aed57 100644 --- a/i18n/nw_nb_NO.ts +++ b/i18n/nw_nb_NO.ts @@ -1,5 +1,79 @@ - + + + + Common + + + just now + nå nettopp + + + + a minute ago + for et minutt siden + + + + an hour ago + for en time siden + + + + a day ago + for en dag siden + + + + a week ago + for en uke siden + + + + a month ago + for en måned siden + + + + a year ago + for et år siden + + + + {0} minutes ago + for {0} minutter siden + + + + {0} hours ago + for {0} timer siden + + + + {0} days ago + for {0} dager siden + + + + {0} weeks ago + for {0} uker siden + + + + {0} months ago + for {0} måneder siden + + + + {0} years ago + for {0} år siden + + + + in the future + i fremtiden + + Constant @@ -20,12 +94,12 @@ Characters - Karakter + Karakterer Locations - Lokasjon + Lokasjoner @@ -35,12 +109,12 @@ Objects - Objekt + Objekter Entity - Enhet + Enheter @@ -105,7 +179,7 @@ Point of View - Synsvinkel + Perspektiv @@ -155,7 +229,7 @@ POV - Synsv. + Persp. @@ -298,22 +372,22 @@ novelWriter is a markdown-like text editor designed for organising and writing novels. It is written in Python 3 with a Qt5 GUI, using PyQt5. - + novelWriter er en markdown-liknende teksteditor laget for å kunne organisere og skrive romaner og noveller. Programmet er skrevet i Python 3 med et brukergrensesnitt i Qt 5 via PyQt5. novelWriter is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. - + novelWriter er gratis programvare: du kan videredistribuere det og/eller modifisere det under vilkårene i GNU General Public License som utgitt av Free Software Foundation, enten versjon 3 av Lisensen, eller (etter eget valg) enhver senere versjon. novelWriter is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - + novelWriter er distribuert i håp om at det vil være nyttig, men UTEN NOEN GARANTI; uten selv en underforstått garanti vedrørende SALGBARHET eller EGNETHET TIL ET BESTEMT FORMÅL. Se GNU General Public License for flere detaljer. See the License tab for the full license text, or visit the GNU website at {0} for more details. - + Se lisens-fanen for full-tekst versjonen av lisensen (på engelsk), eller besøk GNY sin webside på {0} for mer informasjon. @@ -351,7 +425,7 @@ Build Novel Project - Bygg Romanprosjekt + Bygg prosjektet @@ -366,42 +440,42 @@ {0} for the title as set in the document - + {0} for tittelen slik den er definert i dokumentet {0} for chapter number (1, 2, 3) - + {0} for kapittelnummer (1, 2, 3) {0} for chapter number as a word (one, two) - + {0} for kapittelnummer (én, to, tre) {0} for chapter number in upper case Roman - + {0} for kapittelnummer i store romertall {0} for chapter number in lower case Roman - + {0} for kapittelnummer i små romertall {0} for scene number within chapter - + {0} for scenenummer innad i kapitler {0} for scene number within novel - + {0} for scenenummer innad i boken Leave blank to skip this heading, or set to a static text, like for instance '{0}', to make a separator. The separator will be centred automatically and only appear between sections of the same type. - + La feltet stå tomt for å hoppe over overskriften, eller sett til en statisk tekst, slik som for eksempel '{0}', for å lage en separator. Separatoren vil bli sentrert automatisk, og bare satt inn mellom scener av samme type. @@ -606,12 +680,12 @@ Failed to generate preview. The result is too big. - + Kunne ikke generere forhåndsvisning. Resultatet er for stort til å vise. There were problems when building the project - + Det har oppstått en feil under byggingen av prosjektet. @@ -689,7 +763,7 @@ This area will show the content of the document to be exported or printed. Press the "Build Preview" button to generate content. - + Dette området vil vise innholdet av dokumentet som skal eksporteres. Trykk knappen merket med "Forhåndsvisning" for å oppdatere innholdet. @@ -699,7 +773,7 @@ <b>Build Time:</b> {0} - <b>Bygget den:</b> {0} + <b>Generert den:</b> {0} @@ -851,37 +925,37 @@ The document you are trying to open is too big. The document size is {0} MB. The maximum size allowed is {1} MB. - + Dokumentet du prøver å åpne er for stort. Dokumenter er på {0} MB. Den maksimale størrelsen tillat er {1} MB. The text you are trying to add is too big. The text size is {0} MB. The maximum size allowed is {1} MB. - + Teksten du forsøker å legge til er for stor. Teksten er {0} MB. Den maksimale tillatte størrelsen er {1} MB. Spell check complete - + Stavekontrollen er ferdig File Location - + Filens plassering The currently open file is saved in: - + Det åpne dokumentet er lagret på følgende sted: The document has grown too big and you cannot add more text to it. The maximum size of a single novelWriter document is {0} MB. - + Dokumentet har blitt for stort, og du kan ikke legge til mer tekst. Den maksimale tillatte størrelsen for et novelWriter-dokument er {0} MB. Follow Tag - + Følg knagg @@ -896,7 +970,7 @@ Paste - Lim + Lim inn @@ -931,7 +1005,7 @@ Please selection some text before calling replace quotes. - + Venligst velg en del av teksten før du velger å erstatte sitattegn. @@ -939,47 +1013,47 @@ Merge Documents - + Slå sammen dokumenter Documents to Merge - + Dokumenter som skal slås sammen Drag and drop items to change the order. - + Dra og slipp dokumenter for å endre rekkefølge. Cancel - Avbryt + Avbryt No source documents found. Nothing to do. - + Ingen kilde-dokument funnet. Det er ingenting å gjøre. No source document selected. Nothing to do. - + Ingen kilde-dokument er valgt. Det er ingenting å gjøre. Could not parse source document. - + Klarte ikke å lese kilde-dokumentet. Element selected in the project tree must be a folder. - + Elementet som er valgt i prosjekttreet må være en mappe. OK - OK + OK @@ -987,82 +1061,82 @@ Split Document - + Del opp dokument Document Headers - + Dokumentets overskrifter Select the maximum level to split into files. - + Velg hvilket nivå av overskrifter å dele opp til. Split on Header Level 1 (Title) - + Del på overskrifter på nivå 1 (titler) Split up to Header Level 2 (Chapter) - + Del på overskrifter opp til nivå 2 (kapitler) Split up to Header Level 3 (Scene) - + Del på overskrifter opp til nivå 3 (scener) Split up to Header Level 4 (Section) - + Del på overskrifter opp til nivå 4 (seksjoner) Cancel - Avbryt + Avbryt No source document selected. Nothing to do. - + Ingen kilde-dokument er valgt. Det er ingenting å gjøre. Could not parse source document. - + Klarte ikke å lese kilde-dokumentet. No headers found. Nothing to do. - + Ingen overskrifter ble funnet i dokumentet. Det er ikke noe å gjøre. Cannot add new folder for the document split. Maximum folder depth has been reached. Please move the file to another level in the project tree. - + Kan ikke legge til ny mappe for å dele opp dokumentet. Dokumentet har allerede maksimal dybde i treet. Flytt dokumentet til et annet nivå i treet først. The document will be split into {0} file(s) in a new folder. The original document will remain intact. - + Dokumentet vil nå bli delt opp i {0} nye filer i en ny mappe. Det originale dokumentet vil ikke bli endret eller fjernet. Continue with the splitting process? - + Fortsette med oppdelingen? Element selected in the project tree must be a file. - + Elementet som er valgt i prosjekttreet må være et dokument. OK - OK + OK @@ -1070,42 +1144,42 @@ Show/hide the references panel - + Skjul eller vis referanse-panelet Activate to freeze the content of the references panel when changing document - + Aktiver denne for å fryse innholdet i referanse-panelet ved endring av vist dokument Show comments - + Vis kommentarer Show synopsis comments - + Vis sammendrag References - + Referanser Sticky - + Sett fast Comments - + Kommentar Synopsis - Sammendrag + Sammendrag @@ -1113,22 +1187,22 @@ Go backward - + Gå bakover Go forward - + Gå fremover Reload the document - + Last dokumentet på nytt Close the document - Lukk dokumentet + Lukk dokumentet @@ -1136,32 +1210,32 @@ An error occurred while generating the preview. - + Det har oppstått en feil under genereringen av visningen. Could not find the reference for tag '{0}'. It either doesn't exist, or the index is out of date. The index can be updated from the Tools menu, or by pressing {1}. - + Kunne ikke finne referansen til knagg '{0}'. Enten finnes den ikke, eller så er prosjektets indeks ikke oppdatert. Indeksen kan oppdateres fra Verktøy-menyen eller ved å trykke på {1}. Copy - Kopier + Kopier Select All - Velg alt + Velg alt Select Word - Velg ord + Velg ord Select Paragraph - Velg avsnitt + Velg avsnitt @@ -1177,37 +1251,37 @@ Label - Navn + Navn Status - Status + Status Class - + Klasse Layout - + Format Characters - Karakter + Karakter Words - Ord + Ord Paragraphs - Avsnitt + Avsnitt @@ -1215,37 +1289,37 @@ Item Settings - + Enhetsinstillinger Include when building project - + Ta med ved eksport Cancel - Avbryt + Avbryt Label - Navn + Navn Status - Status + Status Layout - + Format OK - OK + OK @@ -1288,17 +1362,17 @@ Cannot create new project when another project is open. - + Kan ikke lage et nytt prosjekt mens et annet prosjekt er åpent. A project already exists in that location. Please choose another folder. - + Et prosjekt finnes allerede i den mappen. Vennligst velg et annet sted å lagre prosjektet. New project created ... - + Et nytt prosjekt har blitt opprettet ... @@ -1318,17 +1392,17 @@ Backup Project - + Sikkerhetskopi Backup the current project? - + Ta sikkerhetskopi av dette prosjektet? The project was locked by the computer '{0}' ({1} {2}), last active on {3}. - + Prosjektet er låst av en annen datamaskin: '{0}' ({1} {2}), siste registrerte aktivitet var {3}. @@ -1338,17 +1412,17 @@ The project is already open by another instance of novelWriter, and is therefore locked. Override lock and continue anyway? - + Prosjektet er allerede åpent av en annen instans av novelWriter, og er derfor låst. Vil du overstyre denne låsen og fortsette likevel? Note: If the program or the computer previously crashed, the lock can safely be overridden. If, however, another instance of novelWriter has the project open, overriding the lock may corrupt the project, and is not recommended. - + Merknad: Hvis programmet har krasjet og har lagt igjen låsen, kan man trygt overstyre denne. Men, hvis en annen instans av novelWriter har prosjektet åpent, kan det å overstyre låsen føre til tap av data, og dette er ikke anbefalt. The project index is outdated or broken. Rebuilding index. - + Prosjektets indeks er utdatert eller skadet. Bygger indeksen på nytt. @@ -1378,12 +1452,12 @@ Could not read file. The file must be an existing text file. - + Kunne ikke lese filen. Filen må eksistere fra før av. Please open a document to import the text file into. - + Vennligst åpne et dokument hvor teksten i filen kan importeres. @@ -1393,7 +1467,7 @@ Importing the file will overwrite the current content of the document. Do you want to proceed? - + Å importere filen vil overskrive all eksisterende tekst i dokumentet. Ønsker du å fortsette? @@ -1458,7 +1532,7 @@ novelWriter is ready ... - + novelWriter er klar for dyst ... @@ -1466,1102 +1540,1102 @@ &Project - + &Prosjekt New Project - Nytt Prosjekt + Nytt prosjekt Create new project - + Opprett et nytt prosjekt Open Project - + Åpne prosjekt Open project - + Åpne et prosjekt Save Project - + Lagre prosjektet Save project - + Lagre prosjektet Close Project - Lukke prosjektet + Lukk prosjektet Close project - + Lukk prosjektet Project Settings - Prosjektinstillinger + Prosjektinstillinger Project settings - + Endre prosjektinstillinger Project Details - Prosjektdetaljer + Prosjektdetaljer Project details - + Se prosjektdetaljer Create Root Folder - + Lag ny rotmappe Novel Root - + Mappe for "Roman" Plot Root - + Mappe for "Plott" Character Root - + Mappe for "Karakterer" Location Root - + Mappe for "Lokasjoner" Timeline Root - + Mappe for "Tidslinjer" Object Root - + Mappe for "Objekter" Entity Root - + Mappe for "Enheter" Custom Root - + Mappe for "Annet" Outtakes Root - + Mappe for "Uttak" Create Folder - + Lag ny mappe Create folder - + Lag en ny mappe Edit Item - + Endre enhet Change project item settings - + Endre instillinger for enhet Delete Item - + Slett enhet Delete selected project item - + Slett den valgte enheten i prosjektet Move Item Up - + Flytt enhet opp Move project item up - + Flytt enheten oppover i prosjektet Move Item Down - + Flytt enhet ned Move project item down - + Flytt enheten nedover i prosjektet Undo Last Move - + Angre siste flytting Undo last item move - + Angre siste flytting i prosjektet Empty Trash - Tøm søpla + Tøm søpla Permanently delete all files in the Trash folder - + Slett alle filene i søppelbøtta permanent Exit - Avslutt + Avslutt Exit novelWriter - + Avslutt novelWriter &Document - + &Dokument New Document - + Nytt dokument Create new document - + Lag et nytt dokument Open Document - + Åpne dokument Open selected document - + Åpne valgte dokument Save Document - + Lagre dokumentet Save current document - + Lagre det åpne dokumentet Close Document - + Lukk dokumentet Close current document - + Lukk det åpne dokumentet View Document - + Vis dokument View document as HTML - + Vis dokumentet som HTML Close Document View - + Lukk dokumentvisning Close document view pane - + Lukk visningsvindu for dokumenter Show File Details - + Vis filbane Shows a message box with the document location in the project folder - + Viser hvor dokumentets fil er lagret i prosjektets mappe Import from File - + Importer fra fil Import document from a text or markdown file - + Importer et dokument fra en text- eller markdown-fil Merge Folder to Document - + Slå sammen mappe Merge a folder of documents to a single document - + Slå sammen alle dokumenter i mappen til ett dokument Split Document to Folder - + Del opp dokument Split a document into a folder of multiple documents - + Splitt et dokument opp i flere dokumenter i en ny mappe &Edit - + R&ediger Undo - + Angre Undo last change - + Angre siste endring Redo - + Gjenopprett Redo last change - + Gjenopprett siste endring Cut - Klipp + Klipp Cut selected text - + Klipp ut valgt tekst Copy - Kopier + Kopier Copy selected text - + Kopier valgt tekst Paste - Lim + Lim inn Paste text from clipboard - + Lim inn tekst fra utklippstavle Select All - Velg alt + Velg alt Select all text in document - + Velg all tekst i dokumentet Select Paragraph - Velg avsnitt + Velg avsnitt Select all text in paragraph - + Velg all tekst i avsnittet &View - + &Vis Focus Project Tree - + Gå til prosjekttre Move focus to project tree - + Flutt fokus til prosjekttre Focus Document Editor - + Gå til editor Move focus to left document pane - + Flytt fokus til teksteditor Focus Document Viewer - + Gå til visningsvindu Move focus to right document pane - + Flytt fokus til visningsvindu Focus Outline - + Gå til disposisjon Move focus to outline - + Flytt fokus til disposisjon Go Backward - + Gå bakover Move backward in the view history of the right pane - + Gå bakover i visningshistorien i visningsvinduet Go Forward - + Gå fremover Move forward in the view history of the right pane - + Gå fremover i visningshistorien i visningsvinduet Focus Mode - + Focus modus Toggles a distraction free mode, only showing text editor - + Slå av eller på "fokus modus" hvor kun teksteditoren vises i vinduet Full Screen Mode - + Fullskjermmodus Maximises the main window - + Bruk hele skjermen &Insert - + Sett &inn Dashes - + Bindestreker Short Dash - + Kort bindestrek Insert short dash (en dash) - + Sett inn en kort bindestrek (en dash) Long Dash - + Lang bindestrek Insert long dash (em dash) - + Sett inn en lang bindestrek (em dash) Horizontal Bar - + Horisontal strek Insert a horizontal bar (quotation dash) - + Sett inn en horisontal strek (sitatstrek) Figure Dash - + Tallstrek Insert figure dash (same width as a number character) - + Sett inn en tallstrek (samme bredde som et tall) Quote Marks - + Sitattegn Left Single Quote - + Venstre, enkelt sitattegn Insert left single quote - + Sett inn venstre, enkelt sitattegn Right Single Quote - + Høyre, enkelt sitattegn Insert right single quote - + Sett inn høyre, enkelt sitattegn Left Double Quote - + Venstre, dobbelt sitattegn Insert left double quote - + Sett inn venstre, dobbelt sitattegn Right Double Quote - + Høyre, dobbelt sitattegn Insert right double quote - + Sett inn høyre, dobbelt sitattegn Alternative Apostrophe - + Alternativ apostrof Insert modifier letter single apostrophe - + Sett inn alternativt apostroftegn General Punctuation - + Generell tegnsetting Ellipsis - + Ellipsis Insert ellipsis - + Sett inn ellipsis Prime - + Primtegn Insert a prime symbol - + Sett inn et primtegn Double Prime - + Dobbelt primtegn Insert a double prime symbol - + Sett inn et dobbelt primtegn Breaks and Spaces - + Linjeskift og mellomrom Hard Line Break - + Hardt linjeskift Insert a hard line break - + Sett inn et hardt linjeskift Non-Breaking Space - + Hardt mellomrom Insert a non-breaking space - + Sett inn et hardt mellomrom Thin Space - + Kort mellomrom Insert a thin space - + Sett inn et kort mellomrom Thin Non-Breaking Space - + Hardt, kort mellomrom Insert a thin non-breaking space - + Sett inn et hardt, kort mellomrom Other Symbols - + Andre symboler List Bullet - + Kulepunkt Insert a list bullet - + Sett inn et kulepunkt Hyphen Bullet - + Bindestrekpunkt Insert a hyphen bullet (alternative bullet) - + Sett inn et bindestrekpunkt Flower Mark - + Blomsterpunkt Insert a flower mark (alternative bullet) - + Sett inn et blomsterpunkt Per Mille - + Promille Insert a per mille symbol - + Sett inn et promilletegn Degree Symbol - + Gradertegn Insert a degree symbol - + Sett inn et gradertegn Minus Sign - + Minustegn Insert a minus sign (not a hypen or dash) - + Sett inn et minustegn (ikke det samme som bindestrek) Times Sign - + Gangetegn Insert a times sign (multiplication cross) - + Sett inn et gangetegn (kryss) Division Sign - + Deletegn Insert a division sign - + Sett inn et deletegn Tags and References - + Knagger og referanser &Search - + &Søk Find - + Søk Find text in document - + Søk etter tekst i dokumentet Replace - Erstatt + Erstatt Replace text in document - + Erstatt tekst i dokumentet Find Next - + Finn neste Find next occurrence of text in document - + Finn neste tilfelle av søketeksten i dokumentet Find Previous - + Finn forrige Find previous occurrence of text in document - + Finn forrige tilfelle av søketeksten i dokumentet Replace Next - + Erstatt neste Find and replace next occurrence of text in document - + Erstatt neste tilfelle av søketeksten i dokumentet &Format - + &Formattering Emphasis - + Kursiv Add emphasis to selected text (italic) - + Gjør valgt tekst kursiv Strong Emphasis - + Uthev Add strong emphasis to selected text (bold) - + Gjør valgt tekst uthevet Strikethrough - + Gjennomstrek Add strikethrough to selected text - + Sett en strek over valgt tekst Wrap Double Quotes - + Sett i doble sitattegn Wrap selected text in double quotes - + Sett doble sitattegn rundt den valgte teksten Wrap Single Quotes - + Sett i enkle sitattegn Wrap selected text in single quotes - + Sett enkle sitattegn rundt den valgte teksten Header 1 - + Overskrift 1 Change the block format to Header 1 - + Endre linjen til overskrift med nivå 1 Header 2 - + Overskrift 2 Change the block format to Header 2 - + Endre linjen til overskrift med nivå 2 Header 3 - + Overskrift 3 Change the block format to Header 3 - + Endre linjen til overskrift med nivå 3 Header 4 - + Overskrift 4 Change the block format to Header 4 - + Endre linjen til overskrift med nivå 4 Comment - + Kommentar Change the block format to comment - + Endre linjen til en kommentar Remove Block Format - + Fjern formattering Strips block format - + Fjerner formatering fra gjeldende linje Replace Single Quotes - + Erstatt enkle sitattegn Replace all straight single quotes in selected text - + Erstatt enkle, rette sitattegn med valgte enkle sitattegn Replace Double Quotes - + Erstatt doble sitattegn Replace all straight double quotes in selected text - + Erstatt doble, rette sitattegn med valgte doble sitattegn &Tools - + &Verktøy Check Spelling - + Stavekontroll Toggle check spelling - + Slå av og på stavekontroll Re-Run Spell Check - + Kjør stavekontroll Run the spell checker on current document - + Kjør stavekontroll for det åpne dokumentet Project Word List - + Prosjektets ordliste Edit the project's word list - + Vis eller endre på prosjektets ordliste Rebuild Index - + Bygg indeks Rebuild the tag indices and word counts - + Bygg hele prosjekt-indeksen på nytt Rebuild Outline - + Bygg disposisjon Rebuild the novel outline tree - + Bygg prosjektets disposisjon på nytt Auto-Update Outline - + Auto-oppdater disposisjon Update project outline when a novel file is changed - + Oppdater disposisjonen automatisk når innholdet endrer seg Backup Project Folder - + Sikkerhetskopi Backup Project - + Ta sikkerhetskopi av prosjektets mappe Build Novel Project - Bygg Romanprosjekt + Bygg prosjektet Launch the Build novel project tool - + Åpne verktøyet for å bygge prosjektet Writing Statistics - Statistikk + Statistikk Show the writing statistics dialog - + Viser prosjektets statistikk i et vindu Preferences - Instillinger + Instillinger &Help - + &Hjelp About novelWriter - Om novelWriter + Om novelWriter About Qt5 - + Om Qt5 Documentation (Local) - + Dokumentasjon (local) View local documentation with Qt Assistant - + Vis dokumentasjonen ved hjelp av Qt Assistant Documentation (Online) - + Dokumentasjon (online) View online documentation at {0} - + Vis dokumentasjonen på {0} Report an Issue (GitHub) - + Rapporter en feil (GitHub) Report a bug or issue on GitHub at {0} - + Rapporter en feil ved programmet på GitHub på {0} Ask a Question (GitHub) - + Still et spørsmål (GitHub) Ask a question on GitHub at {0} - + Still et spørsmål på GitHub på {0} Latest Release (GitHub) - + Siste utgivelse (GitHub) Open the Releases page on GitHub at {0} - + Åpner Rekeases-siden på GitHub på {0} The novelWriter Website - + novelWriters nettside Open the novelWriter website at {0} - + Åpne novelWriters nettside på {0} @@ -2569,32 +2643,32 @@ None - Ingen + Ingen Editor - Editor + Editor Project - Prosjekt + Prosjekt Session Time - + Tid brukt i gjeldende sesjon Words: {0} ({1}) - Ord: {0} ({1}) + Ord: {0} ({1}) Project word count (session change) - + Antall ord i prosjektet (endring i denne sesjonen) @@ -2612,7 +2686,7 @@ POV - Synsv. + Persp. @@ -2757,355 +2831,355 @@ GuiPreferencesAutomation - + Automatic Features - + Automatiske funksjoner - + Auto-select word under cursor - + Auto-velg ord under markør - + Apply formatting to word under cursor if no selection is made. - + Hvis ingen tekst er valgt, formatter ordet hvor markøren står. - + Auto-replace text as you type - + Erstatt mens du skriver - + Allow the editor to replace symbols as you type. - + La editoren erstatte symboler mens du skriver. - + Replace as You Type - + Erstatt mens du skriver - + Auto-replace single quotes - + Erstatt enkle sitattegn - + Try to guess which is an opening or a closing single quote. - + Forsøker å gjette hva som er venstre og høyre tegn. - + Auto-replace double quotes - + Erstatt doble sitattegn - + Try to guess which is an opening or a closing double quote. - + Forsøker å gjette hva som er venstre og høyre tegn. - + Auto-replace dashes - + Erstatt bindestreker - + Double and triple hyphens become short and long dashes. - + To og tre bindestreker erstattes med kort og lang bindestrek. - + Auto-replace dots - + Erstatt flere punktum - + Three consecutive dots become ellipsis. - + Tre punktum på rad erstattes med ellipsis. - + Quotation Style - + Sitattegn - + Single quote open style - + Enkelt sitat, venstre side - + The symbol to use for a leading single quote. - + Symbol for enkelt sitattegn før et sitat. - + Single quote close style - + Enkelt sitat, høyre side - + The symbol to use for a trailing single quote. - + Symbol for enkelt sitattegn etter et sitat. - + Double quote open style - + Dobbelt sitat, venstre side - + The symbol to use for a leading double quote. - + Symbol for dobbelt sitattegn før et sitat. - + Double quote close style - + Dobbelt sitat, høyre side - + The symbol to use for a trailing double quote. - + Symbol for dobbelt sitattegn etter et sitat. GuiPreferencesDocuments - + Text Style - + Tekststil - + Font family - Skriftfamilie + Skriftfamilie - + Font for the document editor and viewer. - + Skrifttype til bruk for editor og visning. - + Font size - Skriftstørrelse + Skriftstørrelse - + Font size for the document editor and viewer. - + Skriftstørrelse til bruk for editor og visning. - + pt - + - + Text Flow - + Tekstflyt - + Maximum text width in "Normal Mode" - + Maks tekstbredde i "Normal-modues" - + Horizontal margins are scaled automatically. - + Horisontale marger skalerer da automatisk. - + px - + - + Maximum text width in "Focus Mode" - + Maks tekstbredde i "Fokus-modues" - + Disable maximum text width in "Normal Mode" - + Slå av maks tekstbredde i "Normal-modus" - + Text width is defined by the margins only. - + Tekstbredde er kun definert av margene. - + Hide document footer in "Focus Mode" - + Gjem dokumentets bunnlinje i "Fokus-modus" - + Hide the information bar at the bottom of the document. - + Gjemmer informasjonslinja i bunnen av dokumentet. - + Justify the text margins in editor and viewer - + Bruk justerte marger i editor og visning - + Lay out text with straight edges in the editor and viewer. - + Justerte marger gir rette linjeender i avsnitt. - + Text margin - + Marger - + If maximum width is set, this becomes the minimum margin. - + Hvis tekstbredde er satt, så blir dette istedet minste marger. - + Tab width - + Tabulatorens bredde - + The width of a tab key press in the editor and viewer. - + Hvor langt tabulatoren hopper i editor og visning. GuiPreferencesEditor - + Spell Checking - + Stavekontroll - + Internal - + Intern - + Spell check provider - + Verktøy for stavekontroll - + Note that the internal spell check tool is quite slow. - + Merk at den interne stavekontrollen er ganske treg. - + Spell check language - + Stavekontroll - + Available languages are determined by your system. - + Tilgjengelige språk hentes fra operativystemet ditt. - + Big document limit - + Grense for store dokumenter - + Full spell checking is disabled above this limit. - + Automatisk stavekontroll slås av over denne. - + kB - + - + Word Count - + Telling av ord - + Word count interval - + Telle-intervall - + How often the word count is updated. - + Hvor ofte antall ord blir oppdatert. - + seconds - + sekunder - + Writing Guides - + Hjelpesymboler - + Show tabs and spaces - + Vis tabulator og mellomrom - + Add symbols to indicate tabs and spaces in the editor. - + Viser symboler for å indikere disse i editoren. - + Show line endings - + Vis linjeender - + Add a symbol to indicate line endings in the editor. - + Viser symbol for å indikere dette i editoren. - + Scroll Behaviour - + Rullefelt - + Scroll past end of the document - + Tillat å gå forbi slutten av dokumentet - + Also improves trypewriter scrolling for short documents. - + Forbedrer funksjonen til skrivemaskin-rulling. - + Typewriter style scrolling when you type - + Skrivemaskin-rulling mens du skriver - + Try to keep the cursor at a fixed vertical position. - + Prøver å holde markøren på samme sted vertikalt. - + Minimum position for Typewriter scrolling - + Minste avstand for skrivemaskin-rulling - + Percentage of the editor height from the top. - + I prosent fra toppen av editor-vinduet. @@ -3113,253 +3187,258 @@ Look and Feel - + Utseende - + Main GUI theme - + GUI-tema - + Changing this requires restarting novelWriter. - + Endring av dette krever omstart av novelWriter. - + Main icon theme - + Ikon-tema - + Prefer icons for dark backgrounds - + Foretrekk ikoner for mørk bakgrunn - + May improve the look of icons on dark themes. - + Kan forbedre utseende på mørke temaer. - + Font family - Skriftfamilie + Skriftfamilie - + Font size - Skriftstørrelse + Skriftstørrelse - + pt - + - + GUI Settings - + GUI-instillinger - + Show full path in document header - + Vis full prosjektbane i dokumenthodet - + Add the parent folder names to the header. - + Legger til mappene foran dokumentets navn. - + Hide vertical scroll bars in main windows - + Skjul vertikale rullefelt i hovedvinduene - + Scrolling available with mouse wheel and keys only. - + Rulling kan bare gjøres med mus og tastatur. - + Hide horizontal scroll bars in main windows - + Skjul horisontale rullefelt i hovedvinduene + + + + Main GUI language + Programspråk GuiPreferencesProjects - + Automatic Save - + Automatisk lagring - + Save document interval - + Interval for lagring av dokument - + How often the open document is automatically saved. - + Hvor ofte det åpne dokumentet lagres automatisk. - + seconds - + sekunder - + Save project interval - + Interval for lagring av prosjekt - + How often the open project is automatically saved. - + Hvor ofte det åpne prosjektet lagres automatisk. - + Project Backup - + Sikkerhetskopi - + Browse - + Bla - + Backup storage location - + Filbane for sikkerhetskopi - + Path: {0} - + Filbane: {0} - + Run backup when the project is closed - + Ta sikkerhetskopi når prosjektet lukkes - + Can be overridden for individual projects in project settings. - + Kan overstyres fra individuelle prosjektinstillinger. - + Ask before running backup - + Spør før sikkerhetskopi tas - + If off, backups will run in the background. - + Hvis avslått, tas sikkerhetskopi automatisk. - + Session Timer - + Sesjons-klokke - + Pause the session timer when not writing - + Sett klokka på pause når du er inaktiv - + Also pauses when the application window does not have focus. - + Pauses også når du ikke jobber i applikasjonens vindu. - + Editor inactive time before pausing timer - + Tid uten skriving før klokka stoppes - + User activity includes typing and changing the content. - + Dette måler kun endringer i editoren. - + minutes - + minutter - + Backup Directory - + Mappe for sikkerhetskopi GuiPreferencesSyntax - - - Highlighting Theme - - - - - Highlighting theme - - - - - Colour theme to apply to the editor and viewer. - - + Highlighting Theme + Syntaksfremheving + + + + Highlighting theme + Fremhevingstema + + + + Colour theme to apply to the editor and viewer. + Fargetema for editor og visning. + + + Quotes & Dialogue - + Sitater & dialog - + Highlight text wrapped in quotes - + Fremhev tekst mellom sitattegn - + Applies to single, double and straight quotes. - + Gjelder enkle, doble og rette sitattegn. - + Allow open-ended single quotes - + Tillat enkle sitattegn som ikke lukkes - + Highlight single-quoted line with no closing quote. - + Fremhev sitater som ikke er lukket i samme avsnitt. - + Allow open-ended double quotes - + Tillat doble sitattegn som ikke lukkes - + Highlight double-quoted line with no closing quote. - + Fremhev sitater som ikke er lukket i samme avsnitt. - + Text Emphasis - + Fremheving av tekst - + Add highlight colour to emphasised text - + Fremhev formattert tekst - + Applies to emphasis (italic) and strong (bold). - + Gjelder kursiv og fet tekst @@ -3367,22 +3446,22 @@ Project Details - Prosjektdetaljer + Prosjektdetaljer Overview - + Oversikt Contents - + Innhold Close - Lukk + Lukk @@ -3390,67 +3469,67 @@ Title - Tittel + Tittel Words - Ord + Ord Pages - + Sider Page - + Side Progress - + Posisjon Typical word count for a 5 by 8 inch book page with 11 pt font is 350. - + Typisk antall ord for en 5 x 8 tommers bokside med 11 pt text er 350. Start counting page numbers from this page. - + Begynn sidetall fra denne siden. Assume a new chapter or partition always start on an odd numbered page. - + Beregn at nye kapitler og partisjoner alltid starter på en høyreside. Words per page - + Ord per side Count pages from - + Tell sider fra Clear double pages - + Tøm doble sider Table of Contents - + Innholdsfortegnelse END - + SLUTT @@ -3458,42 +3537,42 @@ Working Title: {0} - + Arbeidstittel: {0} By {0} - + Av {0} Words - Ord + Ord Chapters - + Kapitler Scenes - + Scener Revisions - + Revisjoner Editing Time - + Redigeringstid Path - + Filbane @@ -3501,148 +3580,148 @@ Project Settings - Prosjektinstillinger + Prosjektinstillinger Working title - + Arbeidstittel Should be set only once. - + Bør bare settes én gang. Novel title - + Bokens tittel Change whenever you want! - + Kan endres når som helst! Author(s) - + Forfatter(e) One name per line. - + Ett navn per linje. - + Default - + Standard - + Spell check language - + Stavekontroll - + Overrides main preferences. - + Overstyrer valg i instillinger. - + No backup on close - + Slå av sikkerhetskopi GuiProjectEditReplace - + Keyword - + Kodeord - + Replace With - + Erstatt med - + Save entry - + Lagre - + Add new entry - + Legg til ny - + Delete selected entry - + Slett valgte element - + Text Replace List for Preview and Export - + Erstatningsliste for forhåndsvisning og eksport GuiProjectEditStatus - + New - Ny + Ny - + Delete - - - - - Save - + Slett + Save + Lagre + + + Colour - + Farge - + Name - + Navn - + Novel File Status Levels - + Statusnivåer i roman-filer - + Note File Importance Levels - + Viktighetsnivåer i notatfiler - + Select Colour - + Velg farge - + New Item - + Legg til - + Cannot delete status item that is in use. - + Kan ikke slette statusnivåer som er i bruk. - + {0} [{1}] - + @@ -3650,77 +3729,77 @@ Open Project - + Åpne prosjekt Working Title - + Arbeidstittel Words - Ord + Ord Last Opened - + Sist åpnet Recently Opened Projects - + Tidligere åpnede prosjekter Path - + Filbane Open - + Åpne Cancel - Avbryt + Avbryt New - Ny + Ny Remove - + Fjern novelWriter Project File ({0}) - + novelWriter-prosjektfil ({0}) All files ({0}) - Alle filer ({0}) + Alle filer ({0}) Open novelWriter Project - + Åpne novelWriter-prosjekt Remove Entry - + Fjern linje Remove '{0}' from the recent projects list? The project files will not be deleted. - + Vil du fjerne '{0}' fra listen over tidligere åpnede prosjekter? Selve prosjektfilene blir ikke slettet. @@ -3728,37 +3807,37 @@ Project Settings - Prosjektinstillinger + Prosjektinstillinger Settings - + Instillinger Status - Status + Status Importance - + Viktighet Auto-Replace - + Autoerstatt Cancel - Avbryt + Avbryt OK - OK + OK @@ -3806,150 +3885,150 @@ Please select a valid location in the tree to add the document. - + Du må velge et gyldig sted i prosjekttreet for å legge til dokumentet. Please select a valid location in the tree to add the folder. - + Du må velge et gyldig sted i prosjekttreet for å legge til mappen. Did not find anywhere to add the file or folder! - + Fant ikke noe sted å legge til filen eller mappen! - - Cannot add new files or folders to the {0} folder. - - - - + New File Ny fil - + Cannot add new folder to this item. - + Du kan ikke legge til ny mappe her. - + Maximum folder depth has been reached. - + Maksimal dybde i prosjekttreet er nådd. - + New Folder Ny mappe - + There is currently no Trash folder in this project. - + Det er ingen Søppel-mappe i dette prosjektet. - + The Trash folder is already empty. - + Søppel-mappen er allerede tom. - + Empty Trash Tøm søpla - + Permanently delete {0} file(s) from Trash? - + Vil du slette {0} filer i søppel-mappen for godt? - + Delete File Slett fil - + Permanently delete file '{0}'? - + Slette filen '{0}' for godt? - + Move file '{0}' to Trash? - + Vil du flytte filen '{0}' til søpla? - + Cannot delete folder. It is not empty. Recursive deletion is not supported. Please delete the content first. - + Kan ikke slette mappen da den ikke er tom. Rekursiv sletting er ikke støttet. Du må slette innholdet først. - + Cannot delete root folder. It is not empty. Recursive deletion is not supported. Please delete the content first. - + Kan ikke slette mappen da den ikke er tom. Rekursiv sletting er ikke støttet. Du må slette innholdet først. - + The item cannot be moved to that location. - + Denne enheten kan ikke flyttes til denne lokasjonen. - - There is nowhere to add item with name '{0}' - + + Cannot add new files or folders to the Trash folder. + Kan ikke legge til nye filer eller mapper til søppel-mappen. + + + + There is nowhere to add item with name '{0}'. + Fant ikke noe sted å legge til enheten med navn '{0}'. GuiProjectTreeMenu - + Edit Project Item - + Endre enhet - + Open Document - + Åpne dokument - + View Document - + Vis dokument - + Toggle Included Flag - + Slå av/på inkludering - + New File - Ny fil + Ny fil - + New Folder - Ny mappe + Ny mappe - + Delete Item - + Slett enhet - + Empty Trash - Tøm søpla + Tøm søpla - + Move Item Up - + Flytt enhet opp - + Move Item Down - + Flytt enhet ned @@ -3957,12 +4036,12 @@ Could not load theme config file. - Kunne ikke laste temaets konfigurasjonsfil. + Kunne ikke laste temaets konfigurasjonsfil. Could not load syntax file. - + Kunne ikke laste temaets syntaksfil. @@ -3970,37 +4049,37 @@ Project Word List - + Prosjektets ordliste Add new entry - + Legg til ny Delete selected entry - + Slett valgte element Save - + Lagre Close - Lukk + Lukk Cannot add a blank word. - + Kan ikke legge til et tomt ord. The word '{0}' is already in the word list. - + Ordet '{0}' ligger allerede i ordlisten. @@ -4008,147 +4087,147 @@ Writing Statistics - Statistikk + Statistikk Session Start - + Starttid Length - + Lengde Idle - + Inaktiv Words - Ord + Ord Histogram - + Sum Totals - + Totalsum Total Time: - + Totaltid: Idle Time: - + Inaktiv tid: Filtered Time: - + Filtrert tid: Novel Word Count: - + Ord i roman: Notes Word Count: - + Ord i notater: Total Word Count: - + Ord totalt: Filters - + Filtre Count novel files - + Tell i romanfiler Count note files - + Tell i notatfiler Hide zero word count - + Skjul null-verdier Hide negative word count - + Sjul negative verdier Group entries by day - + Samle linjer per dag Show idle time - + Vis inaktiv som tid Word count cap for the histogram - + Maks antall ord for histogram Close - Lukk + Lukk Save As - Lagre som + Lagre som JSON Data File (.json) - + JSON-format (.json) CSV Data File (.csv) - + CSV-format (.csv) JSON Data File - + JSON-format CSV Data File - + CSV-format Save Document As - Lagre domunent som + Lagre domunent som Failed to read session log file. - + Kunne ikke lese loggfil med skrive-statistikk. @@ -4156,27 +4235,27 @@ Failed to open document file. - + Kunne ikke åpne dokumentets fil. Opened Document: {0} - + Åpnet dokument: {0} Could not save document. - + Kunne ikke lagre dokumentet. Saved Document: {0} - + Lagret dokumentet: {0} Could not delete document file. - + Kunne ikke slette dokumentets fil. @@ -4287,17 +4366,17 @@ File not found: {0} - + Fant ikke filen: {0} Failed to parse project xml. - + Kunne ikke lese prosjektets xml-data. Attempting to open backup project file instead. - + Forsøker å åpne prosjektets sekundære porsjektfil istedet. @@ -4305,192 +4384,172 @@ Ukjent - + Project file does not appear to be a novelWriterXML file. - + Porsjektfilen later ikke til å være en novelWriterXML-fil. - - Old Project Version - - - - - The project file and data is created by a novelWriter version lower than 0.7. Do you want to upgrade the project to the most recent format? - - - - - Note that after the upgrade, you cannot open the project with an older version of novelWriter any more, so make sure you have a recent backup. - - - - + Unknown or unsupported novelWriter project file format. The project cannot be opened by this version of novelWriter. The file was saved with novelWriter version {0}. - + Prosjektfilen har et ukjent eller ikke støttet format, og kan ikke åpnes med denne versjonen av novelWriter. Prosjektet ble lagret av novelWriter versjon {0}. - + Version Conflict - + Versjonskonflikt - - This project was saved by a newer version of novelWriter, version {0}. This is version {1}. If you continue to open the project, some attributes and settings may not be preserved, but the overall project should be fine. Continue opening the project? - - - - + Opened Project: {0} - + Åpnet prosjekt: {0} - + Project path not set, cannot save project. - + Prosjektet mangler filbane, og kan ikke bli lagret. - + Failed to save project. - + Kunne ikke lagre prosjektet. - + Saved Project: {0} - + Lagret prosjekt: {0} - + Backing up project ... - + Lager sikkerhetskopi ... - + Cannot backup project because no backup path is set. Please set a valid backup location in Tools > Preferences. - + Kan ikke ta sikkerhetskopi av prosjektet da ingen filbane er satt. Du må først sette en filbane i Verktøy > Instillinger. - + Cannot backup project because no project name is set. Please set a Working Title in Project > Project Settings. - + Kan ikke ta sikkerhetskopi av prosjektet da ingen arbeidstittel er satt. Du må først sette en arbeidstittel i Prosjekt > Prosjektinnstillinger. - + Cannot backup project because the backup path does not exist. Please set a valid backup location in Tools > Preferences. - + Kan ikke ta sikkerhetskopi av prosjektet da filbane ikke finnes. Du må sette en ny filbane i Verktøy > Instillinger. - + Could not create backup folder. - + Kunne ikke lage mappe til sikkerhetskopi. - + Cannot backup project because the backup path is within the project folder to be backed up. Please choose a different backup path in Tools > Preferences. - + Kan ikke ta sikkerhetskopi av prosjektet da filbanen er inne i prosjektmappen. Du må sette en ny filbane i Verktøy > Instillinger. - + Backup from {0} - + Sikkerhetskopi fra {0} - + Backup archive file written to: {0} - + Sikkerhetskopi skrevet til: {0} - + Could not write backup archive. - + Kunne ikke lage sikkerhetskopi. - + Project backed up to '{0}' - + Sikkerhetskopi skrevet til '{0}' - + Failed to create a new example project. - + Kunne ikke lage nytt eksempel-prosjekt. + + + + Failed to create a new example project. Could not find the necessary files. They seem to be missing from this installation. + Kunne ikke lage nytt eksempel-prosjekt. Kunne ikke finne de nødvendige filene. De ser ut til å mangle i denne installasjonen. - Failed to create a new example project. Could not find the necessary files. They seem to be missing from this installation. - - - - Could not create new project folder. - + Kunne ikke lage ny prosjekt-mappe. - + New project folder is not empty. Each project requires a dedicated project folder. - + Ny prosjektmappe er ikke tom. Hvert prosjekt trenger sin egen mappe. - + You must set a valid backup path in preferences to use the automatic project backup feature. - + Du må sette en gyldig filbane i innstillingene for å kunne bruke automatisk sikkerhetskopi. - + You must set a valid project name in project settings to use the automatic project backup feature. - + Du må sette en gyldig arbeidstittel i prosjektinnstillingene for å kunne bruke automatisk sikkerhetskopi. - + and og - + Found {0} orphaned file(s) in project folder. - + Fant {0} tapte filer i prosjektmappen. - + Recovered Gjennopprettet - + [{0}] {1} - + Recovered File {0} Gjennopprettet fil {0} - + One or more orphaned files could not be added back into the project. Make sure at least a Novel root folder exists. Én eller flere gjennopprettede filer kunne ikke bli lagt til i posjektet. Pass på at "Roman"-mappen i det minste eksisterer. - + Not a folder: {0} Ikke en mappe: {0} - + Could not move: {0} Kunne ikke flytte: {0} - + Could not delete: {0} Kunne ikke slette: {0} - + Could not make folder: {0} Kunne ikke lage mappe: {0} - + Could not move item {0} to {1}. Kunne ikke flytte {0} til {1}. @@ -4499,48 +4558,53 @@ Chapter Kapittel + + + This project was saved by a newer version of novelWriter, version {0}. This is version {1}. If you continue to open the project, some attributes and settings may not be preserved, but the overall project should be fine. Continue opening the project? + Dette prosjektet ble lagret av en nyere versjon av novelWriter, versjon {0}. Dette er versjon {1}. Hvis du ønsker å fortsette med å åpne prosjektet, kan noen av innstillingene bli borte, men selve prosjektet vil være i orden. Vil du fortsatt åpne prosjektet? + ProjWizardCustomPage Custom Project Options - + Flere alternativer Select which additional root folders to make, and how to populate the Novel folder. If you don't want to add chapters or scenes, set the values to 0. You can add scenes without chapters. - + Velg hvilke mapper du ønsker i prosjektet, og hvordan du ønsker å fylle hovedmappen for boken. Hvis du ikke ønsker å legge til kapitler og scener, sett verdiene til 0. Du kan også legge til scener uten å legge til kapitler. Additional Root Folders - + Hovedmapper {0} folder - + {0} Populate Novel Folder - + Roman-mappen Add chapters - + Legg til kapitler Scenes (per chapter) - + Scener (per kapittel) Add chapter folders - + Lag kapittel-mapper @@ -4548,27 +4612,27 @@ Finished - Ferdig + Ferdig All done. - + Alt er klart. Press '{0}' to create the new project. - + Trykk '{0}' for å opprette det nye prosjektet. Done - + Finish - + @@ -4576,22 +4640,22 @@ Select Project Folder - + Velg prosjektmappe Select a location to store the project. A new project folder will be created in the selected location. - + Velg et sted hvor prosjektet skal lagres. En mappe for hele prosjektet vil bli opprettet her. Required - + Påkrevd Project Path - + Filbane @@ -4599,47 +4663,47 @@ Create New Project - + Opprett nytt prosjekt Provide at least a working title. The working title should not be change beyond this point as it is used by the application for generating file names for for instance backups. The other fields are optional and can be changed at any time in Project Settings. - + Du må fylle inn minst en arbeidstittel. Du bør ikke endre arbeidstittelen etter at prosjektet er opprettet da denne brukes til blant annet filnavn for sikkerhetskopi. De andre feltene er valgfrie, og kan endres når som helst i Prosjektinstillinger. Side image by {0}, {1} - + Illustrasjon av {0}, {1} Required - + Påkrevd Optional - + Valgfritt Optional. One name per line. - + Valgfritt. Ett navn per linje. Working Title - + Arbeidstittel Novel Title - + Bokens tittel Author(s) - + Forfatter(e) @@ -4647,27 +4711,27 @@ Populate Project - + Fyll prosjektet Choose how to pre-fill the project. Either with a minimal set of starter items, an example project explaining and showing many of the features, or show further custom options on the next page. - + Velg hvordan du vil forhåndsfylle prosjektet. Du kan velge mellom et minimalt sett med mapper og filer, et eksempel-prosjekt som forklarer og viser hvordan du bruker programmet, eller se flere valg på neste side. Fill the project with a minimal set of items - + Fyll prosjektet med et minimalt sett innhold Fill the project with example files - + Fyll prosjektet med eksempelfiler Show detailed options for filling the project - + Vis detaljerte valg for å fylle prosjektet diff --git a/nw/gui/projtree.py b/nw/gui/projtree.py index 90126ab8..1e557ba8 100644 --- a/nw/gui/projtree.py +++ b/nw/gui/projtree.py @@ -249,9 +249,7 @@ class GuiProjectTree(QTreeWidget): if self.theProject.projTree.isTrashRoot(pHandle): self.makeAlert( - self.tr("Cannot add new files or folders to the {0} folder.").format( - trConst(nwLabels.CLASS_NAME[nwItemClass.TRASH]) - ), nwAlert.ERROR + self.tr("Cannot add new files or folders to the Trash folder."), nwAlert.ERROR ) return False @@ -974,7 +972,7 @@ class GuiProjectTree(QTreeWidget): else: self.makeAlert( self.tr( - "There is nowhere to add item with name '{0}'" + "There is nowhere to add item with name '{0}'." ).format(nwItem.itemName), nwAlert.ERROR ) del self._treeMap[tHandle] From 8948c3f435e6829f254e3e7fab92e0d0909f3ae4 Mon Sep 17 00:00:00 2001 From: "Veronica K. B. Olsen" <1619840+vkbo@users.noreply.github.com> Date: Wed, 17 Feb 2021 23:16:23 +0100 Subject: [PATCH 12/13] Final translation pass for Norwegian --- i18n/nw_nb_NO.ts | 271 +++++++++++++++++++------------------- nw/constants/constants.py | 4 +- nw/gui/writingstats.py | 2 +- 3 files changed, 138 insertions(+), 139 deletions(-) diff --git a/i18n/nw_nb_NO.ts b/i18n/nw_nb_NO.ts index e17aed57..7737c09c 100644 --- a/i18n/nw_nb_NO.ts +++ b/i18n/nw_nb_NO.ts @@ -1,6 +1,5 @@ - - + Common @@ -224,7 +223,7 @@ Pars - Avsn. + Avsnitt @@ -259,12 +258,12 @@ Single low-9 quotation mark - Enkelt, lavt 9 sitattegn + Enkelt, lavt-9 sitattegn Single high-reversed-9 quotation mark - Enkelt, høyt, reversert 9 sitattegn + Enkelt, høyt, reversert-9 sitattegn @@ -279,17 +278,17 @@ Double low-9 quotation mark - Dobbelt, lavt 9 sitattegn + Dobbelt, lavt-9 sitattegn Double high-reversed-9 quotation mark - Dobbelt, høyt, reversert 9 sitattegn + Dobbelt, høyt, reversert-9 sitattegn Double low-reversed-9 quotation mark - Dobbelt, lavt, reversert 9 sitattegn + Dobbelt, lavt, reversert-9 sitattegn @@ -301,16 +300,6 @@ Single right-pointing angle quotation mark Enkelt, høyre, angulært sitattegn - - - Left-pointing double angle quotation mark - Dobbelt, venstre, angulært sitattegn - - - - Right-pointing double angle quotation mark - Dobbelt, høyre, angulært sitattegn - Left corner bracket @@ -331,6 +320,16 @@ Right white corner bracket Høyre, hvit hjørnevinkel + + + Double left-pointing angle quotation mark + Dobbelt, venstre, angulært sitattegn + + + + Double right-pointing angle quotation mark + Dobbelt, høyre, angulært sitattegn + GuiAbout @@ -362,7 +361,7 @@ Website: {0} - Webside: {0} + Nettside: {0} @@ -387,7 +386,7 @@ See the License tab for the full license text, or visit the GNU website at {0} for more details. - Se lisens-fanen for full-tekst versjonen av lisensen (på engelsk), eller besøk GNY sin webside på {0} for mer informasjon. + Se lisens-fanen for fulltekst-versjonen av lisensen (på engelsk), eller besøk GNU sin nettside på {0} for mer informasjon. @@ -555,12 +554,12 @@ Include body text - Includer tekst + Inkluder tekst File Filter Options - Fil-filtrering + Fil-filtre @@ -580,7 +579,7 @@ Include novel files - Includer romanfiler + Inkluder romanfiler @@ -600,7 +599,7 @@ Replace tabs with spaces - Erstatt tabulator-tegn + Erstatt tab med mellomrom @@ -610,7 +609,7 @@ Build Preview - Forhåndsvisning + Lag forhåndsvisning @@ -685,7 +684,7 @@ There were problems when building the project - Det har oppstått en feil under byggingen av prosjektet. + Det har oppstått en feil under byggingen av prosjektet @@ -735,7 +734,7 @@ Save Document As - Lagre domunent som + Lagre dokumentet som @@ -763,7 +762,7 @@ This area will show the content of the document to be exported or printed. Press the "Build Preview" button to generate content. - Dette området vil vise innholdet av dokumentet som skal eksporteres. Trykk knappen merket med "Forhåndsvisning" for å oppdatere innholdet. + Dette området vil vise innholdet av dokumentet som skal eksporteres. Trykk på knappen merket med "Lag forhåndsvisning" for å oppdatere innholdet. @@ -814,7 +813,7 @@ Toggle Focus Mode - Slå av/på "fokus modus" + Slå av/på "Fokus-modus" @@ -857,7 +856,7 @@ RegEx Mode - RegEx modus + RegEx-modus @@ -877,7 +876,7 @@ Search Next File - Søk neste file + Søk i neste file @@ -950,7 +949,7 @@ The document has grown too big and you cannot add more text to it. The maximum size of a single novelWriter document is {0} MB. - Dokumentet har blitt for stort, og du kan ikke legge til mer tekst. Den maksimale tillatte størrelsen for et novelWriter-dokument er {0} MB. + Dokumentet har blitt for stort og du kan ikke legge til mer tekst. Den maksimale tillatte størrelsen for et novelWriter-dokument er {0} MB. @@ -975,22 +974,22 @@ Select All - Velg alt + Velg hele teksten Select Word - Velg ord + Velg hele ordet Select Paragraph - Velg avsnitt + Velg hele avsnittet Spelling Suggestion(s) - Forslag, stavekontroll + Forslag fra stavekontrollen @@ -1116,7 +1115,7 @@ Cannot add new folder for the document split. Maximum folder depth has been reached. Please move the file to another level in the project tree. - Kan ikke legge til ny mappe for å dele opp dokumentet. Dokumentet har allerede maksimal dybde i treet. Flytt dokumentet til et annet nivå i treet først. + Kan ikke legge til ny mappe for å dele opp dokumentet. Dokumentet har allerede maksimal dybde i prosjekttreet. Flytt dokumentet til et annet nivå først. @@ -1149,7 +1148,7 @@ Activate to freeze the content of the references panel when changing document - Aktiver denne for å fryse innholdet i referanse-panelet ved endring av vist dokument + Aktiver for å fryse innholdet i referanse-panelet ved bytte av vist dokument @@ -1169,12 +1168,12 @@ Sticky - Sett fast + Hold igjen Comments - Kommentar + Kommentarer @@ -1225,17 +1224,17 @@ Select All - Velg alt + Velg hele teksten Select Word - Velg ord + Velg hele ordet Select Paragraph - Velg avsnitt + Velg hele avsnittet @@ -1271,7 +1270,7 @@ Characters - Karakter + Tegn @@ -1332,7 +1331,7 @@ Novel - Roman + Innhold @@ -1347,7 +1346,7 @@ Project Settings - Prosjektinstillinger + Prosjektinnstillinger @@ -1377,7 +1376,7 @@ Close Project - Lukke prosjektet + Lukk prosjektet @@ -1392,17 +1391,17 @@ Backup Project - Sikkerhetskopi + Sikkerhetskopiering Backup the current project? - Ta sikkerhetskopi av dette prosjektet? + Ønsker du å ta sikkerhetskopi av dette prosjektet? The project was locked by the computer '{0}' ({1} {2}), last active on {3}. - Prosjektet er låst av en annen datamaskin: '{0}' ({1} {2}), siste registrerte aktivitet var {3}. + Prosjektet er låst av datamaskinen '{0}' ({1} {2}), siste registrerte aktivitet var {3}. @@ -1417,7 +1416,7 @@ Note: If the program or the computer previously crashed, the lock can safely be overridden. If, however, another instance of novelWriter has the project open, overriding the lock may corrupt the project, and is not recommended. - Merknad: Hvis programmet har krasjet og har lagt igjen låsen, kan man trygt overstyre denne. Men, hvis en annen instans av novelWriter har prosjektet åpent, kan det å overstyre låsen føre til tap av data, og dette er ikke anbefalt. + Merk at hvis programmet har krasjet og har lagt igjen låsen, kan man trygt overstyre denne. Men hvis en annen instans av novelWriter har prosjektet åpent, kan det å overstyre låsen føre til tap av data, og dette er ikke anbefalt. @@ -1482,7 +1481,7 @@ Indexing completed in {0} ms - Indekseringen to {0} ms + Indekseringen tok {0} ms @@ -1532,7 +1531,7 @@ novelWriter is ready ... - novelWriter er klar for dyst ... + novelWriter er klar ... @@ -1585,12 +1584,12 @@ Project Settings - Prosjektinstillinger + Prosjektinnstillinger Project settings - Endre prosjektinstillinger + Endre prosjektinnstillinger @@ -1600,12 +1599,12 @@ Project details - Se prosjektdetaljer + Vis prosjektdetaljer Create Root Folder - Lag ny rotmappe + Lag ny hovedmappe @@ -1670,7 +1669,7 @@ Change project item settings - Endre instillinger for enhet + Endre innstillinger for enhet @@ -1715,7 +1714,7 @@ Empty Trash - Tøm søpla + Tøm søppel @@ -1745,7 +1744,7 @@ Create new document - Lag et nytt dokument + Opprett et nytt dokument @@ -1785,7 +1784,7 @@ View document as HTML - Vis dokumentet som HTML + Vis dokument som HTML @@ -1800,7 +1799,7 @@ Show File Details - Vis filbane + Vis filinformasjon @@ -1815,7 +1814,7 @@ Import document from a text or markdown file - Importer et dokument fra en text- eller markdown-fil + Importer et dokument fra en ekstern fil @@ -1840,7 +1839,7 @@ &Edit - R&ediger + &Rediger @@ -1895,7 +1894,7 @@ Select All - Velg alt + Velg hele teksten @@ -1905,7 +1904,7 @@ Select Paragraph - Velg avsnitt + Velg hele avsnittet @@ -1925,7 +1924,7 @@ Move focus to project tree - Flutt fokus til prosjekttre + Flytt fokus til prosjekttre @@ -1980,17 +1979,17 @@ Focus Mode - Focus modus + Focus-modus Toggles a distraction free mode, only showing text editor - Slå av eller på "fokus modus" hvor kun teksteditoren vises i vinduet + Slå av eller på "Fokus-modus" hvor kun teksteditoren vises i vinduet Full Screen Mode - Fullskjermmodus + Fullskjerm-modus @@ -2360,7 +2359,7 @@ Add strikethrough to selected text - Sett en strek over valgt tekst + Sett en strek gjennom valgt tekst @@ -2385,7 +2384,7 @@ Header 1 - Overskrift 1 + Overskrift nivå 1 @@ -2395,7 +2394,7 @@ Header 2 - Overskrift 2 + Overskrift nivå 2 @@ -2405,7 +2404,7 @@ Header 3 - Overskrift 3 + Overskrift nivå 3 @@ -2415,7 +2414,7 @@ Header 4 - Overskrift 4 + Overskrift nivå 4 @@ -2505,7 +2504,7 @@ Rebuild the tag indices and word counts - Bygg hele prosjekt-indeksen på nytt + Bygg hele prosjektets indeks på nytt @@ -2530,12 +2529,12 @@ Backup Project Folder - Sikkerhetskopi + Lag sikkerhetskopi Backup Project - Ta sikkerhetskopi av prosjektets mappe + Lag sikkerhetskopi av prosjektets mappe @@ -2545,7 +2544,7 @@ Launch the Build novel project tool - Åpne verktøyet for å bygge prosjektet + Åpne verktøy for å bygge prosjektet @@ -2555,12 +2554,12 @@ Show the writing statistics dialog - Viser prosjektets statistikk i et vindu + Vis prosjektets statistikk i et vindu Preferences - Instillinger + Innstillinger @@ -2739,7 +2738,7 @@ Characters - Karakter + Tegn @@ -2780,7 +2779,7 @@ Preferences - Instillinger + Innstillinger @@ -2805,7 +2804,7 @@ Highlighting - Farger + Fremheving @@ -2893,7 +2892,7 @@ Auto-replace dots - Erstatt flere punktum + Erstatt tre punktum @@ -3011,7 +3010,7 @@ Text width is defined by the margins only. - Tekstbredde er kun definert av margene. + Tekstbredden er kun definert av margene. @@ -3079,7 +3078,7 @@ Spell check language - Stavekontroll + Språk for stavekontroll @@ -3094,7 +3093,7 @@ Full spell checking is disabled above this limit. - Automatisk stavekontroll slås av over denne. + Automatisk stavekontroll slås av over grensen. @@ -3129,7 +3128,7 @@ Show tabs and spaces - Vis tabulator og mellomrom + Synlige tabulatorer og mellomrom @@ -3139,7 +3138,7 @@ Show line endings - Vis linjeender + Synlige linjeender @@ -3154,7 +3153,7 @@ Scroll past end of the document - Tillat å gå forbi slutten av dokumentet + Tillat å rulle forbi slutten av dokumentet @@ -3164,7 +3163,7 @@ Typewriter style scrolling when you type - Skrivemaskin-rulling mens du skriver + Skrivemaskin-liknende rulling mens du skriver @@ -3192,7 +3191,7 @@ Main GUI theme - GUI-tema + Fargetema @@ -3232,12 +3231,12 @@ GUI Settings - GUI-instillinger + Brukergrensesnitt Show full path in document header - Vis full prosjektbane i dokumenthodet + Vis full prosjektbane i dokumenthoder @@ -3247,7 +3246,7 @@ Hide vertical scroll bars in main windows - Skjul vertikale rullefelt i hovedvinduene + Skjul vertikale rullefelt i hovedvinduer @@ -3257,7 +3256,7 @@ Hide horizontal scroll bars in main windows - Skjul horisontale rullefelt i hovedvinduene + Skjul horisontale rullefelt i hovedvinduer @@ -3320,12 +3319,12 @@ Run backup when the project is closed - Ta sikkerhetskopi når prosjektet lukkes + Lag sikkerhetskopi når prosjektet lukkes Can be overridden for individual projects in project settings. - Kan overstyres fra individuelle prosjektinstillinger. + Kan overstyres fra individuelle prosjektinnstillinger. @@ -3355,12 +3354,12 @@ Editor inactive time before pausing timer - Tid uten skriving før klokka stoppes + Tid uten skriving før klokka settes på pause User activity includes typing and changing the content. - Dette måler kun endringer i editoren. + Dette måler kun endringer i teksteditoren. @@ -3393,7 +3392,7 @@ Quotes & Dialogue - Sitater & dialog + Sitattegn & dialog @@ -3438,7 +3437,7 @@ Applies to emphasis (italic) and strong (bold). - Gjelder kursiv og fet tekst + Gjelder kursiv og fet tekst. @@ -3489,12 +3488,12 @@ Progress - Posisjon + Fremdrift Typical word count for a 5 by 8 inch book page with 11 pt font is 350. - Typisk antall ord for en 5 x 8 tommers bokside med 11 pt text er 350. + Typisk antall ord for en 5 x 8 tommers bokside med 11 pt tekst er 350. @@ -3580,7 +3579,7 @@ Project Settings - Prosjektinstillinger + Prosjektinnstillinger @@ -3615,17 +3614,17 @@ Default - Standard + Ingen valg Spell check language - Stavekontroll + Språk for stavekontroll Overrides main preferences. - Overstyrer valg i instillinger. + Overstyrer valg i innstillinger. @@ -3648,7 +3647,7 @@ Save entry - Lagre + Lagre tekst @@ -3807,12 +3806,12 @@ Project Settings - Prosjektinstillinger + Prosjektinnstillinger Settings - Instillinger + Innstillinger @@ -3920,7 +3919,7 @@ There is currently no Trash folder in this project. - Det er ingen Søppel-mappe i dette prosjektet. + Det er for øyeblikket ingen søppel-mappe i dette prosjektet. @@ -3930,7 +3929,7 @@ Empty Trash - Tøm søpla + Tøm søppel @@ -3960,7 +3959,7 @@ Cannot delete root folder. It is not empty. Recursive deletion is not supported. Please delete the content first. - Kan ikke slette mappen da den ikke er tom. Rekursiv sletting er ikke støttet. Du må slette innholdet først. + Kan ikke slette hovedmappen da den ikke er tom. Rekursiv sletting er ikke støttet. Du må slette innholdet først. @@ -4018,7 +4017,7 @@ Empty Trash - Tøm søpla + Tøm søppel @@ -4054,7 +4053,7 @@ Add new entry - Legg til ny + Legg til nytt @@ -4117,7 +4116,7 @@ Sum Totals - Totalsum + Totalsummer @@ -4172,12 +4171,12 @@ Hide negative word count - Sjul negative verdier + Skjul negative verdier Group entries by day - Samle linjer per dag + Samle rader per dag @@ -4219,16 +4218,16 @@ CSV Data File CSV-format - - - Save Document As - Lagre domunent som - Failed to read session log file. Kunne ikke lese loggfil med skrive-statistikk. + + + Save Data As + Lagre data som + NWDoc @@ -4311,7 +4310,7 @@ New Project - Nytt Prosjekt + Nytt prosjekt @@ -4346,12 +4345,12 @@ New Chapter - Nytt Kapittel + Nytt kapittel New Scene - Ny Scene + Ny scene @@ -4376,7 +4375,7 @@ Attempting to open backup project file instead. - Forsøker å åpne prosjektets sekundære porsjektfil istedet. + Forsøker å åpne prosjektets sekundære prosjektfil istedet. @@ -4386,7 +4385,7 @@ Project file does not appear to be a novelWriterXML file. - Porsjektfilen later ikke til å være en novelWriterXML-fil. + Prosjektfilen later ikke til å være en novelWriterXML-fil. @@ -4406,7 +4405,7 @@ Project path not set, cannot save project. - Prosjektet mangler filbane, og kan ikke bli lagret. + Prosjektet mangler filbane, og kan ikke lagres. @@ -4426,7 +4425,7 @@ Cannot backup project because no backup path is set. Please set a valid backup location in Tools > Preferences. - Kan ikke ta sikkerhetskopi av prosjektet da ingen filbane er satt. Du må først sette en filbane i Verktøy > Instillinger. + Kan ikke ta sikkerhetskopi av prosjektet da ingen filbane er satt. Du må først sette en filbane i Verktøy > Innstillinger. @@ -4436,7 +4435,7 @@ Cannot backup project because the backup path does not exist. Please set a valid backup location in Tools > Preferences. - Kan ikke ta sikkerhetskopi av prosjektet da filbane ikke finnes. Du må sette en ny filbane i Verktøy > Instillinger. + Kan ikke ta sikkerhetskopi av prosjektet da filbane ikke finnes. Du må sette en ny filbane i Verktøy > Innstillinger. @@ -4446,7 +4445,7 @@ Cannot backup project because the backup path is within the project folder to be backed up. Please choose a different backup path in Tools > Preferences. - Kan ikke ta sikkerhetskopi av prosjektet da filbanen er inne i prosjektmappen. Du må sette en ny filbane i Verktøy > Instillinger. + Kan ikke ta sikkerhetskopi av prosjektet da filbanen er inne i prosjektmappen. Du må sette en ny filbane i Verktøy > Innstillinger. @@ -4589,7 +4588,7 @@ Populate Novel Folder - Roman-mappen + Fyll roman-mappen @@ -4721,7 +4720,7 @@ Fill the project with a minimal set of items - Fyll prosjektet med et minimalt sett innhold + Fyll prosjektet med et minimalt innhold diff --git a/nw/constants/constants.py b/nw/constants/constants.py index 9f17bae5..a3ab3580 100644 --- a/nw/constants/constants.py +++ b/nw/constants/constants.py @@ -240,8 +240,8 @@ class nwQuotes(): "\u2039" : QT_TRANSLATE_NOOP("Constant", "Single left-pointing angle quotation mark"), "\u203a" : QT_TRANSLATE_NOOP("Constant", "Single right-pointing angle quotation mark"), - "\u00ab" : QT_TRANSLATE_NOOP("Constant", "Left-pointing double angle quotation mark"), - "\u00bb" : QT_TRANSLATE_NOOP("Constant", "Right-pointing double angle quotation mark"), + "\u00ab" : QT_TRANSLATE_NOOP("Constant", "Double left-pointing angle quotation mark"), + "\u00bb" : QT_TRANSLATE_NOOP("Constant", "Double right-pointing angle quotation mark"), "\u300c" : QT_TRANSLATE_NOOP("Constant", "Left corner bracket"), "\u300d" : QT_TRANSLATE_NOOP("Constant", "Right corner bracket"), diff --git a/nw/gui/writingstats.py b/nw/gui/writingstats.py index aa8ded71..5cc23198 100644 --- a/nw/gui/writingstats.py +++ b/nw/gui/writingstats.py @@ -372,7 +372,7 @@ class GuiWritingStats(QDialog): dlgOpt = QFileDialog.Options() dlgOpt |= QFileDialog.DontUseNativeDialog savePath, _ = QFileDialog.getSaveFileName( - self, self.tr("Save Document As"), savePath, options=dlgOpt + self, self.tr("Save Data As"), savePath, options=dlgOpt ) if not savePath: return False From 515e53b2204266c8be34393fc336ea6d613d20d3 Mon Sep 17 00:00:00 2001 From: "Veronica K. B. Olsen" <1619840+vkbo@users.noreply.github.com> Date: Wed, 17 Feb 2021 23:20:20 +0100 Subject: [PATCH 13/13] Fix indentation --- nw/common.py | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/nw/common.py b/nw/common.py index e4015563..d05d814b 100644 --- a/nw/common.py +++ b/nw/common.py @@ -281,48 +281,48 @@ def fuzzyTime(secDiff): ) elif secDiff < 3300: # 55 minutes return QCoreApplication.translate( - "Common", "{0} minutes ago").format(int(round(secDiff/60)) - ) + "Common", "{0} minutes ago" + ).format(int(round(secDiff/60))) elif secDiff < 5400: # 90 minutes return QCoreApplication.translate( "Common", "an hour ago" ) elif secDiff < 84600: # 23.5 hours return QCoreApplication.translate( - "Common", "{0} hours ago").format(int(round(secDiff/3600)) - ) + "Common", "{0} hours ago" + ).format(int(round(secDiff/3600))) elif secDiff < 129600: # 1.5 days return QCoreApplication.translate( "Common", "a day ago" ) elif secDiff < 561600: # 6.5 days return QCoreApplication.translate( - "Common", "{0} days ago").format(int(round(secDiff/86400)) - ) + "Common", "{0} days ago" + ).format(int(round(secDiff/86400))) elif secDiff < 907200: # 10.5 days return QCoreApplication.translate( "Common", "a week ago" ) elif secDiff < 2419200: # 28 days return QCoreApplication.translate( - "Common", "{0} weeks ago").format(int(round(secDiff/604800)) - ) + "Common", "{0} weeks ago" + ).format(int(round(secDiff/604800))) elif secDiff < 3888000: # 45 days return QCoreApplication.translate( "Common", "a month ago" ) elif secDiff < 29808000: # 345 days return QCoreApplication.translate( - "Common", "{0} months ago").format(int(round(secDiff/2592000)) - ) + "Common", "{0} months ago" + ).format(int(round(secDiff/2592000))) elif secDiff < 47336400: # 1.5 years return QCoreApplication.translate( "Common", "a year ago" ) else: return QCoreApplication.translate( - "Common", "{0} years ago").format(int(round(secDiff/31557600)) - ) + "Common", "{0} years ago" + ).format(int(round(secDiff/31557600))) def makeFileNameSafe(theText): """Returns a filename safe version of the text.