From c6da77baf95cecb418ac04b6e0cf5eea9653af8e Mon Sep 17 00:00:00 2001 From: Lech Baczynski Date: Thu, 5 Apr 2018 12:15:12 +0200 Subject: [PATCH 01/51] - adding characters count. Implementing #334 --- manuskript/enums.py | 1 + manuskript/models/outlineItem.py | 9 +++++++++ manuskript/ui/editors/mainEditor.py | 7 +++++-- 3 files changed, 15 insertions(+), 2 deletions(-) diff --git a/manuskript/enums.py b/manuskript/enums.py index 4e94d0b..80d6696 100644 --- a/manuskript/enums.py +++ b/manuskript/enums.py @@ -60,6 +60,7 @@ class Outline(IntEnum): textFormat = 15 revisions = 16 customIcon = 17 + charCount = 18 class Abstract(IntEnum): title = 0 diff --git a/manuskript/models/outlineItem.py b/manuskript/models/outlineItem.py index 46d2d24..c465b55 100644 --- a/manuskript/models/outlineItem.py +++ b/manuskript/models/outlineItem.py @@ -80,6 +80,10 @@ class outlineItem(abstractItem): def wordCount(self): return self._data.get(self.enum.wordCount, 0) + def charCount(self): + return self._data.get(self.enum.charCount, 0) + + ####################################################################### # Data ####################################################################### @@ -144,6 +148,7 @@ class outlineItem(abstractItem): if column == E.text: wc = F.wordCount(data) self.setData(E.wordCount, wc) + self.setData(E.charCount, len(data)) if column == E.compile: # Title changes when compile changes @@ -187,9 +192,12 @@ class outlineItem(abstractItem): else: wc = 0 + cc = 0 for c in self.children(): wc += F.toInt(c.data(self.enum.wordCount)) + cc += F.toInt(c.data(self.enum.charCount)) self._data[self.enum.wordCount] = wc + self._data[self.enum.charCount] = cc setGoal = F.toInt(self.data(self.enum.setGoal)) goal = F.toInt(self.data(self.enum.goal)) @@ -460,6 +468,7 @@ class outlineItem(abstractItem): # We don't want to write some datas (computed) XMLExclude = [enums.Outline.wordCount, + enums.Outline.charCount, enums.Outline.goal, enums.Outline.goalPercentage, enums.Outline.revisions] diff --git a/manuskript/ui/editors/mainEditor.py b/manuskript/ui/editors/mainEditor.py index 305b963..5f8d94b 100644 --- a/manuskript/ui/editors/mainEditor.py +++ b/manuskript/ui/editors/mainEditor.py @@ -302,6 +302,7 @@ class mainEditor(QWidget, Ui_mainEditor): wc = item.data(Outline.wordCount) goal = item.data(Outline.goal) + chars = item.data(Outline.charCount) # len(item.data(Outline.text)) progress = item.data(Outline.goalPercentage) # mw = qApp.activeWindow() @@ -317,12 +318,14 @@ class mainEditor(QWidget, Ui_mainEditor): drawProgress(p, rect, progress, 2) del p self.lblRedacProgress.setPixmap(self.px) - self.lblRedacWC.setText(self.tr("{} words / {} ").format( + self.lblRedacWC.setText(self.tr("({} chars) {} words / {} ").format( + chars, locale.format("%d", wc, grouping=True), locale.format("%d", goal, grouping=True))) else: self.lblRedacProgress.hide() - self.lblRedacWC.setText(self.tr("{} words ").format( + self.lblRedacWC.setText(self.tr("({} chars) {} words ").format( + chars, locale.format("%d", wc, grouping=True))) ############################################################################### From e15cb80847738dbdb6d9d5e57c5fa90fbe93493f Mon Sep 17 00:00:00 2001 From: Lech Baczynski Date: Tue, 10 Apr 2018 07:11:32 +0200 Subject: [PATCH 02/51] - formatting characters count according to locale, as in words count --- manuskript/ui/editors/mainEditor.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/manuskript/ui/editors/mainEditor.py b/manuskript/ui/editors/mainEditor.py index 5f8d94b..b6fd83e 100644 --- a/manuskript/ui/editors/mainEditor.py +++ b/manuskript/ui/editors/mainEditor.py @@ -306,6 +306,8 @@ class mainEditor(QWidget, Ui_mainEditor): progress = item.data(Outline.goalPercentage) # mw = qApp.activeWindow() + if not chars: + chars = 0 if not wc: wc = 0 if goal: @@ -319,13 +321,13 @@ class mainEditor(QWidget, Ui_mainEditor): del p self.lblRedacProgress.setPixmap(self.px) self.lblRedacWC.setText(self.tr("({} chars) {} words / {} ").format( - chars, + locale.format("%d", chars, grouping=True), locale.format("%d", wc, grouping=True), locale.format("%d", goal, grouping=True))) else: self.lblRedacProgress.hide() self.lblRedacWC.setText(self.tr("({} chars) {} words ").format( - chars, + locale.format("%d", chars, grouping=True), locale.format("%d", wc, grouping=True))) ############################################################################### From 5ca087a67daf457cfa2fdaeab793c854ece7c751 Mon Sep 17 00:00:00 2001 From: John Bintz <27256+johnbintz@users.noreply.github.com> Date: Sun, 9 Feb 2020 10:54:40 -0500 Subject: [PATCH 03/51] Select newly added world items, opening branches as necessary --- manuskript/models/worldModel.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/manuskript/models/worldModel.py b/manuskript/models/worldModel.py index 61254cd..5d883ca 100644 --- a/manuskript/models/worldModel.py +++ b/manuskript/models/worldModel.py @@ -136,6 +136,9 @@ class worldModel(QStandardItemModel): _id = QStandardItem(self.getUniqueID()) row = [name, _id] + [QStandardItem() for i in range(2, len(World))] parent.appendRow(row) + + self.mw.treeWorld.setExpanded(self.selectedIndex(), True) + self.mw.treeWorld.setCurrentIndex(self.indexFromItem(name)) return name def getUniqueID(self): From a43a4ccb40efb4f48e165d67b963699f96df0e2d Mon Sep 17 00:00:00 2001 From: Tom Wardill Date: Tue, 11 Feb 2020 18:50:48 +0000 Subject: [PATCH 04/51] Add snap layout for pandoc templates directory --- snap/snapcraft.yaml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/snap/snapcraft.yaml b/snap/snapcraft.yaml index 703d87e..76df07f 100644 --- a/snap/snapcraft.yaml +++ b/snap/snapcraft.yaml @@ -21,6 +21,9 @@ grade: stable confinement: strict base: core18 icon: icons/Manuskript/manuskript.svg +layout: + /usr/share/pandoc/data/templates: + bind: $SNAP/usr/share/pandoc/data/templates apps: manuskript: From 24f3f092bbabaa8ea9285c8530deb4400e2e8822 Mon Sep 17 00:00:00 2001 From: TheJackiMonster Date: Fri, 27 Mar 2020 15:12:44 +0100 Subject: [PATCH 05/51] Added char-count with settings to enable/disable it. --- manuskript/enums.py | 1 + manuskript/models/outlineItem.py | 8 + manuskript/settings.py | 8 +- manuskript/settingsWindow.py | 12 ++ manuskript/ui/editors/mainEditor.py | 34 +++- manuskript/ui/settings_ui.py | 193 ++++++++++++-------- manuskript/ui/settings_ui.ui | 259 +++++++++++++++++---------- manuskript/ui/views/treeDelegates.py | 6 + 8 files changed, 350 insertions(+), 171 deletions(-) diff --git a/manuskript/enums.py b/manuskript/enums.py index 4e94d0b..80d6696 100644 --- a/manuskript/enums.py +++ b/manuskript/enums.py @@ -60,6 +60,7 @@ class Outline(IntEnum): textFormat = 15 revisions = 16 customIcon = 17 + charCount = 18 class Abstract(IntEnum): title = 0 diff --git a/manuskript/models/outlineItem.py b/manuskript/models/outlineItem.py index 56b6464..932e42f 100644 --- a/manuskript/models/outlineItem.py +++ b/manuskript/models/outlineItem.py @@ -89,6 +89,9 @@ class outlineItem(abstractItem): ) __repr__ = __str__ + + def charCount(self): + return self._data.get(self.enum.charCount, 0) ####################################################################### # Data @@ -154,6 +157,7 @@ class outlineItem(abstractItem): if column == E.text: wc = F.wordCount(data) self.setData(E.wordCount, wc) + self.setData(E.charCount, len(data)) if column == E.compile: # Title changes when compile changes @@ -195,9 +199,12 @@ class outlineItem(abstractItem): else: wc = 0 + cc = 0 for c in self.children(): wc += F.toInt(c.data(self.enum.wordCount)) + cc += F.toInt(c.data(self.enum.charCount)) self._data[self.enum.wordCount] = wc + self._data[self.enum.charCount] = cc setGoal = F.toInt(self.data(self.enum.setGoal)) goal = F.toInt(self.data(self.enum.goal)) @@ -467,6 +474,7 @@ class outlineItem(abstractItem): # We don't want to write some datas (computed) XMLExclude = [enums.Outline.wordCount, + enums.Outline.charCount, enums.Outline.goal, enums.Outline.goalPercentage, enums.Outline.revisions] diff --git a/manuskript/settings.py b/manuskript/settings.py index 96a658e..dbe0374 100644 --- a/manuskript/settings.py +++ b/manuskript/settings.py @@ -47,6 +47,7 @@ corkSizeFactor = 100 folderView = "cork" lastTab = 0 openIndexes = [""] +progressChars = False autoSave = False autoSaveDelay = 5 autoSaveNoChanges = True @@ -123,7 +124,7 @@ def initDefaultValues(): def save(filename=None, protocol=None): global spellcheck, dict, corkSliderFactor, viewSettings, corkSizeFactor, folderView, lastTab, openIndexes, \ - autoSave, autoSaveDelay, saveOnQuit, autoSaveNoChanges, autoSaveNoChangesDelay, outlineViewColumns, \ + progressChars, autoSave, autoSaveDelay, saveOnQuit, autoSaveNoChanges, autoSaveNoChangesDelay, outlineViewColumns, \ corkBackground, corkStyle, fullScreenTheme, defaultTextType, textEditor, revisions, frequencyAnalyzer, viewMode, \ saveToZip, dontShowDeleteWarning, fullscreenSettings @@ -136,6 +137,7 @@ def save(filename=None, protocol=None): "folderView": folderView, "lastTab": lastTab, "openIndexes": openIndexes, + "progressChars": progressChars, "autoSave":autoSave, "autoSaveDelay":autoSaveDelay, # TODO: Settings Cleanup Task -- Rename saveOnQuit to saveOnProjectClose -- see PR #615 @@ -235,6 +237,10 @@ def load(string, fromString=False, protocol=None): global openIndexes openIndexes = allSettings["openIndexes"] + if "progressChars" in allSettings: + global progressChars + progressChars = allSettings["progressChars"] + if "autoSave" in allSettings: global autoSave autoSave = allSettings["autoSave"] diff --git a/manuskript/settingsWindow.py b/manuskript/settingsWindow.py index 4ae34bf..084fe97 100644 --- a/manuskript/settingsWindow.py +++ b/manuskript/settingsWindow.py @@ -111,6 +111,9 @@ class settingsWindow(QWidget, Ui_Settings): self.spnGeneralFontSize.setValue(f.pointSize()) self.spnGeneralFontSize.valueChanged.connect(self.setAppFontSize) + self.chkProgressChars.setChecked(settings.progressChars); + self.chkProgressChars.stateChanged.connect(self.charSettingsChanged) + self.txtAutoSave.setValidator(QIntValidator(0, 999, self)) self.txtAutoSaveNoChanges.setValidator(QIntValidator(0, 999, self)) self.chkAutoSave.setChecked(settings.autoSave) @@ -164,10 +167,12 @@ class settingsWindow(QWidget, Ui_Settings): for item, what, value in [ (self.rdoTreeItemCount, "InfoFolder", "Count"), (self.rdoTreeWC, "InfoFolder", "WC"), + (self.rdoTreeCC, "InfoFolder", "CC"), (self.rdoTreeProgress, "InfoFolder", "Progress"), (self.rdoTreeSummary, "InfoFolder", "Summary"), (self.rdoTreeNothing, "InfoFolder", "Nothing"), (self.rdoTreeTextWC, "InfoText", "WC"), + (self.rdoTreeTextCC, "InfoText", "CC"), (self.rdoTreeTextProgress, "InfoText", "Progress"), (self.rdoTreeTextSummary, "InfoText", "Summary"), (self.rdoTreeTextNothing, "InfoText", "Nothing"), @@ -338,6 +343,11 @@ class settingsWindow(QWidget, Ui_Settings): sttgs = QSettings(qApp.organizationName(), qApp.applicationName()) sttgs.setValue("appFontSize", val) + def charSettingsChanged(self): + settings.progressChars = True if self.chkProgressChars.checkState() else False + + self.mw.mainEditor.updateStats() + def saveSettingsChanged(self): if self.txtAutoSave.text() in ["", "0"]: self.txtAutoSave.setText("1") @@ -427,10 +437,12 @@ class settingsWindow(QWidget, Ui_Settings): for item, what, value in [ (self.rdoTreeItemCount, "InfoFolder", "Count"), (self.rdoTreeWC, "InfoFolder", "WC"), + (self.rdoTreeCC, "InfoFolder", "CC"), (self.rdoTreeProgress, "InfoFolder", "Progress"), (self.rdoTreeSummary, "InfoFolder", "Summary"), (self.rdoTreeNothing, "InfoFolder", "Nothing"), (self.rdoTreeTextWC, "InfoText", "WC"), + (self.rdoTreeTextCC, "InfoText", "CC"), (self.rdoTreeTextProgress, "InfoText", "Progress"), (self.rdoTreeTextSummary, "InfoText", "Summary"), (self.rdoTreeTextNothing, "InfoText", "Nothing"), diff --git a/manuskript/ui/editors/mainEditor.py b/manuskript/ui/editors/mainEditor.py index 967f283..1e241ac 100644 --- a/manuskript/ui/editors/mainEditor.py +++ b/manuskript/ui/editors/mainEditor.py @@ -292,6 +292,7 @@ class mainEditor(QWidget, Ui_mainEditor): return index = self.currentEditor().currentIndex + if index.isValid(): item = index.internalPointer() else: @@ -300,6 +301,7 @@ class mainEditor(QWidget, Ui_mainEditor): if not item: item = self.mw.mdlOutline.rootItem + cc = item.data(Outline.charCount) wc = item.data(Outline.wordCount) goal = item.data(Outline.goal) progress = item.data(Outline.goalPercentage) @@ -307,8 +309,12 @@ class mainEditor(QWidget, Ui_mainEditor): goal = uiParse(goal, None, int, lambda x: x>=0) progress = uiParse(progress, 0.0, float) + if not cc: + cc = 0 + if not wc: wc = 0 + if goal: self.lblRedacProgress.show() rect = self.lblRedacProgress.geometry() @@ -319,13 +325,31 @@ class mainEditor(QWidget, Ui_mainEditor): drawProgress(p, rect, progress, 2) del p self.lblRedacProgress.setPixmap(self.px) - self.lblRedacWC.setText(self.tr("{} words / {} ").format( - locale.format_string("%d", wc, grouping=True), - locale.format_string("%d", goal, grouping=True))) + + if settings.progressChars: + self.lblRedacWC.setText(self.tr("({} chars) {} words / {} ").format( + locale.format("%d", cc, grouping=True), + locale.format("%d", wc, grouping=True), + locale.format("%d", goal, grouping=True))) + self.lblRedacWC.setToolTip("") + else: + self.lblRedacWC.setText(self.tr("{} words / {} ").format( + locale.format("%d", wc, grouping=True), + locale.format("%d", goal, grouping=True))) + self.lblRedacWC.setToolTip(self.tr("{} chars").format( + locale.format("%d", cc, grouping=True))) else: self.lblRedacProgress.hide() - self.lblRedacWC.setText(self.tr("{} words ").format( - locale.format_string("%d", wc, grouping=True))) + + if settings.progressChars: + self.lblRedacWC.setText(self.tr("{} chars ").format( + locale.format("%d", cc, grouping=True))) + self.lblRedacWC.setToolTip("") + else: + self.lblRedacWC.setText(self.tr("{} words ").format( + locale.format("%d", wc, grouping=True))) + self.lblRedacWC.setToolTip(self.tr("{} chars").format( + locale.format("%d", cc, grouping=True))) ############################################################################### # VIEWS diff --git a/manuskript/ui/settings_ui.py b/manuskript/ui/settings_ui.py index 0cd39f5..77d9e25 100644 --- a/manuskript/ui/settings_ui.py +++ b/manuskript/ui/settings_ui.py @@ -2,7 +2,7 @@ # Form implementation generated from reading ui file 'manuskript/ui/settings_ui.ui' # -# Created by: PyQt5 UI code generator 5.13.0 +# Created by: PyQt5 UI code generator 5.14.1 # # WARNING! All changes made in this file will be lost! @@ -13,7 +13,7 @@ from PyQt5 import QtCore, QtGui, QtWidgets class Ui_Settings(object): def setupUi(self, Settings): Settings.setObjectName("Settings") - Settings.resize(658, 598) + Settings.resize(681, 598) self.horizontalLayout_8 = QtWidgets.QHBoxLayout(Settings) self.horizontalLayout_8.setObjectName("horizontalLayout_8") self.lstMenu = QtWidgets.QListWidget(Settings) @@ -55,50 +55,9 @@ class Ui_Settings(object): self.groupBox_2.setFont(font) self.groupBox_2.setObjectName("groupBox_2") self.formLayout_13 = QtWidgets.QFormLayout(self.groupBox_2) - self.formLayout_13.setFieldGrowthPolicy(QtWidgets.QFormLayout.FieldsStayAtSizeHint) self.formLayout_13.setObjectName("formLayout_13") - self.label_56 = QtWidgets.QLabel(self.groupBox_2) - font = QtGui.QFont() - font.setBold(False) - font.setWeight(50) - self.label_56.setFont(font) - self.label_56.setObjectName("label_56") - self.formLayout_13.setWidget(3, QtWidgets.QFormLayout.LabelRole, self.label_56) - self.cmbStyle = QtWidgets.QComboBox(self.groupBox_2) - font = QtGui.QFont() - font.setBold(False) - font.setWeight(50) - self.cmbStyle.setFont(font) - self.cmbStyle.setObjectName("cmbStyle") - self.formLayout_13.setWidget(3, QtWidgets.QFormLayout.FieldRole, self.cmbStyle) - self.label_57 = QtWidgets.QLabel(self.groupBox_2) - font = QtGui.QFont() - font.setBold(False) - font.setWeight(50) - self.label_57.setFont(font) - self.label_57.setObjectName("label_57") - self.formLayout_13.setWidget(6, QtWidgets.QFormLayout.LabelRole, self.label_57) - self.cmbTranslation = QtWidgets.QComboBox(self.groupBox_2) - font = QtGui.QFont() - font.setBold(False) - font.setWeight(50) - self.cmbTranslation.setFont(font) - self.cmbTranslation.setObjectName("cmbTranslation") - self.formLayout_13.setWidget(6, QtWidgets.QFormLayout.FieldRole, self.cmbTranslation) - self.label_58 = QtWidgets.QLabel(self.groupBox_2) - font = QtGui.QFont() - font.setBold(False) - font.setWeight(50) - self.label_58.setFont(font) - self.label_58.setObjectName("label_58") - self.formLayout_13.setWidget(7, QtWidgets.QFormLayout.LabelRole, self.label_58) - self.spnGeneralFontSize = QtWidgets.QSpinBox(self.groupBox_2) - font = QtGui.QFont() - font.setBold(False) - font.setWeight(50) - self.spnGeneralFontSize.setFont(font) - self.spnGeneralFontSize.setObjectName("spnGeneralFontSize") - self.formLayout_13.setWidget(7, QtWidgets.QFormLayout.FieldRole, self.spnGeneralFontSize) + self.gridLayout_4 = QtWidgets.QGridLayout() + self.gridLayout_4.setObjectName("gridLayout_4") self.label_2 = QtWidgets.QLabel(self.groupBox_2) font = QtGui.QFont() font.setBold(False) @@ -106,7 +65,70 @@ class Ui_Settings(object): self.label_2.setFont(font) self.label_2.setWordWrap(True) self.label_2.setObjectName("label_2") - self.formLayout_13.setWidget(2, QtWidgets.QFormLayout.SpanningRole, self.label_2) + self.gridLayout_4.addWidget(self.label_2, 0, 0, 1, 1) + self.horizontalLayout_12 = QtWidgets.QHBoxLayout() + self.horizontalLayout_12.setSizeConstraint(QtWidgets.QLayout.SetDefaultConstraint) + self.horizontalLayout_12.setObjectName("horizontalLayout_12") + self.formLayout_14 = QtWidgets.QFormLayout() + self.formLayout_14.setFieldGrowthPolicy(QtWidgets.QFormLayout.AllNonFixedFieldsGrow) + self.formLayout_14.setObjectName("formLayout_14") + self.label_56 = QtWidgets.QLabel(self.groupBox_2) + font = QtGui.QFont() + font.setBold(False) + font.setWeight(50) + self.label_56.setFont(font) + self.label_56.setObjectName("label_56") + self.formLayout_14.setWidget(0, QtWidgets.QFormLayout.LabelRole, self.label_56) + self.cmbStyle = QtWidgets.QComboBox(self.groupBox_2) + font = QtGui.QFont() + font.setBold(False) + font.setWeight(50) + self.cmbStyle.setFont(font) + self.cmbStyle.setObjectName("cmbStyle") + self.formLayout_14.setWidget(0, QtWidgets.QFormLayout.FieldRole, self.cmbStyle) + self.label_57 = QtWidgets.QLabel(self.groupBox_2) + font = QtGui.QFont() + font.setBold(False) + font.setWeight(50) + self.label_57.setFont(font) + self.label_57.setObjectName("label_57") + self.formLayout_14.setWidget(1, QtWidgets.QFormLayout.LabelRole, self.label_57) + self.cmbTranslation = QtWidgets.QComboBox(self.groupBox_2) + font = QtGui.QFont() + font.setBold(False) + font.setWeight(50) + self.cmbTranslation.setFont(font) + self.cmbTranslation.setObjectName("cmbTranslation") + self.formLayout_14.setWidget(1, QtWidgets.QFormLayout.FieldRole, self.cmbTranslation) + self.label_58 = QtWidgets.QLabel(self.groupBox_2) + font = QtGui.QFont() + font.setBold(False) + font.setWeight(50) + self.label_58.setFont(font) + self.label_58.setObjectName("label_58") + self.formLayout_14.setWidget(2, QtWidgets.QFormLayout.LabelRole, self.label_58) + self.spnGeneralFontSize = QtWidgets.QSpinBox(self.groupBox_2) + font = QtGui.QFont() + font.setBold(False) + font.setWeight(50) + self.spnGeneralFontSize.setFont(font) + self.spnGeneralFontSize.setObjectName("spnGeneralFontSize") + self.formLayout_14.setWidget(2, QtWidgets.QFormLayout.FieldRole, self.spnGeneralFontSize) + self.horizontalLayout_12.addLayout(self.formLayout_14) + self.formLayout_15 = QtWidgets.QFormLayout() + self.formLayout_15.setObjectName("formLayout_15") + self.chkProgressChars = QtWidgets.QCheckBox(self.groupBox_2) + font = QtGui.QFont() + font.setBold(False) + font.setWeight(50) + self.chkProgressChars.setFont(font) + self.chkProgressChars.setObjectName("chkProgressChars") + self.formLayout_15.setWidget(0, QtWidgets.QFormLayout.FieldRole, self.chkProgressChars) + spacerItem = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) + self.formLayout_15.setItem(0, QtWidgets.QFormLayout.LabelRole, spacerItem) + self.horizontalLayout_12.addLayout(self.formLayout_15) + self.gridLayout_4.addLayout(self.horizontalLayout_12, 1, 0, 1, 1) + self.formLayout_13.setLayout(0, QtWidgets.QFormLayout.SpanningRole, self.gridLayout_4) self.verticalLayout_7.addWidget(self.groupBox_2) self.groupBox_10 = QtWidgets.QGroupBox(self.stackedWidgetPage1) font = QtGui.QFont() @@ -166,8 +188,8 @@ class Ui_Settings(object): self.label.setFont(font) self.label.setObjectName("label") self.horizontalLayout_5.addWidget(self.label) - spacerItem = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) - self.horizontalLayout_5.addItem(spacerItem) + spacerItem1 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) + self.horizontalLayout_5.addItem(spacerItem1) self.verticalLayout_6.addLayout(self.horizontalLayout_5) self.horizontalLayout_7 = QtWidgets.QHBoxLayout() self.horizontalLayout_7.setObjectName("horizontalLayout_7") @@ -202,8 +224,8 @@ class Ui_Settings(object): self.label_14.setFont(font) self.label_14.setObjectName("label_14") self.horizontalLayout_7.addWidget(self.label_14) - spacerItem1 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) - self.horizontalLayout_7.addItem(spacerItem1) + spacerItem2 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) + self.horizontalLayout_7.addItem(spacerItem2) self.verticalLayout_6.addLayout(self.horizontalLayout_7) self.chkSaveOnQuit = QtWidgets.QCheckBox(self.groupBox) font = QtGui.QFont() @@ -223,8 +245,8 @@ class Ui_Settings(object): self.chkSaveToZip.setObjectName("chkSaveToZip") self.verticalLayout_6.addWidget(self.chkSaveToZip) self.verticalLayout_7.addWidget(self.groupBox) - spacerItem2 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding) - self.verticalLayout_7.addItem(spacerItem2) + spacerItem3 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding) + self.verticalLayout_7.addItem(spacerItem3) self.stack.addWidget(self.stackedWidgetPage1) self.page_3 = QtWidgets.QWidget() self.page_3.setObjectName("page_3") @@ -388,8 +410,8 @@ class Ui_Settings(object): self.label_51.setObjectName("label_51") self.gridLayout_2.addWidget(self.label_51, 6, 1, 1, 1) self.verticalLayout.addWidget(self.chkRevisionRemove) - spacerItem3 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding) - self.verticalLayout.addItem(spacerItem3) + spacerItem4 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding) + self.verticalLayout.addItem(spacerItem4) self.label_revisionDeprecation = QtWidgets.QLabel(self.page_3) self.label_revisionDeprecation.setWordWrap(True) self.label_revisionDeprecation.setOpenExternalLinks(True) @@ -548,6 +570,13 @@ class Ui_Settings(object): self.rdoTreeWC.setFont(font) self.rdoTreeWC.setObjectName("rdoTreeWC") self.verticalLayout_15.addWidget(self.rdoTreeWC) + self.rdoTreeCC = QtWidgets.QRadioButton(self.groupBox_8) + font = QtGui.QFont() + font.setBold(False) + font.setWeight(50) + self.rdoTreeCC.setFont(font) + self.rdoTreeCC.setObjectName("rdoTreeCC") + self.verticalLayout_15.addWidget(self.rdoTreeCC) self.rdoTreeProgress = QtWidgets.QRadioButton(self.groupBox_8) font = QtGui.QFont() font.setBold(False) @@ -586,6 +615,13 @@ class Ui_Settings(object): self.rdoTreeTextWC.setFont(font) self.rdoTreeTextWC.setObjectName("rdoTreeTextWC") self.verticalLayout_16.addWidget(self.rdoTreeTextWC) + self.rdoTreeTextCC = QtWidgets.QRadioButton(self.groupBox_9) + font = QtGui.QFont() + font.setBold(False) + font.setWeight(50) + self.rdoTreeTextCC.setFont(font) + self.rdoTreeTextCC.setObjectName("rdoTreeTextCC") + self.verticalLayout_16.addWidget(self.rdoTreeTextCC) self.rdoTreeTextProgress = QtWidgets.QRadioButton(self.groupBox_9) font = QtGui.QFont() font.setBold(False) @@ -607,12 +643,17 @@ class Ui_Settings(object): self.rdoTreeTextNothing.setFont(font) self.rdoTreeTextNothing.setObjectName("rdoTreeTextNothing") self.verticalLayout_16.addWidget(self.rdoTreeTextNothing) - spacerItem4 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding) - self.verticalLayout_16.addItem(spacerItem4) + spacerItem5 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding) + self.verticalLayout_16.addItem(spacerItem5) + self.rdoTreeTextCC.raise_() + self.rdoTreeTextWC.raise_() + self.rdoTreeTextProgress.raise_() + self.rdoTreeTextSummary.raise_() + self.rdoTreeTextNothing.raise_() self.horizontalLayout_9.addWidget(self.groupBox_9) self.verticalLayout_17.addLayout(self.horizontalLayout_9) - spacerItem5 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding) - self.verticalLayout_17.addItem(spacerItem5) + spacerItem6 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding) + self.verticalLayout_17.addItem(spacerItem6) icon = QtGui.QIcon.fromTheme("view-list-tree") self.tabViews.addTab(self.tab, icon, "") self.tab_2 = QtWidgets.QWidget() @@ -774,8 +815,8 @@ class Ui_Settings(object): self.chkOutlineTitle.setObjectName("chkOutlineTitle") self.gridLayout.addWidget(self.chkOutlineTitle, 3, 0, 1, 1) self.verticalLayout_11.addWidget(self.groupBox_6) - spacerItem6 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding) - self.verticalLayout_11.addItem(spacerItem6) + spacerItem7 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding) + self.verticalLayout_11.addItem(spacerItem7) icon = QtGui.QIcon.fromTheme("view-outline") self.tabViews.addTab(self.tab_2, icon, "") self.tab_3 = QtWidgets.QWidget() @@ -821,8 +862,8 @@ class Ui_Settings(object): self.cmbCorkImage.setFont(font) self.cmbCorkImage.setObjectName("cmbCorkImage") self.verticalLayout_8.addWidget(self.cmbCorkImage) - spacerItem7 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding) - self.verticalLayout_8.addItem(spacerItem7) + spacerItem8 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding) + self.verticalLayout_8.addItem(spacerItem8) self.gridLayout_3.addWidget(self.groupBox_7, 1, 1, 1, 1) self.groupBox_11 = QtWidgets.QGroupBox(self.tab_3) font = QtGui.QFont() @@ -1380,8 +1421,8 @@ class Ui_Settings(object): self.btnLabelColor.setIconSize(QtCore.QSize(64, 64)) self.btnLabelColor.setObjectName("btnLabelColor") self.verticalLayout_2.addWidget(self.btnLabelColor) - spacerItem8 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding) - self.verticalLayout_2.addItem(spacerItem8) + spacerItem9 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding) + self.verticalLayout_2.addItem(spacerItem9) self.horizontalLayout_2.addLayout(self.verticalLayout_2) self.verticalLayout_3.addLayout(self.horizontalLayout_2) self.horizontalLayout = QtWidgets.QHBoxLayout() @@ -1398,8 +1439,8 @@ class Ui_Settings(object): self.btnLabelRemove.setIcon(icon) self.btnLabelRemove.setObjectName("btnLabelRemove") self.horizontalLayout.addWidget(self.btnLabelRemove) - spacerItem9 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) - self.horizontalLayout.addItem(spacerItem9) + spacerItem10 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) + self.horizontalLayout.addItem(spacerItem10) self.verticalLayout_3.addLayout(self.horizontalLayout) self.stack.addWidget(self.stackedWidgetPage3) self.stackedWidgetPage4 = QtWidgets.QWidget() @@ -1433,8 +1474,8 @@ class Ui_Settings(object): self.btnStatusRemove.setIcon(icon) self.btnStatusRemove.setObjectName("btnStatusRemove") self.horizontalLayout_3.addWidget(self.btnStatusRemove) - spacerItem10 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) - self.horizontalLayout_3.addItem(spacerItem10) + spacerItem11 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) + self.horizontalLayout_3.addItem(spacerItem11) self.verticalLayout_4.addLayout(self.horizontalLayout_3) self.stack.addWidget(self.stackedWidgetPage4) self.page = QtWidgets.QWidget() @@ -1482,8 +1523,8 @@ class Ui_Settings(object): self.btnThemeRemove.setIcon(icon) self.btnThemeRemove.setObjectName("btnThemeRemove") self.horizontalLayout_6.addWidget(self.btnThemeRemove) - spacerItem11 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) - self.horizontalLayout_6.addItem(spacerItem11) + spacerItem12 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) + self.horizontalLayout_6.addItem(spacerItem12) self.verticalLayout_12.addLayout(self.horizontalLayout_6) self.themeStack.addWidget(self.stackedWidgetPage1_3) self.stackedWidgetPage2_3 = QtWidgets.QWidget() @@ -1823,9 +1864,9 @@ class Ui_Settings(object): self.horizontalLayout_8.addWidget(self.stack) self.retranslateUi(Settings) - self.stack.setCurrentIndex(2) - self.tabViews.setCurrentIndex(3) - self.themeStack.setCurrentIndex(1) + self.stack.setCurrentIndex(0) + self.tabViews.setCurrentIndex(0) + self.themeStack.setCurrentIndex(0) self.themeEditStack.setCurrentIndex(3) self.lstMenu.currentRowChanged['int'].connect(self.stack.setCurrentIndex) self.chkRevisionsKeep.toggled['bool'].connect(self.chkRevisionRemove.setEnabled) @@ -1851,10 +1892,12 @@ class Ui_Settings(object): self.lstMenu.setSortingEnabled(__sortingEnabled) self.lblTitleGeneral.setText(_translate("Settings", "General settings")) self.groupBox_2.setTitle(_translate("Settings", "Application settings")) + self.label_2.setText(_translate("Settings", "Restarting Manuskript ensures all settings take effect.")) self.label_56.setText(_translate("Settings", "Style:")) self.label_57.setText(_translate("Settings", "Language:")) self.label_58.setText(_translate("Settings", "Font size:")) - self.label_2.setText(_translate("Settings", "Restarting Manuskript ensures all settings take effect.")) + self.chkProgressChars.setText(_translate("Settings", "Show progress in chars next\n" +" to words")) self.groupBox_10.setTitle(_translate("Settings", "Loading")) self.chkAutoLoad.setText(_translate("Settings", "Automatically load last project on startup")) self.groupBox.setTitle(_translate("Settings", "Saving")) @@ -1902,11 +1945,13 @@ class Ui_Settings(object): self.groupBox_8.setTitle(_translate("Settings", "Folders")) self.rdoTreeItemCount.setText(_translate("Settings", "Show ite&m count")) self.rdoTreeWC.setText(_translate("Settings", "Show &word count")) + self.rdoTreeCC.setText(_translate("Settings", "Show char c&ount")) self.rdoTreeProgress.setText(_translate("Settings", "S&how progress")) self.rdoTreeSummary.setText(_translate("Settings", "Show summar&y")) self.rdoTreeNothing.setText(_translate("Settings", "&Nothing")) self.groupBox_9.setTitle(_translate("Settings", "Text")) self.rdoTreeTextWC.setText(_translate("Settings", "&Show word count")) + self.rdoTreeTextCC.setText(_translate("Settings", "Sho&w char count")) self.rdoTreeTextProgress.setText(_translate("Settings", "Show p&rogress")) self.rdoTreeTextSummary.setText(_translate("Settings", "Show summary")) self.rdoTreeTextNothing.setText(_translate("Settings", "Nothing")) diff --git a/manuskript/ui/settings_ui.ui b/manuskript/ui/settings_ui.ui index 6563bcb..53c18cf 100644 --- a/manuskript/ui/settings_ui.ui +++ b/manuskript/ui/settings_ui.ui @@ -6,7 +6,7 @@ 0 0 - 658 + 681 598 @@ -54,7 +54,7 @@ - 2 + 0 @@ -98,93 +98,139 @@ Application settings - - QFormLayout::FieldsStayAtSizeHint - - - - - - 50 - false - - - - Style: - - - - - - - - 50 - false - - - - - - - - - 50 - false - - - - Language: - - - - - - - - 50 - false - - - - - - - - - 50 - false - - - - Font size: - - - - - - - - 50 - false - - - - - - - - - 50 - false - - - - Restarting Manuskript ensures all settings take effect. - - - true - - + + + + + + + 50 + false + + + + Restarting Manuskript ensures all settings take effect. + + + true + + + + + + + QLayout::SetDefaultConstraint + + + + + QFormLayout::AllNonFixedFieldsGrow + + + + + + 50 + false + + + + Style: + + + + + + + + 50 + false + + + + + + + + + 50 + false + + + + Language: + + + + + + + + 50 + false + + + + + + + + + 50 + false + + + + Font size: + + + + + + + + 50 + false + + + + + + + + + + + + + 50 + false + + + + Show progress in chars next + to words + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + @@ -817,7 +863,7 @@ - 3 + 0 @@ -1095,6 +1141,19 @@ + + + + + 50 + false + + + + Show char c&ount + + + @@ -1165,6 +1224,19 @@ + + + + + 50 + false + + + + Sho&w char count + + + @@ -1224,6 +1296,11 @@ + rdoTreeTextCC + rdoTreeTextWC + rdoTreeTextProgress + rdoTreeTextSummary + rdoTreeTextNothing @@ -2974,7 +3051,7 @@ - 1 + 0 diff --git a/manuskript/ui/views/treeDelegates.py b/manuskript/ui/views/treeDelegates.py index fa59702..f95a3c7 100644 --- a/manuskript/ui/views/treeDelegates.py +++ b/manuskript/ui/views/treeDelegates.py @@ -111,6 +111,9 @@ class treeTitleDelegate(QStyledItemDelegate): elif settings.viewSettings["Tree"]["InfoFolder"] == "WC": extraText = item.wordCount() extraText = " ({})".format(extraText) + elif settings.viewSettings["Tree"]["InfoFolder"] == "CC": + extraText = item.charCount() + extraText = " ({})".format(extraText) elif settings.viewSettings["Tree"]["InfoFolder"] == "Progress": extraText = int(toFloat(item.data(Outline.goalPercentage)) * 100) if extraText: @@ -124,6 +127,9 @@ class treeTitleDelegate(QStyledItemDelegate): if settings.viewSettings["Tree"]["InfoText"] == "WC": extraText = item.wordCount() extraText = " ({})".format(extraText) + elif settings.viewSettings["Tree"]["InfoText"] == "CC": + extraText = item.charCount() + extraText = " ({})".format(extraText) elif settings.viewSettings["Tree"]["InfoText"] == "Progress": extraText = int(toFloat(item.data(Outline.goalPercentage)) * 100) if extraText: From 917f1a2f7365b920d3bb04722af582ee5aa9bf69 Mon Sep 17 00:00:00 2001 From: Curtis Gedak Date: Thu, 30 Apr 2020 10:40:16 -0600 Subject: [PATCH 06/51] Set minimum of xcode11 for macOS X in Travis CI build The Travis CI builds for macOS X are failing for xcode values less than 11. Reference information for macOS X: - Homebrew project bottles for qt https://formulae.brew.sh/formula/qt - Travis CI build values for xcode https://docs.travis-ci.com/user/reference/osx#macos-version See also related issue: - Issue #696 - Install on Mac Catalina Requires Signed Installer --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index a39e423..995f028 100644 --- a/.travis.yml +++ b/.travis.yml @@ -2,7 +2,7 @@ language: generic os: - osx - linux -osx_image: xcode10.1 +osx_image: xcode11 sudo: required install: - if [ "$TRAVIS_OS_NAME" = "osx" ]; then package/prepare_osx.sh; fi From cd950cbe2a4508c2e7cca9c904ea68436a02fd7e Mon Sep 17 00:00:00 2001 From: Curtis Gedak Date: Tue, 28 Apr 2020 10:18:31 -0600 Subject: [PATCH 07/51] Fix Python 3.8 SyntaxWarning: "is not" with a literal Fix these three warning messages from Python 3.8: /usr/share/manuskript/manuskript/main.py:104: SyntaxWarning: "is not" with a literal. Did you mean "!="? if platform.system() is not 'Windows': /usr/share/manuskript/manuskript/importer/opmlImporter.py:124: SyntaxWarning: "is" with a literal. Did you mean "=="? return len(s) is 0 /usr/share/manuskript/manuskript/exporter/pandoc/abstractPlainText.py:78: SyntaxWarning: "is" with a literal. Did you mean "=="? if self.formats is "": These SyntaxWarning messages were brought to light with Manuskript issue #758. See also: Issue34850 - Emit a syntax warning for "is" with a literal https://bugs.python.org/issue34850 --- manuskript/exporter/pandoc/abstractPlainText.py | 2 +- manuskript/importer/opmlImporter.py | 2 +- manuskript/main.py | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/manuskript/exporter/pandoc/abstractPlainText.py b/manuskript/exporter/pandoc/abstractPlainText.py index 5cfea99..9dcfd8f 100644 --- a/manuskript/exporter/pandoc/abstractPlainText.py +++ b/manuskript/exporter/pandoc/abstractPlainText.py @@ -75,7 +75,7 @@ class pandocSetting: """Return whether the specific setting is active with the given format.""" # Empty formats means all - if self.formats is "": + if self.formats == "": return True # "html" in "html markdown latex" diff --git a/manuskript/importer/opmlImporter.py b/manuskript/importer/opmlImporter.py index e434cd5..79fe8da 100644 --- a/manuskript/importer/opmlImporter.py +++ b/manuskript/importer/opmlImporter.py @@ -121,4 +121,4 @@ class opmlImporter(abstractImporter): s = cls.restoreNewLines(inString) s = ''.join(s.split()) - return len(s) is 0 + return len(s) == 0 diff --git a/manuskript/main.py b/manuskript/main.py index 63bc9cf..fcca937 100644 --- a/manuskript/main.py +++ b/manuskript/main.py @@ -101,7 +101,7 @@ def prepare(tests=False): def respectSystemDarkThemeSetting(): """Adjusts the Qt theme to match the OS 'dark theme' setting configured by the user.""" - if platform.system() is not 'Windows': + if platform.system() != 'Windows': return # Basic Windows 10 Dark Theme support. From ae62a6be05fac9bcf6246b01ef2e7f574594e093 Mon Sep 17 00:00:00 2001 From: goofy-mdn <41866949+goofy-mdn@users.noreply.github.com> Date: Tue, 12 May 2020 19:07:30 +0200 Subject: [PATCH 08/51] typofixing here and there --- i18n/manuskript_fr.ts | 82 +++++++++++++++++++++---------------------- 1 file changed, 41 insertions(+), 41 deletions(-) diff --git a/i18n/manuskript_fr.ts b/i18n/manuskript_fr.ts index a53aea6..0ee622c 100644 --- a/i18n/manuskript_fr.ts +++ b/i18n/manuskript_fr.ts @@ -5,7 +5,7 @@ Default exporter, provides basic formats used by other exporters. - Exporteur de base, fournit les formats de base utilisés par les autres exporteurs. + Exportateur de base, fournit les formats de base utilisés par les autres exportateurs. @@ -28,7 +28,7 @@ formats.</p> <p>Website: <a href="http://www.pandoc.org">http://pandoc.org/</a></p> - <p>Un convertisseur universel de document. Peut être utilisé pour convertir du Markdown dans un grand nombre de formats.</p> + <p>Un convertisseur universel de documents. Peut être utilisé pour convertir du Markdown dans un grand nombre de formats.</p> <p>Site internet : <a href="http://www.pandoc.org">http://pandoc.org/</a></p> @@ -36,7 +36,7 @@ Just like plain text, excepts adds markdown titles. Presupposes that texts are formatted in markdown. - Comme en texte brute, mais rajoute les titres markdown. + Comme en texte brut, mais ajoute les titres markdown. @@ -46,7 +46,7 @@ Plain text - Texte brute + Texte brut @@ -99,7 +99,7 @@ Par exemple <a href='www.fountain.io'>Fountain</a>. Export to markdown, using pandoc. Allows more formatting options than the basic manuskript exporter. - Export vers markdown en utilisant pandoc. Permet plus de possibilités que l'exporteur basique intégré à manuskript. + Export vers markdown en utilisant pandoc. Permet plus de possibilités que l'exportateur basique intégré à manuskript. @@ -110,7 +110,7 @@ Par exemple <a href='www.fountain.io'>Fountain</a>. LaTeX is a word processor and document markup language used to create beautiful documents. - LaTeX est une suite d'outil et un format utilisé pour créer des documents magnifiques. + LaTeX est une suite d'outils et un format utilisé pour créer des documents magnifiques. @@ -125,7 +125,7 @@ Par exemple <a href='www.fountain.io'>Fountain</a>. Number of sections level to include in TOC: - Nombre de niveau à inclure dans la table des matières: + Nombre de niveaux à inclure dans la table des matières : @@ -140,7 +140,7 @@ Par exemple <a href='www.fountain.io'>Fountain</a>. Specify the base level for headers: - Spécifier le niveau de base pour les titres: + Spécifier le niveau de base pour les titres : @@ -191,7 +191,7 @@ Par exemple <a href='www.fountain.io'>Fountain</a>. a valid LaTeX installation. Pandoc recommendations can be found on: <a href="https://pandoc.org/installing.html">pandoc.org/installing.html</a>. If you want Unicode support, you need XeLaTeX. - nécessite une installation latex valide. Voir les recommendations de pandoc sur <a href="http://pandoc.org/installing.html">http://pandoc.org/installing.html</a>. Pour le support unicode, il vous faut xelatex. + nécessite une installation LaTeX valide. Voir les recommandations de pandoc sur <a href="http://pandoc.org/installing.html">http://pandoc.org/installing.html</a>. Pour le support unicode, il vous faut XeLaTeX. @@ -222,7 +222,7 @@ Cochez ceci si vous avez des erreurs liées à YAML. Choose output file… - Choisir le fichier de sortie... + Choisir le fichier de sortie… @@ -230,7 +230,7 @@ Cochez ceci si vous avez des erreurs liées à YAML. Manage Exporters - Gérer les Exporteurs + Gérer les Exportateurs @@ -250,27 +250,27 @@ Cochez ceci si vous avez des erreurs liées à YAML. Status - Status + Statut Status: - Status : + Statut : Version: - Version: + Version : Path: - Chemin: + Chemin : ... - ... + @@ -298,7 +298,7 @@ Cochez ceci si vous avez des erreurs liées à YAML. Minimum size: - Taille minimum: + Taille minimum : @@ -318,7 +318,7 @@ Cochez ceci si vous avez des erreurs liées à YAML. Number of words: from - Nombre de mots: de + Nombre de mots : de @@ -355,7 +355,7 @@ Cochez ceci si vous avez des erreurs liées à YAML. are added as scene.</p> <p>Only text files are supported (not images, binary or others).</p> <p><b>Info:</b> Importe la structure d'un dossier. Les dossiers sont crées comme dossiers, et les documents textes sont ajoutés comme des scènes.</p> -<p>Seulement les fichiers textes sont supportés (pas les images, fichiers binaires ou autres).</p> +<p>Seuls les fichiers textes sont pris en charge (pas les images, fichiers binaires ou autres).</p> @@ -375,7 +375,7 @@ Cochez ceci si vous avez des erreurs liées à YAML. Import folder then files - Importer les dossiers en premier + Importer les dossiers puis les fichiers/translation> @@ -385,7 +385,7 @@ Cochez ceci si vous avez des erreurs liées à YAML. File open failed. - Echec de l'ouverture du fichier + Échec de l'ouverture du fichier @@ -410,12 +410,12 @@ Cochez ceci si vous avez des erreurs liées à YAML. Import using: - Importer via: + Importer via : Wrap lines: - Replier les lignes: + Replier les lignes : @@ -425,8 +425,8 @@ Cochez ceci si vous avez des erreurs liées à YAML. <b>none</b>: no line wrap.<br> <b>preserve</b>: tries to preserves line wrap from the original document.</p> - <p>Pandoc doit-il créer des retours à la lignes cosmétiques/non-sémantiques?</p> -<p><b>auto</b>: plier les lignes à 72 charactères.<br> + <p>Pandoc doit-il créer des retours à la ligne cosmétiques/non-sémantiques?</p> +<p><b>auto</b>: retour à la ligne après 72 caractères.<br> <b>none</b>: pas de retours à la lignes.<br> <b>preserve</b>: essaie de préserver les retours à la lignes du document original.</p> @@ -448,7 +448,7 @@ Cochez ceci si vous avez des erreurs liées à YAML. Import tip as: - Importer les pointes comme: + Importer les astuces comme : @@ -494,7 +494,7 @@ Cochez ceci si vous avez des erreurs liées à YAML. License - License + Licence @@ -729,17 +729,17 @@ Cochez ceci si vous avez des erreurs liées à YAML. Situation: - Situation: + Situation : Summary: - Résumé: + Résumé : What if...? - Et si... ? + Et si… ? @@ -839,7 +839,7 @@ Cochez ceci si vous avez des erreurs liées à YAML. Project tree - Arborescence + Arborescence du projet @@ -854,7 +854,7 @@ Cochez ceci si vous avez des erreurs liées à YAML. Create your characters. - Créez ici vos personnage. + Créez ici vos personnages. @@ -874,7 +874,7 @@ Cochez ceci si vous avez des erreurs liées à YAML. Debug info. Sometimes useful. - Des informations pour débugger des fois pendant qu'on code c'est utile. + Des informations pour débugger pendant qu'on code c'est parfois utile. @@ -889,7 +889,7 @@ Cochez ceci si vous avez des erreurs liées à YAML. POV - POV + Pt de vue @@ -919,7 +919,7 @@ Cochez ceci si vous avez des erreurs liées à YAML. Icon - Icone + Icône @@ -1004,7 +1004,7 @@ Cochez ceci si vous avez des erreurs liées à YAML. &Show help texts - &Afficher les bulles d'aides + &Afficher les bulles d'aide @@ -1019,7 +1019,7 @@ Cochez ceci si vous avez des erreurs liées à YAML. &Status... - &Status… + &Statut… @@ -1054,7 +1054,7 @@ Cochez ceci si vous avez des erreurs liées à YAML. Story line - + @@ -1081,7 +1081,7 @@ Cochez ceci si vous avez des erreurs liées à YAML. &About - &A propos + &À propos @@ -1096,12 +1096,12 @@ Cochez ceci si vous avez des erreurs liées à YAML. WARNING: Project {} not saved. - ATTENTION: Le projet {} n'a pas été enregistré. + ATTENTION : Le projet {} n'a pas été enregistré. Build worlds. Create hierarchy of broad categories down to specific details. - Construire des mondes. Crée une hierarchie en partant des catégories les plus larges jusqu'au détails les plus spécifiques. + Construire des mondes. Crée une hiérarchie en partant des catégories les plus larges jusqu'aux détails les plus spécifiques. From ed78f6e56fc6c5e68798b6aad5b96af6e49a5ed2 Mon Sep 17 00:00:00 2001 From: siliconserf <32206614+siliconserf@users.noreply.github.com> Date: Thu, 4 Jun 2020 14:25:27 -0700 Subject: [PATCH 09/51] Update abstractModel.py --- manuskript/models/abstractModel.py | 47 ++++++++++++++++++++---------- 1 file changed, 31 insertions(+), 16 deletions(-) diff --git a/manuskript/models/abstractModel.py b/manuskript/models/abstractModel.py index a536084..f49a1cb 100644 --- a/manuskript/models/abstractModel.py +++ b/manuskript/models/abstractModel.py @@ -36,6 +36,9 @@ class abstractModel(QAbstractItemModel): - Interface with QModelIndex and stuff - XML Import / Export - Drag'n'drop + + Row => item/abstractModel/etc. + Col => data sub-element. Col 1 (second counting) is ID for all model types. """ def __init__(self, parent): @@ -415,21 +418,32 @@ class abstractModel(QAbstractItemModel): # In case of copy actions, items might be duplicates, so we need new IDs. # But they might not be, if we cut, then paste. Paste is a Copy Action. # The first paste would not need new IDs. But subsequent ones will. + + # Recursively change the existing IDs to new, unique values. No need to strip out the old + # even if they are not duplicated in pasting. There is no practical need for ID conservation. + if action == Qt.CopyAction: IDs = self.rootItem.listAllIDs() - + for item in items: if item.ID() in IDs: - # Recursively remove ID. So will get a new one when inserted. - def stripID(item): - item.setData(Outline.ID, None) - for c in item.children(): - stripID(c) - - stripID(item) - + def makeNewID(item): + k = 1 + while True: # Python doesn't have "Do...While" + ks = str(k) + if ks not in IDs: + item.setData(Outline.ID,ks) + IDs.append(ks) #Keep track of new IDs allocated. + for c in item.children(): + makeNewID(c) + break # Actual Loop Exit + else: + k = k+1 # Try the next candidate ID + + makeNewID(item) r = self.insertItems(items, beginRow, parent) - + + return r ################# ADDING AND REMOVING ################# @@ -448,13 +462,13 @@ class abstractModel(QAbstractItemModel): # Insert only if parent is folder if parentItem.isFolder(): - self.beginInsertRows(parent, row, row + len(items) - 1) - + self.beginInsertRows(parent, row, row + len(items) - 1) # Create space. + for i in items: parentItem.insertChild(row + items.index(i), i) - + self.endInsertRows() - + return True else: @@ -507,8 +521,9 @@ class abstractModel(QAbstractItemModel): else: parentItem = parent.internalPointer() - self._removingRows = True # Views that are updating can easily know - # if this is due to row removal. + self._removingRows = True + # Views that are updating can easily know + # if this is due to row removal. self.beginRemoveRows(parent, row, row + count - 1) for i in range(count): item = parentItem.removeChild(row) From fc653ad74ba944a1fcd27e0ee834c01b619af149 Mon Sep 17 00:00:00 2001 From: TheJackiMonster Date: Sun, 5 Jul 2020 01:27:54 +0200 Subject: [PATCH 10/51] Added setting to disable counting spaces as chars but requires restart --- manuskript/functions/__init__.py | 8 +++++ manuskript/models/outlineItem.py | 10 +++--- manuskript/settings.py | 6 ++++ manuskript/settingsWindow.py | 8 +++++ manuskript/ui/settings_ui.py | 60 ++++++++++++++++++++++---------- manuskript/ui/settings_ui.ui | 53 ++++++++++++++++++++++++++++ 6 files changed, 122 insertions(+), 23 deletions(-) diff --git a/manuskript/functions/__init__.py b/manuskript/functions/__init__.py index 8d49192..5f790b5 100644 --- a/manuskript/functions/__init__.py +++ b/manuskript/functions/__init__.py @@ -23,6 +23,14 @@ def wordCount(text): t = [l for l in t if l] return len(t) +def charCount(text, use_spaces = True): + t = text.strip() + + if not use_spaces: + t = t.replace(" ", "") + + return len(t) + validate_ok = lambda *args, **kwargs: True def uiParse(input, default, converter, validator=validate_ok): """ diff --git a/manuskript/models/outlineItem.py b/manuskript/models/outlineItem.py index 932e42f..5a8b607 100644 --- a/manuskript/models/outlineItem.py +++ b/manuskript/models/outlineItem.py @@ -122,7 +122,7 @@ class outlineItem(abstractItem): elif role == Qt.FontRole: f = QFont() - if column == E.wordCount and self.isFolder(): + if (column == E.wordCount or column == E.charCount) and self.isFolder(): f.setItalic(True) elif column == E.goal and self.isFolder() and not self.data(E.setGoal): f.setItalic(True) @@ -143,7 +143,7 @@ class outlineItem(abstractItem): # Checking if we will have to recount words updateWordCount = False - if column in [E.wordCount, E.goal, E.setGoal]: + if column in [E.wordCount, E.charCount, E.goal, E.setGoal]: updateWordCount = not column in self._data or self._data[column] != data # Stuff to do before @@ -156,8 +156,9 @@ class outlineItem(abstractItem): # Stuff to do afterwards if column == E.text: wc = F.wordCount(data) + cc = F.charCount(data, settings.countSpaces) self.setData(E.wordCount, wc) - self.setData(E.charCount, len(data)) + self.setData(E.charCount, cc) if column == E.compile: # Title changes when compile changes @@ -225,7 +226,8 @@ class outlineItem(abstractItem): self.setData(self.enum.goalPercentage, "") self.emitDataChanged([self.enum.goal, self.enum.setGoal, - self.enum.wordCount, self.enum.goalPercentage]) + self.enum.wordCount, self.enum.charCount, + self.enum.goalPercentage]) if self.parent(): self.parent().updateWordCount() diff --git a/manuskript/settings.py b/manuskript/settings.py index dbe0374..8f4884e 100644 --- a/manuskript/settings.py +++ b/manuskript/settings.py @@ -48,6 +48,7 @@ folderView = "cork" lastTab = 0 openIndexes = [""] progressChars = False +countSpaces = True autoSave = False autoSaveDelay = 5 autoSaveNoChanges = True @@ -138,6 +139,7 @@ def save(filename=None, protocol=None): "lastTab": lastTab, "openIndexes": openIndexes, "progressChars": progressChars, + "countSpaces": countSpaces, "autoSave":autoSave, "autoSaveDelay":autoSaveDelay, # TODO: Settings Cleanup Task -- Rename saveOnQuit to saveOnProjectClose -- see PR #615 @@ -241,6 +243,10 @@ def load(string, fromString=False, protocol=None): global progressChars progressChars = allSettings["progressChars"] + if "countSpaces" in allSettings: + global countSpaces + countSpaces = allSettings["countSpaces"] + if "autoSave" in allSettings: global autoSave autoSave = allSettings["autoSave"] diff --git a/manuskript/settingsWindow.py b/manuskript/settingsWindow.py index 084fe97..ac8f855 100644 --- a/manuskript/settingsWindow.py +++ b/manuskript/settingsWindow.py @@ -185,6 +185,9 @@ class settingsWindow(QWidget, Ui_Settings): lambda v: self.lblTreeIconSize.setText("{}x{}".format(v, v))) self.sldTreeIconSize.setValue(settings.viewSettings["Tree"]["iconSize"]) + self.chkCountSpaces.setChecked(settings.countSpaces); + self.chkCountSpaces.stateChanged.connect(self.countSpacesChanged) + self.rdoCorkOldStyle.setChecked(settings.corkStyle == "old") self.rdoCorkNewStyle.setChecked(settings.corkStyle == "new") self.rdoCorkNewStyle.toggled.connect(self.setCorkStyle) @@ -457,6 +460,11 @@ class settingsWindow(QWidget, Ui_Settings): self.mw.treeRedacOutline.viewport().update() + def countSpacesChanged(self): + settings.countSpaces = True if self.chkCountSpaces.checkState() else False + + self.mw.mainEditor.updateStats() + def setCorkColor(self): color = QColor(settings.corkBackground["color"]) self.colorDialog = QColorDialog(color, self) diff --git a/manuskript/ui/settings_ui.py b/manuskript/ui/settings_ui.py index 77d9e25..b34d982 100644 --- a/manuskript/ui/settings_ui.py +++ b/manuskript/ui/settings_ui.py @@ -1,10 +1,11 @@ # -*- coding: utf-8 -*- -# Form implementation generated from reading ui file 'manuskript/ui/settings_ui.ui' +# Form implementation generated from reading ui file 'settings_ui.ui' # -# Created by: PyQt5 UI code generator 5.14.1 +# Created by: PyQt5 UI code generator 5.15.0 # -# WARNING! All changes made in this file will be lost! +# WARNING: Any manual changes made to this file will be lost when pyuic5 is +# run again. Do not edit this file unless you know what you are doing. from PyQt5 import QtCore, QtGui, QtWidgets @@ -546,6 +547,25 @@ class Ui_Settings(object): self.sldTreeIconSize.setObjectName("sldTreeIconSize") self.horizontalLayout_11.addWidget(self.sldTreeIconSize) self.verticalLayout_17.addWidget(self.groupBox_16) + self.horizontalGroupBox = QtWidgets.QGroupBox(self.tab) + font = QtGui.QFont() + font.setBold(True) + font.setWeight(75) + self.horizontalGroupBox.setFont(font) + self.horizontalGroupBox.setObjectName("horizontalGroupBox") + self.horizontalLayout_13 = QtWidgets.QHBoxLayout(self.horizontalGroupBox) + self.horizontalLayout_13.setContentsMargins(9, 9, 9, 9) + self.horizontalLayout_13.setObjectName("horizontalLayout_13") + self.chkCountSpaces = QtWidgets.QCheckBox(self.horizontalGroupBox) + font = QtGui.QFont() + font.setBold(False) + font.setWeight(50) + self.chkCountSpaces.setFont(font) + self.chkCountSpaces.setObjectName("chkCountSpaces") + self.horizontalLayout_13.addWidget(self.chkCountSpaces) + spacerItem5 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) + self.horizontalLayout_13.addItem(spacerItem5) + self.verticalLayout_17.addWidget(self.horizontalGroupBox) self.horizontalLayout_9 = QtWidgets.QHBoxLayout() self.horizontalLayout_9.setObjectName("horizontalLayout_9") self.groupBox_8 = QtWidgets.QGroupBox(self.tab) @@ -643,8 +663,8 @@ class Ui_Settings(object): self.rdoTreeTextNothing.setFont(font) self.rdoTreeTextNothing.setObjectName("rdoTreeTextNothing") self.verticalLayout_16.addWidget(self.rdoTreeTextNothing) - spacerItem5 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding) - self.verticalLayout_16.addItem(spacerItem5) + spacerItem6 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding) + self.verticalLayout_16.addItem(spacerItem6) self.rdoTreeTextCC.raise_() self.rdoTreeTextWC.raise_() self.rdoTreeTextProgress.raise_() @@ -652,8 +672,8 @@ class Ui_Settings(object): self.rdoTreeTextNothing.raise_() self.horizontalLayout_9.addWidget(self.groupBox_9) self.verticalLayout_17.addLayout(self.horizontalLayout_9) - spacerItem6 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding) - self.verticalLayout_17.addItem(spacerItem6) + spacerItem7 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding) + self.verticalLayout_17.addItem(spacerItem7) icon = QtGui.QIcon.fromTheme("view-list-tree") self.tabViews.addTab(self.tab, icon, "") self.tab_2 = QtWidgets.QWidget() @@ -815,8 +835,8 @@ class Ui_Settings(object): self.chkOutlineTitle.setObjectName("chkOutlineTitle") self.gridLayout.addWidget(self.chkOutlineTitle, 3, 0, 1, 1) self.verticalLayout_11.addWidget(self.groupBox_6) - spacerItem7 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding) - self.verticalLayout_11.addItem(spacerItem7) + spacerItem8 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding) + self.verticalLayout_11.addItem(spacerItem8) icon = QtGui.QIcon.fromTheme("view-outline") self.tabViews.addTab(self.tab_2, icon, "") self.tab_3 = QtWidgets.QWidget() @@ -862,8 +882,8 @@ class Ui_Settings(object): self.cmbCorkImage.setFont(font) self.cmbCorkImage.setObjectName("cmbCorkImage") self.verticalLayout_8.addWidget(self.cmbCorkImage) - spacerItem8 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding) - self.verticalLayout_8.addItem(spacerItem8) + spacerItem9 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding) + self.verticalLayout_8.addItem(spacerItem9) self.gridLayout_3.addWidget(self.groupBox_7, 1, 1, 1, 1) self.groupBox_11 = QtWidgets.QGroupBox(self.tab_3) font = QtGui.QFont() @@ -1421,8 +1441,8 @@ class Ui_Settings(object): self.btnLabelColor.setIconSize(QtCore.QSize(64, 64)) self.btnLabelColor.setObjectName("btnLabelColor") self.verticalLayout_2.addWidget(self.btnLabelColor) - spacerItem9 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding) - self.verticalLayout_2.addItem(spacerItem9) + spacerItem10 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding) + self.verticalLayout_2.addItem(spacerItem10) self.horizontalLayout_2.addLayout(self.verticalLayout_2) self.verticalLayout_3.addLayout(self.horizontalLayout_2) self.horizontalLayout = QtWidgets.QHBoxLayout() @@ -1439,8 +1459,8 @@ class Ui_Settings(object): self.btnLabelRemove.setIcon(icon) self.btnLabelRemove.setObjectName("btnLabelRemove") self.horizontalLayout.addWidget(self.btnLabelRemove) - spacerItem10 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) - self.horizontalLayout.addItem(spacerItem10) + spacerItem11 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) + self.horizontalLayout.addItem(spacerItem11) self.verticalLayout_3.addLayout(self.horizontalLayout) self.stack.addWidget(self.stackedWidgetPage3) self.stackedWidgetPage4 = QtWidgets.QWidget() @@ -1474,8 +1494,8 @@ class Ui_Settings(object): self.btnStatusRemove.setIcon(icon) self.btnStatusRemove.setObjectName("btnStatusRemove") self.horizontalLayout_3.addWidget(self.btnStatusRemove) - spacerItem11 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) - self.horizontalLayout_3.addItem(spacerItem11) + spacerItem12 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) + self.horizontalLayout_3.addItem(spacerItem12) self.verticalLayout_4.addLayout(self.horizontalLayout_3) self.stack.addWidget(self.stackedWidgetPage4) self.page = QtWidgets.QWidget() @@ -1523,8 +1543,8 @@ class Ui_Settings(object): self.btnThemeRemove.setIcon(icon) self.btnThemeRemove.setObjectName("btnThemeRemove") self.horizontalLayout_6.addWidget(self.btnThemeRemove) - spacerItem12 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) - self.horizontalLayout_6.addItem(spacerItem12) + spacerItem13 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) + self.horizontalLayout_6.addItem(spacerItem13) self.verticalLayout_12.addLayout(self.horizontalLayout_6) self.themeStack.addWidget(self.stackedWidgetPage1_3) self.stackedWidgetPage2_3 = QtWidgets.QWidget() @@ -1942,6 +1962,8 @@ class Ui_Settings(object): self.cmbTreeBackground.setItemText(4, _translate("Settings", "Compile")) self.groupBox_16.setTitle(_translate("Settings", "Icon Size")) self.lblTreeIconSize.setText(_translate("Settings", "TextLabel")) + self.horizontalGroupBox.setTitle(_translate("Settings", "Char/Word Counter")) + self.chkCountSpaces.setText(_translate("Settings", "Count spaces as chars")) self.groupBox_8.setTitle(_translate("Settings", "Folders")) self.rdoTreeItemCount.setText(_translate("Settings", "Show ite&m count")) self.rdoTreeWC.setText(_translate("Settings", "Show &word count")) diff --git a/manuskript/ui/settings_ui.ui b/manuskript/ui/settings_ui.ui index 53c18cf..6b1a658 100644 --- a/manuskript/ui/settings_ui.ui +++ b/manuskript/ui/settings_ui.ui @@ -1101,6 +1101,59 @@ + + + + + 75 + true + + + + Char/Word Counter + + + + 9 + + + 9 + + + 9 + + + 9 + + + + + + 50 + false + + + + Count spaces as chars + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + From d2631b81c21636ce1ba4baf238b433c3be9f1d97 Mon Sep 17 00:00:00 2001 From: DarkRedman Date: Tue, 28 Jul 2020 15:14:12 +0200 Subject: [PATCH 11/51] Update manuskript_fr.ts Corrected the french word for folder `Dosser` to `Dossier` --- i18n/manuskript_fr.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/i18n/manuskript_fr.ts b/i18n/manuskript_fr.ts index a53aea6..7b66616 100644 --- a/i18n/manuskript_fr.ts +++ b/i18n/manuskript_fr.ts @@ -2659,7 +2659,7 @@ des lignes: Folder - Dosser + Dossier From bd7b1e96f7d197d6e4872f6e3c3be0a528da9d47 Mon Sep 17 00:00:00 2001 From: FrancoisDuchene Date: Thu, 13 Aug 2020 19:10:16 +0200 Subject: [PATCH 12/51] Fix for TypeErrors when using certain styles When i was using certain styles like cleanlooks or qt5ct-style, a TypeError was raising in cascade about the function not having enough arguments. It looked like that, despite the last args of Qstyle.subElementRect() and Qstyle.sizeFromContents() were optional, it was still required to mention it (even if it was just None). That TypeError was only appearing with certain styles, at startup or when changing styles in the settings window. --- manuskript/ui/views/outlineDelegates.py | 2 +- manuskript/ui/views/treeDelegates.py | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/manuskript/ui/views/outlineDelegates.py b/manuskript/ui/views/outlineDelegates.py index 48bba8e..4fdc0f2 100644 --- a/manuskript/ui/views/outlineDelegates.py +++ b/manuskript/ui/views/outlineDelegates.py @@ -313,7 +313,7 @@ class outlineLabelDelegate(QStyledItemDelegate): idx = self.mdlLabels.indexFromItem(item) opt = QStyleOptionViewItem(option) self.initStyleOption(opt, idx) - s = qApp.style().sizeFromContents(QStyle.CT_ItemViewItem, opt, QSize()) + s = qApp.style().sizeFromContents(QStyle.CT_ItemViewItem, opt, QSize(), None) if s.width() > 150: s.setWidth(150) elif s.width() < 50: diff --git a/manuskript/ui/views/treeDelegates.py b/manuskript/ui/views/treeDelegates.py index fa59702..2e162e4 100644 --- a/manuskript/ui/views/treeDelegates.py +++ b/manuskript/ui/views/treeDelegates.py @@ -34,8 +34,8 @@ class treeTitleDelegate(QStyledItemDelegate): opt = QStyleOptionViewItem(option) self.initStyleOption(opt, index) - iconRect = style.subElementRect(style.SE_ItemViewItemDecoration, opt) - textRect = style.subElementRect(style.SE_ItemViewItemText, opt) + iconRect = style.subElementRect(style.SE_ItemViewItemDecoration, opt, None) + textRect = style.subElementRect(style.SE_ItemViewItemText, opt, None) # Background style.drawPrimitive(style.PE_PanelItemViewItem, opt, painter) From ac8cb3e403a448ac5ac621f25a622725e1322572 Mon Sep 17 00:00:00 2001 From: TheJackiMonster Date: Sun, 29 Mar 2020 05:07:53 +0200 Subject: [PATCH 13/51] Added support for LanguageTool via 'language_check' as advanced spellchecker --- manuskript/functions/spellchecker.py | 200 +++++++++++++++++- .../ui/highlighters/basicHighlighter.py | 80 ++++--- manuskript/ui/views/MDEditCompleter.py | 10 +- manuskript/ui/views/MDEditView.py | 6 +- manuskript/ui/views/textEditView.py | 175 ++++++++++++--- 5 files changed, 406 insertions(+), 65 deletions(-) diff --git a/manuskript/functions/spellchecker.py b/manuskript/functions/spellchecker.py index da41f0d..d3b9014 100644 --- a/manuskript/functions/spellchecker.py +++ b/manuskript/functions/spellchecker.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # --!-- coding: utf8 --!-- -import os, gzip, json, glob +import os, gzip, json, glob, re from PyQt5.QtCore import QLocale from collections import OrderedDict from manuskript.functions import writablePath @@ -28,6 +28,11 @@ except ImportError: symspellpy = None +try: + import language_check as languagetool +except: + languagetool = None + class Spellchecker: dictionaries = {} # In order of priority @@ -117,6 +122,17 @@ class Spellchecker: pass return None +class BasicMatch: + def __init__(self, startIndex, endIndex): + self.start = startIndex + self.end = endIndex + self.locqualityissuetype = 'misspelling' + self.replacements = [] + self.msg = '' + + def getWord(self, text): + return text[self.start:self.end] + class BasicDictionary: def __init__(self, name): self._lang = name @@ -162,12 +178,45 @@ class BasicDictionary: def availableDictionaries(): raise NotImplemented + def checkText(self, text): + # Based on http://john.nachtimwald.com/2009/08/22/qplaintextedit-with-in-line-spell-check/ + WORDS = r'(?iu)((?:[^_\W]|\')+)[^A-Za-z0-9\']' + # (?iu) means case insensitive and Unicode + # ((?:[^_\W]|\')+) means words exclude underscores but include apostrophes + # [^A-Za-z0-9\'] used with above hack to prevent spellcheck while typing word + # + # See also https://stackoverflow.com/questions/2062169/regex-w-in-utf-8 + + matches = [] + + for word_object in re.finditer(WORDS, text): + word = word_object.group(1) + + if (self.isMisspelled(word) and not self.isCustomWord(word)): + matches.append(BasicMatch( + word_object.start(1), word_object.end(1) + )) + + return matches + def isMisspelled(self, word): raise NotImplemented def getSuggestions(self, word): raise NotImplemented + def findSuggestions(self, text, start, end): + if start < end: + word = text[start:end] + + if (self.isMisspelled(word) and not self.isCustomWord(word)): + match = BasicMatch(start, end) + match.replacements = self.getSuggestions(word) + + return [ match ] + + return [] + def isCustomWord(self, word): return word.lower() in self._customDict @@ -248,6 +297,9 @@ class EnchantDictionary(BasicDictionary): def getSuggestions(self, word): return self._dict.suggest(word) + def findSuggestions(self, text, start, end): + return [] + def isCustomWord(self, word): return self._dict.is_added(word) @@ -422,8 +474,152 @@ class SymSpellDictionary(BasicDictionary): # Since 6.3.8 self._dict.delete_dictionary_entry(word) +class LanguageToolCache: + + def __init__(self, tool, text): + self._length = len(text) + self._matches = self._buildMatches(tool, text) + + def getMatches(self): + return self._matches + + def _buildMatches(self, tool, text): + matches = [] + + for match in tool.check(text): + start = match.offset + end = start + match.errorlength + + basic_match = BasicMatch(start, end) + basic_match.locqualityissuetype = match.locqualityissuetype + basic_match.replacements = match.replacements + basic_match.msg = match.msg + + matches.append(basic_match) + + return matches + + def update(self, tool, text): + if len(text) != self._length: + self._matches = self._buildMatches(tool, text) + +class LanguageToolDictionary(BasicDictionary): + + def __init__(self, name): + BasicDictionary.__init__(self, name) + + if not (self._lang and self._lang in languagetool.get_languages()): + self._lang = self.getDefaultDictionary() + + self._tool = languagetool.LanguageTool(self._lang) + self._cache = {} + + @staticmethod + def getLibraryName(): + return "LanguageCheck" + + @staticmethod + def getLibraryURL(): + return "https://pypi.org/project/language-check/" + + @staticmethod + def isInstalled(): + if languagetool is not None: + + # This check, if Java is installed, is necessary to + # make sure LanguageTool can be run without problems. + # + return (os.system('java -version') == 0) + + return False + + @staticmethod + def availableDictionaries(): + if LanguageToolDictionary.isInstalled(): + languages = list(languagetool.get_languages()) + languages.sort() + return languages + return [] + + @staticmethod + def getDefaultDictionary(): + if not LanguageToolDictionary.isInstalled(): + return None + + default_locale = languagetool.get_locale_language() + if default_locale and not default_locale in languagetool.get_languages(): + default_locale = None + + if default_locale is None: + default_locale = QLocale.system().name() + if default_locale is None: + default_locale = self.availableDictionaries()[0] + + return default_locale + + def checkText(self, text): + matches = [] + + if len(text) == 0: + return matches + + textId = hash(text) + cacheEntry = None + + if not textId in self._cache: + cacheEntry = LanguageToolCache(self._tool, text) + + self._cache[textId] = cacheEntry + else: + cacheEntry = self._cache[textId] + cacheEntry.update(self._tool, text) + + for match in cacheEntry.getMatches(): + word = match.getWord(text) + + if not (match.locqualityissuetype == 'misspelling' and self.isCustomWord(word)): + matches.append(match) + + return matches + + def isMisspelled(self, word): + if self.isCustomWord(word): + return False + + for match in self.checkText(word): + if match.locqualityissuetype == 'misspelling': + return True + + return False + + def getSuggestions(self, word): + suggestions = [] + + for match in self.checkText(word): + suggestions += match.replacements + + return suggestions + + def findSuggestions(self, text, start, end): + matches = [] + checked = self.checkText(text) + + if start == end: + # Check for containing area: + for match in checked: + if (start >= match.start and start <= match.end): + matches.append(match) + else: + # Check for overlapping area: + for match in checked: + if (match.end > start and match.start < end): + matches.append(match) + + return matches + # Register the implementations in order of priority -Spellchecker.implementations.append(EnchantDictionary) +Spellchecker.registerImplementation(EnchantDictionary) Spellchecker.registerImplementation(SymSpellDictionary) Spellchecker.registerImplementation(PySpellcheckerDictionary) +Spellchecker.registerImplementation(LanguageToolDictionary) diff --git a/manuskript/ui/highlighters/basicHighlighter.py b/manuskript/ui/highlighters/basicHighlighter.py index 362ee5a..17ae8bd 100644 --- a/manuskript/ui/highlighters/basicHighlighter.py +++ b/manuskript/ui/highlighters/basicHighlighter.py @@ -18,7 +18,6 @@ class BasicHighlighter(QSyntaxHighlighter): QSyntaxHighlighter.__init__(self, editor.document()) self.editor = editor - self._misspelledColor = Qt.red self._defaultBlockFormat = QTextBlockFormat() self._defaultCharFormat = QTextCharFormat() self.defaultTextColor = QColor(S.text) @@ -27,6 +26,40 @@ class BasicHighlighter(QSyntaxHighlighter): self.linkColor = QColor(S.link) self.spellingErrorColor = QColor(Qt.red) + # Matches during checking can be separated by their type (all of them listed here): + # https://languagetool.org/development/api/org/languagetool/rules/ITSIssueType.html + # + # These are the colors for actual spell-, grammar- and style-checking: + self._errorColors = { + 'addition' : QColor(255, 215, 0), # gold + 'characters' : QColor(135, 206, 235), # sky blue + 'duplication' : QColor(0, 255, 255), # cyan / aqua + 'formatting' : QColor(0, 128, 128), # teal + 'grammar' : QColor(0, 0, 255), # blue + 'inconsistency' : QColor(128, 128, 0), # olive + 'inconsistententities' : QColor(46, 139, 87), # sea green + 'internationalization' : QColor(255, 165, 0), # orange + 'legal' : QColor(255, 69, 0), # orange red + 'length' : QColor(47, 79, 79), # dark slate gray + 'localespecificcontent' : QColor(188, 143, 143),# rosy brown + 'localeviolation' : QColor(128, 0, 0), # maroon + 'markup' : QColor(128, 0, 128), # purple + 'misspelling' : QColor(255, 0, 0), # red + 'mistranslation' : QColor(255, 0, 255), # magenta / fuchsia + 'nonconformance' : QColor(255, 218, 185), # peach puff + 'numbers' : QColor(65, 105, 225), # royal blue + 'omission' : QColor(255, 20, 147), # deep pink + 'other' : QColor(138, 43, 226), # blue violet + 'patternproblem' : QColor(0, 128, 0), # green + 'register' : QColor(112,128,144), # slate gray + 'style' : QColor(0, 255, 0), # lime + 'terminology' : QColor(0, 0, 128), # navy + 'typographical' : QColor(255, 255, 0), # yellow + 'uncategorized' : QColor(128, 128, 128), # gray + 'untranslated' : QColor(210, 105, 30), # chocolate + 'whitespace' : QColor(192, 192, 192) # silver + } + def setDefaultBlockFormat(self, bf): self._defaultBlockFormat = bf self.rehighlight() @@ -36,7 +69,7 @@ class BasicHighlighter(QSyntaxHighlighter): self.rehighlight() def setMisspelledColor(self, color): - self._misspelledColor = color + self._errorColors['misspelled'] = color def updateColorScheme(self, rehighlight=True): """ @@ -134,32 +167,25 @@ class BasicHighlighter(QSyntaxHighlighter): txt.end() - txt.start(), fmt) - # Spell checking + if hasattr(self.editor, "spellcheck") and self.editor.spellcheck and self.editor._dict: + # Spell checking - # Following algorithm would not check words at the end of line. - # This hacks adds a space to every line where the text cursor is not - # So that it doesn't spellcheck while typing, but still spellchecks at - # end of lines. See github's issue #166. - textedText = text - if self.currentBlock().position() + len(text) != \ - self.editor.textCursor().position(): - textedText = text + " " + # Following algorithm would not check words at the end of line. + # This hacks adds a space to every line where the text cursor is not + # So that it doesn't spellcheck while typing, but still spellchecks at + # end of lines. See github's issue #166. + textedText = text + if self.currentBlock().position() + len(text) != \ + self.editor.textCursor().position(): + textedText = text + " " - # Based on http://john.nachtimwald.com/2009/08/22/qplaintextedit-with-in-line-spell-check/ - WORDS = r'(?iu)((?:[^_\W]|\')+)[^A-Za-z0-9\']' - # (?iu) means case insensitive and Unicode - # ((?:[^_\W]|\')+) means words exclude underscores but include apostrophes - # [^A-Za-z0-9\'] used with above hack to prevent spellcheck while typing word - # - # See also https://stackoverflow.com/questions/2062169/regex-w-in-utf-8 - if hasattr(self.editor, "spellcheck") and self.editor.spellcheck: - for word_object in re.finditer(WORDS, textedText): - if (self.editor._dict - and self.editor._dict.isMisspelled(word_object.group(1))): - format = self.format(word_object.start(1)) - format.setUnderlineColor(self._misspelledColor) + # The text should only be checked once as a whole + for match in self.editor._dict.checkText(textedText): + if match.locqualityissuetype in self._errorColors: + highlight_color = self._errorColors[match.locqualityissuetype] + + format = self.format(match.start) + format.setUnderlineColor(highlight_color) # SpellCheckUnderline fails with some fonts format.setUnderlineStyle(QTextCharFormat.WaveUnderline) - self.setFormat(word_object.start(1), - word_object.end(1) - word_object.start(1), - format) + self.setFormat(match.start, match.end - match.start, format) diff --git a/manuskript/ui/views/MDEditCompleter.py b/manuskript/ui/views/MDEditCompleter.py index e0db680..0101238 100644 --- a/manuskript/ui/views/MDEditCompleter.py +++ b/manuskript/ui/views/MDEditCompleter.py @@ -106,13 +106,18 @@ class MDEditCompleter(MDEditView): self.completer.popup(self.textUnderCursor(select=True)) def mouseMoveEvent(self, event): + """ + When mouse moves, we show tooltip when appropriate. + """ + self.beginTooltipMoveEvent() MDEditView.mouseMoveEvent(self, event) + self.endTooltipMoveEvent() onRef = [r for r in self.refRects if r.contains(event.pos())] if not onRef: qApp.restoreOverrideCursor() - QToolTip.hideText() + self.hideTooltip() return cursor = self.cursorForPosition(event.pos()) @@ -120,7 +125,8 @@ class MDEditCompleter(MDEditView): if ref: if not qApp.overrideCursor(): qApp.setOverrideCursor(Qt.PointingHandCursor) - QToolTip.showText(self.mapToGlobal(event.pos()), Ref.tooltip(ref)) + + self.showTooltip(self.mapToGlobal(event.pos()), Ref.tooltip(ref)) def mouseReleaseEvent(self, event): MDEditView.mouseReleaseEvent(self, event) diff --git a/manuskript/ui/views/MDEditView.py b/manuskript/ui/views/MDEditView.py index e8eb564..c5f4c33 100644 --- a/manuskript/ui/views/MDEditView.py +++ b/manuskript/ui/views/MDEditView.py @@ -506,13 +506,15 @@ class MDEditView(textEditView): """ When mouse moves, we show tooltip when appropriate. """ + self.beginTooltipMoveEvent() textEditView.mouseMoveEvent(self, event) + self.endTooltipMoveEvent() onRect = [r for r in self.clickRects if r.rect.contains(event.pos())] if not onRect: qApp.restoreOverrideCursor() - QToolTip.hideText() + self.hideTooltip() return ct = onRect[0] @@ -534,7 +536,7 @@ class MDEditView(textEditView): if tooltip: tooltip = self.tr("{} (CTRL+Click to open)").format(tooltip) - QToolTip.showText(self.mapToGlobal(event.pos()), tooltip) + self.showTooltip(self.mapToGlobal(event.pos()), tooltip) def mouseReleaseEvent(self, event): textEditView.mouseReleaseEvent(self, event) diff --git a/manuskript/ui/views/textEditView.py b/manuskript/ui/views/textEditView.py index 41324eb..ea58ed8 100644 --- a/manuskript/ui/views/textEditView.py +++ b/manuskript/ui/views/textEditView.py @@ -1,11 +1,11 @@ #!/usr/bin/env python # --!-- coding: utf8 --!-- -import re +import re, textwrap from PyQt5.Qt import QApplication from PyQt5.QtCore import QTimer, QModelIndex, Qt, QEvent, pyqtSignal, QRegExp, QLocale, QPersistentModelIndex, QMutex from PyQt5.QtGui import QTextBlockFormat, QTextCharFormat, QFont, QColor, QIcon, QMouseEvent, QTextCursor -from PyQt5.QtWidgets import QWidget, QTextEdit, qApp, QAction, QMenu +from PyQt5.QtWidgets import QWidget, QTextEdit, qApp, QAction, QMenu, QToolTip from manuskript import settings from manuskript.enums import Outline, World, Character, Plot @@ -47,6 +47,8 @@ class textEditView(QTextEdit): self.highlightWord = "" self.highligtCS = False self._dict = None + self._tooltip = { 'depth' : 0, 'active' : 0 } + # self.document().contentsChanged.connect(self.submit, F.AUC) # Submit text changed only after 500ms without modifications @@ -393,6 +395,49 @@ class textEditView(QTextEdit): Qt.LeftButton, Qt.LeftButton, Qt.NoModifier) QTextEdit.mousePressEvent(self, event) + def beginTooltipMoveEvent(self): + self._tooltip['depth'] += 1 + + def endTooltipMoveEvent(self): + self._tooltip['depth'] -= 1 + + def showTooltip(self, pos, text): + QToolTip.showText(pos, text) + self._tooltip['active'] = self._tooltip['depth'] + + def hideTooltip(self): + if self._tooltip['active'] == self._tooltip['depth']: + QToolTip.hideText() + + def mouseMoveEvent(self, event): + """ + When mouse moves, we show tooltip when appropriate. + """ + self.beginTooltipMoveEvent() + QTextEdit.mouseMoveEvent(self, event) + self.endTooltipMoveEvent() + + match = None + + # Check if the selected word has any suggestions for correction + if self.spellcheck and self._dict: + cursor = self.cursorForPosition(event.pos()) + + # Searches for correlating/overlapping matches + suggestions = self._dict.findSuggestions(self.toPlainText(), cursor.selectionStart(), cursor.selectionEnd()) + + if len(suggestions) > 0: + # I think it should focus on one type of error at a time. + match = suggestions[0] + + if match: + # Wrap the message into a fitting width + msg_lines = textwrap.wrap(match.msg, 48) + + self.showTooltip(event.globalPos(), "\n".join(msg_lines)) + else: + self.hideTooltip() + def wheelEvent(self, event): """ We catch wheelEvent if key modifier is CTRL to change font size. @@ -440,42 +485,108 @@ class textEditView(QTextEdit): if not self.spellcheck: return popup_menu - # Select the word under the cursor. - # But only if there is no selection (otherwise it's impossible to select more text to copy/cut) cursor = self.textCursor() - if not cursor.hasSelection(): - cursor.select(QTextCursor.WordUnderCursor) - self.setTextCursor(cursor) + suggestions = [] + selectedWord = None + + # Check for any suggestions for corrections at the cursors position + if self._dict: + text = self.toPlainText() + + suggestions = self._dict.findSuggestions(text, cursor.selectionStart(), cursor.selectionEnd()) + + # Select the word under the cursor if necessary. + # But only if there is no selection (otherwise it's impossible to select more text to copy/cut) + if (not cursor.hasSelection() and len(suggestions) == 0): + cursor.select(QTextCursor.WordUnderCursor) + self.setTextCursor(cursor) + + if cursor.hasSelection(): + selectedWord = cursor.selectedText() + + # Check if the selected word is misspelled and offer spelling + # suggestions if it is. + suggestions = self._dict.findSuggestions(text, cursor.selectionStart(), cursor.selectionEnd()) + + if (len(suggestions) > 0 or selectedWord): + valid = len(suggestions) == 0 - # Check if the selected word is misspelled and offer spelling - # suggestions if it is. - if self._dict and cursor.hasSelection(): - text = str(cursor.selectedText()) - valid = not self._dict.isMisspelled(text) - selectedWord = cursor.selectedText() if not valid: - spell_menu = QMenu(self.tr('Spelling Suggestions'), self) - spell_menu.setIcon(F.themeIcon("spelling")) - for word in self._dict.getSuggestions(text): - action = self.SpellAction(word, spell_menu) - action.correct.connect(self.correctWord) - spell_menu.addAction(action) + # I think it should focus on one type of error at a time. + match = suggestions[0] + popup_menu.insertSeparator(popup_menu.actions()[0]) - # Adds: add to dictionary - addAction = QAction(self.tr("&Add to dictionary"), popup_menu) - addAction.setIcon(QIcon.fromTheme("list-add")) - addAction.triggered.connect(self.addWordToDict) - addAction.setData(selectedWord) - popup_menu.insertAction(popup_menu.actions()[0], addAction) - # Only add the spelling suggests to the menu if there are - # suggestions. - if len(spell_menu.actions()) != 0: - # Adds: suggestions - popup_menu.insertMenu(popup_menu.actions()[0], spell_menu) - # popup_menu.insertSeparator(popup_menu.actions()[0]) + + if match.locqualityissuetype == 'misspelling': + spell_menu = QMenu(self.tr('Spelling Suggestions'), self) + spell_menu.setIcon(F.themeIcon("spelling")) + + if (match.end > match.start and not selectedWord): + # Select the actual area of the match + cursor = self.textCursor() + cursor.setPosition(match.start, QTextCursor.MoveAnchor); + cursor.setPosition(match.end, QTextCursor.KeepAnchor); + self.setTextCursor(cursor) + + selectedWord = cursor.selectedText() + + for word in match.replacements: + action = self.SpellAction(word, spell_menu) + action.correct.connect(self.correctWord) + spell_menu.addAction(action) + + # Adds: add to dictionary + addAction = QAction(self.tr("&Add to dictionary"), popup_menu) + addAction.setIcon(QIcon.fromTheme("list-add")) + addAction.triggered.connect(self.addWordToDict) + addAction.setData(selectedWord) + + popup_menu.insertAction(popup_menu.actions()[0], addAction) + + # Only add the spelling suggests to the menu if there are + # suggestions. + if len(match.replacements) > 0: + # Adds: suggestions + popup_menu.insertMenu(popup_menu.actions()[0], spell_menu) + else: + correct_menu = None + correct_action = None + + if (len(match.replacements) > 0 and match.end > match.start): + # Select the actual area of the match + cursor = self.textCursor() + cursor.setPosition(match.start, QTextCursor.MoveAnchor); + cursor.setPosition(match.end, QTextCursor.KeepAnchor); + self.setTextCursor(cursor) + + if len(match.replacements) > 0: + correct_menu = QMenu(self.tr('&Correction Suggestions'), self) + correct_menu.setIcon(F.themeIcon("spelling")) + + for word in match.replacements: + action = self.SpellAction(word, correct_menu) + action.correct.connect(self.correctWord) + correct_menu.addAction(action) + + if correct_menu == None: + correct_action = QAction(self.tr('&Correction Suggestion'), popup_menu) + correct_action.setIcon(F.themeIcon("spelling")) + correct_action.setEnabled(False) + + # Wrap the message into a fitting width + msg_lines = textwrap.wrap(match.msg, 48) + + # Insert the lines of the message backwards + for i in range(0, len(msg_lines)): + popup_menu.insertSection(popup_menu.actions()[0], msg_lines[len(msg_lines) - (i + 1)]) + + if correct_menu != None: + popup_menu.insertMenu(popup_menu.actions()[0], correct_menu) + else: + popup_menu.insertAction(popup_menu.actions()[0], correct_action) # If word was added to custom dict, give the possibility to remove it - elif valid and self._dict.isCustomWord(selectedWord): + elif self._dict.isCustomWord(selectedWord): popup_menu.insertSeparator(popup_menu.actions()[0]) # Adds: remove from dictionary rmAction = QAction(self.tr("&Remove from custom dictionary"), popup_menu) From 61734c1afab58f2a43ec2d17c9e3659a52cafe36 Mon Sep 17 00:00:00 2001 From: TheJackiMonster Date: Tue, 31 Mar 2020 05:55:30 +0200 Subject: [PATCH 14/51] Enabling/Disabling POV for a specific character --- manuskript/enums.py | 1 + manuskript/load_save/version_1.py | 3 +- manuskript/mainWindow.py | 22 ++++ manuskript/models/characterModel.py | 23 ++++ manuskript/models/characterPOVModel.py | 47 ++++++++ manuskript/ui/mainWindow.py | 142 ++++++++++++----------- manuskript/ui/mainWindow.ui | 120 +++++++++++-------- manuskript/ui/settings_ui.py | 2 +- manuskript/ui/views/characterTreeView.py | 12 +- manuskript/ui/views/propertiesView.py | 3 +- 10 files changed, 255 insertions(+), 120 deletions(-) create mode 100644 manuskript/models/characterPOVModel.py diff --git a/manuskript/enums.py b/manuskript/enums.py index 4e94d0b..e5751a7 100644 --- a/manuskript/enums.py +++ b/manuskript/enums.py @@ -16,6 +16,7 @@ class Character(IntEnum): summaryPara = 8 summaryFull = 9 notes = 10 + pov = 11 class Plot(IntEnum): name = 0 diff --git a/manuskript/load_save/version_1.py b/manuskript/load_save/version_1.py index 6c4f91d..9e76a00 100644 --- a/manuskript/load_save/version_1.py +++ b/manuskript/load_save/version_1.py @@ -40,6 +40,7 @@ characterMap = OrderedDict([ (Character.name, "Name"), (Character.ID, "ID"), (Character.importance, "Importance"), + (Character.pov, "POV"), (Character.motivation, "Motivation"), (Character.goal, "Goal"), (Character.conflict, "Conflict"), @@ -47,7 +48,7 @@ characterMap = OrderedDict([ (Character.summarySentence, "Phrase Summary"), (Character.summaryPara, "Paragraph Summary"), (Character.summaryFull, "Full Summary"), - (Character.notes, "Notes"), + (Character.notes, "Notes") ]) # If true, logs infos while saving and loading. diff --git a/manuskript/mainWindow.py b/manuskript/mainWindow.py index 5afb0fa..d9c91f8 100644 --- a/manuskript/mainWindow.py +++ b/manuskript/mainWindow.py @@ -346,6 +346,9 @@ class MainWindow(QMainWindow, Ui_MainWindow): # Slider importance self.updateCharacterImportance(c.ID()) + # POV state + self.updateCharacterPOVState(c.ID()) + # Character Infos self.tblPersoInfos.setRootIndex(index) @@ -366,6 +369,18 @@ class MainWindow(QMainWindow, Ui_MainWindow): c = self.mdlCharacter.getCharacterByID(ID) self.sldPersoImportance.setValue(int(c.importance())) + def updateCharacterPOVState(self, ID): + c = self.mdlCharacter.getCharacterByID(ID) + self.disconnectAll(self.chkPersoPOV.stateChanged, self.lstCharacters.changeCharacterPOVState) + + if c.pov(): + self.chkPersoPOV.setCheckState(Qt.Checked) + else: + self.chkPersoPOV.setCheckState(Qt.Unchecked) + + self.chkPersoPOV.stateChanged.connect(self.lstCharacters.changeCharacterPOVState, F.AUC) + self.chkPersoPOV.setEnabled(len(self.mdlOutline.findItemsByPOV(ID)) == 0) + ############################################################################### # PLOTS ############################################################################### @@ -935,9 +950,13 @@ class MainWindow(QMainWindow, Ui_MainWindow): self.tblPersoInfos.setModel(self.mdlCharacter) self.btnAddPerso.clicked.connect(self.mdlCharacter.addCharacter, F.AUC) + try: self.btnRmPerso.clicked.connect(self.lstCharacters.removeCharacter, F.AUC) + self.btnPersoColor.clicked.connect(self.lstCharacters.choseCharacterColor, F.AUC) + self.chkPersoPOV.stateChanged.connect(self.lstCharacters.changeCharacterPOVState, F.AUC) + self.btnPersoAddInfo.clicked.connect(self.lstCharacters.addCharacterInfo, F.AUC) self.btnPersoRmInfo.clicked.connect(self.lstCharacters.removeCharacterInfo, F.AUC) except TypeError: @@ -1091,7 +1110,10 @@ class MainWindow(QMainWindow, Ui_MainWindow): # Characters self.disconnectAll(self.btnAddPerso.clicked, self.mdlCharacter.addCharacter) self.disconnectAll(self.btnRmPerso.clicked, self.lstCharacters.removeCharacter) + self.disconnectAll(self.btnPersoColor.clicked, self.lstCharacters.choseCharacterColor) + self.disconnectAll(self.chkPersoPOV.stateChanged, self.lstCharacters.changeCharacterPOVState) + self.disconnectAll(self.btnPersoAddInfo.clicked, self.lstCharacters.addCharacterInfo) self.disconnectAll(self.btnPersoRmInfo.clicked, self.lstCharacters.removeCharacterInfo) diff --git a/manuskript/models/characterModel.py b/manuskript/models/characterModel.py index a42f8f0..639f8f3 100644 --- a/manuskript/models/characterModel.py +++ b/manuskript/models/characterModel.py @@ -132,6 +132,9 @@ class characterModel(QAbstractItemModel): def importance(self, row): return self.character(row).importance() + def pov(self, row): + return self.character(row).pov() + ############################################################################### # MODEL QUERIES ############################################################################### @@ -143,8 +146,10 @@ class characterModel(QAbstractItemModel): @return: array of array of ´character´, by importance. """ r = [[], [], []] + for c in self.characters: r[2-int(c.importance())].append(c) + return r def getCharacterByID(self, ID): @@ -153,6 +158,7 @@ class characterModel(QAbstractItemModel): for c in self.characters: if c.ID() == ID: return c + return None ############################################################################### @@ -231,6 +237,7 @@ class Character(): self.assignUniqueID() self.assignRandomColor() self._data[C.importance.value] = "0" + self._data[C.pov.value] = "True" self.infos = [] @@ -274,6 +281,22 @@ class Character(): """ return iconColor(self.icon) + def setPOVEnabled(self, enabled): + if enabled != self.pov(): + if enabled: + self._data[C.pov.value] = 'True' + else: + self._data[C.pov.value] = 'False' + + try: + self._model.dataChanged.emit(self.index(), self.index()) + except: + # If it is the initialisation, won't be able to emit + pass + + def pov(self): + return self._data[C.pov.value] == 'True' + def assignUniqueID(self, parent=QModelIndex()): """Assigns an unused character ID.""" vals = [] diff --git a/manuskript/models/characterPOVModel.py b/manuskript/models/characterPOVModel.py new file mode 100644 index 0000000..fbbe419 --- /dev/null +++ b/manuskript/models/characterPOVModel.py @@ -0,0 +1,47 @@ +#!/usr/bin/env python +# --!-- coding: utf8 --!-- +from PyQt5.QtCore import QModelIndex, QSortFilterProxyModel + + +class characterPOVModel(QSortFilterProxyModel): + + def __init__(self, sourceModel, parent=None): + QSortFilterProxyModel.__init__(self, parent) + + self.setSourceModel(sourceModel) + + if sourceModel: + sourceModel.dataChanged.connect(self.sourceDataChanged) + + def filterAcceptsRow(self, sourceRow, sourceParent): + return self.sourceModel().pov(sourceRow) + + def rowToSource(self, row): + index = self.index(row, 0) + sourceIndex = self.mapToSource(index) + return sourceIndex.row() + + def sourceDataChanged(self, topLeft, bottomRight): + self.invalidateFilter() + + ############################################################################### + # CHARACTER QUERIES + ############################################################################### + + def character(self, row): + return self.sourceModel().character(self.rowToSource(row)) + + def name(self, row): + return self.sourceModel().name(self.rowToSource(row)) + + def icon(self, row): + return self.sourceModel().icon(self.rowToSource(row)) + + def ID(self, row): + return self.sourceModel().ID(self.rowToSource(row)) + + def importance(self, row): + return self.sourceModel().importance(self.rowToSource(row)) + + def pov(self, row): + return self.sourceModel().pov(self.rowToSource(row)) diff --git a/manuskript/ui/mainWindow.py b/manuskript/ui/mainWindow.py index 76f0822..5e95ec4 100644 --- a/manuskript/ui/mainWindow.py +++ b/manuskript/ui/mainWindow.py @@ -2,12 +2,14 @@ # Form implementation generated from reading ui file 'manuskript/ui/mainWindow.ui' # -# Created by: PyQt5 UI code generator 5.5.1 +# Created by: PyQt5 UI code generator 5.14.1 # # WARNING! All changes made in this file will be lost! + from PyQt5 import QtCore, QtGui, QtWidgets + class Ui_MainWindow(object): def setupUi(self, MainWindow): MainWindow.setObjectName("MainWindow") @@ -378,69 +380,11 @@ class Ui_MainWindow(object): self.scrollAreaPersoInfos.setAlignment(QtCore.Qt.AlignLeading|QtCore.Qt.AlignLeft|QtCore.Qt.AlignTop) self.scrollAreaPersoInfos.setObjectName("scrollAreaPersoInfos") self.scrollAreaPersoInfosWidget = QtWidgets.QWidget() - self.scrollAreaPersoInfosWidget.setGeometry(QtCore.QRect(0, 0, 204, 606)) + self.scrollAreaPersoInfosWidget.setGeometry(QtCore.QRect(0, 0, 453, 695)) self.scrollAreaPersoInfosWidget.setObjectName("scrollAreaPersoInfosWidget") self.formLayout_8 = QtWidgets.QFormLayout(self.scrollAreaPersoInfosWidget) self.formLayout_8.setFieldGrowthPolicy(QtWidgets.QFormLayout.AllNonFixedFieldsGrow) self.formLayout_8.setObjectName("formLayout_8") - self.label_4 = QtWidgets.QLabel(self.scrollAreaPersoInfosWidget) - self.label_4.setObjectName("label_4") - self.formLayout_8.setWidget(4, QtWidgets.QFormLayout.LabelRole, self.label_4) - self.txtPersoMotivation = MDEditCompleter(self.scrollAreaPersoInfosWidget) - self.txtPersoMotivation.setObjectName("txtPersoMotivation") - self.formLayout_8.setWidget(4, QtWidgets.QFormLayout.FieldRole, self.txtPersoMotivation) - self.label_5 = QtWidgets.QLabel(self.scrollAreaPersoInfosWidget) - self.label_5.setObjectName("label_5") - self.formLayout_8.setWidget(5, QtWidgets.QFormLayout.LabelRole, self.label_5) - self.txtPersoGoal = MDEditCompleter(self.scrollAreaPersoInfosWidget) - self.txtPersoGoal.setObjectName("txtPersoGoal") - self.formLayout_8.setWidget(5, QtWidgets.QFormLayout.FieldRole, self.txtPersoGoal) - self.label_6 = QtWidgets.QLabel(self.scrollAreaPersoInfosWidget) - self.label_6.setObjectName("label_6") - self.formLayout_8.setWidget(6, QtWidgets.QFormLayout.LabelRole, self.label_6) - self.txtPersoConflict = MDEditCompleter(self.scrollAreaPersoInfosWidget) - self.txtPersoConflict.setObjectName("txtPersoConflict") - self.formLayout_8.setWidget(6, QtWidgets.QFormLayout.FieldRole, self.txtPersoConflict) - self.label_7 = QtWidgets.QLabel(self.scrollAreaPersoInfosWidget) - self.label_7.setObjectName("label_7") - self.formLayout_8.setWidget(7, QtWidgets.QFormLayout.LabelRole, self.label_7) - self.txtPersoEpiphany = MDEditCompleter(self.scrollAreaPersoInfosWidget) - self.txtPersoEpiphany.setObjectName("txtPersoEpiphany") - self.formLayout_8.setWidget(7, QtWidgets.QFormLayout.FieldRole, self.txtPersoEpiphany) - self.label_24 = QtWidgets.QLabel(self.scrollAreaPersoInfosWidget) - self.label_24.setObjectName("label_24") - self.formLayout_8.setWidget(8, QtWidgets.QFormLayout.LabelRole, self.label_24) - self.txtPersoSummarySentence = MDEditCompleter(self.scrollAreaPersoInfosWidget) - self.txtPersoSummarySentence.setObjectName("txtPersoSummarySentence") - self.formLayout_8.setWidget(8, QtWidgets.QFormLayout.FieldRole, self.txtPersoSummarySentence) - self.label_8 = QtWidgets.QLabel(self.scrollAreaPersoInfosWidget) - self.label_8.setObjectName("label_8") - self.formLayout_8.setWidget(9, QtWidgets.QFormLayout.LabelRole, self.label_8) - self.txtPersoSummaryPara = MDEditCompleter(self.scrollAreaPersoInfosWidget) - self.txtPersoSummaryPara.setObjectName("txtPersoSummaryPara") - self.formLayout_8.setWidget(9, QtWidgets.QFormLayout.FieldRole, self.txtPersoSummaryPara) - self.horizontalLayout_21 = QtWidgets.QHBoxLayout() - self.horizontalLayout_21.setObjectName("horizontalLayout_21") - spacerItem10 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) - self.horizontalLayout_21.addItem(spacerItem10) - self.btnStepFour = QtWidgets.QPushButton(self.scrollAreaPersoInfosWidget) - icon = QtGui.QIcon.fromTheme("go-next") - self.btnStepFour.setIcon(icon) - self.btnStepFour.setFlat(True) - self.btnStepFour.setObjectName("btnStepFour") - self.horizontalLayout_21.addWidget(self.btnStepFour) - self.formLayout_8.setLayout(10, QtWidgets.QFormLayout.FieldRole, self.horizontalLayout_21) - self.label_18 = QtWidgets.QLabel(self.scrollAreaPersoInfosWidget) - self.label_18.setObjectName("label_18") - self.formLayout_8.setWidget(3, QtWidgets.QFormLayout.LabelRole, self.label_18) - self.sldPersoImportance = sldImportance(self.scrollAreaPersoInfosWidget) - sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Preferred) - sizePolicy.setHorizontalStretch(0) - sizePolicy.setVerticalStretch(0) - sizePolicy.setHeightForWidth(self.sldPersoImportance.sizePolicy().hasHeightForWidth()) - self.sldPersoImportance.setSizePolicy(sizePolicy) - self.sldPersoImportance.setObjectName("sldPersoImportance") - self.formLayout_8.setWidget(3, QtWidgets.QFormLayout.FieldRole, self.sldPersoImportance) self.label_3 = QtWidgets.QLabel(self.scrollAreaPersoInfosWidget) self.label_3.setObjectName("label_3") self.formLayout_8.setWidget(2, QtWidgets.QFormLayout.LabelRole, self.label_3) @@ -454,6 +398,73 @@ class Ui_MainWindow(object): self.btnPersoColor.setObjectName("btnPersoColor") self.horizontalLayout_3.addWidget(self.btnPersoColor) self.formLayout_8.setLayout(2, QtWidgets.QFormLayout.FieldRole, self.horizontalLayout_3) + self.horizontalLayout_20 = QtWidgets.QHBoxLayout() + self.horizontalLayout_20.setObjectName("horizontalLayout_20") + self.sldPersoImportance = sldImportance(self.scrollAreaPersoInfosWidget) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.sldPersoImportance.sizePolicy().hasHeightForWidth()) + self.sldPersoImportance.setSizePolicy(sizePolicy) + self.sldPersoImportance.setObjectName("sldPersoImportance") + self.horizontalLayout_20.addWidget(self.sldPersoImportance) + self.chkPersoPOV = QtWidgets.QCheckBox(self.scrollAreaPersoInfosWidget) + self.chkPersoPOV.setChecked(False) + self.chkPersoPOV.setAutoRepeat(False) + self.chkPersoPOV.setTristate(False) + self.chkPersoPOV.setObjectName("chkPersoPOV") + self.horizontalLayout_20.addWidget(self.chkPersoPOV) + self.formLayout_8.setLayout(4, QtWidgets.QFormLayout.FieldRole, self.horizontalLayout_20) + self.label_4 = QtWidgets.QLabel(self.scrollAreaPersoInfosWidget) + self.label_4.setObjectName("label_4") + self.formLayout_8.setWidget(6, QtWidgets.QFormLayout.LabelRole, self.label_4) + self.txtPersoMotivation = MDEditCompleter(self.scrollAreaPersoInfosWidget) + self.txtPersoMotivation.setObjectName("txtPersoMotivation") + self.formLayout_8.setWidget(6, QtWidgets.QFormLayout.FieldRole, self.txtPersoMotivation) + self.label_5 = QtWidgets.QLabel(self.scrollAreaPersoInfosWidget) + self.label_5.setObjectName("label_5") + self.formLayout_8.setWidget(7, QtWidgets.QFormLayout.LabelRole, self.label_5) + self.txtPersoGoal = MDEditCompleter(self.scrollAreaPersoInfosWidget) + self.txtPersoGoal.setObjectName("txtPersoGoal") + self.formLayout_8.setWidget(7, QtWidgets.QFormLayout.FieldRole, self.txtPersoGoal) + self.label_6 = QtWidgets.QLabel(self.scrollAreaPersoInfosWidget) + self.label_6.setObjectName("label_6") + self.formLayout_8.setWidget(8, QtWidgets.QFormLayout.LabelRole, self.label_6) + self.txtPersoConflict = MDEditCompleter(self.scrollAreaPersoInfosWidget) + self.txtPersoConflict.setObjectName("txtPersoConflict") + self.formLayout_8.setWidget(8, QtWidgets.QFormLayout.FieldRole, self.txtPersoConflict) + self.label_7 = QtWidgets.QLabel(self.scrollAreaPersoInfosWidget) + self.label_7.setObjectName("label_7") + self.formLayout_8.setWidget(9, QtWidgets.QFormLayout.LabelRole, self.label_7) + self.txtPersoEpiphany = MDEditCompleter(self.scrollAreaPersoInfosWidget) + self.txtPersoEpiphany.setObjectName("txtPersoEpiphany") + self.formLayout_8.setWidget(9, QtWidgets.QFormLayout.FieldRole, self.txtPersoEpiphany) + self.label_24 = QtWidgets.QLabel(self.scrollAreaPersoInfosWidget) + self.label_24.setObjectName("label_24") + self.formLayout_8.setWidget(10, QtWidgets.QFormLayout.LabelRole, self.label_24) + self.txtPersoSummarySentence = MDEditCompleter(self.scrollAreaPersoInfosWidget) + self.txtPersoSummarySentence.setObjectName("txtPersoSummarySentence") + self.formLayout_8.setWidget(10, QtWidgets.QFormLayout.FieldRole, self.txtPersoSummarySentence) + self.label_8 = QtWidgets.QLabel(self.scrollAreaPersoInfosWidget) + self.label_8.setObjectName("label_8") + self.formLayout_8.setWidget(11, QtWidgets.QFormLayout.LabelRole, self.label_8) + self.txtPersoSummaryPara = MDEditCompleter(self.scrollAreaPersoInfosWidget) + self.txtPersoSummaryPara.setObjectName("txtPersoSummaryPara") + self.formLayout_8.setWidget(11, QtWidgets.QFormLayout.FieldRole, self.txtPersoSummaryPara) + self.horizontalLayout_21 = QtWidgets.QHBoxLayout() + self.horizontalLayout_21.setObjectName("horizontalLayout_21") + spacerItem10 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) + self.horizontalLayout_21.addItem(spacerItem10) + self.btnStepFour = QtWidgets.QPushButton(self.scrollAreaPersoInfosWidget) + icon = QtGui.QIcon.fromTheme("go-next") + self.btnStepFour.setIcon(icon) + self.btnStepFour.setFlat(True) + self.btnStepFour.setObjectName("btnStepFour") + self.horizontalLayout_21.addWidget(self.btnStepFour) + self.formLayout_8.setLayout(12, QtWidgets.QFormLayout.FieldRole, self.horizontalLayout_21) + self.label_18 = QtWidgets.QLabel(self.scrollAreaPersoInfosWidget) + self.label_18.setObjectName("label_18") + self.formLayout_8.setWidget(4, QtWidgets.QFormLayout.LabelRole, self.label_18) self.scrollAreaPersoInfos.setWidget(self.scrollAreaPersoInfosWidget) self.verticalLayout_20.addWidget(self.scrollAreaPersoInfos) self.tabPersos.addTab(self.info, "") @@ -745,7 +756,7 @@ class Ui_MainWindow(object): self.treeWorld.setRootIsDecorated(False) self.treeWorld.setObjectName("treeWorld") self.treeWorld.header().setVisible(False) - self.treeWorld.header().setDefaultSectionSize(0) + self.treeWorld.header().setDefaultSectionSize(25) self.verticalLayout_32.addWidget(self.treeWorld) self.horizontalLayout_19 = QtWidgets.QHBoxLayout() self.horizontalLayout_19.setObjectName("horizontalLayout_19") @@ -833,6 +844,7 @@ class Ui_MainWindow(object): self.layoutWidget = QtWidgets.QWidget(self.splitterOutlineH) self.layoutWidget.setObjectName("layoutWidget") self.verticalLayout_14 = QtWidgets.QVBoxLayout(self.layoutWidget) + self.verticalLayout_14.setContentsMargins(0, 0, 0, 0) self.verticalLayout_14.setObjectName("verticalLayout_14") self.splitterOutlineV = QtWidgets.QSplitter(self.layoutWidget) self.splitterOutlineV.setOrientation(QtCore.Qt.Vertical) @@ -1029,7 +1041,7 @@ class Ui_MainWindow(object): self.horizontalLayout_2.addWidget(self.stack) MainWindow.setCentralWidget(self.centralwidget) self.menubar = QtWidgets.QMenuBar(MainWindow) - self.menubar.setGeometry(QtCore.QRect(0, 0, 1112, 30)) + self.menubar.setGeometry(QtCore.QRect(0, 0, 1112, 24)) self.menubar.setObjectName("menubar") self.menuFile = QtWidgets.QMenu(self.menubar) self.menuFile.setObjectName("menuFile") @@ -1339,7 +1351,7 @@ class Ui_MainWindow(object): self.retranslateUi(MainWindow) self.stack.setCurrentIndex(1) - self.tabMain.setCurrentIndex(0) + self.tabMain.setCurrentIndex(2) self.tabSummary.setCurrentIndex(0) self.tabPersos.setCurrentIndex(0) self.tabPlot.setCurrentIndex(0) @@ -1484,6 +1496,8 @@ class Ui_MainWindow(object): self.tabMain.setTabText(self.tabMain.indexOf(self.lytTabSummary), _translate("MainWindow", "Summary")) self.groupBox.setTitle(_translate("MainWindow", "Names")) self.txtPersosFilter.setPlaceholderText(_translate("MainWindow", "Filter")) + self.label_3.setText(_translate("MainWindow", "Name")) + self.chkPersoPOV.setText(_translate("MainWindow", "Allow POV")) self.label_4.setText(_translate("MainWindow", "Motivation")) self.label_5.setText(_translate("MainWindow", "Goal")) self.label_6.setText(_translate("MainWindow", "Conflict")) @@ -1492,7 +1506,6 @@ class Ui_MainWindow(object): self.label_8.setText(_translate("MainWindow", "

One paragraph
summary

")) self.btnStepFour.setText(_translate("MainWindow", "Next")) self.label_18.setText(_translate("MainWindow", "Importance")) - self.label_3.setText(_translate("MainWindow", "Name")) self.tabPersos.setTabText(self.tabPersos.indexOf(self.info), _translate("MainWindow", "Basic info")) self.btnStepSix.setText(_translate("MainWindow", "Next")) self.tabPersos.setTabText(self.tabPersos.indexOf(self.tab_11), _translate("MainWindow", "Summary")) @@ -1635,7 +1648,6 @@ class Ui_MainWindow(object): self.actFormatOrderedList.setText(_translate("MainWindow", "&Ordered list")) self.actFormatList.setText(_translate("MainWindow", "&Unordered list")) self.actFormatBlockquote.setText(_translate("MainWindow", "B&lockquote")) - from manuskript.ui.cheatSheet import cheatSheet from manuskript.ui.editors.mainEditor import mainEditor from manuskript.ui.search import search diff --git a/manuskript/ui/mainWindow.ui b/manuskript/ui/mainWindow.ui index 3da6713..1771b38 100644 --- a/manuskript/ui/mainWindow.ui +++ b/manuskript/ui/mainWindow.ui @@ -124,7 +124,7 @@ QTabWidget::Rounded - 0 + 2 true @@ -815,75 +815,126 @@ 0 0 - 204 - 606 + 453 + 695 QFormLayout::AllNonFixedFieldsGrow - + + + + Name + + + + + + + + + + + + + + + + + + + + + + + + 0 + 0 + + + + + + + + Allow POV + + + false + + + false + + + false + + + + + + Motivation - + - + Goal - + - + Conflict - + - + Epiphany - + - + <html><head/><body><p align="right">One sentence<br/>summary</p></body></html> - + - + <html><head/><body><p align="right">One paragraph<br/>summary</p></body></html> - + - + @@ -914,44 +965,13 @@ - + Importance - - - - - 0 - 0 - - - - - - - - Name - - - - - - - - - - - - - - - - - @@ -1547,7 +1567,7 @@ false - 0 + 25
@@ -2095,7 +2115,7 @@ 0 0 1112 - 30 + 24 diff --git a/manuskript/ui/settings_ui.py b/manuskript/ui/settings_ui.py index 0cd39f5..9053f31 100644 --- a/manuskript/ui/settings_ui.py +++ b/manuskript/ui/settings_ui.py @@ -2,7 +2,7 @@ # Form implementation generated from reading ui file 'manuskript/ui/settings_ui.ui' # -# Created by: PyQt5 UI code generator 5.13.0 +# Created by: PyQt5 UI code generator 5.14.1 # # WARNING! All changes made in this file will be lost! diff --git a/manuskript/ui/views/characterTreeView.py b/manuskript/ui/views/characterTreeView.py index 6997f90..e276529 100644 --- a/manuskript/ui/views/characterTreeView.py +++ b/manuskript/ui/views/characterTreeView.py @@ -130,22 +130,30 @@ class characterTreeView(QTreeWidget): def choseCharacterColor(self): ID = self.currentCharacterID() c = self._model.getCharacterByID(ID) + if c: color = iconColor(c.icon) else: color = Qt.white + self.colorDialog = QColorDialog(color, mainWindow()) color = self.colorDialog.getColor(color) + if color.isValid(): c.setColor(color) mainWindow().updateCharacterColor(ID) + def changeCharacterPOVState(self, state): + ID = self.currentCharacterID() + c = self._model.getCharacterByID(ID) + c.setPOVEnabled(state == Qt.Checked) + mainWindow().updateCharacterPOVState(ID) + def addCharacterInfo(self): self._model.addCharacterInfo(self.currentCharacterID()) def removeCharacterInfo(self): - self._model.removeCharacterInfo(self.currentCharacterID(), - ) + self._model.removeCharacterInfo(self.currentCharacterID()) def currentCharacterID(self): ID = None diff --git a/manuskript/ui/views/propertiesView.py b/manuskript/ui/views/propertiesView.py index 861dc74..2ae088d 100644 --- a/manuskript/ui/views/propertiesView.py +++ b/manuskript/ui/views/propertiesView.py @@ -5,6 +5,7 @@ from PyQt5.QtGui import QIntValidator from manuskript.enums import Outline from manuskript.ui.views.propertiesView_ui import Ui_propertiesView +from manuskript.models.characterPOVModel import characterPOVModel class propertiesView(QWidget, Ui_propertiesView): @@ -14,7 +15,7 @@ class propertiesView(QWidget, Ui_propertiesView): self.txtGoal.setColumn(Outline.setGoal) def setModels(self, mdlOutline, mdlCharacter, mdlLabels, mdlStatus): - self.cmbPOV.setModels(mdlCharacter, mdlOutline) + self.cmbPOV.setModels(characterPOVModel(mdlCharacter), mdlOutline) self.cmbLabel.setModels(mdlLabels, mdlOutline) self.cmbStatus.setModels(mdlStatus, mdlOutline) self.chkCompile.setModel(mdlOutline) From cbb3f90d3d3a298ba0b380b278e462bbf4677f06 Mon Sep 17 00:00:00 2001 From: TheJackiMonster Date: Fri, 19 Feb 2021 16:32:02 +0100 Subject: [PATCH 15/51] Added qt-creator config to gitignore --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index c34333a..7f75726 100644 --- a/.gitignore +++ b/.gitignore @@ -20,3 +20,4 @@ icons/Numix manuskript/pycallgraph.txt snowflake* test-projects +main.pyproject.user From 303c48152e17038c9e6006095aee5620056d0c3d Mon Sep 17 00:00:00 2001 From: TheJackiMonster Date: Fri, 19 Feb 2021 18:02:36 +0100 Subject: [PATCH 16/51] Added qt creator project file for development --- main.pyproject | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 main.pyproject diff --git a/main.pyproject b/main.pyproject new file mode 100644 index 0000000..2cad84e --- /dev/null +++ b/main.pyproject @@ -0,0 +1,3 @@ +{ + "files": ["manuskript/ui/editors/completer.py","manuskript/ui/views/outlineBasics.py","manuskript/ui/exporters/exporter.py","manuskript/tests/models/conftest.py","manuskript/ui/views/textEditView.py","manuskript/ui/revisions.py","manuskript/ui/editors/__init__.py","manuskript/tests/ui/importers/test_importers.py","manuskript/ui/views/outlineDelegates.py","manuskript/ui/exporters/manuskript/plainTextSettings_ui.ui","manuskript/enums.py","manuskript/ui/editors/textFormat_ui.py","manuskript/ui/highlighters/__init__.py","manuskript/converters/pandocConverter.py","manuskript/models/outlineModel.py","manuskript/models/characterPOVModel.py","manuskript/ui/editors/textFormat.py","manuskript/ui/editors/completer_ui.ui","manuskript/ui/settings_ui.py","manuskript/ui/views/storylineView_ui.ui","manuskript/ui/cheatSheet_ui.py","manuskript/ui/search.py","manuskript/settings.py","manuskript/importer/opmlImporter.py","manuskript/ui/views/treeView.py","manuskript/ui/exporters/exporter_ui.ui","manuskript/ui/editors/mainEditor_ui.py","manuskript/converters/markdownConverter.py","manuskript/models/persosProxyModel.py","manuskript/ui/editors/locker_ui.py","manuskript/ui/views/MDEditView.py","manuskript/ui/welcome_ui.py","manuskript/ui/views/propertiesView_ui.py","manuskript/ui/collapsibleGroupBox.py","manuskript/ui/editors/blockUserData.py","manuskript/models/references.py","manuskript/converters/__init__.py","manuskript/ui/views/corkDelegate.py","manuskript/ui/tools/__init__.py","manuskript/ui/style.py","manuskript/ui/tools/frequency_ui.py","manuskript/ui/views/cmbOutlineLabelChoser.py","manuskript/exporter/pandoc/HTML.py","manuskript/ui/views/propertiesView.py","manuskript/exporter/pandoc/outputFormats.py","manuskript/ui/views/sldImportance_ui.py","manuskript/ui/highlighters/MMDHighlighter.py","manuskript/ui/editors/textFormat_ui.ui","manuskript/tests/test_functions.py","manuskript/ui/mainWindow.ui","manuskript/ui/about_ui.py","manuskript/tests/test_settingsWindow.py","manuskript/tests/ui/exporters/__init__.py","manuskript/exporter/manuskript/__init__.py","manuskript/ui/editors/mainEditor.py","manuskript/ui/exporters/manuskript/__init__.py","manuskript/exporter/pandoc/abstractOutput.py","manuskript/tests/ui/test_welcome.py","manuskript/ui/cheatSheet_ui.ui","manuskript/importer/__init__.py","manuskript/ui/exporters/exportersManager.py","manuskript/exporter/pandoc/PDF.py","manuskript/ui/views/metadataView.py","manuskript/importer/markdownImporter.py","manuskript/ui/editors/tabSplitter_ui.py","manuskript/ui/views/cmbOutlineStatusChoser.py","manuskript/ui/editors/completer_ui.py","manuskript/tests/models/test_outlineItem.py","manuskript/ui/search_ui.py","manuskript/ui/views/cmbOutlineCharacterChoser.py","manuskript/load_save/version_1.py","manuskript/ui/search_ui.ui","manuskript/ui/views/plotTreeView.py","manuskript/ui/editors/mainEditor_ui.ui","manuskript/ui/views/PDFViewer.py","manuskript/settingsWindow.py","manuskript/loadSave.py","manuskript/ui/views/lineEditView.py","manuskript/ui/exporters/exportersManager_ui.ui","manuskript/exporter/manuskript/markdown.py","manuskript/importer/pandocImporters.py","manuskript/mainWindow.py","manuskript/ui/importers/generalSettings_ui.ui","manuskript/functions/__init__.py","manuskript/models/abstractItem.py","manuskript/ui/editors/locker.py","manuskript/ui/editors/tabSplitter_ui.ui","manuskript/ui/exporters/__init__.py","manuskript/ui/exporters/exportersManager_ui.py","manuskript/models/__init__.py","manuskript/ui/exporters/manuskript/plainTextSettings.py","manuskript/ui/editors/MDFunctions.py","manuskript/ui/views/sldImportance.py","manuskript/ui/views/basicItemView_ui.ui","manuskript/tests/models/test_references.py","manuskript/exporter/manuskript/HTML.py","manuskript/ui/views/metadataView_ui.ui","manuskript/exporter/__init__.py","manuskript/ui/views/outlineView.py","manuskript/main.py","manuskript/ui/revisions_ui.ui","manuskript/tests/ui/exporters/test_exporters.py","manuskript/ui/views/storylineView_ui.py","manuskript/tests/ui/__init__.py","manuskript/ui/about_ui.ui","manuskript/models/outlineItem.py","manuskript/__init__.py","manuskript/ui/statusLabel.py","manuskript/models/plotModel.py","manuskript/tests/__init__.py","manuskript/ui/views/dndView.py","manuskript/ui/tools/splitDialog.py","manuskript/ui/exporters/exporter_ui.py","manuskript/ui/settings_ui.ui","manuskript/ui/about.py","manuskript/ui/welcome.py","manuskript/ui/importers/importer.py","manuskript/ui/exporters/manuskript/plainTextSettings_ui.py","manuskript/importer/abstractImporter.py","manuskript/ui/views/__init__.py","manuskript/ui/highlighters/markdownEnums.py","manuskript/ui/importers/importer_ui.py","manuskript/ui/tools/frequency_ui.ui","manuskript/ui/helpLabel.py","manuskript/load_save/version_0.py","manuskript/ui/editors/editorWidget_ui.py","manuskript/ui/importers/__init__.py","manuskript/ui/editors/editorWidget.py","manuskript/ui/importers/generalSettings_ui.py","manuskript/functions/spellchecker.py","manuskript/ui/collapsibleGroupBox2.py","manuskript/ui/__init__.py","manuskript/ui/welcome_ui.ui","manuskript/ui/views/propertiesView_ui.ui","manuskript/tests/conftest.py","manuskript/ui/mainWindow.py","manuskript/ui/collapsibleDockWidgets.py","manuskript/ui/editors/tabSplitter.py","manuskript/importer/mindMapImporter.py","manuskript/ui/highlighters/markdownTokenizer.py","manuskript/ui/tools/frequencyAnalyzer.py","manuskript/converters/abstractConverter.py","manuskript/ui/editors/fullScreenEditor.py","manuskript/ui/editors/themes.py","manuskript/ui/views/webView.py","manuskript/load_save/__init__.py","manuskript/ui/views/corkView.py","manuskript/tests/ui/importers/__init__.py","manuskript/ui/editors/editorWidget_ui.ui","manuskript/ui/highlighters/markdownHighlighter.py","manuskript/version.py","manuskript/importer/folderImporter.py","manuskript/ui/views/sldImportance_ui.ui","manuskript/models/plotsProxyModel.py","manuskript/ui/views/storylineView.py","manuskript/models/characterModel.py","manuskript/ui/views/metadataView_ui.py","manuskript/ui/cheatSheet.py","manuskript/ui/views/plotDelegate.py","manuskript/exporter/manuskript/plainText.py","manuskript/ui/editors/locker_ui.ui","manuskript/ui/revisions_ui.py","manuskript/exporter/basic.py","manuskript/ui/highlighters/basicHighlighter.py","manuskript/ui/importers/generalSettings.py","manuskript/ui/views/MDEditCompleter.py","manuskript/exporter/pandoc/abstractPlainText.py","manuskript/ui/views/treeDelegates.py","manuskript/ui/views/chkOutlineCompile.py","manuskript/ui/views/basicItemView_ui.py","manuskript/models/worldModel.py","manuskript/models/abstractModel.py","manuskript/exporter/pandoc/plainText.py","manuskript/ui/views/characterTreeView.py","manuskript/tests/models/__init__.py","manuskript/exporter/pandoc/__init__.py","manuskript/ui/importers/importer_ui.ui","manuskript/ui/views/basicItemView.py","bin/manuskript"] +} From 517559e7faf9964bae2f1c14e4cab0af09d7c77e Mon Sep 17 00:00:00 2001 From: TheJackiMonster Date: Sun, 21 Feb 2021 19:25:51 +0100 Subject: [PATCH 17/51] Updated german translation for new features --- i18n/manuskript_de.qm | Bin 85038 -> 86174 bytes i18n/manuskript_de.ts | 1074 ++++++++++++++++++++++------------------- 2 files changed, 566 insertions(+), 508 deletions(-) diff --git a/i18n/manuskript_de.qm b/i18n/manuskript_de.qm index 4900812a07d937a7829503bb039ff769acd9ca08..55a539c459d34ab4cd3806af4c8dd3679f68d76a 100644 GIT binary patch delta 7932 zcmZ{ocU%-#yT_l|otbU3yB4sbE}~c{qS(8lq6kFH($`zp zUotm4IW6t@{Y)a_`~#*A8$Oh%kCtBzTb|t3Gb|N;B$Xfz#06TyiL1%CiI2+sy z;y;-uF`aY3TukwUsKZ>$V~%MwM7kiNk=Deh%JoE}h7eV}CvrMQG{KC>y@V)fvdHJI zL>?oE0?vqBe_G`JDv{r^jbzk=NKz3+)aU@QlZ%L)ABy}l8FG3Pqq|S+QI;sqKtKJ!@r`OrygSteKUm`_*ZEYme$cniB zX+(9Wh#Rqz$mc6@BYP0}V#0dn&lCB%198p+iN3plFsJWv;@r33f0dDpbP{o%5HP7w zYOo;XuwmEm4ggDq;2$CvYLJZqYB9?4x@*L zlhvkTA_p6?x(t^dUQD*D?1{`8k=>p$V!EbLp9i>)-$4D=B|(a_G{n1th@VL#I9sB< z3FNrCFEMfnId0!U^!6}~oYRNsmz(6&BN@`3Bd3DHM4tXMdYmaS`UU~y-0LgRPc`K1 zSU^l$j+{6963KrulF>5c!Y;(~I&$f`lo;D7JtL%(JBI}iP7--|tjHt3iF~dWS#2k>?xn~t z;(JV^$>hHLEIcQHJVNSOWh5iqBahHy#8{e>X9oy$x|Td+3yI917|BSBX+qCDc+&K! z`U|4N@$}QYv&7hk(@)>vDaqM1aqDnmI)Z2FpWmQ~=avw?IZj>;Vu{k0lGmyBMCtkD zRf_j($B@@$@Q4zbE}tmVn!Hu`f3B~{%xNMIj23xO4eBxA#v0=TMzf5(%iwbTJZTb- z1+qrdq~*BJ|45UvTNCXDzdj+_)s3bE!=vUiB9HW@K#vk)nlGTR0_51q%W26I_(tzr zwCvLqqWey?ypaufo|1o!B*w;^Qe|6+ELdiP*`e zblNj?4pG8d+Os!;=&uD-*eo0gIEju17R6-@!;m;!T%cH73UH zK0RR}@QXBhYMV;rIGnx~))7Sypl_zwz{1;%Uix4dvU(h2(7jh5Km0^ zLyT*);Y80Q%-C)aFljln;(RbF%1I_?1uDdZcq17yX9~;hp_!A+@t*N8MGz07pogGZ*uk$ecHzS;KQ)sOo`;`M54jR zCFPu)w)-l6zxqiLMNjR9%`% z6m~%J{=yA-{~}3UaWT=fYf_1eH}c9$sm9_PF?_MKfz*{qf5$}HaIrHIwL)rLKj8Xa zsg1P<*h*?QVIa{MowV!EImEP%m)b}95#^qdx;R6CmW5J}A)}CRI!QhEB5!blbi%%- zL5qF{UJi5b}8t5ec*9j6dYG?SJd>VQNaFa5*v z2GNK6(wmJt5pCZoy=5XL+F2mI)#g0Wp;ppoPMPrjDCvt1spupcN#B?!A*^q)l13*G z{|y?m+_`!iC9=(b--Wh=V=eE55hK~e+HF8WZxqE2-`)Tn!zOmbo(jC^&AL`XfIBYi z)b)Fa9*kk9xw%0TuUH=mRC;_X8#-qeQu-h^bh|Av(s%4kSD5&`gq>|yuaPHg#1%wY zr)qYNuO9L3=gKahbqejwL3UM&2J!zF8x!`H7_;l(2Vz>WU>(>4{0vS9zk(atm~aBm zffBF|kE4}cD_3_8p6iqBEyba&u)l4Lo|9RyJ-|sbBvDNs`tW!7!P(^ z$a=)L1N&QS2s$|{_P3j>asPweAqC$ZVAGGHQM+-H&FJYx6x$LsfKF^i65e-x$7XuM zM7O)LSx0ta!Jce({9U54{lWX-OzE5v$LRe}apycz}2u=LqX;ZcUAmj4YMS+2V`)lWa~ly2;boBLDcr?sJSn+^%I06|_f3=*u4N1)JwQU<>6Z ziBSf!M^$+5r(JB(7Dtrber!?k0-`DX*z;i+_t=j;UzrEzRI{b8cOV7-!CwA3iRh^Q z3wwnS=l#F4SNcMg-bdM6ox!uu*;}XJOp>MSgT5z-Oaj?gU6g3lx`Pf#98K7ot&xc5 z0QPO11i8GL{WxeBG3^-k>$#igw^&ZPC>ANb4JSS5LiD8>$JQ@cF5yfYwnmSAg)_Ho zhxk`E;5w{ULcIl%-{xl8i-y$ z6!~>LH!`{u-fqc_3&MszWN@B2A&8>CxCti^RsC|fkXKlTo5F?Ed_wL|=R)2zMg04< zHeOKDpIqn`KcaxoT0S%_*a+|KeG$|vw&CBw^MO^ZwnR;RxWN}*) z&Ju-p=e8}wLhkw8c30RqZ7i4Z4XWb~a#^jHqaP^acCW#XxLgq9+cp)M?jrKQ-}e{B zi}&Ad8_B3^xEu*gkzT>=JqzA&=W?6wAgapca^3aUh-OXT_8pEQ>U*EtA2JBew4b{c zl7OAman~&&IoprB)xQTCiKEd?$yL-BBd+$s(LrkzO7tUXQX25 z$6U2t465f+?)673n7E#oPE#P^jOMvFaP|Z<-ZVT4Ewh|&qW6O;c3<(NL1*~TgGFcg*D$L3aYGV!rSdeHMH-`_i6VXs_n`<#J~wdUl_@-vAo0m zR;YgKc&9QrY4g*(a}>h*T}R%XC}rV^>*OHv=BU6!p~~m8X9}f zN31c!LC%Sv&nRJnX8e2&G_`&_zko*ymiN{3i=UMfDXxnAHAiHTC%?k_J{pZ_eC&1z zCSAoR9)j~7>&|bPoI*73B%ks-GFp>g_*B()qDM{mZA+e_^*X_)``BW~Px*{G)RuX( z`I42;+-67qf}JUxJ5J>KH6kDAfAAM?!5N;k=WnIJ1Z$u170X8v4M^l4*7YUIu;U;7 zj`+?9<)4?0hx17JS6x$K^H~1XS_qWj&R46hp(ttjw{hKw1`XvunPWpqYQ8oG;d#}Y z|N2WF(E>~UyAPiCYAE9?H=}x%7|G~KFH;qbBBteKS;G=IPrDg1ix+Ul-2-KvMj}!0 z(`0r5NyM~xE$h1Y4>)DE%rUV$(MvO#Yi=O~tC59gp~ZTbAd4t+LY$k(BCcFV>(y5_ z&#f6U;Vaq7E6ZSF2U*p^;F(Z7Qbf;QP1DCOQgFhORVe6qYV zPLQs0-;aCIvAmE6O-I8}+(^E-TVw2On#h9>MgEu}UtIAV0(X?hY&4)IB*@o1hHuRG zm&e`q!cnzU9#5cQt$bZx4K}z|o?4y*%|4KC`>+L?J1pO>_rXrXx69KzVu1}_@_e^2 zqCcYLC%!;{VGHD^-z`QLyhL8o0VX+jPF{NGCc-9MURs2BPG2a$uz5M!>ap_c!(j6Z zN_p+i^N3bu$?MAB;jns3!JfAz`q4H!15*|3F zu&RYqJwK%w)E62l8>esy{ElvSugD3`B7ZzkxSzicXWXdxsb3}0>~4xFF<3aLxyX&K zBCnN;{OGF)Y~2^W@tY#T8i!czTE$!ef-DSF%s++Bs)2=GvC0JD7V589wGOpF*-jDP z(UmAp_ zl3DuYncR6Zx?y|eZ%-b> zN9HNBmcjOyhbgn_KQy#;HIm^TD|4(@5)EuAvU0Ans5dk^d!NWBSw=FNmdesY$oq$&89 z$jVo$xLwPUh^D9#rtgL``l;6TK!)r*QnjJ=3nZWss!dOk5p9xG$qk^9+0m-434h=l zQju!ABQ))hugY-7{hqg~41IYLB+ON1ukC?&FI43wMRj zZ%)Oze}wAt7bU!Szv_Ch0}{*-)%7eljN79sFGpKFSgxv=hm2_XQB^l#8$PwftG+JR z5IyZIXk*if(Ip5bR-lP=7rN`piB7%}`dz#S+bj?UOwUJn zRSOPr(9G=jf@9))EHp=OJsW{9B3Xjl8|)163ro%2iCUc33oE3tnCO(SI&A=s*=vN=**kFF zUnIov2BLzfzj<0@p;F}Cu|_gx>x4K3qULHdVO<5PWEZ)xeisD4wprMy#WB0v0%7A^ z2=;lLurYTDm?mstu+g@wh2+S+NbP!D{Mrm%Y?+XJa~gKuM@Z=aN$vRd%mY7y*vT{-@F3_99s-kvi-p&4vUw=nb})mt z#|SU0;WG{Mg}SX@ab`R#eBS#VVYo*4ystIN?-@0HutV=SOwBEM0^e$8%H>-^o^dv;B)Y%d>{7tQ%?}fuJdq^f(Qx)KQm z>Rxx!(b*KJd-ocMQ|$ruu!#sy_m1E@a0ZC8p@*Oz<|PF^)J}(SIJH`)9^Je(ith@w zZ_ahZ|F16U;ND0iWmnWIs#c;$8>@~P+Z5rnK%G(nf%^7QXC}Mh9N?wi)p9ewaBdTM zbdt!&C)B&HO(ANNtj^2tguWnDozG*(t7Ph;)F`xaL)1m*`r`{}iOBeAB5$ccJ^pyz zOnmUZM19A{1mAr8)Q{I-A-@>)yMQ}{60ZLI2rB;jEotisi=T6uTIs}%z*7%jL^KkSP0X;)4Wgd!SVis zM*lv=7w7qITIC_wx{HIh@s|_G?bo!;vTJZYPt>-)gZK{e)au-t;|$nJ+qD%`np&yt zw-!55{?HB>2Z7TV?ZE38=bxn=Y7eJPU8)^A7bffRT07PrhWr?a#R!(GuO_tq|+ zWxVP`A9XkT-1#tSjpcl85?%-4R+9!pH)CfXmtCg|VO zgYlKoK2Oq87|b*?XuX>mmeeRTYRgeGXN5;Zo&D|1k~0~GtAQqYZr*RCoC#Udkc~_1 znC5E1(rs2~@V`eapIXjZH>0sMhCE3}0Te-@X!N`x==Xz*S}}*UN*XwZccDikS^FLht4NTH!nOoLKi+KOcxOxIm7ts z?PXc!j@Iz!0175Q3aVd*Y^V!OppRHQs(vcmdr>9+3$4HVM~H?FK|T>(CWJ@$>m0(P z!=eHVK1Gf5^y$qRMd$y#V3_={MSE;yCT5TN=S@@NcwOWyAHRS|olm6BFUZF*JJTd@ z)6P*1q@Bsqz`SZ|&=i>EnI2M0q`mQ=fpt^$e+g+&7qnD0a0?2zoKydLgyG@FW`^|} zhZy{hwEh3zP}jd9zM%87G=v{1S9|`w`9N$=SHG~24#I{(=>J*|_tALjPs;yNP5n5Z ze_5uzasF8m;einWk&(LKFr#phy0Cz`QA%A@xNZ*gWiUU~IB!(JOEqI@*j-{_;X{G{ z=%$IKLwH0)fL~N_c$m&DIxsLGvi{QWro@!#h|yhzrvDmYs4OwhvoCqsylK<%0kcA( zPo0g8jc9hG;~Ba>a%uL@f3~)^|N1Y(z}#(-x98D(la{@yBQ2ms|7+8oppvv|GlN&H zO5392f<@wPI_Yp_2&&cPb@*7$7zWgKWVL@k2{8G;=J{uL^8ZXBgBL4j`UHm!_YaN= fk6=&@sLB8JD(U`tS@EBjb%yFsWAj$mX1M(iJxGOr delta 7155 zcmYkB30zHS{Qtk_-gC~~&b`+bjU|P$RTzWpyD-&|5@icfscf0S4414eif%%(SE3Y3 zDW$zRUC2dq7CpDHsNwo@-iA8N2(h4ekP`5Gf`TXSEkh z#Vhc9=jC|M1H1YgJAg=v361v|d+U7?> z&(UBN3H|DcPO2EwdB#)rjL)w#zA9xb-@{mKSkDeVdog}#(nwC%j)Xx6h^kMLFlGah zXATKt`w-2xVmvX8@zW0^I1C}G9SVNLbpr`5G4SYH#_vufOooBRvy7*1GroYq4Zj=8 z0&oydoJAQ4OXm`KRg++hAkH$AglL>UI>h)gkc4D>ATWaQ;0wkpS&WZvHj-02GFmkw z;q)n@izt6N2~QJ=3QS0Nxt<2njiscjlZdl@Pr8`#M4O{Y_Zezc%prX& z#525txEpsG}4y37edmb zFO%&i#7Em^)brQ_;%to6{|U~w?4*I)qF}~;8tzd-B>I#6<^jaXKa&0aLqu1LO1WjAb1ds~<6bW)E_@U&v)00(oW2!CVmDh~7yg`3U;?#lU@c>dAIGLu2_&|IaOc$B!c|GcY+XTkC z=3I7hZ=%D~xj*}c!|@qh4&j5Vthw`#kK+Rmxq{SSNU$w;*AMS;61a+r7pN7N7&ql} z?~+q6<5kscZlo$mu$>R%(!iH+0?>nqTRN#83R$!?pVs^ zFV2IZRWfe`A-(P{Tlr5hanwV$+8Z9ce^9nLc`?#)itIpZD8O!r?C`P*cxIUFaC9z0 z|9~tbBp$)tA2i_L=^@#f32@1q*RnJ7Frv{i*_rztQQ9*`o=zMAt23Z?2=r1^CK7UcC#AFO=2fUtnvBA-M&3Jc4pDNv+|dCBw8@sc z4j)I9bXh(*1=)e>pZ#z%)-Ao_VEzjGWC?dJP@tUJzwwfsKc?FipK z{J{`kLVf2C-rJ1x_xvF_SQ*F1ok6!{xE0GM^mWGrD?lTd$R|YM1x}~*3cXfQ? z>3Dpw3!fDJkm#3s@G;SZ9^g}O7Wfai4SWV(0H1?ZAi`~8C$JQB1z&<2!4E{vy}&AD zeCOFX_=q2jU=5fHeg&(+Z$y)9H#Hsul z4IZ4bfX|JwM-jE*bMt;jV*SSF2jIRESH7U~5EAJ*zVKHh+S4WcO+pwCs^@PGfCoKR z@kQOhb65GIbI^`#E&pTy#Moj!U*1EFE~_tS7>UH7jv{xrcbZB*<5V5JgxB@>7mPpVb22@WG-df=N>|bjTM33#(2<>Lx>Spn2-Dopgo zh~DoMCMWwMT%HSVIS8MD$%1b=M9WPOeBXXXPM;?DzC%8k{glyICiun7LHBi5@VmGe ziD`(iw0J%|Y$2@LhVQjHFRU^`b9zxQu8{;oq?r&J3sHAmEQFqYN0j?b2uuEn$nR|< zIm#Ep&W0mXy9?V@@Zdg2VdqWENbFc)S5P{*O4xnfA8kyG5F2q33Gt1vF9_dp`Bm8O zgqhv@R!H~;#|fu|M6-3M=?{gYp}w&H0C*7^?9i(5fDV*1rqnWC>A_f&-$+jNR7jR# zCJz1~q+A4V^%7EB9U^*lKuC4DO|(ca9M23S8t_;+;X4!(IwaiojUe(rA>6To;ru|M zXiy(C151S`+2}$JCkbWh)zILIQlWh6GEAY9P+oDA=$Jux(+!!n%Uz+OXE18bQlat_ zKDcd%D4(T5o*66(?;!GUGtp#WAaUlkV#_)3M52$_G7X-;aZhaL@{wqdLA1<`B+Be3 zT7~1j_GV&_KzOpaO6++QHLi!X*uRsZ9ujtqtd{SGveqd&xvkK3WRtrN#TfJRNy zM2A3xb7gDMu{)3Su$u8}jOc8ECC4jE(Pdcx(f9-6tmQfs%@onE=?qN$3DJKjw0X@- z^bfxa18o^oXEL5>EBYH6F5EU{Kh)HV{*l4Rv}!Rx56c6y#YJXjaM^xwNoZTF!Ul;e zIW^IN3~{9no{Dl2e;1K?d24a?%VHwcEyl1E#`FEf_12HkJ~)dZ`*qOt3NbPR+RJJs z#!TM>&;KSG_FO_DYq?R}x26=~y+(}lw8cpO787b3rlzZSc>`RwbDVg!rwK&u#2B@O z@zDbDS`jqxq?K5-2dIH6d|ERAHR^`=&m}~4oLYSKz!_EdsaW0%;#7x- zqte9kq1o&97;bsu# zSWtu&?tlw-Fy@|T{M%F!ek_KlZ@yxCWChU&Gez{UJkY2(lrtJr)k=}L8U|`QE0VYZ zoR=w5FHa)Qpt-3yK1)rUvQBZr;Vn^Jt>VvR3y2)E6&H@rKy|KCT-=PRZ04i5@+879#@IFxGHWQ!bn~|Q53hUMOYqDyj1PSD(|bJ;w{9yJwZ_wo{mJfT=A(i4op$h zm{$`0HcU~UX^+fZsrVi-i42@@RVlO3BVH?&@;qO(cv(tor)I=;KCA3)qDA%1SN8k* z9O3j2)9d0 z?|Enw&Q~i}|JWP@>%e&OVgn(vuhW&QOJ2d^Zpz>tMwEoL%Ft&J$;!6Mu)p20&OEFP zConQnxh)MIdK{#T+=LW9?}Ku0aWY(dOS!K)hB(y`<$h0$c;OUfTo-(3`!r?xqyVC; z&dQvxFl5v!<@u`BnBuj{%bhVbc}dEGjKTL1KAy^gT*URk*2=59)}d>5R^Azfxxf6c z^2@I)h&Ihq))ZG^#d$@==i9v0 zKQ%$BB{&ePd)d&p({3P*5d$7KgF2Qgz;q@V_6d8n^ugU?l68XV*IkX zk(_R;+AFyQ`lQL~1*7t?>{+7rTUL!ubE7&y@s`N?fO=sE82GrKdR1ZVm#WZmu?t7)WGgqu!;Nhu?kFySwc|&ughZ`1~0(vOt{}gt@>$pTs z*jN+rLn96J^sy%F$U3B#37Uv`M-hx|G+X;1?^zAdM4OdC8g`nUrEhV4qh@y#40y4P zCN|;*c6D+!`|aV#k*72X4meNRs!1r0f?=teq^*4ryk|A3yO$vbXK2#i;QXA4=C7$G zSP_S4uHBo7CAyua@T(eH{4+{($7dw6hMDG0;w0R-Ra3G8>8-;nO^w?=Y<`4m>elJ7 z#BM9;L*gLrwNeXbwBARmr5+EFXM03Qyk7WL`{k_J%a@+9P<}Um83w9YGT> zjSPcF7AH&gkstAXcggAE5^Pa~N|W9hFoMuJ$^ASSdt7qA)(MM>5z_2e1w@w)OFly( zcAwkQq6InFJWxqX#^FVm?WI*mk#&B0C9Sn^!Jcuxv|b*9_gs)R9~g`k@fK-w(jhF# z7fQjRktoCMKgRvX3dZ|3Qm_FxaHi{|FcpH~dbPBz1hubQt+f3JEHC_3+M&mi*w$a# zu^fhd8Y%5aT>~1W7!D)tuvyx@G==EG0%`XaQ*@+PrQP>tVdUMVJ)L3bgI?0%W7}Z( z2I=q>Ja6$cqvu%0WA>7v;R4q_OG+&az((Xr>7+G>M7>hV+HOhIzk`&0q9clLd+7|f z6lr5VW9(zbtgDQFJ4pEr?aHx_($#-YqL*I_rh%tH3}j{{cnWI+D=-6`E?vvMjg7X0 z-qPPA+d|!;((4L{MVlbi#MWWqcS@>FsYi5$O0~z$P)pOb!kXt0Q%kMl_C1983#}># zuHC6;d@@a|Hn$~edQhuf>5k=7Q?0%RCG6WLZL11oUd2b_Ow(3V7i;bM4Z-p=P&;ZW zVs6rFunL{G4TwdY%MI-)cR3bit+eAav5M>*sQvi|GnC8q+S$o>uz&cA*2fMxpy-%( z{hJMFu9|6sC$vJS_!|pNTN;iBX^*tog{9R{#**XOBe!P|wco8xOYcgYFhiRz_Qc-N zU)tQgf#|u0Yjdv*!Zu_ubTn_E{+2Kj&v{mDhc=R2Q_h z|GNeU$!5J7$P&A;X#`KIbklip$n*hO!4ACc;< z)0W+}ze>$%5BEn6z;ATIAV_NpFnT(XKSL2=O48;-gxoj|6aAVwf%or6B@3j{aCuPMOwSsV$OKBZjkZw U*DiA1@2ia8YRuEV)Fn*%AFsC0`v3p{ diff --git a/i18n/manuskript_de.ts b/i18n/manuskript_de.ts index b0a1196..ea3953d 100644 --- a/i18n/manuskript_de.ts +++ b/i18n/manuskript_de.ts @@ -1,5 +1,6 @@ - + + Export @@ -53,82 +54,82 @@ LaTeX muss installiert sein. - + Error Fehler - + Standalone document (not just a fragment) Eigenständiges Dokument (nicht nur ein Fragment) - + Include a table of contents. Erzeuge ein Inhaltsverzeichnis. - + Number of sections level to include in TOC: Anzahl der Ebenen im Inhaltsverzeichnis: - + Typographically correct output Typographisch korrekte Ausgabe - + Normalize the document (cleaner) Automatische Bereinigung des Dokuments - + Specify the base level for headers: Lege die Basisebene für Überschriften fest: - + Use reference-style links instead of inline links Verwende Referenz-Verweise, anstatt Inline-Verweise - + Use ATX-style headers Verwende ATX-Headers - + Self-contained HTML files, with no dependencies Eigenständige HTML-Dateien, ohne Abhängigkeiten - + Use <q> tags for quotes in HTML Nutzt <p>-Tags für Zitate in HTML - + LaTeX engine used to produce the PDF. LaTeX-Engine wird für Erzeugung des PDFs genutzt. - + Paper size: Seitengröße: - + Font size: Schriftgröße: - + Class: Klasse: - + Line spacing: Zeilenabstand: @@ -208,14 +209,14 @@ interpretiert werden können, wie zum Beispiel <a href='www.fountain.io& durchsucht oder kontrolliert werden können. - + Disable YAML metadata block. Use that if you get YAML related error. Entfernt den YAML-Metadaten-Block. Nutze das, wenn du YAML-Errors bekommst. - + Convert to ePUB3 Konvertierung nach ePUB3 @@ -227,8 +228,8 @@ Nutze das, wenn du YAML-Errors bekommst. {} - - Choose output file… + + Choose output file… Ausgabe-Datei wählen… @@ -336,12 +337,12 @@ Nutze das, wenn du YAML-Errors bekommst. Import - + Markdown import Markdown-Import - + <b>Info:</b> A very simple parser that will go through a markdown document and create items for each titles.<br/>&nbsp; @@ -350,12 +351,12 @@ Nutze das, wenn du YAML-Errors bekommst. für jeden Titel eigene Einträge anlegt.<br/>&nbsp; - + Folder import Ordnerimport - + <p><b>Info:</b> Imports a whole directory structure. Folders are added as folders, and plaintext documents within (you chose which ones by extension) @@ -368,47 +369,47 @@ Nutze das, wenn du YAML-Errors bekommst. <p>Es werden nur Textdateien unterstützt (keine Bilder, Binärdateien oder andere).</p> - + Include only those extensions: Nur diese Dateinamenerweiterungen hinzufügen: - + Comma separated values Komma-getrennte Werte - + Sort items by name Elemente nach Namen sortieren - + Import folder then files Erst Ordner, danach Dateien importieren - + OPML Import OPML importieren - + File open failed. Öffnen der Datei fehlgeschlagen. - + This does not appear to be a valid OPML file. Dies scheint keine gültige OPML-Datei zu sein. - + Pandoc import Pandoc importieren - + <b>Info:</b> Manuskript can import from <b>markdown</b> or <b>OPML</b>. Pandoc will convert your document to either (see option below), and @@ -423,17 +424,17 @@ Nutze das, wenn du YAML-Errors bekommst. <br/>&nbsp; - + Import using: Importieren mit: - + Wrap lines: Zeilenumbruch: - + <p>Should pandoc create cosmetic / non-semantic line-breaks?</p><p> <b>auto</b>: wraps at 72 characters.<br> @@ -447,27 +448,27 @@ Nutze das, wenn du YAML-Errors bekommst. <b>preserve</b>: versucht, Umbrüche aus dem Originaldokument zu erhalten.</p> - + Mind Map Import Mind Map importieren - + This does not appear to be a valid Mind Map file. Dies scheint keine gültige Mind Map-Datei zu sein. - + Mind Map import Mind Map importieren - + Import tip as: Hinweis importieren als: - + Untitled Ohne Titel @@ -483,7 +484,7 @@ Nutze das, wenn du YAML-Errors bekommst. MainWindow - + General Allgemein @@ -523,7 +524,7 @@ Nutze das, wenn du YAML-Errors bekommst. Autor - + Name Name @@ -533,7 +534,7 @@ Nutze das, wenn du YAML-Errors bekommst. Email - + Summary Zusammenfassung @@ -543,7 +544,7 @@ Nutze das, wenn du YAML-Errors bekommst. Situation: - + Summary: Zusammenfassung: @@ -553,17 +554,17 @@ Nutze das, wenn du YAML-Errors bekommst. Ein Satz - + One paragraph Ein Absatz - + One page Eine Seite - + Full Ausführlich @@ -593,7 +594,7 @@ Nutze das, wenn du YAML-Errors bekommst. Ausführliche Zusammenfassung - + Next Weiter @@ -613,312 +614,312 @@ Nutze das, wenn du YAML-Errors bekommst. Namen - + Filter Filter - + Basic info Basisinformationen - + Importance Bedeutung - + Motivation Motivation - + Goal Ziel - + Conflict Konflikt - + Epiphany Schicksal - + <html><head/><body><p align="right">One sentence<br/>summary</p></body></html> <html><head/><body><p align="right">Handlung aus Sicht<br/>des Charakters<br/>in einem Satz</p></body></html> - + <html><head/><body><p align="right">One paragraph<br/>summary</p></body></html> <html><head/><body><p align="right">Handlung aus Sicht<br/>des Charakters<br/>in einem Absatz</p></body></html> - + Notes Notizen - + Detailed info Details - + Plots Handlungsstränge - + Plot Handlungsstrang - + Character(s) Charakter(e) - + Description Beschreibung - + Result Lösung - + Resolution steps Lösungsschritte - + World Welt - + Populates with empty data Wird mit leeren Daten aufgefüllt - + More Mehr - + Source of passion Quelle der Leidenschaft - + Source of conflict Quelle des Konflikts - + Outline Struktur - + Editor Textverarbeitung - + Debug Debug - + FlatData Projektdaten - + Persos Charaktere - + Labels Labels - + &File &Datei - + &Recent &Zuletzt verwendet - + &Help &Hilfe - + &Tools &Werkzeuge - + &Edit &Bearbeiten - + &View &Ansicht - + &Mode &Modus - + &Cheat sheet &Spickzettel - + Sea&rch Su&che - + &Navigation &Navigation - + &Open &Öffnen - + Ctrl+O Strg+O - + &Save &Speichern - + Ctrl+S Strg+S - + Sa&ve as... Sp&eichern als ... - + Ctrl+Shift+S Strg+Shift+S - + &Quit &Schließen - + Ctrl+Q Strg+Q - + &Show help texts &Zeige Hilfetext - + Ctrl+Shift+B Strg+Shift+B - + &Spellcheck &Rechtschreibprüfung - + F9 F9 - + &Labels... &Labels... - + &Status... &Status ... - + Tree Baum - + &Simple &Einfach - + &Fiction &Fiktionaler Text - + Index cards Karteikarten - + S&ettings E&instellungen - + F8 F8 - + &Close project &Projekt schließen - + Co&mpile Ko&mpilieren - + F6 F6 - + &Frequency Analyzer &Häufigkeitsanalyse @@ -928,563 +929,568 @@ Nutze das, wenn du YAML-Errors bekommst. Buchinformationen - + &About &Über - + About Manuskript Über Manuskript - + Manuskript Manuskript - + Project {} saved. Projekt {} gespeichert. - + WARNING: Project {} not saved. WARNUNG: Projekt {} nicht gespeichert. - + Project {} loaded. Projekt {} geladen. - + Project {} loaded with some errors: Projekt {} mit einigen Fehlern geladen: - + * {} wasn't found in project file. * {} konnte in der Projektdatei nicht gefunden werden. - + Project {} loaded with some errors. Projekt {} wurde mit einigen Fehlern geladen. - + (~{} pages) (~{} Seiten) - + Words: {}{} Wörter: {}{} - + Book summary Buchzusammenfassung - + Project tree Projektbaum - + Metadata Metadaten - + Story line Handlung - + Enter information about your book, and yourself. Gib Informationen über dein Buch und dich ein. - + The basic situation, in the form of a 'What if...?' question. Ex: 'What if the most dangerous evil wizard wasn't able to kill a baby?' (Harry Potter) Die Ausgangssituation, in Form von 'Was wäre wenn ...?" Fragen. Beispiel: "Was wäre wenn der gefährlichste böse Zauberer nicht einmal ein Baby töten könnte?" (Harry Potter) - + Take time to think about a one sentence (~50 words) summary of your book. Then expand it to a paragraph, then to a page, then to a full summary. Nehmen Sie sich Zeit, sich einen Satz auszudenken (~15 Wörter), der Ihr Buch zusammenfasst. Dann erweitern Sie ihn zu einem Absatz, dann zu einer ganzen Seite und abschließend zu einer ausführlichen Zusammenfassung. - + Create your characters. Erschaffen Sie Ihre Charaktere. - + Develop plots. Entwickle Handlungsstränge. - + Build worlds. Create hierarchy of broad categories down to specific details. Erbaue Welten. Erstelle Hierachien breitgefächterter Kategorien, bis hin zu spezifischen Details. - + Create the outline of your masterpiece. Arbeiten Sie die Struktur Ihres Meisterwerks aus. - + Write. Schreibe. - + Debug info. Sometimes useful. Debuginformationen. Manchmal hilfreich. - + Dictionary Wörterbuch - + Nothing Keine - + POV Perspektive - + Label Label - + Progress Fortschritt - + Compile Kompiliere - + Icon color Iconfarbe - + Text color Textfarbe - + Background color Hintergrundfarbe - + Icon Icon - + Text Text - + Background Hintergrund - + Border Rahmen - + Corner Ecke - + Add plot step Füge Handlungsschritt hinzu (Strg+Enter) - - &Import… - &Importieren … + + &Import… + &Importieren - + F7 F7 - + &Copy &Kopieren - + Ctrl+C Strg+C - + C&ut A&usschneiden - + Ctrl+X Strg+X - + &Paste &Einfügen - + Ctrl+V Strg+V - - &Split… - &Aufteilen … + + &Split… + &Aufteilen - + Ctrl+Shift+K Strg+Umschalt+K - + Sp&lit at cursor Am Mauszeiger aufteilen - + Ctrl+K Strg+K - + Ctrl+M Strg+M - + Ctrl+D Strg+D - + Del Löschen - + &Move Up &Nach oben - + Ctrl+Shift+Up Strg ➕ Umschalttaste ➕ Aufwärts - + M&ove Down N&ach unten - + Ctrl+Shift+Down Strg+Umschalt+Abwärts - + Dupl&icate Dupl&izieren - + &Delete &Löschen - + &Rename &Umbenennen - + F2 F2 - + Organi&ze Verwal&ten - + M&erge Zusamm&enführen - + &Format &Formatieren - + &Header Übersc&hrift - + &Level 1 (setext) &Level 1 (setext) - + Ctrl+Alt+1 Strg+Alt+1 - + Level &2 Level &2 - + Ctrl+Alt+2 Strg+Alt+2 - + Level &1 (atx) Level &1 (atx) - + Ctrl+1 Strg+1 - + L&evel 2 L&evel 2 - + Ctrl+2 Strg+2 - + Level &3 Level &3 - + Ctrl+3 Strg+3 - + Level &4 Level &4 - + Ctrl+4 Strg+4 - + Level &5 Level &5 - + Ctrl+5 Ctrl+5 - + Level &6 Level &6 - + Ctrl+6 Strg+6 - + &Bold &Fett - + Ctrl+B Strg+B - + &Italic &Kursiv - + Ctrl+I Strg+I - + &Strike Durchge&strichen - + &Verbatim &Wörtlich - + Su&perscript H&ochgestellt - + Ctrl++ Strg++ - + Subsc&ript &Tiefgestellt - + Ctrl+- Strg+- - + Co&mment block Ko&mmentarblock - + Ctrl+Shift+C Strg+Umschalt+C - + Clear &formats Formatierungen &löschen - + Ctrl+0 Strg+0 - + &Comment line(s) &Kommentarzeile(n) - + &Ordered list Ge&ordnete Liste - + &Unordered list &Ungeordnete Liste - + B&lockquote &Blockzitat - + Remove selected plot step(s) Ausgewählte Plot-Schritt(e) entfernen - + The file {} does not exist. Has it been moved or deleted? Die Datei {} existiert nicht. Wurde sie verschoben oder gelöscht? - + Install {}{} to use spellcheck Installlieren Sie {}{}, für eine Rechtschreibprüfung - + {} has no installed dictionaries Für {} sind keine Wörterbücher installiert - + {}{} is not installed {}{} ist nicht installiert - + Save project? Projekt speichern? - + Save changes to project "{}" before closing? Änderungen an Projekt "{}" vor dem Schließen speichern? - + Your changes will be lost if you don't save them. Wenn Sie nicht speichern, gehen Ihre Änderungen verloren. - + PyQt / Qt versions 5.11 and 5.12 are known to cause a crash which might result in a loss of data. Es ist bekannt, dass PyQt / Qt in den Versionen 5.11 und 5.12 Abstürze verursacht, wodurch Daten verloren gehen könnten. - + PyQt {} and Qt {} are in use. Sie verwenden PyQt {} und Qt {}. - + Proceed with import at your own risk - Wenn Sie fortfahren, könnte das einen Absturz und Datenverlust zur Folge haben + Wenn Sie fortfahren, könnte das einen Absturz und/oder Datenverlust zur Folge haben + + + + Allow POV + POV erlauben @@ -1500,7 +1506,7 @@ Nutze das, wenn du YAML-Errors bekommst. Allgemein - + Revisions Revisionen @@ -1510,17 +1516,17 @@ Nutze das, wenn du YAML-Errors bekommst. Ansichten - + Labels Labels - + Status Status - + Fullscreen Vollbildmodus @@ -1535,658 +1541,695 @@ Nutze das, wenn du YAML-Errors bekommst. Anwendungseinstellungen - + Loading Laden - + Automatically load last project on startup Läd automatisch das letzte Projekt beim Start - + Saving Speichern - + Automatically save every Speichert automatisch alle - + minutes. Minuten. - + If no changes during Speichert, wenn keine Änderungen in den letzten - + seconds. Sekunden. - + Save on project close Projekt beim Schließen speichern - + <html><head/><body><p>If you check this option, your project will be saved as one single file. Easier to copy or backup, but does not allow collaborative editing, or versioning.<br/>If this is unchecked, your project will be saved as a folder containing many small files.</p></body></html> <html><head/><body><p>Wenn Sie diese Option auswählen, wird das Projekt in einer einzigen Datei gespeichert. Es ist dann leichter zu kopieren oder zu sichern, aber nicht für gemeinsame Bearbeitung oder Versionierung geeignet.<br/>Wenn Sie diese Option nicht auswählen, wird das Projekt in einem Ordner mit vielen kleinen einzelnen Dateien gespeichert.</p></body></html> - + Save to one single file In einer Datei speichern - + Revisions are a way to keep track of modifications. For each text item, it stores any changes you make to the main text, allowing you to see and restoring previous versions. Revisionen sind ein Weg, um die Bearbeitung zu dokumentieren. Für jedes Element werden die Änderungen im Haupttext nachgehalten und erlauben es, sich diese anzusehen oder alte Versionen wiederherzustellen. - + Keep revisions Revisionen aufbewahren - + S&mart remove &Archivierung - + Keep: Behalte: - + Smart remove allows you to keep only a certain number of revisions. It is strongly recommended to use it, lest you file will becomes full of thousands of insignificant changes. Die Archivierung erlaubt es, nur eine geringe Anzahl von Revisionen vorzuhalten. Es wird ausdrücklich empfohlen, sie zu nutzen, damit das Projekt nicht mit tausenden von unwichtigen Änderungen gefüllt wird. - + revisions per day for the last month Revisionen pro Tag im letzten Monat - + revisions per minute for the last 10 minutes Revisionen pro Minute in den letzten 10 Minuten - + revisions per hour for the last day Revisionen pro Stunde am letzten Tag - + revisions per 10 minutes for the last hour Revisionen pro 10 Minuten in der letzten Stunde - + revisions per week till the end of time Revisionen pro Woche - + Views settings Ansicht - Einstellungen - + Tree Baum - + Colors Farben - + Icon color: Iconfarbe: - + Nothing Keine - + POV POV - + Label Label - + Progress Fortschritt - + Compile Kompilieren - + Text color: Textfarbe: - + Background color: Hintergrundfarbe: - + Folders Ordner - + Show ite&m count Zeige Anzahl enthaltener &Dateien - + Show summary Zeige Inhaltsangabe - + &Nothing &Nichts - + Text Text - + Outline Reißbrett - + Visible columns Sichtbare Spalten - + Goal Ziel - + Word count Wortanzahl - + Percentage Prozentsatz - + Title Titel - + Index cards Karteikarten - + Item colors Farben - + Border color: Rahmenfarbe: - + Corner color: Eckenfarbe: - + Background Hintergrund - + Color: Farbe: - + Ctrl+S Strg+S - + Image: Bild: - + Text editor Texteditor - + Font Schrift - + Family: Schriftart: - + Size: Größe: - + Misspelled: Rechtschreibprüfung: - + Background: Hintergrund: - + Paragraphs Absätze - + Line spacing: Zeilenabstand: - + Single Einfach - + 1.5 lines 1,5 Zeilen - + Double Doppelt - + Proportional Proportional - + % % - + Tab width: Tabulator: - + px pt - + Indent 1st line Einzug der ersten Zeile - + Spacing: Abstand: - + New Neu - + Edit Ändern - + Delete Löschen - + Theme name: Themenname: - + Apply Anwenden - + Cancel Abbrechen - + Window Background Fensterhintergrund - + Text Background Texthintergrund - + Text Options Textoptionen - + Paragraph Options Absatzoptionen - + Type: Typ: - + No Image Kein Bild - + Tiled Gekachelt - + Centered Zentriert - + Stretched Gestreckt - + Scaled Skaliert - + Zoomed Zoom - + Opacity: Deckkraft: - + Position: Position: - + Left Links - + Center Zentriert - + Right Rechts - + Width: Breite: - + Corner radius: Eckrundung: - + Margins: Außenabstände: - + Padding: Innenabstände: - + Font: Schrift: - + Style Stil - + Cursor Zeiger - + Use block insertion of Nutze Absatzeinrückung von - + Alignment: Ausrichtung: - + Justify Blocksatz - + Alignment Ausrichtung - + Icon Size Icongröße - + TextLabel Textbeschriftung - + Disable blinking Blinken Aus - + Text area Textfeld - + Max width Max. Breite - + Left/Right margins: Abstände Rechts/Links: - + Top/Bottom margins: Abstände Oben/Unten: - + S&how progress - Fortschritt anzeigen + &Fortschritt anzeigen - + Show summar&y &Zusammenfassung anzeigen - + Show p&rogress Fo&rtschritt anzeigen - + Old st&yle Alter St&il - + Transparent Transparent - + Restore defaults Standardwerte wiederherstellen - + Style: Stil: - + Language: Sprache: - + Font size: Schriftgröße: - + Restarting Manuskript ensures all settings take effect. Wenn Sie Manuskript neu starten, werden alle Einstellungen wirksam. - + Show &word count Anzahl der &Wörter anzeigen - + &Show word count Anzahl der &Wörter anzeigen - + &New style &Neuer Stil - + Typewriter mode Schreibmaschinenmodus - + Focus mode Ablenkungsfreier Modus - + None Keiner - + Sentence Satz - + Line Zeile - + Paragraph Absatz - + <p><b>The Revisions feature has been at the source of many reported issues. In this version of Manuskript it has been turned off by default for new projects in order to provide the best experience.</b></p><p>Why aren't these issues fixed already? <a href="https://www.theologeek.ch/manuskript/contribute/">We need your help to make Manuskript better!</a></p> <p><b>Das Feature "Revisionen" war die Quelle von vielen Problemberichten. In dieser Version von Manuskript ist es deswegen für besseren Bedienkomfort bei neuen Projekten standardmäßig deaktiviert.</b></p>Warum sind diese Probleme noch nicht behoben?<a href="https://www.theologeek.ch/manuskript/contribute/">Wir brauchen Ihre Hilfe, um Manuskript zu verbessern!</a></p> + + + Show progress in chars next + to words + Zeige Fortschritt in Zeichen und +Wörtern an + + + + Char/Word Counter + Zeichen-/Wörter-Zähler + + + + Count spaces as chars + Zähle Leerzeichen mit + + + + Show char c&ount + &Anzahl der Zeichen anzeigen + + + + Sho&w char count + &Anzahl der Zeichen anzeigen + SpellAction - + Spelling Suggestions Korrekturvorschläge - + &Add to dictionary Zum Wörterbuch &hinzufügen - + &Remove from custom dictionary Aus dem Wörterbuch &entfernen + + + &Correction Suggestions + &Korrekturvorschläge + + + + &Correction Suggestion + &Korrekturvorschlag + about @@ -2288,17 +2331,17 @@ Nutze das, wenn du YAML-Errors bekommst. characterModel - + New character Neuer Charakter - + Name Name - + Value Wert @@ -2306,17 +2349,17 @@ Nutze das, wenn du YAML-Errors bekommst. characterTreeView - + Main Primär - + Secondary Sekundär - + Minor Nebensächlich @@ -2680,13 +2723,13 @@ Nutze das, wenn du YAML-Errors bekommst. - Replace ... with … - ... ersetzen durch … + Replace ... with … + ... ersetzen durch … - Replace --- with — - --- ersetzen durch — + Replace --- with — + --- ersetzen durch — @@ -3019,14 +3062,29 @@ Nutze das, wenn du YAML-Errors bekommst. Stamm - - {} words / {} + + {} words + {} Wörter + + + + ({} chars) {} words / {} + ({} Zeichen) {} Wörter / {} + + + + {} words / {} {} Wörter / {} - - {} words - {} Wörter + + {} chars + {} Zeichen + + + + {} chars + {} Zeichen @@ -3232,12 +3290,12 @@ Nutze das, wenn du YAML-Errors bekommst. outlineItem - + {} words / {} ({}) {} Wörter / {} ({}) - + {} words {} Wörter @@ -3245,17 +3303,17 @@ Nutze das, wenn du YAML-Errors bekommst. pandocSettings - + General Allgemein - + Table of Content Inhaltsverzeichnis - + Custom settings for {} Benutzerdefinierte Einstellungen für {} @@ -3459,37 +3517,37 @@ Nutze das, wenn du YAML-Errors bekommst. plotModel - + New plot Neuer Handlungsstrang - + Name Name - + Meta Meta - + New step Neuer Schritt - + Main Primär - + Secondary Sekundär - + Minor Nebensächlich @@ -3497,22 +3555,22 @@ Nutze das, wenn du YAML-Errors bekommst. plotTreeView - + Main Primär - + Secondary Sekundär - + Minor Nebensächlich - + **Plot:** {} **Handlungsstrang:** {} @@ -3576,12 +3634,12 @@ Nutze das, wenn du YAML-Errors bekommst. references - + Not a reference: {}. Keine Referenz: {}. - + Unknown reference: {}. Unbekannte Referenz: {}. @@ -3626,112 +3684,112 @@ Nutze das, wenn du YAML-Errors bekommst. Notizen: - + Basic info Baisinformationen - + Detailed info Detailierte Informationen - + POV of: POV von: - + Go to {}. Gehe zu {}. - + Description Beschreibung - + Result Ergebnis - + Characters Charaktere - + Resolution steps Lösungsschritte - + Passion Leidenschaft - + Conflict Konflikt - + <b>Unknown reference:</b> {}. <b>Unbekannte Referenz:</b> {}. - + Folder: <b>{}</b> Ordner:<b>{}</b> - + Text: <b>{}</b> Text:<b>{}</b> - + Character: <b>{}</b> Charakter:<b>{}</b> - + Plot: <b>{}</b> Plot:<b>{}</b> - + World: <b>{name}</b>{path} Welt:<b>{name}</b>{path} - + Referenced in: Referenziert in: - + Motivation Motivation - + Goal Ziel - + Epiphany Schicksal - + Short summary Kurzzusammenfassung - + Longer summary Lange Zusammenfassung @@ -3749,12 +3807,12 @@ Nutze das, wenn du YAML-Errors bekommst. Optionen - + Restore Wiederherstellen - + Delete Löschen @@ -3814,12 +3872,12 @@ Nutze das, wenn du YAML-Errors bekommst. {} Sekunden zuvor - + Line {}: Zeile {}: - + Clear all Leeren @@ -3895,52 +3953,52 @@ Nutze das, wenn du YAML-Errors bekommst. settingsWindow - + New status Neuer Status - + New label Neue Beschriftung - + newtheme Neues Thema - + New theme Neues Thema - + (read-only) (schreibgeschützt) - + Open Image Bild öffnen - + Image files (*.jpg; *.jpeg; *.png) Bilddateien - + Error Fehler - + Unable to load selected file Laden der Datei fehlgeschlagen - + Unable to add selected image: {} Hinzufügen des Bildes fehgeschlagen: @@ -4065,7 +4123,7 @@ Nutze das, wenn du YAML-Errors bekommst. textEditView - + Various Verschiedenes @@ -4164,27 +4222,27 @@ Nutze das, wenn du YAML-Errors bekommst. Leer - + Novel Roman - + Novella Novelle - + Short Story Kurzgeschichte - + Research paper Forschungsbericht - + Demo projects Demo Projekte @@ -4219,147 +4277,147 @@ Nutze das, wenn du YAML-Errors bekommst. Erstellen - + Open project Öffne Projekt - + Manuskript project (*.msk);;All files (*) Manuskript Projekt (*.msk);;Alle Dateien (*) - + Save project as... Speichern als ... - + Manuskript project (*.msk) Manuskript Projekt (*.msk) - + Manuskript Manuskript - + Create New Project Erzeuge neues Projekt - + Warning Warnung - + Overwrite existing project {} ? Existierendes Projekt {} überschreiben? - + Empty fiction Leere Geschichte - + Chapter Kapitel - + Scene Szene - + Trilogy Trilogie - + Book Buch - + Section Absatz - + Empty non-fiction Leeres Sachbuch - + words each. Wörter. - + of von - + Text Text - + Something Irgendwas - + <b>Total:</b> {} words (~ {} pages) <b>Gesamt:</b> {} Wörter (~ {} Seiten) - + Fiction Geschichte - + Non-fiction Sachtext - + Idea Idee - + Note Notiz - + Research Recherche - + TODO ToDo - + First draft Erster Entwurf - + Second draft Zweiter Entwurf - + Final Endgültig @@ -4372,207 +4430,207 @@ Nutze das, wenn du YAML-Errors bekommst. Neues Element - + Fantasy world building Bau einer Fantasy-Welt - + Physical Geographie - + Climate Klima - + Topography Relief - + Astronomy Astronomie - + Wild life Fauna - + Flora Flora - + History Geschichte - + Races Arten - + Diseases Krankheiten - + Cultural Kultur - + Customs Bräuche - + Food Essen - + Languages Sprachen - + Education Erziehung - + Dresses Kleidung - + Science Wissenschaft - + Calendar Zeitrechnung - + Bodily language Körpersprache - + Ethics Ethik - + Religion Religion - + Government Regierung - + Politics Politik - + Gender roles Geschlechterrollen - + Music and arts Musik und Kunst - + Architecture Architektur - + Military Militär - + Technology Technologie - + Courtship Balzverhalten - + Demography Demographie - + Transportation Transportmittel - + Medicine Medizin - + Magic system Magiesystem - + Rules Regeln - + Organization Organisation - + Magical objects Magische Objekte - + Magical places Magische Orte - + Magical races Magische Wesen - + Important places Wichtige Orte - + Important objects Wichtige Objekte - + Natural resources Natürliche Ressourcen From 06e35cd96956cb1db8dd5a22e5c9249aaf3aacd8 Mon Sep 17 00:00:00 2001 From: bentleyjoakes Date: Sun, 31 May 2020 22:33:14 +0200 Subject: [PATCH 18/51] Clones importance setting. When creating a new character, sets an appropriate importance level. * If a character is selected, the new character has the same importance level. * If a top-level importance level is selected, the new character has that level * Otherwise, the importance level is zero --- manuskript/mainWindow.py | 4 +--- manuskript/models/characterModel.py | 9 ++++---- manuskript/ui/views/characterTreeView.py | 26 ++++++++++++++++++++---- 3 files changed, 28 insertions(+), 11 deletions(-) diff --git a/manuskript/mainWindow.py b/manuskript/mainWindow.py index d9c91f8..3782fd8 100644 --- a/manuskript/mainWindow.py +++ b/manuskript/mainWindow.py @@ -948,9 +948,7 @@ class MainWindow(QMainWindow, Ui_MainWindow): # Characters self.lstCharacters.setCharactersModel(self.mdlCharacter) self.tblPersoInfos.setModel(self.mdlCharacter) - - self.btnAddPerso.clicked.connect(self.mdlCharacter.addCharacter, F.AUC) - + self.btnAddPerso.clicked.connect(self.lstCharacters.addCharacter, F.AUC) try: self.btnRmPerso.clicked.connect(self.lstCharacters.removeCharacter, F.AUC) diff --git a/manuskript/models/characterModel.py b/manuskript/models/characterModel.py index 639f8f3..f2bfd7a 100644 --- a/manuskript/models/characterModel.py +++ b/manuskript/models/characterModel.py @@ -165,12 +165,13 @@ class characterModel(QAbstractItemModel): # ADDING / REMOVING ############################################################################### - def addCharacter(self): + def addCharacter(self, importance = 0): """ Creates a new character + @param importance: the importance level of the character @return: the character """ - c = Character(model=self, name=self.tr("New character")) + c = Character(model=self, name=self.tr("New character"), importance = importance) self.beginInsertRows(QModelIndex(), len(self.characters), len(self.characters)) self.characters.append(c) self.endInsertRows() @@ -228,7 +229,7 @@ class characterModel(QAbstractItemModel): ############################################################################### class Character(): - def __init__(self, model, name="No name"): + def __init__(self, model, name="No name", importance = 0): self._model = model self.lastPath = "" @@ -236,7 +237,7 @@ class Character(): self._data[C.name.value] = name self.assignUniqueID() self.assignRandomColor() - self._data[C.importance.value] = "0" + self._data[C.importance.value] = str(importance) self._data[C.pov.value] = "True" self.infos = [] diff --git a/manuskript/ui/views/characterTreeView.py b/manuskript/ui/views/characterTreeView.py index e276529..a88bd25 100644 --- a/manuskript/ui/views/characterTreeView.py +++ b/manuskript/ui/views/characterTreeView.py @@ -29,6 +29,8 @@ class characterTreeView(QTreeWidget): self._rootItem = QTreeWidgetItem() self.insertTopLevelItem(0, self._rootItem) + self.importanceMap = {self.tr("Main"):2, self.tr("Secondary"):1, self.tr("Minor"):0} + def setCharactersModel(self, model): self._model = model self._model.dataChanged.connect(self.updateMaybe) @@ -86,11 +88,9 @@ class characterTreeView(QTreeWidget): self.clear() characters = self._model.getCharactersByImportance() - h = [self.tr("Main"), self.tr("Secondary"), self.tr("Minor")] - - for i in range(3): + for i, importanceLevel in enumerate(self.importanceMap): # Create category item - cat = QTreeWidgetItem(self, [h[i]]) + cat = QTreeWidgetItem(self, [importanceLevel]) cat.setBackground(0, QBrush(QColor(S.highlightLight))) cat.setForeground(0, QBrush(QColor(S.highlightedTextDark))) cat.setTextAlignment(0, Qt.AlignCenter) @@ -119,6 +119,24 @@ class characterTreeView(QTreeWidget): self.expandAll() self._updating = False + def addCharacter(self): + curr_item = self.currentItem() + curr_importance = 0 + + # check if an item is selected + if curr_item is not None: + if curr_item.parent() is None: + # this is a top-level category, so find its importance + # get the current text, then look up the importance level + text = curr_item.text(0) + curr_importance = self.importanceMap[text] + else: + # get the importance from the currently-highlighted character + curr_character = self.currentCharacter() + curr_importance = curr_character.importance() + + self._model.addCharacter(importance=curr_importance) + def removeCharacter(self): """ Removes selected character. From 12be4c3a3d7bfa4f716a9bb40e2bd167ebe4b2b9 Mon Sep 17 00:00:00 2001 From: TheJackiMonster Date: Sun, 21 Feb 2021 23:45:34 +0100 Subject: [PATCH 19/51] Fixed all Python syntax warnings --- manuskript/converters/markdownConverter.py | 2 +- manuskript/exporter/manuskript/HTML.py | 2 +- manuskript/exporter/manuskript/plainText.py | 4 ++-- manuskript/exporter/pandoc/PDF.py | 2 +- .../exporter/pandoc/abstractPlainText.py | 2 +- manuskript/functions/spellchecker.py | 20 +++++++++---------- manuskript/importer/mindMapImporter.py | 6 +++--- manuskript/importer/opmlImporter.py | 15 +++++++------- manuskript/importer/pandocImporters.py | 2 +- manuskript/load_save/version_1.py | 8 ++++---- manuskript/main.py | 8 ++++---- manuskript/mainWindow.py | 10 +++++----- manuskript/models/abstractItem.py | 2 +- manuskript/models/abstractModel.py | 8 ++++---- manuskript/models/characterModel.py | 2 +- manuskript/models/references.py | 2 +- manuskript/models/worldModel.py | 2 +- manuskript/tests/conftest.py | 10 +++++----- manuskript/tests/models/test_outlineItem.py | 4 ++-- manuskript/tests/models/test_references.py | 20 +++++++++---------- manuskript/tests/test_functions.py | 14 ++++++------- manuskript/tests/test_settingsWindow.py | 10 +++++----- manuskript/ui/collapsibleDockWidgets.py | 2 +- manuskript/ui/editors/blockUserData.py | 2 +- manuskript/ui/editors/fullScreenEditor.py | 10 +++++----- manuskript/ui/editors/locker.py | 2 +- manuskript/ui/editors/mainEditor.py | 6 +++--- manuskript/ui/editors/tabSplitter.py | 10 +++++----- .../ui/highlighters/markdownHighlighter.py | 2 +- manuskript/ui/views/characterTreeView.py | 6 +++--- manuskript/ui/views/lineEditView.py | 2 +- manuskript/ui/views/textEditView.py | 2 +- manuskript/ui/views/treeView.py | 4 ++-- manuskript/ui/welcome.py | 2 +- 34 files changed, 103 insertions(+), 102 deletions(-) diff --git a/manuskript/converters/markdownConverter.py b/manuskript/converters/markdownConverter.py index f0e577b..1b2883a 100644 --- a/manuskript/converters/markdownConverter.py +++ b/manuskript/converters/markdownConverter.py @@ -26,7 +26,7 @@ class markdownConverter(abstractConverter): @classmethod def isValid(self): - return MD is not None + return MD != None @classmethod def convert(self, markdown): diff --git a/manuskript/exporter/manuskript/HTML.py b/manuskript/exporter/manuskript/HTML.py index 9f89087..89c0dcf 100644 --- a/manuskript/exporter/manuskript/HTML.py +++ b/manuskript/exporter/manuskript/HTML.py @@ -24,7 +24,7 @@ class HTML(markdown): exportDefaultSuffix = ".html" def isValid(self): - return MD is not None + return MD != None def settingsWidget(self): w = markdownSettings(self) diff --git a/manuskript/exporter/manuskript/plainText.py b/manuskript/exporter/manuskript/plainText.py index 250f6bf..4eac456 100644 --- a/manuskript/exporter/manuskript/plainText.py +++ b/manuskript/exporter/manuskript/plainText.py @@ -51,10 +51,10 @@ class plainText(basicFormat): def getExportFilename(self, settingsWidget, varName=None, filter=None): - if varName is None: + if varName == None: varName = self.exportVarName - if filter is None: + if filter == None: filter = self.exportFilter settings = settingsWidget.getSettings() diff --git a/manuskript/exporter/pandoc/PDF.py b/manuskript/exporter/pandoc/PDF.py index 5adf485..7e67c42 100644 --- a/manuskript/exporter/pandoc/PDF.py +++ b/manuskript/exporter/pandoc/PDF.py @@ -31,7 +31,7 @@ class PDF(abstractOutput): def isValid(self): path = shutil.which("pdflatex") or shutil.which("xelatex") - return path is not None + return path != None def output(self, settingsWidget, outputfile=None): args = settingsWidget.runnableSettings() diff --git a/manuskript/exporter/pandoc/abstractPlainText.py b/manuskript/exporter/pandoc/abstractPlainText.py index 5cfea99..9dcfd8f 100644 --- a/manuskript/exporter/pandoc/abstractPlainText.py +++ b/manuskript/exporter/pandoc/abstractPlainText.py @@ -75,7 +75,7 @@ class pandocSetting: """Return whether the specific setting is active with the given format.""" # Empty formats means all - if self.formats is "": + if self.formats == "": return True # "html" in "html markdown latex" diff --git a/manuskript/functions/spellchecker.py b/manuskript/functions/spellchecker.py index d3b9014..1458890 100644 --- a/manuskript/functions/spellchecker.py +++ b/manuskript/functions/spellchecker.py @@ -111,7 +111,7 @@ class Spellchecker: (lib, name) = values try: d = Spellchecker.dictionaries.get(dictionary, None) - if d is None: + if d == None: for impl in Spellchecker.implementations: if impl.isInstalled() and lib == impl.getLibraryName(): d = impl(name) @@ -267,7 +267,7 @@ class EnchantDictionary(BasicDictionary): @staticmethod def isInstalled(): - return enchant is not None + return enchant != None @staticmethod def availableDictionaries(): @@ -284,9 +284,9 @@ class EnchantDictionary(BasicDictionary): if default_locale and not enchant.dict_exists(default_locale): default_locale = None - if default_locale is None: + if default_locale == None: default_locale = QLocale.system().name() - if default_locale is None: + if default_locale == None: default_locale = self.availableDictionaries()[0] return default_locale @@ -330,7 +330,7 @@ class PySpellcheckerDictionary(BasicDictionary): @staticmethod def isInstalled(): - return pyspellchecker is not None + return pyspellchecker != None @staticmethod def availableDictionaries(): @@ -350,7 +350,7 @@ class PySpellcheckerDictionary(BasicDictionary): default_locale = QLocale.system().name() if default_locale: default_locale = default_locale[0:2] - if default_locale is None: + if default_locale == None: default_locale = "en" return default_locale @@ -415,7 +415,7 @@ class SymSpellDictionary(BasicDictionary): @staticmethod def isInstalled(): - return symspellpy is not None + return symspellpy != None @classmethod def availableDictionaries(cls): @@ -524,7 +524,7 @@ class LanguageToolDictionary(BasicDictionary): @staticmethod def isInstalled(): - if languagetool is not None: + if languagetool != None: # This check, if Java is installed, is necessary to # make sure LanguageTool can be run without problems. @@ -550,9 +550,9 @@ class LanguageToolDictionary(BasicDictionary): if default_locale and not default_locale in languagetool.get_languages(): default_locale = None - if default_locale is None: + if default_locale == None: default_locale = QLocale.system().name() - if default_locale is None: + if default_locale == None: default_locale = self.availableDictionaries()[0] return default_locale diff --git a/manuskript/importer/mindMapImporter.py b/manuskript/importer/mindMapImporter.py index 31155c9..7999bdf 100644 --- a/manuskript/importer/mindMapImporter.py +++ b/manuskript/importer/mindMapImporter.py @@ -47,7 +47,7 @@ class mindMapImporter(abstractImporter): node = root.find("node") items = [] - if node is not None: + if node != None: items.extend(self.parseItems(node, parentItem)) ret = True @@ -97,7 +97,7 @@ class mindMapImporter(abstractImporter): # Rich text content content = "" content = underElement.find("richcontent") - if content is not None: + if content != None: # In Freemind, can be note or node # Note: it's a note # Node: it's the title of the node, in rich text @@ -130,7 +130,7 @@ class mindMapImporter(abstractImporter): children = underElement.findall('node') # Process children - if children is not None and len(children) > 0: + if children != None and len(children) > 0: for c in children: items.extend(self.parseItems(c, item)) diff --git a/manuskript/importer/opmlImporter.py b/manuskript/importer/opmlImporter.py index e434cd5..79d871e 100644 --- a/manuskript/importer/opmlImporter.py +++ b/manuskript/importer/opmlImporter.py @@ -52,10 +52,10 @@ class opmlImporter(abstractImporter): bodyNode = opmlNode.find("body") items = [] - if bodyNode is not None: + if bodyNode != None: outlineEls = bodyNode.findall("outline") - if outlineEls is not None: + if outlineEls != None: for element in outlineEls: items.extend(cls.parseItems(element, parentItem)) ret = True @@ -74,19 +74,20 @@ class opmlImporter(abstractImporter): def parseItems(cls, underElement, parentItem=None): items = [] title = underElement.get('text') - if title is not None: - + if title != None: card = outlineItem(parent=parentItem, title=title) items.append(card) body = "" note = underElement.get('_note') - if note is not None and not cls.isWhitespaceOnly(note): + + if note != None and not cls.isWhitespaceOnly(note): #body = cls.restoreNewLines(note) body = note children = underElement.findall('outline') - if children is not None and len(children) > 0: + + if children != None and len(children) > 0: for el in children: items.extend(cls.parseItems(el, card)) else: @@ -121,4 +122,4 @@ class opmlImporter(abstractImporter): s = cls.restoreNewLines(inString) s = ''.join(s.split()) - return len(s) is 0 + return len(s) == 0 diff --git a/manuskript/importer/pandocImporters.py b/manuskript/importer/pandocImporters.py index 6e281cc..9a0e99d 100644 --- a/manuskript/importer/pandocImporters.py +++ b/manuskript/importer/pandocImporters.py @@ -38,7 +38,7 @@ class pandocImporter(abstractImporter): r = pandocExporter().run(args) - if r is None: + if r == None: return None if formatTo == "opml": diff --git a/manuskript/load_save/version_1.py b/manuskript/load_save/version_1.py index 9e76a00..a5e9626 100644 --- a/manuskript/load_save/version_1.py +++ b/manuskript/load_save/version_1.py @@ -107,7 +107,7 @@ def saveProject(zip=None): settings. @return: True if successful, False otherwise. """ - if zip is None: + if zip == None: zip = settings.saveToZip log("\n\nSaving to:", "zip" if zip else "folder") @@ -124,7 +124,7 @@ def saveProject(zip=None): project = mw.currentProject # Sanity check (see PR-583): make sure we actually have a current project. - if project is None: + if project == None: print("Error: cannot save project because there is no current project in the UI.") return False @@ -198,7 +198,7 @@ def saveProject(zip=None): # We skip the first row, which is empty and transparent for i in range(1, mdl.rowCount()): color = "" - if mdl.data(mdl.index(i, 0), Qt.DecorationRole) is not None: + if mdl.data(mdl.index(i, 0), Qt.DecorationRole) != None: color = iconColor(mdl.data(mdl.index(i, 0), Qt.DecorationRole)).name(QColor.HexRgb) color = color if color != "#ff000000" else "#00000000" @@ -901,7 +901,7 @@ def addTextItems(mdl, odict, parent=None): @param odict: OrderedDict @return: nothing """ - if parent is None: + if parent == None: parent = mdl.rootItem for k in odict: diff --git a/manuskript/main.py b/manuskript/main.py index 63bc9cf..48921d4 100644 --- a/manuskript/main.py +++ b/manuskript/main.py @@ -101,7 +101,7 @@ def prepare(tests=False): def respectSystemDarkThemeSetting(): """Adjusts the Qt theme to match the OS 'dark theme' setting configured by the user.""" - if platform.system() is not 'Windows': + if platform.system() != 'Windows': return # Basic Windows 10 Dark Theme support. @@ -168,7 +168,7 @@ def prepare(tests=False): def launch(app, MW = None): - if MW is None: + if MW == None: from manuskript.functions import mainWindow MW = mainWindow() @@ -176,7 +176,7 @@ def launch(app, MW = None): # Support for IPython Jupyter QT Console as a debugging aid. # Last argument must be --console to enable it - # Code reference : + # Code reference : # https://github.com/ipython/ipykernel/blob/master/examples/embedding/ipkernel_qtapp.py # https://github.com/ipython/ipykernel/blob/master/examples/embedding/internal_ipkernel.py if len(sys.argv) > 1 and sys.argv[-1] == "--console": @@ -188,7 +188,7 @@ def launch(app, MW = None): # Create IPython kernel within our application kernel = IPKernelApp.instance() - + # Initialize it and use matplotlib for main event loop integration with QT kernel.initialize(['python', '--matplotlib=qt']) diff --git a/manuskript/mainWindow.py b/manuskript/mainWindow.py index 3782fd8..8772a88 100644 --- a/manuskript/mainWindow.py +++ b/manuskript/mainWindow.py @@ -270,7 +270,7 @@ class MainWindow(QMainWindow, Ui_MainWindow): self.mainEditor ] - while new is not None: + while new != None: if new in targets: self._lastFocus = new break @@ -838,7 +838,7 @@ class MainWindow(QMainWindow, Ui_MainWindow): # risk a scenario where the timer somehow triggers a new save while saving. self.saveTimerNoChanges.stop() - if self.currentProject is None: + if self.currentProject == None: # No UI feedback here as this code path indicates a race condition that happens # after the user has already closed the project through some way. But in that # scenario, this code should not be reachable to begin with. @@ -1095,7 +1095,7 @@ class MainWindow(QMainWindow, Ui_MainWindow): # disconnect only removes one connection at a time. while True: try: - if oldHandler is not None: + if oldHandler != None: signal.disconnect(oldHandler) else: signal.disconnect() @@ -1375,7 +1375,7 @@ class MainWindow(QMainWindow, Ui_MainWindow): dictionaries = Spellchecker.availableDictionaries() # Set first run dictionary - if settings.dict is None: + if settings.dict == None: settings.dict = Spellchecker.getDefaultDictionary() # Check if project dict is unavailable on this machine @@ -1586,7 +1586,7 @@ class MainWindow(QMainWindow, Ui_MainWindow): w.cmbPOV.setVisible(val) # POV in outline view - if val is None and Outline.POV in settings.outlineViewColumns: + if val == None and Outline.POV in settings.outlineViewColumns: settings.outlineViewColumns.remove(Outline.POV) from manuskript.ui.views.outlineView import outlineView diff --git a/manuskript/models/abstractItem.py b/manuskript/models/abstractItem.py index f3fa049..a6e6096 100644 --- a/manuskript/models/abstractItem.py +++ b/manuskript/models/abstractItem.py @@ -39,7 +39,7 @@ class abstractItem(): self._data[self.enum.title] = title self._data[self.enum.type] = _type - if xml is not None: + if xml != None: self.setFromXML(xml) if ID: diff --git a/manuskript/models/abstractModel.py b/manuskript/models/abstractModel.py index a536084..828643d 100644 --- a/manuskript/models/abstractModel.py +++ b/manuskript/models/abstractModel.py @@ -131,7 +131,7 @@ class abstractModel(QAbstractItemModel): # Check whether the parent is the root, or is otherwise invalid. # That is to say: no parent or the parent lacks a parent. if (parentItem == self.rootItem) or \ - (parentItem is None) or (parentItem.parent() is None): + (parentItem == None) or (parentItem.parent() == None): return QModelIndex() return self.createIndex(parentItem.row(), 0, parentItem) @@ -283,7 +283,7 @@ class abstractModel(QAbstractItemModel): # # Gets encoded mime data to retrieve the item items = self.decodeMimeData(data) - if items is None: + if items == None: return False # We check if parent is not a child of one of the items @@ -321,7 +321,7 @@ class abstractModel(QAbstractItemModel): return None encodedData = bytes(data.data("application/xml")).decode() root = ET.XML(encodedData) - if root is None: + if root == None: return None if root.tag != "outlineItems": @@ -381,7 +381,7 @@ class abstractModel(QAbstractItemModel): items = self.decodeMimeData(data) - if items is None: + if items == None: return False if column > 0: diff --git a/manuskript/models/characterModel.py b/manuskript/models/characterModel.py index f2bfd7a..5cd3948 100644 --- a/manuskript/models/characterModel.py +++ b/manuskript/models/characterModel.py @@ -153,7 +153,7 @@ class characterModel(QAbstractItemModel): return r def getCharacterByID(self, ID): - if ID is not None: + if ID != None: ID = str(ID) for c in self.characters: if c.ID() == ID: diff --git a/manuskript/models/references.py b/manuskript/models/references.py index 17696c8..c54e290 100644 --- a/manuskript/models/references.py +++ b/manuskript/models/references.py @@ -187,7 +187,7 @@ def infos(ref): elif _type == CharacterLetter: m = mainWindow().mdlCharacter c = m.getCharacterByID(int(_ref)) - if c is None: + if c == None: return qApp.translate("references", "Unknown reference: {}.").format(ref) index = c.index() diff --git a/manuskript/models/worldModel.py b/manuskript/models/worldModel.py index 5d883ca..eeb6d1e 100644 --- a/manuskript/models/worldModel.py +++ b/manuskript/models/worldModel.py @@ -189,7 +189,7 @@ class worldModel(QStandardItemModel): for index in indexes: item = self.itemFromIndex(index) parent = item.parent() - if parent is None: + if parent == None: parent = self.invisibleRootItem() row_indexes.append((parent, item.row())) diff --git a/manuskript/tests/conftest.py b/manuskript/tests/conftest.py index 09629e4..ff212ba 100644 --- a/manuskript/tests/conftest.py +++ b/manuskript/tests/conftest.py @@ -12,7 +12,7 @@ def MW(): """ from manuskript import functions as F MW = F.mainWindow() - assert MW is not None + assert MW != None assert MW == F.MW return MW @@ -23,7 +23,7 @@ def MWNoProject(MW): Take the MainWindow and close andy possibly open project. """ MW.closeProject() - assert MW.currentProject is None + assert MW.currentProject == None return MW @pytest.fixture @@ -35,9 +35,9 @@ def MWEmptyProject(MW): tf = tempfile.NamedTemporaryFile(suffix=".msk") MW.closeProject() - assert MW.currentProject is None + assert MW.currentProject == None MW.welcome.createFile(tf.name, overwrite=True) - assert MW.currentProject is not None + assert MW.currentProject != None return MW # If using with: @pytest.fixture(scope='session', autouse=True) @@ -67,6 +67,6 @@ def MWSampleProject(MW): shutil.copyfile(src, tf.name) shutil.copytree(src[:-4], tf.name[:-4]) MW.loadProject(tf.name) - assert MW.currentProject is not None + assert MW.currentProject != None return MW diff --git a/manuskript/tests/models/test_outlineItem.py b/manuskript/tests/models/test_outlineItem.py index cc681c0..c7fb7df 100644 --- a/manuskript/tests/models/test_outlineItem.py +++ b/manuskript/tests/models/test_outlineItem.py @@ -130,9 +130,9 @@ def test_modelStuff(outlineModelBasic): folder.setModel(k) assert folder.columnCount() == len(folder.enum) text1 = text2.copy() - assert text1.ID() is None + assert text1.ID() == None folder.appendChild(text1) - assert text1.ID() is not None + assert text1.ID() != None assert folder.childCountRecursive() == 2 assert text1.path() == "Folder > Text" assert len(text1.pathID()) == 2 diff --git a/manuskript/tests/models/test_references.py b/manuskript/tests/models/test_references.py index c49e5a5..b9fb2d0 100644 --- a/manuskript/tests/models/test_references.py +++ b/manuskript/tests/models/test_references.py @@ -39,7 +39,7 @@ def test_references(MWSampleProject): assert "\n" in Ref.infos(Ref.plotReference(plotID)) assert "Not a ref" in Ref.infos("") assert "Unknown" in Ref.infos(Ref.plotReference("999")) - assert Ref.shortInfos(Ref.plotReference(plotID)) is not None + assert Ref.shortInfos(Ref.plotReference(plotID)) != None assert Ref.shortInfos(Ref.plotReference("999")) == None assert Ref.shortInfos("") == -1 @@ -50,7 +50,7 @@ def test_references(MWSampleProject): charID = IDs[0] assert "\n" in Ref.infos(Ref.characterReference(charID)) assert "Unknown" in Ref.infos(Ref.characterReference("999")) - assert Ref.shortInfos(Ref.characterReference(charID)) is not None + assert Ref.shortInfos(Ref.characterReference(charID)) != None assert Ref.shortInfos(Ref.characterReference("999")) == None assert Ref.shortInfos("") == -1 @@ -62,7 +62,7 @@ def test_references(MWSampleProject): assert "\n" in Ref.infos(Ref.textReference(textID)) assert "Unknown" in Ref.infos(Ref.textReference("999")) - assert Ref.shortInfos(Ref.textReference(textID)) is not None + assert Ref.shortInfos(Ref.textReference(textID)) != None assert Ref.shortInfos(Ref.textReference("999")) == None assert Ref.shortInfos("") == -1 @@ -73,7 +73,7 @@ def test_references(MWSampleProject): assert "\n" in Ref.infos(Ref.worldReference(worldID)) assert "Unknown" in Ref.infos(Ref.worldReference("999")) - assert Ref.shortInfos(Ref.worldReference(worldID)) is not None + assert Ref.shortInfos(Ref.worldReference(worldID)) != None assert Ref.shortInfos(Ref.worldReference("999")) == None assert Ref.shortInfos("") == -1 @@ -84,9 +84,9 @@ def test_references(MWSampleProject): # Titles for ref in refs: - assert Ref.title(ref) is not None - assert Ref.title("") is None - assert Ref.title(Ref.plotReference("999")) is None + assert Ref.title(ref) != None + assert Ref.title("") == None + assert Ref.title(Ref.plotReference("999")) == None # Other stuff assert Ref.type(Ref.plotReference(plotID)) == Ref.PlotLetter @@ -94,10 +94,10 @@ def test_references(MWSampleProject): assert "Unknown" in Ref.tooltip(Ref.worldReference("999")) assert "Not a ref" in Ref.tooltip("") for ref in refs: - assert Ref.tooltip(ref) is not None + assert Ref.tooltip(ref) != None # Links - assert Ref.refToLink("") is None + assert Ref.refToLink("") == None assert Ref.refToLink(Ref.plotReference("999")) == Ref.plotReference("999") assert Ref.refToLink(Ref.characterReference("999")) == Ref.characterReference("999") assert Ref.refToLink(Ref.textReference("999")) == Ref.textReference("999") @@ -106,7 +106,7 @@ def test_references(MWSampleProject): assert "") is None + assert Ref.open("") == None assert Ref.open(Ref.plotReference("999")) == False assert Ref.open(Ref.characterReference("999")) == False assert Ref.open(Ref.textReference("999")) == False diff --git a/manuskript/tests/test_functions.py b/manuskript/tests/test_functions.py index fbea5ab..8fb9fa4 100644 --- a/manuskript/tests/test_functions.py +++ b/manuskript/tests/test_functions.py @@ -46,8 +46,8 @@ def test_several(): assert F.iconColor(icon).name().lower() == "#ff0000" # themeIcon - assert F.themeIcon("text") is not None - assert F.themeIcon("nonexistingname") is not None + assert F.themeIcon("text") != None + assert F.themeIcon("nonexistingname") != None # randomColor c1 = F.randomColor() @@ -75,10 +75,10 @@ def test_outlineItemColors(): def test_paths(): - assert F.appPath() is not None - assert F.writablePath is not None + assert F.appPath() != None + assert F.writablePath != None assert len(F.allPaths("suffix")) == 2 - assert F.tempFile("yop") is not None + assert F.tempFile("yop") != None f = F.findBackground("spacedreams.jpg") assert "resources/backgrounds/spacedreams.jpg" in f assert len(F.customIcons()) > 1 @@ -87,8 +87,8 @@ def test_mainWindow(): from PyQt5.QtWidgets import QWidget, QLCDNumber - assert F.mainWindow() is not None - assert F.MW is not None + assert F.mainWindow() != None + assert F.MW != None F.statusMessage("Test") F.printObjects() diff --git a/manuskript/tests/test_settingsWindow.py b/manuskript/tests/test_settingsWindow.py index 8edc6f3..71ed09f 100644 --- a/manuskript/tests/test_settingsWindow.py +++ b/manuskript/tests/test_settingsWindow.py @@ -55,7 +55,7 @@ def test_general(MWSampleProject): state = settings() assert chk.isChecked() == state chk.setChecked(not state) - assert chk.isChecked() is not state + assert chk.isChecked() != state # Loading and Saving SW.txtAutoSave.setText("0") @@ -86,7 +86,7 @@ def test_general(MWSampleProject): SW.chkOutlineTitle.setChecked(Qt.Unchecked) SW.chkOutlineTitle.setChecked(Qt.Checked) # Can't test because of the dialog - # assert SW.setCorkColor() is None + # assert SW.setCorkColor() == None SW.sldTreeIconSize.setValue(SW.sldTreeIconSize.value() + 1) SW.rdoCorkNewStyle.toggled.emit(True) SW.cmbCorkImage.currentIndexChanged.emit(0) @@ -98,7 +98,7 @@ def test_general(MWSampleProject): # Test editor switchCheckBoxAndAssert(SW.chkEditorBackgroundTransparent, lambda: S.textEditor["backgroundTransparent"]) - assert SW.restoreEditorColors() is None + assert SW.restoreEditorColors() == None switchCheckBoxAndAssert(SW.chkEditorNoBlinking, lambda: S.textEditor["cursorNotBlinking"]) # Twice on purpose: set and restore @@ -108,7 +108,7 @@ def test_general(MWSampleProject): SW.updateAllWidgets() # Labels - assert SW.updateLabelColor(MW.mdlLabels.item(1).index()) is None + assert SW.updateLabelColor(MW.mdlLabels.item(1).index()) == None rc = MW.mdlLabels.rowCount() SW.addLabel() SW.lstLabels.setCurrentIndex( @@ -150,7 +150,7 @@ def test_general(MWSampleProject): for i in range(4): SW.updateLineSpacing(i) SW.updateUIFromTheme() # No time to wait on timer - assert SW._editingTheme is not None + assert SW._editingTheme != None SW.resize(SW.geometry().size()) # resizeEvent #TODO: other edit test (see SW.loadTheme SW.saveTheme() diff --git a/manuskript/ui/collapsibleDockWidgets.py b/manuskript/ui/collapsibleDockWidgets.py index 08c7331..5d2f18a 100644 --- a/manuskript/ui/collapsibleDockWidgets.py +++ b/manuskript/ui/collapsibleDockWidgets.py @@ -96,7 +96,7 @@ class collapsibleDockWidgets(QToolBar): def setCurrentGroup(self, group): self.currentGroup = group for btn, action, widget, grp in self.otherWidgets: - if not grp == group or grp is None: + if not grp == group or grp == None: action.setVisible(False) else: action.setVisible(True) diff --git a/manuskript/ui/editors/blockUserData.py b/manuskript/ui/editors/blockUserData.py index 7f39c2c..44340f5 100644 --- a/manuskript/ui/editors/blockUserData.py +++ b/manuskript/ui/editors/blockUserData.py @@ -8,7 +8,7 @@ class blockUserData(QTextBlockUserData): def getUserData(block): """Returns userData if it exists, or a blank one.""" data = block.userData() - if data is None: + if data == None: data = blockUserData() return data diff --git a/manuskript/ui/editors/fullScreenEditor.py b/manuskript/ui/editors/fullScreenEditor.py index 712d241..b2cc75e 100644 --- a/manuskript/ui/editors/fullScreenEditor.py +++ b/manuskript/ui/editors/fullScreenEditor.py @@ -338,8 +338,8 @@ class fullScreenEditor(QWidget): item = self._index.internalPointer() previousItem = self.previousTextItem(item) nextItem = self.nextTextItem(item) - self.btnPrevious.setEnabled(previousItem is not None) - self.btnNext.setEnabled(nextItem is not None) + self.btnPrevious.setEnabled(previousItem != None) + self.btnNext.setEnabled(nextItem != None) self.wPath.setItem(item) def updateStatusBar(self): @@ -572,11 +572,11 @@ class myPanel(QWidget): def addWidgetSetting(self, label, config_name, widgets): setting = (label, config_name, widgets) self._settings.append(setting) - if settings.fullscreenSettings.get(config_name, None) is not None: + if settings.fullscreenSettings.get(config_name, None) != None: self._setSettingValue(setting, settings.fullscreenSettings[config_name]) def addSetting(self, label, config_name, default=True): - if settings.fullscreenSettings.get(config_name, None) is None: + if settings.fullscreenSettings.get(config_name, None) == None: self._setConfig(config_name, default) self.addWidgetSetting(label, config_name, None) @@ -651,7 +651,7 @@ class myPath(QWidget): if i == item: a.setIcon(QIcon.fromTheme("stock_yes")) a.setEnabled(False) - elif self.editor.firstTextItem(i) is None: + elif self.editor.firstTextItem(i) == None: a.setEnabled(False) else: a.triggered.connect(gen_cb(i)) diff --git a/manuskript/ui/editors/locker.py b/manuskript/ui/editors/locker.py index d9a648e..2a007a3 100644 --- a/manuskript/ui/editors/locker.py +++ b/manuskript/ui/editors/locker.py @@ -105,6 +105,6 @@ class locker(QWidget, Ui_locker): text)) # Word locked - elif self._target is not None: + elif self._target != None: self.btnLock.setText(self.tr("{} words remaining").format( self._target - self._words)) diff --git a/manuskript/ui/editors/mainEditor.py b/manuskript/ui/editors/mainEditor.py index 882292e..8b629aa 100644 --- a/manuskript/ui/editors/mainEditor.py +++ b/manuskript/ui/editors/mainEditor.py @@ -120,7 +120,7 @@ class mainEditor(QWidget, Ui_mainEditor): return self.tabSplitter.tab def currentEditor(self, tabWidget=None): - if tabWidget is None: + if tabWidget == None: tabWidget = self.currentTabWidget() return tabWidget.currentWidget() # return self.tab.currentWidget() @@ -153,7 +153,7 @@ class mainEditor(QWidget, Ui_mainEditor): def allTabs(self, tabWidget=None): """Returns all the tabs from the given tabWidget. If tabWidget is None, from the current tabWidget.""" - if tabWidget is None: + if tabWidget == None: tabWidget = self.currentTabWidget() return [tabWidget.widget(i) for i in range(tabWidget.count())] @@ -205,7 +205,7 @@ class mainEditor(QWidget, Ui_mainEditor): title = self.getIndexTitle(index) - if tabWidget is None: + if tabWidget == None: tabWidget = self.currentTabWidget() # Checking if tab is already opened diff --git a/manuskript/ui/editors/tabSplitter.py b/manuskript/ui/editors/tabSplitter.py index 13adfaf..0ba8750 100644 --- a/manuskript/ui/editors/tabSplitter.py +++ b/manuskript/ui/editors/tabSplitter.py @@ -145,8 +145,8 @@ class tabSplitter(QWidget, Ui_tabSplitter): def split(self, toggled=None, state=None): - if state is None and self.splitState == 0 or state == 1: - if self.secondTab is None: + if state == None and self.splitState == 0 or state == 1: + if self.secondTab == None: self.addSecondTab() self.splitState = 1 @@ -155,8 +155,8 @@ class tabSplitter(QWidget, Ui_tabSplitter): self.btnSplit.setIcon(QIcon.fromTheme("split-vertical")) self.btnSplit.setToolTip(self.tr("Split horizontally")) - elif state is None and self.splitState == 1 or state == 2: - if self.secondTab is None: + elif state == None and self.splitState == 1 or state == 2: + if self.secondTab == None: self.addSecondTab() self.splitter.setOrientation(Qt.Vertical) @@ -212,7 +212,7 @@ class tabSplitter(QWidget, Ui_tabSplitter): # self.btnSplit.setGeometry(QRect(0, 0, 24, 24)) def focusChanged(self, old, new): - if self.secondTab is None or new is None: + if self.secondTab == None or new == None: return oldFT = self.focusTab diff --git a/manuskript/ui/highlighters/markdownHighlighter.py b/manuskript/ui/highlighters/markdownHighlighter.py index 4d873b4..3a1564e 100644 --- a/manuskript/ui/highlighters/markdownHighlighter.py +++ b/manuskript/ui/highlighters/markdownHighlighter.py @@ -713,7 +713,7 @@ class MarkdownHighlighter(BasicHighlighter): # FIXME: TypeError: could not convert 'TextBlockData' to 'QTextBlockUserData' # blockData = self.currentBlockUserData() - # if blockData is None: + # if blockData == None: # blockData = TextBlockData(self.document(), self.currentBlock()) # # self.setCurrentBlockUserData(blockData) diff --git a/manuskript/ui/views/characterTreeView.py b/manuskript/ui/views/characterTreeView.py index a88bd25..ea5798c 100644 --- a/manuskript/ui/views/characterTreeView.py +++ b/manuskript/ui/views/characterTreeView.py @@ -66,7 +66,7 @@ class characterTreeView(QTreeWidget): for child in range(item.childCount()): sub = item.child(child) ID = sub.data(0, Qt.UserRole) - if ID is not None: + if ID != None: # Update name c = self._model.getCharacterByID(ID) name = c.name() @@ -124,8 +124,8 @@ class characterTreeView(QTreeWidget): curr_importance = 0 # check if an item is selected - if curr_item is not None: - if curr_item.parent() is None: + if curr_item != None: + if curr_item.parent() == None: # this is a top-level category, so find its importance # get the current text, then look up the importance level text = curr_item.text(0) diff --git a/manuskript/ui/views/lineEditView.py b/manuskript/ui/views/lineEditView.py index 0366016..b61042f 100644 --- a/manuskript/ui/views/lineEditView.py +++ b/manuskript/ui/views/lineEditView.py @@ -31,7 +31,7 @@ class lineEditView(QLineEdit): self._index = index self._model = index.model() # self.item = index.internalPointer() - if self._placeholderText is not None: + if self._placeholderText != None: self.setPlaceholderText(self._placeholderText) self.textEdited.connect(self.submit) self.updateText() diff --git a/manuskript/ui/views/textEditView.py b/manuskript/ui/views/textEditView.py index ea58ed8..d5ece2b 100644 --- a/manuskript/ui/views/textEditView.py +++ b/manuskript/ui/views/textEditView.py @@ -34,7 +34,7 @@ class textEditView(QTextEdit): self._themeData = None self._highlighterClass = BasicHighlighter - if spellcheck is None: + if spellcheck == None: spellcheck = settings.spellcheck self.spellcheck = spellcheck diff --git a/manuskript/ui/views/treeView.py b/manuskript/ui/views/treeView.py index 3fa7271..2655808 100644 --- a/manuskript/ui/views/treeView.py +++ b/manuskript/ui/views/treeView.py @@ -69,7 +69,7 @@ class treeView(QTreeView, dndView, outlineBasics): return menu def expandCurrentIndex(self, index=None): - if index is None or type(index) == bool: + if index == None or type(index) == bool: index = self._indexesToOpen[0] # self.currentIndex() self.expand(index) @@ -78,7 +78,7 @@ class treeView(QTreeView, dndView, outlineBasics): self.expandCurrentIndex(index=idx) def collapseCurrentIndex(self, index=None): - if index is None or type(index) == bool: + if index == None or type(index) == bool: index = self._indexesToOpen[0] # self.currentIndex() self.collapse(index) diff --git a/manuskript/ui/welcome.py b/manuskript/ui/welcome.py index 8055c3a..ba2ef53 100644 --- a/manuskript/ui/welcome.py +++ b/manuskript/ui/welcome.py @@ -371,7 +371,7 @@ class welcome(QWidget, Ui_welcome): Qt.FindChildrenRecursively): # Update self.template to reflect the changed name values templateIndex = t.property("templateIndex") - if templateIndex is not None : + if templateIndex != None : self.template[1][templateIndex] = ( self.template[1][templateIndex][0], t.text()) From d27910449d80bb176a05c45a40261d6c5ec3033c Mon Sep 17 00:00:00 2001 From: TheJackiMonster Date: Sun, 21 Feb 2021 23:59:23 +0100 Subject: [PATCH 20/51] Fixed issue #817 with the settings style picking --- manuskript/settingsWindow.py | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/manuskript/settingsWindow.py b/manuskript/settingsWindow.py index ac8f855..4802410 100644 --- a/manuskript/settingsWindow.py +++ b/manuskript/settingsWindow.py @@ -59,11 +59,16 @@ class settingsWindow(QWidget, Ui_Settings): self.lstMenu.setMaximumWidth(140) self.lstMenu.setMinimumWidth(140) + lowerKeys = [i.lower() for i in list(QStyleFactory.keys())] + # General self.cmbStyle.addItems(list(QStyleFactory.keys())) - self.cmbStyle.setCurrentIndex( - [i.lower() for i in list(QStyleFactory.keys())] - .index(qApp.style().objectName())) + + try: + self.cmbStyle.setCurrentIndex(lowerKeys.index(qApp.style().objectName())) + except ValueError: + self.cmbStyle.setCurrentIndex(0) + self.cmbStyle.currentIndexChanged[str].connect(self.setStyle) self.cmbTranslation.clear() From cc124c0b137810e5b2608a43f57fdaf791115696 Mon Sep 17 00:00:00 2001 From: TheJackiMonster Date: Mon, 22 Feb 2021 01:09:34 +0100 Subject: [PATCH 21/51] Older updates for some languages --- i18n/manuskript_fa.qm | Bin 16 -> 23 bytes i18n/manuskript_nl.qm | Bin 50171 -> 50178 bytes i18n/manuskript_zh_CN.qm | Bin 47991 -> 48008 bytes 3 files changed, 0 insertions(+), 0 deletions(-) diff --git a/i18n/manuskript_fa.qm b/i18n/manuskript_fa.qm index be651eede2edc9cb0da5c140b31664afee169fa8..1c1ecdf88c0268bf2a62455e635fcfd1d1237c2e 100644 GIT binary patch literal 23 fcmcE7ks@*G{hX<16=n7(EZlo{IRgU&Q(7Vbh{Fmm literal 16 YcmcE7ks@*G{hX<16=n7(EZln+07b?KzW@LL diff --git a/i18n/manuskript_nl.qm b/i18n/manuskript_nl.qm index af172be93347f3778fd66285098ee19a85c36dd5..2643d9811f811bf1bc149861530ddd7ebac3ddf2 100644 GIT binary patch delta 34 scmV+-0NwxlhXaC$0~b8FWEjftoR!TX9KT?pz1^n(0007RY_SmQ!woMFS^xk5 delta 27 jcmZqbVE*0CEMT)EMdH-^IaALn%Ir^AxcBZx@z;j|uXhdC diff --git a/i18n/manuskript_zh_CN.qm b/i18n/manuskript_zh_CN.qm index 82d4d28cdc16d7c864efe96cc9555679ca9a9a26..34c2a09cb71551c5afdc4ef9ae44490e732ed76f 100644 GIT binary patch delta 4926 zcmXY#c|c9+|HnV~-gC~~?-g=~C|QcJOT^d`rBt?*E{YbEHkEMEjcQaXawMgVvJ5Ro zhG~YzIueG7EPY1?!`GI5-{$xBd%l0Y&b{ZH=lMLJ_h-BJ?Hg&@Td85>&mrG5JT1&U zZ`=8|x!aE1*hNHA)54rK?ImJPPd8^TB9FsF{c?zWP7`_iGMbkX&2S|ex}9@_r)(b{+_EL6{A3^-c zZA6(^&^49F;UV!89f^jFW}MfJF-t+b=V+o0W5HLrpGCY+0i1-5zH*b2cwZRky@N4i zE@M(B#^eFu4x(*F;^RWdOhX%p7uOS&-6Vc<2$AVq#?>~&S73ut1&lKnGe*B*G)-pA zd&O8jkocc}A{uj^(O5+M(NLn8bmH%&5XB{vuE2xHbph$#>WE}I(id{#pHeGHmDnns zY@R^Qvsw^kiR4yVMzl77CN3RLG@&hd)E+{p@#Hz|6H))0FfOtuuTya7pj`6y`v6Dz(bU5uprj{FTXvXe@K#2%XFR(I)G)69 zo-uC}`S93i-hUW_Z5Ts(GMXncu6fOvd4n{3{PK=FOuS5inp| zBKg{nfD&P&$v5K{qP8K7n*zvhXbqC-Ib-l7n)w-uOdm}Cg^;++iTvx6h*GP_*d~L> zcPJT;_9XIaC1V5LTeq2v7r@{Wnk79zXL_jcs8JK21@zQn*%4Nq068 zeKVNWybT~))}NBw_5(#KmKPAUJ4o9)!7xK6m3J8hjV1-s4u4oYHJ2*Kp_F+1OO;iz zMBh)NBbJHK+)U>mK7k7@7{$SKhl2r0nc@=O#{ZP0n{^z~`0EnyZ{VNA0g@?$v8uO8 zl5!@DsBpieBBdIU^k2rDLdh@94lw_qI#D4~LA>z^`*_+X+r>9QHl?vUfT%(n`eksB=Y z+h;(H+9tjhY|P2BV!v$U!wXq?Wiou&M^@Y1LNx3U_>joSQdYMJd#}DLtM3&+G(ao+ z!wxp2*UOsP^+vfamtAQuBbwPDyJB;OC@4yH&jamX*-Y6pTZmgWhm*FgBT}~E_`W=zs%WPiy|_Mf!x5&NPN{UZbE4rqP}xD*Gd?${R0=6TS>Hh3m368hRC`* z7f}jBHl=Zq-Y1EoIBxMkIC7|*i@gW~%H`bBAVi;|z$M2V#e1E(wM9CjPF7rc)C-~l zI}m~t_<`@iH1GrRs-PAZpYX*)EOB%;zn0(NWUUHe$ zNce7r+~$nqMBP7dTilVTu3Nc6BR;zx=SsqJ5tY{5_NFwjjw_RaX*S%>p++LNwx9@p z$L-v7Tm!+Tal3!sfrZbDMT)$zm)zd<0{l=0D!|KJMPJ;V=+2mD$yF3!`-$DSioJ7) z!nBNwcXRvP;*l-yxP!GlaeoK*s~XSsKfs+VaDy2yxHD1HiB=?W7ZM=M{7kV(X)tf# zZjOLF8i9K>K!vh*jC)cTM`ZJsdyy%HOzpWhV<1<_J?>L|6Z%dEUbYIkK4~Z~`w3k> z>qnmZx>|x0Z)sr-70P*AJLEdA5HRx-Y+H9c;>N z08gMoZ({T-WDE>qjNZVwzJ)RG2fjiIXU=TLSDgUks`+X|8PS?dF;ZkdM8Do+mdFg~kbX*|=Xa zN*EB2lPr5I4Day;Cps>;q(k80E{wS{!R1C5qLfa8XZ%0tt3L@|eK-WAJ)=3tMVMy0 z5=Qk9e3nEZ+&2gj76EXbREQh{rDL^1WcFnk;KmqO%Q*K5W4w-WgIb8(m`=1HLWt7C zz){D97;9^Eg^oh(y3UAxTfrnzp*<}YOu9WplkJ7Xd(G5`xR(FFAoqO6@Fzk_-y5jc z!9qqU5`5DTVdFt)JHJLeudy+E2s_`SS&fYmPN(ABQ{M<@2U?;`EMuJP!)PMm+!gqG z#XI3jQ7{7fn9!2!PGsdN{QZ6ex}m*r>vtr8zrXNkP%#2}sqkn6cJVkbw5l6%{CeR< z=3t`E6~bHFW^|Dr!n<_Dtu$_$7^yXwFUl=Wqu7?Z%DX>+46`ldy(i+dn-|CjCH?{T zUzNLU9D<^9OYU9$3%041$6maI=F(ZdeEK(#Ax)loaSgovtvvHW9=vA77-`3t5Gc>C zEFkJ|R-U`D6|zd?o5!94jqdqyc7EVa-=su=e14x%qiF)j+VZ^=!?xODWS!XXN`$5T*LNioqGX0=OI z%yPtgW}~BGj^bMsOPM0*O%=lPh+^S7Yn#xsT&qP-I>; zViq~5$R^P1j3TE7$1*)o6gQ*kWqhwFod<(QoMhD~lkr66qOp}!JQ8g`SF3z~tP8AXp3Kc#xx&<)?{KU9kP=!42 zjb^W7431+A*~GZojWHSTeSI#~i81SY#%%Zhu}KwL(H;l6p;|Ql6bk8CRm76l=*itq zsiM2V64P$gs@=UH^BYzA10E;2ugX`?$4q9e+J5IYEG<>-Uh@y+y{_8*b!u;Wf-(2C zs-kZyvbmOVbNEc%z;P6 zRtp;o5B2)_dk~J{>J5%42jxCum$v9q>YdG-ki1svy&D{fY}>1A9)n@8)W7++pk-UB zFML$NEnezNVJ^^ds`}FI=|tgv>gHyQ23@?>Ez9+&K?BsEl66F@R%`SbI7N}SX3&fj z)N)ZXq-!&ZMy*)X)?l{Rc%O*HSnj2n{tP~Jx6&Aofj;>f zW2oYP9K~o(*vBsN-)SDP2MtWoYh~GSDgeJH3brw+xE3)Yg`p-z&XvI+e5{=GH(`${mvcGT47_9StC zyH4ignqMWzfCVm$32QZHzV?oQ49!&+G@mJdX&$yNK|X$`d0+Sm!%~{&Llso*Y^C|I z&l*$lBdxpN&=h_F7ff{uo}{X|*OJX1WZm{yoar#(%X#cC5nql%sVl z_Qtd_sr~Sd9@;P`#At#}oAMa3Idr@>eG2CA@>OC{dxL+9_6Mtcbg|xyD~@P?Xbd1~ z^Im&E7>H`*q&-<2kBHW5Pu7pb@6|<&9$gsY>ljl)8PncrugybhrG|@IOM`Nb_VW^d zOiw+;ewOy;gSv_TWJBp_o%=p`A#J&C#==bO)lcW=24%-r=#n}-z#dMFp|2QMOwwf? zf&eo&>x$l5qNe-netevc*?x}h=Yg<&j)U%Ok5h>40$s@>SMl^zja1^{KrmseuF-7F2sqSz?fX9-`EXB*MA*j{we*guRqa7 zH0n=L zBawL3Trt>=cfE0?+mx2 delta 5266 zcmXY!cR&=^7RJx+&dj!1Rut?a7Q`MEv0%XtDvKyhRzax>QdF8C>?&X)u+o+yNK>&y zQOtu_qp^!``NHc^~h-zkbv2x#v6QyLZ;VmA-u=wHtphq;u0>i*;6%}0NmLew#ji0p_a`+~!X$}{r^yBMbu&H908NIsF*IU;v&Mq?C__Y9&@TNvl8 zW?VFcF?T0p$!e0e#u2G*5a)lIsP8#O!ym*IFCeN&ChiDFs~}NV;Lh3fE$R6 zi|yG#P}>8z5ZcHXre|EHV@$MVOj^dcx;ta;K*miqj8y@|{W=&E)Dm|u1w6_)D~U1S zCS&g0|ItVVF~ofcz=L2}~YqRk$}$A&=4CgRPxL|dDQFUEPYE$EMf zwbsPfVt@%{jPsW;#vlW2*OR9+mLSl!^O}CdAN-!k`6oubnfT+OM9YoD-_Ib5O(Ki3 zSwu6!%onBhk{a_X=^W!Un!KQuNNOOL>a9fIc#&)3Sfc5cH0#g-)E`f7qdyT1y+v*= zhlncYksC5avZIU}BS^Ypz8{br9nJm03F^(Jd8<&@ zBQ`M_-D26nA}M2T3S)@_dGQ!1@ZXHV){G(D7>yGd(;hRLt}^CWGM1XiEBzGI2_^4{ zHtuIE@g?s_1h6@deC(abNZ}*NC+jd#`w+%LFY+B#4_RI?22ZB>pOIb9;pA5iS+@=) zzs5C0>uN~fE{n)#FzJum5&7OBeG}fxHj(}k7+gdPqzy!Vw`hSH_no&f>UqXR8Er(J zE$_lE#9n9IsG$YFK*laLv{1kR`u(&p9p`~bv~af#(LysV{B(zCfhPro_a&Ot${2i< zq7O-tS~ab?Q%KZ#1f{(VAX?Rz(%ZuxR%KG9yo{*Be%jm>fps!bO^*rCXm$W?^FzdQ z3u(`kMEK4Z+Ou~h(bukY)Y<^eEe*TCP{5Z9V+Ti#{2@w;T8u>qgHZsR1WfXPjce7 zeMG%OBu#ahi0ZlIS|q+>*CcuR^e(P{W}JRQ^1OC0o^LPtM~KFB4FOWWORq6No-|m+tw6DE*`~`F0CY;c2O1DW;k5(d;JlG>XzA9@8M>4e60Egwe}Y zdgNvwBFjIdN8W*9H>KCE;OVHf(qBD>60I~#UtPF{x@nZYKXV4dK9NavFjCv4GK)T+ ziHf(&+R5CB;v;321~=G9XW1~{iA4QY%Z4Y^5^XvsbBGHj@;A!7C(lH=E&NmFvlksz zIq0JovYI{V$bB!_p_W#n(FedsL}RRF$Ce?Swf~Vd_J_D% zX=Fe5Ls*%|WX&B0!28Q&*R5nk^N-7}_dHJ&6e7DnYX`)4mp$)Qi0bv^r0tIpDcf;; zV_Pz=a9z%ROJsG8>vuC6zHj#Ch84pkR6Dro)$ND|`*Sn)Ab>5;xkW{Lh>~)+$i(GD zHhs9rY6Mbf;G*15BTpZ=6~mD2QF3nOWdyMGGnW{Is&y2&^ySC#UVHAF3JapH-MGx? zmqcaVL8w-y1K)!N@B{j>tPTfooU-4!%owbQn=C<;^`k6GOk>Y^BE_&s)!;~vlX|cc|F*`ZIyxRt-0-^^h7R} zpc!=Hwilihq1Zfb=fQ3G@F{bRqQv-;+np;Q4_iS6c#W$ajJvL`j3sKWwhY6&_Tp-H z`xAxB7*|ws`&{DCW$(EChwN~_hC8Chb3+@r(`7CQ;{kU*+LLH?0(U6^!i1%9mkIUQ zwUxWkX>kVBO9CtsvQ#(cc^ zjhB&XFK50qtpN<<%X3c=IZfuP(lEfFY`)qZ()jTFP8;-^r#HVV8-W)c2k~6{LePi< z-vV}F(R{|3uNiZ%F_u*EwNj*fzLMX23XI*x*LB)Tl$OTVd0inIr{eb=h(jh;^Vi2a zVkvmZ-#UC4*4N5ER2h&Ffq(254@oBTkDu-$3K-4*^#zMLq_Jl7A_34hE1(voa4!u^hUUN z9g?knCS0!wM)w>STGM9|bu+pNzrT0FGTuYDeHQKJH%E9pyb@X^3Xk&;z^seHQ#CZ+ za!hz>8bQ>(R(RVBGjQ)CyvszF#JUP!0&(6+CKv9O!myJW^UumH&%yqy$IJUXgk%fl z@&T^MOtHUwxZ!6=bwln_FcSU0=7!w8?l1FgEonl^H_PkJc@k}G zlz->;41O?9el&g=*4^!5m+G|6b{xJ82LNJ=#O_$ zyo(f5qKk07SurIOD`)vYh3jMl*kPSQ_rwF*!2uRH;zj)+g}-7T99^midb1bRU9VUg zh9zfNg2FJO10uF#3>wXtFDeYJ4=}@@6{Z_{Y_w_>IRxq&75Vj;Y4R;aWeb+(tQ19c zAOdzORn+vycjmlPGGE6Uvo?(YG6mm8-;iFqTAR^6}R=|E&DR3e`O3opSrjA=n}GK#IDT={6~Bci3G{8EeS{hC#( z`eeNDwMz5kJdyP@m9_IEr23W0fkS5WOH^Y|#-bgUG0rYvOggKY7>xJFN2(?l24I3O zRP%xsqo}*9LY9X@%Fm20fkt)^u$wXGlPcuJ0PJfx#^7+qkSxZv6ByIyGp-xTxFLlx z$NB%fpbD+E!bGmBBIA*v-e*)Xy%9iir7Cr2f7HlpRpvt;6PVkoDpiNUtF2U9?)(9* zid8$)AjOJHs-0~=H0@6@7Clzg4qgYtIK-H8Lv?x#GBVzpF=aMm$!T+nG zGbK?yBMTKWSEZgi<{R|N-)irN2ITR!+TX7k`S?X0x#tU9p_4i)z=tT>O�pfX(lI zb*dFw!pcjXT^@(cfWO-0Y7LqhQzxl&!*)U72z8z#T&8B0dQ&?@H|~MD+6B`x+Ky6h zcl#N(b4kX4RljrisJ7GqA#BiX&}X;7)bogs=t#kRnbs zMZi_YJBuy_ukfKBqWh_p_`8`ZdOk;FGrNlV6QEbFsK3}3&Hg|PdeDTKSBl}zl_=o` zarv@i*ygy1D`z4D(eK36UFa?A?c&;AUPRjaVumaWyNKuF`ppwCp#x&3U?vJV^M8J6 zBWxzrfn7-0&RF_PG$~P8vDRVwmG0Ps&9fS7oT&*PgGx={G#O7&1EZ#C zGCi>Ws)^N9wBj3GI%sxmf~3;Pns2+6;#WPHF{~%!>Uzz$R|1IIz1K7d!{BP8HK!}% zQ0ZFD>BjN+#b3rat2<*{17pSl#)0dfX>JBu;a6+1=8tR);5c0Kcj!$lh1)bAZe!`p z^wfNg_XE3{M_St(Yb{*w=0NBeintDs1Ig^Ie2e2DKc8Ws->hiXB$|_{5qfR@|v9{1@8gZ4R03p^f|470>5s4U3^*+&ISc0&PKWShe3;#?m9& z9c{n0PFJ*N!VB^LsMG%2aFxj3Zl3mD9MU~)t@bY-GRAzb{rdqvY@^ry6OOEQatnu+ zKh=NNagan3RsUP3ep4j2W==oT?5+ Date: Mon, 22 Feb 2021 01:13:19 +0100 Subject: [PATCH 22/51] Fixed finding suggestions using enchant and word selection without external dictionary --- manuskript/functions/spellchecker.py | 3 --- manuskript/ui/views/textEditView.py | 8 +++++--- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/manuskript/functions/spellchecker.py b/manuskript/functions/spellchecker.py index 1458890..19ba926 100644 --- a/manuskript/functions/spellchecker.py +++ b/manuskript/functions/spellchecker.py @@ -297,9 +297,6 @@ class EnchantDictionary(BasicDictionary): def getSuggestions(self, word): return self._dict.suggest(word) - def findSuggestions(self, text, start, end): - return [] - def isCustomWord(self, word): return self._dict.is_added(word) diff --git a/manuskript/ui/views/textEditView.py b/manuskript/ui/views/textEditView.py index d5ece2b..69f0150 100644 --- a/manuskript/ui/views/textEditView.py +++ b/manuskript/ui/views/textEditView.py @@ -490,14 +490,14 @@ class textEditView(QTextEdit): selectedWord = None # Check for any suggestions for corrections at the cursors position - if self._dict: + if self._dict != None: text = self.toPlainText() suggestions = self._dict.findSuggestions(text, cursor.selectionStart(), cursor.selectionEnd()) # Select the word under the cursor if necessary. # But only if there is no selection (otherwise it's impossible to select more text to copy/cut) - if (not cursor.hasSelection() and len(suggestions) == 0): + if not cursor.hasSelection() and len(suggestions) == 0: cursor.select(QTextCursor.WordUnderCursor) self.setTextCursor(cursor) @@ -507,8 +507,10 @@ class textEditView(QTextEdit): # Check if the selected word is misspelled and offer spelling # suggestions if it is. suggestions = self._dict.findSuggestions(text, cursor.selectionStart(), cursor.selectionEnd()) + elif cursor.hasSelection(): + selectedWord = cursor.selectedText() - if (len(suggestions) > 0 or selectedWord): + if len(suggestions) > 0 or selectedWord != None: valid = len(suggestions) == 0 if not valid: From 0cb65c452e6c52c697b9437ef714257224e25db5 Mon Sep 17 00:00:00 2001 From: TheJackiMonster Date: Mon, 22 Feb 2021 01:26:07 +0100 Subject: [PATCH 23/51] Fixed cursor selection without suggestions --- manuskript/ui/views/textEditView.py | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/manuskript/ui/views/textEditView.py b/manuskript/ui/views/textEditView.py index 69f0150..efbb8f3 100644 --- a/manuskript/ui/views/textEditView.py +++ b/manuskript/ui/views/textEditView.py @@ -482,12 +482,13 @@ class textEditView(QTextEdit): def createStandardContextMenu(self): popup_menu = QTextEdit.createStandardContextMenu(self) + cursor = self.textCursor() + selectedWord = cursor.selectedText() if cursor.hasSelection() else None + if not self.spellcheck: return popup_menu - cursor = self.textCursor() suggestions = [] - selectedWord = None # Check for any suggestions for corrections at the cursors position if self._dict != None: @@ -498,6 +499,8 @@ class textEditView(QTextEdit): # Select the word under the cursor if necessary. # But only if there is no selection (otherwise it's impossible to select more text to copy/cut) if not cursor.hasSelection() and len(suggestions) == 0: + old_position = cursor.position() + cursor.select(QTextCursor.WordUnderCursor) self.setTextCursor(cursor) @@ -507,8 +510,11 @@ class textEditView(QTextEdit): # Check if the selected word is misspelled and offer spelling # suggestions if it is. suggestions = self._dict.findSuggestions(text, cursor.selectionStart(), cursor.selectionEnd()) - elif cursor.hasSelection(): - selectedWord = cursor.selectedText() + + if len(suggestions) == 0: + cursor.clearSelection() + cursor.setPosition(old_position, QTextCursor.MoveAnchor) + self.setTextCursor(cursor) if len(suggestions) > 0 or selectedWord != None: valid = len(suggestions) == 0 @@ -523,7 +529,7 @@ class textEditView(QTextEdit): spell_menu = QMenu(self.tr('Spelling Suggestions'), self) spell_menu.setIcon(F.themeIcon("spelling")) - if (match.end > match.start and not selectedWord): + if (match.end > match.start and selectedWord == None): # Select the actual area of the match cursor = self.textCursor() cursor.setPosition(match.start, QTextCursor.MoveAnchor); From 22fdab3f4688cb0eb20ed2418a726446df7b1165 Mon Sep 17 00:00:00 2001 From: nagolinc Date: Sun, 21 Feb 2021 19:58:28 -0500 Subject: [PATCH 24/51] added 3 buttons to the textEditView that allow quickly adding new items add character takes parameter name --- manuskript/mainWindow.py | 8 ++- manuskript/models/characterModel.py | 20 ++++-- manuskript/models/plotModel.py | 16 +++-- manuskript/ui/views/textEditView.py | 102 ++++++++++++++++++++++------ 4 files changed, 111 insertions(+), 35 deletions(-) diff --git a/manuskript/mainWindow.py b/manuskript/mainWindow.py index 8772a88..3e2024b 100644 --- a/manuskript/mainWindow.py +++ b/manuskript/mainWindow.py @@ -378,8 +378,12 @@ class MainWindow(QMainWindow, Ui_MainWindow): else: self.chkPersoPOV.setCheckState(Qt.Unchecked) - self.chkPersoPOV.stateChanged.connect(self.lstCharacters.changeCharacterPOVState, F.AUC) - self.chkPersoPOV.setEnabled(len(self.mdlOutline.findItemsByPOV(ID)) == 0) + try: + self.chkPersoPOV.stateChanged.connect(self.lstCharacters.changeCharacterPOVState, F.AUC) + self.chkPersoPOV.setEnabled(len(self.mdlOutline.findItemsByPOV(ID)) == 0) + except TypeError: + #don't know what's up with this + pass ############################################################################### # PLOTS diff --git a/manuskript/models/characterModel.py b/manuskript/models/characterModel.py index 5cd3948..4480d3a 100644 --- a/manuskript/models/characterModel.py +++ b/manuskript/models/characterModel.py @@ -165,14 +165,17 @@ class characterModel(QAbstractItemModel): # ADDING / REMOVING ############################################################################### - def addCharacter(self, importance = 0): + def addCharacter(self, importance = 0, name="New character"): """ Creates a new character @param importance: the importance level of the character @return: the character """ - c = Character(model=self, name=self.tr("New character"), importance = importance) - self.beginInsertRows(QModelIndex(), len(self.characters), len(self.characters)) + if not name: + name="New Character" + c = Character(model=self, name=self.tr(name), importance = importance) + self.beginInsertRows(QModelIndex(), len( + self.characters), len(self.characters)) self.characters.append(c) self.endInsertRows() return c @@ -184,7 +187,8 @@ class characterModel(QAbstractItemModel): @return: nothing """ c = self.getCharacterByID(ID) - self.beginRemoveRows(QModelIndex(), self.characters.index(c), self.characters.index(c)) + self.beginRemoveRows(QModelIndex(), self.characters.index( + c), self.characters.index(c)) self.characters.remove(c) self.endRemoveRows() @@ -204,7 +208,8 @@ class characterModel(QAbstractItemModel): def addCharacterInfo(self, ID): c = self.getCharacterByID(ID) self.beginInsertRows(c.index(), len(c.infos), len(c.infos)) - c.infos.append(CharacterInfo(c, description="Description", value="Value")) + c.infos.append(CharacterInfo( + c, description="Description", value="Value")) self.endInsertRows() mainWindow().updatePersoInfoView() @@ -228,6 +233,7 @@ class characterModel(QAbstractItemModel): # CHARACTER ############################################################################### + class Character(): def __init__(self, model, name="No name", importance = 0): self._model = model @@ -245,6 +251,9 @@ class Character(): def name(self): return self._data[C.name.value] + def setName(self, value): + self._data[C.name.value] = value + def importance(self): return self._data[C.importance.value] @@ -316,6 +325,7 @@ class Character(): r.append((i.description, i.value)) return r + class CharacterInfo(): def __init__(self, character, description="", value=""): self.description = description diff --git a/manuskript/models/plotModel.py b/manuskript/models/plotModel.py index fe01bd0..068257f 100644 --- a/manuskript/models/plotModel.py +++ b/manuskript/models/plotModel.py @@ -73,7 +73,7 @@ class plotModel(QStandardItemModel): if i == row: importance = self.item(i, Plot.importance).text() return importance - return "0" # Default to "Minor" + return "0" # Default to "Minor" def getSubPlotTextsByID(self, plotID, subplotRaw): """Returns a tuple (name, summary) for the subplot whose raw in the model @@ -102,12 +102,15 @@ class plotModel(QStandardItemModel): # ADDING / REMOVING ############################################################################### - def addPlot(self): - p = QStandardItem(self.tr("New plot")) + def addPlot(self, name="New plot"): + if not name: + name="New Plot" + p = QStandardItem(self.tr(name)) _id = QStandardItem(self.getUniqueID()) importance = QStandardItem(str(0)) self.appendRow([p, _id, importance, QStandardItem("Characters"), QStandardItem(), QStandardItem(), QStandardItem("Resolution steps")]) + return p, _id def getUniqueID(self, parent=QModelIndex()): """Returns an unused ID""" @@ -147,8 +150,8 @@ class plotModel(QStandardItemModel): def data(self, index, role=Qt.DisplayRole): if index.parent().isValid() and \ - index.parent().column() == Plot.steps and \ - index.column() == PlotStep.meta: + index.parent().column() == Plot.steps and \ + index.column() == PlotStep.meta: if role == Qt.TextAlignmentRole: return Qt.AlignRight | Qt.AlignVCenter elif role == Qt.ForegroundRole: @@ -186,7 +189,8 @@ class plotModel(QStandardItemModel): # Don't know why, if summary is in third position, then drag/drop deletes it... parentItem.appendRow([p, _id, QStandardItem(), summary]) # Select last index - self.mw.lstSubPlots.setCurrentIndex(parent.child(self.rowCount(parent) - 1, 0)) + self.mw.lstSubPlots.setCurrentIndex( + parent.child(self.rowCount(parent) - 1, 0)) def removeSubPlot(self): """ diff --git a/manuskript/ui/views/textEditView.py b/manuskript/ui/views/textEditView.py index efbb8f3..15db55e 100644 --- a/manuskript/ui/views/textEditView.py +++ b/manuskript/ui/views/textEditView.py @@ -14,6 +14,8 @@ from manuskript.models import outlineModel, outlineItem from manuskript.ui.highlighters import BasicHighlighter from manuskript.ui import style as S from manuskript.functions import Spellchecker +from manuskript.models.characterModel import Character, CharacterInfo + class textEditView(QTextEdit): def __init__(self, parent=None, index=None, html=None, spellcheck=None, @@ -165,9 +167,9 @@ class textEditView(QTextEdit): def loadFontSettings(self): if self._fromTheme or \ - not self._index or \ - type(self._index.model()) != outlineModel or \ - self._column != Outline.text: + not self._index or \ + type(self._index.model()) != outlineModel or \ + self._column != Outline.text: return opt = settings.textEditor @@ -175,7 +177,7 @@ class textEditView(QTextEdit): f.fromString(opt["font"]) background = (opt["background"] if not opt["backgroundTransparent"] else "transparent") - foreground = opt["fontColor"] # if not opt["backgroundTransparent"] + foreground = opt["fontColor"] # if not opt["backgroundTransparent"] # else S.text # self.setFont(f) self.setStyleSheet("""QTextEdit{{ @@ -187,15 +189,16 @@ class textEditView(QTextEdit): {maxWidth} }} """.format( - bg=background, - foreground=foreground, - ff=f.family(), - fs="{}pt".format(str(f.pointSize())), - mTB = opt["marginsTB"], - mLR = opt["marginsLR"], - maxWidth = "max-width: {}px;".format(opt["maxWidth"]) if opt["maxWidth"] else "", - ) - ) + bg=background, + foreground=foreground, + ff=f.family(), + fs="{}pt".format(str(f.pointSize())), + mTB=opt["marginsTB"], + mLR=opt["marginsLR"], + maxWidth="max-width: {}px;".format( + opt["maxWidth"]) if opt["maxWidth"] else "", + ) + ) self._defaultFontSize = f.pointSize() # We set the parent background to the editor's background in case @@ -207,11 +210,11 @@ class textEditView(QTextEdit): QWidget#{name}{{ background: {bg}; }}""".format( - # We style by name, otherwise all inheriting widgets get the same - # colored background, for example context menu. - name=self.parent().objectName(), - bg=background, - )) + # We style by name, otherwise all inheriting widgets get the same + # colored background, for example context menu. + name=self.parent().objectName(), + bg=background, + )) cf = QTextCharFormat() # cf.setFont(f) @@ -472,18 +475,73 @@ class textEditView(QTextEdit): QAction.__init__(self, *args) self.triggered.connect(lambda x: self.correct.emit( - str(self.text()))) + str(self.text()))) def contextMenuEvent(self, event): # Based on http://john.nachtimwald.com/2009/08/22/qplaintextedit-with-in-line-spell-check/ popup_menu = self.createStandardContextMenu() popup_menu.exec_(event.globalPos()) + def newCharacter(self): + text = self.sender().data() + print("new character!", text) + # switch to character page + mw = F.mainWindow() + mw.tabMain.setCurrentIndex(mw.TabPersos) + # add character + c = mw.mdlCharacter.addCharacter(name=text) + # switch to character + item = mw.lstCharacters.getItemByID(c.ID()) + mw.lstCharacters.setCurrentItem(item) + + def newPlotItem(self): + text = self.sender().data() + print("new plot item!", text) + # switch to plot page + mw = F.mainWindow() + mw.tabMain.setCurrentIndex(mw.TabPlots) + # add character + p, ID = mw.mdlPlots.addPlot(text) + # switch to character + plotIndex = mw.mdlPlots.getIndexFromID(ID.text()) + # segfaults for some reason + # mw.lstSubPlots.setCurrentIndex(plotIndex) + + def newWorldItem(self): + text = self.sender().data() + print("new world item!", text) + mw = F.mainWindow() + mw.tabMain.setCurrentIndex(mw.TabWorld) + item = mw.mdlWorld.addItem(title=text) + mw.treeWorld.setCurrentIndex( + mw.mdlWorld.indexFromItem(item)) + def createStandardContextMenu(self): popup_menu = QTextEdit.createStandardContextMenu(self) cursor = self.textCursor() - selectedWord = cursor.selectedText() if cursor.hasSelection() else None + # add "new " buttons at end + if cursor.hasSelection(): + selectedWord = cursor.selectedText() if cursor.hasSelection() else None + # new character + charAction = QAction(self.tr("&New Character"), popup_menu) + charAction.setIcon(F.themeIcon("characters")) + charAction.triggered.connect(self.newCharacter) + charAction.setData(selectedWord) + popup_menu.insertAction(None, charAction) + # new plot item + plotAction = QAction(self.tr("&New Plot Item"), popup_menu) + plotAction.setIcon(F.themeIcon("plots")) + plotAction.triggered.connect(self.newPlotItem) + plotAction.setData(selectedWord) + popup_menu.insertAction(None, plotAction) + # new world item + worldAction = QAction(self.tr("&New World Item"), popup_menu) + worldAction.setIcon(F.themeIcon("world")) + worldAction.triggered.connect(self.newWorldItem) + worldAction.setData(selectedWord) + popup_menu.insertAction(None, worldAction) + if not self.spellcheck: return popup_menu @@ -518,7 +576,6 @@ class textEditView(QTextEdit): if len(suggestions) > 0 or selectedWord != None: valid = len(suggestions) == 0 - if not valid: # I think it should focus on one type of error at a time. match = suggestions[0] @@ -597,7 +654,8 @@ class textEditView(QTextEdit): elif self._dict.isCustomWord(selectedWord): popup_menu.insertSeparator(popup_menu.actions()[0]) # Adds: remove from dictionary - rmAction = QAction(self.tr("&Remove from custom dictionary"), popup_menu) + rmAction = QAction( + self.tr("&Remove from custom dictionary"), popup_menu) rmAction.setIcon(QIcon.fromTheme("list-remove")) rmAction.triggered.connect(self.rmWordFromDict) rmAction.setData(selectedWord) From 3effe5c7fad582c5319dc55efcdfbe215a39a2b6 Mon Sep 17 00:00:00 2001 From: TheJackiMonster Date: Mon, 22 Feb 2021 03:18:45 +0100 Subject: [PATCH 25/51] Added more consistency to the context menu --- manuskript/ui/views/textEditView.py | 23 +++++++++++++++++------ 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/manuskript/ui/views/textEditView.py b/manuskript/ui/views/textEditView.py index 15db55e..b361bdf 100644 --- a/manuskript/ui/views/textEditView.py +++ b/manuskript/ui/views/textEditView.py @@ -516,25 +516,24 @@ class textEditView(QTextEdit): mw.treeWorld.setCurrentIndex( mw.mdlWorld.indexFromItem(item)) - def createStandardContextMenu(self): - popup_menu = QTextEdit.createStandardContextMenu(self) - cursor = self.textCursor() + def appendContextMenuEntriesForWord(self, popup_menu, selectedWord): # add "new " buttons at end - if cursor.hasSelection(): - selectedWord = cursor.selectedText() if cursor.hasSelection() else None + if selectedWord != None: # new character charAction = QAction(self.tr("&New Character"), popup_menu) charAction.setIcon(F.themeIcon("characters")) charAction.triggered.connect(self.newCharacter) charAction.setData(selectedWord) popup_menu.insertAction(None, charAction) + # new plot item plotAction = QAction(self.tr("&New Plot Item"), popup_menu) plotAction.setIcon(F.themeIcon("plots")) plotAction.triggered.connect(self.newPlotItem) plotAction.setData(selectedWord) popup_menu.insertAction(None, plotAction) + # new world item worldAction = QAction(self.tr("&New World Item"), popup_menu) worldAction.setIcon(F.themeIcon("world")) @@ -542,9 +541,16 @@ class textEditView(QTextEdit): worldAction.setData(selectedWord) popup_menu.insertAction(None, worldAction) + return popup_menu + + def createStandardContextMenu(self): + popup_menu = QTextEdit.createStandardContextMenu(self) + + cursor = self.textCursor() + selectedWord = cursor.selectedText() if cursor.hasSelection() else None if not self.spellcheck: - return popup_menu + return self.appendContextMenuEntriesForWord(popup_menu, selectedWord) suggestions = [] @@ -574,8 +580,13 @@ class textEditView(QTextEdit): cursor.setPosition(old_position, QTextCursor.MoveAnchor) self.setTextCursor(cursor) + selectedWord = None + + popup_menu = self.appendContextMenuEntriesForWord(popup_menu, selectedWord) + if len(suggestions) > 0 or selectedWord != None: valid = len(suggestions) == 0 + if not valid: # I think it should focus on one type of error at a time. match = suggestions[0] From 7e9fbf27fbc8459e38d2325096b9d32db4a8b537 Mon Sep 17 00:00:00 2001 From: bentleyjoakes Date: Mon, 22 Feb 2021 21:18:56 +0100 Subject: [PATCH 26/51] Properly disconnect add person connection. --- manuskript/mainWindow.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/manuskript/mainWindow.py b/manuskript/mainWindow.py index 3e2024b..c3aff34 100644 --- a/manuskript/mainWindow.py +++ b/manuskript/mainWindow.py @@ -952,8 +952,8 @@ class MainWindow(QMainWindow, Ui_MainWindow): # Characters self.lstCharacters.setCharactersModel(self.mdlCharacter) self.tblPersoInfos.setModel(self.mdlCharacter) - self.btnAddPerso.clicked.connect(self.lstCharacters.addCharacter, F.AUC) try: + self.btnAddPerso.clicked.connect(self.lstCharacters.addCharacter, F.AUC) self.btnRmPerso.clicked.connect(self.lstCharacters.removeCharacter, F.AUC) self.btnPersoColor.clicked.connect(self.lstCharacters.choseCharacterColor, F.AUC) @@ -1110,7 +1110,7 @@ class MainWindow(QMainWindow, Ui_MainWindow): # Break connections for UI elements that were connected in makeConnections() # Characters - self.disconnectAll(self.btnAddPerso.clicked, self.mdlCharacter.addCharacter) + self.disconnectAll(self.btnAddPerso.clicked, self.lstCharacters.addCharacter) self.disconnectAll(self.btnRmPerso.clicked, self.lstCharacters.removeCharacter) self.disconnectAll(self.btnPersoColor.clicked, self.lstCharacters.choseCharacterColor) From 41ebf87471e9b79504a2e721e97f642f40a0375c Mon Sep 17 00:00:00 2001 From: Ling Samuel Date: Tue, 23 Feb 2021 16:53:49 +0800 Subject: [PATCH 27/51] setup signal handler to avoid accident data loss Signed-off-by: Ling Samuel --- manuskript/main.py | 38 ++++++++++++++++++++++++++++++-------- 1 file changed, 30 insertions(+), 8 deletions(-) diff --git a/manuskript/main.py b/manuskript/main.py index 48921d4..2988a89 100644 --- a/manuskript/main.py +++ b/manuskript/main.py @@ -4,6 +4,7 @@ import faulthandler import os import platform import sys +import signal import manuskript.ui.views.webView from PyQt5.QtCore import QLocale, QTranslator, QSettings, Qt @@ -15,11 +16,12 @@ from manuskript.version import getVersion faulthandler.enable() + def prepare(tests=False): app = QApplication(sys.argv) - app.setOrganizationName("manuskript"+("_tests" if tests else "")) + app.setOrganizationName("manuskript" + ("_tests" if tests else "")) app.setOrganizationDomain("www.theologeek.ch") - app.setApplicationName("manuskript"+("_tests" if tests else "")) + app.setApplicationName("manuskript" + ("_tests" if tests else "")) app.setApplicationVersion(getVersion()) print("Running manuskript version {}.".format(getVersion())) @@ -38,6 +40,7 @@ def prepare(tests=False): # Translation process appTranslator = QTranslator(app) + # By default: locale def tryLoadTranslation(translation, source): @@ -106,14 +109,16 @@ def prepare(tests=False): # Basic Windows 10 Dark Theme support. # Source: https://forum.qt.io/topic/101391/windows-10-dark-theme/4 - themeSettings = QSettings("HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Themes\\Personalize", QSettings.NativeFormat) + themeSettings = QSettings( + "HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Themes\\Personalize", + QSettings.NativeFormat) if themeSettings.value("AppsUseLightTheme") == 0: darkPalette = QPalette() - darkColor = QColor(45,45,45) - disabledColor = QColor(127,127,127) + darkColor = QColor(45, 45, 45) + disabledColor = QColor(127, 127, 127) darkPalette.setColor(QPalette.Window, darkColor) darkPalette.setColor(QPalette.WindowText, Qt.white) - darkPalette.setColor(QPalette.Base, QColor(18,18,18)) + darkPalette.setColor(QPalette.Base, QColor(18, 18, 18)) darkPalette.setColor(QPalette.AlternateBase, darkColor) darkPalette.setColor(QPalette.ToolTipBase, Qt.white) darkPalette.setColor(QPalette.ToolTipText, Qt.white) @@ -137,7 +142,7 @@ def prepare(tests=False): # This broke the Settings Dialog at one point... and then it stopped breaking it. # TODO: Why'd it break? Check if tooltips look OK... and if not, make them look OK. - #app.setStyleSheet("QToolTip { color: #ffffff; background-color: #2a82da; border: 1px solid white; }") + # app.setStyleSheet("QToolTip { color: #ffffff; background-color: #2a82da; border: 1px solid white; }") respectSystemDarkThemeSetting() @@ -166,8 +171,8 @@ def prepare(tests=False): return app, MW -def launch(app, MW = None): +def launch(app, MW=None): if MW == None: from manuskript.functions import mainWindow MW = mainWindow() @@ -207,6 +212,7 @@ def launch(app, MW = None): app.quit() console.kill() kernel.io_loop.stop() + app.lastWindowClosed.connect(console_cleanup) # Very important, IPython-specific step: this gets GUI event loop @@ -221,6 +227,20 @@ def launch(app, MW = None): qApp.exec_() qApp.deleteLater() + +def sigint_handler(sig, MW): + def handler(*args): + MW.close() + print(f'{sig} received, quit.') + + return handler + + +def setup_signal_handlers(MW): + signal.signal(signal.SIGINT, sigint_handler("SIGINT", MW)) + signal.signal(signal.SIGTERM, sigint_handler("SIGTERM", MW)) + + def run(): """ Run separates prepare and launch for two reasons: @@ -229,9 +249,11 @@ def run(): """ # Need to return and keep `app` otherwise it gets deleted. app, MW = prepare() + setup_signal_handlers(MW) # Separating launch to avoid segfault, so it seem. # Cf. http://stackoverflow.com/questions/12433491/is-this-pyqt-4-python-bug-or-wrongly-behaving-code launch(app, MW) + if __name__ == "__main__": run() From 1e52af54e2597fea60e6e1772417a4a17f0abe58 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mois=C3=A9s=20J?= Date: Sat, 21 Dec 2019 15:42:49 +0000 Subject: [PATCH 28/51] Add global search --- i18n/manuskript_ar_SA.ts | 948 +-- i18n/manuskript_de.ts | 769 ++- i18n/manuskript_en_GB.ts | 950 +-- i18n/manuskript_es.ts | 952 +-- i18n/manuskript_fa.ts | 948 +-- i18n/manuskript_fr.ts | 5456 +++++++++-------- i18n/manuskript_hu.ts | 952 +-- i18n/manuskript_id.ts | 948 +-- i18n/manuskript_it.ts | 952 +-- i18n/manuskript_ja.ts | 952 +-- i18n/manuskript_ko.ts | 952 +-- i18n/manuskript_nb_NO.ts | 952 +-- i18n/manuskript_nl.ts | 950 +-- i18n/manuskript_pl.ts | 952 +-- i18n/manuskript_pt_BR.ts | 952 +-- i18n/manuskript_pt_PT.ts | 952 +-- i18n/manuskript_ro.ts | 948 +-- i18n/manuskript_ru.ts | 952 +-- i18n/manuskript_sv.ts | 952 +-- i18n/manuskript_tr.ts | 948 +-- i18n/manuskript_uk.ts | 950 +-- i18n/manuskript_zh_CN.ts | 952 +-- i18n/manuskript_zh_HANT.ts | 948 +-- manuskript/enums.py | 18 +- manuskript/functions/__init__.py | 45 +- manuskript/mainWindow.py | 10 +- manuskript/models/characterModel.py | 58 +- manuskript/models/flatDataModelWrapper.py | 53 + manuskript/models/outlineItem.py | 56 +- manuskript/models/outlineModel.py | 19 +- manuskript/models/plotModel.py | 126 +- manuskript/models/searchFilter.py | 32 + manuskript/models/searchResultModel.py | 44 + manuskript/models/searchableItem.py | 38 + manuskript/models/searchableModel.py | 15 + manuskript/models/worldModel.py | 58 +- manuskript/searchLabels.py | 56 + manuskript/tests/models/test_searchFilter.py | 41 + .../tests/models/test_searchResultModel.py | 16 + manuskript/tests/test_functions.py | 50 + manuskript/tests/ui/test_searchMenu.py | 56 + .../searchResultHighlighters/__init__.py | 2 + .../abstractSearchResultHighlighter.py | 13 + ...abstractSpecificSearchResultHighlighter.py | 24 + .../characterSearchResultHighlighter.py | 38 + .../flatDataSearchResultHighlighter.py | 29 + .../outlineSearchResultHighlighter.py | 47 + .../plotSearchResultHighlighter.py | 32 + .../plotStepSearchResultHighlighter.py | 35 + .../searchResultHighlighter.py | 34 + .../widgetSelectionHighlighter.py | 91 + .../worldSearchResultHighlighter.py | 32 + manuskript/ui/mainWindow.py | 8 + manuskript/ui/mainWindow.ui | 12 + manuskript/ui/search.py | 217 +- manuskript/ui/searchMenu.py | 108 + manuskript/ui/search_ui.py | 14 +- manuskript/ui/search_ui.ui | 2 +- manuskript/ui/views/corkDelegate.py | 12 +- 59 files changed, 14969 insertions(+), 12759 deletions(-) create mode 100644 manuskript/models/flatDataModelWrapper.py create mode 100644 manuskript/models/searchFilter.py create mode 100644 manuskript/models/searchResultModel.py create mode 100644 manuskript/models/searchableItem.py create mode 100644 manuskript/models/searchableModel.py create mode 100644 manuskript/searchLabels.py create mode 100644 manuskript/tests/models/test_searchFilter.py create mode 100644 manuskript/tests/models/test_searchResultModel.py create mode 100644 manuskript/tests/ui/test_searchMenu.py create mode 100644 manuskript/ui/highlighters/searchResultHighlighters/__init__.py create mode 100644 manuskript/ui/highlighters/searchResultHighlighters/abstractSearchResultHighlighter.py create mode 100644 manuskript/ui/highlighters/searchResultHighlighters/abstractSpecificSearchResultHighlighter.py create mode 100644 manuskript/ui/highlighters/searchResultHighlighters/characterSearchResultHighlighter.py create mode 100644 manuskript/ui/highlighters/searchResultHighlighters/flatDataSearchResultHighlighter.py create mode 100644 manuskript/ui/highlighters/searchResultHighlighters/outlineSearchResultHighlighter.py create mode 100644 manuskript/ui/highlighters/searchResultHighlighters/plotSearchResultHighlighter.py create mode 100644 manuskript/ui/highlighters/searchResultHighlighters/plotStepSearchResultHighlighter.py create mode 100644 manuskript/ui/highlighters/searchResultHighlighters/searchResultHighlighter.py create mode 100644 manuskript/ui/highlighters/searchResultHighlighters/widgetSelectionHighlighter.py create mode 100644 manuskript/ui/highlighters/searchResultHighlighters/worldSearchResultHighlighter.py create mode 100644 manuskript/ui/searchMenu.py diff --git a/i18n/manuskript_ar_SA.ts b/i18n/manuskript_ar_SA.ts index fe42a73..6e921ec 100644 --- a/i18n/manuskript_ar_SA.ts +++ b/i18n/manuskript_ar_SA.ts @@ -467,7 +467,7 @@ Use that if you get YAML related error. MainWindow - + General @@ -507,7 +507,7 @@ Use that if you get YAML related error. - + Name @@ -517,7 +517,7 @@ Use that if you get YAML related error. - + Summary @@ -527,7 +527,7 @@ Use that if you get YAML related error. - + Summary: @@ -537,17 +537,17 @@ Use that if you get YAML related error. - + One paragraph - + One page - + Full @@ -577,7 +577,7 @@ Use that if you get YAML related error. - + Next @@ -597,312 +597,312 @@ Use that if you get YAML related error. - + Filter - + Basic info - + Importance - + Motivation - + Goal - + Conflict - + Epiphany - + <html><head/><body><p align="right">One sentence<br/>summary</p></body></html> - + <html><head/><body><p align="right">One paragraph<br/>summary</p></body></html> - + Notes - + Detailed info - + Plots - + Plot - + Character(s) - + Description وصف - + Result - + Resolution steps - + World - + Populates with empty data - + More - + Source of passion - + Source of conflict - + Outline - + Editor - + Debug - + FlatData - + Persos - + Labels - + &File - + &Recent - + &Help - + &Tools - + &Edit - + &View - + &Mode - + &Cheat sheet - + Sea&rch - + &Navigation - + &Open - + Ctrl+O - + &Save - + Ctrl+S - + Sa&ve as... - + Ctrl+Shift+S - + &Quit - + Ctrl+Q - + &Show help texts - + Ctrl+Shift+B - + &Spellcheck - + F9 - + &Labels... - + &Status... - + Tree - + &Simple - + &Fiction - + Index cards - + S&ettings - + F8 - + &Close project - + Co&mpile - + F6 - + &Frequency Analyzer @@ -912,562 +912,605 @@ Use that if you get YAML related error. - + &About - + About Manuskript - + Manuskript مانيوسكريبت - + Project {} saved. - + WARNING: Project {} not saved. - + Project {} loaded. - + Project {} loaded with some errors: - + * {} wasn't found in project file. - + Project {} loaded with some errors. - + (~{} pages) - + Words: {}{} - + Book summary - + Project tree - + Metadata - + Story line - + Enter information about your book, and yourself. - + The basic situation, in the form of a 'What if...?' question. Ex: 'What if the most dangerous evil wizard wasn't able to kill a baby?' (Harry Potter) - + Take time to think about a one sentence (~50 words) summary of your book. Then expand it to a paragraph, then to a page, then to a full summary. - + Create your characters. - + Develop plots. - + Build worlds. Create hierarchy of broad categories down to specific details. - + Create the outline of your masterpiece. - + Write. - + Debug info. Sometimes useful. - + Dictionary - + Nothing - + POV - + Label - + Progress - + Compile - + Icon color - + Text color - + Background color - + Icon - + Text - + Background - + Border - + Corner - + Add plot step - + &Import… - + F7 - + &Copy - + Ctrl+C - + C&ut - + Ctrl+X - + &Paste - + Ctrl+V - + &Split… - + Ctrl+Shift+K - + Sp&lit at cursor - + Ctrl+K - + Ctrl+M - + Ctrl+D - + Del - + &Move Up - + Ctrl+Shift+Up - + M&ove Down - + Ctrl+Shift+Down - + Dupl&icate - + &Delete - + &Rename - + F2 - + Organi&ze - + M&erge - + &Format - + &Header - + &Level 1 (setext) - + Ctrl+Alt+1 - + Level &2 - + Ctrl+Alt+2 - + Level &1 (atx) - + Ctrl+1 - + L&evel 2 - + Ctrl+2 - + Level &3 - + Ctrl+3 - + Level &4 - + Ctrl+4 - + Level &5 - + Ctrl+5 - + Level &6 - + Ctrl+6 - + &Bold - + Ctrl+B - + &Italic - + Ctrl+I - + &Strike - + &Verbatim - + Su&perscript - + Ctrl++ - + Subsc&ript - + Ctrl+- - + Co&mment block - + Ctrl+Shift+C - + Clear &formats - + Ctrl+0 - + &Comment line(s) - + &Ordered list - + &Unordered list - + B&lockquote - + Remove selected plot step(s) - + The file {} does not exist. Has it been moved or deleted? - + Install {}{} to use spellcheck - + {} has no installed dictionaries - + {}{} is not installed - + Save project? - + Save changes to project "{}" before closing? - + Your changes will be lost if you don't save them. - + PyQt / Qt versions 5.11 and 5.12 are known to cause a crash which might result in a loss of data. - + PyQt {} and Qt {} are in use. - + Proceed with import at your own risk + + + Allow POV + + + + + Search + + + + + Ctrl+F + + + + + F3 + + + + + Shift+F3 + + + + + Situation + + + + + Status + الحالة + + + + Search + + + No results found + + Settings @@ -1482,7 +1525,7 @@ Use that if you get YAML related error. - + Revisions @@ -1492,17 +1535,17 @@ Use that if you get YAML related error. - + Labels - + Status الحالة - + Fullscreen @@ -1517,658 +1560,709 @@ Use that if you get YAML related error. - + Loading - + Automatically load last project on startup - + Saving - + Automatically save every - + minutes. - + If no changes during - + seconds. - + Save on project close - + <html><head/><body><p>If you check this option, your project will be saved as one single file. Easier to copy or backup, but does not allow collaborative editing, or versioning.<br/>If this is unchecked, your project will be saved as a folder containing many small files.</p></body></html> - + Save to one single file - + Revisions are a way to keep track of modifications. For each text item, it stores any changes you make to the main text, allowing you to see and restoring previous versions. - + Keep revisions - + S&mart remove - + Keep: - + Smart remove allows you to keep only a certain number of revisions. It is strongly recommended to use it, lest you file will becomes full of thousands of insignificant changes. - + revisions per day for the last month - + revisions per minute for the last 10 minutes - + revisions per hour for the last day - + revisions per 10 minutes for the last hour - + revisions per week till the end of time - + Views settings - + Tree - + Colors - + Icon color: - + Nothing - + POV - + Label - + Progress - + Compile - + Text color: - + Background color: - + Folders - + Show ite&m count - + Show summary - + &Nothing - + Text - + Outline - + Visible columns - + Goal - + Word count - + Percentage - + Title - + Index cards - + Item colors - + Border color: - + Corner color: - + Background - + Color: - + Ctrl+S - + Image: - + Text editor - + Font - + Family: - + Size: - + Misspelled: - + Background: - + Paragraphs - + Line spacing: تباعد الأسطر: - + Single - + 1.5 lines - + Double - + Proportional - + % - + Tab width: - + px - + Indent 1st line - + Spacing: - + New - + Edit - + Delete - + Theme name: - + Apply - + Cancel - + Window Background - + Text Background - + Text Options - + Paragraph Options - + Type: - + No Image - + Tiled - + Centered - + Stretched - + Scaled - + Zoomed - + Opacity: - + Position: - + Left - + Center - + Right - + Width: - + Corner radius: - + Margins: - + Padding: - + Font: - + Style - + Cursor - + Use block insertion of - + Alignment: - + Justify - + Alignment - + Icon Size - + TextLabel - + Disable blinking - + Text area - + Max width - + Left/Right margins: - + Top/Bottom margins: - + S&how progress - + Show summar&y - + Show p&rogress - + Old st&yle - + Transparent - + Restore defaults - + Style: - + Language: - + Font size: حجم الخط: - + Restarting Manuskript ensures all settings take effect. - + Show &word count - + &Show word count - + &New style - + Typewriter mode - + Focus mode - + None - + Sentence - + Line - + Paragraph - + <p><b>The Revisions feature has been at the source of many reported issues. In this version of Manuskript it has been turned off by default for new projects in order to provide the best experience.</b></p><p>Why aren't these issues fixed already? <a href="https://www.theologeek.ch/manuskript/contribute/">We need your help to make Manuskript better!</a></p> + + + Show progress in chars next + to words + + + + + Char/Word Counter + + + + + Count spaces as chars + + + + + Show char c&ount + + + + + Sho&w char count + + SpellAction - + Spelling Suggestions - + &Add to dictionary - + &Remove from custom dictionary + + + &New Character + + + + + &New Plot Item + + + + + &New World Item + + + + + &Correction Suggestions + + + + + &Correction Suggestion + + about @@ -2270,17 +2364,12 @@ Use that if you get YAML related error. characterModel - - New character - - - - + Name - + Value @@ -2288,17 +2377,17 @@ Use that if you get YAML related error. characterTreeView - + Main - + Secondary - + Minor @@ -2414,12 +2503,12 @@ Use that if you get YAML related error. corkDelegate - + One line summary - + Full summary @@ -3001,13 +3090,28 @@ Use that if you get YAML related error. - - {} words / {} + + {} words - - {} words + + ({} chars) {} words / {} + + + + + {} words / {} + + + + + {} chars + + + + + {} chars @@ -3214,12 +3318,12 @@ Use that if you get YAML related error. outlineItem - + {} words / {} ({}) - + {} words @@ -3441,37 +3545,32 @@ Use that if you get YAML related error. plotModel - - New plot - - - - + Name - + Meta - + New step - + Main - + Secondary - + Minor @@ -3818,111 +3917,56 @@ Use that if you get YAML related error. Search for... - - - Search in: - - - - - All - - - - - Title - - - - - Text - - - - - Summary - - - - - Notes - - - - - POV - - - - - Status - الحالة - - - - Label - - - - - Options: - - - - - Case sensitive - - settingsWindow - + New status - + New label - + newtheme - + New theme - + (read-only) - + Open Image - + Image files (*.jpg; *.jpeg; *.png) - + Error خطأ - + Unable to load selected file - + Unable to add selected image: {} @@ -4032,7 +4076,7 @@ Use that if you get YAML related error. textEditView - + Various @@ -4334,212 +4378,212 @@ Use that if you get YAML related error. worldModel - + New item - + Fantasy world building - + Physical - + Climate - + Topography - + Astronomy - + Wild life - + Flora - + History - + Races - + Diseases - + Cultural - + Customs - + Food - + Languages - + Education - + Dresses - + Science - + Calendar - + Bodily language - + Ethics - + Religion - + Government - + Politics - + Gender roles - + Music and arts - + Architecture - + Military - + Technology - + Courtship - + Demography - + Transportation - + Medicine - + Magic system - + Rules - + Organization - + Magical objects - + Magical places - + Magical races - + Important places - + Important objects - + Natural resources diff --git a/i18n/manuskript_de.ts b/i18n/manuskript_de.ts index ea3953d..001c32b 100644 --- a/i18n/manuskript_de.ts +++ b/i18n/manuskript_de.ts @@ -1,6 +1,5 @@ - - + Export @@ -54,82 +53,82 @@ LaTeX muss installiert sein. - + Error Fehler - + Standalone document (not just a fragment) Eigenständiges Dokument (nicht nur ein Fragment) - + Include a table of contents. Erzeuge ein Inhaltsverzeichnis. - + Number of sections level to include in TOC: Anzahl der Ebenen im Inhaltsverzeichnis: - + Typographically correct output Typographisch korrekte Ausgabe - + Normalize the document (cleaner) Automatische Bereinigung des Dokuments - + Specify the base level for headers: Lege die Basisebene für Überschriften fest: - + Use reference-style links instead of inline links Verwende Referenz-Verweise, anstatt Inline-Verweise - + Use ATX-style headers Verwende ATX-Headers - + Self-contained HTML files, with no dependencies Eigenständige HTML-Dateien, ohne Abhängigkeiten - + Use <q> tags for quotes in HTML Nutzt <p>-Tags für Zitate in HTML - + LaTeX engine used to produce the PDF. LaTeX-Engine wird für Erzeugung des PDFs genutzt. - + Paper size: Seitengröße: - + Font size: Schriftgröße: - + Class: Klasse: - + Line spacing: Zeilenabstand: @@ -209,14 +208,14 @@ interpretiert werden können, wie zum Beispiel <a href='www.fountain.io& durchsucht oder kontrolliert werden können. - + Disable YAML metadata block. Use that if you get YAML related error. Entfernt den YAML-Metadaten-Block. Nutze das, wenn du YAML-Errors bekommst. - + Convert to ePUB3 Konvertierung nach ePUB3 @@ -228,8 +227,8 @@ Nutze das, wenn du YAML-Errors bekommst. {} - - Choose output file… + + Choose output file… Ausgabe-Datei wählen… @@ -337,12 +336,12 @@ Nutze das, wenn du YAML-Errors bekommst. Import - + Markdown import Markdown-Import - + <b>Info:</b> A very simple parser that will go through a markdown document and create items for each titles.<br/>&nbsp; @@ -351,12 +350,12 @@ Nutze das, wenn du YAML-Errors bekommst. für jeden Titel eigene Einträge anlegt.<br/>&nbsp; - + Folder import Ordnerimport - + <p><b>Info:</b> Imports a whole directory structure. Folders are added as folders, and plaintext documents within (you chose which ones by extension) @@ -369,47 +368,47 @@ Nutze das, wenn du YAML-Errors bekommst. <p>Es werden nur Textdateien unterstützt (keine Bilder, Binärdateien oder andere).</p> - + Include only those extensions: Nur diese Dateinamenerweiterungen hinzufügen: - + Comma separated values Komma-getrennte Werte - + Sort items by name Elemente nach Namen sortieren - + Import folder then files Erst Ordner, danach Dateien importieren - + OPML Import OPML importieren - + File open failed. Öffnen der Datei fehlgeschlagen. - + This does not appear to be a valid OPML file. Dies scheint keine gültige OPML-Datei zu sein. - + Pandoc import Pandoc importieren - + <b>Info:</b> Manuskript can import from <b>markdown</b> or <b>OPML</b>. Pandoc will convert your document to either (see option below), and @@ -424,17 +423,17 @@ Nutze das, wenn du YAML-Errors bekommst. <br/>&nbsp; - + Import using: Importieren mit: - + Wrap lines: Zeilenumbruch: - + <p>Should pandoc create cosmetic / non-semantic line-breaks?</p><p> <b>auto</b>: wraps at 72 characters.<br> @@ -448,27 +447,27 @@ Nutze das, wenn du YAML-Errors bekommst. <b>preserve</b>: versucht, Umbrüche aus dem Originaldokument zu erhalten.</p> - + Mind Map Import Mind Map importieren - + This does not appear to be a valid Mind Map file. Dies scheint keine gültige Mind Map-Datei zu sein. - + Mind Map import Mind Map importieren - + Import tip as: Hinweis importieren als: - + Untitled Ohne Titel @@ -724,7 +723,7 @@ Nutze das, wenn du YAML-Errors bekommst. Quelle des Konflikts - + Outline Struktur @@ -779,147 +778,147 @@ Nutze das, wenn du YAML-Errors bekommst. &Bearbeiten - + &View &Ansicht - + &Mode &Modus - + &Cheat sheet &Spickzettel - + Sea&rch Su&che - + &Navigation &Navigation - + &Open &Öffnen - + Ctrl+O Strg+O - + &Save &Speichern - + Ctrl+S Strg+S - + Sa&ve as... Sp&eichern als ... - + Ctrl+Shift+S Strg+Shift+S - + &Quit &Schließen - + Ctrl+Q Strg+Q - + &Show help texts &Zeige Hilfetext - + Ctrl+Shift+B Strg+Shift+B - + &Spellcheck &Rechtschreibprüfung - + F9 F9 - + &Labels... &Labels... - + &Status... &Status ... - + Tree Baum - + &Simple &Einfach - + &Fiction &Fiktionaler Text - + Index cards Karteikarten - + S&ettings E&instellungen - + F8 F8 - + &Close project &Projekt schließen - + Co&mpile Ko&mpilieren - + F6 F6 - + &Frequency Analyzer &Häufigkeitsanalyse @@ -929,196 +928,196 @@ Nutze das, wenn du YAML-Errors bekommst. Buchinformationen - + &About &Über - + About Manuskript Über Manuskript - + Manuskript Manuskript - + Project {} saved. Projekt {} gespeichert. - + WARNING: Project {} not saved. WARNUNG: Projekt {} nicht gespeichert. - + Project {} loaded. Projekt {} geladen. - + Project {} loaded with some errors: Projekt {} mit einigen Fehlern geladen: - + * {} wasn't found in project file. * {} konnte in der Projektdatei nicht gefunden werden. - + Project {} loaded with some errors. Projekt {} wurde mit einigen Fehlern geladen. - + (~{} pages) (~{} Seiten) - + Words: {}{} Wörter: {}{} - + Book summary Buchzusammenfassung - + Project tree Projektbaum - + Metadata Metadaten - + Story line Handlung - + Enter information about your book, and yourself. Gib Informationen über dein Buch und dich ein. - + The basic situation, in the form of a 'What if...?' question. Ex: 'What if the most dangerous evil wizard wasn't able to kill a baby?' (Harry Potter) Die Ausgangssituation, in Form von 'Was wäre wenn ...?" Fragen. Beispiel: "Was wäre wenn der gefährlichste böse Zauberer nicht einmal ein Baby töten könnte?" (Harry Potter) - + Take time to think about a one sentence (~50 words) summary of your book. Then expand it to a paragraph, then to a page, then to a full summary. Nehmen Sie sich Zeit, sich einen Satz auszudenken (~15 Wörter), der Ihr Buch zusammenfasst. Dann erweitern Sie ihn zu einem Absatz, dann zu einer ganzen Seite und abschließend zu einer ausführlichen Zusammenfassung. - + Create your characters. Erschaffen Sie Ihre Charaktere. - + Develop plots. Entwickle Handlungsstränge. - + Build worlds. Create hierarchy of broad categories down to specific details. Erbaue Welten. Erstelle Hierachien breitgefächterter Kategorien, bis hin zu spezifischen Details. - + Create the outline of your masterpiece. Arbeiten Sie die Struktur Ihres Meisterwerks aus. - + Write. Schreibe. - + Debug info. Sometimes useful. Debuginformationen. Manchmal hilfreich. - + Dictionary Wörterbuch - + Nothing Keine - + POV Perspektive - + Label Label - + Progress Fortschritt - + Compile Kompiliere - + Icon color Iconfarbe - + Text color Textfarbe - + Background color Hintergrundfarbe - + Icon Icon - + Text Text - + Background Hintergrund - + Border Rahmen - + Corner Ecke @@ -1128,127 +1127,127 @@ Nutze das, wenn du YAML-Errors bekommst. Füge Handlungsschritt hinzu (Strg+Enter) - - &Import… + + &Import… &Importieren - + F7 F7 - + &Copy &Kopieren - + Ctrl+C Strg+C - + C&ut A&usschneiden - + Ctrl+X Strg+X - + &Paste &Einfügen - + Ctrl+V Strg+V - - &Split… + + &Split… &Aufteilen - + Ctrl+Shift+K Strg+Umschalt+K - + Sp&lit at cursor Am Mauszeiger aufteilen - + Ctrl+K Strg+K - + Ctrl+M Strg+M - + Ctrl+D Strg+D - + Del Löschen - + &Move Up &Nach oben - + Ctrl+Shift+Up Strg ➕ Umschalttaste ➕ Aufwärts - + M&ove Down N&ach unten - + Ctrl+Shift+Down Strg+Umschalt+Abwärts - + Dupl&icate Dupl&izieren - + &Delete &Löschen - + &Rename &Umbenennen - + F2 F2 - + Organi&ze Verwal&ten - + M&erge Zusamm&enführen @@ -1263,172 +1262,172 @@ Nutze das, wenn du YAML-Errors bekommst. Übersc&hrift - + &Level 1 (setext) &Level 1 (setext) - + Ctrl+Alt+1 Strg+Alt+1 - + Level &2 Level &2 - + Ctrl+Alt+2 Strg+Alt+2 - + Level &1 (atx) Level &1 (atx) - + Ctrl+1 Strg+1 - + L&evel 2 L&evel 2 - + Ctrl+2 Strg+2 - + Level &3 Level &3 - + Ctrl+3 Strg+3 - + Level &4 Level &4 - + Ctrl+4 Strg+4 - + Level &5 Level &5 - + Ctrl+5 Ctrl+5 - + Level &6 Level &6 - + Ctrl+6 Strg+6 - + &Bold &Fett - + Ctrl+B Strg+B - + &Italic &Kursiv - + Ctrl+I Strg+I - + &Strike Durchge&strichen - + &Verbatim &Wörtlich - + Su&perscript H&ochgestellt - + Ctrl++ Strg++ - + Subsc&ript &Tiefgestellt - + Ctrl+- Strg+- - + Co&mment block Ko&mmentarblock - + Ctrl+Shift+C Strg+Umschalt+C - + Clear &formats Formatierungen &löschen - + Ctrl+0 Strg+0 - + &Comment line(s) &Kommentarzeile(n) - + &Ordered list Ge&ordnete Liste - + &Unordered list &Ungeordnete Liste - + B&lockquote &Blockzitat @@ -1438,52 +1437,52 @@ Nutze das, wenn du YAML-Errors bekommst. Ausgewählte Plot-Schritt(e) entfernen - + The file {} does not exist. Has it been moved or deleted? Die Datei {} existiert nicht. Wurde sie verschoben oder gelöscht? - + Install {}{} to use spellcheck Installlieren Sie {}{}, für eine Rechtschreibprüfung - + {} has no installed dictionaries Für {} sind keine Wörterbücher installiert - + {}{} is not installed {}{} ist nicht installiert - + Save project? Projekt speichern? - + Save changes to project "{}" before closing? Änderungen an Projekt "{}" vor dem Schließen speichern? - + Your changes will be lost if you don't save them. Wenn Sie nicht speichern, gehen Ihre Änderungen verloren. - + PyQt / Qt versions 5.11 and 5.12 are known to cause a crash which might result in a loss of data. Es ist bekannt, dass PyQt / Qt in den Versionen 5.11 und 5.12 Abstürze verursacht, wodurch Daten verloren gehen könnten. - + PyQt {} and Qt {} are in use. Sie verwenden PyQt {} und Qt {}. - + Proceed with import at your own risk Wenn Sie fortfahren, könnte das einen Absturz und/oder Datenverlust zur Folge haben @@ -1492,6 +1491,44 @@ Nutze das, wenn du YAML-Errors bekommst. Allow POV POV erlauben + + + Search + + + + + Ctrl+F + + + + + F3 + F3 + + + + Shift+F3 + + + + + Situation + + + + + Status + Status + + + + Search + + + No results found + + Settings @@ -2206,30 +2243,45 @@ Wörtern an SpellAction - + Spelling Suggestions Korrekturvorschläge - + &Add to dictionary Zum Wörterbuch &hinzufügen - + &Remove from custom dictionary Aus dem Wörterbuch &entfernen - + &Correction Suggestions &Korrekturvorschläge - + &Correction Suggestion &Korrekturvorschlag + + + &New Character + + + + + &New Plot Item + + + + + &New World Item + + about @@ -2331,17 +2383,12 @@ Wörtern an characterModel - - New character - Neuer Charakter - - - + Name Name - + Value Wert @@ -2349,17 +2396,17 @@ Wörtern an characterTreeView - + Main Primär - + Secondary Sekundär - + Minor Nebensächlich @@ -2475,12 +2522,12 @@ Wörtern an corkDelegate - + One line summary Inhaltsangabe in einem Satz - + Full summary Vollständige Zusammenfassung @@ -2723,12 +2770,12 @@ Wörtern an - Replace ... with … + Replace ... with … ... ersetzen durch … - Replace --- with — + Replace --- with — --- ersetzen durch — @@ -3290,12 +3337,12 @@ Wörtern an outlineItem - + {} words / {} ({}) {} Wörter / {} ({}) - + {} words {} Wörter @@ -3303,17 +3350,17 @@ Wörtern an pandocSettings - + General Allgemein - + Table of Content Inhaltsverzeichnis - + Custom settings for {} Benutzerdefinierte Einstellungen für {} @@ -3517,37 +3564,32 @@ Wörtern an plotModel - - New plot - Neuer Handlungsstrang - - - + Name Name - + Meta Meta - + New step Neuer Schritt - + Main Primär - + Secondary Sekundär - + Minor Nebensächlich @@ -3555,22 +3597,22 @@ Wörtern an plotTreeView - + Main Primär - + Secondary Sekundär - + Minor Nebensächlich - + **Plot:** {} **Handlungsstrang:** {} @@ -3634,12 +3676,12 @@ Wörtern an references - + Not a reference: {}. Keine Referenz: {}. - + Unknown reference: {}. Unbekannte Referenz: {}. @@ -3684,112 +3726,112 @@ Wörtern an Notizen: - + Basic info Baisinformationen - + Detailed info Detailierte Informationen - + POV of: POV von: - + Go to {}. Gehe zu {}. - + Description Beschreibung - + Result Ergebnis - + Characters Charaktere - + Resolution steps Lösungsschritte - + Passion Leidenschaft - + Conflict Konflikt - + <b>Unknown reference:</b> {}. <b>Unbekannte Referenz:</b> {}. - + Folder: <b>{}</b> Ordner:<b>{}</b> - + Text: <b>{}</b> Text:<b>{}</b> - + Character: <b>{}</b> Charakter:<b>{}</b> - + Plot: <b>{}</b> Plot:<b>{}</b> - + World: <b>{name}</b>{path} Welt:<b>{name}</b>{path} - + Referenced in: Referenziert in: - + Motivation Motivation - + Goal Ziel - + Epiphany Schicksal - + Short summary Kurzzusammenfassung - + Longer summary Lange Zusammenfassung @@ -3807,12 +3849,12 @@ Wörtern an Optionen - + Restore Wiederherstellen - + Delete Löschen @@ -3872,12 +3914,12 @@ Wörtern an {} Sekunden zuvor - + Line {}: Zeile {}: - + Clear all Leeren @@ -3894,111 +3936,56 @@ Wörtern an Search for... Suche nach ... - - - Search in: - Suche in: - - - - All - Alles - - - - Title - Titel - - - - Text - Text - - - - Summary - Zusammenfassung - - - - Notes - Notizen - - - - POV - Perspektive - - - - Status - Status - - - - Label - Beschriftung - - - - Options: - Optionen: - - - - Case sensitive - Groß-/Kleinschreibung berücksichtigen - settingsWindow - + New status Neuer Status - + New label Neue Beschriftung - + newtheme Neues Thema - + New theme Neues Thema - + (read-only) (schreibgeschützt) - + Open Image Bild öffnen - + Image files (*.jpg; *.jpeg; *.png) Bilddateien - + Error Fehler - + Unable to load selected file Laden der Datei fehlgeschlagen - + Unable to add selected image: {} Hinzufügen des Bildes fehgeschlagen: @@ -4123,7 +4110,7 @@ Wörtern an textEditView - + Various Verschiedenes @@ -4222,27 +4209,27 @@ Wörtern an Leer - + Novel Roman - + Novella Novelle - + Short Story Kurzgeschichte - + Research paper Forschungsbericht - + Demo projects Demo Projekte @@ -4277,147 +4264,147 @@ Wörtern an Erstellen - + Open project Öffne Projekt - + Manuskript project (*.msk);;All files (*) Manuskript Projekt (*.msk);;Alle Dateien (*) - + Save project as... Speichern als ... - + Manuskript project (*.msk) Manuskript Projekt (*.msk) - + Manuskript Manuskript - + Create New Project Erzeuge neues Projekt - + Warning Warnung - + Overwrite existing project {} ? Existierendes Projekt {} überschreiben? - + Empty fiction Leere Geschichte - + Chapter Kapitel - + Scene Szene - + Trilogy Trilogie - + Book Buch - + Section Absatz - + Empty non-fiction Leeres Sachbuch - + words each. Wörter. - + of von - + Text Text - + Something Irgendwas - + <b>Total:</b> {} words (~ {} pages) <b>Gesamt:</b> {} Wörter (~ {} Seiten) - + Fiction Geschichte - + Non-fiction Sachtext - + Idea Idee - + Note Notiz - + Research Recherche - + TODO ToDo - + First draft Erster Entwurf - + Second draft Zweiter Entwurf - + Final Endgültig @@ -4425,212 +4412,212 @@ Wörtern an worldModel - + New item Neues Element - + Fantasy world building Bau einer Fantasy-Welt - + Physical Geographie - + Climate Klima - + Topography Relief - + Astronomy Astronomie - + Wild life Fauna - + Flora Flora - + History Geschichte - + Races Arten - + Diseases Krankheiten - + Cultural Kultur - + Customs Bräuche - + Food Essen - + Languages Sprachen - + Education Erziehung - + Dresses Kleidung - + Science Wissenschaft - + Calendar Zeitrechnung - + Bodily language Körpersprache - + Ethics Ethik - + Religion Religion - + Government Regierung - + Politics Politik - + Gender roles Geschlechterrollen - + Music and arts Musik und Kunst - + Architecture Architektur - + Military Militär - + Technology Technologie - + Courtship Balzverhalten - + Demography Demographie - + Transportation Transportmittel - + Medicine Medizin - + Magic system Magiesystem - + Rules Regeln - + Organization Organisation - + Magical objects Magische Objekte - + Magical places Magische Orte - + Magical races Magische Wesen - + Important places Wichtige Orte - + Important objects Wichtige Objekte - + Natural resources Natürliche Ressourcen diff --git a/i18n/manuskript_en_GB.ts b/i18n/manuskript_en_GB.ts index 08fc102..b2a7eb1 100644 --- a/i18n/manuskript_en_GB.ts +++ b/i18n/manuskript_en_GB.ts @@ -456,7 +456,7 @@ Use that if you get YAML related error. MainWindow - + General @@ -501,7 +501,7 @@ Use that if you get YAML related error. - + Name @@ -511,7 +511,7 @@ Use that if you get YAML related error. - + Summary @@ -521,7 +521,7 @@ Use that if you get YAML related error. - + Summary: @@ -531,17 +531,17 @@ Use that if you get YAML related error. - + One paragraph - + One page - + Full @@ -571,7 +571,7 @@ Use that if you get YAML related error. - + Next @@ -591,872 +591,915 @@ Use that if you get YAML related error. - + Filter - + Basic info - + Motivation - + Goal - + Conflict - + Epiphany - + <html><head/><body><p align="right">One sentence<br/>summary</p></body></html> - + <html><head/><body><p align="right">One paragraph<br/>summary</p></body></html> - + Importance - + Notes - + Detailed info - + Plots - + Plot - + Character(s) - + Description - + Result - + Resolution steps - + Add plot step - + Remove selected plot step(s) - + World - + Populates with empty data - + More - + Source of passion - + Source of conflict - + Outline - + Editor - + Debug - + FlatData - + Persos - + Labels - + &File - + &Recent - + &Help - + &Tools - + &Edit - + &Format - + &Header - + &View - + &Mode - + Organi&ze Organi&se - + &Cheat sheet - + Sea&rch - + &Navigation - + &Open - + Ctrl+O - + &Save - + Ctrl+S - + Sa&ve as... - + Ctrl+Shift+S - + &Quit - + Ctrl+Q - + &Show help texts - + Ctrl+Shift+B - + &Spellcheck - + F9 - + &Labels... - + &Status... - + Tree - + &Simple - + &Fiction - + Index cards - + S&ettings - + F8 - + &Close project - + Co&mpile - + F6 - + &Frequency Analyzer &Frequency Analyser - + &About - + About Manuskript - + &Import… - + F7 - + &Copy - + Ctrl+C - + C&ut - + Ctrl+X - + &Paste - + Ctrl+V - + &Split… - + Ctrl+Shift+K - + Sp&lit at cursor - + Ctrl+K - + M&erge - + Ctrl+M - + Dupl&icate - + &Delete - + Del - + &Move Up - + Ctrl+Shift+Up - + M&ove Down - + Ctrl+Shift+Down - + &Rename - + F2 - + &Level 1 (setext) - + Ctrl+Alt+1 - + Level &2 - + Ctrl+Alt+2 - + Level &1 (atx) - + Ctrl+1 - + L&evel 2 - + Ctrl+2 - + Level &3 - + Ctrl+3 - + Level &4 - + Ctrl+4 - + Level &5 - + Ctrl+5 - + Level &6 - + Ctrl+6 - + &Bold - + Ctrl+B - + &Italic - + Ctrl+I - + &Strike - + &Verbatim - + Su&perscript - + Ctrl++ - + Subsc&ript - + Ctrl+- - + Co&mment block - + Ctrl+Shift+C - + Clear &formats - + Ctrl+0 - + &Comment line(s) - + Ctrl+D - + &Ordered list - + &Unordered list - + B&lockquote - + The file {} does not exist. Has it been moved or deleted? - + Manuskript - + Project {} saved. - + WARNING: Project {} not saved. - + Project {} loaded. - + Project {} loaded with some errors: - + * {} wasn't found in project file. - + Project {} loaded with some errors. - + (~{} pages) - + Words: {}{} - + Book summary - + Project tree - + Metadata - + Story line - + Enter information about your book, and yourself. - + The basic situation, in the form of a 'What if...?' question. Ex: 'What if the most dangerous evil wizard wasn't able to kill a baby?' (Harry Potter) - + Take time to think about a one sentence (~50 words) summary of your book. Then expand it to a paragraph, then to a page, then to a full summary. - + Create your characters. - + Develop plots. - + Build worlds. Create hierarchy of broad categories down to specific details. - + Create the outline of your masterpiece. - + Write. - + Debug info. Sometimes useful. - + Dictionary - + Install {}{} to use spellcheck - + {} has no installed dictionaries - + {}{} is not installed - + Nothing - + POV - + Label - + Progress - + Compile - + Icon color Icon colour - + Text color Text colour - + Background color Background colour - + Icon - + Text - + Background - + Border - + Corner - + Save project? - + Save changes to project "{}" before closing? - + Your changes will be lost if you don't save them. - + PyQt / Qt versions 5.11 and 5.12 are known to cause a crash which might result in a loss of data. - + PyQt {} and Qt {} are in use. - + Proceed with import at your own risk + + + Allow POV + + + + + Search + + + + + Ctrl+F + + + + + F3 + + + + + Shift+F3 + + + + + Situation + + + + + Status + + + + + Search + + + No results found + + Settings @@ -1471,7 +1514,7 @@ Use that if you get YAML related error. - + Revisions @@ -1481,17 +1524,17 @@ Use that if you get YAML related error. - + Labels - + Status - + Fullscreen @@ -1506,658 +1549,709 @@ Use that if you get YAML related error. - + Style: - + Language: - + Font size: - + Restarting Manuskript ensures all settings take effect. - + Loading - + Automatically load last project on startup - + Saving - + Automatically save every - + minutes. - + If no changes during - + seconds. - + Save on project close - + <html><head/><body><p>If you check this option, your project will be saved as one single file. Easier to copy or backup, but does not allow collaborative editing, or versioning.<br/>If this is unchecked, your project will be saved as a folder containing many small files.</p></body></html> - + Save to one single file - + Revisions are a way to keep track of modifications. For each text item, it stores any changes you make to the main text, allowing you to see and restoring previous versions. - + Keep revisions - + S&mart remove - + Keep: - + Smart remove allows you to keep only a certain number of revisions. It is strongly recommended to use it, lest you file will becomes full of thousands of insignificant changes. - + revisions per day for the last month - + revisions per minute for the last 10 minutes - + revisions per hour for the last day - + revisions per 10 minutes for the last hour - + revisions per week till the end of time - + Views settings - + Tree - + Colors Colours - + Icon color: Icon colour: - + Nothing - + POV - + Label - + Progress - + Compile - + Text color: Text colour: - + Background color: Background colour: - + Icon Size - + TextLabel - + Folders - + Show ite&m count - + Show &word count - + S&how progress - + Show summar&y - + &Nothing - + Text - + &Show word count - + Show p&rogress - + Show summary - + Outline - + Visible columns - + Goal - + Word count - + Percentage - + Title - + Index cards - + Background - + Color: Colour: - + Ctrl+S - + Image: - + Style - + Old st&yle - + &New style - + Item colors Item colours - + Border color: Border colour: - + Corner color: Corner colour: - + Text editor - + Background: - + Transparent - + Restore defaults - + Font - + Family: - + Size: - + Misspelled: - + Text area - + Max width - + px - + Left/Right margins: - + Top/Bottom margins: - + Paragraphs - + Alignment: - + Left - + Center Centre - + Right - + Justify - + Line spacing: - + Single - + 1.5 lines - + Double - + Proportional - + % - + Tab width: - + Indent 1st line - + Spacing: - + Cursor - + Use block insertion of - + Disable blinking - + Typewriter mode - + Focus mode - + None - + Sentence - + Line - + Paragraph - + New - + Edit - + Delete - + Theme name: - + Apply - + Cancel - + Window Background - + Text Background - + Text Options - + Paragraph Options - + Type: - + No Image - + Tiled - + Centered Centred - + Stretched - + Scaled - + Zoomed - + Opacity: - + Position: - + Width: - + Corner radius: - + Margins: - + Padding: - + Font: - + Alignment - + <p><b>The Revisions feature has been at the source of many reported issues. In this version of Manuskript it has been turned off by default for new projects in order to provide the best experience.</b></p><p>Why aren't these issues fixed already? <a href="https://www.theologeek.ch/manuskript/contribute/">We need your help to make Manuskript better!</a></p> + + + Show progress in chars next + to words + + + + + Char/Word Counter + + + + + Count spaces as chars + + + + + Show char c&ount + + + + + Sho&w char count + + SpellAction - + Spelling Suggestions - + &Add to dictionary - + &Remove from custom dictionary + + + &New Character + + + + + &New Plot Item + + + + + &New World Item + + + + + &Correction Suggestions + + + + + &Correction Suggestion + + about @@ -2259,17 +2353,12 @@ Use that if you get YAML related error. characterModel - - New character - - - - + Name - + Value @@ -2277,17 +2366,17 @@ Use that if you get YAML related error. characterTreeView - + Main - + Secondary - + Minor @@ -2403,12 +2492,12 @@ Use that if you get YAML related error. corkDelegate - + One line summary - + Full summary @@ -2990,14 +3079,29 @@ Use that if you get YAML related error. - - {} words / {} + + {} words - - {} words - + + ({} chars) {} words / {} + + + + + {} words / {} + + + + + {} chars + + + + + {} chars + @@ -3203,12 +3307,12 @@ Use that if you get YAML related error. outlineItem - + {} words / {} ({}) - + {} words @@ -3435,37 +3539,32 @@ Use that if you get YAML related error. plotModel - - New plot - - - - + Name - + Meta - + New step - + Main - + Secondary - + Minor @@ -3812,112 +3911,57 @@ Use that if you get YAML related error. Search for... - - - Search in: - - - - - All - - - - - Title - - - - - Text - - - - - Summary - - - - - Notes - - - - - POV - - - - - Status - - - - - Label - - - - - Options: - - - - - Case sensitive - - settingsWindow - + Open Image - + Image files (*.jpg; *.jpeg; *.png) - + Error - + Unable to load selected file - + Unable to add selected image: {} - + New status - + New label - + newtheme - + New theme - + (read-only) @@ -4026,7 +4070,7 @@ Use that if you get YAML related error. textEditView - + Various @@ -4328,212 +4372,212 @@ Use that if you get YAML related error. worldModel - + New item - + Fantasy world building - + Physical - + Climate - + Topography - + Astronomy - + Natural resources - + Wild life - + Flora - + History - + Races - + Diseases - + Cultural - + Customs - + Food - + Languages - + Education - + Dresses - + Science - + Calendar - + Bodily language - + Ethics - + Religion - + Government - + Politics - + Gender roles - + Music and arts - + Architecture - + Military - + Technology - + Courtship - + Demography - + Transportation - + Medicine - + Magic system - + Rules - + Organization Organisation - + Magical objects - + Magical places - + Magical races - + Important places - + Important objects diff --git a/i18n/manuskript_es.ts b/i18n/manuskript_es.ts index 6e3766b..fbc2697 100644 --- a/i18n/manuskript_es.ts +++ b/i18n/manuskript_es.ts @@ -483,7 +483,7 @@ Use that if you get YAML related error. MainWindow - + General General @@ -523,7 +523,7 @@ Use that if you get YAML related error. Autor - + Name Nombre @@ -533,7 +533,7 @@ Use that if you get YAML related error. Email - + Summary Resumen @@ -543,7 +543,7 @@ Use that if you get YAML related error. Situación: - + Summary: Resumen: @@ -553,17 +553,17 @@ Use that if you get YAML related error. Una frase - + One paragraph Un párrafo - + One page Una página - + Full Completo @@ -593,7 +593,7 @@ Use that if you get YAML related error. Resumen completo - + Next Siguiente @@ -613,481 +613,481 @@ Use that if you get YAML related error. Nombres - + Filter Filtro - + Basic info Informaciónes básicas - + Importance Importancia - + Motivation Motivación - + Goal Objetivo - + Conflict Conflicto - + Epiphany Epifanía - + <html><head/><body><p align="right">One sentence<br/>summary</p></body></html> <html><head/><body><p align="right">Resumen de<br/>una frase</p></body></html> - + <html><head/><body><p align="right">One paragraph<br/>summary</p></body></html> <html><head/><body><p align="right">Resumen de<br/>un párrafo</p></body></html> - + Notes Notas - + Detailed info Informaciones detalladas - + Plots Tramas - + Plot Trama - + Character(s) Personaje(s) - + Description Descripción - + Result Resultado - + Resolution steps Pasos para la resolución - + World Mundo - + Populates with empty data Rellena con datos vacíos - + More Más - + Source of passion Fuente de pasión - + Source of conflict Causa de conflicto - + Outline Esquema - + Editor Redacción - + Debug Depurar - + FlatData Datos Planos - + Persos Personajes - + Labels Etiquetas - + &File &Archivo - + &Recent &Recientes - + &Mode &Modo - + &Help A&yuda - + &Tools &Herramientas - + &View &Ver - + &Cheat sheet &Guía rápida - + Sea&rch &Buscar - + &Navigation &Navegación - + &Open &Abrir - + Ctrl+O Ctrl+O - + &Save &Guardar - + Ctrl+S Ctrl+S - + Sa&ve as... G&uardar Como... - + Ctrl+Shift+S Ctrl+Shift+S - + &Quit &Cerrar - + Ctrl+Q Ctrl+Q - + &Show help texts &Ver textos de ayuda - + Ctrl+Shift+B Ctrl+Shift+B - + &Spellcheck &Corrector Ortográfico - + F9 F9 - + &Labels... &Etiquetas... - + &Status... E&stado... - + Tree Árbol - + &Simple &Sencillo - + Index cards Fichas - + S&ettings &Preferencias - + F8 F8 - + &Close project &Cerrar proyecto - + Co&mpile C&ompilar - + F6 F6 - + &Frequency Analyzer A&nalizador de frecuencias - + &Fiction &Ficción - + Project {} saved. Proyecto {} guardado. - + Project {} loaded. Proyecto {} cargado. - + Project {} loaded with some errors: Proyecto {} cargado con algunos errores: - + * {} wasn't found in project file. * {} no se encontró en el archivo del proyecto. - + Project {} loaded with some errors. Proyecto {} cargado con algunos errores. - + (~{} pages) (~{} páginas) - + Words: {}{} Palabras: {}{} - + Book summary Resumen del libro - + Project tree Árbol del proyecto - + Metadata Metadata - + Story line Historia - + Enter information about your book, and yourself. Introduzca información acerca de tu libro y sobre ti mismo. - + The basic situation, in the form of a 'What if...?' question. Ex: 'What if the most dangerous evil wizard wasn't able to kill a baby?' (Harry Potter) La situación básica en la forma de una pregunta tipo "¿Que pasaría sí...?'. Ej:"¿Que pasaría si el más peligroso hechicero malvado no pudiera ser capaz de matar un bebe?" (Harry Potter) - + Take time to think about a one sentence (~50 words) summary of your book. Then expand it to a paragraph, then to a page, then to a full summary. Tómate tu tiempo para pensar en resumen de una linea (apróximadamente 50 palabras) de tu libro. Después expándelo hasta un párrafo, después hasta una página, y por último hasta un resumen completo. - + Create your characters. Crea tus personajes. - + Develop plots. Desarrolla las tramas. - + Create the outline of your masterpiece. Crea el esquema de tu obra maestra. - + Write. Escribe. - + Debug info. Sometimes useful. Depura la información. A veces es útil. - + Dictionary Diccionario - + Nothing Ninguno - + POV - + Label Etiqueta - + Progress Progreso - + Compile Compilar - + Icon color Color del icono - + Text color Color del texto - + Background color Color del Fondo - + Icon Icono - + Text Texto - + Background Fondo - + Border Borde - + Corner Esquina - + &Edit &Editar @@ -1097,395 +1097,438 @@ Use that if you get YAML related error. Informaciones del libro - + &About &Acerca de - + About Manuskript Acerca de Manuskript - + Manuskript Manuskript - + WARNING: Project {} not saved. ADVERTENCIA: Proyecto {} no guardado. - + Build worlds. Create hierarchy of broad categories down to specific details. Construir mundos. Crear una jerarquía desde categorías amplias hasta detalles especifícos. - + Add plot step Añadir un paso a la trama (CTRL+Intro) - + &Import… &Importar… - + F7 F7 - + &Copy &Copiar - + Ctrl+C Ctrl+C - + C&ut C&ortar - + Ctrl+X Ctrl+X - + &Paste &Pegar - + Ctrl+V Ctrl+V - + &Split… Dividir… - + Ctrl+Shift+K Ctrl+Mayús+K - + Sp&lit at cursor Di&vidir en el cursor - + Ctrl+K Ctrl+K - + Ctrl+M Ctrl+M - + Ctrl+D Ctrl+D - + Del Supr - + &Move Up Subir - + Ctrl+Shift+Up Ctrl+Mayús+Arriba - + M&ove Down Bajar - + Ctrl+Shift+Down Ctrl+Mayús+Abajo - + Dupl&icate Dupl&icar - + &Delete Eliminar - + &Rename &Renombrar - + F2 F2 - + Organi&ze Organi&zar - + M&erge Combinar - + &Format &Formato - + &Header &Encabezado - + &Level 1 (setext) &Nivel 1 (setext) - + Ctrl+Alt+1 Ctrl+Alt+1 - + Level &2 Nivel &2 - + Ctrl+Alt+2 Ctrl+Alt+2 - + Level &1 (atx) Nivel &1 (atx) - + Ctrl+1 Ctrl+1 - + L&evel 2 N&ivel 2 - + Ctrl+2 Ctrl+2 - + Level &3 Nivel &3 - + Ctrl+3 Ctrl+3 - + Level &4 Nivel &4 - + Ctrl+4 Ctrl+4 - + Level &5 Nivel &5 - + Ctrl+5 Ctrl+5 - + Level &6 Nivel &6 - + Ctrl+6 Ctrl+6 - + &Bold &Negrita - + Ctrl+B Ctrl+B - + &Italic &Cursiva - + Ctrl+I Ctrl+I - + &Strike &Tachado - + &Verbatim &Literal - + Su&perscript Su&períndice - + Ctrl++ Ctrl++ - + Subsc&ript Subín&dice - + Ctrl+- Ctrl+- - + Co&mment block Co&mentario en bloque - + Ctrl+Shift+C Ctrl+Shift+C - + Clear &formats Eliminar &formatos - + Ctrl+0 Ctrl+0 - + &Comment line(s) &Línea de comentario(s) - + &Ordered list &Lista ordenada - + &Unordered list &Lista no ordenada - + B&lockquote C&ita en bloque - + Remove selected plot step(s) Eliminar el paso(s) seleccionado de la trama - + The file {} does not exist. Has it been moved or deleted? El archivo {} no existe. ¿Ha sido movido o eliminado? - + Install {}{} to use spellcheck - + {} has no installed dictionaries - + {}{} is not installed - + Save project? - + Save changes to project "{}" before closing? - + Your changes will be lost if you don't save them. - + PyQt / Qt versions 5.11 and 5.12 are known to cause a crash which might result in a loss of data. - + PyQt {} and Qt {} are in use. - + Proceed with import at your own risk + + + Allow POV + + + + + Search + + + + + Ctrl+F + + + + + F3 + F3 + + + + Shift+F3 + + + + + Situation + + + + + Status + Estado + + + + Search + + + No results found + + Settings @@ -1500,7 +1543,7 @@ Use that if you get YAML related error. General - + Revisions Revisiones @@ -1510,17 +1553,17 @@ Use that if you get YAML related error. Vistas - + Labels Etiquetas - + Status Estado - + Fullscreen Pantalla completa @@ -1535,658 +1578,709 @@ Use that if you get YAML related error. Preferencias de la aplicación - + Loading Cargando - + Automatically load last project on startup Cargar automáticamente el último proyecto al iniciar - + Saving Guardando - + Automatically save every Guardar automáticamente cada - + minutes. minutos. - + If no changes during Si no hay cambios durante - + seconds. segundos. - + Save on project close Guardar al salir - + Revisions are a way to keep track of modifications. For each text item, it stores any changes you make to the main text, allowing you to see and restoring previous versions. Las revisiones son una manera de realizar un seguimiento de las modificaciones. Para cada elemento de texto, almacena cualquier cambio que hagas en el texto principal, permitiéndote ver y restaurar versiones anteriores. - + Keep revisions Almacenar revisiones - + S&mart remove B&orrado inteligente - + Keep: Almacenar: - + Smart remove allows you to keep only a certain number of revisions. It is strongly recommended to use it, lest you file will becomes full of thousands of insignificant changes. El borrado inteligente te permite almacenar solo un cierto número de revisiones. Se recomienda encarecidamente que lo uses, para que tu archivo no se llene de miles de cambios insignificantes. - + revisions per day for the last month revisiones por día durante el último mes - + revisions per minute for the last 10 minutes revisiones por minuto durante los últimos 10 minutos - + revisions per hour for the last day revisiones por hora durante el último día - + revisions per 10 minutes for the last hour revisiones cada 10 minutos durante la última hora - + revisions per week till the end of time revisiones por semana hasta el fin de los tiempos - + Views settings Preferencias de visualización - + Tree Árbol - + Colors Colores - + Icon color: Color del icono: - + Nothing Ninguno - + POV - + Label Etiqueta - + Progress Progreso - + Compile Compilar - + Text color: Color del texto: - + Background color: Color del fondo: - + Folders Carpetas - + Show ite&m count Ver número de ele&mentos - + Show summary Ver resumen - + Text Texto - + Outline Esquema - + Visible columns Columnas visibles - + Goal Objetivo - + Word count Número de palabras - + Percentage Porcentaje - + Title Título - + Index cards Fichas - + Item colors Color de los elementos - + Border color: Color del borde: - + Corner color: Color de la esquina: - + Background Fondo - + Color: Color: - + Ctrl+S Ctrl+S - + Image: Imagen: - + Text editor Editor de texto - + Font Fuente - + Family: Familia: - + Size: Tamaño: - + Misspelled: Errata: - + Background: Fondo: - + Paragraphs Párrafos - + Line spacing: Espaciado de linea: - + Single Sencilla - + 1.5 lines 1.5 lineas - + Double Doble - + Proportional Proporcional - + % % - + Tab width: Anchura del tabulador: - + px px - + Indent 1st line Indentar la 1ª linea - + Spacing: Espaciado: - + New Nuevo - + Edit Editar - + Delete Borrar - + Theme name: Nombre del tema: - + Apply Aplicar - + Cancel Cancelar - + Window Background Fondo de la ventana - + Text Background Fondo del texto - + Text Options Opciones de texto - + Paragraph Options Opciones de párrafo - + Type: Tipo: - + No Image Sin Imagen - + Tiled Tileado - + Centered Centrado - + Stretched Ajustado - + Scaled Escalado - + Zoomed Agrandado - + Opacity: Opacidad: - + Position: Posición: - + Left Izquierda - + Center Centro - + Right Derecha - + Width: Anchura: - + Corner radius: Radio de la esquina: - + Margins: Margenes: - + Padding: Relleno: - + Font: Fuente: - + <html><head/><body><p>If you check this option, your project will be saved as one single file. Easier to copy or backup, but does not allow collaborative editing, or versioning.<br/>If this is unchecked, your project will be saved as a folder containing many small files.</p></body></html> <html><head/><body><p>Si marcas esta opción, tu proyecto se grabará en un único archivo. Más facil de copiar o guardar, pero no permitirá edición colaborativa o distintas versiones.<br/>Si está desmarcada, tu proyecto se grabará como una carpeta conteniendo multiples archivos pequeños.</p></body></html> - + Save to one single file Guardar en un único fichero - + &Nothing &Ninguno - + Style Estilo - + Cursor Cursor - + Use block insertion of Usar bloque de inserción de - + Alignment: Alineamiento: - + Justify Justificación - + Alignment Alineamiento - + Icon Size Tamaño de icono - + TextLabel EtiquetadeTexto - + Disable blinking Deshabilitar parpadeo - + Text area Área de texto - + Max width Anchura máxima - + Left/Right margins: Márgenes izqdo./derecho: - + Top/Bottom margins: Márgenes superior/inferior: - + S&how progress Mostrar progreso - + Show summar&y Mostrar resumen - + Show p&rogress Muestra p&rogreso - + Old st&yle Estilo antiguo - + Transparent Transparente - + Restore defaults Restaura valores por defecto - + Style: Estilo: - + Language: Idioma: - + Font size: Tamaño de fuente: - + Restarting Manuskript ensures all settings take effect. Es posible que deba reiniciar manuskript para que esas preferencias surtan efecto de manera adecuada y completa. - + Show &word count Mostrar &recuento de palabras - + &Show word count &Mostrar recuento de palabras - + &New style &Nuevo estilo - + Typewriter mode Modo máquina de escribir - + Focus mode Modo concentrado - + None Ninguno - + Sentence Frase - + Line Línea - + Paragraph Párrafo - + <p><b>The Revisions feature has been at the source of many reported issues. In this version of Manuskript it has been turned off by default for new projects in order to provide the best experience.</b></p><p>Why aren't these issues fixed already? <a href="https://www.theologeek.ch/manuskript/contribute/">We need your help to make Manuskript better!</a></p> + + + Show progress in chars next + to words + + + + + Char/Word Counter + + + + + Count spaces as chars + + + + + Show char c&ount + + + + + Sho&w char count + + SpellAction - + Spelling Suggestions Sugerencias de Ortografía - + &Add to dictionary &Añadir al diccionario - + &Remove from custom dictionary &Eliminar del diccionario personal + + + &New Character + + + + + &New Plot Item + + + + + &New World Item + + + + + &Correction Suggestions + + + + + &Correction Suggestion + + about @@ -2288,17 +2382,12 @@ Use that if you get YAML related error. characterModel - - New character - Nuevo personaje - - - + Name Nombre - + Value Valor @@ -2306,17 +2395,17 @@ Use that if you get YAML related error. characterTreeView - + Main Principal - + Secondary Secundario - + Minor Menor @@ -2432,12 +2521,12 @@ Use that if you get YAML related error. corkDelegate - + One line summary Resumen de una línea - + Full summary Resumen completo @@ -3019,15 +3108,30 @@ Use that if you get YAML related error. Alt+Arriba - - {} words / {} - {} palabras / {} - - - + {} words {} palabras + + + ({} chars) {} words / {} + + + + + {} words / {} + + + + + {} chars + + + + + {} chars + + markdownSettings @@ -3232,12 +3336,12 @@ Use that if you get YAML related error. outlineItem - + {} words / {} ({}) {} palabras / {} ({}) - + {} words {} palabras @@ -3459,37 +3563,32 @@ Use that if you get YAML related error. plotModel - - New plot - Nueva trama - - - + Name Nombre - + Meta Meta - + New step Siguiente paso - + Main Principal - + Secondary Secundario - + Minor Menor @@ -3831,61 +3930,6 @@ Use that if you get YAML related error. Form Formulario - - - Search in: - Buscar en: - - - - All - Todo - - - - Title - Título - - - - Text - Texto - - - - Summary - Resumen - - - - Notes - Notas - - - - POV - - - - - Status - Estado - - - - Label - Etiqueta - - - - Options: - Opciones: - - - - Case sensitive - Distingue mayúsculas y minúsculas - Search for... @@ -3895,52 +3939,52 @@ Use that if you get YAML related error. settingsWindow - + New status Nuevo estado - + New label Nueva etiqueta - + newtheme nuevotema - + New theme Nuevo Tema - + (read-only) (sólo lectura) - + Open Image - + Image files (*.jpg; *.jpeg; *.png) - + Error Error - + Unable to load selected file - + Unable to add selected image: {} @@ -4064,7 +4108,7 @@ Use that if you get YAML related error. textEditView - + Various Varios @@ -4366,212 +4410,212 @@ Use that if you get YAML related error. worldModel - + New item Nuevo elemento - + Fantasy world building Construcción del mundo de fantasía - + Physical Fisico - + Climate Clima - + Topography Topografía - + Astronomy Astronomía - + Wild life Vida salvaje - + Flora Flora - + History Historia - + Races Razas - + Diseases Enfermedades - + Cultural Cultura - + Customs Aduanas - + Food Comida - + Languages Idiomas - + Education Educación - + Dresses Vestidos - + Science Ciencia - + Calendar Calendario - + Bodily language Lenguaje corporal - + Ethics Ética - + Religion Religión - + Government Gobierno - + Politics Política - + Gender roles Roles de género - + Music and arts Música y artes - + Architecture Arquitectura - + Military Ejércitos - + Technology Tecnología - + Courtship Cortejo - + Demography Demografía - + Transportation Medios de transporte - + Medicine Medicina - + Magic system Sistema de magia - + Rules Reglas - + Organization Organización - + Magical objects Objetos mágicos - + Magical places Lugares mágicos - + Magical races Razas mágicas - + Important places Lugares importantes - + Important objects Objetos importantes - + Natural resources Recursos naturales diff --git a/i18n/manuskript_fa.ts b/i18n/manuskript_fa.ts index 009d04f..0c6fdcd 100644 --- a/i18n/manuskript_fa.ts +++ b/i18n/manuskript_fa.ts @@ -456,7 +456,7 @@ Use that if you get YAML related error. MainWindow - + General @@ -496,7 +496,7 @@ Use that if you get YAML related error. - + Name @@ -506,7 +506,7 @@ Use that if you get YAML related error. - + Summary @@ -516,7 +516,7 @@ Use that if you get YAML related error. - + Summary: @@ -526,17 +526,17 @@ Use that if you get YAML related error. - + One paragraph - + One page - + Full @@ -566,7 +566,7 @@ Use that if you get YAML related error. - + Next @@ -586,312 +586,312 @@ Use that if you get YAML related error. - + Filter - + Basic info - + Importance - + Motivation - + Goal - + Conflict - + Epiphany - + <html><head/><body><p align="right">One sentence<br/>summary</p></body></html> - + <html><head/><body><p align="right">One paragraph<br/>summary</p></body></html> - + Notes - + Detailed info - + Plots - + Plot - + Character(s) - + Description - + Result - + Resolution steps - + World - + Populates with empty data - + More - + Source of passion - + Source of conflict - + Outline - + Editor - + Debug - + FlatData - + Persos - + Labels - + &File - + &Recent - + &Help - + &Tools - + &Edit - + &View - + &Mode - + &Cheat sheet - + Sea&rch - + &Navigation - + &Open - + Ctrl+O - + &Save - + Ctrl+S - + Sa&ve as... - + Ctrl+Shift+S - + &Quit - + Ctrl+Q - + &Show help texts - + Ctrl+Shift+B - + &Spellcheck - + F9 - + &Labels... - + &Status... - + Tree - + &Simple - + &Fiction - + Index cards - + S&ettings - + F8 - + &Close project - + Co&mpile - + F6 - + &Frequency Analyzer @@ -901,562 +901,605 @@ Use that if you get YAML related error. - + &About - + About Manuskript - + Manuskript - + Project {} saved. - + WARNING: Project {} not saved. - + Project {} loaded. - + Project {} loaded with some errors: - + * {} wasn't found in project file. - + Project {} loaded with some errors. - + (~{} pages) - + Words: {}{} - + Book summary - + Project tree - + Metadata - + Story line - + Enter information about your book, and yourself. - + The basic situation, in the form of a 'What if...?' question. Ex: 'What if the most dangerous evil wizard wasn't able to kill a baby?' (Harry Potter) - + Take time to think about a one sentence (~50 words) summary of your book. Then expand it to a paragraph, then to a page, then to a full summary. - + Create your characters. - + Develop plots. - + Build worlds. Create hierarchy of broad categories down to specific details. - + Create the outline of your masterpiece. - + Write. - + Debug info. Sometimes useful. - + Dictionary - + Nothing - + POV - + Label - + Progress - + Compile - + Icon color - + Text color - + Background color - + Icon - + Text - + Background - + Border - + Corner - + Add plot step - + &Import… - + F7 - + &Copy - + Ctrl+C - + C&ut - + Ctrl+X - + &Paste - + Ctrl+V - + &Split… - + Ctrl+Shift+K - + Sp&lit at cursor - + Ctrl+K - + Ctrl+M - + Ctrl+D - + Del - + &Move Up - + Ctrl+Shift+Up - + M&ove Down - + Ctrl+Shift+Down - + Dupl&icate - + &Delete - + &Rename - + F2 - + Organi&ze - + M&erge - + &Format - + &Header - + &Level 1 (setext) - + Ctrl+Alt+1 - + Level &2 - + Ctrl+Alt+2 - + Level &1 (atx) - + Ctrl+1 - + L&evel 2 - + Ctrl+2 - + Level &3 - + Ctrl+3 - + Level &4 - + Ctrl+4 - + Level &5 - + Ctrl+5 - + Level &6 - + Ctrl+6 - + &Bold - + Ctrl+B - + &Italic - + Ctrl+I - + &Strike - + &Verbatim - + Su&perscript - + Ctrl++ - + Subsc&ript - + Ctrl+- - + Co&mment block - + Ctrl+Shift+C - + Clear &formats - + Ctrl+0 - + &Comment line(s) - + &Ordered list - + &Unordered list - + B&lockquote - + Remove selected plot step(s) - + The file {} does not exist. Has it been moved or deleted? - + Install {}{} to use spellcheck - + {} has no installed dictionaries - + {}{} is not installed - + Save project? - + Save changes to project "{}" before closing? - + Your changes will be lost if you don't save them. - + PyQt / Qt versions 5.11 and 5.12 are known to cause a crash which might result in a loss of data. - + PyQt {} and Qt {} are in use. - + Proceed with import at your own risk + + + Allow POV + + + + + Search + + + + + Ctrl+F + + + + + F3 + + + + + Shift+F3 + + + + + Situation + + + + + Status + + + + + Search + + + No results found + + Settings @@ -1471,7 +1514,7 @@ Use that if you get YAML related error. - + Revisions @@ -1481,17 +1524,17 @@ Use that if you get YAML related error. - + Labels - + Status - + Fullscreen @@ -1506,658 +1549,709 @@ Use that if you get YAML related error. - + Loading - + Automatically load last project on startup - + Saving - + Automatically save every - + minutes. - + If no changes during - + seconds. - + Save on project close - + <html><head/><body><p>If you check this option, your project will be saved as one single file. Easier to copy or backup, but does not allow collaborative editing, or versioning.<br/>If this is unchecked, your project will be saved as a folder containing many small files.</p></body></html> - + Save to one single file - + Revisions are a way to keep track of modifications. For each text item, it stores any changes you make to the main text, allowing you to see and restoring previous versions. - + Keep revisions - + S&mart remove - + Keep: - + Smart remove allows you to keep only a certain number of revisions. It is strongly recommended to use it, lest you file will becomes full of thousands of insignificant changes. - + revisions per day for the last month - + revisions per minute for the last 10 minutes - + revisions per hour for the last day - + revisions per 10 minutes for the last hour - + revisions per week till the end of time - + Views settings - + Tree - + Colors - + Icon color: - + Nothing - + POV - + Label - + Progress - + Compile - + Text color: - + Background color: - + Folders - + Show ite&m count - + Show summary - + &Nothing - + Text - + Outline - + Visible columns - + Goal - + Word count - + Percentage - + Title - + Index cards - + Item colors - + Border color: - + Corner color: - + Background - + Color: - + Ctrl+S - + Image: - + Text editor - + Font - + Family: - + Size: - + Misspelled: - + Background: - + Paragraphs - + Line spacing: - + Single - + 1.5 lines - + Double - + Proportional - + % - + Tab width: - + px - + Indent 1st line - + Spacing: - + New - + Edit - + Delete - + Theme name: - + Apply - + Cancel - + Window Background - + Text Background - + Text Options - + Paragraph Options - + Type: - + No Image - + Tiled - + Centered - + Stretched - + Scaled - + Zoomed - + Opacity: - + Position: - + Left - + Center - + Right - + Width: - + Corner radius: - + Margins: - + Padding: - + Font: - + Style - + Cursor - + Use block insertion of - + Alignment: - + Justify - + Alignment - + Icon Size - + TextLabel - + Disable blinking - + Text area - + Max width - + Left/Right margins: - + Top/Bottom margins: - + S&how progress - + Show summar&y - + Show p&rogress - + Old st&yle - + Transparent - + Restore defaults - + Style: - + Language: - + Font size: - + Restarting Manuskript ensures all settings take effect. - + Show &word count - + &Show word count - + &New style - + Typewriter mode - + Focus mode - + None - + Sentence - + Line - + Paragraph - + <p><b>The Revisions feature has been at the source of many reported issues. In this version of Manuskript it has been turned off by default for new projects in order to provide the best experience.</b></p><p>Why aren't these issues fixed already? <a href="https://www.theologeek.ch/manuskript/contribute/">We need your help to make Manuskript better!</a></p> + + + Show progress in chars next + to words + + + + + Char/Word Counter + + + + + Count spaces as chars + + + + + Show char c&ount + + + + + Sho&w char count + + SpellAction - + Spelling Suggestions - + &Add to dictionary - + &Remove from custom dictionary + + + &New Character + + + + + &New Plot Item + + + + + &New World Item + + + + + &Correction Suggestions + + + + + &Correction Suggestion + + about @@ -2259,17 +2353,12 @@ Use that if you get YAML related error. characterModel - - New character - - - - + Name - + Value @@ -2277,17 +2366,17 @@ Use that if you get YAML related error. characterTreeView - + Main - + Secondary - + Minor @@ -2403,12 +2492,12 @@ Use that if you get YAML related error. corkDelegate - + One line summary - + Full summary @@ -2990,13 +3079,28 @@ Use that if you get YAML related error. - - {} words / {} + + {} words - - {} words + + ({} chars) {} words / {} + + + + + {} words / {} + + + + + {} chars + + + + + {} chars @@ -3203,12 +3307,12 @@ Use that if you get YAML related error. outlineItem - + {} words / {} ({}) - + {} words @@ -3430,37 +3534,32 @@ Use that if you get YAML related error. plotModel - - New plot - - - - + Name - + Meta - + New step - + Main - + Secondary - + Minor @@ -3807,111 +3906,56 @@ Use that if you get YAML related error. Search for... - - - Search in: - - - - - All - - - - - Title - - - - - Text - - - - - Summary - - - - - Notes - - - - - POV - - - - - Status - - - - - Label - - - - - Options: - - - - - Case sensitive - - settingsWindow - + New status - + New label - + newtheme - + New theme - + (read-only) - + Open Image - + Image files (*.jpg; *.jpeg; *.png) - + Error - + Unable to load selected file - + Unable to add selected image: {} @@ -4021,7 +4065,7 @@ Use that if you get YAML related error. textEditView - + Various @@ -4323,212 +4367,212 @@ Use that if you get YAML related error. worldModel - + New item - + Fantasy world building - + Physical - + Climate - + Topography - + Astronomy - + Wild life - + Flora - + History - + Races - + Diseases - + Cultural - + Customs - + Food - + Languages - + Education - + Dresses - + Science - + Calendar - + Bodily language - + Ethics - + Religion - + Government - + Politics - + Gender roles - + Music and arts - + Architecture - + Military - + Technology - + Courtship - + Demography - + Transportation - + Medicine - + Magic system - + Rules - + Organization - + Magical objects - + Magical places - + Magical races - + Important places - + Important objects - + Natural resources diff --git a/i18n/manuskript_fr.ts b/i18n/manuskript_fr.ts index d672e37..c8154dd 100644 --- a/i18n/manuskript_fr.ts +++ b/i18n/manuskript_fr.ts @@ -375,27 +375,27 @@ Cochez ceci si vous avez des erreurs liées à YAML. Import folder then files - Importer les dossiers puis les fichiers/translation> + OPML Import - Importation OPML + File open failed. - Échec de l'ouverture du fichier + This does not appear to be a valid OPML file. - Le fichier ne semble pas être un fichier OPML valide. + Pandoc import - Importation Pandoc + @@ -405,17 +405,17 @@ Cochez ceci si vous avez des erreurs liées à YAML. then it will be imported in manuskript. One or the other might give better result depending on your document. <br/>&nbsp; - <b>Info:</b> Manuskript peut importer soit depuis <b>markdown</b> soit <b>OPML</b>. Pandoc va convertir votre document vers l'un ou l'autre (option ci-dessous), et ensuite être importé dans manuskript. L'un ou l'autre pourrait donner de meilleurs résultats en fonction de votre document.<br/>&nbsp; + Import using: - Importer via : + Wrap lines: - Replier les lignes : + @@ -425,35 +425,32 @@ Cochez ceci si vous avez des erreurs liées à YAML. <b>none</b>: no line wrap.<br> <b>preserve</b>: tries to preserves line wrap from the original document.</p> - <p>Pandoc doit-il créer des retours à la ligne cosmétiques/non-sémantiques?</p> -<p><b>auto</b>: retour à la ligne après 72 caractères.<br> -<b>none</b>: pas de retours à la lignes.<br> -<b>preserve</b>: essaie de préserver les retours à la lignes du document original.</p> + Mind Map Import - Importation Mind Map + This does not appear to be a valid Mind Map file. - Cela ne ressemble pas à un fichier Mind Map valide. + Mind Map import - Importation Mind Map + Import tip as: - Importer les astuces comme : + Untitled - Sans titre + @@ -461,1714 +458,1807 @@ Cochez ceci si vous avez des erreurs liées à YAML. Insert reference - Insérer une référence + MainWindow - - Title - Titre - - - - Subtitle - Sous-titre - - - - Series - Série - - - - Volume - Volume - - - - Genre - Genre - - - - License - Licence - - - - Author - Informations sur l'auteur - - - - Name - Nom - - - - Email - Email - - - - Summary - Résumé - - - - One sentence - Une phrase - - - - One sentence summary - Résumé en une phrase - - - - Next - Suivant - - - - One paragraph - Un paragraphe - - - - One paragraph summary - Résumé en un paragraphe - - - - One page - Une page - - - - Expand each sentence of your one paragraph summary to a paragraph - Développez chaque phrase du paragraphe précédent en un paragraphe complet - - - - Full - Complet - - - - One page summary - Résumé en une page - - - - Full summary - Résumé complet - - - - Characters - Personnages - - - - Names - Noms - - - - Filter - Filtre - - - - Basic info - Informations générales - - - - Importance - Importance - - - - Motivation - Motivation - - - - Goal - Cible - - - - Conflict - Conflit - - - - Epiphany - Épiphanie - - - - <html><head/><body><p align="right">One sentence<br/>summary</p></body></html> - <html><head/><body><p align="right">Résumé<br/>en une phrase</p></body></html> - - - - <html><head/><body><p align="right">One paragraph<br/>summary</p></body></html> - <html><head/><body><p align="right">Résumé<br/>en un paragraphe</p></body></html> - - - - Notes - Notes - - - - Detailed info - Informations détaillées - - - - Plots - Intrigues - - - - Plot - Intrigue - - - - Character(s) - Personnage(s) - - - - Description - Description - - - - Result - Résultat - - - - Resolution steps - Étapes de résolution - - - - Outline - Plan - - - - Editor - Rédaction - - - - Debug - Debug - - - - FlatData - FlatData - - - - Persos - Persos - - - - &Help - &Aide - - - - Ctrl+O - - - - - Ctrl+S - Ctrl+S - - - - Ctrl+Shift+S - - - - - Ctrl+Q - - - - - Ctrl+Shift+B - - - - - F8 - - - - - Labels - Labels - - - - Situation: - Situation : - - - - Summary: - Résumé : - - - - What if...? - Et si… ? - - - - Index cards - Cartes - - - - F9 - F9 - - - - Tree - Arbre - - - - Compile - Compilation - - - - F6 - F6 - - - - World - Monde - - - - Populates with empty data - Remplir avec des catégories vides - - - + General - Général - - - - More - Plus - - - - Source of passion - Source de passion - - - - Source of conflict - Source de conflit - - - - Project {} saved. - Le projet {} a été enregistré. - - - - Project {} loaded. - Le projet {} a été chargé. - - - - Project {} loaded with some errors: - Le projet {} a été chargé, avec des erreurs: - - - - * {} wasn't found in project file. - * {} n'a pas été trouvé dans le fichier du projet. - - - - Project {} loaded with some errors. - Le projet {} a été chargé avec des erreurs. - - - - (~{} pages) - (~{} pages) - - - - Words: {}{} - Mots: {}{} - - - - Book summary - Résumé du livre - - - - Project tree - Arborescence du projet - - - - Metadata - Métadonnées - - - - Enter information about your book, and yourself. - Entrez toutes les informations relatives au livre, ainsi qu'à vous. - - - - Create your characters. - Créez ici vos personnages. - - - - Develop plots. - Développez vos intrigues. - - - - Create the outline of your masterpiece. - Créez le plan de votre chef-d'œuvre. - - - - Write. - Écrivez. - - - - Debug info. Sometimes useful. - Des informations pour débugger pendant qu'on code c'est parfois utile. - - - - Dictionary - Dictionnaire - - - - Nothing - Rien - - - - POV - Pt de vue - - - - Label - Label - - - - Progress - Progrès - - - - Icon color - Couleur de l'icone - - - - Text color - Couleur du texte - - - - Background color - Couleur de l'arrière-plan - - - - Icon - Icône - - - - Text - Texte - - - - Background - Arrière-plan - - - - Border - Bordure - - - - Corner - Coin - - - - &File - &Fichier - - - - &Recent - &Récents - - - - &Tools - &Outils - - - - &View - &Vue - - - - &Mode - &Mode - - - - &Cheat sheet - &Feuille de triche - - - - Sea&rch - &Recherche - - - - &Navigation - &Navigation - - - - &Open - &Ouvrir - - - - &Save - &Enregistrer - - - - Sa&ve as... - Enre&gistrer sous… - - - - &Quit - &Quitter - - - - &Show help texts - &Afficher les bulles d'aide - - - - &Spellcheck - &Correcteur orthographique - - - - &Labels... - &Labels… - - - - &Status... - &Statut… - - - - &Simple - &Simple - - - - &Fiction - &Fiction - - - - S&ettings - &Réglages - - - - &Close project - &Fermer le projet - - - - Co&mpile - Co&mpiler - - - - &Frequency Analyzer - &Analyseur de fréquence - - - - Story line - - - - - The basic situation, in the form of a 'What if...?' question. Ex: 'What if the most dangerous - evil wizard wasn't able to kill a baby?' (Harry Potter) - La situation de base, sous la forme d'une question "Et si…?". Par exemple: "Et si le plus dangereux des sorciers maléfiques n'était pas capable de tuer un petit bébé?" (Harry Potter) - - - - Take time to think about a one sentence (~50 words) summary of your book. Then expand it to - a paragraph, then to a page, then to a full summary. - Prenez le temps de penser à une phrase (~50 mots) qui résume votre livre. Ensuite, développez-là en un paragraphe, puis une page, puis un résumé complet. - - - - &Edit - &Édition + Book information - Informations sur le livre + - - &About - &À propos + + Title + - - About Manuskript - À propos de Manuskript + + Subtitle + - - Manuskript - Manuskript + + Series + - - WARNING: Project {} not saved. - ATTENTION : Le projet {} n'a pas été enregistré. + + Volume + - - Build worlds. Create hierarchy of broad categories down to specific details. - Construire des mondes. Crée une hiérarchie en partant des catégories les plus larges jusqu'aux détails les plus spécifiques. + + Genre + - + + License + + + + + Author + + + + + Name + + + + + Email + + + + + Summary + + + + + Situation: + + + + + Summary: + + + + + One sentence + + + + + One paragraph + + + + + One page + + + + + Full + + + + + One sentence summary + + + + + One paragraph summary + + + + + Expand each sentence of your one paragraph summary to a paragraph + + + + + One page summary + + + + + Full summary + + + + + Next + + + + + What if...? + + + + + Characters + + + + + Names + + + + + Filter + + + + + Basic info + + + + + Allow POV + + + + + Motivation + + + + + Goal + + + + + Conflict + + + + + Epiphany + + + + + <html><head/><body><p align="right">One sentence<br/>summary</p></body></html> + + + + + <html><head/><body><p align="right">One paragraph<br/>summary</p></body></html> + + + + + Importance + + + + + Notes + + + + + Detailed info + + + + + Plots + + + + + Plot + + + + + Character(s) + + + + + Description + Description + + + + Result + + + + + Resolution steps + + + + Add plot step - Ajouter une étape de résolution - - - - &Import… - &Importer… - - - - F7 - F7 - - - - &Copy - &Copier - - - - Ctrl+C - Ctrl+C - - - - C&ut - C&ouper - - - - Ctrl+X - Ctrl+X - - - - &Paste - C&oller - - - - Ctrl+V - Ctrl+V - - - - &Split… - &Diviser… - - - - Ctrl+Shift+K - Ctrl+Shift+K - - - - Sp&lit at cursor - Di&viser au curseur - - - - Ctrl+K - Ctrl+K - - - - Ctrl+M - Ctrl+M - - - - Ctrl+D - Ctrl+D - - - - Del - Del - - - - &Move Up - Déplacer vers le haut - - - - Ctrl+Shift+Up - Ctrl+Shift+Up - - - - M&ove Down - Déplacer vers le bas - - - - Ctrl+Shift+Down - Ctrl+Shift+Bas - - - - Dupl&icate - Dupl&iquer - - - - &Delete - &Supprimer - - - - &Rename - &Renommer - - - - F2 - F2 - - - - Organi&ze - Or&ganisation - - - - M&erge - &Fusionner - - - - &Format - &Format - - - - &Header - &Titre - - - - &Level 1 (setext) - &Niveau 1 (setext) - - - - Ctrl+Alt+1 - Ctrl+Alt+1 - - - - Level &2 - Niveau &2 - - - - Ctrl+Alt+2 - Ctrl+Alt+2 - - - - Level &1 (atx) - Niveau &1 (atx) - - - - Ctrl+1 - Ctrl+1 - - - - L&evel 2 - - Ctrl+2 - Ctrl+2 - - - - Level &3 - Niveau &3 - - - - Ctrl+3 - Ctrl+3 - - - - Level &4 - Niveau &4 - - - - Ctrl+4 - Ctrl+4 - - - - Level &5 - Niveau &5 - - - - Ctrl+5 - Ctrl+5 - - - - Level &6 - Niveau &6 - - - - Ctrl+6 - Ctrl+6 - - - - &Bold - &Gras - - - - Ctrl+B - Ctrl+B - - - - &Italic - &Italique - - - - Ctrl+I - Ctrl+I - - - - &Strike - - - - - &Verbatim - - - - - Su&perscript - - - - - Ctrl++ - - - - - Subsc&ript - - - - - Ctrl+- - - - - - Co&mment block - - - - - Ctrl+Shift+C - - - - - Clear &formats - - - - - Ctrl+0 - Ctrl+0 - - - - &Comment line(s) - - - - - &Ordered list - - - - - &Unordered list - - - - - B&lockquote - - - - + Remove selected plot step(s) - + + World + + + + + Populates with empty data + + + + + More + + + + + Source of passion + + + + + Source of conflict + + + + + Outline + + + + + Editor + + + + + Debug + + + + + FlatData + + + + + Persos + + + + + Labels + + + + + &File + + + + + &Recent + + + + + &Help + + + + + &Tools + + + + + &Edit + + + + + &Format + + + + + &Header + + + + + &View + + + + + &Mode + + + + + Organi&ze + + + + + &Cheat sheet + + + + + Sea&rch + + + + + &Navigation + + + + + &Open + + + + + Ctrl+O + + + + + &Save + + + + + Ctrl+S + + + + + Sa&ve as... + + + + + Ctrl+Shift+S + + + + + &Quit + + + + + Ctrl+Q + + + + + &Show help texts + + + + + Ctrl+Shift+B + + + + + &Spellcheck + + + + + F9 + + + + + &Labels... + + + + + &Status... + + + + + Tree + + + + + &Simple + + + + + &Fiction + + + + + Index cards + + + + + S&ettings + + + + + F8 + + + + + &Close project + + + + + Co&mpile + + + + + F6 + + + + + &Frequency Analyzer + + + + + &About + + + + + About Manuskript + + + + + &Import… + + + + + F7 + + + + + &Copy + + + + + Ctrl+C + + + + + C&ut + + + + + Ctrl+X + + + + + &Paste + + + + + Ctrl+V + + + + + &Split… + + + + + Ctrl+Shift+K + + + + + Sp&lit at cursor + + + + + Ctrl+K + + + + + M&erge + + + + + Ctrl+M + + + + + Dupl&icate + + + + + &Delete + + + + + Del + + + + + &Move Up + + + + + Ctrl+Shift+Up + + + + + M&ove Down + + + + + Ctrl+Shift+Down + + + + + &Rename + + + + + F2 + + + + + &Level 1 (setext) + + + + + Ctrl+Alt+1 + + + + + Level &2 + + + + + Ctrl+Alt+2 + + + + + Level &1 (atx) + + + + + Ctrl+1 + + + + + L&evel 2 + + + + + Ctrl+2 + + + + + Level &3 + + + + + Ctrl+3 + + + + + Level &4 + + + + + Ctrl+4 + + + + + Level &5 + + + + + Ctrl+5 + + + + + Level &6 + + + + + Ctrl+6 + + + + + &Bold + + + + + Ctrl+B + + + + + &Italic + + + + + Ctrl+I + + + + + &Strike + + + + + &Verbatim + + + + + Su&perscript + + + + + Ctrl++ + + + + + Subsc&ript + + + + + Ctrl+- + + + + + Co&mment block + + + + + Ctrl+Shift+C + + + + + Clear &formats + + + + + Ctrl+0 + + + + + &Comment line(s) + + + + + Ctrl+D + + + + + &Ordered list + + + + + &Unordered list + + + + + B&lockquote + + + + + Search + + + + + Ctrl+F + + + + The file {} does not exist. Has it been moved or deleted? - - Install {}{} to use spellcheck - + + Manuskript + Manuskript - - {} has no installed dictionaries - - - - - {}{} is not installed - - - - + Save project? - + Save changes to project "{}" before closing? - + Your changes will be lost if you don't save them. - + + Project {} saved. + + + + + WARNING: Project {} not saved. + + + + + Project {} loaded. + + + + + Project {} loaded with some errors: + + + + + * {} wasn't found in project file. + + + + + Project {} loaded with some errors. + + + + + (~{} pages) + + + + + Words: {}{} + + + + + Book summary + + + + + Project tree + + + + + Metadata + + + + + Story line + + + + + Enter information about your book, and yourself. + + + + + The basic situation, in the form of a 'What if...?' question. Ex: 'What if the most dangerous + evil wizard wasn't able to kill a baby?' (Harry Potter) + + + + + Take time to think about a one sentence (~50 words) summary of your book. Then expand it to + a paragraph, then to a page, then to a full summary. + + + + + Create your characters. + + + + + Develop plots. + + + + + Build worlds. Create hierarchy of broad categories down to specific details. + + + + + Create the outline of your masterpiece. + + + + + Write. + + + + + Debug info. Sometimes useful. + + + + + Dictionary + + + + + Install {}{} to use spellcheck + + + + + {} has no installed dictionaries + + + + + {}{} is not installed + + + + + Nothing + + + + + POV + + + + + Label + + + + + Progress + + + + + Compile + + + + + Icon color + + + + + Text color + + + + + Background color + + + + + Icon + + + + + Text + + + + + Background + + + + + Border + + + + + Corner + + + + PyQt / Qt versions 5.11 and 5.12 are known to cause a crash which might result in a loss of data. - + PyQt {} and Qt {} are in use. - + Proceed with import at your own risk + + + F3 + + + + + Shift+F3 + + + + + Situation + + + + + Status + Statut + + + + Search + + + No results found + + Settings + + + Settings + Réglages + General - Général + + + + + Revisions + Views - Apparence + - + Labels - Labels + - + Status - Status + Statut - + Fullscreen - Plein écran + General settings - Réglages généraux + Application settings - Style de l'application - - - - Saving - Enregistrement - - - - Automatically save every - Enregistrer automatiquement toutes les - - - - minutes. - minutes. - - - - If no changes during - S'il n'y a pas de modification durant - - - - seconds. - secondes. - - - - Save on project close - Enregistrer en quittant - - - - Views settings - Apparence - - - - Tree - Arbre - - - - Colors - Couleurs - - - - Icon color: - Icone: - - - - Nothing - Rien - - - - POV - POV - - - - Label - Label - - - - Progress - Progrès - - - - Compile - Compilation - - - - Text color: - Texte: - - - - Background color: - Arrière-plan: - - - - Folders - Dossiers - - - - Text - Texte - - - - Outline - Plan - - - - Visible columns - Colonnes visibles - - - - Goal - Cible - - - - Word count - Nombre de mots - - - - Percentage - Pourcentage - - - - Title - Titre - - - - Index cards - Cartes - - - - Item colors - Couleurs des cartes - - - - Border color: - Bordure: - - - - Corner color: - Coin: - - - - Background - Arrière-plan - - - - Color: - Couleur: - - - - Ctrl+S - Ctrl+S - - - - Image: - Image: - - - - New - Nouveau - - - - Edit - Modifier - - - - Delete - Supprimer - - - - Theme name: - Nom du thème: - - - - Apply - Enregistrer - - - - Cancel - Annuler - - - - Window Background - Arrière plan de la fenêtre - - - - Text Background - Arrière plan du texte - - - - Text Options - Options du texte - - - - Paragraph Options - Options des paragraphes - - - - Type: - Type: - - - - No Image - Pas d'image - - - - Tiled - Mosaïque - - - - Centered - Centrée - - - - Stretched - Étirée - - - - Scaled - Mise à l'échelle - - - - Zoomed - Zoomée - - - - Opacity: - Opacité: - - - - % - % - - - - Position: - Position: - - - - Left - Gauche - - - - Center - Centre - - - - Right - Droite - - - - Width: - Largeur: - - - - px - px - - - - Corner radius: - Arrondi: - - - - Margins: - Marges: - - - - Padding: - Intérieur: - - - - Font: - Police: - - - - Size: - Taille: - - - - Misspelled: - Orthographe: - - - - Line spacing: - Espacement -des lignes: - - - - Single - Simple - - - - 1.5 lines - 1.5 lignes - - - - Double - Double - - - - Proportional - Proportionnel - - - - Tab width: - Tabulation: - - - - Spacing: - Espacement: - - - - Indent 1st line - Retrait 1ère ligne - - - - Settings - Réglages - - - - Loading - Chargement - - - - Automatically load last project on startup - Charger au démarrage le dernier projet ouvert - - - - Text editor - Éditeur de texte - - - - Font - Police - - - - Family: - Famille: - - - - Paragraphs - Paragraphes - - - - Background: - Arrière-plan: - - - - Revisions - Révisions - - - - Revisions are a way to keep track of modifications. For each text item, it stores any changes you make to the main text, allowing you to see and restoring previous versions. - Les révisions sont un moyen de garder une trace des modifications apportées à un texte. Pour chaque texte, chaque changement que vous apportez est enregistré, vous permettant de comparer la version actuelle avec des versions antérieures, et de les restaurer. - - - - Keep revisions - Garder les révisions - - - - Keep: - Garder: - - - - Smart remove allows you to keep only a certain number of revisions. It is strongly recommended to use it, lest you file will becomes full of thousands of insignificant changes. - La suppression intelligente vous permet de ne garder qu'un certain nombre de révisions. Il est fortement recommander de l'utiliser, sous peine de voir ses documents envahis de millieurs de modifications insignifiantes. - - - - revisions per day for the last month - révision(s) par jour pour le dernier mois - - - - revisions per minute for the last 10 minutes - révision(s) par minute pour les dernières 10 minutes - - - - revisions per hour for the last day - révision(s) par heure pour le dernier jour - - - - revisions per 10 minutes for the last hour - révision(s) par tranche de 10 minutes pour la dernière heure - - - - revisions per week till the end of time - révision(s) par semaine jusqu'à la fin des temps - - - - <html><head/><body><p>If you check this option, your project will be saved as one single file. Easier to copy or backup, but does not allow collaborative editing, or versioning.<br/>If this is unchecked, your project will be saved as a folder containing many small files.</p></body></html> - <html><head/><body><p>Si vous cochez cette option, le projet sera enregistrer en un seul fichier. Plus facile à copier, mais ne permet pas de travailler en collaboration, ou d'utiliser un gestionnaire de version extérieur.<br/>Si l'option n'est pas cochée, le projet sera sauvegardé en un dossier contenant de nombreux petits fichiers.</p></body></html> - - - - Save to one single file - Enregistrer dans un seul fichier - - - - S&mart remove - &Supression intelligente - - - - Show ite&m count - Montrer le &nombre d'éléments - - - - Show summary - Montrer le résummé - - - - &Nothing - &Rien - - - - Style - Apparence - - - - Cursor - Curseur - - - - Use block insertion of - Curseur bloc de - - - - Alignment: - Alignement: - - - - Justify - Justifié - - - - Alignment - Alignement - - - - Icon Size - Taille des icônes - - - - TextLabel - TextLabel - - - - Disable blinking - Désactiver le clignotement du curseur - - - - Text area - Zone de texte - - - - Max width - Largeur maximale - - - - Left/Right margins: - Marges gauche/droite: - - - - Top/Bottom margins: - Marges haut/bas: - - - - S&how progress - Montrer le progrès - - - - Show summar&y - Montrer le résummé - - - - Show p&rogress - Montrer le progrès - - - - Old st&yle - Ancien style - - - - Transparent - Transparent - - - - Restore defaults - Couleurs par défaut - - - - Style: - - Language: - - - - - Font size: - - - - + Restarting Manuskript ensures all settings take effect. - + + Style: + + + + + Language: + + + + + Font size: + Taille de la police : + + + + Show progress in chars next + to words + + + + + Loading + + + + + Automatically load last project on startup + + + + + Saving + + + + + Automatically save every + + + + + minutes. + + + + + If no changes during + + + + + seconds. + + + + + Save on project close + + + + + <html><head/><body><p>If you check this option, your project will be saved as one single file. Easier to copy or backup, but does not allow collaborative editing, or versioning.<br/>If this is unchecked, your project will be saved as a folder containing many small files.</p></body></html> + + + + + Save to one single file + + + + + Revisions are a way to keep track of modifications. For each text item, it stores any changes you make to the main text, allowing you to see and restoring previous versions. + + + + + Keep revisions + + + + + S&mart remove + + + + + Keep: + + + + + Smart remove allows you to keep only a certain number of revisions. It is strongly recommended to use it, lest you file will becomes full of thousands of insignificant changes. + + + + + revisions per day for the last month + + + + + revisions per minute for the last 10 minutes + + + + + revisions per hour for the last day + + + + + revisions per 10 minutes for the last hour + + + + + revisions per week till the end of time + + + + + <p><b>The Revisions feature has been at the source of many reported issues. In this version of Manuskript it has been turned off by default for new projects in order to provide the best experience.</b></p><p>Why aren't these issues fixed already? <a href="https://www.theologeek.ch/manuskript/contribute/">We need your help to make Manuskript better!</a></p> + + + + + Views settings + + + + + Tree + + + + + Colors + + + + + Icon color: + + + + + Nothing + + + + + POV + + + + + Label + + + + + Progress + + + + + Compile + + + + + Text color: + + + + + Background color: + + + + + Icon Size + + + + + TextLabel + + + + + Char/Word Counter + + + + + Count spaces as chars + + + + + Folders + + + + + Show ite&m count + + + + Show &word count - + + Show char c&ount + + + + + S&how progress + + + + + Show summar&y + + + + + &Nothing + + + + + Text + + + + &Show word count - + + Sho&w char count + + + + + Show p&rogress + + + + + Show summary + + + + + Outline + + + + + Visible columns + + + + + Goal + + + + + Word count + + + + + Percentage + + + + + Title + + + + + Index cards + + + + + Background + + + + + Color: + + + + + Ctrl+S + + + + + Image: + + + + + Style + + + + + Old st&yle + + + + &New style - + + Item colors + + + + + Border color: + + + + + Corner color: + + + + + Text editor + + + + + Background: + + + + + Transparent + + + + + Restore defaults + + + + + Font + + + + + Family: + + + + + Size: + + + + + Misspelled: + + + + + Text area + + + + + Max width + + + + + px + + + + + Left/Right margins: + + + + + Top/Bottom margins: + + + + + Paragraphs + + + + + Alignment: + + + + + Left + + + + + Center + + + + + Right + + + + + Justify + + + + + Line spacing: + Espacement des lignes : + + + + Single + + + + + 1.5 lines + + + + + Double + + + + + Proportional + + + + + % + + + + + Tab width: + + + + + Indent 1st line + + + + + Spacing: + + + + + Cursor + + + + + Use block insertion of + + + + + Disable blinking + + + + Typewriter mode - + Focus mode - + None - Aucun + - + Sentence - + Line - + Paragraph - - <p><b>The Revisions feature has been at the source of many reported issues. In this version of Manuskript it has been turned off by default for new projects in order to provide the best experience.</b></p><p>Why aren't these issues fixed already? <a href="https://www.theologeek.ch/manuskript/contribute/">We need your help to make Manuskript better!</a></p> + + New + + + + + Edit + + + + + Delete + + + + + Theme name: + + + + + Apply + + + + + Cancel + + + + + Window Background + + + + + Text Background + + + + + Text Options + + + + + Paragraph Options + + + + + Type: + + + + + No Image + + + + + Tiled + + + + + Centered + + + + + Stretched + + + + + Scaled + + + + + Zoomed + + + + + Opacity: + + + + + Position: + + + + + Width: + + + + + Corner radius: + + + + + Margins: + + + + + Padding: + + + + + Font: + + + + + Alignment SpellAction - + + &New Character + + + + + &New Plot Item + + + + + &New World Item + + + + Spelling Suggestions - Suggestions + - + &Add to dictionary - &Ajouter au dictionnaire + - + + &Correction Suggestions + + + + + &Correction Suggestion + + + + &Remove from custom dictionary - &Supprimer du dictionnaire + @@ -2176,12 +2266,12 @@ des lignes: About Manuskript - À propos de Manuskript + Manuskript - Manuskript + Manuskript @@ -2189,12 +2279,12 @@ des lignes: Version - Version + Software Versions in Use: - Version des logiciels utilisés: + @@ -2202,37 +2292,37 @@ des lignes: Title - Titre + POV - POV + Label - Label + Status - Status + Statut Compile - Compile + Word count - Nombre de mots + Goal - Cible + @@ -2240,68 +2330,63 @@ des lignes: Form - Form + POV: - POV: + Goal: - Cible: + Word count - Nombre de mots + One line summary - Résumé en une ligne + Few sentences summary: - Résumé en quelques phrases: + characterModel - - New character - Nouveau personnage - - - + Name - Nom + - + Value - Valeur + characterTreeView - + Main - Principal + - + Secondary - Secondaire + - + Minor - Mineur + @@ -2309,47 +2394,47 @@ des lignes: Form - Form - - - - Minor - Mineur - - - - Secondary - Secondaire - - - - Main - Principal - - - - Characters - Personnages - - - - Texts - Textes - - - - Plots - Intrigues - - - - World - Monde + Filter (type the name of anything in your project) - Filtrer (taper le nom de quoi que ce soit dans votre projet) + + + + + Minor + + + + + Secondary + + + + + Main + + + + + Characters + + + + + Texts + + + + + Plots + + + + + World + @@ -2357,27 +2442,27 @@ des lignes: None - Aucun + Main - Principal + Secondary - Secondaire + Minor - Mineur + Various - Différentes valeurs + @@ -2385,7 +2470,7 @@ des lignes: Various - Différentes valeurs + @@ -2393,7 +2478,7 @@ des lignes: Various - Différentes valeurs + @@ -2401,7 +2486,7 @@ des lignes: Dock Widgets Toolbar - + @@ -2409,20 +2494,20 @@ des lignes: Form - Form + corkDelegate - + One line summary - Résumé en une ligne + - + Full summary - Résumé complet + @@ -2430,7 +2515,7 @@ des lignes: Form - Form + @@ -2438,27 +2523,27 @@ des lignes: Export - Exporter + Export to: - Exporter vers: + Manage exporters - Gérer les exporteurs + Preview - Prévisualiser + Settings - Réglages + Réglages @@ -2466,7 +2551,7 @@ des lignes: {} (not implemented yet) - {} (pas encore implémenté) + @@ -2474,202 +2559,202 @@ des lignes: Form - Form + Content - Contenu + Decide here what will be included in the final export. - Choisissez ici ce qui sera inclu dans l'export. + Type - Type + Title - Titre + Text - Texte + I need more granularity - J'ai besoin de plus de finesse + Fi&lters - Fi&ltres + <html><head/><body><p>Filters what items will be included in the final export.<br/><span style=" color:#773333;">(Not fully implemented yet.)</span></p></body></html> - <html><head/><body><p>Filtrer les éléments qui seront inclus dans l'export.<br/><span style=" color:#773333;">(Pas encore pleinement implémenté.)</span></p></body></html> + Ignore compile status (include all items) - Ignorer le statut de compilation (i.e. inclure tous les éléments) + Subitems of: - Sous-éléments de: + Labels - Labels + Status - Status + Statut Separations - Séparations + Between folders: - Entre les dossiers: + Empty line - Ligne vide + Custom - Personnalisé + Between texts: - Entre les textes: + Between folder and text: - Entre dossier et texte: + Between text and folder: - Entre texte et dossier: + Transformations - Transformations + Typographic replacements: - Corrections typographiques: + - + - Replace ... with … - Remplacer ... avec … + Replace ... with … + - + - Replace --- with — - Remplacer --- avec — + Replace --- with — + Replace double quotes (") with: - Remplacer les guillements doubles (") avec: + Replace single quotes (') with: - Remplacer les guillements simples (') avec: + Remove multiple spaces - Supprimer les espaces doubles + Custom replacements: - Remplacements personnalisés + Enabled - Activé + Replace - Remplacer + With - Par + RegExp - RegExp + If checked, uses regular expression for replacement. If unchecked, replaced as plain text. - Si la case est cochée, une expression régulière est utilisée pour le remplacement. Sinon, le remplacement est effectué en texte simple. + Preview - Prévisualiser + Font - Police + Font: - Police: + Font size: - Taille de la police: + Taille de la police : Folder - Dossier + {}Level {} folder - {}Dossier de niveau {} + {}Level {} text - {}Texte de niveau {} + @@ -2677,37 +2762,37 @@ des lignes: Installed - Installé - - - - Not found - Pas trouvé - - - - {} not found. Install it, or set path manually. - {} n'a pas été trouvé. Installé le, ou indiquez l'emplacement manuellement. - - - - <b>Status:</b> uninstalled. - <b>Status:</b> non-installé. - - - - <b>Requires:</b> - <b>Nécessite:</b> + Custom - Personnalisé + + + + + Not found + + + + + {} not found. Install it, or set path manually. + + + + + <b>Status:</b> uninstalled. + + + + + <b>Requires:</b> + Set {} executable path. - Définir le chemin vers le fichier exécutable de {}. + @@ -2715,17 +2800,17 @@ des lignes: Phrases - Phrases + Frequency - Fréquence + Word - Mot + @@ -2733,17 +2818,7 @@ des lignes: Theme: - Thème: - - - - {} words / {} - {} mots / {} - - - - {} words - {} mots + @@ -2763,7 +2838,7 @@ des lignes: Title - Titre + @@ -2778,12 +2853,12 @@ des lignes: Word count - Nombre de mots + Progress - Progrès + @@ -2800,38 +2875,48 @@ des lignes: Clock: Show Seconds + + + {} words / {} + + + + + {} words + + generalSettings General - Général + Split scenes at: - Diviser les scènes à: + \n---\n - \n---\n + Trim long titles (> 32 chars) - Couper les longs titres (> 32 chars) + Import under: - Importer sous: + Import in a top-level folder - Importer dans un dossier + @@ -2839,7 +2924,7 @@ des lignes: If you don't wanna see me, you can hide me in Help menu. - Infobulle: Si tu me trouve dérengant, tu peux me cacher via le menu Aide. + @@ -2847,32 +2932,32 @@ des lignes: Import - Importer + Format: - Format: + Choose file - Choisir un fichier + Clear file - Déselectionner le fichier + Preview - Prévisualiser + Settings - Réglages + Réglages @@ -2888,7 +2973,7 @@ des lignes: Various - Différentes valeurs + @@ -2896,120 +2981,135 @@ des lignes: Form - Form + Lock screen: - Bloquer l'écran: + Word target - Cible: mots + Time target - Cible: temps + words - mots + minutes - minutes + Lock ! - Bloquer ! + ~{} h. - ~{} h. + ~{} mn. - ~{} mn. + {}:{} - {}:{} + {} s. - {} s. + {} remaining - {} restant + {} words remaining - {} mots restants + mainEditor - - - Root - Racine - Form - Form - - - - Text - Texte - - - - Index cards - Cartes - - - - Outline - Plan - - - - F11 - F11 + Go to parent item - Aller à l'élément parent + Alt+Up - Alt+Up + - - {} words / {} - {} mots / {} + + Text + - + + Index cards + + + + + Outline + + + + + F11 + + + + + Root + + + + + ({} chars) {} words / {} + + + + + {} words / {} + + + + + {} chars + + + + + {} chars + + + + {} words - {} mots + @@ -3017,7 +3117,7 @@ des lignes: Markdown - Markdown + @@ -3025,37 +3125,37 @@ des lignes: Form - Form + Properties - Propriétés + Summary - Résumé + One line summary - Résumé en une ligne - - - - Notes / References - Notes / Références - - - - Revisions - Révisions + Full summary - Résumé complet + + + + + Notes / References + + + + + Revisions + @@ -3063,130 +3163,130 @@ des lignes: Auto-hide - Masquer automatiquement + outlineBasics - - - Set POV - Choisir le POV - - - - Set Status - Choisir le status - - - - Set Label - Choisir le label - - - - None - Aucun - New - Nouveau - - - - Main - Principal - - - - Secondary - Secondaire - - - - Minor - Mineur - - - - Set Custom Icon - Icône personnalisée - - - - Restore to default - Icône par défaut + Root - Racine + Open {} items in new tabs - Ouvrir {} éléments dans des nouveaux onglets + Open {} in a new tab - Ouvrir {} dans un nouvel onglet - - - - About to remove - Suppression - - - - <p><b>You're about to delete {} item(s).</b></p><p>Are you sure?</p> - <p><b>Tu es sur le point de supprimer {} élément(s).</b></p><p>En es-tu sûr?</p> - - - - Select at least two items. Folders are ignored. - Choisir au moins deux éléments. Les dossiers sont ignorés. - - - - All items must be on the same level (share the same parent). - Tous les éléments doivent être au même niveau (avoir le même parent). + New &Folder - Nouveau Dossier + New &Text - Nouveau Texte - - - - &Copy - &Copier + C&ut - C&ouper + + + + + &Copy + &Paste - C&oller - - - - &Rename - &Renommer + &Delete - &Supprimer + + + + + &Rename + + + + + Set POV + + + + + None + + + + + Main + + + + + Secondary + + + + + Minor + + + + + Set Status + + + + + Set Label + + + + + Set Custom Icon + + + + + Restore to default + + + + + About to remove + + + + + <p><b>You're about to delete {} item(s).</b></p><p>Are you sure?</p> + + + + + Select at least two items. Folders are ignored. + + + + + All items must be on the same level (share the same parent). + @@ -3194,35 +3294,35 @@ des lignes: None - Aucun + Main - Principal + Secondary - Secondaire + Minor - Mineur + outlineItem - + {} words / {} ({}) - {} mots / {} ({}) + - + {} words - {} mots + @@ -3230,17 +3330,17 @@ des lignes: General - Général + Table of Content - Table des matières + Custom settings for {} - Réglages spécifiques pour {} + @@ -3248,17 +3348,17 @@ des lignes: Main - Principal + Secondary - Secondaire + Minors - Mineurs + @@ -3266,215 +3366,215 @@ des lignes: General - Général + Promise - Promesse + Problem - Problème + Progress - Progrès + Resolution - Résolution + Try / Fail - Essayer / Échouer - - - - Freytag's pyramid - Pyramide de Freytag - - - - Exposition - Exposition - - - - Rising action - Action montante - - - - Climax - Apogée - - - - Falling action - Action en chute - - - - Three acts - Trois actes - - - - 1. Setup - 1. Mise en place - - - - 1. Inciting event - Franchir le seuil - - - - 1. Turning point - 1. Tournant - - - - 2. Choice - 2. Choix - - - - 2. Reversal - 2. Renversement - - - - 2. Disaster - 2. Désastre - - - - 3. Stand up - 3. Redressement - - - - 3. Climax - 3. Apogée - - - - 3. Ending - 3. Résolution - - - - Hero's journey - Voyage du héros - - - - Ordinary world - Monde ordinaire - - - - Call to adventure - Appel à l'aventure - - - - Refusal of the call - Refus de l'appel - - - - Meeting with mentor - Rencontre du mentor - - - - Tests - Épreuves - - - - Approach - Approche - - - - Abyss - Abysse - - - - Reward / Revelation - Récompense / Révélation - - - - Transformation - Transformation - - - - Atonement - Expiation - - - - Return - Retour + No and - Non et + Yes but - Oui mai + + + + + Freytag's pyramid + + + + + Exposition + + + + + Rising action + + + + + Climax + + + + + Falling action + + + + + Three acts + + + + + 1. Setup + + + + + 1. Inciting event + + + + + 1. Turning point + + + + + 2. Choice + + + + + 2. Reversal + + + + + 2. Disaster + + + + + 3. Stand up + + + + + 3. Climax + + + + + 3. Ending + + + + + Hero's journey + + + + + Ordinary world + + + + + Call to adventure + + + + + Refusal of the call + + + + + Meeting with mentor + + + + + Crossing the Threshold + + + + + Tests + + + + + Approach + + + + + Abyss + + + + + Reward / Revelation + + + + + Transformation + + + + + Atonement + + + + + Return + plotModel - - New plot - Nouvelle intrigue - - - - Main - Principale - - - - Secondary - Secondaire - - - - Minor - Mineure - - - + Name - Nom + - + Meta - Meta + - + New step - Nouvelle étape + + + + + Main + + + + + Secondary + + + + + Minor + @@ -3482,22 +3582,22 @@ des lignes: Main - Principale + Secondary - Secondaire + Minor - Mineure + **Plot:** {} - **Intrigue:** {} + @@ -3505,17 +3605,17 @@ des lignes: Main - Principale + Secondary - Secondaire + Minors - Mineurs + @@ -3523,200 +3623,200 @@ des lignes: Form - Form + POV - POV + Status - Status + Statut Label - Label + Compile - Compile + Goal - Cible + Word count - Nombre de mots + references + + + Not a reference: {}. + + Unknown reference: {}. - Référence inconnue: {}. - - - - Text: <b>{}</b> - Texte: <b>{}</b> - - - - Character: <b>{}</b> - Personnage: <b>{}</b> - - - - Basic info - Informations générales - - - - Detailed info - Informations détaillées - - - - POV of: - POV de: - - - - Referenced in: - Référencé dans: - - - - Motivation - Motivation - - - - Goal - Cible - - - - Conflict - Conflit - - - - Epiphany - Épiphanie - - - - Short summary - Résumé court - - - - Longer summary - Résumé long + Path: - Chemin: + Chemin : Stats: - Stats: + POV: - POV: + Status: - Status: + Statut : Label: - Label: + Short summary: - Résumé court: + Long summary: - Résumé long: + Notes: - Notes: + - - Not a reference: {}. - Pas une référence: {}. + + Basic info + + + + + Detailed info + + + + + POV of: + Go to {}. - Aller à {}. + + + + + Motivation + + + + + Goal + + + + + Conflict + + + + + Epiphany + + + + + Short summary + + + + + Longer summary + Description - Description + Description Result - Résultat + Characters - Personnages + Resolution steps - Étapes de résolution - - - - Plot: <b>{}</b> - Intrigue: <b>{}</b> + Passion - Passion - - - - World: <b>{name}</b>{path} - Monde: <b>{name}</b>{path} + <b>Unknown reference:</b> {}. - <b>Référence inconnue:</b> {}. + Folder: <b>{}</b> - Dossier: <b>{}</b> + + + + + Text: <b>{}</b> + + + + + Character: <b>{}</b> + + + + + Plot: <b>{}</b> + + + + + World: <b>{name}</b>{path} + + + + + Referenced in: + @@ -3724,87 +3824,87 @@ des lignes: Form - Form - - - - Restore - Restaurer - - - - Delete - Supprimer - - - - 1 day ago - Il y a un jour - - - - {} days ago - Il y a {} jours - - - - {} hours ago - Il y a {} heures - - - - {} minutes ago - Il y a {} minutes - - - - {} seconds ago - Il y a {} secondes + Options - Options + + + + + Restore + + + + + Delete + Show modifications - Montrer les modifications + Show ancient version - Montrer la version ancienne + Show spaces - Montrer les espaces + Show modifications only - Montrer les modifications seulement - - - - Line {}: - Ligne {}: + {} years ago - Il y a {} ans + {} months ago - Il y a {} mois + + + + + {} days ago + + + + + 1 day ago + + + + + {} hours ago + + + + + {} minutes ago + + + + + {} seconds ago + + + + + Line {}: + Clear all - Effacer tout + @@ -3812,149 +3912,94 @@ des lignes: Form - Form - - - - Search in: - Rechercher dans: - - - - All - Tout - - - - Title - Titre - - - - Text - Texte - - - - Summary - Résumé - - - - Notes - Notes - - - - POV - POV - - - - Status - Status - - - - Label - Label - - - - Options: - Options: - - - - Case sensitive - Sensible à la casse + Search for... - Texte à rechercher… + settingsWindow - - New status - Nouveau status - - - - New label - Nouveau label - - - - newtheme - nouveautheme - - - - New theme - Nouveau Thème - - - - (read-only) - (lecture seule) - - - + Open Image - + Image files (*.jpg; *.jpeg; *.png) - + Error Erreur - + Unable to load selected file - + Unable to add selected image: {} + + + New status + + + + + New label + + + + + newtheme + + + + + New theme + + + + + (read-only) + + sldImportance Form - Form + TextLabel - TextLabel + Minor - Mineur + Secondary - Secondaire + Main - Principal + @@ -3976,30 +4021,17 @@ des lignes: <p><b>Mark:</b></p> - - <p>Divise le(s) élément(s) à la marque suivante.</p> - - <p>Si l'un des éléments sélectionnés est un dossier, l'effet sera appliqué de manière récursive à <i>chacun</i> des sous-éléments.</p> - - <p>La marque de séparation peut contenir les charactères d'échapement suivants: - <ul> - <li><b><code>\n</code></b>: retour à la ligne</li> - <li><b><code>\t</code></b>: tabulation</li> - </ul> - </p> - - <p><b>Marque:</b></p> - + Split '{}' - Diviser '{}' + Split items - Diviser les éléments sélectionnés + @@ -4007,17 +4039,17 @@ des lignes: Form - Form + Show Plots - Montrer les intrigues + Show Characters - Montrer les personnages + @@ -4025,78 +4057,78 @@ des lignes: Open selected items in that view. - Ouvrir les éléments sélectionnés dans cette vue. + Split horizontally - Écran partagé horizontalement + Close split - Fermer l'écran partagé + Split vertically - Écran partagé verticalement + textEditView - + Various - Différentes valeurs + textFormat + + + Form + + CTRL+B - CTRL+G + CTRL+I - CTRL+I + CTRL+U - CTRL+U + CTRL+P - CTRL+P + CTRL+L - CTRL+L + CTRL+E - CTRL+E + CTRL+R - CTRL+R + CTRL+J - CTRL+J - - - - Form - Form + @@ -4104,22 +4136,22 @@ des lignes: Expand {} - Développer {} + Collapse {} - Fermer {} + Expand All - Tout développer + Collapse All - Tout fermer + @@ -4127,435 +4159,435 @@ des lignes: Form - Form + 1 - + Templates - Modèles + Empty - Vide + Novel - Roman + Novella - Nouvelle + Short Story - Histoire courte + Research paper - Article académique + Demo projects - Projets de démonstration + Add level - Ajouter un niveau + Add word count - Ajouter le nombre de mots + Next time, automatically open last project - La prochaine fois, ouvrir automatiquement le dernier projet + Open... - Ouvrir... + Recent - Récents + Create - Créer + Open project - Ouvrir le projet - - - - Manuskript project (*.msk) - Projet Manuskript (*.msk) - - - - Save project as... - Enregistrer le projer sous... - - - - Create New Project - Créer un nouveau projet - - - - Chapter - Chapitre - - - - Scene - Scène - - - - Trilogy - Trilogie - - - - Book - Livre - - - - Section - Section - - - - words each. - mots chacun(e). - - - - of - de - - - - Text - Texte - - - - Something - Quelque chose - - - - <b>Total:</b> {} words (~ {} pages) - <b>Total:</b> {} mots (~ {} pages) - - - - Idea - Idée - - - - Note - Note - - - - Research - Recherche - - - - TODO - TODO - - - - First draft - Premier brouillon - - - - Second draft - Second brouillon - - - - Final - Final + Manuskript project (*.msk);;All files (*) - Projet manuskript (*.msk);;Tous les fichiers (*) + - - Empty fiction - Fiction vide + + Save project as... + - - Empty non-fiction - Non-fiction vide - - - - Fiction - Fiction - - - - Non-fiction - Non-fiction + + Manuskript project (*.msk) + Manuskript - Manuskript + Manuskript + + + + Create New Project + Warning - Attention + Overwrite existing project {} ? - Écraser le projet existant {} ? + + + + + Empty fiction + + + + + Chapter + + + + + Scene + + + + + Trilogy + + + + + Book + + + + + Section + + + + + Empty non-fiction + + + + + words each. + + + + + of + + + + + Text + + + + + Something + + + + + <b>Total:</b> {} words (~ {} pages) + + + + + Fiction + + + + + Non-fiction + + + + + Idea + + + + + Note + + + + + Research + + + + + TODO + + + + + First draft + + + + + Second draft + + + + + Final + worldModel - + New item - Nouvel élément + - + Fantasy world building - Fantasy + - + Physical - Physique + - + Climate - Climat + - + Topography - Topographie + - + Astronomy - Astronomie + - - Wild life - Faune - - - - Flora - Flore - - - - History - Histoire - - - - Races - Races - - - - Diseases - Maladies - - - - Cultural - Culture - - - - Customs - Coutumes - - - - Food - Nourriture - - - - Languages - Langues - - - - Education - Éducation - - - - Dresses - Habits - - - - Science - Science - - - - Calendar - Calendrier - - - - Bodily language - Language corporel - - - - Ethics - Éthique - - - - Religion - Religion - - - - Government - Gouvernement - - - - Politics - Politique - - - - Gender roles - Rôles de genres - - - - Music and arts - Musique et arts - - - - Architecture - Architecture - - - - Military - Militaire - - - - Technology - Technologie - - - - Courtship - Relations - - - - Demography - Démographie - - - - Transportation - Transport - - - - Medicine - Médecine - - - - Magic system - Magie - - - - Rules - Lois - - - - Organization - Organisation - - - - Magical objects - Objets magiques - - - - Magical places - Endroits magiques - - - - Magical races - Races magiques - - - - Important places - Lieux importants - - - - Important objects - Objets importants - - - + Natural resources + + + Wild life + + + + + Flora + + + + + History + + + + + Races + + + + + Diseases + + + + + Cultural + + + + + Customs + + + + + Food + + + + + Languages + + + + + Education + + + + + Dresses + + + + + Science + + + + + Calendar + + + + + Bodily language + + + + + Ethics + + + + + Religion + + + + + Government + + + + + Politics + + + + + Gender roles + + + + + Music and arts + + + + + Architecture + + + + + Military + + + + + Technology + + + + + Courtship + + + + + Demography + + + + + Transportation + + + + + Medicine + + + + + Magic system + + + + + Rules + + + + + Organization + + + + + Magical objects + + + + + Magical places + + + + + Magical races + + + + + Important places + + + + + Important objects + + diff --git a/i18n/manuskript_hu.ts b/i18n/manuskript_hu.ts index 22658e6..fc2fa5a 100644 --- a/i18n/manuskript_hu.ts +++ b/i18n/manuskript_hu.ts @@ -482,7 +482,7 @@ Akkor használja ezt, ha YAML-hoz kapcsolódó gondjai vannak. MainWindow - + General Általános @@ -522,7 +522,7 @@ Akkor használja ezt, ha YAML-hoz kapcsolódó gondjai vannak. Szerző - + Name Név @@ -532,7 +532,7 @@ Akkor használja ezt, ha YAML-hoz kapcsolódó gondjai vannak. Email cím - + Summary Összefoglaló @@ -542,7 +542,7 @@ Akkor használja ezt, ha YAML-hoz kapcsolódó gondjai vannak. Szituáció: - + Summary: Összefoglaló: @@ -552,17 +552,17 @@ Akkor használja ezt, ha YAML-hoz kapcsolódó gondjai vannak. Egy mondat - + One paragraph Egy bekezdés - + One page Egy oldal - + Full Teljes @@ -592,7 +592,7 @@ Akkor használja ezt, ha YAML-hoz kapcsolódó gondjai vannak. Teljes összefoglaló - + Next Következő @@ -612,312 +612,312 @@ Akkor használja ezt, ha YAML-hoz kapcsolódó gondjai vannak. Nevek - + Filter Szűrő - + Basic info Alapinformáció - + Importance Fontosság - + Motivation Motiváció - + Goal Cél - + Conflict Konfliktus - + Epiphany Fordulópont - + <html><head/><body><p align="right">One sentence<br/>summary</p></body></html> <html><head/><body><p align="right">Egy mondat<br/>összefoglaló</p></body></html> - + <html><head/><body><p align="right">One paragraph<br/>summary</p></body></html> <html><head/><body><p align="right">Egy bekezdés<br/>összefoglaló</p></body></html> - + Notes Jegyzetek - + Detailed info Részletes információ - + Plots Cselekmények - + Plot Cselekmény - + Character(s) Szereplő(k) - + Description Leírás - + Result Eredmény - + Resolution steps Megoldás lépései - + World Világ - + Populates with empty data Feltöltés üres adatokkal - + More Több - + Source of passion Szenvedély forrása - + Source of conflict Konfliktus forrása - + Outline Áttekintés - + Editor Szerkesztő - + Debug Hibakeresés - + FlatData SimaAdat - + Persos Személyek - + Labels Címkék - + &File &Fájl - + &Recent &Előző - + &Help &Súgó - + &Tools &Eszközök - + &Edit &Szerkesztés - + &View &Nézet - + &Mode &Mód - + &Cheat sheet &Puska - + Sea&rch &Keresés - + &Navigation &Navigáció - + &Open Megn&yitás - + Ctrl+O Ctrl+O - + &Save &Mentés - + Ctrl+S Ctrl+S - + Sa&ve as... Mentés m&ásként... - + Ctrl+Shift+S Ctrl+Shift+S - + &Quit &Kilépés - + Ctrl+Q Ctrl+Q - + &Show help texts Sú&gó szövegek mutatása - + Ctrl+Shift+B Ctrl+Shift+B - + &Spellcheck &Helyesírás-ellenőrzés - + F9 F9 - + &Labels... &Címkék... - + &Status... &Státusz... - + Tree Fa - + &Simple &Egyszerű - + &Fiction &Fikció - + Index cards Tárgymutató kártyák - + S&ettings &Beállítások - + F8 F8 - + &Close project &Projekt bezárása - + Co&mpile &Összeállítás - + F6 F6 - + &Frequency Analyzer &Gyakoriság Elemző @@ -927,564 +927,607 @@ Akkor használja ezt, ha YAML-hoz kapcsolódó gondjai vannak. Könyv információk - + &About &Névjegy - + About Manuskript A Manuskript -ről - + Manuskript Manuskript - + Project {} saved. {} projekt mentve. - + WARNING: Project {} not saved. FIGYELEM: {} projekt nem került mentésre. - + Project {} loaded. {} projekt betöltve. - + Project {} loaded with some errors: {} projekt betöltve, hibákkal: - + * {} wasn't found in project file. * {} nem található a projekt fájlban. - + Project {} loaded with some errors. {} projekt betöltve, hibákkal. - + (~{} pages) (~{} oldal) - + Words: {}{} Szó: {}{} - + Book summary Könyv összefoglalása - + Project tree Projektfa - + Metadata Metaadat - + Story line Történetív - + Enter information about your book, and yourself. Adjon meg információt a könyvéről és önmagáról. - + The basic situation, in the form of a 'What if...?' question. Ex: 'What if the most dangerous evil wizard wasn't able to kill a baby?' (Harry Potter) Az alapszituáció 'Mi lenne ha...?' kérdésként feltéve. Pl.. 'Mi lenne ha a legveszélyesebb ' gonosz varázsló ne lenne képes megölni egy csecsemőt?' (Harry Potter) - + Take time to think about a one sentence (~50 words) summary of your book. Then expand it to a paragraph, then to a page, then to a full summary. Szánjon rá időt, hogy elgondolkodjon a könyve egymondatos (-50 szavas) összefoglalóján. Aztán bővítse ki egy bekezdéssé, majd egy oldallá, majd egy teljes összefoglalóvá. - + Create your characters. Alkossa meg a szereplőit. - + Develop plots. Cselekmények kidolgozása. - + Build worlds. Create hierarchy of broad categories down to specific details. Építsen világokat. Készítse el az átfogó kategóriák (és az specifikus részleteinek) hierarchiáját. - + Create the outline of your masterpiece. Készítse el a mesterműve áttekintését. - + Write. Írjon. - + Debug info. Sometimes useful. Hibakeresési információ. Valami hasznos. - + Dictionary Szótár - + Nothing Semmi - + POV Szempont - + Label Címke - + Progress Előrehaladás - + Compile Összeállítás - + Icon color Ikonszín - + Text color Szövegszín - + Background color Háttérszín - + Icon Ikon - + Text Szöveg - + Background Háttér - + Border Szegély - + Corner Sarok - + Add plot step Cselekmény lépés hozzáadása (CTRL+Enter) - + &Import… &Importálás… - + F7 F7 - + &Copy &Másolás - + Ctrl+C Ctrl+C - + C&ut &Kivágás - + Ctrl+X Ctrl+X - + &Paste &Beillesztés - + Ctrl+V Ctrl+V - + &Split… &Felosztás… - + Ctrl+Shift+K Ctrl+Shift+K - + Sp&lit at cursor Fe&losztás kurzornál - + Ctrl+K Ctrl+K - + Ctrl+M Ctrl+M - + Ctrl+D Ctrl+D - + Del Törlés - + &Move Up &Mozgatás Fel - + Ctrl+Shift+Up Ctrl+Shift+Up - + M&ove Down M&ozgatás Le - + Ctrl+Shift+Down Ctrl+Shift+Down - + Dupl&icate &Duplikálás - + &Delete &Törlés - + &Rename &Átnevezés - + F2 F2 - + Organi&ze &Rendszerezés - + M&erge Össze&fésülés - + Remove selected plot step(s) - + &Format - + &Header - + &Level 1 (setext) - + Ctrl+Alt+1 - + Level &2 - + Ctrl+Alt+2 - + Level &1 (atx) - + Ctrl+1 - + L&evel 2 - + Ctrl+2 - + Level &3 - + Ctrl+3 - + Level &4 - + Ctrl+4 - + Level &5 - + Ctrl+5 - + Level &6 - + Ctrl+6 - + &Bold - + Ctrl+B - + &Italic - + Ctrl+I - + &Strike - + &Verbatim - + Su&perscript - + Ctrl++ - + Subsc&ript - + Ctrl+- - + Co&mment block - + Ctrl+Shift+C - + Clear &formats - + Ctrl+0 - + &Comment line(s) - + &Ordered list - + &Unordered list - + B&lockquote - + The file {} does not exist. Has it been moved or deleted? - + Install {}{} to use spellcheck - + {} has no installed dictionaries - + {}{} is not installed - + Save project? - + Save changes to project "{}" before closing? - + Your changes will be lost if you don't save them. - + PyQt / Qt versions 5.11 and 5.12 are known to cause a crash which might result in a loss of data. - + PyQt {} and Qt {} are in use. - + Proceed with import at your own risk + + + Allow POV + + + + + Search + + + + + Ctrl+F + + + + + F3 + F3 + + + + Shift+F3 + + + + + Situation + + + + + Status + Státusz + + + + Search + + + No results found + + Settings @@ -1499,7 +1542,7 @@ Akkor használja ezt, ha YAML-hoz kapcsolódó gondjai vannak. Általános - + Revisions Felülvizsgálatok @@ -1509,17 +1552,17 @@ Akkor használja ezt, ha YAML-hoz kapcsolódó gondjai vannak. Nézetek - + Labels Címkék - + Status Státusz - + Fullscreen Teljes képernyő @@ -1534,658 +1577,709 @@ Akkor használja ezt, ha YAML-hoz kapcsolódó gondjai vannak. Alkalmazás stílusa - + Loading Betöltés - + Automatically load last project on startup Automatikusan töltse be a legutóbbi projektet induláskor - + Saving Mentés - + Automatically save every Automatikusan mentsen minden - + minutes. percben. - + If no changes during Ha nem történik változás - + seconds. másodpercig. - + Save on project close Mentés kilépéskor - + <html><head/><body><p>If you check this option, your project will be saved as one single file. Easier to copy or backup, but does not allow collaborative editing, or versioning.<br/>If this is unchecked, your project will be saved as a folder containing many small files.</p></body></html> <html><head/><body><p>Ha ezt a lehetőséget bejelöli, a projektje egyetlen fájlként kerül mentésre. Így egyszerűbb másolni vagy biztonsági mentést készíteni róla, de elesik a csapatmunka és a verziókezelés lehetőségétől.<br/>Amennyiben nincs bejelölve, a projektje mappaként kerül mentésre, amely sok kis fáljt tartalmaz</p></body></html> - + Save to one single file Mentés egyetlen fájlba - + Revisions are a way to keep track of modifications. For each text item, it stores any changes you make to the main text, allowing you to see and restoring previous versions. A felülvizsgálatok használata egy módszer a módosítások követésére. Minden szöveges elem számára tartalmazza annak minden módosulatát, lehetővé téve, hogy megtekintse és visszaállítsa az előző verziókat. - + Keep revisions Felülvizsgálatok megtartása - + S&mart remove &Intelligens eltávolítás - + Keep: Megtartás: - + Smart remove allows you to keep only a certain number of revisions. It is strongly recommended to use it, lest you file will becomes full of thousands of insignificant changes. Az intelligens eltávolítás lehetővé teszi, hogy csak bizonyos számú felülvizsgálatot tartson meg. Használata erősen javasolt, ellenkező esetben a fájlja tele lesz jelentéktelen módosítások ezreivel. - + revisions per day for the last month felülvizsgálat naponta, a múlt hónapban - + revisions per minute for the last 10 minutes felülvizsgálat percenként, az elmúlt 10 percben - + revisions per hour for the last day felülvizsgálat óránként a legutóbbi napra - + revisions per 10 minutes for the last hour felülvizsgálat 10 percenként, az utóbbi egy órában - + revisions per week till the end of time felülvizsgálat hetente, valaha - + Views settings Beállítások megtekintése - + Tree Fa - + Colors Színek - + Icon color: Ikon színe: - + Nothing Semmi - + POV Szempont - + Label Címke - + Progress Előrehaladás - + Compile Összeállítás - + Text color: Szövegszín: - + Background color: Háttérszín: - + Folders Mappák - + Show ite&m count Ele&mszám mutatása - + Show summary Összefoglaló mutatása - + &Nothing &Semmi - + Text Szöveg - + Outline Körvonal - + Visible columns Látható oszlopok - + Goal Cél - + Word count Szószám - + Percentage Százalék - + Title Cím - + Index cards Kartotéklapok - + Item colors Elemszínek - + Border color: Szegélyszín: - + Corner color: Sarokszín: - + Background Háttér - + Color: Szín: - + Ctrl+S Ctrl+S - + Image: Kép: - + Text editor Szövegszerkesztő - + Font Betűtípus - + Family: Család: - + Size: Méret: - + Misspelled: Elírt: - + Background: Háttér: - + Paragraphs Bekezdések - + Line spacing: Vonaltávolság: - + Single Egyes - + 1.5 lines 1.5 sor - + Double Dupla - + Proportional Arányos - + % % - + Tab width: Tabulátorszélesség: - + px :px - + Indent 1st line Első sor behúzása - + Spacing: Szóközölés: - + New Új - + Edit Szerkesztés - + Delete Törlés - + Theme name: Témanév: - + Apply Elfogadás - + Cancel Mégsem - + Window Background Ablakháttér - + Text Background Szövegháttér - + Text Options Szövegbeállítások - + Paragraph Options Bekezdés Beállítások - + Type: Típus: - + No Image Nincs Kép - + Tiled Csempék - + Centered Középrezárt - + Stretched Kinyújtott - + Scaled Skálázott - + Zoomed Nagyított - + Opacity: Telítettség: - + Position: Pozíció: - + Left Bal - + Center Közép - + Right Jobb - + Width: Szélesség: - + Corner radius: Sarok rádiusza: - + Margins: Margók: - + Padding: Párnázottság: - + Font: Betű: - + Style Stílus - + Cursor Kurzor - + Use block insertion of Blokkbeillesztés használata - + Alignment: Elrendezés: - + Justify Kiegyenlítés - + Alignment Elrendezés - + Icon Size Ikonméret - + TextLabel SzövegCímke - + Disable blinking Villogás letiltása - + Text area Szövegterület - + Max width Max távolság - + Left/Right margins: Bal/Jobb margók: - + Top/Bottom margins: Felső/Alsó margók: - + S&how progress Előrehaladás &mutatása - + Show summar&y &Összegzés mutatása - + Show p&rogress &Előrehaladás mutatása - + Old st&yle Régi &stílus - + Transparent Átlátszó - + Restore defaults Alapértelmezés visszaállítása - + Style: - + Language: - + Font size: Betűméret: - + Restarting Manuskript ensures all settings take effect. - + Show &word count - + &Show word count - + &New style - + Typewriter mode - + Focus mode - + None Egyik sem - + Sentence - + Line - + Paragraph - + <p><b>The Revisions feature has been at the source of many reported issues. In this version of Manuskript it has been turned off by default for new projects in order to provide the best experience.</b></p><p>Why aren't these issues fixed already? <a href="https://www.theologeek.ch/manuskript/contribute/">We need your help to make Manuskript better!</a></p> + + + Show progress in chars next + to words + + + + + Char/Word Counter + + + + + Count spaces as chars + + + + + Show char c&ount + + + + + Sho&w char count + + SpellAction - + Spelling Suggestions Helyesírási javaslatok - + &Add to dictionary &Hozzáadás a szótárhoz - + &Remove from custom dictionary &Eltávolítás az egyéni szótárból + + + &New Character + + + + + &New Plot Item + + + + + &New World Item + + + + + &Correction Suggestions + + + + + &Correction Suggestion + + about @@ -2287,17 +2381,12 @@ Akkor használja ezt, ha YAML-hoz kapcsolódó gondjai vannak. characterModel - - New character - Új szereplő - - - + Name Név - + Value Érték @@ -2305,17 +2394,17 @@ Akkor használja ezt, ha YAML-hoz kapcsolódó gondjai vannak. characterTreeView - + Main - + Secondary Másodlagos - + Minor Kisebb jelentőségű @@ -2431,12 +2520,12 @@ Akkor használja ezt, ha YAML-hoz kapcsolódó gondjai vannak. corkDelegate - + One line summary Egysoros összefoglaló - + Full summary Teljes összefoglaló @@ -3018,15 +3107,30 @@ Akkor használja ezt, ha YAML-hoz kapcsolódó gondjai vannak. Gyökér - - {} words / {} - {} szó / {} - - - + {} words {} szó. + + + ({} chars) {} words / {} + + + + + {} words / {} + + + + + {} chars + + + + + {} chars + + markdownSettings @@ -3231,12 +3335,12 @@ Akkor használja ezt, ha YAML-hoz kapcsolódó gondjai vannak. outlineItem - + {} words / {} ({}) {} szó / {} ({}) - + {} words {} szó @@ -3458,37 +3562,32 @@ Akkor használja ezt, ha YAML-hoz kapcsolódó gondjai vannak. plotModel - - New plot - Új cselekmény - - - + Name Név - + Meta Meta - + New step Új lépés - + Main - + Secondary Másodlagos - + Minor Kisebb jelentőségű @@ -3835,111 +3934,56 @@ Akkor használja ezt, ha YAML-hoz kapcsolódó gondjai vannak. Search for... Keresés... - - - Search in: - Keresés ebben: - - - - All - Mind - - - - Title - Cím - - - - Text - Szöveg - - - - Summary - Összefoglaló - - - - Notes - Jegyzetek - - - - POV - Szempont - - - - Status - Státusz - - - - Label - Címke - - - - Options: - Lehetőségek: - - - - Case sensitive - Kis-nagybetű érzékeny - settingsWindow - + New status Új státusz - + New label Új címke - + newtheme újtéma - + New theme Új téma - + (read-only) (csak-olvasható) - + Open Image - + Image files (*.jpg; *.jpeg; *.png) - + Error Hiba - + Unable to load selected file - + Unable to add selected image: {} @@ -4063,7 +4107,7 @@ Akkor használja ezt, ha YAML-hoz kapcsolódó gondjai vannak. textEditView - + Various Különféle @@ -4365,212 +4409,212 @@ Akkor használja ezt, ha YAML-hoz kapcsolódó gondjai vannak. worldModel - + New item Új elem - + Fantasy world building Fantáziavilág építése - + Physical Fizikai - + Climate Éghajlat - + Topography Domborzat - + Astronomy Csillagászat - + Wild life Vadvilág - + Flora Növényvilág - + History Történelem - + Races Fajok - + Diseases Betegségek - + Cultural Kulturális - + Customs Szokások - + Food Étel - + Languages Nyelvek - + Education Oktatás - + Dresses Öltözékek - + Science Tudomány - + Calendar Naptár - + Bodily language Testbeszéd - + Ethics Erkölcsök - + Religion Vallás - + Government Kormány - + Politics Politikák - + Gender roles Nemi szerepek - + Music and arts Zene és művészetek - + Architecture Építészet - + Military Katonaság - + Technology Technológia - + Courtship Udvarlás - + Demography Demográfia - + Transportation Közlekedés - + Medicine Orvosság - + Magic system Mágiarendszer - + Rules Szabályok - + Organization Szervezet - + Magical objects Varázstárgyak - + Magical places Mágikus helyek - + Magical races Mágikus fajok - + Important places Fontos helyek - + Important objects Fontos tárgyak - + Natural resources diff --git a/i18n/manuskript_id.ts b/i18n/manuskript_id.ts index bfa07c2..46bfcb5 100644 --- a/i18n/manuskript_id.ts +++ b/i18n/manuskript_id.ts @@ -456,7 +456,7 @@ Use that if you get YAML related error. MainWindow - + General @@ -496,7 +496,7 @@ Use that if you get YAML related error. - + Name @@ -506,7 +506,7 @@ Use that if you get YAML related error. - + Summary @@ -516,7 +516,7 @@ Use that if you get YAML related error. - + Summary: @@ -526,17 +526,17 @@ Use that if you get YAML related error. - + One paragraph - + One page - + Full @@ -566,7 +566,7 @@ Use that if you get YAML related error. - + Next @@ -586,312 +586,312 @@ Use that if you get YAML related error. - + Filter - + Basic info - + Importance - + Motivation - + Goal - + Conflict - + Epiphany - + <html><head/><body><p align="right">One sentence<br/>summary</p></body></html> - + <html><head/><body><p align="right">One paragraph<br/>summary</p></body></html> - + Notes - + Detailed info - + Plots - + Plot - + Character(s) - + Description - + Result - + Resolution steps - + World - + Populates with empty data - + More - + Source of passion - + Source of conflict - + Outline - + Editor - + Debug - + FlatData - + Persos - + Labels - + &File - + &Recent - + &Help - + &Tools - + &Edit - + &View - + &Mode - + &Cheat sheet - + Sea&rch - + &Navigation - + &Open - + Ctrl+O - + &Save - + Ctrl+S - + Sa&ve as... - + Ctrl+Shift+S - + &Quit - + Ctrl+Q - + &Show help texts - + Ctrl+Shift+B - + &Spellcheck - + F9 - + &Labels... - + &Status... - + Tree - + &Simple - + &Fiction - + Index cards - + S&ettings - + F8 - + &Close project - + Co&mpile - + F6 - + &Frequency Analyzer @@ -901,562 +901,605 @@ Use that if you get YAML related error. - + &About - + About Manuskript - + Manuskript - + Project {} saved. - + WARNING: Project {} not saved. - + Project {} loaded. - + Project {} loaded with some errors: - + * {} wasn't found in project file. - + Project {} loaded with some errors. - + (~{} pages) - + Words: {}{} - + Book summary - + Project tree - + Metadata - + Story line - + Enter information about your book, and yourself. - + The basic situation, in the form of a 'What if...?' question. Ex: 'What if the most dangerous evil wizard wasn't able to kill a baby?' (Harry Potter) - + Take time to think about a one sentence (~50 words) summary of your book. Then expand it to a paragraph, then to a page, then to a full summary. - + Create your characters. - + Develop plots. - + Build worlds. Create hierarchy of broad categories down to specific details. - + Create the outline of your masterpiece. - + Write. - + Debug info. Sometimes useful. - + Dictionary - + Nothing - + POV - + Label - + Progress - + Compile - + Icon color - + Text color - + Background color - + Icon - + Text - + Background - + Border - + Corner - + Add plot step - + &Import… - + F7 - + &Copy - + Ctrl+C - + C&ut - + Ctrl+X - + &Paste - + Ctrl+V - + &Split… - + Ctrl+Shift+K - + Sp&lit at cursor - + Ctrl+K - + Ctrl+M - + Ctrl+D - + Del - + &Move Up - + Ctrl+Shift+Up - + M&ove Down - + Ctrl+Shift+Down - + Dupl&icate - + &Delete - + &Rename - + F2 - + Organi&ze - + M&erge - + Remove selected plot step(s) - + &Format - + &Header - + &Level 1 (setext) - + Ctrl+Alt+1 - + Level &2 - + Ctrl+Alt+2 - + Level &1 (atx) - + Ctrl+1 - + L&evel 2 - + Ctrl+2 - + Level &3 - + Ctrl+3 - + Level &4 - + Ctrl+4 - + Level &5 - + Ctrl+5 - + Level &6 - + Ctrl+6 - + &Bold - + Ctrl+B - + &Italic - + Ctrl+I - + &Strike - + &Verbatim - + Su&perscript - + Ctrl++ - + Subsc&ript - + Ctrl+- - + Co&mment block - + Ctrl+Shift+C - + Clear &formats - + Ctrl+0 - + &Comment line(s) - + &Ordered list - + &Unordered list - + B&lockquote - + The file {} does not exist. Has it been moved or deleted? - + Install {}{} to use spellcheck - + {} has no installed dictionaries - + {}{} is not installed - + Save project? - + Save changes to project "{}" before closing? - + Your changes will be lost if you don't save them. - + PyQt / Qt versions 5.11 and 5.12 are known to cause a crash which might result in a loss of data. - + PyQt {} and Qt {} are in use. - + Proceed with import at your own risk + + + Allow POV + + + + + Search + + + + + Ctrl+F + + + + + F3 + + + + + Shift+F3 + + + + + Situation + + + + + Status + + + + + Search + + + No results found + + Settings @@ -1471,7 +1514,7 @@ Use that if you get YAML related error. - + Revisions @@ -1481,17 +1524,17 @@ Use that if you get YAML related error. - + Labels - + Status - + Fullscreen @@ -1506,658 +1549,709 @@ Use that if you get YAML related error. - + Loading - + Automatically load last project on startup - + Saving - + Automatically save every - + minutes. - + If no changes during - + seconds. - + Save on project close - + <html><head/><body><p>If you check this option, your project will be saved as one single file. Easier to copy or backup, but does not allow collaborative editing, or versioning.<br/>If this is unchecked, your project will be saved as a folder containing many small files.</p></body></html> - + Save to one single file - + Revisions are a way to keep track of modifications. For each text item, it stores any changes you make to the main text, allowing you to see and restoring previous versions. - + Keep revisions - + S&mart remove - + Keep: - + Smart remove allows you to keep only a certain number of revisions. It is strongly recommended to use it, lest you file will becomes full of thousands of insignificant changes. - + revisions per day for the last month - + revisions per minute for the last 10 minutes - + revisions per hour for the last day - + revisions per 10 minutes for the last hour - + revisions per week till the end of time - + Views settings - + Tree - + Colors - + Icon color: - + Nothing - + POV - + Label - + Progress - + Compile - + Text color: - + Background color: - + Folders - + Show ite&m count - + Show summary - + &Nothing - + Text - + Outline - + Visible columns - + Goal - + Word count - + Percentage - + Title - + Index cards - + Item colors - + Border color: - + Corner color: - + Background - + Color: - + Ctrl+S - + Image: - + Text editor - + Font - + Family: - + Size: - + Misspelled: - + Background: - + Paragraphs - + Line spacing: - + Single - + 1.5 lines - + Double - + Proportional - + % - + Tab width: - + px - + Indent 1st line - + Spacing: - + New - + Edit - + Delete - + Theme name: - + Apply - + Cancel - + Window Background - + Text Background - + Text Options - + Paragraph Options - + Type: - + No Image - + Tiled - + Centered - + Stretched - + Scaled - + Zoomed - + Opacity: - + Position: - + Left - + Center - + Right - + Width: - + Corner radius: - + Margins: - + Padding: - + Font: - + Style - + Cursor - + Use block insertion of - + Alignment: - + Justify - + Alignment - + Icon Size - + TextLabel - + Disable blinking - + Text area - + Max width - + Left/Right margins: - + Top/Bottom margins: - + S&how progress - + Show summar&y - + Show p&rogress - + Old st&yle - + Transparent - + Restore defaults - + Style: - + Language: - + Font size: - + Restarting Manuskript ensures all settings take effect. - + Show &word count - + &Show word count - + &New style - + Typewriter mode - + Focus mode - + None - + Sentence - + Line - + Paragraph - + <p><b>The Revisions feature has been at the source of many reported issues. In this version of Manuskript it has been turned off by default for new projects in order to provide the best experience.</b></p><p>Why aren't these issues fixed already? <a href="https://www.theologeek.ch/manuskript/contribute/">We need your help to make Manuskript better!</a></p> + + + Show progress in chars next + to words + + + + + Char/Word Counter + + + + + Count spaces as chars + + + + + Show char c&ount + + + + + Sho&w char count + + SpellAction - + Spelling Suggestions - + &Add to dictionary - + &Remove from custom dictionary + + + &New Character + + + + + &New Plot Item + + + + + &New World Item + + + + + &Correction Suggestions + + + + + &Correction Suggestion + + about @@ -2259,17 +2353,12 @@ Use that if you get YAML related error. characterModel - - New character - - - - + Name - + Value @@ -2277,17 +2366,17 @@ Use that if you get YAML related error. characterTreeView - + Main - + Secondary - + Minor @@ -2403,12 +2492,12 @@ Use that if you get YAML related error. corkDelegate - + One line summary - + Full summary @@ -2990,13 +3079,28 @@ Use that if you get YAML related error. - - {} words / {} + + {} words - - {} words + + ({} chars) {} words / {} + + + + + {} words / {} + + + + + {} chars + + + + + {} chars @@ -3203,12 +3307,12 @@ Use that if you get YAML related error. outlineItem - + {} words / {} ({}) - + {} words @@ -3430,37 +3534,32 @@ Use that if you get YAML related error. plotModel - - New plot - - - - + Name - + Meta - + New step - + Main - + Secondary - + Minor @@ -3807,111 +3906,56 @@ Use that if you get YAML related error. Search for... - - - Search in: - - - - - All - - - - - Title - - - - - Text - - - - - Summary - - - - - Notes - - - - - POV - - - - - Status - - - - - Label - - - - - Options: - - - - - Case sensitive - - settingsWindow - + New status - + New label - + newtheme - + New theme - + (read-only) - + Open Image - + Image files (*.jpg; *.jpeg; *.png) - + Error Eror - + Unable to load selected file - + Unable to add selected image: {} @@ -4021,7 +4065,7 @@ Use that if you get YAML related error. textEditView - + Various @@ -4323,212 +4367,212 @@ Use that if you get YAML related error. worldModel - + New item - + Fantasy world building - + Physical - + Climate - + Topography - + Astronomy - + Wild life - + Flora - + History - + Races - + Diseases - + Cultural - + Customs - + Food - + Languages - + Education - + Dresses - + Science - + Calendar - + Bodily language - + Ethics - + Religion - + Government - + Politics - + Gender roles - + Music and arts - + Architecture - + Military - + Technology - + Courtship - + Demography - + Transportation - + Medicine - + Magic system - + Rules - + Organization - + Magical objects - + Magical places - + Magical races - + Important places - + Important objects - + Natural resources diff --git a/i18n/manuskript_it.ts b/i18n/manuskript_it.ts index 1fd5866..ee97a92 100644 --- a/i18n/manuskript_it.ts +++ b/i18n/manuskript_it.ts @@ -484,7 +484,7 @@ Usalo se ottieni un errore relativo a YAML. MainWindow - + General Generale @@ -524,7 +524,7 @@ Usalo se ottieni un errore relativo a YAML. Autore - + Name Nome @@ -534,7 +534,7 @@ Usalo se ottieni un errore relativo a YAML. - + Summary Riassunto @@ -544,7 +544,7 @@ Usalo se ottieni un errore relativo a YAML. Situazione: - + Summary: Riassunto: @@ -554,17 +554,17 @@ Usalo se ottieni un errore relativo a YAML. Una frase - + One paragraph Un paragrafo - + One page Una pagina - + Full Completo @@ -594,7 +594,7 @@ Usalo se ottieni un errore relativo a YAML. Riassunto completo - + Next Avanti @@ -614,312 +614,312 @@ Usalo se ottieni un errore relativo a YAML. Nomi - + Filter Filtro - + Basic info Informazioni di base - + Importance Importanza - + Motivation Motivazione - + Goal Obiettivo - + Conflict Conflitto - + Epiphany Epifania - + <html><head/><body><p align="right">One sentence<br/>summary</p></body></html> <html><head/><body><p align="right">Una frase<br/>riassunto</p></body></html> - + <html><head/><body><p align="right">One paragraph<br/>summary</p></body></html> <html><head/><body><p align="right">Un paragrafo<br/>riassunto</p></body></html> - + Notes Note - + Detailed info Informazioni dettagliate - + Plots Trame - + Plot Trama - + Character(s) Personaggio(i) - + Description Descrizione - + Result Esito - + Resolution steps Passaggi risolutivi - + World Ambientazione - + Populates with empty data Popola con nuovi dati - + More Di più - + Source of passion Fonte di passione - + Source of conflict Fonte di conflitto - + Outline Quadro d'insieme - + Editor Editor di testo - + Debug Messa a punto - + FlatData Dati grezzi - + Persos Personaggi - + Labels Etichette - + &File - + &Recent &Recente - + &Help &Guida - + &Tools &Strumenti - + &Edit &Modifica - + &View &Visualizza - + &Mode &Modalità - + &Cheat sheet &Promemoria - + Sea&rch Rice&rca - + &Navigation &Navigazione - + &Open &Apri - + Ctrl+O - + &Save &Salva - + Ctrl+S - + Sa&ve as... Sal&va come... - + Ctrl+Shift+S - + &Quit &Esci - + Ctrl+Q - + &Show help texts &Mostra la guida - + Ctrl+Shift+B - + &Spellcheck &Controllo ortografico - + F9 - + &Labels... &Etichette... - + &Status... &Stato... - + Tree Albero - + &Simple &Semplice - + &Fiction &Narrativa - + Index cards Schede - + S&ettings I&mpostazioni - + F8 - + &Close project &Chiudi progetto - + Co&mpile Co&mpila per esportazione - + F6 - + &Frequency Analyzer &Analizzatore di frequenza @@ -929,564 +929,607 @@ Usalo se ottieni un errore relativo a YAML. Ragguagli sul libro - + &About &A proposito - + About Manuskript A proposito di Manuskript - + Manuskript - + Project {} saved. Progetto {} salvato. - + WARNING: Project {} not saved. ATTENZIONE: Progetto {} non salvato. - + Project {} loaded. Progetto {} caricato. - + Project {} loaded with some errors: Progetto {} caricato con alcuni errori: - + * {} wasn't found in project file. * {} non trovato nel file di progetto. - + Project {} loaded with some errors. Progetto {} caricato con alcuni errori. - + (~{} pages) (~{} pagine) - + Words: {}{} Parole: {}{} - + Book summary Riassunto del libro - + Project tree Schema ad albero del progetto - + Metadata Metadati - + Story line Sviluppo della storia - + Enter information about your book, and yourself. Inserisci informazioni sul tuo libro, e su di te. - + The basic situation, in the form of a 'What if...?' question. Ex: 'What if the most dangerous evil wizard wasn't able to kill a baby?' (Harry Potter) La situazione iniziale, in forma di domanda tipo 'Cosa succede se...?'. Es: 'Cosa succede se il pericoloso mago cattivo non riesce ad uccidere un bambino?' (Harry Potter) - + Take time to think about a one sentence (~50 words) summary of your book. Then expand it to a paragraph, then to a page, then to a full summary. Prenditi il tempo per pensare ad una frase riassuntiva (~50 parole) del tuo libro. Poi espandila ad un paragrafo, poi ad una pagina, poi ad un riassunto completo. - + Create your characters. Crea i tuoi personaggi. - + Develop plots. Sviluppa le trame. - + Build worlds. Create hierarchy of broad categories down to specific details. Costruisci i mondi. Crea una gerarchia di ampie categorie fino ad arrivare ai dettagli specifici. - + Create the outline of your masterpiece. Crea il contorno del tuo capolavoro. - + Write. Scrivi. - + Debug info. Sometimes useful. Informazioni di debug. A volte possono essere utili. - + Dictionary Dizionario - + Nothing Niente - + POV - + Label Etichetta - + Progress Avanzamento - + Compile Compilato - + Icon color Colore dell'icona - + Text color Colore del testo - + Background color Colore dello sfondo - + Icon Icona - + Text Testo - + Background Sfondo - + Border Bordo - + Corner Angolo - + Add plot step Aggiungi un passaggio alla trama - + &Import… &Importa… - + F7 - + &Copy &Copia - + Ctrl+C - + C&ut T&aglia - + Ctrl+X - + &Paste &Incolla - + Ctrl+V - + &Split… &Dividi… - + Ctrl+Shift+K - + Sp&lit at cursor Di&vidi al cursore - + Ctrl+K - + Ctrl+M - + Ctrl+D - + Del Canc - + &Move Up &Sposta in alto - + Ctrl+Shift+Up Ctrl+Shift+Freccia su - + M&ove Down Sp&osta in basso - + Ctrl+Shift+Down Ctrl+Shift+Freccia giù - + Dupl&icate Dupl&ica - + &Delete &Cancella - + &Rename &Rinomina - + F2 - + Organi&ze Organi&zza - + M&erge U&nisci - + Remove selected plot step(s) Rimuovi il passaggio(i) di trama selezionato(i) - + &Format &Formato - + &Header &Intestazione - + &Level 1 (setext) &Livello 1 (setext) - + Ctrl+Alt+1 Ctrl+Alt+1 - + Level &2 Livello &2 - + Ctrl+Alt+2 Ctrl+Alt+2 - + Level &1 (atx) Livello &1 (atx) - + Ctrl+1 Ctrl+1 - + L&evel 2 L&ivello 2 - + Ctrl+2 Ctrl+2 - + Level &3 Livello &3 - + Ctrl+3 Ctrl+3 - + Level &4 Livello &4 - + Ctrl+4 Ctrl+4 - + Level &5 Livello &5 - + Ctrl+5 Ctrl+5 - + Level &6 Livello &6 - + Ctrl+6 Ctrl+6 - + &Bold &Grassetto - + Ctrl+B Ctrl+B - + &Italic &Corsivo - + Ctrl+I Ctrl+I - + &Strike &Barrato - + &Verbatim &Parola per parola - + Su&perscript A&pice - + Ctrl++ Ctrl++ - + Subsc&ript P&edice - + Ctrl+- Ctrl+- - + Co&mment block Blocco di co&mmenti - + Ctrl+Shift+C Ctrl+Shift+C - + Clear &formats Cancella i &formati - + Ctrl+0 Ctrl+0 - + &Comment line(s) Linea(e) di &commento - + &Ordered list &Elenco numerato - + &Unordered list &Elenco puntato - + B&lockquote Citazione (b&locco) - + The file {} does not exist. Has it been moved or deleted? Il file {} non esiste. È stato spostato o cancellato? - + Install {}{} to use spellcheck Installa {}{} per usare il correttore ortografico - + {} has no installed dictionaries {} non vi sono dizionari installati - + {}{} is not installed {}{} non è installato - + Save project? Salvare il progetto? - + Save changes to project "{}" before closing? Salvare i cambiamenti del progetto"{}" prima di chiuderlo? - + Your changes will be lost if you don't save them. I cambiamenti apportati andranno persi se non li salvi. - + PyQt / Qt versions 5.11 and 5.12 are known to cause a crash which might result in a loss of data. PyQt / Qt versione 5.11 e 5.12 sono conosciuti per provocare crash che potrebbero portare a perdita dei dati. - + PyQt {} and Qt {} are in use. PyQt{} e Qt {} sono in uso. - + Proceed with import at your own risk Il procedimento potrebbe arrestarsi in modo anomalo e perdere dati + + + Allow POV + + + + + Search + + + + + Ctrl+F + + + + + F3 + + + + + Shift+F3 + + + + + Situation + + + + + Status + Stato + + + + Search + + + No results found + + Settings @@ -1501,7 +1544,7 @@ Usalo se ottieni un errore relativo a YAML. Generale - + Revisions Revisioni @@ -1511,17 +1554,17 @@ Usalo se ottieni un errore relativo a YAML. Visualizzazioni - + Labels Etichette - + Status Stato - + Fullscreen Schermo intero @@ -1536,658 +1579,709 @@ Usalo se ottieni un errore relativo a YAML. Impostazioni dell'applicazione - + Loading Caricamento - + Automatically load last project on startup Carica automaticamente l'ultimo progetto all'avvio - + Saving Salvataggio - + Automatically save every Salva automaticamente ogni - + minutes. minuti. - + If no changes during Se non ci sono cambiamenti durante - + seconds. secondi. - + Save on project close Salva all'uscita - + <html><head/><body><p>If you check this option, your project will be saved as one single file. Easier to copy or backup, but does not allow collaborative editing, or versioning.<br/>If this is unchecked, your project will be saved as a folder containing many small files.</p></body></html> <html><head/><body><p>Se spunti questa opzione, il progetto sarà salvato come singolo file. Sarà più facile la copia o il backup, ma non consentirà l' editing collaborativo, o il versionning.<br/>Se non la spunti, il progetto sarà salvato come una cartella contenente molti piccoli files.</p></body></html> - + Save to one single file Salva come singolo file - + Revisions are a way to keep track of modifications. For each text item, it stores any changes you make to the main text, allowing you to see and restoring previous versions. Le revisioni sono un modo per tenere traccia delle modifiche. Per ogni elemento di testo, memorizza tutte le modifiche apportate al testo principale, consentendo di vedere e ripristinare le versioni precedenti. - + Keep revisions Mantieni le revisioni - + S&mart remove Ri&mozione intelligente - + Keep: Mantieni: - + Smart remove allows you to keep only a certain number of revisions. It is strongly recommended to use it, lest you file will becomes full of thousands of insignificant changes. La rimozione intelligente consente di mantenere solo un certo numero di revisioni. Si raccomanda di usarla, per evitare di memorizzare migliaia di cambiamenti insignificanti. - + revisions per day for the last month revisioni al giorno per l'ultimo mese - + revisions per minute for the last 10 minutes revisioni al minuto per gli ultimi 10 minuti - + revisions per hour for the last day revisioni all'ora per l'ultimo giorno - + revisions per 10 minutes for the last hour revisioni ogni 10 minuti per l'ultima ora - + revisions per week till the end of time revisioni alla settimana fino alla fine dei tempi - + Views settings Impostazioni di visualizzazione - + Tree Albero - + Colors Colori - + Icon color: Colore dell'icona: - + Nothing Niente - + POV - + Label Etichetta - + Progress Avanzamento - + Compile Compilato - + Text color: Colore del testo: - + Background color: Colore dello sfondo: - + Folders Cartelle - + Show ite&m count Mostra conteggio ele&menti - + Show summary Mostra il riassunto - + &Nothing &Niente - + Text Testo - + Outline Quadro d'insieme - + Visible columns Colonne visibili - + Goal Obiettivo - + Word count Conteggio parole - + Percentage Percentuale - + Title Titolo - + Index cards Schede - + Item colors Colori degli elementi - + Border color: Colore del bordo: - + Corner color: Colore dell'angolo: - + Background Sfondo - + Color: Colore: - + Ctrl+S - + Image: Immagine: - + Text editor Editor di testo - + Font - + Family: Famiglia: - + Size: Dimensione: - + Misspelled: Errori di ortografia: - + Background: Sfondo: - + Paragraphs Paragrafi - + Line spacing: Interlinea: - + Single Singolo - + 1.5 lines 1.5 linee - + Double Doppio - + Proportional Proporzionale - + % - + Tab width: Larghezza Tab: - + px - + Indent 1st line Indenta la 1a linea - + Spacing: Spaziatura: - + New Nuovo - + Edit Modifica - + Delete Cancella - + Theme name: Nome del tema: - + Apply Applica - + Cancel Annulla - + Window Background Sfondo della finestra - + Text Background Sfondo del testo - + Text Options Opzioni del testo - + Paragraph Options Opzioni del paragrafo - + Type: Tipo: - + No Image Nessuna immagine - + Tiled Piastrellato - + Centered Centrato - + Stretched Stirato - + Scaled Scalato - + Zoomed Zoomato - + Opacity: Opacità: - + Position: Posizione: - + Left Sinistra - + Center Centro - + Right Destra - + Width: Larghezza: - + Corner radius: Raggio dell'angolo: - + Margins: Margini: - + Padding: Riempimento: - + Font: - + Style Stile - + Cursor Cursore - + Use block insertion of Usa un blocco d'inserzione di - + Alignment: Allineamento: - + Justify Giustifica - + Alignment Allineamento - + Icon Size Dimensione dell'icona - + TextLabel Etichetta di testo - + Disable blinking Disabilita il lampeggiamento - + Text area Area del testo - + Max width Larghezza massima - + Left/Right margins: Margini sx/dx: - + Top/Bottom margins: Margini sup/inf: - + S&how progress Mo&stra avanzamento - + Show summar&y Mostra riass&unto - + Show p&rogress Most&ra avanzamento - + Old st&yle Vecchio st&ile - + Transparent Trasparente - + Restore defaults Ripristina opzioni di default - + Style: Stile: - + Language: Lingua: - + Font size: Dimensione dei font: - + Restarting Manuskript ensures all settings take effect. Riavvia Manuskript per essere certo che le impostazioni abbiano effetto. - + Show &word count Mostra &conteggio parole - + &Show word count &Mostra conteggio parole - + &New style &Nuovo stile - + Typewriter mode Suono della macchina da scrivere - + Focus mode Modalità di messa a fuoco - + None Nessuno - + Sentence Frase - + Line Linea - + Paragraph Paragrafo - + <p><b>The Revisions feature has been at the source of many reported issues. In this version of Manuskript it has been turned off by default for new projects in order to provide the best experience.</b></p><p>Why aren't these issues fixed already? <a href="https://www.theologeek.ch/manuskript/contribute/">We need your help to make Manuskript better!</a></p> <p><b> La funzione Revisioni è all'origine di molti problemi segnalati. In questa versione di Manuskript è stata disattivata per impostazione predefinita per i nuovi progetti al fine di fornire la migliore esperienza.</b></p><p> Perché questi problemi non sono già stati risolti? <a href="https://www.theologeek.ch/manuskript/contribute/"> Abbiamo bisogno del tuo aiuto per migliorare Manuskript!</a></p> + + + Show progress in chars next + to words + + + + + Char/Word Counter + + + + + Count spaces as chars + + + + + Show char c&ount + + + + + Sho&w char count + + SpellAction - + Spelling Suggestions Suggerimenti ortografici - + &Add to dictionary &Aggiungi al dizionario - + &Remove from custom dictionary &Rimuovi dal dizionario personale + + + &New Character + + + + + &New Plot Item + + + + + &New World Item + + + + + &Correction Suggestions + + + + + &Correction Suggestion + + about @@ -2289,17 +2383,12 @@ Usalo se ottieni un errore relativo a YAML. characterModel - - New character - Nuovo personaggio - - - + Name Nome - + Value Valore @@ -2307,17 +2396,17 @@ Usalo se ottieni un errore relativo a YAML. characterTreeView - + Main Principale - + Secondary Secondario - + Minor Minore @@ -2433,12 +2522,12 @@ Usalo se ottieni un errore relativo a YAML. corkDelegate - + One line summary Riassunto in una riga - + Full summary Riassunto completo @@ -3020,15 +3109,30 @@ Usalo se ottieni un errore relativo a YAML. Radice - - {} words / {} - {} parole / {} - - - + {} words {} parole + + + ({} chars) {} words / {} + + + + + {} words / {} + + + + + {} chars + + + + + {} chars + + markdownSettings @@ -3233,12 +3337,12 @@ Usalo se ottieni un errore relativo a YAML. outlineItem - + {} words / {} ({}) {} parole / {} ({}) - + {} words {} parole @@ -3460,37 +3564,32 @@ Usalo se ottieni un errore relativo a YAML. plotModel - - New plot - Nuova trama - - - + Name Nome - + Meta - + New step Nuovo passaggio - + Main Principale - + Secondary Secondario - + Minor Minore @@ -3837,111 +3936,56 @@ Usalo se ottieni un errore relativo a YAML. Search for... Cerca... - - - Search in: - Cerca in: - - - - All - Tutto - - - - Title - Titolo - - - - Text - Testo - - - - Summary - Riassunto - - - - Notes - Note - - - - POV - - - - - Status - Stato - - - - Label - Etichetta - - - - Options: - Opzioni: - - - - Case sensitive - Tiene conto del maiusc / minusc - settingsWindow - + New status Nuovo stato - + New label Nuova etichetta - + newtheme nuovo tema - + New theme Nuovo tema - + (read-only) (sola lettura) - + Open Image Apri immagine - + Image files (*.jpg; *.jpeg; *.png) Files di immagine (*.jpg; *.jpeg; *.png) - + Error Errore - + Unable to load selected file Impossibile caricare il file selezionato - + Unable to add selected image: {} Impossibile aggiungere l'immagine selezionata: @@ -4066,7 +4110,7 @@ Usalo se ottieni un errore relativo a YAML. textEditView - + Various Vari @@ -4368,212 +4412,212 @@ Usalo se ottieni un errore relativo a YAML. worldModel - + New item Nuovo elemento - + Fantasy world building Costruzione del mondo di fantasia - + Physical Fisica - + Climate Clima - + Topography Topografia - + Astronomy Astronomia - + Wild life Ambiente naturale - + Flora - + History Storia - + Races Razze - + Diseases Malattie - + Cultural Cultura - + Customs Usi e costumi - + Food Cibo - + Languages Linguaggi - + Education Educazione - + Dresses Vestiario - + Science Conoscenze scentifiche - + Calendar Calendario - + Bodily language Linguaggio del corpo - + Ethics Aspetti etici - + Religion Religione - + Government Forma di governo - + Politics Politica - + Gender roles Ruoli di genere - + Music and arts Musica e arti - + Architecture Architettura - + Military Forze armate - + Technology Tecnologia - + Courtship Corteggiamento - + Demography Demografia - + Transportation Mezzi di trasporto - + Medicine Medicina - + Magic system Sistema di magia - + Rules Regole - + Organization Organizzazione - + Magical objects Oggetti magici - + Magical places Luoghi magici - + Magical races Razze magiche - + Important places Luoghi importanti - + Important objects Oggetti importanti - + Natural resources Risorse naturali diff --git a/i18n/manuskript_ja.ts b/i18n/manuskript_ja.ts index 3aa6955..be474c8 100644 --- a/i18n/manuskript_ja.ts +++ b/i18n/manuskript_ja.ts @@ -461,7 +461,7 @@ YAML関連のエラーが発生した場合は、このオプションを有効 MainWindow - + General 全般 @@ -501,7 +501,7 @@ YAML関連のエラーが発生した場合は、このオプションを有効 作者 - + Name 名前 @@ -511,7 +511,7 @@ YAML関連のエラーが発生した場合は、このオプションを有効 電子メール - + Summary 要約: @@ -521,7 +521,7 @@ YAML関連のエラーが発生した場合は、このオプションを有効 シチュエーション: - + Summary: 要約: @@ -531,17 +531,17 @@ YAML関連のエラーが発生した場合は、このオプションを有効 一文 - + One paragraph 一段落 - + One page 一ページ - + Full 全体 @@ -571,7 +571,7 @@ YAML関連のエラーが発生した場合は、このオプションを有効 全体の要約 - + Next 次へ @@ -591,312 +591,312 @@ YAML関連のエラーが発生した場合は、このオプションを有効 名前 - + Filter フィルター - + Basic info 基本情報 - + Importance 重要設定 - + Motivation 動機づけ - + Goal 目的 - + Conflict 対立 - + Epiphany 本質・意味・悟り - + <html><head/><body><p align="right">One sentence<br/>summary</p></body></html> <html><head/><body><p align="right">一文<br/>要約</p></body></html> - + <html><head/><body><p align="right">One paragraph<br/>summary</p></body></html> <html><head/><body><p align="right">一段落<br/>要約</p></body></html> - + Notes 備考 - + Detailed info 詳細情報 - + Plots プロット - + Plot プロット - + Character(s) 登場人物 - + Description 説明 - + Result 結果 - + Resolution steps 解決手順 - + World 世界 - + Populates with empty data 空データの生成 - + More - + Source of passion 情熱の源 (行動原理) - + Source of conflict 対立の原因 - + Outline 概要 - + Editor 編集者 - + Debug デバッグ - + FlatData - + Persos - + Labels ラベル - + &File ファイル (&F) - + &Recent 最近使用したファイル (&R) - + &Help ヘルプ (&H) - + &Tools ツール (&T) - + &Edit 編集 (&E) - + &View 閲覧 (&V) - + &Mode モード (&M) - + &Cheat sheet 備忘録 - + Sea&rch 検索 (&R) - + &Navigation ナビゲーション (&N) - + &Open 開く (&O) - + Ctrl+O Ctrl+O - + &Save 保存 (&S) - + Ctrl+S Ctrl+S - + Sa&ve as... 名前を付けて保存... (&V) - + Ctrl+Shift+S Ctrl+Shift+S - + &Quit 終了 (&Q) - + Ctrl+Q Ctrl+Q - + &Show help texts ヘルプ文書を表示 (&S) - + Ctrl+Shift+B Ctrl+Shift+B - + &Spellcheck スペルチェック - + F9 F9 - + &Labels... ラベル... (&L) - + &Status... 状態... (&S) - + Tree ツリー - + &Simple シンプル - + &Fiction フィクション - + Index cards 索引目録 - + S&ettings 設定 - + F8 F8 - + &Close project プロジェクトを閉じる (&C) - + Co&mpile コンパイル - + F6 F6 - + &Frequency Analyzer @@ -906,563 +906,606 @@ YAML関連のエラーが発生した場合は、このオプションを有効 本の情報 - + &About About (&A) - + About Manuskript Manuskriptについて - + Manuskript Manuskript - + Project {} saved. - + WARNING: Project {} not saved. - + Project {} loaded. - + Project {} loaded with some errors: - + * {} wasn't found in project file. - + Project {} loaded with some errors. - + (~{} pages) - + Words: {}{} 字数:{}{} - + Book summary 本の要約 - + Project tree プロジェクトツリー - + Metadata メタデータ - + Story line - + Enter information about your book, and yourself. あなたの本とあなた自身に関する情報を入力してください。 - + The basic situation, in the form of a 'What if...?' question. Ex: 'What if the most dangerous evil wizard wasn't able to kill a baby?' (Harry Potter) - + Take time to think about a one sentence (~50 words) summary of your book. Then expand it to a paragraph, then to a page, then to a full summary. あなたの本の要約を50単語ほどで考えてください。この作業は時間をかけるべきでしょう。 それを段落、ページに落とし込み、最後に完全な要約を書きます。 - + Create your characters. あなたの登場人物を作りましょう。 - + Develop plots. プロットを作成します。 - + Build worlds. Create hierarchy of broad categories down to specific details. 世界を創造しましょう。Manuskriptは、一般的なものから詳細なものまで、様々な設定を作成します。 - + Create the outline of your masterpiece. あなたの傑作の輪郭を作ります。 - + Write. - + Debug info. Sometimes useful. デバッグ情報。時に便利なものです。 - + Dictionary 辞書 - + Nothing - + POV POV - + Label ラベル - + Progress 進捗 - + Compile 編纂 - + Icon color アイコンの色 - + Text color 文字色 - + Background color 背景色 - + Icon アイコン - + Text テキスト - + Background 背景 - + Border 境界線 - + Corner - + Add plot step プロットステップを追加 - + &Import… インポート… - + F7 F7 - + &Copy コピー - + Ctrl+C Ctrl+C - + C&ut 切り取り - + Ctrl+X Ctrl+X - + &Paste 貼り付け - + Ctrl+V Ctrl+V - + &Split… 分割 - + Ctrl+Shift+K Ctrl+Shift+K - + Sp&lit at cursor カーソル位置で分割 - + Ctrl+K Ctrl+K - + Ctrl+M Ctrl+M - + Ctrl+D Ctrl+D - + Del Del - + &Move Up 上に移動 (&M) - + Ctrl+Shift+Up Ctrl+Shift+Up - + M&ove Down 下に移動 (&O) - + Ctrl+Shift+Down Ctrl+Shift+Down - + Dupl&icate コピー - + &Delete 削除 - + &Rename 名前の変更 - + F2 F2 - + Organi&ze 整理 - + M&erge マージ - + &Format フォーマット - + &Header ヘッダ - + &Level 1 (setext) - + Ctrl+Alt+1 - + Level &2 - + Ctrl+Alt+2 - + Level &1 (atx) - + Ctrl+1 Ctrl+1 - + L&evel 2 - + Ctrl+2 Ctrl+2 - + Level &3 - + Ctrl+3 Ctrl+3 - + Level &4 - + Ctrl+4 Ctrl+4 - + Level &5 - + Ctrl+5 Ctrl+5 - + Level &6 - + Ctrl+6 Ctrl+6 - + &Bold - + Ctrl+B - + &Italic - + Ctrl+I - + &Strike - + &Verbatim - + Su&perscript - + Ctrl++ - + Subsc&ript - + Ctrl+- - + Co&mment block - + Ctrl+Shift+C - + Clear &formats - + Ctrl+0 Ctrl+0 - + &Comment line(s) 注釈行 (&C) - + &Ordered list 番号リスト (&O) - + &Unordered list 番号なしリスト (&U) - + B&lockquote 引用符 (&B) - + Remove selected plot step(s) 選択したプロットを削除する - + The file {} does not exist. Has it been moved or deleted? ファイル {} は存在しません。移動または削除しましたか? - + Install {}{} to use spellcheck - + {} has no installed dictionaries - + {}{} is not installed - + Save project? - + Save changes to project "{}" before closing? - + Your changes will be lost if you don't save them. - + PyQt / Qt versions 5.11 and 5.12 are known to cause a crash which might result in a loss of data. - + PyQt {} and Qt {} are in use. - + Proceed with import at your own risk + + + Allow POV + + + + + Search + + + + + Ctrl+F + + + + + F3 + F3 + + + + Shift+F3 + + + + + Situation + + + + + Status + 状態 + + + + Search + + + No results found + + Settings @@ -1477,7 +1520,7 @@ YAML関連のエラーが発生した場合は、このオプションを有効 全般 - + Revisions 改訂 @@ -1487,17 +1530,17 @@ YAML関連のエラーが発生した場合は、このオプションを有効 - + Labels ラベル - + Status 状態 - + Fullscreen @@ -1512,658 +1555,709 @@ YAML関連のエラーが発生した場合は、このオプションを有効 アプリケーションの設定 - + Loading - + Automatically load last project on startup 起動時、前回の終了時に開いていたプロジェクトを開く - + Saving 自動保存 - + Automatically save every 自動保存の間隔 - + minutes. - + If no changes during 変更がない場合 - + seconds. - + Save on project close 終了時に保存 - + <html><head/><body><p>If you check this option, your project will be saved as one single file. Easier to copy or backup, but does not allow collaborative editing, or versioning.<br/>If this is unchecked, your project will be saved as a folder containing many small files.</p></body></html> <html><head/><body><p>この設定を有効にすると、プロジェクトは単一のファイルとして保存されます。コピーやバックアップは簡単ですが、多人数での共同編集やバージョン管理には不向きです。<br/>この設定を無効にした場合、プロジェクトは多数の小さなファイルとして、指定のフォルダに保存されます。</p></body></html> - + Save to one single file 単一のファイルに保存 - + Revisions are a way to keep track of modifications. For each text item, it stores any changes you make to the main text, allowing you to see and restoring previous versions. リビジョンは、変更を追跡するための機能です。各テキストは、メインテキストに加えた変更点を保存し、以前のバージョンを表示・複合できるようになっています。 - + Keep revisions 改訂の継続 - + S&mart remove 定期的な削除 - + Keep: 保留: - + Smart remove allows you to keep only a certain number of revisions. It is strongly recommended to use it, lest you file will becomes full of thousands of insignificant changes. 定期的な削除を利用すると、リビジョンの保存数を制限できます。この機能は、有効にすることを強くお勧めします。この機能を使用しない場合、リビジョンのファイルが数千もの数に膨らむ恐れがあります。 - + revisions per day for the last month 先月の一日あたりのリビジョン - + revisions per minute for the last 10 minutes 過去10分間における1分あたりのリビジョン - + revisions per hour for the last day 最終日の1時間あたりのリビジョン - + revisions per 10 minutes for the last hour 過去1時間における10分ごとの改訂 - + revisions per week till the end of time - + Views settings - + Tree ツリー - + Colors - + Icon color: アイコンの色: - + Nothing - + POV POV - + Label ラベル - + Progress 進捗 - + Compile 編纂 - + Text color: 文字色: - + Background color: 背景色: - + Folders フォルダ - + Show ite&m count - + Show summary 要約を閲覧 - + &Nothing - + Text テキスト - + Outline 概要 - + Visible columns 表示列 - + Goal 目的 - + Word count 単語数 - + Percentage 割合 (%) - + Title 表題 - + Index cards 索引目録 - + Item colors 項目の色 - + Border color: 線の色: - + Corner color: 角の色: - + Background 背景 - + Color: 色: - + Ctrl+S Ctrl+S - + Image: 画像: - + Text editor テキストエディタ - + Font フォント - + Family: 字体: - + Size: 大きさ: - + Misspelled: 綴り間違い: - + Background: 背景: - + Paragraphs 段落 - + Line spacing: 行間隔: - + Single - + 1.5 lines 1.5 行 - + Double 2倍 - + Proportional - + % % - + Tab width: タブ幅: - + px px - + Indent 1st line 1行目を字下げ - + Spacing: 間隔: - + New - + Edit 編集 - + Delete 削除 - + Theme name: 主題名: - + Apply 適用 - + Cancel 取消 - + Window Background ウィンドウの背景 - + Text Background テキストの背景 - + Text Options テキストオプション - + Paragraph Options 段落オプション - + Type: 型: - + No Image 画像なし - + Tiled タイル - + Centered 中央揃え - + Stretched - + Scaled 縮尺 - + Zoomed 拡大 - + Opacity: 透明度: - + Position: 位置: - + Left - + Center 中央 - + Right - + Width: 幅: - + Corner radius: 角の半径: - + Margins: 外側余白: - + Padding: 内側余白: - + Font: フォント: - + Style スタイル - + Cursor カーソル - + Use block insertion of ブロック挿入を使用 - + Alignment: 位置合わせ: - + Justify 校正 - + Alignment 位置合わせ - + Icon Size アイコンの大きさ - + TextLabel テキストラベル - + Disable blinking 点滅を無効にする - + Text area テキストエリア - + Max width 最大幅 - + Left/Right margins: 左右の外側余白: - + Top/Bottom margins: 上下の外側余白: - + S&how progress 進捗状況を表示 (&H) - + Show summar&y 要約を表示 (&Y) - + Show p&rogress 進行状況を表示 (&S) - + Old st&yle 旧スタイル (&Y) - + Transparent 透過 (Transparent) - + Restore defaults デフォルトに戻す - + Style: スタイル: - + Language: 言語: - + Font size: フォントサイズ: - + Restarting Manuskript ensures all settings take effect. 設定を有効にするためには、Manuskriptを再起動してください。 - + Show &word count 単語数を表示 (&W) - + &Show word count 単語数を表示 (&S) - + &New style 新しいスタイル - + Typewriter mode タイプライターモード - + Focus mode 集中モード (Zen mode) - + None いいえ - + Sentence - + Line - + Paragraph 段落 - + <p><b>The Revisions feature has been at the source of many reported issues. In this version of Manuskript it has been turned off by default for new projects in order to provide the best experience.</b></p><p>Why aren't these issues fixed already? <a href="https://www.theologeek.ch/manuskript/contribute/">We need your help to make Manuskript better!</a></p> + + + Show progress in chars next + to words + + + + + Char/Word Counter + + + + + Count spaces as chars + + + + + Show char c&ount + + + + + Sho&w char count + + SpellAction - + Spelling Suggestions 綴りの候補 - + &Add to dictionary 辞書を追加 (&A) - + &Remove from custom dictionary カスタム辞書から削除 (&R) + + + &New Character + + + + + &New Plot Item + + + + + &New World Item + + + + + &Correction Suggestions + + + + + &Correction Suggestion + + about @@ -2265,17 +2359,12 @@ YAML関連のエラーが発生した場合は、このオプションを有効 characterModel - - New character - 新しい登場人物 - - - + Name 名前 - + Value @@ -2283,17 +2372,17 @@ YAML関連のエラーが発生した場合は、このオプションを有効 characterTreeView - + Main - + Secondary 第二項 - + Minor 重要ではない @@ -2409,12 +2498,12 @@ YAML関連のエラーが発生した場合は、このオプションを有効 corkDelegate - + One line summary 一行の要約 - + Full summary すべての要約 @@ -2996,15 +3085,30 @@ YAML関連のエラーが発生した場合は、このオプションを有効 - - {} words / {} - {} 単語 / {} - - - + {} words {} 単語 + + + ({} chars) {} words / {} + + + + + {} words / {} + + + + + {} chars + + + + + {} chars + + markdownSettings @@ -3209,12 +3313,12 @@ YAML関連のエラーが発生した場合は、このオプションを有効 outlineItem - + {} words / {} ({}) {} 単語 / {} ({}) - + {} words {} 単語 @@ -3436,37 +3540,32 @@ YAML関連のエラーが発生した場合は、このオプションを有効 plotModel - - New plot - - - - + Name 名前 - + Meta - + New step - + Main - + Secondary 第二項 - + Minor 重要ではない @@ -3813,111 +3912,56 @@ YAML関連のエラーが発生した場合は、このオプションを有効 Search for... 検索する... - - - Search in: - で検索: - - - - All - すべて - - - - Title - 表題 - - - - Text - テキスト - - - - Summary - 要約 - - - - Notes - ノート - - - - POV - POV - - - - Status - 状態 - - - - Label - ラベル - - - - Options: - - - - - Case sensitive - 大文字と小文字を区別 - settingsWindow - + New status 新しい状態 - + New label 新しいラベル - + newtheme 新しい主題 - + New theme 新しい主題 - + (read-only) (読み取り専用) - + Open Image 画像を開く - + Image files (*.jpg; *.jpeg; *.png) 画像 (*.jpg; *.jpeg; *.png) - + Error Error - + Unable to load selected file 選択したファイルを読み込めませんでした - + Unable to add selected image: {} 選択した画像を追加できません: @@ -4028,7 +4072,7 @@ YAML関連のエラーが発生した場合は、このオプションを有効 textEditView - + Various @@ -4330,212 +4374,212 @@ YAML関連のエラーが発生した場合は、このオプションを有効 worldModel - + New item 新しい項目 - + Fantasy world building 空想の世界を築く - + Physical 自然 - + Climate 気候 - + Topography 地形 - + Astronomy 天文 - + Wild life 野生動物 - + Flora 植物 - + History 歴史 - + Races 人種・民族・種族 - + Diseases 病気 - + Cultural 文化 - + Customs 風習 - + Food - + Languages 言語 - + Education 学問 - + Dresses 服装 - + Science 科学 - + Calendar - + Bodily language 身振り手振り等の仕草による意思の伝え方 - + Ethics 倫理 - + Religion 宗教 - + Government 統治体 - + Politics 政治 - + Gender roles 性別による役割 - + Music and arts 音楽、芸術 - + Architecture 建築術 - + Military 軍事 - + Technology 技術 - + Courtship 求婚 - + Demography 人口統計 - + Transportation 交通 - + Medicine 医療 - + Magic system 魔術体系 - + Rules 規則・規範 - + Organization 団体 - + Magical objects 魔術道具 - + Magical places 魔術の場所 - + Magical races 魔術による品種 - + Important places 重要な場所 - + Important objects 重要な道具 - + Natural resources 天然資源 diff --git a/i18n/manuskript_ko.ts b/i18n/manuskript_ko.ts index 0603b68..66100d8 100644 --- a/i18n/manuskript_ko.ts +++ b/i18n/manuskript_ko.ts @@ -479,7 +479,7 @@ YAML에 문제가 있을 때 사용하십시오. MainWindow - + General 일반 @@ -519,7 +519,7 @@ YAML에 문제가 있을 때 사용하십시오. 지은이 - + Name 이름 @@ -529,7 +529,7 @@ YAML에 문제가 있을 때 사용하십시오. 이메일 - + Summary 요약 @@ -539,7 +539,7 @@ YAML에 문제가 있을 때 사용하십시오. 대목: - + Summary: 요약: @@ -549,17 +549,17 @@ YAML에 문제가 있을 때 사용하십시오. 한 문장 - + One paragraph 한 문단 - + One page 한 쪽 - + Full 전체 @@ -589,7 +589,7 @@ YAML에 문제가 있을 때 사용하십시오. 전체 요약 - + Next 다음 @@ -609,312 +609,312 @@ YAML에 문제가 있을 때 사용하십시오. 명단 - + Filter 추리기 - + Basic info 기본 정보 - + Importance 중요도 - + Motivation 동기 - + Goal 목표 - + Conflict 갈등 - + Epiphany - + <html><head/><body><p align="right">One sentence<br/>summary</p></body></html> <html><head/><body><p align="right">한 문장<br/>요약</p></body></html> - + <html><head/><body><p align="right">One paragraph<br/>summary</p></body></html> <html><head/><body><p align="right">한 문단<br/>요약</p></body></html> - + Notes 비고 - + Detailed info 상세 정보 - + Plots 플롯 - + Plot 플롯 - + Character(s) 등장인물 - + Description 설명 - + Result 결과 - + Resolution steps 해결 과정 - + World 세계 - + Populates with empty data 빈 데이터 생성 - + More 더 보기 - + Source of passion - + Source of conflict - + Outline 개요 - + Editor 편집기 - + Debug 디버그 - + FlatData 플랫데이터 - + Persos - + Labels 라벨 - + &File 파일(&F) - + &Recent 최근 파일(&R) - + &Help 도움말(&H) - + &Tools 도구(&T) - + &Edit 편집(&E) - + &View 보기(&V) - + &Mode 모드(&M) - + &Cheat sheet 협서(&C) - + Sea&rch 찾기(&r) - + &Navigation 내비게이션(&N) - + &Open 열기(&O) - + Ctrl+O Ctrl+O - + &Save 갈무리(&S) - + Ctrl+S Ctrl+S - + Sa&ve as... 다른 이름으로 갈무리... (&v) - + Ctrl+Shift+S Ctrl+Shift+S - + &Quit 끝(&Q) - + Ctrl+Q Ctrl+Q - + &Show help texts 도움말 띄우기(&S) - + Ctrl+Shift+B Ctrl+Shift+B - + &Spellcheck 맞춤법 검사(&S) - + F9 F9 - + &Labels... 라벨... (&L) - + &Status... 상태... (&S) - + Tree 나무 - + &Simple 간단(&S) - + &Fiction 소설(&F) - + Index cards 색인 카드 - + S&ettings 설정(&e) - + F8 F8 - + &Close project 프로젝트 닫기(&C) - + Co&mpile 엮기(&m) - + F6 F6 - + &Frequency Analyzer 빈도 분석기(&F) @@ -924,564 +924,607 @@ YAML에 문제가 있을 때 사용하십시오. 책 정보 - + &About 정보(&A) - + About Manuskript Manuskript란 - + Manuskript Manuskript - + Project {} saved. 프로젝트 {}을(를) 갈무리하였습니다. - + WARNING: Project {} not saved. 경고: 프로젝트 {}을(를) 갈무리하지 않았습니다. - + Project {} loaded. 프로젝트 {}을(를) 불러왔습니다. - + Project {} loaded with some errors: 불러온 프로젝트 {}에 다음 오류가 있습니다: - + * {} wasn't found in project file. * {}을(를) 프로젝트 파일에서 찾지 못했습니다. - + Project {} loaded with some errors. 불러온 프로젝트 {}에 오류가 있습니다. - + (~{} pages) (~{} 쪽) - + Words: {}{} 낱말: {}{} - + Book summary 책 요약 - + Project tree 프로젝트 나무 - + Metadata 메타데이터 - + Story line 줄거리 - + Enter information about your book, and yourself. 당신과 당신의 책에 대한 정보를 입력하여 주십시오. - + The basic situation, in the form of a 'What if...?' question. Ex: 'What if the most dangerous evil wizard wasn't able to kill a baby?' (Harry Potter) ‘만약……?’이라는 질문 형태의 기본적인 상황입니다. 예: ‘만약 가장 위험하고 사악한 마법사가 아기를 죽이지 못했다면?’ (해리 포터) - + Take time to think about a one sentence (~50 words) summary of your book. Then expand it to a paragraph, then to a page, then to a full summary. 당신의 책을 한 문장(50 어절 정도)으로 간추려 보세요. 그 다음에 문단 단위, 쪽 단위, 전체 요약으로 부풀리세요. - + Create your characters. 등장인물을 만듭시다. - + Develop plots. 플롯을 구성합니다. - + Build worlds. Create hierarchy of broad categories down to specific details. 세계를 만듭니다. 광범위한 것부터 세세한 것까지 설정을 체계적으로 만들어 봅시다. - + Create the outline of your masterpiece. 당신이 만들 걸작의 테두리를 쳐 봅시다. - + Write. 써 보세요. - + Debug info. Sometimes useful. 디버그 정보입니다. 때론 도움이 됩니다. - + Dictionary 사전 - + Nothing 없음 - + POV 시점 - + Label 라벨 - + Progress 진척 - + Compile 엮기 - + Icon color 아이콘 색 - + Text color 글자 색 - + Background color 배경 색 - + Icon 아이콘 - + Text - + Background 배경 - + Border - + Corner - + Add plot step 사건 더하기 - + &Import… 가져오기... (&I) - + F7 F7 - + &Copy 복사(&C) - + Ctrl+C Ctrl+C - + C&ut 오리기(&C) - + Ctrl+X Ctrl+X - + &Paste 붙이기(&P) - + Ctrl+V Ctrl+V - + &Split… 쪼개기… (&S) - + Ctrl+Shift+K Ctrl+Shift+K - + Sp&lit at cursor 커서로 쪼개기(&l) - + Ctrl+K Ctrl+K - + Ctrl+M Ctrl+M - + Ctrl+D Ctrl+D - + Del Del - + &Move Up 위로 이동(&M) - + Ctrl+Shift+Up Ctrl+Shift+Up - + M&ove Down 아래로 이동(&o) - + Ctrl+Shift+Down Ctrl+Shift+Down - + Dupl&icate 복제(&i) - + &Delete 제거(&D) - + &Rename 이름 바꾸기(&R) - + F2 F2 - + Organi&ze 정리(&z) - + M&erge 합치기(&e) - + &Format 서식(&F) - + &Header 제목(&H) - + &Level 1 (setext) 수준 1(setext) (&L) - + Ctrl+Alt+1 Ctrl+Alt+1 - + Level &2 수준 &2 - + Ctrl+Alt+2 Ctrl+Alt+2 - + Level &1 (atx) 수준 &1(atx) - + Ctrl+1 Ctrl+1 - + L&evel 2 수준 2(&e) - + Ctrl+2 Ctrl+2 - + Level &3 수준 &3 - + Ctrl+3 Ctrl+3 - + Level &4 수준 &4 - + Ctrl+4 Ctrl+4 - + Level &5 수준 &5 - + Ctrl+5 Ctrl+5 - + Level &6 수준 &6 - + Ctrl+6 Ctrl+6 - + &Bold 굵게(&B) - + Ctrl+B Ctrl+B - + &Italic 기울여(&I) - + Ctrl+I Ctrl+I - + &Strike 취소선(&S) - + &Verbatim - + Su&perscript 위 첨자(&p) - + Ctrl++ Ctrl++ - + Subsc&ript 아래 첨자(&r) - + Ctrl+- Ctrl+- - + Co&mment block - + Ctrl+Shift+C Ctrl+Shift+C - + Clear &formats 서식 지우기 - + Ctrl+0 Ctrl+0 - + &Comment line(s) - + &Ordered list 번호 붙인 목록(&O) - + &Unordered list 번호 없는 목록(&U) - + B&lockquote 따옴표(&l) - + Remove selected plot step(s) 선택한 사건 빼기 - + The file {} does not exist. Has it been moved or deleted? 파일 {}이(가) 없습니다. 지우거나 옮기셨습니까? - + Install {}{} to use spellcheck 맞춤법 검사를 사용하기 위해 {}{} 깔기 - + {} has no installed dictionaries {}에 설치된 사전 없음 - + {}{} is not installed {}{} 미설치 - + Save project? 프로젝트 갈무리? - + Save changes to project "{}" before closing? 프로젝트 “{}”를 닫기 전에 변경 사항을 갈무리하시겠습니까? - + Your changes will be lost if you don't save them. 갈무리하지 않으면 고친 것을 날려 버립니다. - + PyQt / Qt versions 5.11 and 5.12 are known to cause a crash which might result in a loss of data. PyQt / Qt 버전 5.11과 5.12는 충돌을 일으켜 데이터를 날리는 것으로 알려져 있습니다. - + PyQt {} and Qt {} are in use. PyQt {}와(과) Qt {}를 쓰고 있습니다. - + Proceed with import at your own risk 속행 시 충돌과 데이터 손실 우려 + + + Allow POV + + + + + Search + + + + + Ctrl+F + + + + + F3 + F3 + + + + Shift+F3 + + + + + Situation + + + + + Status + 상태 + + + + Search + + + No results found + + Settings @@ -1496,7 +1539,7 @@ YAML에 문제가 있을 때 사용하십시오. 일반 - + Revisions @@ -1506,17 +1549,17 @@ YAML에 문제가 있을 때 사용하십시오. 보기 - + Labels 라벨 - + Status 상태 - + Fullscreen 전체 화면 @@ -1531,658 +1574,709 @@ YAML에 문제가 있을 때 사용하십시오. 애플리케이션 설정 - + Loading 불러오기 - + Automatically load last project on startup 시작하자마자 알아서 마지막 프로젝트 불러오기 - + Saving 갈무리 - + Automatically save every 자동으로 - + minutes. 분마다 갈무리하기. - + If no changes during - + seconds. - + Save on project close 프로젝트를 닫을 때 갈무리도 하기 - + <html><head/><body><p>If you check this option, your project will be saved as one single file. Easier to copy or backup, but does not allow collaborative editing, or versioning.<br/>If this is unchecked, your project will be saved as a folder containing many small files.</p></body></html> <html><head/><body><p>이 옵션에 체크하면 프로젝트를 홑파일로 갈무리합니다. 복사와 백업이 간단하지만, 합작품을 만들거나 여러 버전으로 나누지 못합니다.<br/>체크를 해제하면 프로젝트를 여러 파일이 들어있는 폴더로 갈무리합니다.</p></body></html> - + Save to one single file 홑파일로 갈무리 - + Revisions are a way to keep track of modifications. For each text item, it stores any changes you make to the main text, allowing you to see and restoring previous versions. - + Keep revisions - + S&mart remove 주기적 삭제(&m) - + Keep: - + Smart remove allows you to keep only a certain number of revisions. It is strongly recommended to use it, lest you file will becomes full of thousands of insignificant changes. - + revisions per day for the last month - + revisions per minute for the last 10 minutes - + revisions per hour for the last day - + revisions per 10 minutes for the last hour - + revisions per week till the end of time - + Views settings 보기 설정 - + Tree 나무 - + Colors 빛깔 - + Icon color: 아이콘 색: - + Nothing 없음 - + POV 시점 - + Label 라벨 - + Progress 진척 - + Compile 엮기 - + Text color: 글자 색: - + Background color: 배경 색: - + Folders 폴더 - + Show ite&m count 항목 수 보기(&m) - + Show summary 요약 보기 - + &Nothing 표시 없음(&N) - + Text - + Outline 개요 - + Visible columns 열 표시 - + Goal 목표 - + Word count 낱말 수 - + Percentage 백분율 - + Title 제목 - + Index cards 색인 카드 - + Item colors 항목 색 - + Border color: 테두리 색: - + Corner color: - + Background 배경 - + Color: 빛깔: - + Ctrl+S Ctrl+S - + Image: 그림: - + Text editor 텍스트 편집기 - + Font 글꼴 - + Family: 모음: - + Size: 크기: - + Misspelled: 오자: - + Background: 배경: - + Paragraphs 문단 - + Line spacing: 줄 간격: - + Single 1줄 - + 1.5 lines 1.5줄 - + Double 2줄 - + Proportional 비례 - + % % - + Tab width: 탭 너비: - + px px - + Indent 1st line 첫줄 들여쓰기 - + Spacing: 문단 간격: - + New 추가 - + Edit 편집 - + Delete 제거 - + Theme name: 테마 이름: - + Apply 적용 - + Cancel 취소 - + Window Background 창 배경 - + Text Background 글 배경 - + Text Options 텍스트 옵션 - + Paragraph Options 문단 옵션 - + Type: 유형: - + No Image 그림 없음 - + Tiled 바둑판식 - + Centered 가운데 - + Stretched 채우기 - + Scaled 맞춤 - + Zoomed 확대 - + Opacity: 불투명도: - + Position: 위치: - + Left 왼쪽 - + Center 가운데 - + Right 오른쪽 - + Width: 폭: - + Corner radius: 모서리 곡률: - + Margins: 외부 여백: - + Padding: 내부 여백: - + Font: 글꼴: - + Style 맵시 - + Cursor 커서 - + Use block insertion of - + Alignment: 정렬: - + Justify 양쪽 - + Alignment 정렬 - + Icon Size 아이콘 크기 - + TextLabel 텍스트라벨 - + Disable blinking 깜박이지 않기 - + Text area 글상자 - + Max width 최대폭 - + Left/Right margins: 왼쪽/오른쪽 여백: - + Top/Bottom margins: 위/아래 여백: - + S&how progress 진척 보기(&h) - + Show summar&y 요약 보기(&y) - + Show p&rogress 진척 보기(&r) - + Old st&yle 옛 품새(&r) - + Transparent 투명하게 - + Restore defaults 기본값으로 되돌리기 - + Style: 맵시: - + Language: 언어: - + Font size: 글자 크기: - + Restarting Manuskript ensures all settings take effect. 설정을 제대로 적용하려면 Manuskript를 다시 시작하셔야 합니다. - + Show &word count 낱말 수 보기(&w) - + &Show word count 낱말 수 보기(&S) - + &New style 새로운 품새(&N) - + Typewriter mode 타자기 모드 - + Focus mode 집중 모드 - + None - + Sentence 문장 - + Line - + Paragraph 문단 - + <p><b>The Revisions feature has been at the source of many reported issues. In this version of Manuskript it has been turned off by default for new projects in order to provide the best experience.</b></p><p>Why aren't these issues fixed already? <a href="https://www.theologeek.ch/manuskript/contribute/">We need your help to make Manuskript better!</a></p> + + + Show progress in chars next + to words + + + + + Char/Word Counter + + + + + Count spaces as chars + + + + + Show char c&ount + + + + + Sho&w char count + + SpellAction - + Spelling Suggestions 추천 단어 - + &Add to dictionary 사전에 추가(&A) - + &Remove from custom dictionary 사용자 사전에서 제거(&R) + + + &New Character + + + + + &New Plot Item + + + + + &New World Item + + + + + &Correction Suggestions + + + + + &Correction Suggestion + + about @@ -2284,17 +2378,12 @@ YAML에 문제가 있을 때 사용하십시오. characterModel - - New character - 새로운 등장인물 - - - + Name 이름 - + Value 비중 @@ -2302,17 +2391,17 @@ YAML에 문제가 있을 때 사용하십시오. characterTreeView - + Main 주연 - + Secondary 조연 - + Minor 단역 @@ -2428,12 +2517,12 @@ YAML에 문제가 있을 때 사용하십시오. corkDelegate - + One line summary 한 줄 요약 - + Full summary 전체 요약 @@ -3015,15 +3104,30 @@ YAML에 문제가 있을 때 사용하십시오. - - {} words / {} - {} 단어 / {} - - - + {} words {} 단어 + + + ({} chars) {} words / {} + + + + + {} words / {} + + + + + {} chars + + + + + {} chars + + markdownSettings @@ -3228,12 +3332,12 @@ YAML에 문제가 있을 때 사용하십시오. outlineItem - + {} words / {} ({}) {} 단어 / {} ({}) - + {} words {} 단어 @@ -3455,37 +3559,32 @@ YAML에 문제가 있을 때 사용하십시오. plotModel - - New plot - - - - + Name 이름 - + Meta - + New step - + Main 주연 - + Secondary 조연 - + Minor 단역 @@ -3832,111 +3931,56 @@ YAML에 문제가 있을 때 사용하십시오. Search for... - - - Search in: - - - - - All - 모두 - - - - Title - 제목 - - - - Text - - - - - Summary - 요약 - - - - Notes - 비고 - - - - POV - 시점 - - - - Status - 상태 - - - - Label - 라벨 - - - - Options: - - - - - Case sensitive - - settingsWindow - + New status - + New label 새 라벨 - + newtheme 새테마 - + New theme 새 테마 - + (read-only) (읽기 전용) - + Open Image 그림 열기 - + Image files (*.jpg; *.jpeg; *.png) 그림 파일 (*.jpg; *.jpeg; *.png) - + Error 오류 - + Unable to load selected file 선택한 파일을 불러올 수 없음 - + Unable to add selected image: {} 선택한 그림을 추가할 수 없습니다: @@ -4047,7 +4091,7 @@ YAML에 문제가 있을 때 사용하십시오. textEditView - + Various 여럿 @@ -4349,212 +4393,212 @@ YAML에 문제가 있을 때 사용하십시오. worldModel - + New item - + Fantasy world building - + Physical - + Climate - + Topography - + Astronomy - + Wild life - + Flora - + History - + Races - + Diseases - + Cultural - + Customs - + Food - + Languages - + Education - + Dresses - + Science - + Calendar - + Bodily language - + Ethics - + Religion - + Government - + Politics - + Gender roles - + Music and arts - + Architecture - + Military - + Technology - + Courtship - + Demography - + Transportation - + Medicine - + Magic system - + Rules - + Organization - + Magical objects - + Magical places - + Magical races - + Important places - + Important objects - + Natural resources diff --git a/i18n/manuskript_nb_NO.ts b/i18n/manuskript_nb_NO.ts index 6e78199..61008b0 100644 --- a/i18n/manuskript_nb_NO.ts +++ b/i18n/manuskript_nb_NO.ts @@ -461,7 +461,7 @@ Use that if you get YAML related error. MainWindow - + General @@ -501,7 +501,7 @@ Use that if you get YAML related error. - + Name @@ -511,7 +511,7 @@ Use that if you get YAML related error. - + Summary Sammendrag @@ -521,7 +521,7 @@ Use that if you get YAML related error. Situasjon: - + Summary: Sammendrag: @@ -531,17 +531,17 @@ Use that if you get YAML related error. Ei setning - + One paragraph Ett avsnitt - + One page Ei side - + Full @@ -571,7 +571,7 @@ Use that if you get YAML related error. Helhetlig sammendrag - + Next Neste @@ -591,312 +591,312 @@ Use that if you get YAML related error. Navn - + Filter - + Basic info Grunnleggende info - + Importance Viktighet - + Motivation Motivasjon - + Goal Mål - + Conflict Konflikt - + Epiphany Åpenbarelse - + <html><head/><body><p align="right">One sentence<br/>summary</p></body></html> - + <html><head/><body><p align="right">One paragraph<br/>summary</p></body></html> - + Notes - + Detailed info Detaljert info - + Plots Handlinger - + Plot Handling - + Character(s) Karakter(er) - + Description - + Result Resultat - + Resolution steps Løsningssteg - + World Verden - + Populates with empty data - + More Mer - + Source of passion - + Source of conflict Konfliktopphav - + Outline Utkast - + Editor - + Debug - + FlatData - + Persos Personer - + Labels - + &File - + &Recent &Nylig - + &Help - + &Tools &Verktøy - + &Edit &Rediger - + &View - + &Mode - + &Cheat sheet &Jukseark - + Sea&rch &Søk - + &Navigation - + &Open - + Ctrl+O - + &Save &Lagre - + Ctrl+S - + Sa&ve as... - + Ctrl+Shift+S - + &Quit &Avslutt - + Ctrl+Q - + &Show help texts &Vis hjelpetekster - + Ctrl+Shift+B - + &Spellcheck &Stavekontroll - + F9 - + &Labels... - + &Status... - + Tree Tre - + &Simple &Enkelt - + &Fiction &Skjønnlitteratur - + Index cards - + S&ettings &Innstillinger - + F8 - + &Close project &Lukk prosjekt - + Co&mpile &Kompiler - + F6 - + &Frequency Analyzer &Frevensanalyse @@ -906,562 +906,605 @@ Use that if you get YAML related error. Bokinformasjon - + &About &Om - + About Manuskript Om Manuskript - + Manuskript - + Project {} saved. Prosjekt {} lagret. - + WARNING: Project {} not saved. ADVARSEL: Prosjekt {} er ikke lagret. - + Project {} loaded. Prosjekt {} innlastet. - + Project {} loaded with some errors: Prosjekt {} innlastet med noen feil: - + * {} wasn't found in project file. * {} ble ikke funnet i prosjektfila. - + Project {} loaded with some errors. Prosjekt {} innlastet med noen feil. - + (~{} pages) - + Words: {}{} Ord: {}{} - + Book summary Boksammendrag - + Project tree Prosjekttre - + Metadata - + Story line - + Enter information about your book, and yourself. - + The basic situation, in the form of a 'What if...?' question. Ex: 'What if the most dangerous evil wizard wasn't able to kill a baby?' (Harry Potter) - + Take time to think about a one sentence (~50 words) summary of your book. Then expand it to a paragraph, then to a page, then to a full summary. - + Create your characters. Opprett dine karakterer - + Develop plots. - + Build worlds. Create hierarchy of broad categories down to specific details. - + Create the outline of your masterpiece. - + Write. Skriv. - + Debug info. Sometimes useful. - + Dictionary Ordbok - + Nothing Ingenting - + POV - + Label - + Progress Fremdrift - + Compile Kompiler - + Icon color - + Text color - + Background color Bakgrunnsfarge - + Icon - + Text - + Background Bakgrunn - + Border Kant - + Corner Hjørne - + Add plot step Legg til plottsteg - + &Import… &Importer… - + F7 - + &Copy &Kopier - + Ctrl+C - + C&ut - + Ctrl+X - + &Paste &Lim inn - + Ctrl+V - + &Split… &Del opp… - + Ctrl+Shift+K - + Sp&lit at cursor - + Ctrl+K - + Ctrl+M - + Ctrl+D - + Del - + &Move Up - + Ctrl+Shift+Up - + M&ove Down - + Ctrl+Shift+Down - + Dupl&icate - + &Delete - + &Rename &Gi nytt navn - + F2 - + Organi&ze &Organiser - + M&erge &Flett - + &Format &Formater - + &Header &Hode - + &Level 1 (setext) &Nivå 1 (setext) - + Ctrl+Alt+1 Ctrl+Alt+1 - + Level &2 Nivå &2 - + Ctrl+Alt+2 Ctrl+Alt+2 - + Level &1 (atx) Nivå %2 (atx) - + Ctrl+1 Ctrl+1 - + L&evel 2 N&ivå 2 - + Ctrl+2 Ctrl+2 - + Level &3 Nivå &3 - + Ctrl+3 Ctrl+3 - + Level &4 Nivå &4 - + Ctrl+4 Ctrl+4 - + Level &5 Nivå &5 - + Ctrl+5 Ctrl+5 - + Level &6 Nivå &6 - + Ctrl+6 Ctrl+6 - + &Bold &Fet - + Ctrl+B Ctrl+B - + &Italic &Kursiv - + Ctrl+I Ctrl+I - + &Strike &Gjennomstrek - + &Verbatim &Verbatim - + Su&perscript He&vet skrift - + Ctrl++ Ctrl++ - + Subsc&ript Senket sk&rift - + Ctrl+- Ctrl+- - + Co&mment block Ko&mmentarblokk - + Ctrl+Shift+C Ctrl+Shift+C - + Clear &formats Tøm &formater - + Ctrl+0 Ctrl+0 - + &Comment line(s) &Kommentarlinje(r) - + &Ordered list &Anordnet liste - + &Unordered list &Ikke anordnet liste - + B&lockquote B&lokksitat - + Remove selected plot step(s) Fjern valgte plottsteg - + The file {} does not exist. Has it been moved or deleted? Filen {} finnes ikke. Har den blitt flyttet eller slettet? - + Install {}{} to use spellcheck Installer {}{} for å bruke stavekontroll - + {} has no installed dictionaries {} har ingen installerte ordbøker - + {}{} is not installed {}{} er ikke installert - + Save project? Lagre prosjekt? - + Save changes to project "{}" before closing? Lagre endringer i prosjektet «{}» før lukking? - + Your changes will be lost if you don't save them. Dine endringer vil gå tapt hvis du ikke lagrer dem. - + PyQt / Qt versions 5.11 and 5.12 are known to cause a crash which might result in a loss of data. PyQt / Qt-versjonene 5.11 og 5.12 er kjent for å forårsake kræsj som kan resultere i datatap. - + PyQt {} and Qt {} are in use. PyQt {} og Qt {} er i bruk. - + Proceed with import at your own risk Å fortsette kan forårsake kræsj og datatap + + + Allow POV + + + + + Search + + + + + Ctrl+F + + + + + F3 + + + + + Shift+F3 + + + + + Situation + + + + + Status + + + + + Search + + + No results found + + Settings @@ -1476,7 +1519,7 @@ Use that if you get YAML related error. - + Revisions @@ -1486,17 +1529,17 @@ Use that if you get YAML related error. - + Labels - + Status - + Fullscreen Fullskjermsvisning @@ -1511,658 +1554,709 @@ Use that if you get YAML related error. Programstil - + Loading Laster - + Automatically load last project on startup Last inn siste prosjekt automatisk ved oppstart - + Saving Lagrer - + Automatically save every Lagre automatisk hver - + minutes. - + If no changes during Hvis ingenting har endret seg på - + seconds. sekunder. - + Save on project close Lagre ved avslutning - + <html><head/><body><p>If you check this option, your project will be saved as one single file. Easier to copy or backup, but does not allow collaborative editing, or versioning.<br/>If this is unchecked, your project will be saved as a folder containing many small files.</p></body></html> <html><head/><body><p>Hvis du velger denne innstillinger, vil prosjektet ditt lagres som én fil. Enklere å kopiere eller sikkerhetskopiere, men tillater ikke samarbeidsredigering, eller versjonering.<br/>Hvis dette velges bort, vil prosjektet lagres som en mappe, hvis innhold er mange små filer.</p></body></html> - + Save to one single file Lagre i ei fil - + Revisions are a way to keep track of modifications. For each text item, it stores any changes you make to the main text, allowing you to see and restoring previous versions. - + Keep revisions - + S&mart remove &Smart fjerning - + Keep: Behold: - + Smart remove allows you to keep only a certain number of revisions. It is strongly recommended to use it, lest you file will becomes full of thousands of insignificant changes. - + revisions per day for the last month - + revisions per minute for the last 10 minutes - + revisions per hour for the last day - + revisions per 10 minutes for the last hour - + revisions per week till the end of time - + Views settings - + Tree - + Colors - + Icon color: - + Nothing Ingenting - + POV - + Label - + Progress Framdrift - + Compile Kompiler - + Text color: - + Background color: Bakgrunnsfarge: - + Folders Mapper - + Show ite&m count - + Show summary Vis sammendrag - + &Nothing &Ingenting - + Text - + Outline - + Visible columns Synlige kolonner - + Goal Mål - + Word count Antall ord - + Percentage Prosentsats - + Title Tittel - + Index cards - + Item colors Elementfarger - + Border color: - + Corner color: Hjørnefarge: - + Background Bakgrunn - + Color: - + Ctrl+S - + Image: - + Text editor - + Font - + Family: Familie: - + Size: Størrelse: - + Misspelled: Feilstavet: - + Background: Bakgrunn: - + Paragraphs Avsnitt - + Line spacing: - + Single - + 1.5 lines - + Double - + Proportional - + % - + Tab width: - + px - + Indent 1st line - + Spacing: - + New - + Edit Rediger - + Delete - + Theme name: - + Apply Legg til - + Cancel Avbryt - + Window Background Vindusbakgrunn - + Text Background Tekstbakgrunn - + Text Options - + Paragraph Options Avsnittsvalg - + Type: - + No Image - + Tiled - + Centered Sentrert - + Stretched Strukket - + Scaled Skalert - + Zoomed Forstørret - + Opacity: Dekkevne: - + Position: - + Left Venstre - + Center Sentrert - + Right - + Width: Bredde: - + Corner radius: Hjørneradius: - + Margins: - + Padding: - + Font: - + Style - + Cursor Peker - + Use block insertion of - + Alignment: Justering: - + Justify Juster - + Alignment Justering - + Icon Size Ikonstørrelse - + TextLabel - + Disable blinking - + Text area - + Max width - + Left/Right margins: - + Top/Bottom margins: - + S&how progress - + Show summar&y Vis sammendr&ag - + Show p&rogress Vis f&remdrift - + Old st&yle Gammel st&il - + Transparent Gjennomsiktig - + Restore defaults Gjenopprett forvalg - + Style: Stil - + Language: Språk: - + Font size: Skriftstørrelse: - + Restarting Manuskript ensures all settings take effect. Det kan hende du må starte Manuskript på ny for at endringene skal tre i effekt ordentlig. - + Show &word count Vis &ordantall - + &Show word count &Vis ordantall - + &New style &Ny stil - + Typewriter mode Skrivemaskinsmodus - + Focus mode Fokusmodus - + None Ingen - + Sentence Setning - + Line Linje - + Paragraph Paragraf - + <p><b>The Revisions feature has been at the source of many reported issues. In this version of Manuskript it has been turned off by default for new projects in order to provide the best experience.</b></p><p>Why aren't these issues fixed already? <a href="https://www.theologeek.ch/manuskript/contribute/">We need your help to make Manuskript better!</a></p> <p><b>Versjoneringsfunksjonen har bitt påklagd mye. I denne versjonen av Manuskript er det skrudd av som forvalg for nye prosjekter for å tilby best mulig opplevelse.</b></p><p>Hvorfor er ikke disse problemene fikset allerede? <a href="https://www.theologeek.ch/manuskript/contribute/">Vi trenger din hjelp til å forbedre Manuskript.</a></p> + + + Show progress in chars next + to words + + + + + Char/Word Counter + + + + + Count spaces as chars + + + + + Show char c&ount + + + + + Sho&w char count + + SpellAction - + Spelling Suggestions - + &Add to dictionary &Legg til i ordbok - + &Remove from custom dictionary + + + &New Character + + + + + &New Plot Item + + + + + &New World Item + + + + + &Correction Suggestions + + + + + &Correction Suggestion + + about @@ -2264,17 +2358,12 @@ Use that if you get YAML related error. characterModel - - New character - Nytt tegn - - - + Name - + Value Verdi @@ -2282,17 +2371,17 @@ Use that if you get YAML related error. characterTreeView - + Main Hoved - + Secondary Sekundær - + Minor @@ -2408,12 +2497,12 @@ Use that if you get YAML related error. corkDelegate - + One line summary Énlinjessammendrag - + Full summary Fullstendig sammendrag @@ -2995,15 +3084,30 @@ Use that if you get YAML related error. - - {} words / {} - {} ord / {} - - - + {} words {} ord + + + ({} chars) {} words / {} + + + + + {} words / {} + + + + + {} chars + + + + + {} chars + + markdownSettings @@ -3208,12 +3312,12 @@ Use that if you get YAML related error. outlineItem - + {} words / {} ({}) {} ord / {} ({}) - + {} words {} ord @@ -3435,37 +3539,32 @@ Use that if you get YAML related error. plotModel - - New plot - - - - + Name - + Meta - + New step - + Main - + Secondary - + Minor @@ -3812,111 +3911,56 @@ Use that if you get YAML related error. Search for... Søk etter… - - - Search in: - Søk i: - - - - All - Alle - - - - Title - Tittel - - - - Text - - - - - Summary - Sammendrag - - - - Notes - - - - - POV - - - - - Status - - - - - Label - - - - - Options: - - - - - Case sensitive - - settingsWindow - + New status - + New label - + newtheme - + New theme - + (read-only) - + Open Image Åpne bilde - + Image files (*.jpg; *.jpeg; *.png) Bildefiler (*.jpg; *.jpeg; *.png) - + Error Feil - + Unable to load selected file Kunne ikke laste inn valgt fil - + Unable to add selected image: {} Kunne ikke legge til valgt bilde: @@ -4041,7 +4085,7 @@ Use that if you get YAML related error. textEditView - + Various Ymse @@ -4343,212 +4387,212 @@ Use that if you get YAML related error. worldModel - + New item - + Fantasy world building - + Physical - + Climate - + Topography - + Astronomy Astronomi - + Wild life Dyreliv - + Flora - + History Historikk - + Races Raser - + Diseases Sykdommer - + Cultural Kulturelle egenskaper - + Customs Skikker - + Food Mat - + Languages Språk - + Education Utdanning - + Dresses Bekledning - + Science Forskning - + Calendar Kalender - + Bodily language Kroppsspråk - + Ethics Etikk - + Religion - + Government Myndigheter - + Politics Politikk - + Gender roles Kjønnsroller - + Music and arts Musikk og kunst - + Architecture Arkitektur - + Military Militær - + Technology - + Courtship Oppvartning - + Demography Demografi - + Transportation Transport - + Medicine Medisin - + Magic system Magisystem - + Rules Regler - + Organization Organisasjon - + Magical objects Magiske objekter - + Magical places Magiske steder - + Magical races Magiske raser - + Important places Viktige steder - + Important objects Viktige objekter - + Natural resources Naturressurser diff --git a/i18n/manuskript_nl.ts b/i18n/manuskript_nl.ts index 4fa90b6..0816483 100644 --- a/i18n/manuskript_nl.ts +++ b/i18n/manuskript_nl.ts @@ -467,7 +467,7 @@ Gebruik dit bij een YAML gerelateerde foutmelding. MainWindow - + General @@ -507,7 +507,7 @@ Gebruik dit bij een YAML gerelateerde foutmelding. - + Name @@ -517,7 +517,7 @@ Gebruik dit bij een YAML gerelateerde foutmelding. - + Summary @@ -527,7 +527,7 @@ Gebruik dit bij een YAML gerelateerde foutmelding. - + Summary: @@ -537,17 +537,17 @@ Gebruik dit bij een YAML gerelateerde foutmelding. - + One paragraph - + One page - + Full @@ -577,7 +577,7 @@ Gebruik dit bij een YAML gerelateerde foutmelding. - + Next @@ -597,312 +597,312 @@ Gebruik dit bij een YAML gerelateerde foutmelding. - + Filter - + Basic info - + Importance - + Motivation - + Goal - + Conflict - + Epiphany - + <html><head/><body><p align="right">One sentence<br/>summary</p></body></html> - + <html><head/><body><p align="right">One paragraph<br/>summary</p></body></html> - + Notes - + Detailed info - + Plots - + Plot - + Character(s) - + Description - + Result - + Resolution steps - + World - + Populates with empty data - + More - + Source of passion - + Source of conflict - + Outline - + Editor - + Debug - + FlatData - + Persos - + Labels - + &File - + &Recent - + &Help - + &Tools - + &Edit - + &View - + &Mode - + &Cheat sheet - + Sea&rch - + &Navigation - + &Open - + Ctrl+O - + &Save - + Ctrl+S - + Sa&ve as... - + Ctrl+Shift+S - + &Quit - + Ctrl+Q - + &Show help texts - + Ctrl+Shift+B - + &Spellcheck - + F9 - + &Labels... - + &Status... - + Tree - + &Simple - + &Fiction - + Index cards - + S&ettings - + F8 - + &Close project - + Co&mpile - + F6 - + &Frequency Analyzer @@ -912,562 +912,605 @@ Gebruik dit bij een YAML gerelateerde foutmelding. - + &About - + About Manuskript - + Manuskript - + Project {} saved. - + WARNING: Project {} not saved. - + Project {} loaded. - + Project {} loaded with some errors: - + * {} wasn't found in project file. - + Project {} loaded with some errors. - + (~{} pages) - + Words: {}{} - + Book summary - + Project tree - + Metadata - + Story line - + Enter information about your book, and yourself. - + The basic situation, in the form of a 'What if...?' question. Ex: 'What if the most dangerous evil wizard wasn't able to kill a baby?' (Harry Potter) - + Take time to think about a one sentence (~50 words) summary of your book. Then expand it to a paragraph, then to a page, then to a full summary. - + Create your characters. - + Develop plots. - + Build worlds. Create hierarchy of broad categories down to specific details. - + Create the outline of your masterpiece. - + Write. - + Debug info. Sometimes useful. - + Dictionary - + Nothing - + POV - + Label - + Progress - + Compile - + Icon color - + Text color - + Background color - + Icon - + Text - + Background - + Border - + Corner - + Add plot step Plotstap toevoegen - + &Import… - + F7 - + &Copy - + Ctrl+C - + C&ut - + Ctrl+X - + &Paste - + Ctrl+V - + &Split… - + Ctrl+Shift+K - + Sp&lit at cursor - + Ctrl+K - + Ctrl+M - + Ctrl+D - + Del - + &Move Up O&mhoog - + Ctrl+Shift+Up - + M&ove Down &Omlaag - + Ctrl+Shift+Down Ctrl+Shift+Neer - + Dupl&icate Dupl&iceer - + &Delete - + &Rename He&rnoem - + F2 - + Organi&ze Organi&seer - + M&erge Sam&envoegen - + &Format &Opmaken - + &Header Kop - + &Level 1 (setext) Niveau 1 (setext) - + Ctrl+Alt+1 Ctrl+Alt+1 - + Level &2 Niveau &2 - + Ctrl+Alt+2 Ctrl+Alt+2 - + Level &1 (atx) Niveau &1 (atx) - + Ctrl+1 Ctrl+1 - + L&evel 2 L&level 2 - + Ctrl+2 Ctrl+2 - + Level &3 Niveau &3 - + Ctrl+3 Ctrl+3 - + Level &4 Niveau &4 - + Ctrl+4 Ctrl+4 - + Level &5 Niveau &5 - + Ctrl+5 Ctrl+5 - + Level &6 Niveau &6 - + Ctrl+6 Ctrl+6 - + &Bold &Dikgedrukt - + Ctrl+B Ctrl+B - + &Italic &Schuingedrukt - + Ctrl+I Ctrl+I - + &Strike &Doorgestreept - + &Verbatim - + Su&perscript - + Ctrl++ Ctrl++ - + Subsc&ript - + Ctrl+- Ctrl+- - + Co&mment block - + Ctrl+Shift+C - + Clear &formats - + Ctrl+0 Ctrl+0 - + &Comment line(s) - + &Ordered list - + &Unordered list - + B&lockquote - + Remove selected plot step(s) - + The file {} does not exist. Has it been moved or deleted? - + Install {}{} to use spellcheck - + {} has no installed dictionaries - + {}{} is not installed - + Save project? - + Save changes to project "{}" before closing? - + Your changes will be lost if you don't save them. - + PyQt / Qt versions 5.11 and 5.12 are known to cause a crash which might result in a loss of data. - + PyQt {} and Qt {} are in use. - + Proceed with import at your own risk + + + Allow POV + + + + + Search + + + + + Ctrl+F + + + + + F3 + + + + + Shift+F3 + + + + + Situation + + + + + Status + + + + + Search + + + No results found + + Settings @@ -1482,7 +1525,7 @@ Gebruik dit bij een YAML gerelateerde foutmelding. - + Revisions @@ -1492,17 +1535,17 @@ Gebruik dit bij een YAML gerelateerde foutmelding. - + Labels - + Status - + Fullscreen @@ -1517,658 +1560,709 @@ Gebruik dit bij een YAML gerelateerde foutmelding. - + Loading - + Automatically load last project on startup - + Saving - + Automatically save every - + minutes. - + If no changes during - + seconds. - + Save on project close - + <html><head/><body><p>If you check this option, your project will be saved as one single file. Easier to copy or backup, but does not allow collaborative editing, or versioning.<br/>If this is unchecked, your project will be saved as a folder containing many small files.</p></body></html> - + Save to one single file - + Revisions are a way to keep track of modifications. For each text item, it stores any changes you make to the main text, allowing you to see and restoring previous versions. - + Keep revisions - + S&mart remove - + Keep: - + Smart remove allows you to keep only a certain number of revisions. It is strongly recommended to use it, lest you file will becomes full of thousands of insignificant changes. - + revisions per day for the last month - + revisions per minute for the last 10 minutes - + revisions per hour for the last day - + revisions per 10 minutes for the last hour - + revisions per week till the end of time - + Views settings - + Tree - + Colors - + Icon color: - + Nothing - + POV - + Label - + Progress - + Compile - + Text color: - + Background color: - + Folders - + Show ite&m count - + Show summary - + &Nothing - + Text - + Outline - + Visible columns - + Goal - + Word count - + Percentage - + Title - + Index cards - + Item colors - + Border color: - + Corner color: - + Background - + Color: - + Ctrl+S - + Image: - + Text editor - + Font - + Family: - + Size: - + Misspelled: - + Background: - + Paragraphs - + Line spacing: - + Single - + 1.5 lines - + Double - + Proportional - + % - + Tab width: - + px - + Indent 1st line - + Spacing: - + New - + Edit - + Delete - + Theme name: - + Apply - + Cancel - + Window Background - + Text Background - + Text Options - + Paragraph Options - + Type: - + No Image - + Tiled - + Centered - + Stretched - + Scaled - + Zoomed - + Opacity: - + Position: - + Left - + Center - + Right - + Width: - + Corner radius: - + Margins: - + Padding: - + Font: - + Style - + Cursor - + Use block insertion of - + Alignment: - + Justify - + Alignment - + Icon Size - + TextLabel - + Disable blinking - + Text area - + Max width - + Left/Right margins: - + Top/Bottom margins: - + S&how progress - + Show summar&y - + Show p&rogress - + Old st&yle - + Transparent - + Restore defaults - + Style: - + Language: - + Font size: - + Restarting Manuskript ensures all settings take effect. - + Show &word count - + &Show word count - + &New style - + Typewriter mode - + Focus mode - + None - + Sentence - + Line - + Paragraph - + <p><b>The Revisions feature has been at the source of many reported issues. In this version of Manuskript it has been turned off by default for new projects in order to provide the best experience.</b></p><p>Why aren't these issues fixed already? <a href="https://www.theologeek.ch/manuskript/contribute/">We need your help to make Manuskript better!</a></p> + + + Show progress in chars next + to words + + + + + Char/Word Counter + + + + + Count spaces as chars + + + + + Show char c&ount + + + + + Sho&w char count + + SpellAction - + Spelling Suggestions - + &Add to dictionary - + &Remove from custom dictionary + + + &New Character + + + + + &New Plot Item + + + + + &New World Item + + + + + &Correction Suggestions + + + + + &Correction Suggestion + + about @@ -2270,17 +2364,12 @@ Gebruik dit bij een YAML gerelateerde foutmelding. characterModel - - New character - - - - + Name - + Value @@ -2288,17 +2377,17 @@ Gebruik dit bij een YAML gerelateerde foutmelding. characterTreeView - + Main - + Secondary - + Minor @@ -2414,12 +2503,12 @@ Gebruik dit bij een YAML gerelateerde foutmelding. corkDelegate - + One line summary - + Full summary @@ -3001,14 +3090,29 @@ Gebruik dit bij een YAML gerelateerde foutmelding. - - {} words / {} + + {} words - - {} words - + + ({} chars) {} words / {} + + + + + {} words / {} + + + + + {} chars + + + + + {} chars + @@ -3214,12 +3318,12 @@ Gebruik dit bij een YAML gerelateerde foutmelding. outlineItem - + {} words / {} ({}) - + {} words @@ -3441,37 +3545,32 @@ Gebruik dit bij een YAML gerelateerde foutmelding. plotModel - - New plot - - - - + Name - + Meta - + New step - + Main - + Secondary - + Minor @@ -3818,111 +3917,56 @@ Gebruik dit bij een YAML gerelateerde foutmelding. Search for... - - - Search in: - - - - - All - - - - - Title - - - - - Text - - - - - Summary - - - - - Notes - - - - - POV - - - - - Status - - - - - Label - - - - - Options: - - - - - Case sensitive - - settingsWindow - + New status - + New label - + newtheme - + New theme - + (read-only) - + Open Image - + Image files (*.jpg; *.jpeg; *.png) - + Error Fout - + Unable to load selected file - + Unable to add selected image: {} @@ -4032,7 +4076,7 @@ Gebruik dit bij een YAML gerelateerde foutmelding. textEditView - + Various @@ -4334,212 +4378,212 @@ Gebruik dit bij een YAML gerelateerde foutmelding. worldModel - + New item - + Fantasy world building - + Physical - + Climate - + Topography - + Astronomy - + Wild life - + Flora - + History - + Races - + Diseases - + Cultural - + Customs - + Food - + Languages - + Education - + Dresses - + Science - + Calendar - + Bodily language - + Ethics - + Religion - + Government - + Politics - + Gender roles - + Music and arts - + Architecture - + Military - + Technology - + Courtship - + Demography - + Transportation - + Medicine - + Magic system - + Rules - + Organization - + Magical objects - + Magical places - + Magical races - + Important places - + Important objects Belangrijke objecten - + Natural resources diff --git a/i18n/manuskript_pl.ts b/i18n/manuskript_pl.ts index de97ce6..82a2ef7 100644 --- a/i18n/manuskript_pl.ts +++ b/i18n/manuskript_pl.ts @@ -470,7 +470,7 @@ i stworzy pozycje dla każdego tytułu.<br/>&nbsp; MainWindow - + General Ogólne @@ -515,7 +515,7 @@ i stworzy pozycje dla każdego tytułu.<br/>&nbsp; Autor - + Name Imię i nazwisko @@ -525,7 +525,7 @@ i stworzy pozycje dla każdego tytułu.<br/>&nbsp; E-mail - + Summary Podsumowanie @@ -535,7 +535,7 @@ i stworzy pozycje dla każdego tytułu.<br/>&nbsp; Sytuacja: - + Summary: Podsumowanie: @@ -545,17 +545,17 @@ i stworzy pozycje dla każdego tytułu.<br/>&nbsp; W jednym zdaniu - + One paragraph W jednym akapicie - + One page W jednej stronie - + Full Pełne @@ -585,7 +585,7 @@ i stworzy pozycje dla każdego tytułu.<br/>&nbsp; Pełne podsumowanie - + Next Dalej @@ -605,873 +605,916 @@ i stworzy pozycje dla każdego tytułu.<br/>&nbsp; Imiona - + Filter Filtruj - + Basic info Podstawowe informacje - + Motivation Umotywowanie - + Goal Cel - + Conflict Konflikt - + Epiphany Epifania (olśnienie) - + <html><head/><body><p align="right">One sentence<br/>summary</p></body></html> <html><head/><body><p align="right">Podsumowanie<br/> w jednym zdaniu</p></body></html> - + <html><head/><body><p align="right">One paragraph<br/>summary</p></body></html> <html><head/><body><p align="right">Podsumowanie<br/> w jednym akapicie</p></body></html> - + Importance Znaczenie - + Notes Notatki - + Detailed info Szczegółowe informacje - + Plots Wątki - + Plot Wątek - + Character(s) Postać/-ci - + Description Opis - + Result Skutek - + Resolution steps Kroki prowadzące do rozwiązania - + Add plot step Dodaj etap fabuły - + World Świat - + Populates with empty data Zapełnia pustymi danymi - + More Więcej - + Source of passion Źródło pasji - + Source of conflict Źródło konfliktu - + Outline Zarys - + Editor Edytor - + Debug Debugowanie - + FlatData FlatData - + Persos Osoby - + Labels Etykiety - + &File &Plik - + &Recent &Ostatnie - + &Help &Pomoc - + &Tools &Narzędzia - + &Edit &Edycja - + &Format &Formatowanie - + &Header &Nagłówek - + &View &Widok - + &Mode &Tryb - + Organi&ze Organi&zuj - + &Cheat sheet Ś&ciągawka - + Sea&rch &Szukaj - + &Navigation &Nawigacja - + &Open &Otwórz - + Ctrl+O Ctrl+O - + &Save &Zapisz - + Ctrl+S Ctrl+S - + Sa&ve as... Za&pisz jako... - + Ctrl+Shift+S Ctrl+Shift+S - + &Quit &Zamknij - + Ctrl+Q Ctrl+Q - + &Show help texts &Pokaż podpowiedzi - + Ctrl+Shift+B Ctrl+Shift+B - + &Spellcheck &Sprawdzanie pisowni - + F9 F9 - + &Labels... &Etykiety... - + &Status... &Status... - + Tree Drzewo - + &Simple &Uproszczony - + &Fiction %Fikcji literackiej - + Index cards Karty katalogowe - + S&ettings U&stawienia - + F8 F8 - + &Close project &Zamknij projekt - + Co&mpile &Kompiluj - + F6 F6 - + &Frequency Analyzer &Analiza częstotliwości - + &About &O programie - + About Manuskript O Manuskript - + F7 F7 - + &Copy &Kopiuj - + Ctrl+C Ctrl+C - + C&ut &Wytnij - + Ctrl+X Ctrl+X - + &Paste W&klej - + Ctrl+V Ctrl+V - + Ctrl+Shift+K Ctrl+Shift+K - + Sp&lit at cursor Po&dziel w miejscu kursora - + Ctrl+K Ctrl+K - + M&erge P&ołącz - + Ctrl+M Ctrl+M - + Dupl&icate Dupl&ikuj - + &Delete &Usuń - + Del Del - + &Move Up P&rzesuń w górę - + Ctrl+Shift+Up Ctrl+Shift+Up - + M&ove Down Pr&zesuń w dół - + Ctrl+Shift+Down Ctrl+Shift+Down - + &Rename &Zmień nazwę - + F2 F2 - + &Level 1 (setext) &Poziom 1 (setext) - + Ctrl+Alt+1 Ctrl+Alt+1 - + Level &2 Poziom &2 - + Ctrl+Alt+2 Ctrl+Alt+2 - + Level &1 (atx) Poziom &1 (atx) - + Ctrl+1 Ctrl+1 - + L&evel 2 P&oziom 2 - + Ctrl+2 Ctrl+2 - + Level &3 Poziom &3 - + Ctrl+3 Ctrl+3 - + Level &4 Poziom &4 - + Ctrl+4 Ctrl+4 - + Level &5 Poziom &5 - + Ctrl+5 Ctrl+5 - + Level &6 Poziom &6 - + Ctrl+6 Ctrl+6 - + &Bold Pogru&bienie - + Ctrl+B Ctrl+B - + &Italic Pochylen&ie - + Ctrl+I Ctrl+I - + &Strike &Przekreślenie - + &Verbatim &Dosłownie - + Su&perscript Indeks &górny - + Ctrl++ Ctrl++ - + Subsc&ript Indeks &dolny - + Ctrl+- Ctrl+- - + Co&mment block Blok komentarza - + Ctrl+Shift+C Ctrl+Shift+C - + Clear &formats Wyczyść &formatowanie - + Ctrl+0 Ctrl+0 - + &Comment line(s) &Wiersz(-e) komentarza - + Ctrl+D Ctrl+D - + &Ordered list &Numerowanie - + &Unordered list &Wypunktowanie - + B&lockquote &Cytat - + Manuskript Manuskript - + Project {} saved. Projekt {} zapisany. - + WARNING: Project {} not saved. UWAGA: Nie zapisano projektu {}. - + Project {} loaded. Projekt {} wczytany. - + Project {} loaded with some errors: Projekt {} wczytany z błędami: - + * {} wasn't found in project file. * {} nie znaleziono w pliku projektu. - + Project {} loaded with some errors. Projekt {} wczytany z błędami. - + (~{} pages) (~{} stron) - + Words: {}{} Słowa: {}{} - + Book summary Podsumowanie książki - + Project tree Drzewo projektu - + Metadata Metadane - + Story line Linia fabularna - + Enter information about your book, and yourself. Wpisz informacje o swojej książce i o sobie. - + The basic situation, in the form of a 'What if...?' question. Ex: 'What if the most dangerous evil wizard wasn't able to kill a baby?' (Harry Potter) Podstawowa sytuacja, sformułowana jako pytanie "Co jeśli...?". Na przykład: "Co jeśli najniebezpieczniejszy zły czarownik nie mógł zabić dziecka?" (Harry Potter) - + Take time to think about a one sentence (~50 words) summary of your book. Then expand it to a paragraph, then to a page, then to a full summary. Poświęć czas na przemyślenie jednego zdania (ok. 50 słów) podsumowania swojej książki. Następnie rozwiń je do akapitu, następnie do strony, a następnie do pełnego podsumowania. - + Create your characters. Stwórz swoich bohaterów. - + Develop plots. Opracuj wątki. - + Build worlds. Create hierarchy of broad categories down to specific details. Buduj światy. Stwórz hierarchię szeroko zarysowanych kategorii do konkretnych szczegółów. - + Create the outline of your masterpiece. Stwórz zarys swojego dzieła. - + Write. Pisz. - + Debug info. Sometimes useful. Informacje debugowania. Czasem są użyteczne. - + Dictionary Słownik - + Nothing Nic - + POV Punkt widzenia - + Label Etykieta - + Progress Postęp - + Compile Kompiluj - + Icon color Kolor ikony - + Text color Kolor tekstu - + Background color Kolor tła - + Icon Ikona - + Text Tekst - + Background Tło - + Border Ramka - + Corner Narożnik - + &Import… &importuj… - + &Split… &Podziel… - + Remove selected plot step(s) Usuń wybrany(e) etapy fabuły - + The file {} does not exist. Has it been moved or deleted? Plik {} nie istnieje. Czy został przeniesiony lub skasowany? - + Install {}{} to use spellcheck Zainstaluj {}{}, aby użyć sprawdzania pisowni - + {} has no installed dictionaries {} nie ma zainstalowanych słowników - + {}{} is not installed {}{} jest niezainstalowany - + Save project? Zapisać projekt? - + Save changes to project "{}" before closing? Zapisać zmiany w projekcie "{}" przed zamknięciem? - + Your changes will be lost if you don't save them. Twoje postępy zostaną utracone jeśli ich nie zapiszesz. - + PyQt / Qt versions 5.11 and 5.12 are known to cause a crash which might result in a loss of data. - + PyQt {} and Qt {} are in use. - + Proceed with import at your own risk + + + Allow POV + + + + + Search + + + + + Ctrl+F + + + + + F3 + F3 + + + + Shift+F3 + + + + + Situation + + + + + Status + Status + + + + Search + + + No results found + + Settings @@ -1486,7 +1529,7 @@ akapitu, następnie do strony, a następnie do pełnego podsumowania.Ogólne - + Revisions Korekty @@ -1496,17 +1539,17 @@ akapitu, następnie do strony, a następnie do pełnego podsumowania.Widoki - + Labels Etykiety - + Status Status - + Fullscreen Pełny ekran @@ -1521,658 +1564,709 @@ akapitu, następnie do strony, a następnie do pełnego podsumowania.Ustawienia aplikacji - + Style: Styl: - + Language: Język: - + Font size: Rozmiar tekstu: - + Restarting Manuskript ensures all settings take effect. Może być konieczne ponowne uruchomienie programu manuskript, aby te ustawienia zaczęły działać poprawnie. - + Loading Wczytywanie - + Automatically load last project on startup Po uruchomieniu automatycznie wczytaj ostatni projekt - + Saving Zapisywanie - + Automatically save every Zapisuj automatycznie co - + minutes. minut. - + If no changes during Jeśli nie ma żadnych zmian przez - + seconds. sekund. - + Save on project close Zapisz przy zamknięciu - + <html><head/><body><p>If you check this option, your project will be saved as one single file. Easier to copy or backup, but does not allow collaborative editing, or versioning.<br/>If this is unchecked, your project will be saved as a folder containing many small files.</p></body></html> <html><head/><body><p>Jeśli wybierzesz tę opcję twój projekt zostanie zapisany jako pojedynczy plik. Łatwiej go kopiować lub tworzyć kopi zapasową, ale nie pozwala on na współpracę w zespole i wersjonowanie.<br/>Jeśli ta opcja jest odznaczona twój projekt zostanie zapisany jako folder zawierający wiele małych plików.</p></body></html> - + Save to one single file Zapisz do jednego pliku - + Revisions are a way to keep track of modifications. For each text item, it stores any changes you make to the main text, allowing you to see and restoring previous versions. Korekty to sposób na śledzenie zmian. Dla każdego pliku tekstowego przechowuje wszelkie zmiany wprowadzone w tekście głównym, co pozwala zobaczyć i przywrócić poprzednie wersje. - + Keep revisions Zachowuj korekty - + S&mart remove I&nteligentne usuwanie - + Keep: Zachowaj: - + Smart remove allows you to keep only a certain number of revisions. It is strongly recommended to use it, lest you file will becomes full of thousands of insignificant changes. Inteligentne czyszczenie pozwala na zachowanie pewnej liczby korekt. Zdecydowanie zaleca się jego użycie, żeby pliki nie były pełne tysiąca nieistotnych zmian. - + revisions per day for the last month korekty dzienne z ostatniego miesiąca - + revisions per minute for the last 10 minutes korekty co minutę z ostatnich 10 minut - + revisions per hour for the last day korekty co godzinę z ostatniego dnia - + revisions per 10 minutes for the last hour korekty co 10 minut z ostatniej godziny - + revisions per week till the end of time korekty co tydzień do końca świata - + Views settings Ustawienia widoku - + Tree Drzewo - + Colors Kolory - + Icon color: Kolor ikony: - + Nothing Nic - + POV Punkt widzenia - + Label Etykieta - + Progress Postęp - + Compile Kompiluj - + Text color: Kolor tekstu: - + Background color: Kolor tła: - + Icon Size Rozmiar ikony - + TextLabel TekstEtykiety - + Folders Foldery - + Show ite&m count Pokaż liczbę ele&mentów - + Show &word count Pokaż liczbę słów - + S&how progress Pokaż po&stęp - + Show summar&y Pokaż podsumowani&e - + &Nothing &Nic - + Text Tekst - + &Show word count Pokaż liczbę &słów - + Show p&rogress Pokaż p&ostęp - + Show summary Pokaż podsumowanie - + Outline Zarys - + Visible columns Widoczne kolumny - + Goal Cel - + Word count Liczba słów - + Percentage Procent - + Title Tytuł - + Index cards Karty katalogowe - + Background Tło - + Color: Kolor: - + Ctrl+S Ctrl+S - + Image: Obraz: - + Style Styl - + Old st&yle Poprzedni st&yl - + &New style &Nowy styl - + Item colors Kolory elementów - + Border color: Kolor obramowania: - + Corner color: Kolor narożnika: - + Text editor Edytor tekstu - + Background: Tło: - + Transparent Przezroczysty - + Restore defaults Przywróć wartości domyślne - + Font Krój tekstu - + Family: Rodzina: - + Size: Rozmiar: - + Misspelled: Błędnie napisane: - + Text area Obszar tekstu - + Max width Szerokość maksymalna - + px px - + Left/Right margins: Lewy/Prawy margines: - + Top/Bottom margins: Górny/Dolny margines: - + Paragraphs Akapity - + Alignment: Wyrównanie: - + Left Do lewej - + Center Wyśrodkowanie - + Right Do prawej - + Justify Justowanie - + Line spacing: Interlinia: - + Single Pojedyncza - + 1.5 lines 1.5 linii - + Double Podwójna - + Proportional Proporcjonalna - + % % - + Tab width: Szerokość wcięcia: - + Indent 1st line Wcięcie pierwszej linii - + Spacing: Rozstaw: - + Cursor Kursor - + Use block insertion of Użyj wstawiania blokowego - + Disable blinking Wyłącz miganie - + Typewriter mode Tryb maszyny do pisania - + Focus mode Tryb skupienia - + None Żaden - + Sentence Zdanie - + Line Linia - + Paragraph Akapit - + New Nowy - + Edit Edytuj - + Delete Usuń - + Theme name: Nazwa motywu: - + Apply Zastosuj - + Cancel Anuluj - + Window Background Tło okna - + Text Background Tło tekstu - + Text Options Opcje tekstu - + Paragraph Options Opcje akapitu - + Type: Rodzaj: - + No Image Brak obrazu - + Tiled Kafelkowanie - + Centered Wyśrodkowanie - + Stretched Rozciągnięcie - + Scaled Skalowanie - + Zoomed Dopasowanie - + Opacity: Przezroczystość: - + Position: Pozycja: - + Width: Szerokość: - + Corner radius: Promień narożnika: - + Margins: Marginesy zewnętrzne: - + Padding: Marginesy wewnętrzne: - + Font: Krój tekstu: - + Alignment Wyrównanie - + <p><b>The Revisions feature has been at the source of many reported issues. In this version of Manuskript it has been turned off by default for new projects in order to provide the best experience.</b></p><p>Why aren't these issues fixed already? <a href="https://www.theologeek.ch/manuskript/contribute/">We need your help to make Manuskript better!</a></p> + + + Show progress in chars next + to words + + + + + Char/Word Counter + + + + + Count spaces as chars + + + + + Show char c&ount + + + + + Sho&w char count + + SpellAction - + Spelling Suggestions Sugestie pisowni - + &Add to dictionary Dod&aj do słownika - + &Remove from custom dictionary &Usuń ze słownika użytkownika + + + &New Character + + + + + &New Plot Item + + + + + &New World Item + + + + + &Correction Suggestions + + + + + &Correction Suggestion + + about @@ -2274,17 +2368,12 @@ akapitu, następnie do strony, a następnie do pełnego podsumowania. characterModel - - New character - Nowa postać - - - + Name Imię - + Value Wartość @@ -2292,17 +2381,17 @@ akapitu, następnie do strony, a następnie do pełnego podsumowania. characterTreeView - + Main Główny - + Secondary Poboczny - + Minor Epizodyczny @@ -2418,12 +2507,12 @@ akapitu, następnie do strony, a następnie do pełnego podsumowania. corkDelegate - + One line summary Podsumowanie w jednej linii - + Full summary Pełne podsumowanie @@ -3005,15 +3094,30 @@ akapitu, następnie do strony, a następnie do pełnego podsumowania.Katalog główny - - {} words / {} - {} słów / {} - - - + {} words {} słów + + + ({} chars) {} words / {} + + + + + {} words / {} + + + + + {} chars + + + + + {} chars + + markdownSettings @@ -3218,12 +3322,12 @@ akapitu, następnie do strony, a następnie do pełnego podsumowania. outlineItem - + {} words / {} ({}) {} słów / {} ({}) - + {} words {} słów @@ -3445,37 +3549,32 @@ akapitu, następnie do strony, a następnie do pełnego podsumowania. plotModel - - New plot - Nowy wątek - - - + Name Nazwa - + Meta Meta - + New step Nowy krok - + Main Główny - + Secondary Poboczny - + Minor Epizodyczny @@ -3822,111 +3921,56 @@ akapitu, następnie do strony, a następnie do pełnego podsumowania.Search for... Szukaj... - - - Search in: - Szukaj w: - - - - All - Wszystko - - - - Title - Tytuł - - - - Text - Tekst - - - - Summary - Podsumowanie - - - - Notes - Notatki - - - - POV - Punkt widzenia - - - - Status - Status - - - - Label - Etykieta - - - - Options: - Opcje: - - - - Case sensitive - Uwzględniaj wielkość liter - settingsWindow - + New status Nowy status - + New label Nowa etykieta - + newtheme nowymotyw - + New theme Nowy motyw - + (read-only) (tylko-do-odczytu) - + Open Image Otwórz obraz - + Image files (*.jpg; *.jpeg; *.png) Pliki obrazu (*.jpg; *.jpeg; *.png) - + Error Błąd - + Unable to load selected file Błąd wczytywania wybranego pliku - + Unable to add selected image: {} Błąd dodania wybranego obrazu: @@ -4037,7 +4081,7 @@ akapitu, następnie do strony, a następnie do pełnego podsumowania. textEditView - + Various Różne @@ -4339,212 +4383,212 @@ akapitu, następnie do strony, a następnie do pełnego podsumowania. worldModel - + New item Nowy obiekt - + Fantasy world building Budowanie świata fantasy - + Physical Wygląd fizyczny - + Climate Klimat - + Topography Topografia - + Astronomy Astronomia - + Wild life Dzika przyroda - + Flora Flora - + History Historia - + Races Rasy - + Diseases Choroby - + Cultural Kultury - + Customs Zwyczaje - + Food Żywność - + Languages Języki - + Education Edukacja - + Dresses Ubiór - + Science Nauka - + Calendar Kalendarz - + Bodily language Język mowy ciała - + Ethics Etyka - + Religion Religie - + Government Rząd (ustrój polityczny) - + Politics Polityka - + Gender roles Role związane z płcią - + Music and arts Muzyka i sztuka - + Architecture Architektura - + Military Wojskowość - + Technology Technologia - + Courtship Zaloty - + Demography Demografia - + Transportation Transport - + Medicine Medycyna - + Magic system Magia - + Rules Zasady - + Organization Organizacje - + Magical objects Magiczne obiekty - + Magical places Magiczne miejsca - + Magical races Magiczne rasy - + Important places Ważne miejsca - + Important objects Ważne obiekty - + Natural resources Zasoby naturalne diff --git a/i18n/manuskript_pt_BR.ts b/i18n/manuskript_pt_BR.ts index d442aeb..0e9264f 100644 --- a/i18n/manuskript_pt_BR.ts +++ b/i18n/manuskript_pt_BR.ts @@ -482,7 +482,7 @@ Use isso se você receber um erro relacionado ao YAML. MainWindow - + General Geral @@ -522,7 +522,7 @@ Use isso se você receber um erro relacionado ao YAML. Autor - + Name Nome @@ -532,7 +532,7 @@ Use isso se você receber um erro relacionado ao YAML. - + Summary Sumário @@ -542,7 +542,7 @@ Use isso se você receber um erro relacionado ao YAML. Situação: - + Summary: Sumário: @@ -552,17 +552,17 @@ Use isso se você receber um erro relacionado ao YAML. Uma frase - + One paragraph Um parágrafo - + One page Uma página - + Full Cheio @@ -592,7 +592,7 @@ Use isso se você receber um erro relacionado ao YAML. Sumário completo - + Next Próximo @@ -612,312 +612,312 @@ Use isso se você receber um erro relacionado ao YAML. Nomes - + Filter Filtro - + Basic info Informação basica - + Importance Importância - + Motivation Motivação - + Goal Objetivo - + Conflict Conflito - + Epiphany Epifania - + <html><head/><body><p align="right">One sentence<br/>summary</p></body></html> <html><head/><body><p align="right">Uma sentença<br/>sumário</p></body></html> - + <html><head/><body><p align="right">One paragraph<br/>summary</p></body></html> <html><head/><body><p align="right">Um parágrafo<br/>sumário</p></body></html> - + Notes Notas - + Detailed info Info Detalhada - + Plots Enredos - + Plot Enredo - + Character(s) Personagens - + Description Descrição - + Result Resultado - + Resolution steps Etapas de resolução - + World Mundo - + Populates with empty data Preenche com dados vazios - + More Mais - + Source of passion Fonte de paixão - + Source of conflict Fonte do conflito - + Outline Esboço - + Editor - + Debug Depurar - + FlatData Dados simples - + Persos Personas - + Labels Rótulos - + &File &Arquivo - + &Recent &Recente - + &Help &Ajuda - + &Tools &Ferramentas - + &Edit &Editar - + &View &Vizualizar - + &Mode &Modo - + &Cheat sheet &Folha de notas - + Sea&rch P&rocurar - + &Navigation &Navegação - + &Open &Abrir - + Ctrl+O - + &Save &Salvar - + Ctrl+S - + Sa&ve as... Sa&lvar como... - + Ctrl+Shift+S - + &Quit &Sair - + Ctrl+Q - + &Show help texts &Mostrar textos de ajuda - + Ctrl+Shift+B - + &Spellcheck &Verificação ortográfica - + F9 - + &Labels... &Rótulos... - + &Status... - + Tree Árvore - + &Simple &Simples - + &Fiction &Ficção - + Index cards Cartões de índice - + S&ettings Configuraçõ&es - + F8 - + &Close project Fe&char o projeto - + Co&mpile Co&mpilar - + F6 - + &Frequency Analyzer Analizador de &Frequencia @@ -927,564 +927,607 @@ Use isso se você receber um erro relacionado ao YAML. Informações do livro - + &About S&obre - + About Manuskript Sobre o Manuskript - + Manuskript - + Project {} saved. Projeto {} salvo. - + WARNING: Project {} not saved. Atenção: Projeto {} não foi salvo. - + Project {} loaded. Projeto {} carregado. - + Project {} loaded with some errors: Projeto {} com alguns erros: - + * {} wasn't found in project file. * {} não foi encontrado o arquivo do projeto. - + Project {} loaded with some errors. Projeto {} carregado com alguns erros. - + (~{} pages) (~{} páginas) - + Words: {}{} Palavras: {}{} - + Book summary Sumário do livro - + Project tree Árvore do projeto - + Metadata Meta dados - + Story line Linhas históricas - + Enter information about your book, and yourself. Insira informações sobre seu livro e você mesmo. - + The basic situation, in the form of a 'What if...?' question. Ex: 'What if the most dangerous evil wizard wasn't able to kill a baby?' (Harry Potter) A situação básica, na forma de um questionamento tipo 'e se ...'. Ex: 'E se o mais perigoso malvado feiticeiro não foi capaz de matar um bebê?' (Harry Potter) - + Take time to think about a one sentence (~50 words) summary of your book. Then expand it to a paragraph, then to a page, then to a full summary. Tire um tempo para pensar em uma frase (~50 palavras) sumário do seu livro. Então expanda isso para um parágrafo, depois para uma página e, em seguida, para um sumário completo. - + Create your characters. Crie seus personagens. - + Develop plots. Desenvolva enredos. - + Build worlds. Create hierarchy of broad categories down to specific details. Construa mundos. Crie hierarquia de categorias mais amplas até os detalhes específicos. - + Create the outline of your masterpiece. Crie o esboço da sua obra-prima. - + Write. Escreva. - + Debug info. Sometimes useful. Informações de depuração. Às vezes é útil. - + Dictionary Dicionário - + Nothing Nada - + POV Ponto de Vista - + Label Rótulo - + Progress Progresso - + Compile Compilar - + Icon color Cor do ícone - + Text color Cor do texto - + Background color Cor do fundo - + Icon Ícone - + Text Texto - + Background Fundo - + Border Borda - + Corner Canto - + Add plot step Adicionar etapa de enredo - + &Import… &Importar… - + F7 - + &Copy &Copiar - + Ctrl+C - + C&ut C&ortar - + Ctrl+X - + &Paste Co&lar - + Ctrl+V - + &Split… &Separar… - + Ctrl+Shift+K - + Sp&lit at cursor Sep&arar no cursor - + Ctrl+K - + Ctrl+M - + Ctrl+D - + Del - + &Move Up &Mover para cima - + Ctrl+Shift+Up - + M&ove Down M&over pra baixo - + Ctrl+Shift+Down - + Dupl&icate Dupl&icar - + &Delete &Deletar - + &Rename &Renomear - + F2 - + Organi&ze Organi&zar - + M&erge Ju&ntar - + &Format &Formatar - + &Header &Cabeçalho - + &Level 1 (setext) &Nível 1 (setext) - + Ctrl+Alt+1 Ctrl+Alt+1 - + Level &2 Nível &2 - + Ctrl+Alt+2 Ctrl+Alt+2 - + Level &1 (atx) Nível &1 (atx) - + Ctrl+1 Ctrl+1 - + L&evel 2 N&ível 2 - + Ctrl+2 Ctrl+2 - + Level &3 Nível &3 - + Ctrl+3 Ctrl+3 - + Level &4 Nível &4 - + Ctrl+4 Ctrl+4 - + Level &5 Nível &5 - + Ctrl+5 Ctrl+5 - + Level &6 Nível &6 - + Ctrl+6 Ctrl+6 - + &Bold &Negrito - + Ctrl+B Ctrl+B - + &Italic &Italico - + Ctrl+I Ctrl+I - + &Strike &Sucesso - + &Verbatim &Textual - + Su&perscript So&brescrito - + Ctrl++ Ctrl++ - + Subsc&ript Subsc&rito - + Ctrl+- Ctrl+- - + Co&mment block Bloco de Co&mentário - + Ctrl+Shift+C Ctrl+Shift+C - + Clear &formats Limpar &formatação - + Ctrl+0 Ctrl+0 - + &Comment line(s) &Comentar linha(s) - + &Ordered list Lista &Ordenada - + &Unordered list Lista não o&rdenada - + B&lockquote B&loco de citação - + Remove selected plot step(s) Remover etapas de plotagem selecionada(s) - + The file {} does not exist. Has it been moved or deleted? O arquivo {} não existe. Ele foi movido ou deletado? - + Install {}{} to use spellcheck Instale {}{} para usar a verificação ortográfica - + {} has no installed dictionaries {} não possui dicionários instalados - + {}{} is not installed {}{} não está instalado - + Save project? Salvar o projeto? - + Save changes to project "{}" before closing? Salvar mudanças no projeto "{}" antes de fechar? - + Your changes will be lost if you don't save them. Suas mudanças vão perder se você não salvá-las. - + PyQt / Qt versions 5.11 and 5.12 are known to cause a crash which might result in a loss of data. PyQt / Qt versão 5.11 e 5.12 são conhecidas para causar travamentos e podem resultar em perda de dados. - + PyQt {} and Qt {} are in use. PyQt {} e Qt {} estão em uso. - + Proceed with import at your own risk Continuando pode travar e perder dados + + + Allow POV + + + + + Search + + + + + Ctrl+F + + + + + F3 + + + + + Shift+F3 + + + + + Situation + + + + + Status + + + + + Search + + + No results found + + Settings @@ -1499,7 +1542,7 @@ Então expanda isso para um parágrafo, depois para uma página e, em seguida, p Geral - + Revisions Revisões @@ -1509,17 +1552,17 @@ Então expanda isso para um parágrafo, depois para uma página e, em seguida, p Pontos de Vistas - + Labels Rótulos - + Status - + Fullscreen Tela cheia @@ -1534,658 +1577,709 @@ Então expanda isso para um parágrafo, depois para uma página e, em seguida, p Configurações do aplicativo - + Loading Carregando - + Automatically load last project on startup Carregar automaticamente o último projeto na inicialização - + Saving Salvando - + Automatically save every Salvar automaticamente todos - + minutes. minutos. - + If no changes during Se não houver alterações durante - + seconds. segundos. - + Save on project close Salvar ao sair - + <html><head/><body><p>If you check this option, your project will be saved as one single file. Easier to copy or backup, but does not allow collaborative editing, or versioning.<br/>If this is unchecked, your project will be saved as a folder containing many small files.</p></body></html> <html><head/><body><p>Se você marcar essa opção, seu projeto será salvo como um único arquivo. Mais fácil de copiar ou fazer backup, mas não permite edição colaborativa ou controle de versão.<br/>Se não for marcado aqui, o seu projeto será salvo como uma pasta contendo muitos arquivos pequenos.</p></body></html> - + Save to one single file Salvar em um único arquivo - + Revisions are a way to keep track of modifications. For each text item, it stores any changes you make to the main text, allowing you to see and restoring previous versions. As revisões são uma maneira de acompanhar as modificações. Para cada item de texto, ele armazena todas as alterações feitas no texto principal, permitindo que você veja e restaure versões anteriores. - + Keep revisions Mantenha as revisões - + S&mart remove &Remoção inteligente - + Keep: Manter: - + Smart remove allows you to keep only a certain number of revisions. It is strongly recommended to use it, lest you file will becomes full of thousands of insignificant changes. Remoção inteligente permite que você mantenha apenas um certo número de revisões. Recomenda-se expressamente usá-lo, para que o seu arquivo não fique cheio de milhares de alterações insignificantes. - + revisions per day for the last month revisões por dia durante o último mês - + revisions per minute for the last 10 minutes revisões por minuto nos últimos 10 minutos - + revisions per hour for the last day revisões por hora para o último dia - + revisions per 10 minutes for the last hour revisões por 10 minutos para a última hora - + revisions per week till the end of time revisões por semana até o final do tempo - + Views settings Configurações de visual - + Tree Árvore - + Colors Cores - + Icon color: Cor do ícone: - + Nothing Nada - + POV Ponto de Vista - + Label Rótulo - + Progress Progresso - + Compile Compilar - + Text color: Cor do Texto: - + Background color: Cor de fundo: - + Folders Pastas - + Show ite&m count &Mostra contagem de itens - + Show summary Mostrar sumário - + &Nothing &Nada - + Text Texto - + Outline Esboço - + Visible columns Colunas visíveis - + Goal Objetivo - + Word count Contagem de palavras - + Percentage Porcentagem - + Title Título - + Index cards Índice dos cartões - + Item colors Cores dos Itens - + Border color: Cor da borda: - + Corner color: Cor do canto: - + Background Fundo - + Color: Cor: - + Ctrl+S - + Image: Imagem: - + Text editor Editor de texto - + Font Fonte - + Family: Familia: - + Size: Tamanho: - + Misspelled: Com erros ortográficos: - + Background: Fundo: - + Paragraphs Parágrafos - + Line spacing: Espaçamento entre linhas: - + Single Simples - + 1.5 lines 1.5 entre linhas - + Double Duplo - + Proportional Proporcional - + % - + Tab width: Largura da guia: - + px - + Indent 1st line Recuo da primeira linha - + Spacing: Espaçamento: - + New Novo - + Edit Editar - + Delete Deletar - + Theme name: Nome do tema: - + Apply Aplicar - + Cancel Cancelar - + Window Background Fundo da janela - + Text Background Fundo do texto - + Text Options Opções do texto - + Paragraph Options Opções do parágrafo - + Type: Tipo: - + No Image Sem imagem - + Tiled Lado a lado - + Centered Centralizado - + Stretched Esticado - + Scaled Dividido - + Zoomed Com zoom - + Opacity: Opacidade: - + Position: Posição: - + Left Esquerda - + Center Centro - + Right Direita - + Width: Largura: - + Corner radius: Raio do canto: - + Margins: Margem: - + Padding: Preenchimento: - + Font: Fonte: - + Style Estilo - + Cursor - + Use block insertion of Use a inserção de blocos de - + Alignment: Alinhamento: - + Justify Justificado - + Alignment Alinhamento - + Icon Size Tamanho do Ícone - + TextLabel Rótulo do Texto - + Disable blinking Parar de piscar - + Text area Área de texto - + Max width Largura máxima - + Left/Right margins: Margens Esquerda/Direita: - + Top/Bottom margins: Margens Cima/Baixo: - + S&how progress Mostrar o pr&ogresso - + Show summar&y Mostrar o sumár&io - + Show p&rogress Mostrar o p&rogresso - + Old st&yle Es&tilo antigo - + Transparent Transparente - + Restore defaults Restaurar o padrão - + Style: Estilo: - + Language: Idioma: - + Font size: Tamanho da fonte: - + Restarting Manuskript ensures all settings take effect. Reiniciar o Manuskript para garantir que as configurações façam efeitos. - + Show &word count Mostrar a contagem de &palavras - + &Show word count &Mostrar a contagem de palavras - + &New style &Novo estilo - + Typewriter mode Modo máquina de escrever - + Focus mode Modo de foco - + None Nenhum - + Sentence Sentença - + Line Linha - + Paragraph Parágrafo - + <p><b>The Revisions feature has been at the source of many reported issues. In this version of Manuskript it has been turned off by default for new projects in order to provide the best experience.</b></p><p>Why aren't these issues fixed already? <a href="https://www.theologeek.ch/manuskript/contribute/">We need your help to make Manuskript better!</a></p> <p><b>As ferramentas de revisões são fontes de muitos problemas reportadas. Nesta versão do Manuskript, ele foi desativado por padrão para novos projetos, a fim de fornecer a melhor experiência.</b></p><p>Por que esses problemas já não foram corrigidos? <a href="https://www.theologeek.ch/manuskript/contribute/">Nós precisamos de sua ajuda para fazer o Manuskript melhor!</a></p> + + + Show progress in chars next + to words + + + + + Char/Word Counter + + + + + Count spaces as chars + + + + + Show char c&ount + + + + + Sho&w char count + + SpellAction - + Spelling Suggestions Sugestões de correção ortográfica - + &Add to dictionary &Adicionar ao dicionário - + &Remove from custom dictionary &Remover do dicionário customizado + + + &New Character + + + + + &New Plot Item + + + + + &New World Item + + + + + &Correction Suggestions + + + + + &Correction Suggestion + + about @@ -2287,17 +2381,12 @@ Então expanda isso para um parágrafo, depois para uma página e, em seguida, p characterModel - - New character - Novo personagem - - - + Name - + Value Valor @@ -2305,17 +2394,17 @@ Então expanda isso para um parágrafo, depois para uma página e, em seguida, p characterTreeView - + Main Principal - + Secondary Secundário - + Minor @@ -2431,12 +2520,12 @@ Então expanda isso para um parágrafo, depois para uma página e, em seguida, p corkDelegate - + One line summary Sumário de uma linha - + Full summary Sumário completo @@ -3018,15 +3107,30 @@ Então expanda isso para um parágrafo, depois para uma página e, em seguida, p - - {} words / {} - {} palavras / {} - - - + {} words {} palavras + + + ({} chars) {} words / {} + + + + + {} words / {} + + + + + {} chars + + + + + {} chars + + markdownSettings @@ -3231,12 +3335,12 @@ Então expanda isso para um parágrafo, depois para uma página e, em seguida, p outlineItem - + {} words / {} ({}) {} palavras / {} ({}) - + {} words {} palavras @@ -3458,37 +3562,32 @@ Então expanda isso para um parágrafo, depois para uma página e, em seguida, p plotModel - - New plot - Novo enredo - - - + Name - + Meta - + New step Novo passo - + Main Principal - + Secondary Secundário - + Minor @@ -3835,111 +3934,56 @@ Então expanda isso para um parágrafo, depois para uma página e, em seguida, p Search for... Procurar por... - - - Search in: - Procurar em: - - - - All - Tudo - - - - Title - Título - - - - Text - - - - - Summary - Sumário - - - - Notes - - - - - POV - Ponto de vista - - - - Status - - - - - Label - - - - - Options: - - - - - Case sensitive - Diferencia maiúsculas e minúsculas - settingsWindow - + New status - + New label - + newtheme novo tema - + New theme - + (read-only) (ler somente) - + Open Image Abrir Imagem - + Image files (*.jpg; *.jpeg; *.png) Arquivos de imagem (*.jpg; *.jpeg; *.png) - + Error Erro - + Unable to load selected file Incapaz de carregar o arquivo selecionado - + Unable to add selected image: {} Incapaz de adicionar a imagem selecionada: @@ -4063,7 +4107,7 @@ Então expanda isso para um parágrafo, depois para uma página e, em seguida, p textEditView - + Various Vários @@ -4365,212 +4409,212 @@ Então expanda isso para um parágrafo, depois para uma página e, em seguida, p worldModel - + New item - + Fantasy world building Construção do mundo de fantasia - + Physical Físico - + Climate Clima - + Topography Topografia - + Astronomy Astronomia - + Wild life Vida selvagem - + Flora - + History História - + Races Corridas - + Diseases Doenças - + Cultural - + Customs Costumes - + Food Comida - + Languages Idiomas - + Education Educação - + Dresses Vestidos - + Science Ciência - + Calendar Calendário - + Bodily language Linguagem corporal - + Ethics Ética - + Religion Religião - + Government Governo - + Politics Política - + Gender roles Papéis de gênero - + Music and arts Música e artes - + Architecture Arquitetura - + Military Militares - + Technology - + Courtship Namoro - + Demography Demografia - + Transportation Transporte - + Medicine Medicina - + Magic system Sistema mágico - + Rules Regras - + Organization Organização - + Magical objects Objetos mágicos - + Magical places Lugares mágicos - + Magical races Corridas Mágicas - + Important places Lugares importantes - + Important objects Objetos importantes - + Natural resources Recursos naturais diff --git a/i18n/manuskript_pt_PT.ts b/i18n/manuskript_pt_PT.ts index bcbd14a..e734ad1 100644 --- a/i18n/manuskript_pt_PT.ts +++ b/i18n/manuskript_pt_PT.ts @@ -484,7 +484,7 @@ Use se receber um erro YAML. MainWindow - + General Geral @@ -529,7 +529,7 @@ Use se receber um erro YAML. Autor - + Name Nome @@ -539,7 +539,7 @@ Use se receber um erro YAML. Email - + Summary Sinopse @@ -549,7 +549,7 @@ Use se receber um erro YAML. Situação: - + Summary: Sinopse: @@ -559,17 +559,17 @@ Use se receber um erro YAML. Uma frase - + One paragraph Um parágrafo - + One page Uma página - + Full Completa @@ -599,7 +599,7 @@ Use se receber um erro YAML. Sinopse completa - + Next Seguinte @@ -619,874 +619,917 @@ Use se receber um erro YAML. Nomes - + Filter Filtro - + Basic info Informação básica - + Motivation Motivação - + Goal Objectivo - + Conflict Conflito - + Epiphany Epifania - + <html><head/><body><p align="right">One sentence<br/>summary</p></body></html> <html><head/><body><p align="left">Sinopse<br/>numa frase</p></body></html> - + <html><head/><body><p align="right">One paragraph<br/>summary</p></body></html> <html><head/><body><p align="left">Sinopse<br/>num parágrafo</p></body></html> - + Importance Importância - + Notes Notas - + Detailed info Informação detalhada - + Plots Enredos - + Plot Enredo - + Character(s) Personagens - + Description Descrição - + Result Resultado - + Resolution steps Passos da resolução - + Add plot step Adicionar passo do enredo - + Remove selected plot step(s) Remover passos do enredo seleccionados - + World Mundo - + Populates with empty data Povoa com categorias vazias - + More Mais - + Source of passion Fonte da paixão - + Source of conflict Fonte do conflito - + Outline Esquema - + Editor Editor - + Debug Depuração - + FlatData Dados simples - + Persos Personagens - + Labels Etiquetas - + &File &Ficheiro - + &Recent &Recentes - + &Help A&juda - + &Tools Ferramen&tas - + &Edit &Editar - + &Format &Formatar - + &Header Cabeçal&ho - + &View &Ver - + &Mode &Modo - + Organi&ze Organi&zar - + &Cheat sheet &Cábula - + Sea&rch P&rocurar - + &Navigation &Navegação - + &Open A&brir - + Ctrl+O Ctrl+B - + &Save &Gravar - + Ctrl+S Ctrl+G - + Sa&ve as... Gra&var como... - + Ctrl+Shift+S Ctrl+Shift+V - + &Quit &Sair - + Ctrl+Q Ctrl+S - + &Show help texts &Mostrar textos de ajuda - + Ctrl+Shift+B Ctrl+Shift+M - + &Spellcheck &Ortografia - + F9 F9 - + &Labels... Eti&quetas... - + &Status... E&stado... - + Tree Árvore - + &Simple &Simples - + &Fiction &Ficção - + Index cards Fichas indexadas - + S&ettings &Definições - + F8 F8 - + &Close project Fe&char projecto - + Co&mpile Co&mpilar - + F6 F6 - + &Frequency Analyzer Analisador de &frequência - + &About &Acerca de - + About Manuskript Acerca do Manuskript - + &Import… &Importar… - + F7 F7 - + &Copy &Copiar - + Ctrl+C Ctrl+C - + C&ut Cor&tar - + Ctrl+X Ctrl+X - + &Paste Co&lar - + Ctrl+V Ctrl+V - + &Split… Di&vidir… - + Ctrl+Shift+K Ctrl+Shift+V - + Sp&lit at cursor D&ividir no cursor - + Ctrl+K Ctrl+I - + M&erge &Unir - + Ctrl+M Ctrl+U - + Dupl&icate Dupl&icar - + &Delete &Eliminar - + Del Del - + &Move Up &Mover acima - + Ctrl+Shift+Up Ctrl+Shift+↑ - + M&ove Down M&over abaixo - + Ctrl+Shift+Down Ctrl+Shift+↓ - + &Rename &Renomear - + F2 F2 - + &Level 1 (setext) Níve&l 1 (defext) - + Ctrl+Alt+1 Ctrl+Alt+1 - + Level &2 Nível &2 - + Ctrl+Alt+2 Ctrl+Alt+2 - + Level &1 (atx) Nível &1 (atx) - + Ctrl+1 Ctrl+1 - + L&evel 2 Nív&el 2 - + Ctrl+2 Ctrl+2 - + Level &3 Nível &3 - + Ctrl+3 Ctrl+3 - + Level &4 Nível &4 - + Ctrl+4 Ctrl+4 - + Level &5 Nível &5 - + Ctrl+5 Ctrl+5 - + Level &6 Nível &6 - + Ctrl+6 Ctrl+6 - + &Bold &Negrito - + Ctrl+B Ctrl+N - + &Italic &Itálico - + Ctrl+I Ctrl+I - + &Strike Ra&surado - + &Verbatim &Verbatim - + Su&perscript Ex&poente - + Ctrl++ Ctrl++ - + Subsc&ript Subsc&rito - + Ctrl+- Ctrl+- - + Co&mment block Bloco de co&mentário - + Ctrl+Shift+C Ctrl+Shift+M - + Clear &formats Limpar &formatos - + Ctrl+0 Ctrl+F - + &Comment line(s) Lin&has de comentário - + Ctrl+D Ctrl+H - + &Ordered list Lista &ordenada - + &Unordered list Lista &desordenada - + B&lockquote Citação em b&loco - + The file {} does not exist. Has it been moved or deleted? O ficheiro {} não existe. Terá sido movido ou eliminado? - + Manuskript Manuskript - + Project {} saved. Projecto {} gravado. - + WARNING: Project {} not saved. AVISO: projecto {} não gravado. - + Project {} loaded. Projecto {} carregado. - + Project {} loaded with some errors: Projecto {} carregado com alguns erros: - + * {} wasn't found in project file. * {} não encontrado no ficheiro do projecto. - + Project {} loaded with some errors. Projecto {} carregado com alguns erros. - + (~{} pages) (~{} páginas) - + Words: {}{} Palavras: {}{} - + Book summary Sinopse do livro - + Project tree Árvore do projecto - + Metadata Meta-dados - + Story line Fio da história - + Enter information about your book, and yourself. Insira informação sobre o livro e sobre si. - + The basic situation, in the form of a 'What if...?' question. Ex: 'What if the most dangerous evil wizard wasn't able to kill a baby?' (Harry Potter) A situação básica, na forma de pergunta "E se...?". E.g.: "E se o mais maligno e perigoso feiticeiro não fosse capaz de matar um bebé?" (Harry Potter) - + Take time to think about a one sentence (~50 words) summary of your book. Then expand it to a paragraph, then to a page, then to a full summary. Leve o seu tempo a pensar numa frase (±50 palavras) que resuma o seu livro. Depois expanda-a para um parágrafo, em seguida para uma página e finalmente uma sinopse completa. - + Create your characters. Crie os seus personagens. - + Develop plots. Desenvolva enredos. - + Build worlds. Create hierarchy of broad categories down to specific details. Construa mundos. Crie uma hierarquia desde categorias vastas até detalhes específicos. - + Create the outline of your masterpiece. Crie o fio da meada para a sua obra. - + Write. Escreva. - + Debug info. Sometimes useful. Informação de depuração. Por vezes é útil. - + Dictionary Dicionário - + Nothing Nada - + POV PDV - + Label Etiqueta - + Progress Progresso - + Compile Compilar - + Icon color Cor do ícone - + Text color Cor do texto - + Background color Cor do fundo - + Icon Ícone - + Text Texto - + Background Fundo - + Border Contorno - + Corner Canto - + Install {}{} to use spellcheck Instalar {}{} para verificar a ortografia - + {} has no installed dictionaries {} não tem dicionários instalados - + {}{} is not installed {}{} não está instalado - + Save project? Gravar o projecto? - + Save changes to project "{}" before closing? Gravar alterações ao projecto "{}" antes de fechar? - + Your changes will be lost if you don't save them. Perderá as alterações se não as gravar. - + PyQt / Qt versions 5.11 and 5.12 are known to cause a crash which might result in a loss of data. As versões PyQt / Qt 5.11 e 5.12 são conhecidas por causar problemas que resultam numa perda de dados. - + PyQt {} and Qt {} are in use. PyQt {} e Qt {} estão em uso. - + Proceed with import at your own risk Continuar pode dar problemas e eliminar dados + + + Allow POV + + + + + Search + + + + + Ctrl+F + + + + + F3 + F3 + + + + Shift+F3 + + + + + Situation + + + + + Status + Estado + + + + Search + + + No results found + + Settings @@ -1501,7 +1544,7 @@ Use se receber um erro YAML. Geral - + Revisions Revisões @@ -1511,17 +1554,17 @@ Use se receber um erro YAML. Vistas - + Labels Etiquetas - + Status Estado - + Fullscreen Ecrã completo @@ -1536,658 +1579,709 @@ Use se receber um erro YAML. Definições da aplicação - + Style: Estilo: - + Language: Idioma: - + Font size: Tamanho da letra: - + Restarting Manuskript ensures all settings take effect. Reiniciar o Manuskript garante que as definições tenham efeito. - + Loading Carregamento - + Automatically load last project on startup Carregar automaticamente o último projecto ao iniciar - + Saving Gravação - + Automatically save every Gravar automaticamente a cada - + minutes. minutos. - + If no changes during Se não houver alterações durante - + seconds. segundos. - + Save on project close Gravar ao fechar o projecto - + <html><head/><body><p>If you check this option, your project will be saved as one single file. Easier to copy or backup, but does not allow collaborative editing, or versioning.<br/>If this is unchecked, your project will be saved as a folder containing many small files.</p></body></html> <html><head/><body><p>Se marcar esta opção, o seu projecto será gravado como um único ficheiro. É mais fácil de copiar, mas não permite edição colaborativa ou controlo de versões.<br/>Se desmarcada, o projecto será gravado como uma pasta com muitos ficheiros pequenos.</p></body></html> - + Save to one single file Gravar num único ficheiro - + Revisions are a way to keep track of modifications. For each text item, it stores any changes you make to the main text, allowing you to see and restoring previous versions. As revisões são uma forma de manter um registo das modificações. Para cada item de texto, armazena as alterações ao texto principal, permitindo ver e restaurar versões anteriores. - + Keep revisions Manter revisões - + S&mart remove Re&moção inteligente - + Keep: Manter: - + Smart remove allows you to keep only a certain number of revisions. It is strongly recommended to use it, lest you file will becomes full of thousands of insignificant changes. A remoção inteligente mantém só um certo número de revisões. Recomenda-se vivamente que a use, para que o seu ficheiro não fique repleto de alterações insignificantes. - + revisions per day for the last month revisões por dia para o último mês - + revisions per minute for the last 10 minutes revisões por minuto para os últimos 10 minutos - + revisions per hour for the last day revisões por hora para o último dia - + revisions per 10 minutes for the last hour revisões por 10 minutos para a última hora - + revisions per week till the end of time revisões por semana até ao fim dos tempos - + Views settings Aparência - + Tree Árvore - + Colors Cores - + Icon color: Cor do ícone: - + Nothing Nada - + POV PDV - + Label Etiqueta - + Progress Progresso - + Compile Compilar - + Text color: Cor do texto: - + Background color: Cor do fundo: - + Icon Size Tamanho do ícone - + TextLabel Rótulo - + Folders Pastas - + Show ite&m count &Mostrar total de itens - + Show &word count Mostrar total de pala&vras - + S&how progress Mostrar &progresso - + Show summar&y Mostrar s&inopse - + &Nothing &Nada - + Text Texto - + &Show word count Mo&strar total de palavras - + Show p&rogress Mostrar p&rogresso - + Show summary Mostrar sinopse - + Outline Esquema - + Visible columns Colunas visíveis - + Goal Objectivo - + Word count Total de palavras - + Percentage Percentagem - + Title Título - + Index cards Fichas indexadas - + Background Fundo - + Color: Cor: - + Ctrl+S Ctrl+S - + Image: Imagem: - + Style Estilo - + Old st&yle Est&ilo antigo - + &New style &Novo estilo - + Item colors Cor dos itens - + Border color: Cor do contorno: - + Corner color: Cor do canto: - + Text editor Editor de texto - + Background: Fundo: - + Transparent Transparente - + Restore defaults Repor predefinições - + Font Letra - + Family: Família: - + Size: Tamanho: - + Misspelled: Erros: - + Text area Área de texto - + Max width Largura máxima - + px px - + Left/Right margins: Margens esquerda/direita: - + Top/Bottom margins: Margens superior/inferior: - + Paragraphs Parágrafos - + Alignment: Alinhamento: - + Left Esquerda - + Center Centro - + Right Direita - + Justify Justificado - + Line spacing: Espaçamento de linhas: - + Single Simples - + 1.5 lines 1,5 linhas - + Double Duplo - + Proportional Proporcional - + % % - + Tab width: Largura da tabulação: - + Indent 1st line Indentar 1ª linha - + Spacing: Espaçamento: - + Cursor Cursor - + Use block insertion of Usar inserção de bloco de - + Disable blinking Desactivar piscar - + Typewriter mode Modo Dactilografia - + Focus mode Modo Foco - + None Nenhum - + Sentence Frase - + Line Linha - + Paragraph Parágrafo - + New Novo - + Edit Editar - + Delete Eliminar - + Theme name: Nome do tema: - + Apply Aplicar - + Cancel Cancelar - + Window Background Fundo da janela - + Text Background Fundo do texto - + Text Options Opções do texto - + Paragraph Options Opções do parágrafo - + Type: Tipo: - + No Image Sem imagem - + Tiled Mosaico - + Centered Centrada - + Stretched Esticada - + Scaled Escalada - + Zoomed Ampliada - + Opacity: Opacidade: - + Position: Posição: - + Width: Largura: - + Corner radius: Raio do canto: - + Margins: Margens: - + Padding: Espaço: - + Font: Letra: - + Alignment Alinhamento - + <p><b>The Revisions feature has been at the source of many reported issues. In this version of Manuskript it has been turned off by default for new projects in order to provide the best experience.</b></p><p>Why aren't these issues fixed already? <a href="https://www.theologeek.ch/manuskript/contribute/">We need your help to make Manuskript better!</a></p> <p><b>A funcionalidade Revisões tem sido fonte de muitos erros reportados. Nesta versão do Manuskript, foi desligada por predefinição para novos projectos, de forma a proporcionar amelhor experiência.</b></p><p>Porque é que estes erros ainda não foram reparados? <a href="https://www.theologeek.ch/manuskript/contribute/">Precisamos da sua ajuda para tornar o Manuskript melhor!</a></p> + + + Show progress in chars next + to words + + + + + Char/Word Counter + + + + + Count spaces as chars + + + + + Show char c&ount + + + + + Sho&w char count + + SpellAction - + Spelling Suggestions Sugestões ortográficas - + &Add to dictionary &Adicionar ao dicionário - + &Remove from custom dictionary &Remover do dicionário pessoal + + + &New Character + + + + + &New Plot Item + + + + + &New World Item + + + + + &Correction Suggestions + + + + + &Correction Suggestion + + about @@ -2289,17 +2383,12 @@ Use se receber um erro YAML. characterModel - - New character - Novo personagem - - - + Name Nome - + Value Valor @@ -2307,17 +2396,17 @@ Use se receber um erro YAML. characterTreeView - + Main Principal - + Secondary Secundário - + Minor Menor @@ -2433,12 +2522,12 @@ Use se receber um erro YAML. corkDelegate - + One line summary Sinopse numa linha - + Full summary Sinopse completa @@ -3020,15 +3109,30 @@ Use se receber um erro YAML. Raiz - - {} words / {} - {} palavras/{} - - - + {} words {} palavras + + + ({} chars) {} words / {} + + + + + {} words / {} + + + + + {} chars + + + + + {} chars + + markdownSettings @@ -3233,12 +3337,12 @@ Use se receber um erro YAML. outlineItem - + {} words / {} ({}) {} palavras/{} ({}) - + {} words {} palavras @@ -3465,37 +3569,32 @@ Use se receber um erro YAML. plotModel - - New plot - Novo enredo - - - + Name Nome - + Meta Meta - + New step Novo passo - + Main Principal - + Secondary Secundário - + Minor Menor @@ -3842,111 +3941,56 @@ Use se receber um erro YAML. Search for... Procurar por... - - - Search in: - Procurar em: - - - - All - Tudo - - - - Title - Título - - - - Text - Texto - - - - Summary - Sinopse - - - - Notes - Notas - - - - POV - PDV - - - - Status - Estado - - - - Label - Etiqueta - - - - Options: - Opções: - - - - Case sensitive - Sensível a maiúsculas - settingsWindow - + New status Novo estado - + New label Nova etiqueta - + newtheme novotema - + New theme Novo tema - + (read-only) (só de leitura) - + Open Image Abrir imagem - + Image files (*.jpg; *.jpeg; *.png) Ficheiros de imagem (*.jpg; *.jpeg; *.png) - + Error Erro - + Unable to load selected file Impossível carregar o ficheiro seleccionado - + Unable to add selected image: {} Impossível adicionar a imagem seleccionada: @@ -4071,7 +4115,7 @@ Use se receber um erro YAML. textEditView - + Various Vários @@ -4373,212 +4417,212 @@ Use se receber um erro YAML. worldModel - + New item Novo item - + Fantasy world building Construção de um mundo de fantasia - + Physical Físico - + Climate Clima - + Topography Topografia - + Astronomy Astronomia - + Natural resources Recursos naturais - + Wild life Fauna - + Flora Flora - + History História - + Races Raças - + Diseases Doenças - + Cultural Cultura - + Customs Tradições - + Food Comida - + Languages Idiomas - + Education Educação - + Dresses Roupas - + Science Ciência - + Calendar Calendário - + Bodily language Expressão corporal - + Ethics Ética - + Religion Religião - + Government Governo - + Politics Política - + Gender roles Papéis dos sexos - + Music and arts Música e artes - + Architecture Arquitectura - + Military Forças armadas - + Technology Tecnologia - + Courtship Namoro - + Demography Demografia - + Transportation Transportes - + Medicine Medicina - + Magic system Sistema mágico - + Rules Regras - + Organization Organização - + Magical objects Objectos mágicos - + Magical places Locais mágicos - + Magical races Raças mágicas - + Important places Locais importantes - + Important objects Objectos importantes diff --git a/i18n/manuskript_ro.ts b/i18n/manuskript_ro.ts index 1d0662c..be2949c 100644 --- a/i18n/manuskript_ro.ts +++ b/i18n/manuskript_ro.ts @@ -456,7 +456,7 @@ Use that if you get YAML related error. MainWindow - + General @@ -496,7 +496,7 @@ Use that if you get YAML related error. - + Name @@ -506,7 +506,7 @@ Use that if you get YAML related error. - + Summary @@ -516,7 +516,7 @@ Use that if you get YAML related error. - + Summary: @@ -526,17 +526,17 @@ Use that if you get YAML related error. - + One paragraph - + One page - + Full @@ -566,7 +566,7 @@ Use that if you get YAML related error. - + Next @@ -586,312 +586,312 @@ Use that if you get YAML related error. - + Filter - + Basic info - + Importance - + Motivation - + Goal - + Conflict - + Epiphany - + <html><head/><body><p align="right">One sentence<br/>summary</p></body></html> - + <html><head/><body><p align="right">One paragraph<br/>summary</p></body></html> - + Notes - + Detailed info - + Plots - + Plot - + Character(s) - + Description - + Result - + Resolution steps - + World - + Populates with empty data - + More - + Source of passion - + Source of conflict - + Outline - + Editor - + Debug - + FlatData - + Persos - + Labels - + &File - + &Recent - + &Help - + &Tools - + &Edit - + &View - + &Mode - + &Cheat sheet - + Sea&rch - + &Navigation - + &Open - + Ctrl+O - + &Save - + Ctrl+S - + Sa&ve as... - + Ctrl+Shift+S - + &Quit - + Ctrl+Q - + &Show help texts - + Ctrl+Shift+B - + &Spellcheck - + F9 - + &Labels... - + &Status... - + Tree - + &Simple - + &Fiction - + Index cards - + S&ettings - + F8 - + &Close project - + Co&mpile - + F6 - + &Frequency Analyzer @@ -901,562 +901,605 @@ Use that if you get YAML related error. - + &About - + About Manuskript - + Manuskript - + Project {} saved. - + WARNING: Project {} not saved. - + Project {} loaded. - + Project {} loaded with some errors: - + * {} wasn't found in project file. - + Project {} loaded with some errors. - + (~{} pages) - + Words: {}{} - + Book summary - + Project tree - + Metadata - + Story line - + Enter information about your book, and yourself. - + The basic situation, in the form of a 'What if...?' question. Ex: 'What if the most dangerous evil wizard wasn't able to kill a baby?' (Harry Potter) - + Take time to think about a one sentence (~50 words) summary of your book. Then expand it to a paragraph, then to a page, then to a full summary. - + Create your characters. - + Develop plots. - + Build worlds. Create hierarchy of broad categories down to specific details. - + Create the outline of your masterpiece. - + Write. - + Debug info. Sometimes useful. - + Dictionary - + Nothing - + POV - + Label - + Progress - + Compile - + Icon color - + Text color - + Background color - + Icon - + Text - + Background - + Border - + Corner - + Add plot step - + &Import… - + F7 - + &Copy - + Ctrl+C - + C&ut - + Ctrl+X - + &Paste - + Ctrl+V - + &Split… - + Ctrl+Shift+K - + Sp&lit at cursor - + Ctrl+K - + Ctrl+M - + Ctrl+D - + Del - + &Move Up - + Ctrl+Shift+Up - + M&ove Down - + Ctrl+Shift+Down - + Dupl&icate - + &Delete - + &Rename - + F2 - + Organi&ze - + M&erge - + &Format - + &Header - + &Level 1 (setext) - + Ctrl+Alt+1 - + Level &2 - + Ctrl+Alt+2 - + Level &1 (atx) - + Ctrl+1 - + L&evel 2 - + Ctrl+2 - + Level &3 - + Ctrl+3 - + Level &4 - + Ctrl+4 - + Level &5 - + Ctrl+5 - + Level &6 - + Ctrl+6 - + &Bold - + Ctrl+B - + &Italic - + Ctrl+I - + &Strike - + &Verbatim - + Su&perscript - + Ctrl++ - + Subsc&ript - + Ctrl+- - + Co&mment block - + Ctrl+Shift+C - + Clear &formats - + Ctrl+0 - + &Comment line(s) - + &Ordered list - + &Unordered list - + B&lockquote - + Remove selected plot step(s) - + The file {} does not exist. Has it been moved or deleted? - + Install {}{} to use spellcheck - + {} has no installed dictionaries - + {}{} is not installed - + Save project? - + Save changes to project "{}" before closing? - + Your changes will be lost if you don't save them. - + PyQt / Qt versions 5.11 and 5.12 are known to cause a crash which might result in a loss of data. - + PyQt {} and Qt {} are in use. - + Proceed with import at your own risk + + + Allow POV + + + + + Search + + + + + Ctrl+F + + + + + F3 + + + + + Shift+F3 + + + + + Situation + + + + + Status + + + + + Search + + + No results found + + Settings @@ -1471,7 +1514,7 @@ Use that if you get YAML related error. - + Revisions @@ -1481,17 +1524,17 @@ Use that if you get YAML related error. - + Labels - + Status - + Fullscreen @@ -1506,658 +1549,709 @@ Use that if you get YAML related error. - + Loading - + Automatically load last project on startup - + Saving - + Automatically save every - + minutes. - + If no changes during - + seconds. - + Save on project close - + <html><head/><body><p>If you check this option, your project will be saved as one single file. Easier to copy or backup, but does not allow collaborative editing, or versioning.<br/>If this is unchecked, your project will be saved as a folder containing many small files.</p></body></html> - + Save to one single file - + Revisions are a way to keep track of modifications. For each text item, it stores any changes you make to the main text, allowing you to see and restoring previous versions. - + Keep revisions - + S&mart remove - + Keep: - + Smart remove allows you to keep only a certain number of revisions. It is strongly recommended to use it, lest you file will becomes full of thousands of insignificant changes. - + revisions per day for the last month - + revisions per minute for the last 10 minutes - + revisions per hour for the last day - + revisions per 10 minutes for the last hour - + revisions per week till the end of time - + Views settings - + Tree - + Colors - + Icon color: - + Nothing - + POV - + Label - + Progress - + Compile - + Text color: - + Background color: - + Folders - + Show ite&m count - + Show summary - + &Nothing - + Text - + Outline - + Visible columns - + Goal - + Word count - + Percentage - + Title - + Index cards - + Item colors - + Border color: - + Corner color: - + Background - + Color: - + Ctrl+S - + Image: - + Text editor - + Font - + Family: - + Size: - + Misspelled: - + Background: - + Paragraphs - + Line spacing: - + Single - + 1.5 lines - + Double - + Proportional - + % - + Tab width: - + px - + Indent 1st line - + Spacing: - + New - + Edit - + Delete - + Theme name: - + Apply - + Cancel - + Window Background - + Text Background - + Text Options - + Paragraph Options - + Type: - + No Image - + Tiled - + Centered - + Stretched - + Scaled - + Zoomed - + Opacity: - + Position: - + Left - + Center - + Right - + Width: - + Corner radius: - + Margins: - + Padding: - + Font: - + Style - + Cursor - + Use block insertion of - + Alignment: - + Justify - + Alignment - + Icon Size - + TextLabel - + Disable blinking - + Text area - + Max width - + Left/Right margins: - + Top/Bottom margins: - + S&how progress - + Show summar&y - + Show p&rogress - + Old st&yle - + Transparent - + Restore defaults - + Style: - + Language: - + Font size: - + Restarting Manuskript ensures all settings take effect. - + Show &word count - + &Show word count - + &New style - + Typewriter mode - + Focus mode - + None - + Sentence - + Line - + Paragraph - + <p><b>The Revisions feature has been at the source of many reported issues. In this version of Manuskript it has been turned off by default for new projects in order to provide the best experience.</b></p><p>Why aren't these issues fixed already? <a href="https://www.theologeek.ch/manuskript/contribute/">We need your help to make Manuskript better!</a></p> + + + Show progress in chars next + to words + + + + + Char/Word Counter + + + + + Count spaces as chars + + + + + Show char c&ount + + + + + Sho&w char count + + SpellAction - + Spelling Suggestions - + &Add to dictionary - + &Remove from custom dictionary + + + &New Character + + + + + &New Plot Item + + + + + &New World Item + + + + + &Correction Suggestions + + + + + &Correction Suggestion + + about @@ -2259,17 +2353,12 @@ Use that if you get YAML related error. characterModel - - New character - - - - + Name - + Value @@ -2277,17 +2366,17 @@ Use that if you get YAML related error. characterTreeView - + Main - + Secondary - + Minor @@ -2403,12 +2492,12 @@ Use that if you get YAML related error. corkDelegate - + One line summary - + Full summary @@ -2990,13 +3079,28 @@ Use that if you get YAML related error. - - {} words / {} + + {} words - - {} words + + ({} chars) {} words / {} + + + + + {} words / {} + + + + + {} chars + + + + + {} chars @@ -3203,12 +3307,12 @@ Use that if you get YAML related error. outlineItem - + {} words / {} ({}) - + {} words @@ -3430,37 +3534,32 @@ Use that if you get YAML related error. plotModel - - New plot - - - - + Name - + Meta - + New step - + Main - + Secondary - + Minor @@ -3807,111 +3906,56 @@ Use that if you get YAML related error. Search for... - - - Search in: - - - - - All - - - - - Title - - - - - Text - - - - - Summary - - - - - Notes - - - - - POV - - - - - Status - - - - - Label - - - - - Options: - - - - - Case sensitive - - settingsWindow - + New status - + New label - + newtheme - + New theme - + (read-only) - + Open Image - + Image files (*.jpg; *.jpeg; *.png) - + Error - + Unable to load selected file - + Unable to add selected image: {} @@ -4021,7 +4065,7 @@ Use that if you get YAML related error. textEditView - + Various @@ -4323,212 +4367,212 @@ Use that if you get YAML related error. worldModel - + New item - + Fantasy world building - + Physical - + Climate - + Topography - + Astronomy - + Wild life - + Flora - + History - + Races - + Diseases - + Cultural - + Customs - + Food - + Languages - + Education - + Dresses - + Science - + Calendar - + Bodily language - + Ethics - + Religion - + Government - + Politics - + Gender roles - + Music and arts - + Architecture - + Military - + Technology - + Courtship - + Demography - + Transportation - + Medicine - + Magic system - + Rules - + Organization - + Magical objects - + Magical places - + Magical races - + Important places - + Important objects - + Natural resources diff --git a/i18n/manuskript_ru.ts b/i18n/manuskript_ru.ts index 89e00fd..b002225 100644 --- a/i18n/manuskript_ru.ts +++ b/i18n/manuskript_ru.ts @@ -484,7 +484,7 @@ Use that if you get YAML related error. MainWindow - + General Основные @@ -524,7 +524,7 @@ Use that if you get YAML related error. Автор - + Name Имя @@ -534,7 +534,7 @@ Use that if you get YAML related error. адрес Email - + Summary Сводка @@ -544,7 +544,7 @@ Use that if you get YAML related error. Ситуация: - + Summary: Сводка: @@ -554,17 +554,17 @@ Use that if you get YAML related error. Одно предложение - + One paragraph Один абзац - + One page Одна страница - + Full Все @@ -594,7 +594,7 @@ Use that if you get YAML related error. Полное описание - + Next Следующий @@ -614,312 +614,312 @@ Use that if you get YAML related error. Имя - + Filter Фильтр - + Basic info Основная информация - + Importance Значение - + Motivation Мотивация - + Goal Цель - + Conflict Конфликт - + Epiphany Прозрение - + <html><head/><body><p align="right">One sentence<br/>summary</p></body></html> <html><head/><body><p align="right">Одно предложение<br/>резюме</p></body></html> - + <html><head/><body><p align="right">One paragraph<br/>summary</p></body></html> <html><head/><body><p align="right">Один параграф<br/>резюме</p></body></html> - + Notes Заметки - + Detailed info Подробная информация - + Plots Сюжеты - + Plot Сюжет - + Character(s) Персонаж - + Description Описание - + Result Результат - + Resolution steps Шаги развязки - + World Мир - + Populates with empty data Заполняет пустые данные - + More Еще - + Source of passion Источник страсти - + Source of conflict Источник конфликта - + Outline Схема - + Editor Редактор - + Debug Отладка - + FlatData Сырые Данные - + Persos Персонаж - + Labels Метки - + &File &Файл - + &Recent &Последний - + &Help &Помощь - + &Tools &Инструменты - + &Edit &Редактировать - + &View &Просмотр - + &Mode &Режим - + &Cheat sheet &Шпаргалка - + Sea&rch Пои&ск - + &Navigation &Навигация - + &Open &Открыть - + Ctrl+O - + &Save &Сохранить - + Ctrl+S - + Sa&ve as... Сохра&нить как... - + Ctrl+Shift+S - + &Quit &Выход - + Ctrl+Q - + &Show help texts &Показать текст подсказки - + Ctrl+Shift+B - + &Spellcheck &Проверка орфографии - + F9 - + &Labels... &Метки... - + &Status... &Статус... - + Tree Дерево - + &Simple &Простой - + &Fiction &Вымысел - + Index cards Индекс карты - + S&ettings Н&астройки - + F8 - + &Close project &Закрыть проект - + Co&mpile Со&брать - + F6 - + &Frequency Analyzer &Анализатор частоты повторений @@ -929,564 +929,607 @@ Use that if you get YAML related error. Информация о книге - + &About &О программе - + About Manuskript О Манускрипт - + Manuskript Манускрипт - + Project {} saved. Сохранить {} проект. - + WARNING: Project {} not saved. ВНИМАНИЕ: Проект {} не сохранён. - + Project {} loaded. Проект {} загружен. - + Project {} loaded with some errors: Проект {} загружен некоторыми ошибками: - + * {} wasn't found in project file. * {} не найден в файле проекта. - + Project {} loaded with some errors. Проект {} загружен с некоторыми ошибками. - + (~{} pages) (~{} страниц) - + Words: {}{} Слова: {}{} - + Book summary Краткое содержание книги - + Project tree Дерево проекта - + Metadata Метаданные - + Story line Сюжетная линия - + Enter information about your book, and yourself. Введите информацию о своей книге и о себе. - + The basic situation, in the form of a 'What if...?' question. Ex: 'What if the most dangerous evil wizard wasn't able to kill a baby?' (Harry Potter) Основная ситуация, в виде 'Что если ...?'. Вопрос. Пример: «Что, если самая опасная                       злой волшебник не смог бы убить ребенка? (Гарри Поттер) - + Take time to think about a one sentence (~50 words) summary of your book. Then expand it to a paragraph, then to a page, then to a full summary. Потратьте время, чтобы придумать одно предложение (~50 слов) о вашей книге. Затем дополните его до                       абзаца, затем до страницы, а затем до полного резюме. - + Create your characters. Создайте своих персонажей. - + Develop plots. Разработайте сюжет. - + Build worlds. Create hierarchy of broad categories down to specific details. Строить миры. Создайте иерархию общих категорий и до конкретных деталей. - + Create the outline of your masterpiece. Создайте план вашего шедевра. - + Write. Писать. - + Debug info. Sometimes useful. Отладочная информация. Иногда полезно. - + Dictionary Словарь - + Nothing Ничего - + POV Точка зрения - + Label Метка - + Progress Прогресс - + Compile Собрать - + Icon color Цвет иконки - + Text color Цвет текста - + Background color Цвет фона - + Icon Иконка - + Text Текст - + Background Фон - + Border Граница - + Corner Угол - + Add plot step Добавить шаги сюжета - + &Import… - + F7 - + &Copy &Копировать - + Ctrl+C - + C&ut В&ырезать - + Ctrl+X - + &Paste &Вставить - + Ctrl+V - + &Split… &Разделить… - + Ctrl+Shift+K - + Sp&lit at cursor Ра&зделить на курсор - + Ctrl+K - + Ctrl+M - + Ctrl+D - + Del Удалить - + &Move Up &Переместить вверх - + Ctrl+Shift+Up - + M&ove Down П&ереместить вниз - + Ctrl+Shift+Down - + Dupl&icate Дупли&каты - + &Delete &Удалить - + &Rename &Переименовать - + F2 - + Organi&ze Органи&зовать - + M&erge С&оединить - + &Format &Форматировать - + &Header &Заголовок - + &Level 1 (setext) &Уровень 1 (с текстом) - + Ctrl+Alt+1 Ctrl+Alt+1 - + Level &2 Уровень &2 - + Ctrl+Alt+2 Ctrl+Alt+2 - + Level &1 (atx) Уровень &1 (atx) - + Ctrl+1 Ctrl+1 - + L&evel 2 У&ровень 2 - + Ctrl+2 Ctrl+2 - + Level &3 Уровень &3 - + Ctrl+3 Ctrl+3 - + Level &4 Уровень &4 - + Ctrl+4 Ctrl+4 - + Level &5 Уровень &5 - + Ctrl+5 Ctrl+5 - + Level &6 Уровень &6 - + Ctrl+6 Ctrl+6 - + &Bold &Жирный - + Ctrl+B Ctrl+B - + &Italic &Курсив - + Ctrl+I Ctrl+I - + &Strike &Зачеркнутый - + &Verbatim &Дословный - + Su&perscript Ве&рхний индекс - + Ctrl++ Ctrl++ - + Subsc&ript Инд&екс - + Ctrl+- Ctrl+- - + Co&mment block Бл&ок комментариев - + Ctrl+Shift+C Ctrl+Shift+C - + Clear &formats Очистить &форматирование - + Ctrl+0 Ctrl+0 - + &Comment line(s) &Строка комментария - + &Ordered list &Упорядоченный список - + &Unordered list &Неупорядоченный список - + B&lockquote Бло&к цитата - + Remove selected plot step(s) Удалить выбранный шаг сюжета - + The file {} does not exist. Has it been moved or deleted? Файл {} не существует. Он был перемещен или удален? - + Install {}{} to use spellcheck Установите {}{}, чтобы использовать проверку орфографии - + {} has no installed dictionaries {} не имеет установленных словарей - + {}{} is not installed {}{} не установлен - + Save project? - + Save changes to project "{}" before closing? - + Your changes will be lost if you don't save them. - + PyQt / Qt versions 5.11 and 5.12 are known to cause a crash which might result in a loss of data. - + PyQt {} and Qt {} are in use. - + Proceed with import at your own risk + + + Allow POV + + + + + Search + + + + + Ctrl+F + + + + + F3 + + + + + Shift+F3 + + + + + Situation + + + + + Status + Статус + + + + Search + + + No results found + + Settings @@ -1501,7 +1544,7 @@ Use that if you get YAML related error. Основные - + Revisions Вариант @@ -1511,17 +1554,17 @@ Use that if you get YAML related error. Просмотры - + Labels Меток - + Status Статус - + Fullscreen Полный экран @@ -1536,658 +1579,709 @@ Use that if you get YAML related error. Настройки приложения - + Loading Загрузка - + Automatically load last project on startup Автоматическая загрузка последнего проекта при старте - + Saving Сохранение - + Automatically save every Автоматически всё сохраняет - + minutes. минуты. - + If no changes during Если никаких изменений в течении - + seconds. секунды. - + Save on project close Записать и выйти - + <html><head/><body><p>If you check this option, your project will be saved as one single file. Easier to copy or backup, but does not allow collaborative editing, or versioning.<br/>If this is unchecked, your project will be saved as a folder containing many small files.</p></body></html> <html><head/><body><p>Если вы включите эту опцию, ваш проект будет сохранён в один единый файл. Проще для копирования или резервного сохранения, но не допускает совместного редактирования или управления версиями.<br/>если эта опция отключена, ваш проект будет сохранён как папка, содержащая несколько файлов.</p></body></html> - + Save to one single file Записать в один файл - + Revisions are a way to keep track of modifications. For each text item, it stores any changes you make to the main text, allowing you to see and restoring previous versions. Варианты - это способ отслеживания изменений. Для каждого текстового элемента он сохраняет все изменения, внесенные в основной текст, что позволяет просматривать и восстанавливать предыдущие версии. - + Keep revisions Сохранить Вариант - + S&mart remove У&мный стиратель - + Keep: Сохранить: - + Smart remove allows you to keep only a certain number of revisions. It is strongly recommended to use it, lest you file will becomes full of thousands of insignificant changes. Умный стиратель - позволяет сохранить только определенное количество изменений. Настоятельно рекомендуется использовать его, чтобы файл не заполнился тысячами незначительных изменений. - + revisions per day for the last month Варианты в день за последний месяц - + revisions per minute for the last 10 minutes Варианты за минуту за последние 10 минут - + revisions per hour for the last day Варианты за час за последний день - + revisions per 10 minutes for the last hour Варианты за 10 минут за последний час - + revisions per week till the end of time Варианты за неделю до окончания времени - + Views settings Настройки просмотров - + Tree Дерево - + Colors Цвета - + Icon color: Цвета иконок: - + Nothing Нечего - + POV Точка зрения - + Label Метка - + Progress Прогресс - + Compile Сборка - + Text color: Цвет текста: - + Background color: Цвет фона: - + Folders Папки - + Show ite&m count Показывать ко&личество элементов - + Show summary Показать резюме - + &Nothing &Нечего - + Text Текст - + Outline Контур - + Visible columns Видимые столбцы - + Goal Цель - + Word count Количество слов - + Percentage Процент - + Title Заглавие - + Index cards Индекс карты - + Item colors Цвета предметов - + Border color: Цвет границы: - + Corner color: Цвет угла: - + Background Фон - + Color: Цвет: - + Ctrl+S - + Image: Изображение: - + Text editor Текстовый редактор - + Font Шрифт - + Family: Семья: - + Size: Размер: - + Misspelled: Орфографическая ошибка: - + Background: Фон: - + Paragraphs Параграф - + Line spacing: Междустрочный интервал: - + Single Одиночный - + 1.5 lines 1.5 линии - + Double Двойной - + Proportional Пропорциональный - + % - + Tab width: Ширина вкладок: - + px пиксель - + Indent 1st line Отступ 1-й линии - + Spacing: Расстояние: - + New Новый - + Edit Редактировать - + Delete Удалить - + Theme name: Название темы: - + Apply Применить - + Cancel Отмена - + Window Background Фон окна - + Text Background Фон текста - + Text Options Параметры Текста - + Paragraph Options Параметры абзаца - + Type: Символ: - + No Image Нет изображения - + Tiled Замостить - + Centered По центру - + Stretched Растянуть - + Scaled Масштабировать - + Zoomed Увеличино - + Opacity: Непрозрачность: - + Position: Позиция: - + Left Слева - + Center Центр - + Right Право - + Width: Ширина: - + Corner radius: Радиус угла: - + Margins: Поля: - + Padding: Отступ: - + Font: Шрифт: - + Style Стиль - + Cursor Курсор - + Use block insertion of Используйте блок вставки - + Alignment: Выравнивание: - + Justify Выровнять - + Alignment Выравнивание - + Icon Size Размер Иконки - + TextLabel Текстовая метка - + Disable blinking Отключить мигание - + Text area Текстовая область - + Max width Максимальная ширина - + Left/Right margins: Влево/Вправо поля: - + Top/Bottom margins: Верхние/Нижние поля: - + S&how progress П&оказать успехи - + Show summar&y Показать резюм&е - + Show p&rogress Показать у&спехи - + Old st&yle Старый ст&иль - + Transparent Прозрачный - + Restore defaults Восстановить значения по умолчанию - + Style: Стиль: - + Language: Язык: - + Font size: Размер шрифта: - + Restarting Manuskript ensures all settings take effect. Перезапуск Manuskript гарантирует, что все настройки вступят в силу. - + Show &word count Показать &количество слов - + &Show word count &Показать количество слов - + &New style &Новый стиль - + Typewriter mode Режим пишущей машинки - + Focus mode Режим фокусировки - + None Пусто - + Sentence Предложение - + Line Линия - + Paragraph Параграф - + <p><b>The Revisions feature has been at the source of many reported issues. In this version of Manuskript it has been turned off by default for new projects in order to provide the best experience.</b></p><p>Why aren't these issues fixed already? <a href="https://www.theologeek.ch/manuskript/contribute/">We need your help to make Manuskript better!</a></p> + + + Show progress in chars next + to words + + + + + Char/Word Counter + + + + + Count spaces as chars + + + + + Show char c&ount + + + + + Sho&w char count + + SpellAction - + Spelling Suggestions Варианты правописания - + &Add to dictionary &Добавить в словарь - + &Remove from custom dictionary &Удалить из пользовательского словаря + + + &New Character + + + + + &New Plot Item + + + + + &New World Item + + + + + &Correction Suggestions + + + + + &Correction Suggestion + + about @@ -2289,17 +2383,12 @@ Use that if you get YAML related error. characterModel - - New character - Новый персонаж - - - + Name Имя - + Value Значение @@ -2307,17 +2396,17 @@ Use that if you get YAML related error. characterTreeView - + Main Главная - + Secondary Вторичный - + Minor Незначительный @@ -2433,12 +2522,12 @@ Use that if you get YAML related error. corkDelegate - + One line summary Описание одной строкой - + Full summary Полное резюме @@ -3020,15 +3109,30 @@ Use that if you get YAML related error. Корневой - - {} words / {} - {} слова / {} - - - + {} words {} слова + + + ({} chars) {} words / {} + + + + + {} words / {} + + + + + {} chars + + + + + {} chars + + markdownSettings @@ -3233,12 +3337,12 @@ Use that if you get YAML related error. outlineItem - + {} words / {} ({}) {} слова / {} ({}) - + {} words {} слова @@ -3460,37 +3564,32 @@ Use that if you get YAML related error. plotModel - - New plot - Новый сюжет - - - + Name Имя - + Meta - + New step Новый шаг - + Main Главная - + Secondary Вторичный - + Minor Незначительный @@ -3837,111 +3936,56 @@ Use that if you get YAML related error. Search for... Поиск по... - - - Search in: - Поиск в: - - - - All - Все - - - - Title - Заголовок - - - - Text - Текст - - - - Summary - Резюме - - - - Notes - Заметки - - - - POV - Точка зрения - - - - Status - Статус - - - - Label - Метка - - - - Options: - Параметры: - - - - Case sensitive - Учитывать регистр - settingsWindow - + New status Новый статус - + New label Новая метка - + newtheme Новая тема - + New theme Новая тема - + (read-only) (только чтение) - + Open Image Открытое изображение - + Image files (*.jpg; *.jpeg; *.png) Файлы изображений (*.jpg *.jpeg *.png) - + Error Ошибка - + Unable to load selected file Не удалось загрузить выбранный файл - + Unable to add selected image: {} Невозможно добавить выбранное изображение: @@ -4066,7 +4110,7 @@ Use that if you get YAML related error. textEditView - + Various Различные @@ -4368,212 +4412,212 @@ Use that if you get YAML related error. worldModel - + New item Новый элемент - + Fantasy world building Здание мира фэнтези - + Physical Физические - + Climate Климат - + Topography Топография - + Astronomy Астрономия - + Wild life Дикая жизнь - + Flora Флора - + History История - + Races Гонки - + Diseases Заболевания - + Cultural Культурные - + Customs Таможня - + Food Еда - + Languages Языки - + Education Образование - + Dresses Платья - + Science Наука - + Calendar Календарь - + Bodily language Язык тела - + Ethics Этика - + Religion Религия - + Government Правительство - + Politics Политика - + Gender roles Гендерные роли - + Music and arts Музыка и искусство - + Architecture Архитектура - + Military Военные - + Technology Технология - + Courtship Ухаживания - + Demography Демография - + Transportation Транспорт - + Medicine Медицина - + Magic system Магическая система - + Rules Правила - + Organization Организация - + Magical objects Магические предметы - + Magical places Волшебные места - + Magical races Магические расы - + Important places Важные места - + Important objects Важные объекты - + Natural resources Природные ресурсы diff --git a/i18n/manuskript_sv.ts b/i18n/manuskript_sv.ts index f48697d..d2d2632 100644 --- a/i18n/manuskript_sv.ts +++ b/i18n/manuskript_sv.ts @@ -482,7 +482,7 @@ Använd detta om du får ett felmeddelande angående YAML. MainWindow - + General Allmänt @@ -527,7 +527,7 @@ Använd detta om du får ett felmeddelande angående YAML. Författare - + Name Namn @@ -537,7 +537,7 @@ Använd detta om du får ett felmeddelande angående YAML. E-mail - + Summary Sammanfattning @@ -547,7 +547,7 @@ Använd detta om du får ett felmeddelande angående YAML. Situation: - + Summary: Sammanfattning: @@ -557,17 +557,17 @@ Använd detta om du får ett felmeddelande angående YAML. En mening - + One paragraph Ett stycke - + One page En sida - + Full Full @@ -597,7 +597,7 @@ Använd detta om du får ett felmeddelande angående YAML. Full sammanfattning - + Next Nästa @@ -617,874 +617,917 @@ Använd detta om du får ett felmeddelande angående YAML. Namn - + Filter Filter - + Basic info Grundläggande info - + Motivation Motivation - + Goal Mål - + Conflict Konflikt - + Epiphany Uppenbarelse - + <html><head/><body><p align="right">One sentence<br/>summary</p></body></html> <html><head/><body><p align="right">Sammanfattning i en<br/>mening</p></body></html> - + <html><head/><body><p align="right">One paragraph<br/>summary</p></body></html> <html><head/><body><p align="right">Sammanfattning i ett<br/>stycke</p></body></html> - + Importance Signifikans - + Notes Anteckningar - + Detailed info Detaljerad info - + Plots Handlingar - + Plot Handling - + Character(s) Karaktär(er) - + Description Beskrivning - + Result Resultat - + Resolution steps Lösningssteg - + World Värld - + Populates with empty data Fylls med tom data - + More Mer - + Source of passion Passionskälla - + Source of conflict Konfliktkälla - + Outline Utkast - + Editor Redigerare - + Debug Debug - + FlatData FlatData - + Persos Persos - + Labels Etiketter - + &File &Arkiv - + &Recent S&enaste - + &Help &Hjälp - + &Tools &Verktyg - + &Edit &Redigera - + &View &Visa - + &Mode &Läge - + &Cheat sheet &Fusklapp - + Sea&rch S&ök - + &Navigation &Navigation - + &Open &Öppna - + Ctrl+O Ctrl+O - + &Save &Spara - + Ctrl+S Ctrl+S - + Sa&ve as... Spara s&om... - + Ctrl+Shift+S Ctrl+Shift+S - + &Quit &Avsluta - + Ctrl+Q Ctrl+Q - + &Show help texts &Visa hjälptexter - + Ctrl+Shift+B Ctrl+Shift+B - + &Spellcheck &Stavningskontroll - + F9 F9 - + &Labels... &Etiketter... - + &Status... &Status... - + Tree Träd - + &Simple &Enkelt - + &Fiction &Skönlitteratur - + Index cards Registerkort - + S&ettings I&nställningar - + F8 F8 - + &Close project S&täng projekt - + Co&mpile Ko&mpilera - + F6 F6 - + &Frequency Analyzer &Frekvensanalys - + &About &Om - + About Manuskript Om Manuskript - + Manuskript Manuskript - + Project {} saved. Projekt {} sparades. - + WARNING: Project {} not saved. VARNING: Projekt {} sparades ej. - + Project {} loaded. Projekt {} laddades. - + Project {} loaded with some errors: Projekt {} laddades med vissa fel: - + * {} wasn't found in project file. * {} hittades inte i projektfilen. - + Project {} loaded with some errors. Projekt {} laddades med vissa fel. - + (~{} pages) (~{} sidor) - + Words: {}{} Ord: {}{} - + Book summary Sammanfattning av boken - + Project tree Projektträd - + Metadata Metadata - + Story line Handling - + Enter information about your book, and yourself. Skriv information om din bok och dig själv. - + The basic situation, in the form of a 'What if...?' question. Ex: 'What if the most dangerous evil wizard wasn't able to kill a baby?' (Harry Potter) Den grundläggande situationen i form av en "Tänk om...?"-mening. Exempel: 'Tänk om världens farligaste onda trollkarl misslyckades med att döda en baby?' (Harry Potter) - + Take time to think about a one sentence (~50 words) summary of your book. Then expand it to a paragraph, then to a page, then to a full summary. Tänk ut en kort (ca. 50 ord) mening som sammanfattar din bok. Utveckla den sedan till ett stycke, till en sida och sist till en full sammanfattning. - + Create your characters. Skapa dina karaktärer. - + Develop plots. Utveckla handlingen. - + Build worlds. Create hierarchy of broad categories down to specific details. Utforma världar. Skapa en hierarki av generella kategorier ned till minsta detalj. - + Create the outline of your masterpiece. Skapa ett utkast för ditt mästerverk. - + Write. Skriv. - + Debug info. Sometimes useful. Debug-information. Kan vara användbar. - + Dictionary Ordbok - + Nothing Ingenting - + POV Synvinkel - + Label Etikett - + Progress Framsteg - + Compile Kompilera - + Icon color Ikonfärg - + Text color Textfärg - + Background color Bakgrundsfärg - + Icon Ikon - + Text Text - + Background Bakgrund - + Border Kant - + Corner Hörn - + Add plot step Lägg till nytt steg i handlingen (CTRL+Enter) - + &Import… &Importera… - + F7 F7 - + &Copy &Kopiera - + Ctrl+C Ctrl+C - + C&ut K&lipp ut - + Ctrl+X Ctrl+X - + &Paste &Klistra in - + Ctrl+V Ctrl+V - + &Split… &Dela… - + Ctrl+Shift+K Ctrl+Shift+K - + Sp&lit at cursor De&la vid markör - + Ctrl+K Ctrl+K - + Ctrl+M Ctrl+M - + Ctrl+D Ctrl+D - + Del Del - + &Move Up &Flytta upp - + Ctrl+Shift+Up Ctrl+Shift+Pil upp - + M&ove Down Fl&ytta ned - + Ctrl+Shift+Down Ctrl+Shift+Pil ned - + Dupl&icate Dupl&icera - + &Delete &Ta bort - + &Rename &Byt namn - + F2 F2 - + Organi&ze Organi&sera - + M&erge Sa&mmanfoga - + &Format - + &Header - + &Level 1 (setext) - + Ctrl+Alt+1 - + Level &2 - + Ctrl+Alt+2 - + Level &1 (atx) - + Ctrl+1 - + L&evel 2 - + Ctrl+2 - + Level &3 - + Ctrl+3 - + Level &4 - + Ctrl+4 - + Level &5 - + Ctrl+5 - + Level &6 - + Ctrl+6 - + &Bold - + Ctrl+B - + &Italic - + Ctrl+I - + &Strike - + &Verbatim - + Su&perscript - + Ctrl++ - + Subsc&ript - + Ctrl+- - + Co&mment block - + Ctrl+Shift+C - + Clear &formats - + Ctrl+0 - + &Comment line(s) - + &Ordered list - + &Unordered list - + B&lockquote - + Remove selected plot step(s) - + The file {} does not exist. Has it been moved or deleted? - + Install {}{} to use spellcheck - + {} has no installed dictionaries - + {}{} is not installed - + Save project? - + Save changes to project "{}" before closing? - + Your changes will be lost if you don't save them. - + PyQt / Qt versions 5.11 and 5.12 are known to cause a crash which might result in a loss of data. - + PyQt {} and Qt {} are in use. - + Proceed with import at your own risk + + + Allow POV + + + + + Search + + + + + Ctrl+F + + + + + F3 + F3 + + + + Shift+F3 + + + + + Situation + + + + + Status + Status + + + + Search + + + No results found + + Settings @@ -1499,7 +1542,7 @@ Använd detta om du får ett felmeddelande angående YAML. Allmänt - + Revisions Ändringshistorik @@ -1509,17 +1552,17 @@ Använd detta om du får ett felmeddelande angående YAML. Visningar - + Labels Etiketter - + Status Status - + Fullscreen Fullskärm @@ -1534,658 +1577,709 @@ Använd detta om du får ett felmeddelande angående YAML. Applikationens utseende - + Loading Uppstart - + Automatically load last project on startup Ladda automatiskt senaste projekt vid uppstart - + Saving Sparande - + Automatically save every Spara automatiskt var - + minutes. minut. - + If no changes during Om inget har ändrats på - + seconds. sekunder. - + Save on project close Spara vid avslut - + <html><head/><body><p>If you check this option, your project will be saved as one single file. Easier to copy or backup, but does not allow collaborative editing, or versioning.<br/>If this is unchecked, your project will be saved as a folder containing many small files.</p></body></html> <html><head/><body><p>Markeras detta alternativ sparas ditt projekt som en samlad fil. Detta gör det lättare att ta en backup eller göra en kopia, men tillåter inte gemensam redigering eller versionshantering.<br/>Markeras alternativet inte sparas ditt projekt som en mapp med många små filer.</p></body></html> - + Save to one single file Spara i en samlad fil - + Revisions are a way to keep track of modifications. For each text item, it stores any changes you make to the main text, allowing you to see and restoring previous versions. Ändringshistorik låter dig följa dina ändringar. För varje textobjekt sparas ändringar som du har gjort vilket ger dig möjlighet till att se och återskapa tidigare versioner. - + Keep revisions Aktivera Ändringshistorik - + S&mart remove S&mart borttagning - + Keep: Behåll: - + Smart remove allows you to keep only a certain number of revisions. It is strongly recommended to use it, lest you file will becomes full of thousands of insignificant changes. Smart borttagning låter dig behålla ett visst antal ändringar. Du rekommenderas att använda den för att undvika att din fil fylls med tusentals av oviktiga ändringar. - + revisions per day for the last month ändringar per dag för senaste månaden - + revisions per minute for the last 10 minutes ändringar per minut för senaste 10 minuterna - + revisions per hour for the last day ändringar per timme för senaste dagen - + revisions per 10 minutes for the last hour ändringar per 10 minuter för senaste timmen - + revisions per week till the end of time ändringar per vecka tills vidare - + Views settings Visningsinställningar - + Tree Träd - + Colors Färger - + Icon color: Ikonfärg: - + Nothing Ingenting - + POV Synvinkel - + Label Etikett - + Progress Framsteg - + Compile Kompilera - + Text color: Textfärg: - + Background color: Bakgrundsfärg: - + Folders Mappar - + Show ite&m count Visa antal obje&kt - + Show summary Visa sammanfattning - + &Nothing I&ngenting - + Text Text - + Outline Utkast - + Visible columns Synliga kolumner - + Goal Mål - + Word count Antal ord - + Percentage Procent - + Title Titel - + Index cards Registerkort - + Background Bakgrund - + Color: Färg: - + Ctrl+S Ctrl+S - + Image: Bild: - + Style Utseende - + Item colors Objektfärger - + Border color: Kantfärg: - + Corner color: Hörnfärg: - + Text editor Textredigerare - + Font Typsnitt - + Family: Familj: - + Size: Teckenstorlek: - + Misspelled: Felstavat: - + Background: Bakgrund: - + Cursor Markör - + Use block insertion of Använd blockmarkör på - + px pixlar - + Paragraphs Stycke - + Line spacing: Radavstånd: - + Single Enkelt - + 1.5 lines 1.5 rader - + Double Dubbelt - + Proportional Proportionellt - + % % - + Tab width: Tabb-bredd: - + Indent 1st line Indrag på rad 1 - + Spacing: Avstånd: - + Alignment: Justering: - + Left Vänster - + Center Centrera - + Right Höger - + Justify Justerad - + New Ny - + Edit Redigera - + Delete Ta bort - + Theme name: Temats namn: - + Apply Använd - + Cancel Avbryt - + Window Background Fönsterbakgrund - + Text Background Textbakgrund - + Text Options Textinställningar - + Paragraph Options Styckesinställningar - + Type: Typ: - + No Image Ingen bild - + Tiled Sida vid sida - + Centered Centrerad - + Stretched Sträckt - + Scaled Skalad - + Zoomed Zoomad - + Opacity: Opacitet: - + Position: Position: - + Width: Bredd: - + Corner radius: Hörnradie: - + Margins: Marginaler: - + Padding: Utfyllnad: - + Font: Typsnitt: - + Alignment Justering - + Icon Size Storlek på ikoner - + TextLabel TextEtikett - + Disable blinking Avaktivera blinkning - + Text area Textområde - + Max width Maximal bredd - + Left/Right margins: Vänster-/Höger-marginaler: - + Top/Bottom margins: Topp-/Botten-marginaler: - + S&how progress Visa &framsteg - + Show summar&y Visa samman&fattning - + Show p&rogress Visa fram&steg - + Old st&yle Gammal &stil - + Transparent Transparent - + Restore defaults Återställ standardvärden - + Style: - + Language: - + Font size: Teckenstorlek: - + Restarting Manuskript ensures all settings take effect. - + Show &word count - + &Show word count - + &New style - + Typewriter mode - + Focus mode - + None Ingen - + Sentence - + Line - + Paragraph - + <p><b>The Revisions feature has been at the source of many reported issues. In this version of Manuskript it has been turned off by default for new projects in order to provide the best experience.</b></p><p>Why aren't these issues fixed already? <a href="https://www.theologeek.ch/manuskript/contribute/">We need your help to make Manuskript better!</a></p> + + + Show progress in chars next + to words + + + + + Char/Word Counter + + + + + Count spaces as chars + + + + + Show char c&ount + + + + + Sho&w char count + + SpellAction - + Spelling Suggestions Stavningsförslag - + &Add to dictionary &Lägg till i ordbok - + &Remove from custom dictionary &Ta bort från ordbok + + + &New Character + + + + + &New Plot Item + + + + + &New World Item + + + + + &Correction Suggestions + + + + + &Correction Suggestion + + about @@ -2287,17 +2381,12 @@ Använd detta om du får ett felmeddelande angående YAML. characterModel - - New character - Ny karaktär - - - + Name Namn - + Value Värde @@ -2305,17 +2394,17 @@ Använd detta om du får ett felmeddelande angående YAML. characterTreeView - + Main Huvudkaraktär - + Secondary Bikaraktär - + Minor Statist @@ -2431,12 +2520,12 @@ Använd detta om du får ett felmeddelande angående YAML. corkDelegate - + One line summary Sammanfattning på en rad - + Full summary Full sammanfattning @@ -3018,15 +3107,30 @@ Använd detta om du får ett felmeddelande angående YAML. Rot - - {} words / {} - {} ord / {} - - - + {} words {} ord + + + ({} chars) {} words / {} + + + + + {} words / {} + + + + + {} chars + + + + + {} chars + + markdownSettings @@ -3231,12 +3335,12 @@ Använd detta om du får ett felmeddelande angående YAML. outlineItem - + {} words / {} ({}) {} ord / {} ({}) - + {} words {} ord @@ -3458,37 +3562,32 @@ Använd detta om du får ett felmeddelande angående YAML. plotModel - - New plot - Ny handling - - - + Name Namn - + Meta Meta - + New step Nytt steg - + Main Huvudkaraktär - + Secondary Bikaraktär - + Minor Statist @@ -3835,111 +3934,56 @@ Använd detta om du får ett felmeddelande angående YAML. Search for... Sök efter... - - - Search in: - Sök i: - - - - All - Allt - - - - Title - Titel - - - - Text - Text - - - - Summary - Sammanfattning - - - - Notes - Anteckningar - - - - POV - Synvinkel - - - - Status - Status - - - - Label - Etikett - - - - Options: - Alternativ: - - - - Case sensitive - Skiftlägeskänslig - settingsWindow - + New status Ny status - + New label Ny etikett - + newtheme newtheme - + New theme Nytt tema - + (read-only) (skrivskyddad) - + Open Image - + Image files (*.jpg; *.jpeg; *.png) - + Error Fel - + Unable to load selected file - + Unable to add selected image: {} @@ -4063,7 +4107,7 @@ Använd detta om du får ett felmeddelande angående YAML. textEditView - + Various Diverse @@ -4365,212 +4409,212 @@ Använd detta om du får ett felmeddelande angående YAML. worldModel - + New item Nytt Objekt - + Fantasy world building Utformning av fantasivärld - + Physical Fysiska egenskaper - + Climate Klimat - + Topography Landskap - + Astronomy Astronomi - + Wild life Djurliv - + Flora Flora - + History Historia - + Races Raser - + Diseases Sjukdomar - + Cultural Kulturella egenskaper - + Customs Seder och skick - + Food Mat - + Languages Språk - + Education Utbildning - + Dresses Kläder - + Science Vetenskap - + Calendar Kalender - + Bodily language Kropsspråk - + Ethics Etik - + Religion Religion - + Government Statsskick - + Politics Politik - + Gender roles Könsroller - + Music and arts Musik och konst - + Architecture Arkitektur - + Military Militär - + Technology Teknologi - + Courtship Uppvaktning - + Demography Demografi - + Transportation Transport - + Medicine Medicin - + Magic system Magisystem - + Rules Regler - + Organization Organisering - + Magical objects Magiska objekt - + Magical places Magiska platser - + Magical races Magiska raser - + Important places Viktiga platser - + Important objects Viktiga objekt - + Natural resources diff --git a/i18n/manuskript_tr.ts b/i18n/manuskript_tr.ts index 86737fd..4b76609 100644 --- a/i18n/manuskript_tr.ts +++ b/i18n/manuskript_tr.ts @@ -456,7 +456,7 @@ Use that if you get YAML related error. MainWindow - + General Genel @@ -496,7 +496,7 @@ Use that if you get YAML related error. Yazar - + Name İsim @@ -506,7 +506,7 @@ Use that if you get YAML related error. E-posta - + Summary Özet @@ -516,7 +516,7 @@ Use that if you get YAML related error. Durum: - + Summary: Özet: @@ -526,17 +526,17 @@ Use that if you get YAML related error. Bir cümle - + One paragraph Bir paragraf - + One page Bir sayfa - + Full @@ -566,7 +566,7 @@ Use that if you get YAML related error. Tam özet - + Next İleri @@ -586,312 +586,312 @@ Use that if you get YAML related error. İsimler - + Filter Filtrele - + Basic info Temel bilgiler - + Importance Önem - + Motivation Motivasyon - + Goal Amaç - + Conflict Çatışma - + Epiphany Tezahür - + <html><head/><body><p align="right">One sentence<br/>summary</p></body></html> <html><head/><body><p align="right">Bir cümlelik <br/>özet</p></body></html> - + <html><head/><body><p align="right">One paragraph<br/>summary</p></body></html> <html><head/><body><p align="right">Bir paragraflık<br/>özet</p></body></html> - + Notes Notlar - + Detailed info Detaylı bilgi - + Plots - + Plot - + Character(s) Karakter(ler) - + Description Tanım - + Result Sonuç - + Resolution steps Çözülme adımları - + World Evren - + Populates with empty data - + More Daha fazla - + Source of passion Tutku kaynağı - + Source of conflict Çatışma kaynağı - + Outline Taslak - + Editor Editör - + Debug Hata ayıklama - + FlatData - + Persos - + Labels Etiketler - + &File &Dosya - + &Recent &Yeni - + &Help &Yardım - + &Tools &Araçlar - + &Edit &Düzenle - + &View - + &Mode - + &Cheat sheet - + Sea&rch - + &Navigation - + &Open &Aç - + Ctrl+O Ctrl+O - + &Save &Kaydet - + Ctrl+S Ctrl+S - + Sa&ve as... Farklı Kaydet... - + Ctrl+Shift+S Ctrl+Shift+S - + &Quit &Kapat - + Ctrl+Q Ctrl+Q - + &Show help texts &Yardım dosyalarını göster - + Ctrl+Shift+B Ctrl+Shift+B - + &Spellcheck &Yazım Kontrolü - + F9 F9 - + &Labels... &Etiketler... - + &Status... &Durum... - + Tree - + &Simple - + &Fiction - + Index cards - + S&ettings - + F8 F8 - + &Close project - + Co&mpile - + F6 F6 - + &Frequency Analyzer @@ -901,562 +901,605 @@ Use that if you get YAML related error. - + &About - + About Manuskript - + Manuskript - + Project {} saved. - + WARNING: Project {} not saved. - + Project {} loaded. - + Project {} loaded with some errors: - + * {} wasn't found in project file. - + Project {} loaded with some errors. - + (~{} pages) - + Words: {}{} - + Book summary - + Project tree - + Metadata - + Story line - + Enter information about your book, and yourself. - + The basic situation, in the form of a 'What if...?' question. Ex: 'What if the most dangerous evil wizard wasn't able to kill a baby?' (Harry Potter) - + Take time to think about a one sentence (~50 words) summary of your book. Then expand it to a paragraph, then to a page, then to a full summary. - + Create your characters. - + Develop plots. - + Build worlds. Create hierarchy of broad categories down to specific details. - + Create the outline of your masterpiece. - + Write. - + Debug info. Sometimes useful. - + Dictionary - + Nothing - + POV - + Label - + Progress - + Compile - + Icon color - + Text color - + Background color - + Icon - + Text - + Background - + Border - + Corner - + Add plot step - + &Import… - + F7 F7 - + &Copy - + Ctrl+C - + C&ut - + Ctrl+X - + &Paste - + Ctrl+V - + &Split… - + Ctrl+Shift+K - + Sp&lit at cursor - + Ctrl+K - + Ctrl+M - + Ctrl+D - + Del - + &Move Up - + Ctrl+Shift+Up - + M&ove Down - + Ctrl+Shift+Down - + Dupl&icate - + &Delete - + &Rename - + F2 F2 - + Organi&ze - + M&erge - + &Format - + &Header - + &Level 1 (setext) - + Ctrl+Alt+1 - + Level &2 - + Ctrl+Alt+2 - + Level &1 (atx) - + Ctrl+1 - + L&evel 2 - + Ctrl+2 - + Level &3 - + Ctrl+3 - + Level &4 - + Ctrl+4 - + Level &5 - + Ctrl+5 - + Level &6 - + Ctrl+6 - + &Bold - + Ctrl+B - + &Italic - + Ctrl+I - + &Strike - + &Verbatim - + Su&perscript - + Ctrl++ - + Subsc&ript - + Ctrl+- - + Co&mment block - + Ctrl+Shift+C - + Clear &formats - + Ctrl+0 - + &Comment line(s) - + &Ordered list - + &Unordered list - + B&lockquote - + Remove selected plot step(s) - + The file {} does not exist. Has it been moved or deleted? - + Install {}{} to use spellcheck - + {} has no installed dictionaries - + {}{} is not installed - + Save project? - + Save changes to project "{}" before closing? - + Your changes will be lost if you don't save them. - + PyQt / Qt versions 5.11 and 5.12 are known to cause a crash which might result in a loss of data. - + PyQt {} and Qt {} are in use. - + Proceed with import at your own risk + + + Allow POV + + + + + Search + + + + + Ctrl+F + + + + + F3 + F3 + + + + Shift+F3 + + + + + Situation + + + + + Status + Durum + + + + Search + + + No results found + + Settings @@ -1471,7 +1514,7 @@ Use that if you get YAML related error. Genel - + Revisions @@ -1481,17 +1524,17 @@ Use that if you get YAML related error. - + Labels Etiketler - + Status Durum - + Fullscreen @@ -1506,658 +1549,709 @@ Use that if you get YAML related error. - + Loading - + Automatically load last project on startup - + Saving - + Automatically save every - + minutes. - + If no changes during - + seconds. - + Save on project close - + <html><head/><body><p>If you check this option, your project will be saved as one single file. Easier to copy or backup, but does not allow collaborative editing, or versioning.<br/>If this is unchecked, your project will be saved as a folder containing many small files.</p></body></html> - + Save to one single file - + Revisions are a way to keep track of modifications. For each text item, it stores any changes you make to the main text, allowing you to see and restoring previous versions. - + Keep revisions - + S&mart remove - + Keep: - + Smart remove allows you to keep only a certain number of revisions. It is strongly recommended to use it, lest you file will becomes full of thousands of insignificant changes. - + revisions per day for the last month - + revisions per minute for the last 10 minutes - + revisions per hour for the last day - + revisions per 10 minutes for the last hour - + revisions per week till the end of time - + Views settings - + Tree - + Colors - + Icon color: - + Nothing - + POV - + Label - + Progress - + Compile - + Text color: - + Background color: - + Folders - + Show ite&m count - + Show summary - + &Nothing - + Text - + Outline Taslak - + Visible columns - + Goal Amaç - + Word count - + Percentage - + Title Başlık - + Index cards - + Item colors - + Border color: - + Corner color: - + Background - + Color: - + Ctrl+S Ctrl+S - + Image: - + Text editor - + Font - + Family: - + Size: - + Misspelled: - + Background: - + Paragraphs - + Line spacing: Satır aralığı: - + Single - + 1.5 lines - + Double - + Proportional - + % - + Tab width: - + px - + Indent 1st line - + Spacing: - + New - + Edit - + Delete - + Theme name: - + Apply - + Cancel - + Window Background - + Text Background - + Text Options - + Paragraph Options - + Type: - + No Image - + Tiled - + Centered - + Stretched - + Scaled - + Zoomed - + Opacity: - + Position: - + Left - + Center - + Right - + Width: - + Corner radius: - + Margins: - + Padding: - + Font: - + Style - + Cursor - + Use block insertion of - + Alignment: - + Justify - + Alignment - + Icon Size - + TextLabel - + Disable blinking - + Text area - + Max width - + Left/Right margins: - + Top/Bottom margins: - + S&how progress - + Show summar&y - + Show p&rogress - + Old st&yle - + Transparent - + Restore defaults - + Style: - + Language: - + Font size: Yazı tipi boyutu: - + Restarting Manuskript ensures all settings take effect. - + Show &word count - + &Show word count - + &New style - + Typewriter mode - + Focus mode - + None - + Sentence - + Line - + Paragraph - + <p><b>The Revisions feature has been at the source of many reported issues. In this version of Manuskript it has been turned off by default for new projects in order to provide the best experience.</b></p><p>Why aren't these issues fixed already? <a href="https://www.theologeek.ch/manuskript/contribute/">We need your help to make Manuskript better!</a></p> + + + Show progress in chars next + to words + + + + + Char/Word Counter + + + + + Count spaces as chars + + + + + Show char c&ount + + + + + Sho&w char count + + SpellAction - + Spelling Suggestions - + &Add to dictionary - + &Remove from custom dictionary + + + &New Character + + + + + &New Plot Item + + + + + &New World Item + + + + + &Correction Suggestions + + + + + &Correction Suggestion + + about @@ -2259,17 +2353,12 @@ Use that if you get YAML related error. characterModel - - New character - - - - + Name İsim - + Value @@ -2277,17 +2366,17 @@ Use that if you get YAML related error. characterTreeView - + Main - + Secondary - + Minor @@ -2403,12 +2492,12 @@ Use that if you get YAML related error. corkDelegate - + One line summary - + Full summary Tam özet @@ -2990,13 +3079,28 @@ Use that if you get YAML related error. - - {} words / {} + + {} words - - {} words + + ({} chars) {} words / {} + + + + + {} words / {} + + + + + {} chars + + + + + {} chars @@ -3203,12 +3307,12 @@ Use that if you get YAML related error. outlineItem - + {} words / {} ({}) - + {} words @@ -3430,37 +3534,32 @@ Use that if you get YAML related error. plotModel - - New plot - - - - + Name İsim - + Meta - + New step - + Main - + Secondary - + Minor @@ -3807,111 +3906,56 @@ Use that if you get YAML related error. Search for... - - - Search in: - - - - - All - - - - - Title - Başlık - - - - Text - - - - - Summary - Özet - - - - Notes - Notlar - - - - POV - - - - - Status - Durum - - - - Label - - - - - Options: - - - - - Case sensitive - - settingsWindow - + New status - + New label - + newtheme - + New theme - + (read-only) - + Open Image - + Image files (*.jpg; *.jpeg; *.png) - + Error Hata - + Unable to load selected file - + Unable to add selected image: {} @@ -4021,7 +4065,7 @@ Use that if you get YAML related error. textEditView - + Various @@ -4323,212 +4367,212 @@ Use that if you get YAML related error. worldModel - + New item - + Fantasy world building - + Physical - + Climate - + Topography - + Astronomy - + Wild life - + Flora - + History - + Races - + Diseases - + Cultural - + Customs - + Food - + Languages - + Education - + Dresses - + Science - + Calendar - + Bodily language - + Ethics - + Religion - + Government - + Politics - + Gender roles - + Music and arts - + Architecture - + Military - + Technology - + Courtship - + Demography - + Transportation - + Medicine - + Magic system - + Rules - + Organization - + Magical objects - + Magical places - + Magical races - + Important places - + Important objects - + Natural resources diff --git a/i18n/manuskript_uk.ts b/i18n/manuskript_uk.ts index 70c852c..9f9a642 100644 --- a/i18n/manuskript_uk.ts +++ b/i18n/manuskript_uk.ts @@ -478,7 +478,7 @@ Use that if you get YAML related error. MainWindow - + General Загальне @@ -518,7 +518,7 @@ Use that if you get YAML related error. Автор - + Name Ім'я @@ -528,7 +528,7 @@ Use that if you get YAML related error. Електронна пошта - + Summary Стислий переказ @@ -538,7 +538,7 @@ Use that if you get YAML related error. Ситуація: - + Summary: Стислий переказ: @@ -548,17 +548,17 @@ Use that if you get YAML related error. Одне речення - + One paragraph Один абзац - + One page Одна сторінка - + Full Цілком @@ -588,7 +588,7 @@ Use that if you get YAML related error. Загальний опис - + Next Далі @@ -608,312 +608,312 @@ Use that if you get YAML related error. Імена - + Filter Фільтрувати - + Basic info Загальна інформація - + Importance Значність - + Motivation Мотивація - + Goal Мета - + Conflict Конфлікт - + Epiphany Прояснення - + <html><head/><body><p align="right">One sentence<br/>summary</p></body></html> <html><head/><body><p align="right">Переказ одним<br/>реченням</p></body></html> - + <html><head/><body><p align="right">One paragraph<br/>summary</p></body></html> <html><head/><body><p align="right">Переказ одним<br/>абзацом</p></body></html> - + Notes Нотатки - + Detailed info Докладна інформація - + Plots Сюжети - + Plot Сюжет - + Character(s) Персонаж(-і) - + Description Опис - + Result Результат - + Resolution steps Кроки розвитку сюжету - + World Світ - + Populates with empty data - + More Більше - + Source of passion - + Source of conflict Джерело конфлікту - + Outline Обрис - + Editor Редактор - + Debug Налагодити - + FlatData - + Persos - + Labels Позначки - + &File &Файл - + &Recent &Нещодавні - + &Help &Допомога - + &Tools &Знаряддя - + &Edit &Редагувати - + &View &Переглянути - + &Mode &Режим - + &Cheat sheet &Шпаргалка - + Sea&rch Шука&ти - + &Navigation &Перехід - + &Open &Відкрити - + Ctrl+O Ctrl+O - + &Save &Зберегти - + Ctrl+S Ctrl+S - + Sa&ve as... Збере&гти як... - + Ctrl+Shift+S Ctrl+Shift+S - + &Quit &Вихід - + Ctrl+Q Ctrl+Q - + &Show help texts &Показувати тексти довідки - + Ctrl+Shift+B Ctrl+Shift+B - + &Spellcheck &Перевірка правопису - + F9 F9 - + &Labels... &Позначки... - + &Status... &Стан... - + Tree Дерево - + &Simple &Простий - + &Fiction &Художня література - + Index cards Каталог - + S&ettings Н&алаштування - + F8 F8 - + &Close project &Закрити проект - + Co&mpile Екс&портувати - + F6 F6 - + &Frequency Analyzer &Частотний аналізатор @@ -923,562 +923,605 @@ Use that if you get YAML related error. Інформація про книжку - + &About &Про програму - + About Manuskript Про Манускрипт - + Manuskript Манускрипт - + Project {} saved. Проект {} збережено. - + WARNING: Project {} not saved. УВАГА: Проект {} не збережено. - + Project {} loaded. Проект {} завантажено. - + Project {} loaded with some errors: Проект {} завантажено з кількома помилками: - + * {} wasn't found in project file. * {} не знайдено у файлі проекту. - + Project {} loaded with some errors. Проект {} завантажено з кількома помилками. - + (~{} pages) (~{} сторінок) - + Words: {}{} Слів: {}{} - + Book summary Стислий переказ книжки - + Project tree Дерево проекту - + Metadata Метадані - + Story line - + Enter information about your book, and yourself. - + The basic situation, in the form of a 'What if...?' question. Ex: 'What if the most dangerous evil wizard wasn't able to kill a baby?' (Harry Potter) - + Take time to think about a one sentence (~50 words) summary of your book. Then expand it to a paragraph, then to a page, then to a full summary. - + Create your characters. - + Develop plots. - + Build worlds. Create hierarchy of broad categories down to specific details. - + Create the outline of your masterpiece. - + Write. - + Debug info. Sometimes useful. - + Dictionary - + Nothing - + POV З погляду - + Label Позначка - + Progress Стан - + Compile Експорт - + Icon color Колір позначки - + Text color Колір тексту - + Background color Колір тла - + Icon Значок - + Text Текст - + Background Тло - + Border Рамка - + Corner Кут - + Add plot step - + &Import… - + F7 F7 - + &Copy - + Ctrl+C - + C&ut - + Ctrl+X - + &Paste - + Ctrl+V - + &Split… - + Ctrl+Shift+K - + Sp&lit at cursor - + Ctrl+K - + Ctrl+M - + Ctrl+D - + Del Вилучити - + &Move Up - + Ctrl+Shift+Up - + M&ove Down - + Ctrl+Shift+Down - + Dupl&icate - + &Delete &Вилучити - + &Rename &Перейменувати - + F2 F2 - + Organi&ze - + M&erge - + Remove selected plot step(s) - + &Format - + &Header - + &Level 1 (setext) - + Ctrl+Alt+1 - + Level &2 - + Ctrl+Alt+2 - + Level &1 (atx) - + Ctrl+1 - + L&evel 2 - + Ctrl+2 - + Level &3 - + Ctrl+3 - + Level &4 - + Ctrl+4 - + Level &5 - + Ctrl+5 - + Level &6 - + Ctrl+6 - + &Bold - + Ctrl+B - + &Italic - + Ctrl+I - + &Strike - + &Verbatim - + Su&perscript - + Ctrl++ - + Subsc&ript - + Ctrl+- - + Co&mment block - + Ctrl+Shift+C - + Clear &formats - + Ctrl+0 - + &Comment line(s) - + &Ordered list - + &Unordered list - + B&lockquote - + The file {} does not exist. Has it been moved or deleted? - + Install {}{} to use spellcheck - + {} has no installed dictionaries - + {}{} is not installed - + Save project? - + Save changes to project "{}" before closing? - + Your changes will be lost if you don't save them. - + PyQt / Qt versions 5.11 and 5.12 are known to cause a crash which might result in a loss of data. - + PyQt {} and Qt {} are in use. - + Proceed with import at your own risk + + + Allow POV + + + + + Search + + + + + Ctrl+F + + + + + F3 + F3 + + + + Shift+F3 + + + + + Situation + + + + + Status + Стан + + + + Search + + + No results found + + Settings @@ -1493,7 +1536,7 @@ Use that if you get YAML related error. Загальне - + Revisions @@ -1503,17 +1546,17 @@ Use that if you get YAML related error. - + Labels Позначки - + Status Стан - + Fullscreen @@ -1528,658 +1571,709 @@ Use that if you get YAML related error. - + Loading - + Automatically load last project on startup - + Saving - + Automatically save every - + minutes. - + If no changes during - + seconds. - + Save on project close - + <html><head/><body><p>If you check this option, your project will be saved as one single file. Easier to copy or backup, but does not allow collaborative editing, or versioning.<br/>If this is unchecked, your project will be saved as a folder containing many small files.</p></body></html> - + Save to one single file - + Revisions are a way to keep track of modifications. For each text item, it stores any changes you make to the main text, allowing you to see and restoring previous versions. - + Keep revisions - + S&mart remove - + Keep: - + Smart remove allows you to keep only a certain number of revisions. It is strongly recommended to use it, lest you file will becomes full of thousands of insignificant changes. - + revisions per day for the last month - + revisions per minute for the last 10 minutes - + revisions per hour for the last day - + revisions per 10 minutes for the last hour - + revisions per week till the end of time - + Views settings - + Tree Дерево - + Colors - + Icon color: - + Nothing - + POV З погляду - + Label Позначка - + Progress Стан - + Compile Експорт - + Text color: - + Background color: - + Folders - + Show ite&m count - + Show summary - + &Nothing - + Text Текст - + Outline Обрис - + Visible columns - + Goal Мета - + Word count - + Percentage - + Title Назва - + Index cards Каталог - + Item colors - + Border color: - + Corner color: - + Background Тло - + Color: - + Ctrl+S Ctrl+S - + Image: - + Text editor - + Font - + Family: - + Size: - + Misspelled: - + Background: - + Paragraphs - + Line spacing: Міжрядковий інтервал: - + Single - + 1.5 lines - + Double - + Proportional - + % - + Tab width: - + px - + Indent 1st line - + Spacing: - + New - + Edit - + Delete - + Theme name: - + Apply - + Cancel - + Window Background - + Text Background - + Text Options - + Paragraph Options - + Type: - + No Image - + Tiled - + Centered - + Stretched - + Scaled - + Zoomed - + Opacity: - + Position: - + Left - + Center - + Right - + Width: - + Corner radius: - + Margins: - + Padding: - + Font: - + Style - + Cursor - + Use block insertion of - + Alignment: - + Justify - + Alignment - + Icon Size - + TextLabel - + Disable blinking - + Text area - + Max width - + Left/Right margins: - + Top/Bottom margins: - + S&how progress - + Show summar&y - + Show p&rogress - + Old st&yle - + Transparent - + Restore defaults - + Style: - + Language: - + Font size: Розмір шрифту: - + Restarting Manuskript ensures all settings take effect. - + Show &word count - + &Show word count - + &New style - + Typewriter mode - + Focus mode - + None - + Sentence - + Line - + Paragraph - + <p><b>The Revisions feature has been at the source of many reported issues. In this version of Manuskript it has been turned off by default for new projects in order to provide the best experience.</b></p><p>Why aren't these issues fixed already? <a href="https://www.theologeek.ch/manuskript/contribute/">We need your help to make Manuskript better!</a></p> + + + Show progress in chars next + to words + + + + + Char/Word Counter + + + + + Count spaces as chars + + + + + Show char c&ount + + + + + Sho&w char count + + SpellAction - + Spelling Suggestions - + &Add to dictionary - + &Remove from custom dictionary + + + &New Character + + + + + &New Plot Item + + + + + &New World Item + + + + + &Correction Suggestions + + + + + &Correction Suggestion + + about @@ -2281,17 +2375,12 @@ Use that if you get YAML related error. characterModel - - New character - - - - + Name Ім'я - + Value @@ -2299,17 +2388,17 @@ Use that if you get YAML related error. characterTreeView - + Main - + Secondary - + Minor @@ -2425,12 +2514,12 @@ Use that if you get YAML related error. corkDelegate - + One line summary - + Full summary Загальний опис @@ -3012,14 +3101,29 @@ Use that if you get YAML related error. - - {} words / {} + + {} words + {} слів + + + + ({} chars) {} words / {} - - {} words - {} слів + + {} words / {} + + + + + {} chars + + + + + {} chars + @@ -3225,12 +3329,12 @@ Use that if you get YAML related error. outlineItem - + {} words / {} ({}) - + {} words @@ -3452,37 +3556,32 @@ Use that if you get YAML related error. plotModel - - New plot - - - - + Name Ім'я - + Meta - + New step - + Main - + Secondary - + Minor @@ -3829,111 +3928,56 @@ Use that if you get YAML related error. Search for... - - - Search in: - - - - - All - - - - - Title - Назва - - - - Text - Текст - - - - Summary - Стислий переказ - - - - Notes - Нотатки - - - - POV - З погляду - - - - Status - Стан - - - - Label - Позначка - - - - Options: - - - - - Case sensitive - - settingsWindow - + New status - + New label - + newtheme - + New theme - + (read-only) - + Open Image - + Image files (*.jpg; *.jpeg; *.png) - + Error Помилка - + Unable to load selected file - + Unable to add selected image: {} @@ -4043,7 +4087,7 @@ Use that if you get YAML related error. textEditView - + Various @@ -4345,212 +4389,212 @@ Use that if you get YAML related error. worldModel - + New item - + Fantasy world building - + Physical - + Climate - + Topography - + Astronomy - + Wild life - + Flora - + History - + Races - + Diseases - + Cultural - + Customs - + Food - + Languages - + Education - + Dresses - + Science - + Calendar - + Bodily language - + Ethics - + Religion - + Government - + Politics - + Gender roles - + Music and arts - + Architecture - + Military - + Technology - + Courtship - + Demography - + Transportation - + Medicine - + Magic system - + Rules - + Organization - + Magical objects - + Magical places - + Magical races - + Important places - + Important objects - + Natural resources diff --git a/i18n/manuskript_zh_CN.ts b/i18n/manuskript_zh_CN.ts index 08f172e..0de6e56 100644 --- a/i18n/manuskript_zh_CN.ts +++ b/i18n/manuskript_zh_CN.ts @@ -462,7 +462,7 @@ Use that if you get YAML related error. MainWindow - + General 通用 @@ -502,7 +502,7 @@ Use that if you get YAML related error. 作者 - + Name 名字 @@ -512,7 +512,7 @@ Use that if you get YAML related error. EMail - + Summary 摘要 @@ -522,7 +522,7 @@ Use that if you get YAML related error. 场景: - + Summary: 摘要: @@ -532,17 +532,17 @@ Use that if you get YAML related error. 一句话 - + One paragraph 一段 - + One page 一页 - + Full 完整的 @@ -572,7 +572,7 @@ Use that if you get YAML related error. 完整摘要 - + Next 下一个 @@ -592,312 +592,312 @@ Use that if you get YAML related error. 名字 - + Filter 过滤 - + Basic info 基本信息 - + Importance 重要性 - + Motivation 动机 - + Goal 目标 - + Conflict 冲突 - + Epiphany 顿悟 - + <html><head/><body><p align="right">One sentence<br/>summary</p></body></html> - + <html><head/><body><p align="right">One paragraph<br/>summary</p></body></html> - + Notes 笔记 - + Detailed info 详细信息 - + Plots 情节 - + Plot 情节 - + Character(s) 角色 - + Description 描述 - + Result 结果 - + Resolution steps 解决步骤 - + World 世界 - + Populates with empty data 生成空数据 - + More 更多 - + Source of passion 想法来源 - + Source of conflict 冲突来源 - + Outline 大纲 - + Editor 编辑器 - + Debug Debug - + FlatData - + Persos - + Labels 标签 - + &File 文件(&F) - + &Recent 最近使用(&R) - + &Help 帮助(&H) - + &Tools 工具(&T) - + &Edit 编辑(&E) - + &View 查看&(V) - + &Mode 模式(&M) - + &Cheat sheet 备忘录 - + Sea&rch 搜索(&R) - + &Navigation 导航(&N) - + &Open 打开(&O) - + Ctrl+O Ctrl+O - + &Save 保存(&S) - + Ctrl+S Ctrl+S - + Sa&ve as... 另存为(&V) - + Ctrl+Shift+S Ctrl+Shift+S - + &Quit 退出(&Q) - + Ctrl+Q Ctrl+Q - + &Show help texts 显示帮助(&S) - + Ctrl+Shift+B Ctrl+Shift+B - + &Spellcheck 拼写检查(&S) - + F9 F9 - + &Labels... 标签...(&L) - + &Status... 状态...(&S) - + Tree - + &Simple 简单(&S) - + &Fiction 虚构小说 - + Index cards 索引卡 - + S&ettings 设置(&E) - + F8 F8 - + &Close project 关闭项目(&C) - + Co&mpile 编译(&M) - + F6 F6 - + &Frequency Analyzer 频率分析(&F) @@ -907,562 +907,605 @@ Use that if you get YAML related error. 书籍信息 - + &About 关于(&A) - + About Manuskript 关于 Manuskript - + Manuskript ManuSkript - + Project {} saved. 项目 {} 已保存。 - + WARNING: Project {} not saved. 警告:项目 {} 未保存。 - + Project {} loaded. 项目 {} 已载入。 - + Project {} loaded with some errors: 载入项目 {} 时出错: - + * {} wasn't found in project file. * {} 没有在项目文件中找到。 - + Project {} loaded with some errors. 载入项目 {} 时遇到错误。 - + (~{} pages) (约 {} 页) - + Words: {}{} 字数: {}{} - + Book summary 书籍摘要 - + Project tree 项目树 - + Metadata 元信息 - + Story line 故事线 - + Enter information about your book, and yourself. 输入有关你的书和你自己的信息。 - + The basic situation, in the form of a 'What if...?' question. Ex: 'What if the most dangerous evil wizard wasn't able to kill a baby?' (Harry Potter) 基本情况是形如'如果...?'的问题。例如:'如果一个最危险的巫师没能成功杀死一个婴儿……?'(哈利·波特) - + Take time to think about a one sentence (~50 words) summary of your book. Then expand it to a paragraph, then to a page, then to a full summary. 花一些时间想一个 50 字左右的一句话摘要来描述你的书。然后将它扩展成一段,一页,最后写成一个完整的摘要。 - + Create your characters. 建立你的角色。 - + Develop plots. 构造情节。 - + Build worlds. Create hierarchy of broad categories down to specific details. 构建世界。创造层次丰富包含方方面面的结构,直至具体细节。 - + Create the outline of your masterpiece. 建立你的作品的大纲。 - + Write. 写作。 - + Debug info. Sometimes useful. Debug 信息。有时候是有用的。 - + Dictionary 字典 - + Nothing - + POV POV - + Label 标签 - + Progress 进度 - + Compile 编译 - + Icon color 图标颜色 - + Text color 文本颜色 - + Background color 背景色 - + Icon 图标 - + Text 文本 - + Background 背景 - + Border 边缘 - + Corner 角落 - + Add plot step 添加情节步骤 - + &Import… 导入(&I) - + F7 F7 - + &Copy 复制(&C) - + Ctrl+C Ctrl+C - + C&ut 剪切(&U) - + Ctrl+X Ctrl+X - + &Paste 粘贴(&P) - + Ctrl+V Ctrl+V - + &Split… 分割(&S) - + Ctrl+Shift+K Ctrl+Shift+K - + Sp&lit at cursor 在光标处分割(&L) - + Ctrl+K Ctrl+K - + Ctrl+M Ctrl+M - + Ctrl+D Ctrl+D - + Del Del - + &Move Up 向上移动(&M) - + Ctrl+Shift+Up Ctrl+Shift+Up - + M&ove Down 向下移动(&O) - + Ctrl+Shift+Down Ctrl+Shift+Down - + Dupl&icate 复写(&I) - + &Delete 删除(&D) - + &Rename 重命名(&R) - + F2 F2 - + Organi&ze 管理(&Z) - + M&erge 合并(&E) - + &Format 格式(&F) - + &Header 头(&H) - + &Level 1 (setext) - + Ctrl+Alt+1 Ctrl+Alt+1 - + Level &2 - + Ctrl+Alt+2 Ctrl+Alt+2 - + Level &1 (atx) - + Ctrl+1 Ctrl+1 - + L&evel 2 - + Ctrl+2 Ctrl+2 - + Level &3 - + Ctrl+3 Ctrl+3 - + Level &4 - + Ctrl+4 Ctrl+4 - + Level &5 - + Ctrl+5 Ctrl+5 - + Level &6 - + Ctrl+6 Ctrl+6 - + &Bold 加粗(&B) - + Ctrl+B Ctrl+B - + &Italic 斜体(&I) - + Ctrl+I Ctrl+I - + &Strike 删除线(&S) - + &Verbatim 逐字(&V) - + Su&perscript 上标(&P) - + Ctrl++ Ctrl++ - + Subsc&ript 下标(&R) - + Ctrl+- Ctrl+- - + Co&mment block 注释块(&M) - + Ctrl+Shift+C Ctrl+Shift+C - + Clear &formats 清除格式(&F) - + Ctrl+0 Ctrl+0 - + &Comment line(s) 行注释(&C) - + &Ordered list 有序列表(&O) - + &Unordered list 无序列表(&U) - + B&lockquote 引用块(&L) - + Remove selected plot step(s) 删除选择的情节段 - + The file {} does not exist. Has it been moved or deleted? 文件 {} 不存在。是否被移动或删除? - + Install {}{} to use spellcheck - + {} has no installed dictionaries - + {}{} is not installed - + Save project? - + Save changes to project "{}" before closing? - + Your changes will be lost if you don't save them. - + PyQt / Qt versions 5.11 and 5.12 are known to cause a crash which might result in a loss of data. - + PyQt {} and Qt {} are in use. - + Proceed with import at your own risk + + + Allow POV + + + + + Search + + + + + Ctrl+F + + + + + F3 + F3 + + + + Shift+F3 + + + + + Situation + + + + + Status + 状态 + + + + Search + + + No results found + + Settings @@ -1477,7 +1520,7 @@ Use that if you get YAML related error. 通用 - + Revisions 副本 @@ -1487,17 +1530,17 @@ Use that if you get YAML related error. 查看 - + Labels 标签 - + Status 状态 - + Fullscreen 全屏 @@ -1512,658 +1555,709 @@ Use that if you get YAML related error. 应用设置 - + Loading 载入 - + Automatically load last project on startup 启动时打开最后关闭的项目 - + Saving 保存 - + Automatically save every 自动保存间隔 - + minutes. 分钟。 - + If no changes during 无变动 - + seconds. 秒。 - + Save on project close 退出时保存 - + <html><head/><body><p>If you check this option, your project will be saved as one single file. Easier to copy or backup, but does not allow collaborative editing, or versioning.<br/>If this is unchecked, your project will be saved as a folder containing many small files.</p></body></html> <html><head/><body><p>如果你勾选了这个选项,你的项目会被保存到单个文件中。更易于复制与备份,但不允许协作编辑或者版本控制。<br/>如果不勾选,你的项目会被保存为一个包含许多小文件的文件夹。</p></body></html> - + Save to one single file 保存到单个文件 - + Revisions are a way to keep track of modifications. For each text item, it stores any changes you make to the main text, allowing you to see and restoring previous versions. 副本是一种跟踪您编辑的内容的方法。 对于每个文本项,它会存储您对主文本所做的任何更改,以便您查看和恢复以前的版本。 - + Keep revisions 保留副本 - + S&mart remove 智能整理(&M) - + Keep: 保留: - + Smart remove allows you to keep only a certain number of revisions. It is strongly recommended to use it, lest you file will becomes full of thousands of insignificant changes. 智能整理允许你保存一定量的副本。推荐开启以避免产生成千上万的改动副本。 - + revisions per day for the last month - + revisions per minute for the last 10 minutes - + revisions per hour for the last day - + revisions per 10 minutes for the last hour - + revisions per week till the end of time - + Views settings 查看设置 - + Tree - + Colors 颜色 - + Icon color: 图标颜色: - + Nothing 不显示 - + POV POV - + Label 标签 - + Progress 进度 - + Compile 编译 - + Text color: 文本颜色: - + Background color: 背景色: - + Folders 文件夹 - + Show ite&m count 显示条目数量(&M) - + Show summary 显示概要 - + &Nothing 不显示(&N) - + Text 文本 - + Outline 大纲 - + Visible columns 可见列 - + Goal 目标 - + Word count 字数统计 - + Percentage 百分比 - + Title 标题 - + Index cards 索引卡 - + Item colors 条目颜色 - + Border color: 边界颜色: - + Corner color: 角落颜色: - + Background 背景 - + Color: 颜色: - + Ctrl+S Ctrl+S - + Image: 图像: - + Text editor 文本编辑器 - + Font 字体 - + Family: 字体: - + Size: 大小: - + Misspelled: 拼写错误: - + Background: 背景: - + Paragraphs 段落 - + Line spacing: 行间距: - + Single 单个 - + 1.5 lines 1.5 行 - + Double 两倍 - + Proportional 成比例 - + % % - + Tab width: Tab 宽度: - + px 像素 - + Indent 1st line 首行缩进 - + Spacing: 间距: - + New 新建 - + Edit 编辑 - + Delete 删除 - + Theme name: 主题名: - + Apply 应用 - + Cancel 取消 - + Window Background 窗口背景 - + Text Background 文本背景 - + Text Options 文本选项 - + Paragraph Options 段落选项 - + Type: 类型: - + No Image 无图像 - + Tiled 平铺 - + Centered 中心 - + Stretched 拉伸 - + Scaled 成比例 - + Zoomed 放大 - + Opacity: 透明度: - + Position: 位置: - + Left - + Center 中心 - + Right - + Width: 宽度: - + Corner radius: 角落半径: - + Margins: 外间距: - + Padding: 内间距: - + Font: 字体: - + Style 样式 - + Cursor 光标 - + Use block insertion of 使用块级插入 - + Alignment: 对齐: - + Justify 校正 - + Alignment 对齐 - + Icon Size 图标大小 - + TextLabel 文本标签 - + Disable blinking 关闭闪烁 - + Text area 文本框 - + Max width 最大宽度 - + Left/Right margins: 左右外间距: - + Top/Bottom margins: 上下外间距: - + S&how progress 显示进度(&H) - + Show summar&y 显示概要(&Y) - + Show p&rogress 显示进度(&R) - + Old st&yle 旧样式(&Y) - + Transparent 透明 - + Restore defaults 恢复默认值 - + Style: 样式: - + Language: 语言: - + Font size: 字体大小: - + Restarting Manuskript ensures all settings take effect. 你需要重启 manuskript 以使得设置正确生效。 - + Show &word count 显示字数(&W) - + &Show word count 显示字数(&S) - + &New style 新样式(&N) - + Typewriter mode 打字机模式 - + Focus mode 专注模式 - + None - + Sentence 句子 - + Line - + Paragraph 段落 - + <p><b>The Revisions feature has been at the source of many reported issues. In this version of Manuskript it has been turned off by default for new projects in order to provide the best experience.</b></p><p>Why aren't these issues fixed already? <a href="https://www.theologeek.ch/manuskript/contribute/">We need your help to make Manuskript better!</a></p> + + + Show progress in chars next + to words + + + + + Char/Word Counter + + + + + Count spaces as chars + + + + + Show char c&ount + + + + + Sho&w char count + + SpellAction - + Spelling Suggestions 拼写建议 - + &Add to dictionary 加入字典(&A) - + &Remove from custom dictionary 从个人字典中删除(&R) + + + &New Character + + + + + &New Plot Item + + + + + &New World Item + + + + + &Correction Suggestions + + + + + &Correction Suggestion + + about @@ -2265,17 +2359,12 @@ Use that if you get YAML related error. characterModel - - New character - 新角色 - - - + Name 名字 - + Value @@ -2283,17 +2372,17 @@ Use that if you get YAML related error. characterTreeView - + Main 主要 - + Secondary 次要 - + Minor 不重要的 @@ -2409,12 +2498,12 @@ Use that if you get YAML related error. corkDelegate - + One line summary 一句话摘要 - + Full summary 完整摘要 @@ -2996,15 +3085,30 @@ Use that if you get YAML related error. - - {} words / {} - {} 字 / {} - - - + {} words {} 字 + + + ({} chars) {} words / {} + + + + + {} words / {} + + + + + {} chars + + + + + {} chars + + markdownSettings @@ -3209,12 +3313,12 @@ Use that if you get YAML related error. outlineItem - + {} words / {} ({}) {} 字 / {} ({}) - + {} words {} 字 @@ -3436,37 +3540,32 @@ Use that if you get YAML related error. plotModel - - New plot - 新情节 - - - + Name 名字 - + Meta 元(Meta) - + New step 新一步 - + Main 主要 - + Secondary 次要 - + Minor 不重要的 @@ -3813,111 +3912,56 @@ Use that if you get YAML related error. Search for... - - - Search in: - - - - - All - - - - - Title - 标题 - - - - Text - 文本 - - - - Summary - 摘要 - - - - Notes - 笔记 - - - - POV - POV - - - - Status - 状态 - - - - Label - 标签 - - - - Options: - - - - - Case sensitive - - settingsWindow - + New status 新建状态 - + New label 新标签 - + newtheme 新主题 - + New theme 新建主题 - + (read-only) (只读) - + Open Image - + Image files (*.jpg; *.jpeg; *.png) - + Error 错误 - + Unable to load selected file - + Unable to add selected image: {} @@ -4027,7 +4071,7 @@ Use that if you get YAML related error. textEditView - + Various 可变的 @@ -4329,212 +4373,212 @@ Use that if you get YAML related error. worldModel - + New item - + Fantasy world building - + Physical - + Climate - + Topography - + Astronomy - + Wild life - + Flora - + History - + Races - + Diseases - + Cultural - + Customs - + Food - + Languages - + Education - + Dresses - + Science - + Calendar - + Bodily language - + Ethics - + Religion - + Government - + Politics - + Gender roles - + Music and arts - + Architecture - + Military - + Technology - + Courtship - + Demography - + Transportation - + Medicine - + Magic system - + Rules - + Organization - + Magical objects - + Magical places - + Magical races - + Important places - + Important objects - + Natural resources diff --git a/i18n/manuskript_zh_HANT.ts b/i18n/manuskript_zh_HANT.ts index 8c64001..e480a0f 100644 --- a/i18n/manuskript_zh_HANT.ts +++ b/i18n/manuskript_zh_HANT.ts @@ -456,7 +456,7 @@ Use that if you get YAML related error. MainWindow - + General @@ -496,7 +496,7 @@ Use that if you get YAML related error. - + Name @@ -506,7 +506,7 @@ Use that if you get YAML related error. - + Summary @@ -516,7 +516,7 @@ Use that if you get YAML related error. - + Summary: @@ -526,17 +526,17 @@ Use that if you get YAML related error. - + One paragraph - + One page - + Full @@ -566,7 +566,7 @@ Use that if you get YAML related error. - + Next @@ -586,312 +586,312 @@ Use that if you get YAML related error. - + Filter - + Basic info - + Importance - + Motivation - + Goal - + Conflict - + Epiphany - + <html><head/><body><p align="right">One sentence<br/>summary</p></body></html> - + <html><head/><body><p align="right">One paragraph<br/>summary</p></body></html> - + Notes - + Detailed info - + Plots - + Plot - + Character(s) - + Description - + Result - + Resolution steps - + World - + Populates with empty data - + More - + Source of passion - + Source of conflict - + Outline - + Editor - + Debug - + FlatData - + Persos - + Labels - + &File - + &Recent - + &Help - + &Tools - + &Edit - + &View - + &Mode - + &Cheat sheet - + Sea&rch - + &Navigation - + &Open - + Ctrl+O - + &Save - + Ctrl+S - + Sa&ve as... - + Ctrl+Shift+S - + &Quit - + Ctrl+Q - + &Show help texts - + Ctrl+Shift+B - + &Spellcheck - + F9 - + &Labels... - + &Status... - + Tree - + &Simple - + &Fiction - + Index cards - + S&ettings - + F8 - + &Close project - + Co&mpile - + F6 - + &Frequency Analyzer @@ -901,562 +901,605 @@ Use that if you get YAML related error. - + &About - + About Manuskript - + Manuskript - + Project {} saved. - + WARNING: Project {} not saved. - + Project {} loaded. - + Project {} loaded with some errors: - + * {} wasn't found in project file. - + Project {} loaded with some errors. - + (~{} pages) - + Words: {}{} - + Book summary - + Project tree - + Metadata - + Story line - + Enter information about your book, and yourself. - + The basic situation, in the form of a 'What if...?' question. Ex: 'What if the most dangerous evil wizard wasn't able to kill a baby?' (Harry Potter) - + Take time to think about a one sentence (~50 words) summary of your book. Then expand it to a paragraph, then to a page, then to a full summary. - + Create your characters. - + Develop plots. - + Build worlds. Create hierarchy of broad categories down to specific details. - + Create the outline of your masterpiece. - + Write. - + Debug info. Sometimes useful. - + Dictionary - + Nothing - + POV - + Label - + Progress - + Compile - + Icon color - + Text color - + Background color - + Icon - + Text - + Background - + Border - + Corner - + Add plot step - + &Import… - + F7 - + &Copy - + Ctrl+C - + C&ut - + Ctrl+X - + &Paste - + Ctrl+V - + &Split… - + Ctrl+Shift+K - + Sp&lit at cursor - + Ctrl+K - + Ctrl+M - + Ctrl+D - + Del - + &Move Up - + Ctrl+Shift+Up - + M&ove Down - + Ctrl+Shift+Down - + Dupl&icate - + &Delete - + &Rename - + F2 - + Organi&ze - + M&erge - + &Format - + &Header - + &Level 1 (setext) - + Ctrl+Alt+1 - + Level &2 - + Ctrl+Alt+2 - + Level &1 (atx) - + Ctrl+1 - + L&evel 2 - + Ctrl+2 - + Level &3 - + Ctrl+3 - + Level &4 - + Ctrl+4 - + Level &5 - + Ctrl+5 - + Level &6 - + Ctrl+6 - + &Bold - + Ctrl+B - + &Italic - + Ctrl+I - + &Strike - + &Verbatim - + Su&perscript - + Ctrl++ - + Subsc&ript - + Ctrl+- - + Co&mment block - + Ctrl+Shift+C - + Clear &formats - + Ctrl+0 - + &Comment line(s) - + &Ordered list - + &Unordered list - + B&lockquote - + Remove selected plot step(s) - + The file {} does not exist. Has it been moved or deleted? - + Install {}{} to use spellcheck - + {} has no installed dictionaries - + {}{} is not installed - + Save project? - + Save changes to project "{}" before closing? - + Your changes will be lost if you don't save them. - + PyQt / Qt versions 5.11 and 5.12 are known to cause a crash which might result in a loss of data. - + PyQt {} and Qt {} are in use. - + Proceed with import at your own risk + + + Allow POV + + + + + Search + + + + + Ctrl+F + + + + + F3 + + + + + Shift+F3 + + + + + Situation + + + + + Status + + + + + Search + + + No results found + + Settings @@ -1471,7 +1514,7 @@ Use that if you get YAML related error. - + Revisions @@ -1481,17 +1524,17 @@ Use that if you get YAML related error. - + Labels - + Status - + Fullscreen @@ -1506,658 +1549,709 @@ Use that if you get YAML related error. - + Loading - + Automatically load last project on startup - + Saving - + Automatically save every - + minutes. - + If no changes during - + seconds. - + Save on project close - + <html><head/><body><p>If you check this option, your project will be saved as one single file. Easier to copy or backup, but does not allow collaborative editing, or versioning.<br/>If this is unchecked, your project will be saved as a folder containing many small files.</p></body></html> - + Save to one single file - + Revisions are a way to keep track of modifications. For each text item, it stores any changes you make to the main text, allowing you to see and restoring previous versions. - + Keep revisions - + S&mart remove - + Keep: - + Smart remove allows you to keep only a certain number of revisions. It is strongly recommended to use it, lest you file will becomes full of thousands of insignificant changes. - + revisions per day for the last month - + revisions per minute for the last 10 minutes - + revisions per hour for the last day - + revisions per 10 minutes for the last hour - + revisions per week till the end of time - + Views settings - + Tree - + Colors - + Icon color: - + Nothing - + POV - + Label - + Progress - + Compile - + Text color: - + Background color: - + Folders - + Show ite&m count - + Show summary - + &Nothing - + Text - + Outline - + Visible columns - + Goal - + Word count - + Percentage - + Title - + Index cards - + Item colors - + Border color: - + Corner color: - + Background - + Color: - + Ctrl+S - + Image: - + Text editor - + Font - + Family: - + Size: - + Misspelled: - + Background: - + Paragraphs - + Line spacing: - + Single - + 1.5 lines - + Double - + Proportional - + % - + Tab width: - + px - + Indent 1st line - + Spacing: - + New - + Edit - + Delete - + Theme name: - + Apply - + Cancel - + Window Background - + Text Background - + Text Options - + Paragraph Options - + Type: - + No Image - + Tiled - + Centered - + Stretched - + Scaled - + Zoomed - + Opacity: - + Position: - + Left - + Center - + Right - + Width: - + Corner radius: - + Margins: - + Padding: - + Font: - + Style - + Cursor - + Use block insertion of - + Alignment: - + Justify - + Alignment - + Icon Size - + TextLabel - + Disable blinking - + Text area - + Max width - + Left/Right margins: - + Top/Bottom margins: - + S&how progress - + Show summar&y - + Show p&rogress - + Old st&yle - + Transparent - + Restore defaults - + Style: - + Language: - + Font size: 字體大小: - + Restarting Manuskript ensures all settings take effect. - + Show &word count - + &Show word count - + &New style - + Typewriter mode - + Focus mode - + None - + Sentence - + Line - + Paragraph - + <p><b>The Revisions feature has been at the source of many reported issues. In this version of Manuskript it has been turned off by default for new projects in order to provide the best experience.</b></p><p>Why aren't these issues fixed already? <a href="https://www.theologeek.ch/manuskript/contribute/">We need your help to make Manuskript better!</a></p> + + + Show progress in chars next + to words + + + + + Char/Word Counter + + + + + Count spaces as chars + + + + + Show char c&ount + + + + + Sho&w char count + + SpellAction - + Spelling Suggestions - + &Add to dictionary - + &Remove from custom dictionary + + + &New Character + + + + + &New Plot Item + + + + + &New World Item + + + + + &Correction Suggestions + + + + + &Correction Suggestion + + about @@ -2259,17 +2353,12 @@ Use that if you get YAML related error. characterModel - - New character - - - - + Name - + Value @@ -2277,17 +2366,17 @@ Use that if you get YAML related error. characterTreeView - + Main - + Secondary - + Minor @@ -2403,12 +2492,12 @@ Use that if you get YAML related error. corkDelegate - + One line summary - + Full summary @@ -2990,13 +3079,28 @@ Use that if you get YAML related error. - - {} words / {} + + {} words - - {} words + + ({} chars) {} words / {} + + + + + {} words / {} + + + + + {} chars + + + + + {} chars @@ -3203,12 +3307,12 @@ Use that if you get YAML related error. outlineItem - + {} words / {} ({}) - + {} words @@ -3430,37 +3534,32 @@ Use that if you get YAML related error. plotModel - - New plot - - - - + Name - + Meta - + New step - + Main - + Secondary - + Minor @@ -3807,111 +3906,56 @@ Use that if you get YAML related error. Search for... - - - Search in: - - - - - All - - - - - Title - - - - - Text - - - - - Summary - - - - - Notes - - - - - POV - - - - - Status - - - - - Label - - - - - Options: - - - - - Case sensitive - - settingsWindow - + New status - + New label - + newtheme - + New theme - + (read-only) - + Open Image - + Image files (*.jpg; *.jpeg; *.png) - + Error 錯誤 - + Unable to load selected file - + Unable to add selected image: {} @@ -4021,7 +4065,7 @@ Use that if you get YAML related error. textEditView - + Various @@ -4323,212 +4367,212 @@ Use that if you get YAML related error. worldModel - + New item - + Fantasy world building - + Physical - + Climate - + Topography - + Astronomy - + Wild life - + Flora - + History - + Races - + Diseases - + Cultural - + Customs - + Food - + Languages - + Education - + Dresses - + Science - + Calendar - + Bodily language - + Ethics - + Religion - + Government - + Politics - + Gender roles - + Music and arts - + Architecture - + Military - + Technology - + Courtship - + Demography - + Transportation - + Medicine - + Magic system - + Rules - + Organization - + Magical objects - + Magical places - + Magical races - + Important places - + Important objects - + Natural resources diff --git a/manuskript/enums.py b/manuskript/enums.py index 0b86392..3b3658d 100644 --- a/manuskript/enums.py +++ b/manuskript/enums.py @@ -1,5 +1,5 @@ #!/usr/bin/env python -#--!-- coding: utf8 --!-- +# --!-- coding: utf8 --!-- from enum import IntEnum @@ -17,6 +17,7 @@ class Character(IntEnum): summaryFull = 9 notes = 10 pov = 11 + infos = 12 class Plot(IntEnum): name = 0 @@ -67,3 +68,18 @@ class Abstract(IntEnum): title = 0 ID = 1 type = 2 + +class FlatData(IntEnum): + summarySituation = 0, + summarySentence = 1, + summaryPara = 2, + summaryPage = 3, + summaryFull = 4 + +class Model(IntEnum): + Character = 0 + Plot = 1 + PlotStep = 2 + World = 3 + Outline = 4 + FlatData = 5 \ No newline at end of file diff --git a/manuskript/functions/__init__.py b/manuskript/functions/__init__.py index 5f790b5..4acae75 100644 --- a/manuskript/functions/__init__.py +++ b/manuskript/functions/__init__.py @@ -9,7 +9,7 @@ from PyQt5.QtCore import Qt, QRect, QStandardPaths, QObject, QRegExp, QDir from PyQt5.QtCore import QUrl, QTimer from PyQt5.QtGui import QBrush, QIcon, QPainter, QColor, QImage, QPixmap from PyQt5.QtGui import QDesktopServices -from PyQt5.QtWidgets import qApp, QFileDialog, QTextEdit +from PyQt5.QtWidgets import qApp, QFileDialog from manuskript.enums import Outline @@ -450,5 +450,48 @@ def inspect(): s.function)) print(" " + "".join(s.code_context)) + +def search(searchRegex, text): + """ + Search all occurrences of a regex in a text. + + :param searchRegex: a regex object with the search to perform + :param text: text to search on + :return: list of tuples (startPos, endPos) + """ + if text is not None: + return [(m.start(), m.end(), getSearchResultContext(text, m.start(), m.end())) for m in searchRegex.finditer(text)] + else: + return [] + +def getSearchResultContext(text, startPos, endPos): + matchSize = endPos - startPos + maxContextSize = max(matchSize, 600) + extraContextSize = int((maxContextSize - matchSize) / 2) + separator = "[...]" + + context = "" + + i = startPos - 1 + while i > 0 and (startPos - i) < extraContextSize and text[i] != '\n': + i -= 1 + contextStartPos = i + if i > 0: + context += separator + " " + context += text[contextStartPos:startPos].replace('\n', '') + + context += '' + text[startPos:endPos].replace('\n', '') + '' + + i = endPos + while i < len(text) and (i - endPos) < extraContextSize and text[i] != '\n': + i += 1 + contextEndPos = i + + context += text[endPos:contextEndPos].replace('\n', '') + if i < len(text): + context += " " + separator + + return context + # Spellchecker loads writablePath from this file, so we need to load it after they get defined from manuskript.functions.spellchecker import Spellchecker diff --git a/manuskript/mainWindow.py b/manuskript/mainWindow.py index c3aff34..7e96af2 100644 --- a/manuskript/mainWindow.py +++ b/manuskript/mainWindow.py @@ -9,7 +9,7 @@ from PyQt5.QtCore import (pyqtSignal, QSignalMapper, QTimer, QSettings, Qt, QPoi QRegExp, QUrl, QSize, QModelIndex) from PyQt5.QtGui import QStandardItemModel, QIcon, QColor from PyQt5.QtWidgets import QMainWindow, QHeaderView, qApp, QMenu, QActionGroup, QAction, QStyle, QListWidgetItem, \ - QLabel, QDockWidget, QWidget, QMessageBox + QLabel, QDockWidget, QWidget, QMessageBox, QLineEdit from manuskript import settings from manuskript.enums import Character, PlotStep, Plot, World, Outline @@ -129,6 +129,7 @@ class MainWindow(QMainWindow, Ui_MainWindow): self.actCopy.triggered.connect(self.documentsCopy) self.actCut.triggered.connect(self.documentsCut) self.actPaste.triggered.connect(self.documentsPaste) + self.actSearch.triggered.connect(self.doSearch) self.actRename.triggered.connect(self.documentsRename) self.actDuplicate.triggered.connect(self.documentsDuplicate) self.actDelete.triggered.connect(self.documentsDelete) @@ -499,6 +500,13 @@ class MainWindow(QMainWindow, Ui_MainWindow): def documentsPaste(self): "Paste clipboard item(s) into selected item." if self._lastFocus: self._lastFocus.paste() + def doSearch(self): + "Do a global search." + self.dckSearch.show() + self.dckSearch.activateWindow() + searchTextInput = self.dckSearch.findChild(QLineEdit, 'searchTextInput') + searchTextInput.setFocus() + searchTextInput.selectAll() def documentsRename(self): "Rename selected item." if self._lastFocus: self._lastFocus.rename() diff --git a/manuskript/models/characterModel.py b/manuskript/models/characterModel.py index 4480d3a..ae0eab9 100644 --- a/manuskript/models/characterModel.py +++ b/manuskript/models/characterModel.py @@ -3,11 +3,14 @@ from PyQt5.QtCore import QModelIndex, Qt, QAbstractItemModel, QVariant from PyQt5.QtGui import QIcon, QPixmap, QColor -from manuskript.functions import randomColor, iconColor, mainWindow -from manuskript.enums import Character as C +from manuskript.functions import randomColor, iconColor, mainWindow, search +from manuskript.enums import Character as C, Model +from manuskript.searchLabels import CharacterSearchLabels +from manuskript.models.searchableModel import searchableModel +from manuskript.models.searchableItem import searchableItem -class characterModel(QAbstractItemModel): +class characterModel(QAbstractItemModel, searchableModel): def __init__(self, parent): QAbstractItemModel.__init__(self, parent) @@ -229,12 +232,14 @@ class characterModel(QAbstractItemModel): c.infos.pop(r) self.endRemoveRows() + def searchableItems(self): + return self.characters + ############################################################################### # CHARACTER ############################################################################### - -class Character(): +class Character(searchableItem): def __init__(self, model, name="No name", importance = 0): self._model = model self.lastPath = "" @@ -248,6 +253,8 @@ class Character(): self.infos = [] + super().__init__(CharacterSearchLabels) + def name(self): return self._data[C.name.value] @@ -263,6 +270,12 @@ class Character(): def index(self, column=0): return self._model.indexFromItem(self, column) + def data(self, column): + if column == "Info": + return self.infos + else: + return self._data.get(column, None) + def assignRandomColor(self): """ Assigns a random color the the character. @@ -325,6 +338,41 @@ class Character(): r.append((i.description, i.value)) return r + def searchTitle(self, column): + return self.name() + + def searchOccurrences(self, searchRegex, column): + results = [] + + data = self.searchData(column) + if isinstance(data, list): + for i in range(0, len(data)): + # For detailed info we will highlight the full row, so we pass the row index + # to the highlighter instead of the (startPos, endPos) of the match itself. + results += [self.wrapSearchOccurrence(column, i, 0, context) for + (startPos, endPos, context) in search(searchRegex, data[i].description)] + results += [self.wrapSearchOccurrence(column, i, 0, context) for + (startPos, endPos, context) in search(searchRegex, data[i].value)] + else: + results += super().searchOccurrences(searchRegex, column) + + return results + + def searchID(self): + return self.ID() + + def searchPath(self, column): + return [self.translate("Characters"), self.name(), self.translate(self.searchColumnLabel(column))] + + def searchData(self, column): + if column == C.infos: + return self.infos + else: + return self.data(column) + + def searchModel(self): + return Model.Character + class CharacterInfo(): def __init__(self, character, description="", value=""): diff --git a/manuskript/models/flatDataModelWrapper.py b/manuskript/models/flatDataModelWrapper.py new file mode 100644 index 0000000..57ac262 --- /dev/null +++ b/manuskript/models/flatDataModelWrapper.py @@ -0,0 +1,53 @@ +#!/usr/bin/env python +# --!-- coding: utf8 --!-- + +from manuskript.enums import FlatData, Model +from manuskript.searchLabels import FlatDataSearchLabels + +from manuskript.models.searchableModel import searchableModel +from manuskript.models.searchableItem import searchableItem + +""" +All searches are performed on models inheriting from searchableModel, but special metadata such as book summaries +are stored directly on a GUI element (QStandardItemModel). We wrap this GUI element inside this wrapper class +so it exposes the same interface for searches. +""" +class flatDataModelWrapper(searchableModel, searchableItem): + def __init__(self, qstandardItemModel): + self.qstandardItemModel = qstandardItemModel + + def searchableItems(self): + return [flatDataItemWrapper(self.qstandardItemModel)] + + +class flatDataItemWrapper(searchableItem): + def __init__(self, qstandardItemModel): + super().__init__(FlatDataSearchLabels) + self.qstandardItemModel = qstandardItemModel + + def searchModel(self): + return Model.FlatData + + def searchID(self): + return None + + def searchTitle(self, column): + return self.translate(self.searchColumnLabel(column)) + + def searchPath(self, column): + return [self.translate("Summary"), self.translate(self.searchColumnLabel(column))] + + def searchData(self, column): + return self.qstandardItemModel.item(1, self.searchDataIndex(column)).text() + + @staticmethod + def searchDataIndex(column): + columnIndices = { + FlatData.summarySituation: 0, + FlatData.summarySentence: 1, + FlatData.summaryPara: 2, + FlatData.summaryPage: 3, + FlatData.summaryFull: 4 + } + + return columnIndices[column] \ No newline at end of file diff --git a/manuskript/models/outlineItem.py b/manuskript/models/outlineItem.py index b2ab2fa..1d80be6 100644 --- a/manuskript/models/outlineItem.py +++ b/manuskript/models/outlineItem.py @@ -8,10 +8,13 @@ from PyQt5.QtGui import QFont, QIcon from PyQt5.QtWidgets import qApp from lxml import etree as ET from manuskript.models.abstractItem import abstractItem +from manuskript.models.searchableItem import searchableItem from manuskript import enums from manuskript import functions as F from manuskript import settings from manuskript.converters import HTML2PlainText +from manuskript.searchLabels import OutlineSearchLabels +from manuskript.enums import Outline, Model try: locale.setlocale(locale.LC_ALL, '') @@ -21,7 +24,7 @@ except: pass -class outlineItem(abstractItem): +class outlineItem(abstractItem, searchableItem): enum = enums.Outline @@ -30,6 +33,7 @@ class outlineItem(abstractItem): def __init__(self, model=None, title="", _type="folder", xml=None, parent=None, ID=None): abstractItem.__init__(self, model, title, _type, xml, parent, ID) + searchableItem.__init__(self, OutlineSearchLabels) self.defaultTextType = None if not self._data.get(self.enum.compile): @@ -355,8 +359,7 @@ class outlineItem(abstractItem): return lst - def findItemsContaining(self, text, columns, mainWindow=F.mainWindow(), - caseSensitive=False, recursive=True): + def findItemsContaining(self, text, columns, mainWindow=F.mainWindow(), caseSensitive=False, recursive=True): """Returns a list if IDs of all subitems containing ``text`` in columns ``columns`` (being a list of int). @@ -369,16 +372,14 @@ class outlineItem(abstractItem): return lst - def itemContains(self, text, columns, mainWindow=F.mainWindow(), - caseSensitive=False): + def itemContains(self, text, columns, mainWindow=F.mainWindow(), caseSensitive=False): lst = [] text = text.lower() if not caseSensitive else text for c in columns: - if c == self.enum.POV and self.POV(): - c = mainWindow.mdlCharacter.getCharacterByID(self.POV()) - if c: - searchIn = c.name() + character = mainWindow.mdlCharacter.getCharacterByID(self.POV()) + if character: + searchIn = character.name() else: searchIn = "" print("Character POV not found:", self.POV()) @@ -393,7 +394,6 @@ class outlineItem(abstractItem): searchIn = self.data(c) searchIn = searchIn.lower() if not caseSensitive else searchIn - if text in searchIn: if not self.ID() in lst: lst.append(self.ID()) @@ -515,3 +515,39 @@ class outlineItem(abstractItem): for child in root: if child.tag == "revision": self.appendRevision(child.attrib["timestamp"], child.attrib["text"]) + + ####################################################################### + # Search + ####################################################################### + def searchModel(self): + return Model.Outline + + def searchID(self): + return self.data(Outline.ID) + + def searchTitle(self, column): + return self.title() + + def searchPath(self, column): + return [self.translate("Outline")] + self.path().split(' > ') + [self.translate(self.searchColumnLabel(column))] + + def searchData(self, column): + mainWindow = F.mainWindow() + + searchData = None + + if column == self.enum.POV and self.POV(): + character = mainWindow.mdlCharacter.getCharacterByID(self.POV()) + if character: + searchData = character.name() + + elif column == self.enum.status: + searchData = mainWindow.mdlStatus.item(F.toInt(self.status()), 0).text() + + elif column == self.enum.label: + searchData = mainWindow.mdlLabels.item(F.toInt(self.label()), 0).text() + + else: + searchData = self.data(column) + + return searchData diff --git a/manuskript/models/outlineModel.py b/manuskript/models/outlineModel.py index 63494e2..979b7f1 100644 --- a/manuskript/models/outlineModel.py +++ b/manuskript/models/outlineModel.py @@ -2,12 +2,29 @@ # --!-- coding: utf8 --!-- from manuskript.models.abstractModel import abstractModel +from manuskript.models.searchableModel import searchableModel -class outlineModel(abstractModel): +class outlineModel(abstractModel, searchableModel): def __init__(self, parent): abstractModel.__init__(self, parent) def findItemsByPOV(self, POV): "Returns a list of IDs of all items whose POV is ``POV``." return self.rootItem.findItemsByPOV(POV) + + def searchableItems(self): + result = [] + + for child in self.rootItem.children(): + result += self._searchableItems(child) + + return result + + def _searchableItems(self, item): + result = [item] + + for child in item.children(): + result += self._searchableItems(child) + + return result diff --git a/manuskript/models/plotModel.py b/manuskript/models/plotModel.py index 068257f..113b75e 100644 --- a/manuskript/models/plotModel.py +++ b/manuskript/models/plotModel.py @@ -8,12 +8,15 @@ from PyQt5.QtGui import QStandardItem from PyQt5.QtGui import QStandardItemModel from PyQt5.QtWidgets import QAction, QMenu -from manuskript.enums import Plot -from manuskript.enums import PlotStep +from manuskript.enums import Plot, PlotStep, Model from manuskript.functions import toInt, mainWindow +from manuskript.models.searchResultModel import searchResultModel +from manuskript.searchLabels import PlotSearchLabels, PLOT_STEP_COLUMNS_OFFSET +from manuskript.functions import search +from manuskript.models.searchableModel import searchableModel +from manuskript.models.searchableItem import searchableItem - -class plotModel(QStandardItemModel): +class plotModel(QStandardItemModel, searchableModel): def __init__(self, parent): QStandardItemModel.__init__(self, 0, 3, parent) self.setHorizontalHeaderLabels([i.name for i in Plot]) @@ -266,3 +269,118 @@ class plotModel(QStandardItemModel): mpr.mapped.connect(self.addPlotPerso) self.mw.btnAddPlotPerso.setMenu(menu) + + ####################################################################### + # Search + ####################################################################### + def searchableItems(self): + items = [] + + for i in range(self.rowCount()): + items.append(plotItemSearchWrapper(i, self.item, self.mw.mdlCharacter.getCharacterByID)) + + return items + + +class plotItemSearchWrapper(searchableItem): + def __init__(self, rowIndex, getItem, getCharacterByID): + self.rowIndex = rowIndex + self.getItem = getItem + self.getCharacterByID = getCharacterByID + super().__init__(PlotSearchLabels) + + def searchOccurrences(self, searchRegex, column): + results = [] + + plotName = self.getItem(self.rowIndex, Plot.name).text() + if column >= PLOT_STEP_COLUMNS_OFFSET: + results += self.searchInPlotSteps(self.rowIndex, plotName, column, column - PLOT_STEP_COLUMNS_OFFSET, searchRegex, False) + else: + item_name = self.getItem(self.rowIndex, Plot.name).text() + if column == Plot.characters: + charactersList = self.getItem(self.rowIndex, Plot.characters) + + for i in range(charactersList.rowCount()): + characterID = charactersList.child(i).text() + + character = self.getCharacterByID(characterID) + if character: + columnText = character.name() + + characterResults = search(searchRegex, columnText) + if len(characterResults): + # We will highlight the full character row in the plot characters list, so we + # return the row index instead of the match start and end positions. + results += [ + searchResultModel(Model.Plot, self.getItem(self.rowIndex, Plot.ID).text(), column, + self.translate(item_name), + self.searchPath(column), + [(i, 0)], context) for start, end, context in + search(searchRegex, columnText)] + else: + results += super().searchOccurrences(searchRegex, column) + if column == Plot.name: + results += self.searchInPlotSteps(self.rowIndex, plotName, Plot.name, PlotStep.name, + searchRegex, False) + elif column == Plot.summary: + results += self.searchInPlotSteps(self.rowIndex, plotName, Plot.summary, PlotStep.summary, + searchRegex, True) + + return results + + def searchModel(self): + return Model.Plot + + def searchID(self): + return self.getItem(self.rowIndex, Plot.ID).text() + + def searchTitle(self, column): + return self.getItem(self.rowIndex, Plot.name).text() + + def searchPath(self, column): + def _path(item): + path = [] + + if item.parent(): + path += _path(item.parent()) + path.append(item.text()) + + return path + + return [self.translate("Plot")] + _path(self.getItem(self.rowIndex, Plot.name)) + [self.translate(self.searchColumnLabel(column))] + + def searchData(self, column): + return self.getItem(self.rowIndex, column).text() + + def plotStepPath(self, plotName, plotStepName, column): + return [self.translate("Plot"), plotName, plotStepName, self.translate(self.searchColumnLabel(column))] + + def searchInPlotSteps(self, plotIndex, plotName, plotColumn, plotStepColumn, searchRegex, searchInsidePlotStep): + results = [] + + # Plot step info can be found in two places: the own list of plot steps (this is the case for ie. name and meta + # fields) and "inside" the plot step once it is selected in the list (as it's the case for the summary). + if searchInsidePlotStep: + # We are searching *inside* the plot step, so we return both the row index (for selecting the right plot + # step in the list), and (start, end) positions of the match inside the text field for highlighting it. + getSearchData = lambda rowIndex, start, end, context: ([(rowIndex, 0), (start, end)], context) + else: + # We are searching *in the plot step row*, so we only return the row index for selecting the right plot + # step in the list when highlighting search results. + getSearchData = lambda rowIndex, start, end, context: ([(rowIndex, 0)], context) + + item = self.getItem(plotIndex, Plot.steps) + for i in range(item.rowCount()): + if item.child(i, PlotStep.ID): + plotStepName = item.child(i, PlotStep.name).text() + plotStepText = item.child(i, plotStepColumn).text() + + # We will highlight the full plot step row in the plot steps list, so we + # return the row index instead of the match start and end positions. + results += [searchResultModel(Model.PlotStep, self.getItem(plotIndex, Plot.ID).text(), plotStepColumn, + self.translate(plotStepName), + self.plotStepPath(plotName, plotStepName, plotColumn), + *getSearchData(i, start, end, context)) for start, end, context in + search(searchRegex, plotStepText)] + + return results \ No newline at end of file diff --git a/manuskript/models/searchFilter.py b/manuskript/models/searchFilter.py new file mode 100644 index 0000000..ae2096d --- /dev/null +++ b/manuskript/models/searchFilter.py @@ -0,0 +1,32 @@ +#!/usr/bin/env python +# --!-- coding: utf8 --!-- + + +class searchFilter: + def __init__(self, label, enabled, modelColumns = None): + if not isinstance(label, str): + raise TypeError("label must be a str") + + if not isinstance(enabled, bool): + raise TypeError("enabled must be a bool") + + if modelColumns is not None and (not isinstance(modelColumns, list)): + raise TypeError("modelColumns must be a list or None") + + self._label = label + self._enabled = enabled + self._modelColumns = modelColumns + if self._modelColumns is None: + self._modelColumns = [] + + def label(self): + return self._label + + def enabled(self): + return self._enabled + + def modelColumns(self): + return self._modelColumns + + def setEnabled(self, enabled): + self._enabled = enabled diff --git a/manuskript/models/searchResultModel.py b/manuskript/models/searchResultModel.py new file mode 100644 index 0000000..07ad038 --- /dev/null +++ b/manuskript/models/searchResultModel.py @@ -0,0 +1,44 @@ +#!/usr/bin/env python +# --!-- coding: utf8 --!-- + + +class searchResultModel(): + def __init__(self, model_type, model_id, column, title, path, pos, context): + self._type = model_type + self._id = model_id + self._column = column + self._title = title + self._path = path + self._pos = pos + self._context = context + + def type(self): + return self._type + + def id(self): + return self._id + + def column(self): + return self._column + + def title(self): + return self._title + + def path(self): + return self._path + + def pos(self): + return self._pos + + def context(self): + return self._context + + def __repr__(self): + return "(%s, %s, %s, %s, %s, %s, %s)" % (self._type, self._id, self._column, self._title, self._path, self._pos, self._context) + + def __eq__(self, other): + return self.type() == other.type() and \ + self.id() == other.id() and \ + self.column == other.column and \ + self.pos() == other.pos() and \ + self.context == other.context diff --git a/manuskript/models/searchableItem.py b/manuskript/models/searchableItem.py new file mode 100644 index 0000000..25ca23b --- /dev/null +++ b/manuskript/models/searchableItem.py @@ -0,0 +1,38 @@ +#!/usr/bin/env python +# --!-- coding: utf8 --!-- + + +from manuskript.models.searchResultModel import searchResultModel +from manuskript.functions import search +from PyQt5.QtCore import QCoreApplication + +class searchableItem(): + def __init__(self, searchColumnLabels): + self._searchColumnLabels = searchColumnLabels + + def searchOccurrences(self, searchRegex, column): + return [self.wrapSearchOccurrence(column, startPos, endPos, context) for (startPos, endPos, context) in search(searchRegex, self.searchData(column))] + + def wrapSearchOccurrence(self, column, startPos, endPos, context): + return searchResultModel(self.searchModel(), self.searchID(), column, self.searchTitle(column), self.searchPath(column), [(startPos, endPos)], context) + + def searchModel(self): + raise NotImplementedError + + def searchID(self): + raise NotImplementedError + + def searchTitle(self, column): + raise NotImplementedError + + def searchPath(self, column): + return [] + + def searchData(self, column): + raise NotImplementedError + + def searchColumnLabel(self, column): + return self._searchColumnLabels.get(column, "") + + def translate(self, text): + return QCoreApplication.translate("MainWindow", text) diff --git a/manuskript/models/searchableModel.py b/manuskript/models/searchableModel.py new file mode 100644 index 0000000..c7246b9 --- /dev/null +++ b/manuskript/models/searchableModel.py @@ -0,0 +1,15 @@ +#!/usr/bin/env python +# --!-- coding: utf8 --!-- + + +class searchableModel(): + + def searchOccurrences(self, searchRegex, columns): + results = [] + for item in self.searchableItems(): + for column in columns: + results += item.searchOccurrences(searchRegex, column) + return results + + def searchableItems(self): + raise NotImplementedError diff --git a/manuskript/models/worldModel.py b/manuskript/models/worldModel.py index eeb6d1e..475736a 100644 --- a/manuskript/models/worldModel.py +++ b/manuskript/models/worldModel.py @@ -1,18 +1,20 @@ #!/usr/bin/env python # --!-- coding: utf8 --!-- -from PyQt5.QtCore import QModelIndex -from PyQt5.QtCore import QSize +from PyQt5.QtCore import QModelIndex, QSize from PyQt5.QtCore import Qt, QMimeData, QByteArray from PyQt5.QtGui import QStandardItem, QBrush, QFontMetrics from PyQt5.QtGui import QStandardItemModel, QColor from PyQt5.QtWidgets import QMenu, QAction, qApp -from manuskript.enums import World +from manuskript.enums import World, Model from manuskript.functions import mainWindow from manuskript.ui import style as S +from manuskript.models.searchableModel import searchableModel +from manuskript.models.searchableItem import searchableItem +from manuskript.searchLabels import WorldSearchLabels -class worldModel(QStandardItemModel): +class worldModel(QStandardItemModel, searchableModel): def __init__(self, parent): QStandardItemModel.__init__(self, 0, len(World), parent) self.mw = mainWindow() @@ -356,3 +358,51 @@ class worldModel(QStandardItemModel): return QSize(0, h + 6) return QStandardItemModel.data(self, index, role) + + ####################################################################### + # Search + ####################################################################### + def searchableItems(self): + def readAll(item): + items = [WorldItemSearchWrapper(item, self.itemID(item), self.indexFromItem(item), self.data)] + + for c in self.children(item): + items += readAll(c) + + return items + + return readAll(self.invisibleRootItem()) + +class WorldItemSearchWrapper(searchableItem): + def __init__(self, item, itemID, itemIndex, getColumnData): + super().__init__(WorldSearchLabels) + self.item = item + self.itemID = itemID + self.itemIndex = itemIndex + self.getColumnData = getColumnData + + def searchModel(self): + return Model.World + + def searchID(self): + return self.itemID + + def searchTitle(self, column): + return self.item.text() + + def searchPath(self, column): + + def _path(item): + path = [] + + if item.parent(): + path += _path(item.parent()) + path.append(item.text()) + + return path + + return [self.translate("World")] + _path(self.item) + [self.translate(self.searchColumnLabel(column))] + + def searchData(self, column): + return self.getColumnData(self.itemIndex.sibling(self.itemIndex.row(), column)) + diff --git a/manuskript/searchLabels.py b/manuskript/searchLabels.py new file mode 100644 index 0000000..587e468 --- /dev/null +++ b/manuskript/searchLabels.py @@ -0,0 +1,56 @@ +#!/usr/bin/env python +# --!-- coding: utf8 --!-- + +from manuskript.enums import Outline, Character, FlatData, World, Plot, PlotStep + +OutlineSearchLabels = { + Outline.title: "Title", + Outline.text: "Text", + Outline.summarySentence: "One sentence summary", + Outline.summaryFull: "Summary", + Outline.POV: "POV", + Outline.notes: "Notes", + Outline.status: "Status", + Outline.label: "Label" +} + +CharacterSearchLabels = { + Character.name: "Name", + Character.motivation: "Motivation", + Character.goal: "Goal", + Character.conflict: "Conflict", + Character.epiphany: "Epiphany", + Character.summarySentence: "One sentence summary", + Character.summaryPara: "One paragraph summary", + Character.summaryFull: "Summary", + Character.notes: "Notes", + Character.infos: "Detailed info" +} + +FlatDataSearchLabels = { + FlatData.summarySituation: "Situation", + FlatData.summarySentence: "One sentence summary", + FlatData.summaryPara: "One paragraph summary", + FlatData.summaryPage: "One page summary", + FlatData.summaryFull: "Full summary" +} + +WorldSearchLabels = { + World.name: "Name", + World.description: "Description", + World.passion: "Passion", + World.conflict: "Conflict" +} + +# Search menu includes one single option for both plot and plotStep models. For plotStep related fields +# (like PlotStep.meta) we add an offset so it is not confused with the Plot enum value mapping to the same integer. +PLOT_STEP_COLUMNS_OFFSET = 30 + +PlotSearchLabels = { + Plot.name: "Name", + Plot.description: "Description", + Plot.characters: "Characters", + Plot.result: "Result", + Plot.summary: "Summary", + PLOT_STEP_COLUMNS_OFFSET + PlotStep.meta: "Meta" +} diff --git a/manuskript/tests/models/test_searchFilter.py b/manuskript/tests/models/test_searchFilter.py new file mode 100644 index 0000000..8c484d0 --- /dev/null +++ b/manuskript/tests/models/test_searchFilter.py @@ -0,0 +1,41 @@ +#!/usr/bin/env python +# --!-- coding: utf8 --!-- + +import pytest +from manuskript.models.searchFilter import searchFilter + + +def test_searchFilter_constructionOk(): + filter = searchFilter("label", True, [3]) + assert filter.label() == "label" + assert filter.enabled() is True + assert filter.modelColumns() == [3] + + +def test_searchFilter_constructionOkWithNoneModelColumn(): + filter = searchFilter("label", True) + assert filter.label() == "label" + assert filter.enabled() is True + assert filter.modelColumns() == [] + + +def test_searchFilter_constructionBadLabelType(): + with pytest.raises(TypeError, match=r".*label must be a str.*"): + searchFilter(13, True, [3]) + + +def test_searchFilter_constructionBadEnabledType(): + with pytest.raises(TypeError, match=r".*enabled must be a bool.*"): + searchFilter("label", 3, [3]) + + +def test_searchFilter_constructionBadModelColumnType(): + with pytest.raises(TypeError, match=r".*modelColumns must be a list or None.*"): + searchFilter("label", False, True) + + +def test_searchFilter_setEnabled(): + filter = searchFilter("label", True, [3]) + assert filter.enabled() is True + filter.setEnabled(False) + assert filter.enabled() is False diff --git a/manuskript/tests/models/test_searchResultModel.py b/manuskript/tests/models/test_searchResultModel.py new file mode 100644 index 0000000..62d71ca --- /dev/null +++ b/manuskript/tests/models/test_searchResultModel.py @@ -0,0 +1,16 @@ +#!/usr/bin/env python +# --!-- coding: utf8 --!-- + +from manuskript.models.searchResultModel import searchResultModel +from manuskript.enums import Character + + +def test_searchResultModel_constructionOk(): + searchResult = searchResultModel("Character", "3", Character.notes, "Lucas", "A > B > C", (15, 18), "This is Lucas") + assert searchResult.id() == "3" + assert searchResult.column() == Character.notes + assert searchResult.title() == "Lucas" + assert searchResult.path() == "A > B > C" + assert searchResult.pos() == (15, 18) + assert searchResult.context() == "This is Lucas" + diff --git a/manuskript/tests/test_functions.py b/manuskript/tests/test_functions.py index 8fb9fa4..fc8dffc 100644 --- a/manuskript/tests/test_functions.py +++ b/manuskript/tests/test_functions.py @@ -3,6 +3,7 @@ """Tests for functions""" +import re from manuskript import functions as F def test_wordCount(): @@ -94,3 +95,52 @@ def test_mainWindow(): F.printObjects() assert len(F.findWidgetsOfClass(QWidget)) > 0 assert len(F.findWidgetsOfClass(QLCDNumber)) == 0 + + +def test_search_noMatch(): + assert F.search(re.compile("text"), "foo") == [] + + +def test_search_singleLine_fullMatch(): + assert F.search(re.compile("text"), "text") == [(0, 4, "text")] + + +def test_search_singleLine_start(): + assert F.search(re.compile("text"), "text is this") == [(0, 4, "text is this")] + + +def test_search_singleLine_end(): + assert F.search(re.compile("text"), "This is text") == [(8, 12, "This is text")] + + +def test_search_multipleLines_fullMatch(): + assert F.search(re.compile("text"), "This is\ntext\nOK") == [(8, 12, "[...] text [...]")] + + +def test_search_multipleLines_start(): + assert F.search(re.compile("text"), "This is\ntext oh yeah\nOK") == [(8, 12, "[...] text oh yeah [...]")] + + +def test_search_multipleLines_end(): + assert F.search(re.compile("text"), "This is\nsome text\nOK") == [(13, 17, "[...] some text [...]")] + +def test_search_multipleLines_full(): + assert F.search(re.compile("text"), "This is\ntext\nOK") == [(8, 12, "[...] text [...]")] + + +def test_search_multiple_strMatches(): + assert F.search(re.compile("text"), "text, text and more text") == [ + (0, 4, "text, text and more text"), + (6, 10, "text, text and more text"), + (20, 24, "text, text and more text") + ] + + +def test_search_multiple_strMatches_caseSensitive(): + assert F.search(re.compile("text"), "TeXt, TEXT and more text") == [(20, 24, "TeXt, TEXT and more text")] + + assert F.search(re.compile("text", re.IGNORECASE), "TeXt, TEXT and more text") == [ + (0, 4, "TeXt, TEXT and more text"), + (6, 10, "TeXt, TEXT and more text"), + (20, 24, "TeXt, TEXT and more text") + ] \ No newline at end of file diff --git a/manuskript/tests/ui/test_searchMenu.py b/manuskript/tests/ui/test_searchMenu.py new file mode 100644 index 0000000..659c471 --- /dev/null +++ b/manuskript/tests/ui/test_searchMenu.py @@ -0,0 +1,56 @@ +#!/usr/bin/env python +# --!-- coding: utf8 --!-- + +from manuskript.ui.searchMenu import searchMenu +from manuskript.enums import Outline, Character, FlatData, World, Plot, PlotStep, Model +from manuskript.searchLabels import PLOT_STEP_COLUMNS_OFFSET + + +def triggerFilter(filterKey, actions): + list(filter(lambda action: action.data() == filterKey, actions))[0].trigger() + + +def test_searchMenu_defaultColumns(): + """ + By default all model columns are selected. + """ + search_menu = searchMenu() + + assert set(search_menu.columns(Model.Outline)) == { + Outline.title, Outline.text, Outline.summaryFull, + Outline.summarySentence, Outline.notes, Outline.POV, + Outline.status, Outline.label + } + + assert set(search_menu.columns(Model.Character)) == { + Character.name, Character.motivation, Character.goal, Character.conflict, + Character.epiphany, Character.summarySentence, Character.summaryPara, + Character.summaryFull, Character.notes, Character.infos + } + + assert set(search_menu.columns(Model.FlatData)) == { + FlatData.summarySituation, FlatData.summarySentence, FlatData.summaryPara, + FlatData.summaryPage, FlatData.summaryFull + } + + assert set(search_menu.columns(Model.World)) == { + World.name, World.description, World.passion, World.conflict + } + + assert set(search_menu.columns(Model.Plot)) == { + Plot.name, Plot.description, Plot.characters, Plot.result, + Plot.summary, PLOT_STEP_COLUMNS_OFFSET + PlotStep.meta + } + + +def test_searchMenu_someColumns(): + """ + When deselecting some filters the columns associated to those filters are not returned. + """ + search_menu = searchMenu() + + triggerFilter(Model.Outline, search_menu.actions()) + triggerFilter(Model.Character, search_menu.actions()) + + assert set(search_menu.columns(Model.Outline)) == set() + assert set(search_menu.columns(Model.Character)) == set() diff --git a/manuskript/ui/highlighters/searchResultHighlighters/__init__.py b/manuskript/ui/highlighters/searchResultHighlighters/__init__.py new file mode 100644 index 0000000..7af0224 --- /dev/null +++ b/manuskript/ui/highlighters/searchResultHighlighters/__init__.py @@ -0,0 +1,2 @@ +#!/usr/bin/env python +# --!-- coding: utf8 --!-- diff --git a/manuskript/ui/highlighters/searchResultHighlighters/abstractSearchResultHighlighter.py b/manuskript/ui/highlighters/searchResultHighlighters/abstractSearchResultHighlighter.py new file mode 100644 index 0000000..393c1bc --- /dev/null +++ b/manuskript/ui/highlighters/searchResultHighlighters/abstractSearchResultHighlighter.py @@ -0,0 +1,13 @@ +#!/usr/bin/env python +# --!-- coding: utf8 --!-- + + +class abstractSearchResultHighlighter(): + """ + Interface for all classes highlighting search results on widgets. + """ + def __init__(self): + pass + + def highlightSearchResult(self, searchResult): + raise NotImplementedError diff --git a/manuskript/ui/highlighters/searchResultHighlighters/abstractSpecificSearchResultHighlighter.py b/manuskript/ui/highlighters/searchResultHighlighters/abstractSpecificSearchResultHighlighter.py new file mode 100644 index 0000000..3a310e0 --- /dev/null +++ b/manuskript/ui/highlighters/searchResultHighlighters/abstractSpecificSearchResultHighlighter.py @@ -0,0 +1,24 @@ +#!/usr/bin/env python +# --!-- coding: utf8 --!-- + + +from manuskript.ui.highlighters.searchResultHighlighters.widgetSelectionHighlighter import widgetSelectionHighlighter + + +class abstractSearchResultHighlighter(): + def __init__(self): + self._widgetSelectionHighlighter = widgetSelectionHighlighter() + + def highlightSearchResult(self, searchResult): + self.openView(searchResult) + widgets = self.retrieveWidget(searchResult) + if not isinstance(widgets, list): + widgets = [widgets] + for i in range(len(widgets)): + self._widgetSelectionHighlighter.highlight_widget_selection(widgets[i], searchResult.pos()[i][0], searchResult.pos()[i][1], i == len(widgets) - 1) + + def openView(self, searchResult): + raise RuntimeError + + def retrieveWidget(self, searchResult): + raise RuntimeError diff --git a/manuskript/ui/highlighters/searchResultHighlighters/characterSearchResultHighlighter.py b/manuskript/ui/highlighters/searchResultHighlighters/characterSearchResultHighlighter.py new file mode 100644 index 0000000..16a200d --- /dev/null +++ b/manuskript/ui/highlighters/searchResultHighlighters/characterSearchResultHighlighter.py @@ -0,0 +1,38 @@ +#!/usr/bin/env python +# --!-- coding: utf8 --!-- + + +from manuskript.models import references as Ref +from manuskript.functions import mainWindow +from manuskript.enums import Character +from PyQt5.QtWidgets import QTextEdit, QTableView, QLineEdit +from manuskript.ui.highlighters.searchResultHighlighters.abstractSpecificSearchResultHighlighter import abstractSearchResultHighlighter + + +class characterSearchResultHighlighter(abstractSearchResultHighlighter): + def __init__(self): + super().__init__() + + def openView(self, searchResult): + r = Ref.characterReference(searchResult.id()) + Ref.open(r) + mainWindow().tabPersos.setEnabled(True) + + def retrieveWidget(self, searchResult): + textEditMap = { + Character.name: (0, "txtPersoName", QLineEdit), + Character.goal: (0, "txtPersoGoal", QTextEdit), + Character.motivation: (0, "txtPersoMotivation", QTextEdit), + Character.conflict: (0, "txtPersoConflict", QTextEdit), + Character.epiphany: (0, "txtPersoEpiphany", QTextEdit), + Character.summarySentence: (0, "txtPersoSummarySentence", QTextEdit), + Character.summaryPara: (0, "txtPersoSummaryPara", QTextEdit), + Character.summaryFull: (1, "txtPersoSummaryFull", QTextEdit), + Character.notes: (2, "txtPersoNotes", QTextEdit), + Character.infos: (3, "tblPersoInfos", QTableView) + } + + characterTabIndex, characterWidgetName, characterWidgetClass = textEditMap[searchResult.column()] + + mainWindow().tabPersos.setCurrentIndex(characterTabIndex) + return mainWindow().tabPersos.findChild(characterWidgetClass, characterWidgetName) diff --git a/manuskript/ui/highlighters/searchResultHighlighters/flatDataSearchResultHighlighter.py b/manuskript/ui/highlighters/searchResultHighlighters/flatDataSearchResultHighlighter.py new file mode 100644 index 0000000..4d68fc9 --- /dev/null +++ b/manuskript/ui/highlighters/searchResultHighlighters/flatDataSearchResultHighlighter.py @@ -0,0 +1,29 @@ +#!/usr/bin/env python +# --!-- coding: utf8 --!-- + +from manuskript.functions import mainWindow +from manuskript.enums import FlatData +from PyQt5.QtWidgets import QTextEdit, QLineEdit +from manuskript.ui.highlighters.searchResultHighlighters.abstractSpecificSearchResultHighlighter import abstractSearchResultHighlighter + + +class flatDataSearchResultHighlighter(abstractSearchResultHighlighter): + def __init__(self): + super().__init__() + + def openView(self, searchResult): + mainWindow().tabMain.setCurrentIndex(mainWindow().TabSummary) + + def retrieveWidget(self, searchResult): + editors = { + FlatData.summarySituation: (0, "txtSummarySituation", QLineEdit, mainWindow()), + FlatData.summarySentence: (0, "txtSummarySentence", QTextEdit, mainWindow().tabSummary), + FlatData.summaryPara: (1, "txtSummaryPara", QTextEdit, mainWindow().tabSummary), + FlatData.summaryPage: (2, "txtSummaryPage", QTextEdit, mainWindow().tabSummary), + FlatData.summaryFull: (3, "txtSummaryFull", QTextEdit, mainWindow().tabSummary) + } + + stackIndex, editorName, editorClass, rootWidget = editors[searchResult.column()] + + mainWindow().tabSummary.setCurrentIndex(stackIndex) + return rootWidget.findChild(editorClass, editorName) diff --git a/manuskript/ui/highlighters/searchResultHighlighters/outlineSearchResultHighlighter.py b/manuskript/ui/highlighters/searchResultHighlighters/outlineSearchResultHighlighter.py new file mode 100644 index 0000000..801f7cd --- /dev/null +++ b/manuskript/ui/highlighters/searchResultHighlighters/outlineSearchResultHighlighter.py @@ -0,0 +1,47 @@ +#!/usr/bin/env python +# --!-- coding: utf8 --!-- + +from manuskript.models import references as Ref +from manuskript.enums import Outline +from manuskript.ui.highlighters.searchResultHighlighters.abstractSpecificSearchResultHighlighter import abstractSearchResultHighlighter +from manuskript.functions import mainWindow +from PyQt5.QtWidgets import QTextEdit, QLineEdit, QLabel +from manuskript.ui.views.metadataView import metadataView +from manuskript.ui.collapsibleGroupBox2 import collapsibleGroupBox2 + + +class outlineSearchResultHighlighter(abstractSearchResultHighlighter): + def __init__(self): + super().__init__() + self.outline_index = None + + def openView(self, searchResult): + r = Ref.textReference(searchResult.id()) + Ref.open(r) + + def retrieveWidget(self, searchResult): + editors = { + Outline.text: ("txtRedacText", QTextEdit, None), + Outline.title: ("txtTitle", QLineEdit, "grpProperties"), + Outline.summarySentence: ("txtSummarySentence", QLineEdit, "grpSummary"), + Outline.summaryFull: ("txtSummaryFull", QTextEdit, "grpSummary"), + Outline.notes: ("txtNotes", QTextEdit, "grpNotes"), + + # TODO: Tried to highlight the combo box themselves (ie. cmbPOV) but didn't succeed. + Outline.POV: ("lblPOV", QLabel, "grpProperties"), + Outline.status: ("lblStatus", QLabel, "grpProperties"), + Outline.label: ("lblLabel", QLabel, "grpProperties") + } + + editorName, editorClass, parentName = editors[searchResult.column()] + + # Metadata columns are inside a splitter widget that my be hidden, so we show them. + if parentName: + metadataViewWidget = mainWindow().findChild(metadataView, "redacMetadata") + metadataViewWidget.show() + metadataViewWidget.findChild(collapsibleGroupBox2, parentName).button.setChecked(True) + widget = metadataViewWidget.findChild(editorClass, editorName) + else: + widget = mainWindow().mainEditor.currentEditor().findChild(editorClass, editorName) + + return widget diff --git a/manuskript/ui/highlighters/searchResultHighlighters/plotSearchResultHighlighter.py b/manuskript/ui/highlighters/searchResultHighlighters/plotSearchResultHighlighter.py new file mode 100644 index 0000000..94578a3 --- /dev/null +++ b/manuskript/ui/highlighters/searchResultHighlighters/plotSearchResultHighlighter.py @@ -0,0 +1,32 @@ +#!/usr/bin/env python +# --!-- coding: utf8 --!-- + + +from manuskript.models import references as Ref +from manuskript.functions import mainWindow +from manuskript.enums import Plot +from PyQt5.QtWidgets import QTextEdit, QLineEdit, QListView +from manuskript.ui.highlighters.searchResultHighlighters.abstractSpecificSearchResultHighlighter import abstractSearchResultHighlighter + + +class plotSearchResultHighlighter(abstractSearchResultHighlighter): + def __init__(self): + super().__init__() + + def openView(self, searchResult): + r = Ref.plotReference(searchResult.id()) + Ref.open(r) + mainWindow().tabPlot.setEnabled(True) + + def retrieveWidget(self, searchResult): + textEditMap = { + Plot.name: (0, "txtPlotName", QLineEdit), + Plot.description: (0, "txtPlotDescription", QTextEdit), + Plot.characters: (0, "lstPlotPerso", QListView), + Plot.result: (0, "txtPlotResult", QTextEdit) + } + + tabIndex, widgetName, widgetClass = textEditMap[searchResult.column()] + + mainWindow().tabPlot.setCurrentIndex(tabIndex) + return mainWindow().tabPlot.findChild(widgetClass, widgetName) diff --git a/manuskript/ui/highlighters/searchResultHighlighters/plotStepSearchResultHighlighter.py b/manuskript/ui/highlighters/searchResultHighlighters/plotStepSearchResultHighlighter.py new file mode 100644 index 0000000..7b7b146 --- /dev/null +++ b/manuskript/ui/highlighters/searchResultHighlighters/plotStepSearchResultHighlighter.py @@ -0,0 +1,35 @@ +#!/usr/bin/env python +# --!-- coding: utf8 --!-- + + +from manuskript.models import references as Ref +from manuskript.functions import mainWindow +from manuskript.enums import PlotStep +from PyQt5.QtWidgets import QTableView, QTextEdit +from manuskript.ui.highlighters.searchResultHighlighters.abstractSpecificSearchResultHighlighter import abstractSearchResultHighlighter + + +class plotStepSearchResultHighlighter(abstractSearchResultHighlighter): + def __init__(self): + super().__init__() + + def openView(self, searchResult): + r = Ref.plotReference(searchResult.id()) + Ref.open(r) + mainWindow().tabPlot.setEnabled(True) + + def retrieveWidget(self, searchResult): + textEditMap = { + PlotStep.name: [(1, "lstSubPlots", QTableView)], + PlotStep.meta: [(1, "lstSubPlots", QTableView)], + PlotStep.summary: [(1, "lstSubPlots", QTableView), (1, "txtSubPlotSummary", QTextEdit)] + } + + map = textEditMap[searchResult.column()] + widgets = [] + for tabIndex, widgetName, widgetClass in map: + mainWindow().tabPlot.setCurrentIndex(tabIndex) + + widgets.append(mainWindow().tabPlot.findChild(widgetClass, widgetName)) + + return widgets diff --git a/manuskript/ui/highlighters/searchResultHighlighters/searchResultHighlighter.py b/manuskript/ui/highlighters/searchResultHighlighters/searchResultHighlighter.py new file mode 100644 index 0000000..eeb1aa8 --- /dev/null +++ b/manuskript/ui/highlighters/searchResultHighlighters/searchResultHighlighter.py @@ -0,0 +1,34 @@ +#!/usr/bin/env python +# --!-- coding: utf8 --!-- + +from manuskript.ui.highlighters.searchResultHighlighters.abstractSearchResultHighlighter import abstractSearchResultHighlighter +from manuskript.ui.highlighters.searchResultHighlighters.characterSearchResultHighlighter import characterSearchResultHighlighter +from manuskript.ui.highlighters.searchResultHighlighters.flatDataSearchResultHighlighter import flatDataSearchResultHighlighter +from manuskript.ui.highlighters.searchResultHighlighters.outlineSearchResultHighlighter import outlineSearchResultHighlighter +from manuskript.ui.highlighters.searchResultHighlighters.worldSearchResultHighlighter import worldSearchResultHighlighter +from manuskript.ui.highlighters.searchResultHighlighters.plotSearchResultHighlighter import plotSearchResultHighlighter +from manuskript.ui.highlighters.searchResultHighlighters.plotStepSearchResultHighlighter import plotStepSearchResultHighlighter +from manuskript.enums import Model + + +class searchResultHighlighter(abstractSearchResultHighlighter): + def __init__(self): + super().__init__() + + def highlightSearchResult(self, searchResult): + if searchResult.type() == Model.Character: + highlighter = characterSearchResultHighlighter() + elif searchResult.type() == Model.FlatData: + highlighter = flatDataSearchResultHighlighter() + elif searchResult.type() == Model.Outline: + highlighter = outlineSearchResultHighlighter() + elif searchResult.type() == Model.World: + highlighter = worldSearchResultHighlighter() + elif searchResult.type() == Model.Plot: + highlighter = plotSearchResultHighlighter() + elif searchResult.type() == Model.PlotStep: + highlighter = plotStepSearchResultHighlighter() + else: + raise NotImplementedError + + highlighter.highlightSearchResult(searchResult) diff --git a/manuskript/ui/highlighters/searchResultHighlighters/widgetSelectionHighlighter.py b/manuskript/ui/highlighters/searchResultHighlighters/widgetSelectionHighlighter.py new file mode 100644 index 0000000..1533387 --- /dev/null +++ b/manuskript/ui/highlighters/searchResultHighlighters/widgetSelectionHighlighter.py @@ -0,0 +1,91 @@ +#!/usr/bin/env python +# --!-- coding: utf8 --!-- + +from PyQt5.QtGui import QTextCursor +from PyQt5.QtWidgets import QTextEdit, QTableView, QListView, QLineEdit, QPlainTextEdit, QLabel + + +class widgetSelectionHighlighter(): + """ + Utility class for highlighting a search result on a widget. + """ + def __init__(self): + pass + + def highlight_widget_selection(self, widget, startPos, endPos, clearOnFocusOut=True): + if isinstance(widget, QTextEdit) or isinstance(widget, QPlainTextEdit): + self._highlightTextEditSearchResult(widget, startPos, endPos, clearOnFocusOut) + elif isinstance(widget, QLineEdit): + self._highlightLineEditSearchResult(widget, startPos, endPos, clearOnFocusOut) + elif isinstance(widget, QTableView): + self._highlightTableViewSearchResult(widget, startPos, clearOnFocusOut) + elif isinstance(widget, QListView): + self._highlightListViewSearchResult(widget, startPos, clearOnFocusOut) + elif isinstance(widget, QLabel): + self._highlightLabelSearchResult(widget, clearOnFocusOut) + else: + raise NotImplementedError + + widget.setFocus(True) + + @staticmethod + def generateClearHandler(widget, clearCallback): + """ + Generates a clear handler to be run when the given widget loses focus. + + :param widget: widget we want to attach the handler to + :param clearCallback: callback to be called when the given widget loses focus. + :return: + """ + def clearHandler(_widget, previous_on_focus_out_event): + clearCallback(_widget) + _widget.focusOutEvent = previous_on_focus_out_event + + widget.focusOutEvent = lambda e: clearHandler(widget, widget.focusOutEvent) + + def _highlightTextEditSearchResult(self, textEdit, startPos, endPos, clearOnFocusOut): + # On focus out, clear text edit selection. + oldTextCursor = textEdit.textCursor() + if clearOnFocusOut: + self.generateClearHandler(textEdit, lambda widget: widget.setTextCursor(oldTextCursor)) + + # Highlight search result on the text edit. + c = textEdit.textCursor() + c.setPosition(startPos) + c.setPosition(endPos, QTextCursor.KeepAnchor) + textEdit.setTextCursor(c) + + def _highlightLineEditSearchResult(self, lineEdit, startPos, endPos, clearOnFocusOut): + # On focus out, clear line edit selection. + if clearOnFocusOut: + self.generateClearHandler(lineEdit, lambda widget: widget.deselect()) + + # Highlight search result on line edit. + lineEdit.setCursorPosition(startPos) + lineEdit.cursorForward(True, endPos - startPos) + + def _highlightTableViewSearchResult(self, tableView, startPos, clearOnFocusOut): + # On focus out, clear table selection. + if clearOnFocusOut: + self.generateClearHandler(tableView, lambda widget: widget.clearSelection()) + + # Highlight table row containing search result. + tableView.selectRow(startPos) + + def _highlightListViewSearchResult(self, listView, startPos, clearOnFocusOut): + # On focus out, clear table selection. + if clearOnFocusOut: + self.generateClearHandler(listView, lambda widget: widget.selectionModel().clearSelection()) + + # Highlight list item containing search result. + listView.setCurrentIndex(listView.model().index(startPos, 0, listView.rootIndex())) + + def _highlightLabelSearchResult(self, label, clearOnFocusOut): + # On focus out, clear label selection. + # FIXME: This would overwrite all styles! + oldStyle = label.styleSheet() + if clearOnFocusOut: + self.generateClearHandler(label, lambda widget: widget.setStyleSheet(oldStyle)) + + # Highlight search result on label. + label.setStyleSheet("background-color: steelblue") diff --git a/manuskript/ui/highlighters/searchResultHighlighters/worldSearchResultHighlighter.py b/manuskript/ui/highlighters/searchResultHighlighters/worldSearchResultHighlighter.py new file mode 100644 index 0000000..0556b0c --- /dev/null +++ b/manuskript/ui/highlighters/searchResultHighlighters/worldSearchResultHighlighter.py @@ -0,0 +1,32 @@ +#!/usr/bin/env python +# --!-- coding: utf8 --!-- + + +from manuskript.models import references as Ref +from manuskript.functions import mainWindow +from manuskript.enums import World +from PyQt5.QtWidgets import QTextEdit, QLineEdit +from manuskript.ui.highlighters.searchResultHighlighters.abstractSpecificSearchResultHighlighter import abstractSearchResultHighlighter + + +class worldSearchResultHighlighter(abstractSearchResultHighlighter): + def __init__(self): + super().__init__() + + def openView(self, searchResult): + r = Ref.worldReference(searchResult.id()) + Ref.open(r) + mainWindow().tabWorld.setEnabled(True) + + def retrieveWidget(self, searchResult): + textEditMap = { + World.name: (0, "txtWorldName", QLineEdit), + World.description: (0, "txtWorldDescription", QTextEdit), + World.passion: (1, "txtWorldPassion", QTextEdit), + World.conflict: (1, "txtWorldConflict", QTextEdit), + } + + tabIndex, widgetName, widgetClass = textEditMap[searchResult.column()] + + mainWindow().tabWorld.setCurrentIndex(tabIndex) + return mainWindow().tabWorld.findChild(widgetClass, widgetName) diff --git a/manuskript/ui/mainWindow.py b/manuskript/ui/mainWindow.py index 5e95ec4..630f0e6 100644 --- a/manuskript/ui/mainWindow.py +++ b/manuskript/ui/mainWindow.py @@ -1282,6 +1282,10 @@ class Ui_MainWindow(object): self.actFormatList.setObjectName("actFormatList") self.actFormatBlockquote = QtWidgets.QAction(MainWindow) self.actFormatBlockquote.setObjectName("actFormatBlockquote") + self.actSearch = QtWidgets.QAction(MainWindow) + icon = QtGui.QIcon.fromTheme("edit-find") + self.actSearch.setIcon(icon) + self.actSearch.setObjectName("actSearch") self.menuFile.addAction(self.actOpen) self.menuFile.addAction(self.menuRecents.menuAction()) self.menuFile.addAction(self.actSave) @@ -1325,6 +1329,7 @@ class Ui_MainWindow(object): self.menuEdit.addAction(self.actCopy) self.menuEdit.addAction(self.actPaste) self.menuEdit.addAction(self.actDelete) + self.menuEdit.addAction(self.actSearch) self.menuEdit.addAction(self.actRename) self.menuEdit.addSeparator() self.menuEdit.addAction(self.mnuFormat.menuAction()) @@ -1648,6 +1653,9 @@ class Ui_MainWindow(object): self.actFormatOrderedList.setText(_translate("MainWindow", "&Ordered list")) self.actFormatList.setText(_translate("MainWindow", "&Unordered list")) self.actFormatBlockquote.setText(_translate("MainWindow", "B&lockquote")) + self.actSearch.setText(_translate("MainWindow", "Search")) + self.actSearch.setShortcut(_translate("MainWindow", "Ctrl+F")) + from manuskript.ui.cheatSheet import cheatSheet from manuskript.ui.editors.mainEditor import mainEditor from manuskript.ui.search import search diff --git a/manuskript/ui/mainWindow.ui b/manuskript/ui/mainWindow.ui index 1771b38..3921e39 100644 --- a/manuskript/ui/mainWindow.ui +++ b/manuskript/ui/mainWindow.ui @@ -2203,6 +2203,7 @@ + @@ -2838,6 +2839,17 @@ B&lockquote + + + + + + Search + + + Ctrl+F + + diff --git a/manuskript/ui/search.py b/manuskript/ui/search.py index 06441ae..f177c12 100644 --- a/manuskript/ui/search.py +++ b/manuskript/ui/search.py @@ -1,147 +1,151 @@ #!/usr/bin/env python # --!-- coding: utf8 --!-- -from PyQt5.QtCore import Qt, QRect -from PyQt5.QtGui import QPalette, QFontMetrics -from PyQt5.QtWidgets import QWidget, QMenu, QAction, qApp, QListWidgetItem, QStyledItemDelegate, QStyle +from PyQt5.QtCore import Qt, QRect, QEvent, QCoreApplication +from PyQt5.QtGui import QPalette, QFontMetrics, QKeySequence +from PyQt5.QtWidgets import QWidget, qApp, QListWidgetItem, QStyledItemDelegate, QStyle, QLabel, QToolTip, QShortcut + -from manuskript.enums import Outline from manuskript.functions import mainWindow from manuskript.ui import style from manuskript.ui.search_ui import Ui_search -from manuskript.models import references as Ref +from manuskript.enums import Model + +from manuskript.models.flatDataModelWrapper import flatDataModelWrapper +from manuskript.ui.searchMenu import searchMenu +from manuskript.ui.highlighters.searchResultHighlighters.searchResultHighlighter import searchResultHighlighter class search(QWidget, Ui_search): def __init__(self, parent=None): + _translate = QCoreApplication.translate + QWidget.__init__(self, parent) self.setupUi(self) - self.options = { - "All": True, - "Title": True, - "Text": True, - "Summary": False, - "Notes": False, - "POV": False, - "Status": False, - "Label": False, - "CS": True - } + self.searchTextInput.returnPressed.connect(self.search) - self.text.returnPressed.connect(self.search) - self.generateOptionMenu() + self.searchMenu = searchMenu() + self.btnOptions.setMenu(self.searchMenu) self.delegate = listResultDelegate(self) self.result.setItemDelegate(self.delegate) + self.result.setMouseTracking(True) self.result.itemClicked.connect(self.openItem) self.result.setStyleSheet(style.searchResultSS()) - self.text.setStyleSheet(style.lineEditSS()) + self.searchTextInput.setStyleSheet(style.lineEditSS()) - def generateOptionMenu(self): - self.menu = QMenu(self) - a = QAction(self.tr("Search in:"), self.menu) - a.setEnabled(False) - self.menu.addAction(a) - for i, d in [ - (self.tr("All"), "All"), - (self.tr("Title"), "Title"), - (self.tr("Text"), "Text"), - (self.tr("Summary"), "Summary"), - (self.tr("Notes"), "Notes"), - (self.tr("POV"), "POV"), - (self.tr("Status"), "Status"), - (self.tr("Label"), "Label"), - ]: - a = QAction(i, self.menu) - a.setCheckable(True) - a.setChecked(self.options[d]) - a.setData(d) - a.triggered.connect(self.updateOptions) - self.menu.addAction(a) - self.menu.addSeparator() + self.searchResultHighlighter = searchResultHighlighter() - a = QAction(self.tr("Options:"), self.menu) - a.setEnabled(False) - self.menu.addAction(a) - for i, d in [ - (self.tr("Case sensitive"), "CS"), - ]: - a = QAction(i, self.menu) - a.setCheckable(True) - a.setChecked(self.options[d]) - a.setData(d) - a.triggered.connect(self.updateOptions) - self.menu.addAction(a) - self.menu.addSeparator() + self.noResultsLabel = QLabel(_translate("Search", "No results found"), self.result) + self.noResultsLabel.setVisible(False) + self.noResultsLabel.setStyleSheet("QLabel {color: gray;}") - self.btnOptions.setMenu(self.menu) + # Add shortcuts for navigating through search results + QShortcut(QKeySequence(_translate("MainWindow", "F3")), self.searchTextInput, self.nextSearchResult) + QShortcut(QKeySequence(_translate("MainWindow", "Shift+F3")), self.searchTextInput, self.previousSearchResult) - def updateOptions(self): - a = self.sender() - self.options[a.data()] = a.isChecked() + # These texts are already included in translation files but including ":" at the end. We force here the + # translation for them without ":" + _translate("MainWindow", "Situation") + _translate("MainWindow", "Status") + + def nextSearchResult(self): + if self.result.currentRow() < self.result.count() - 1: + self.result.setCurrentRow(self.result.currentRow() + 1) + else: + self.result.setCurrentRow(0) + + if 0 < self.result.currentRow() < self.result.count(): + self.openItem(self.result.currentItem()) + + def previousSearchResult(self): + if self.result.currentRow() > 0: + self.result.setCurrentRow(self.result.currentRow() - 1) + else: + self.result.setCurrentRow(self.result.count() - 1) + + if 0 < self.result.currentRow() < self.result.count(): + self.openItem(self.result.currentItem()) + + def prepareRegex(self, searchText): + import re + + flags = re.UNICODE + + if self.searchMenu.caseSensitive() is False: + flags |= re.IGNORECASE + + if self.searchMenu.regex() is False: + searchText = re.escape(searchText) + + if self.searchMenu.matchWords() is True: + # Source: https://stackoverflow.com/a/15863102 + searchText = r'\b' + searchText + r'\b' + + return re.compile(searchText, flags) def search(self): - text = self.text.text() - - # Choosing the right columns - lstColumns = [ - ("Title", Outline.title), - ("Text", Outline.text), - ("Summary", Outline.summarySentence), - ("Summary", Outline.summaryFull), - ("Notes", Outline.notes), - ("POV", Outline.POV), - ("Status", Outline.status), - ("Label", Outline.label), - ] - columns = [c[1] for c in lstColumns if self.options[c[0]] or self.options["All"]] - - # Setting override cursor - qApp.setOverrideCursor(Qt.WaitCursor) - - # Searching - model = mainWindow().mdlOutline - results = model.findItemsContaining(text, columns, self.options["CS"]) - - # Showing results self.result.clear() - for r in results: - index = model.getIndexByID(r) - if not index.isValid(): - continue - item = index.internalPointer() - i = QListWidgetItem(item.title(), self.result) - i.setData(Qt.UserRole, r) - i.setData(Qt.UserRole + 1, item.path()) - self.result.addItem(i) + self.result.setCurrentRow(0) - # Removing override cursor - qApp.restoreOverrideCursor() + searchText = self.searchTextInput.text() + if len(searchText) > 0: + searchRegex = self.prepareRegex(searchText) + results = [] + + # Set override cursor + qApp.setOverrideCursor(Qt.WaitCursor) + + for model, modelName in [ + (mainWindow().mdlOutline, Model.Outline), + (mainWindow().mdlCharacter, Model.Character), + (flatDataModelWrapper(mainWindow().mdlFlatData), Model.FlatData), + (mainWindow().mdlWorld, Model.World), + (mainWindow().mdlPlots, Model.Plot) + ]: + filteredColumns = self.searchMenu.columns(modelName) + + # Searching + if len(filteredColumns): + results += model.searchOccurrences(searchRegex, filteredColumns) + + # Showing results + self.generateResultsLists(results) + + # Remove override cursor + qApp.restoreOverrideCursor() + + def generateResultsLists(self, results): + self.noResultsLabel.setVisible(len(results) == 0) + for result in results: + item = QListWidgetItem(result.title(), self.result) + item.setData(Qt.UserRole, result) + item.setData(Qt.UserRole + 1, ' > '.join(result.path())) + item.setData(Qt.UserRole + 2, result.context()) + self.result.addItem(item) def openItem(self, item): - r = Ref.textReference(item.data(Qt.UserRole)) - Ref.open(r) - # mw = mainWindow() - # index = mw.mdlOutline.getIndexByID(item.data(Qt.UserRole)) - # mw.mainEditor.setCurrentModelIndex(index, newTab=True) + self.searchResultHighlighter.highlightSearchResult(item.data(Qt.UserRole)) + def leaveEvent(self, event): + self.delegate.mouseLeave() class listResultDelegate(QStyledItemDelegate): def __init__(self, parent=None): QStyledItemDelegate.__init__(self, parent) + self._tooltipRowIndex = -1 def paint(self, painter, option, index): extra = index.data(Qt.UserRole + 1) + if not extra: return QStyledItemDelegate.paint(self, painter, option, index) - else: if option.state & QStyle.State_Selected: painter.fillRect(option.rect, option.palette.color(QPalette.Highlight)) title = index.data() - extra = " - {}".format(extra) painter.drawText(option.rect.adjusted(2, 1, 0, 0), Qt.AlignLeft, title) fm = QFontMetrics(option.font) @@ -153,5 +157,18 @@ class listResultDelegate(QStyledItemDelegate): painter.setPen(Qt.white) else: painter.setPen(Qt.gray) - painter.drawText(r.adjusted(2, 1, 0, 0), Qt.AlignLeft, extra) + painter.drawText(r.adjusted(2, 1, 0, 0), Qt.AlignLeft, " - {}".format(extra)) painter.restore() + + def editorEvent(self, event, model, option, index): + if event.type() == QEvent.MouseMove and self._tooltipRowIndex != index.row(): + self._tooltipRowIndex = index.row() + context = index.data(Qt.UserRole + 2) + extra = index.data(Qt.UserRole + 1) + QToolTip.showText(event.globalPos(), + "

#" + str(index.row()) + " - " + extra + "

" + context + "

") + return True + return False + + def mouseLeave(self): + self._tooltipRowIndex = -1 diff --git a/manuskript/ui/searchMenu.py b/manuskript/ui/searchMenu.py new file mode 100644 index 0000000..59468f8 --- /dev/null +++ b/manuskript/ui/searchMenu.py @@ -0,0 +1,108 @@ +#!/usr/bin/env python +# --!-- coding: utf8 --!-- +from PyQt5.QtWidgets import QMenu, QAction +from PyQt5.QtCore import QCoreApplication +from PyQt5 import QtCore + +from manuskript.searchLabels import OutlineSearchLabels, CharacterSearchLabels, FlatDataSearchLabels, WorldSearchLabels, PlotSearchLabels +from manuskript.models.searchFilter import searchFilter +from manuskript.enums import Model + + +def filterKey(modelPreffix, column): + return modelPreffix + str(column) + + +class searchMenu(QMenu): + def __init__(self, parent=None): + QMenu.__init__(self, parent) + + _translate = QCoreApplication.translate + # Model keys must match the ones used in search widget class + self.filters = { + Model.Outline: searchFilter(_translate("MainWindow", "Outline"), True, list(OutlineSearchLabels.keys())), + Model.Character: searchFilter(_translate("MainWindow", "Characters"), True, list(CharacterSearchLabels.keys())), + Model.FlatData: searchFilter(_translate("MainWindow", "FlatData"), True, list(FlatDataSearchLabels.keys())), + Model.World: searchFilter(_translate("MainWindow", "World"), True, list(WorldSearchLabels.keys())), + Model.Plot: searchFilter(_translate("MainWindow", "Plot"), True, list(PlotSearchLabels.keys())) + } + + self.options = { + "CS": [self.tr("Case sensitive"), True], + "MatchWords": [self.tr("Match words"), False], + "Regex": [self.tr("Regex"), False] + } + + self._generateOptions() + + def _generateOptions(self): + a = QAction(self.tr("Search in:"), self) + a.setEnabled(False) + self.addAction(a) + for filterKey in self.filters: + a = QAction(self.tr(self.filters[filterKey].label()), self) + a.setCheckable(True) + a.setChecked(self.filters[filterKey].enabled()) + a.setData(filterKey) + a.triggered.connect(self._updateFilters) + self.addAction(a) + self.addSeparator() + + a = QAction(self.tr("Options:"), self) + a.setEnabled(False) + self.addAction(a) + for optionKey in self.options: + a = QAction(self.options[optionKey][0], self) + a.setCheckable(True) + a.setChecked(self.options[optionKey][1]) + a.setData(optionKey) + a.triggered.connect(self._updateOptions) + self.addAction(a) + self.addSeparator() + + def _updateFilters(self): + a = self.sender() + self.filters[a.data()].setEnabled(a.isChecked()) + + def _updateOptions(self): + a = self.sender() + self.options[a.data()][1] = a.isChecked() + + def columns(self, modelName): + if self.filters[modelName].enabled(): + return self.filters[modelName].modelColumns() + else: + return [] + + def caseSensitive(self): + return self.options["CS"][1] + + def matchWords(self): + return self.options["MatchWords"][1] + + def regex(self): + return self.options["Regex"][1] + + def mouseReleaseEvent(self, event): + # Workaround for enabling / disabling actions without closing the menu. + # Source: https://stackoverflow.com/a/14967212 + action = self.activeAction() + if action: + action.setEnabled(False) + QMenu.mouseReleaseEvent(self, event) + action.setEnabled(True) + action.trigger() + else: + QMenu.mouseReleaseEvent(self, event) + + def keyPressEvent(self, event): + # Workaround for enabling / disabling actions without closing the menu. + # Source: https://stackoverflow.com/a/14967212 + action = self.activeAction() + if action and event.key() == QtCore.Qt.Key_Return: + action.setEnabled(False) + QMenu.keyPressEvent(self, event) + action.setEnabled(True) + action.trigger() + else: + QMenu.keyPressEvent(self, event) diff --git a/manuskript/ui/search_ui.py b/manuskript/ui/search_ui.py index d9f5c31..5052977 100644 --- a/manuskript/ui/search_ui.py +++ b/manuskript/ui/search_ui.py @@ -19,12 +19,12 @@ class Ui_search(object): self.horizontalLayout = QtWidgets.QHBoxLayout() self.horizontalLayout.setSpacing(0) self.horizontalLayout.setObjectName("horizontalLayout") - self.text = QtWidgets.QLineEdit(search) - self.text.setInputMask("") - self.text.setFrame(False) - self.text.setClearButtonEnabled(True) - self.text.setObjectName("text") - self.horizontalLayout.addWidget(self.text) + self.searchTextInput = QtWidgets.QLineEdit(search) + self.searchTextInput.setInputMask("") + self.searchTextInput.setFrame(False) + self.searchTextInput.setClearButtonEnabled(True) + self.searchTextInput.setObjectName("searchTextInput") + self.horizontalLayout.addWidget(self.searchTextInput) self.btnOptions = QtWidgets.QPushButton(search) self.btnOptions.setText("") icon = QtGui.QIcon.fromTheme("edit-find") @@ -45,5 +45,5 @@ class Ui_search(object): def retranslateUi(self, search): _translate = QtCore.QCoreApplication.translate search.setWindowTitle(_translate("search", "Form")) - self.text.setPlaceholderText(_translate("search", "Search for...")) + self.searchTextInput.setPlaceholderText(_translate("search", "Search for...")) diff --git a/manuskript/ui/search_ui.ui b/manuskript/ui/search_ui.ui index 1b63fdc..89eb0a0 100644 --- a/manuskript/ui/search_ui.ui +++ b/manuskript/ui/search_ui.ui @@ -35,7 +35,7 @@ 0 - + diff --git a/manuskript/ui/views/corkDelegate.py b/manuskript/ui/views/corkDelegate.py index 70ff19e..bd776c1 100644 --- a/manuskript/ui/views/corkDelegate.py +++ b/manuskript/ui/views/corkDelegate.py @@ -43,11 +43,19 @@ class corkDelegate(QStyledItemDelegate): return QStyledItemDelegate.editorEvent(self, event, model, option, index) def createEditor(self, parent, option, index): + # When the user performs a global search and selects an Outline result (title or summary), the + # associated chapter is selected in cork view, triggering a call to this method with the results + # list widget set in self.sender(). In this case we store the searched column so we know which + # editor should be created. + searchedColumn = None + if self.sender() is not None and self.sender().objectName() == 'result' and self.sender().currentItem(): + searchedColumn = self.sender().currentItem().data(Qt.UserRole).column() + self.updateRects(option, index) bgColor = self.bgColors.get(index, "white") - if self.mainLineRect.contains(self.lastPos): + if searchedColumn == Outline.summarySentence or (self.lastPos is not None and self.mainLineRect.contains(self.lastPos)): # One line summary self.editing = Outline.summarySentence edt = QLineEdit(parent) @@ -64,7 +72,7 @@ class corkDelegate(QStyledItemDelegate): edt.setStyleSheet("background: {}; color: black;".format(bgColor)) return edt - elif self.titleRect.contains(self.lastPos): + elif searchedColumn == Outline.title or (self.lastPos is not None and self.titleRect.contains(self.lastPos)): # Title self.editing = Outline.title edt = QLineEdit(parent) From a266b1bffffc79df4198a98e86ef4ff9ad69b250 Mon Sep 17 00:00:00 2001 From: Robert Barlow <43388273+rbb8403@users.noreply.github.com> Date: Sun, 4 Apr 2021 13:48:54 -0400 Subject: [PATCH 29/51] Fixed project not opening with missing background This is the quick way to patch this. I'd recommend changing the findFirstFile function in functions/__init__.py for a more permanent solution, but this should suffice for now. --- manuskript/ui/views/corkView.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/manuskript/ui/views/corkView.py b/manuskript/ui/views/corkView.py index e77e49d..864a02a 100644 --- a/manuskript/ui/views/corkView.py +++ b/manuskript/ui/views/corkView.py @@ -27,6 +27,8 @@ class corkView(QListView, dndView, outlineBasics): def updateBackground(self): if settings.corkBackground["image"] != "": img = findBackground(settings.corkBackground["image"]) + if img == None: + img = "" else: # No background image img = "" From 83fae3f286b570aae5044d252e9832e60a8eafe2 Mon Sep 17 00:00:00 2001 From: TheJackiMonster Date: Sun, 4 Apr 2021 22:30:33 +0200 Subject: [PATCH 30/51] Fixed LanguageTool spellchecker working with newer versions Signed-off-by: TheJackiMonster --- manuskript/functions/spellchecker.py | 53 +++++++++++++++++++++++----- 1 file changed, 44 insertions(+), 9 deletions(-) diff --git a/manuskript/functions/spellchecker.py b/manuskript/functions/spellchecker.py index 19ba926..a29e735 100644 --- a/manuskript/functions/spellchecker.py +++ b/manuskript/functions/spellchecker.py @@ -28,8 +28,14 @@ except ImportError: symspellpy = None +use_language_check = False + try: - import language_check as languagetool + try: + import language_tool_python as languagetool + except: + import language_check as languagetool + use_language_check = True except: languagetool = None @@ -471,6 +477,24 @@ class SymSpellDictionary(BasicDictionary): # Since 6.3.8 self._dict.delete_dictionary_entry(word) +def get_languagetool_match_errorLength(match): + if use_language_check: + return match.errorlength + else: + return match.errorLength + +def get_languagetool_match_ruleIssueType(match): + if use_language_check: + return match.locqualityissuetype + else: + return match.ruleIssueType + +def get_languagetool_match_message(match): + if use_language_check: + return match.msg + else: + return match.message + class LanguageToolCache: def __init__(self, tool, text): @@ -485,12 +509,12 @@ class LanguageToolCache: for match in tool.check(text): start = match.offset - end = start + match.errorlength + end = start + get_languagetool_match_errorLength(match) basic_match = BasicMatch(start, end) - basic_match.locqualityissuetype = match.locqualityissuetype + basic_match.locqualityissuetype = get_languagetool_match_ruleIssueType(match) basic_match.replacements = match.replacements - basic_match.msg = match.msg + basic_match.msg = get_languagetool_match_message(match) matches.append(basic_match) @@ -500,12 +524,18 @@ class LanguageToolCache: if len(text) != self._length: self._matches = self._buildMatches(tool, text) +def get_languagetool_languages(): + if use_language_check: + return languagetool.get_languages() + else: + return languagetool.LanguageTool()._get_languages() + class LanguageToolDictionary(BasicDictionary): def __init__(self, name): BasicDictionary.__init__(self, name) - if not (self._lang and self._lang in languagetool.get_languages()): + if not (self._lang and self._lang in get_languagetool_languages()): self._lang = self.getDefaultDictionary() self._tool = languagetool.LanguageTool(self._lang) @@ -513,11 +543,14 @@ class LanguageToolDictionary(BasicDictionary): @staticmethod def getLibraryName(): - return "LanguageCheck" + return "LanguageTool" @staticmethod def getLibraryURL(): - return "https://pypi.org/project/language-check/" + if use_language_check: + return "https://pypi.org/project/language-check/" + else: + return "https://pypi.org/project/language-tool-python/" @staticmethod def isInstalled(): @@ -533,9 +566,10 @@ class LanguageToolDictionary(BasicDictionary): @staticmethod def availableDictionaries(): if LanguageToolDictionary.isInstalled(): - languages = list(languagetool.get_languages()) + languages = list(get_languagetool_languages()) languages.sort() return languages + return [] @staticmethod @@ -544,7 +578,8 @@ class LanguageToolDictionary(BasicDictionary): return None default_locale = languagetool.get_locale_language() - if default_locale and not default_locale in languagetool.get_languages(): + + if default_locale and not default_locale in get_languagetool_languages(): default_locale = None if default_locale == None: From 696678e25d36df33f394c3ac7aabef03c86e67f3 Mon Sep 17 00:00:00 2001 From: Belug Date: Wed, 7 Apr 2021 20:43:37 -0400 Subject: [PATCH 31/51] Fix #456 - Force the distraction free window to be display on the same screen as the main window --- manuskript/ui/editors/fullScreenEditor.py | 10 ++++++++-- manuskript/ui/editors/mainEditor.py | 7 +++++-- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/manuskript/ui/editors/fullScreenEditor.py b/manuskript/ui/editors/fullScreenEditor.py index b2cc75e..42941f9 100644 --- a/manuskript/ui/editors/fullScreenEditor.py +++ b/manuskript/ui/editors/fullScreenEditor.py @@ -6,7 +6,7 @@ from PyQt5.QtCore import Qt, QSize, QPoint, QRect, QEvent, QTime, QTimer from PyQt5.QtGui import QFontMetrics, QColor, QBrush, QPalette, QPainter, QPixmap, QCursor from PyQt5.QtGui import QIcon from PyQt5.QtWidgets import QFrame, QWidget, QPushButton, qApp, QStyle, QComboBox, QLabel, QScrollBar, \ - QStyleOptionSlider, QHBoxLayout, QVBoxLayout, QMenu, QAction + QStyleOptionSlider, QHBoxLayout, QVBoxLayout, QMenu, QAction, QDesktopWidget # Spell checker support from manuskript import settings @@ -21,7 +21,7 @@ from manuskript.functions import Spellchecker class fullScreenEditor(QWidget): - def __init__(self, index, parent=None): + def __init__(self, index, parent=None, screenNumber=None): QWidget.__init__(self, parent) self.setAttribute(Qt.WA_DeleteOnClose, True) self._background = None @@ -162,6 +162,12 @@ class fullScreenEditor(QWidget): self.topPanel.setAutoHideVariable('autohide-top') self.leftPanel.setAutoHideVariable('autohide-left') + # Set the screen to the same screen as the main window + if screenNumber is not None: + screenres = QDesktopWidget().screenGeometry(screenNumber); + self.move(QPoint(screenres.x(), screenres.y())); + self.resize(screenres.width(), screenres.height()); + # Connection self._index.model().dataChanged.connect(self.dataChanged) diff --git a/manuskript/ui/editors/mainEditor.py b/manuskript/ui/editors/mainEditor.py index 8b629aa..d8a5c67 100644 --- a/manuskript/ui/editors/mainEditor.py +++ b/manuskript/ui/editors/mainEditor.py @@ -5,7 +5,7 @@ import locale from PyQt5.QtCore import QModelIndex, QRect, QPoint from PyQt5.QtCore import Qt from PyQt5.QtGui import QPixmap, QPainter, QIcon -from PyQt5.QtWidgets import QWidget, qApp +from PyQt5.QtWidgets import QWidget, qApp, QDesktopWidget from manuskript import settings from manuskript.enums import Outline @@ -379,7 +379,10 @@ class mainEditor(QWidget, Ui_mainEditor): def showFullScreen(self): if self.currentEditor(): - self._fullScreen = fullScreenEditor(self.currentEditor().currentIndex) + currentScreenNumber = QDesktopWidget().screenNumber(widget=self) + self._fullScreen = fullScreenEditor( + self.currentEditor().currentIndex, + screenNumber=currentScreenNumber) ############################################################################### # DICT AND STUFF LIKE THAT From bee24d45b0ae9bcd29760301bb47c7556997f5f8 Mon Sep 17 00:00:00 2001 From: emgineering Date: Mon, 4 Jan 2021 13:02:14 -0700 Subject: [PATCH 32/51] Change ID assignment method for Outline --- manuskript/load_save/version_1.py | 4 +++- manuskript/models/abstractItem.py | 27 ++++++++++++++------------- manuskript/models/abstractModel.py | 13 +++++++++++-- manuskript/models/outlineModel.py | 3 +++ 4 files changed, 31 insertions(+), 16 deletions(-) diff --git a/manuskript/load_save/version_1.py b/manuskript/load_save/version_1.py index 6c4f91d..9168e12 100644 --- a/manuskript/load_save/version_1.py +++ b/manuskript/load_save/version_1.py @@ -934,9 +934,11 @@ def outlineFromMMD(text, parent): @return: outlineItem """ - item = outlineItem(parent=parent) md, body = parseMMDFile(text, asDict=True) + # Assign ID on creation, to avoid generating a new ID for this object + item = outlineItem(parent=parent, ID=md.pop('ID')) + # Store metadata for k in md: if k in Outline.__members__: diff --git a/manuskript/models/abstractItem.py b/manuskript/models/abstractItem.py index f3fa049..11c8cfd 100644 --- a/manuskript/models/abstractItem.py +++ b/manuskript/models/abstractItem.py @@ -42,11 +42,19 @@ class abstractItem(): if xml is not None: self.setFromXML(xml) + if parent: + # add this as a child to the parent, and link to the outlineModel of the parent + parent.appendChild(self) + elif not model: + print("Warning: floating outline item (has no parent or associated Outline model).") + if ID: self._data[self.enum.ID] = ID + self._model.updateAvailableIDs(ID) # Informs the ID distributor that this ID number has been used + else: + self._data[self.enum.ID] = self._model.requestNewID() + - if parent: - parent.appendChild(self) ####################################################################### # Model @@ -135,8 +143,6 @@ class abstractItem(): self.childItems.insert(row, child) child._parent = self child.setModel(self._model) - if not child.ID(): - child.getUniqueID() def removeChild(self, row): """ @@ -195,7 +201,7 @@ class abstractItem(): ############################################################################### def getUniqueID(self, recursive=False): - self.setData(self.enum.ID, self._model.rootItem.findUniqueID()) + self.setData(self.enum.ID, self._model.requestNewID()) if recursive: for c in self.children(): @@ -226,14 +232,6 @@ class abstractItem(): IDs.extend(c.listAllIDs()) return IDs - def findUniqueID(self): - IDs = [int(i) for i in self.IDs] - k = 1 - while k in IDs: - k += 1 - self.IDs.append(str(k)) - return str(k) - ####################################################################### # Data ####################################################################### @@ -250,6 +248,9 @@ class abstractItem(): # Setting data self._data[column] = data + if column == self.enum.ID: + self._model.updateAvailableIDs(data) + # Emit signal self.emitDataChanged(cols=[column]) # new in 0.5.0 diff --git a/manuskript/models/abstractModel.py b/manuskript/models/abstractModel.py index a536084..438ace2 100644 --- a/manuskript/models/abstractModel.py +++ b/manuskript/models/abstractModel.py @@ -40,13 +40,22 @@ class abstractModel(QAbstractItemModel): """ def __init__(self, parent): QAbstractItemModel.__init__(self, parent) - - self.rootItem = outlineItem(self, title="Root", ID="0") + self.nextAvailableID = 1 # Stores removed item, in order to remove them on disk when saving, depending on the file format. self.removed = [] self._removingRows = False + def requestNewID(self): + newID = self.nextAvailableID + self.nextAvailableID += 1 + return str(newID) + + # Call this if loading an ID from file rather than assigning a new one. + def updateAvailableIDs(self, addedID): + if int(addedID) >= self.nextAvailableID: + self.nextAvailableID = int(addedID) + 1 + def index(self, row, column, parent): if not self.hasIndex(row, column, parent): diff --git a/manuskript/models/outlineModel.py b/manuskript/models/outlineModel.py index 63494e2..87c6f13 100644 --- a/manuskript/models/outlineModel.py +++ b/manuskript/models/outlineModel.py @@ -2,11 +2,14 @@ # --!-- coding: utf8 --!-- from manuskript.models.abstractModel import abstractModel +from manuskript.models import outlineItem class outlineModel(abstractModel): def __init__(self, parent): abstractModel.__init__(self, parent) + self.rootItem = outlineItem(model=self, title="Root", ID="0") + def findItemsByPOV(self, POV): "Returns a list of IDs of all items whose POV is ``POV``." From b41fb00b0d71008a48d092cb7a7661b8bd173a43 Mon Sep 17 00:00:00 2001 From: Jan Wester Date: Sun, 13 Oct 2019 21:38:53 +0200 Subject: [PATCH 33/51] Several tiny things squashed into one All Models should have only one object managing them, and it is not the class responsible for doing the welcome-related tasks. Small .gitignore update --- .gitignore | 2 ++ manuskript/mainWindow.py | 6 ------ manuskript/ui/welcome.py | 26 +++++++------------------- 3 files changed, 9 insertions(+), 25 deletions(-) diff --git a/.gitignore b/.gitignore index 7f75726..1b14a20 100644 --- a/.gitignore +++ b/.gitignore @@ -12,12 +12,14 @@ .project .pydevproject .settings/org.eclipse.core.resources.prefs +.vscode ExportTest Notes.t2t dist build icons/Numix manuskript/pycallgraph.txt +manuskript.log snowflake* test-projects main.pyproject.user diff --git a/manuskript/mainWindow.py b/manuskript/mainWindow.py index 7e96af2..38d5e4b 100644 --- a/manuskript/mainWindow.py +++ b/manuskript/mainWindow.py @@ -639,7 +639,6 @@ class MainWindow(QMainWindow, Ui_MainWindow): self.mdlCharacter.dataChanged.connect(self.startTimerNoChanges) self.mdlPlots.dataChanged.connect(self.startTimerNoChanges) self.mdlWorld.dataChanged.connect(self.startTimerNoChanges) - # self.mdlPersosInfos.dataChanged.connect(self.startTimerNoChanges) self.mdlStatus.dataChanged.connect(self.startTimerNoChanges) self.mdlLabels.dataChanged.connect(self.startTimerNoChanges) @@ -665,9 +664,6 @@ class MainWindow(QMainWindow, Ui_MainWindow): # Add project name to Window's name self.setWindowTitle(self.projectName() + " - " + self.tr("Manuskript")) - # Stuff - # self.checkPersosID() # Shouldn't be necessary any longer - # Show main Window self.switchToProject() @@ -875,8 +871,6 @@ class MainWindow(QMainWindow, Ui_MainWindow): def loadEmptyDatas(self): self.mdlFlatData = QStandardItemModel(self) self.mdlCharacter = characterModel(self) - # self.mdlPersosProxy = persosProxyModel(self) - # self.mdlPersosInfos = QStandardItemModel(self) self.mdlLabels = QStandardItemModel(self) self.mdlStatus = QStandardItemModel(self) self.mdlPlots = plotModel(self) diff --git a/manuskript/ui/welcome.py b/manuskript/ui/welcome.py index ba2ef53..5d2b90e 100644 --- a/manuskript/ui/welcome.py +++ b/manuskript/ui/welcome.py @@ -422,10 +422,12 @@ class welcome(QWidget, Ui_welcome): self.tree.expandAll() def loadDefaultDatas(self): + """Initialize a basic Manuskript project.""" # Empty settings imp.reload(settings) settings.initDefaultValues() + self.mw.loadEmptyDatas() if self.template: t = [i for i in self._templates if i[0] == self.template[0]] @@ -433,20 +435,10 @@ class welcome(QWidget, Ui_welcome): settings.viewMode = "simple" # Tasks - self.mw.mdlFlatData = QStandardItemModel(2, 8, self.mw) - - # Persos - # self.mw.mdlPersos = QStandardItemModel(0, 0, self.mw) - self.mw.mdlCharacter = characterModel(self.mw) - # self.mdlPersosProxy = None # persosProxyModel() # None - # self.mw.mdlPersosProxy = persosProxyModel(self.mw) - - # self.mw.mdlPersosInfos = QStandardItemModel(1, 0, self.mw) - # self.mw.mdlPersosInfos.insertColumn(0, [QStandardItem("ID")]) - # self.mw.mdlPersosInfos.setHorizontalHeaderLabels(["Description"]) + self.mw.mdlFlatData.setRowCount(2) # data from: infos.txt, summary.txt + self.mw.mdlFlatData.setColumnCount(8) # version_1.py: len(infos.txt) == 8 # Labels - self.mw.mdlLabels = QStandardItemModel(self.mw) for color, text in [ (Qt.transparent, ""), (Qt.yellow, self.tr("Idea")), @@ -458,7 +450,6 @@ class welcome(QWidget, Ui_welcome): self.mw.mdlLabels.appendRow(QStandardItem(iconFromColor(color), text)) # Status - self.mw.mdlStatus = QStandardItemModel(self.mw) for text in [ "", self.tr("TODO"), @@ -468,14 +459,9 @@ class welcome(QWidget, Ui_welcome): ]: self.mw.mdlStatus.appendRow(QStandardItem(text)) - # Plot - self.mw.mdlPlots = plotModel(self.mw) + # Plot (nothing special needed) # Outline - self.mw.mdlOutline = outlineModel(self.mw) - - # World - self.mw.mdlWorld = worldModel(self.mw) root = self.mw.mdlOutline.rootItem _type = "md" @@ -509,3 +495,5 @@ class welcome(QWidget, Ui_welcome): if self.template and self.template[1]: addElement(root, self.template[1]) + + # World (nothing special needed) From 8884bac0ed85d2b9377ab30318400859032be2ba Mon Sep 17 00:00:00 2001 From: Jan Wester Date: Mon, 14 Oct 2019 03:43:17 +0200 Subject: [PATCH 34/51] Added logging & proper argument parsing. Sometimes you want to do just one thing, and in the process of implementing that one thing, you implement several others. This is one of those types of commits. Implementing the argparse library is for the sake of controlling the logging behaviour as well as other future I have yet to implement. It has all the standard goodies you'd expect, and I have also ported over the existing commandline arguments. (They may need a bit of polish still, but there is no regression compared to before, only improvement.) The logger is because it really needed to happen for numerous reasons. It still logs to the terminal, but by default it only does so for messages classified WARNING and above. These are the things we actively want users to see. But if this is not good enough, adding the --verbose flag will increasingly show more (-v shows INFO level and -vv also shows the DEBUG messages) so that us coders don't have to miss anything in the most convenient location. It also logs to a file with the very original filename manuskript.log. I may have to add commandline and/or settings arguments to improve that at some point in the future, but there distractions are endless. The log file contains timestamps and module information for easy interpretation that are not present on the terminal, and it contains all messages classified DEBUG and up. Ideally users will just be able to attach it to an issue(*) to deliver us all the information we need to help them with their inquiry. Last but not least, the other reason I needed logging implemented is that Qt has its own logging framework, and I needed to figure out how to siphon out the data and make it shut up. But there was no point in doing that as long as our own logging facilities were lacking... (*) I have yet to convert all existing print statements over to the new system, but that is probably going to be the next commit. This one has enough change in it already. --- manuskript/logging.py | 106 +++++++++++++++++++++++++++++++++++ manuskript/main.py | 61 ++++++++++++++++---- manuskript/tests/__init__.py | 3 +- 3 files changed, 157 insertions(+), 13 deletions(-) create mode 100644 manuskript/logging.py diff --git a/manuskript/logging.py b/manuskript/logging.py new file mode 100644 index 0000000..56e5bf2 --- /dev/null +++ b/manuskript/logging.py @@ -0,0 +1,106 @@ +# -*- coding: utf-8 -*- + +# While all logging should be done through the facilities offered by the +# standard python `logging` module, this module will take care of specific +# manuskript needs to keep it separate from the rest of the logic. + +from manuskript.functions import writablePath +import os +import logging + +LOGFORMAT_CONSOLE = "%(levelname)s> %(message)s" +LOGFORMAT_FILE = "%(asctime)s - %(name)s - %(levelname)s - %(message)s" + +logger = logging.getLogger(__name__) + +def setUp(console_level=logging.WARN): + """Sets up a convenient environment for logging. + + To console: >WARNING, plain. (Only the essence.)""" + + # The root_logger should merely trigger on warnings since it is the final + # stop after all categories we really care about didn't match. + root_logger = logging.getLogger() + root_logger.setLevel(logging.WARN) + # The manuskript_logger is what all of our own code will come by. + # Obviously, we care greatly about logging every single message. + manuskript_logger = logging.getLogger("manuskript") + manuskript_logger.setLevel(logging.DEBUG) + # The qt_logger sees all the Qt nonsense when it breaks. + # We don't really want to know... but we have to know. + qt_logger = logging.getLogger("qt") + qt_logger.setLevel(logging.DEBUG) + + # Send logs of WARNING+ to STDERR for higher visibility. + ch = logging.StreamHandler() + ch.setLevel(console_level) + ch.setFormatter(logging.Formatter(LOGFORMAT_CONSOLE)) + root_logger.addHandler(ch) + + logger.debug("Logging to STDERR.") + + +def logToFile(file_level=logging.DEBUG, logfile=None): + """Sets up the FileHandler that logs to a file. + + This is being done separately due to relying on QApplication being properly + configured; without it we cannot detect the proper location for the log file. + + To log file: >DEBUG, timestamped. (All the details.)""" + + if logfile is None: + logfile = os.path.join(writablePath(), "manuskript.log") + + # Log with extreme prejudice; everything goes to the log file. + # Because Qt gave me a megabyte-sized logfile while testing, it + # makes sense that the default behaviour of appending to existing + # log files may not be in our users best interest for the time + # being. (Unfortunately.) + try: + fh = logging.FileHandler(logfile, mode='w') + fh.setLevel(file_level) + fh.setFormatter(logging.Formatter(LOGFORMAT_FILE)) + + root_logger = logging.getLogger() + root_logger.addHandler(fh) + + # Use INFO level to make it easier to find for users. + logger.info("Logging to file: %s", logfile) + except Exception as ex: + logger.warning("Cannot log to file '%s'. Reason: %s", logfile, ex) + + +# Qt has its own logging facility that we would like to integrate into our own. +# See: http://thispageintentionally.blogspot.com/2014/03/trapping-qt-log-messages.html + +from PyQt5.QtCore import qInstallMessageHandler, QLibraryInfo, QMessageLogContext +from PyQt5.Qt import QtMsgType + +def qtMessageHandler(msg_type, msg_log_context, msg_string): + """Forwards Qt messages to Python logging system.""" + # Convert Qt msg type to logging level + log_level = [logging.DEBUG, + logging.WARNING, + logging.ERROR, + logging.FATAL] [ int(msg_type) ] + qtcl = logging.getLogger(msg_log_context.category or "qt.???") + # Some information may not be available unless using a PyQt debug build. + # See: https://www.riverbankcomputing.com/static/Docs/PyQt5/api/qtcore/qmessagelogcontext.html + if QLibraryInfo.isDebugBuild(): + qtcl.log(logging.DEBUG, + ' @ {0} : {1}'.format((msg_log_context.file or ""), msg_log_context.line) + ) + qtcl.log(logging.DEBUG, + ' ! {0}'.format((msg_log_context.function or "")) + ) + qtcl.log(log_level, msg_string) + +def integrateQtLogging(): + """Integrates Qt logging facilities to be a part of our own.""" + + # Note: the qtlogger is initialized in setUp() because it fits in + # nicely with the initialization of the other loggers over there. + # I also feel a lot safer this way. Qt is a curse that just keeps + # on giving, even when it isn't actually at fault. I hate you, Qt. + + qInstallMessageHandler(qtMessageHandler) \ No newline at end of file diff --git a/manuskript/main.py b/manuskript/main.py index 2988a89..3b05544 100644 --- a/manuskript/main.py +++ b/manuskript/main.py @@ -6,6 +6,7 @@ import platform import sys import signal +import manuskript.logging import manuskript.ui.views.webView from PyQt5.QtCore import QLocale, QTranslator, QSettings, Qt from PyQt5.QtGui import QIcon, QColor, QPalette @@ -16,15 +17,24 @@ from manuskript.version import getVersion faulthandler.enable() +import logging +logger = logging.getLogger(__name__) -def prepare(tests=False): +def prepare(arguments, tests=False): app = QApplication(sys.argv) app.setOrganizationName("manuskript" + ("_tests" if tests else "")) app.setOrganizationDomain("www.theologeek.ch") app.setApplicationName("manuskript" + ("_tests" if tests else "")) app.setApplicationVersion(getVersion()) - print("Running manuskript version {}.".format(getVersion())) + # Beginning logging to a file. This cannot be done earlier due to the + # default location of the log file being dependent on QApplication. + manuskript.logging.logToFile(logfile=arguments.logfile) + + # Handle all sorts of Qt logging messages in Python. + manuskript.logging.integrateQtLogging() + + logger.info("Running manuskript version {}.".format(getVersion())) icon = QIcon() for i in [16, 32, 64, 128, 256, 512]: icon.addFile(appPath("icons/Manuskript/icon-{}px.png".format(i))) @@ -47,7 +57,7 @@ def prepare(tests=False): """Tries to load and activate a given translation for use.""" if appTranslator.load(translation, appPath("i18n")): app.installTranslator(appTranslator) - print("Loaded translation: {}".format(translation)) + logger.info("Loaded translation: {}".format(translation)) # Note: QTranslator.load() does some fancy heuristics where it simplifies # the given locale until it is 'close enough' if the given filename does # not work out. For example, if given 'i18n/manuskript_en_US.qm', it tries: @@ -62,7 +72,7 @@ def prepare(tests=False): # filenames when you observe strange behaviour with the loaded translations. return True else: - print("No translation found or loaded. ({})".format(translation)) + logger.info("No translation found or loaded. ({})".format(translation)) return False def activateTranslation(translation, source): @@ -85,7 +95,7 @@ def prepare(tests=False): break if using_builtin_translation: - print("Using the builtin translation.") + logger.info("Using the builtin translation. (U.S. English)") # Load application translation translation = "" @@ -99,7 +109,7 @@ def prepare(tests=False): translation = QLocale().uiLanguages() source = "available ui languages" - print("Preferred translation: {} (based on {})".format(("builtin" if translation == "" else translation), source)) + logger.info("Preferred translation: {} (based on {})".format(("builtin" if translation == "" else translation), source)) activateTranslation(translation, source) def respectSystemDarkThemeSetting(): @@ -164,15 +174,16 @@ def prepare(tests=False): MW._defaultCursorFlashTime = qApp.cursorFlashTime() # Command line project - if len(sys.argv) > 1 and sys.argv[1][-4:] == ".msk": + #if len(sys.argv) > 1 and sys.argv[1][-4:] == ".msk": + if arguments.filename is not None and arguments.filename[-4:] == ".msk": + #TODO: integrate better with argparsing. if os.path.exists(sys.argv[1]): path = os.path.abspath(sys.argv[1]) MW._autoLoadProject = path return app, MW - -def launch(app, MW=None): +def launch(arguments, app, MW = None): if MW == None: from manuskript.functions import mainWindow MW = mainWindow() @@ -184,7 +195,7 @@ def launch(app, MW=None): # Code reference : # https://github.com/ipython/ipykernel/blob/master/examples/embedding/ipkernel_qtapp.py # https://github.com/ipython/ipykernel/blob/master/examples/embedding/internal_ipkernel.py - if len(sys.argv) > 1 and sys.argv[-1] == "--console": + if arguments.console: try: from IPython.lib.kernel import connect_qtconsole from ipykernel.kernelapp import IPKernelApp @@ -241,18 +252,44 @@ def setup_signal_handlers(MW): signal.signal(signal.SIGTERM, sigint_handler("SIGTERM", MW)) +def process_commandline(argv): + import argparse + parser = argparse.ArgumentParser(description="Run the manuskript application.") + parser.add_argument("--console", help="open the IPython Jupyter QT Console as a debugging aid", + action="store_true") + parser.add_argument("-v", "--verbose", action="count", default=1, help="lower the threshold for messages logged to the terminal") + parser.add_argument("-L", "--logfile", default=None, help="override the default log file location") + parser.add_argument("filename", nargs="?", metavar="FILENAME", help="the manuskript project (.msk) to open") + + args = parser.parse_args(args=argv) + + # Verbosity logic, see: https://gist.github.com/ms5/9f6df9c42a5f5435be0e + #args.verbose = 70 - (10*args.verbose) if args.verbose > 0 else 0 + + # Users cannot report what they do not notice: show CRITICAL, ERROR and WARNING always. + # Note that the default is set to 1, so account for that. + args.verbose = 40 - (10*args.verbose) if args.verbose > 0 else 0 + + return args + + def run(): """ Run separates prepare and launch for two reasons: 1. I've read somewhere it helps with potential segfault (see comment below) 2. So that prepare can be used in tests, without running the whole thing """ + # Parse command-line arguments. + arguments = process_commandline(sys.argv) + # Initialize logging. (Does not include Qt integration yet.) + manuskript.logging.setUp(console_level=arguments.verbose) + # Need to return and keep `app` otherwise it gets deleted. - app, MW = prepare() + app, MW = prepare(arguments) setup_signal_handlers(MW) # Separating launch to avoid segfault, so it seem. # Cf. http://stackoverflow.com/questions/12433491/is-this-pyqt-4-python-bug-or-wrongly-behaving-code - launch(app, MW) + launch(arguments, app, MW) if __name__ == "__main__": diff --git a/manuskript/tests/__init__.py b/manuskript/tests/__init__.py index 19c56d6..54a0fe1 100644 --- a/manuskript/tests/__init__.py +++ b/manuskript/tests/__init__.py @@ -13,7 +13,8 @@ QApplication([]) # Create app and mainWindow from manuskript import main -app, MW = main.prepare(tests=True) +arguments = main.process_commandline([]) +app, MW = main.prepare(arguments, tests=True) # FIXME: Again, don't know why, but when closing a project and then reopening # one, we get a `TypeError: connection is not unique` in MainWindow: From ff2cbca028194c0ed3fef5ef9e4de2d211e883ec Mon Sep 17 00:00:00 2001 From: Jan Wester Date: Mon, 14 Oct 2019 14:36:06 +0200 Subject: [PATCH 35/51] Converted most print statements to use logging Some snippets have yet to be converted due to the more complex nature of those snippets, and to keep things neat a separate commit makes more sense for those. --- manuskript/converters/markdownConverter.py | 5 +++- manuskript/converters/pandocConverter.py | 6 +++-- manuskript/exporter/basic.py | 6 +++-- manuskript/exporter/manuskript/plainText.py | 5 +++- manuskript/exporter/pandoc/__init__.py | 6 +++-- manuskript/loadSave.py | 6 +++-- manuskript/load_save/version_0.py | 13 +++++---- manuskript/load_save/version_1.py | 9 ++++--- manuskript/main.py | 14 +++++----- manuskript/mainWindow.py | 23 +++++++++------- manuskript/models/abstractItem.py | 4 ++- manuskript/models/abstractModel.py | 6 +++-- manuskript/models/outlineItem.py | 4 ++- manuskript/models/references.py | 13 +++++---- manuskript/settings.py | 5 +++- manuskript/ui/collapsibleGroupBox.py | 4 ++- manuskript/ui/editors/MDFunctions.py | 4 ++- manuskript/ui/editors/fullScreenEditor.py | 6 +++-- manuskript/ui/editors/mainEditor.py | 4 ++- manuskript/ui/editors/tabSplitter.py | 4 ++- .../ui/highlighters/basicHighlighter.py | 6 +++-- .../ui/highlighters/markdownTokenizer.py | 5 +++- manuskript/ui/views/MDEditView.py | 10 ++++--- manuskript/ui/views/dndView.py | 1 - manuskript/ui/views/propertiesView.py | 4 ++- manuskript/ui/views/textEditView.py | 27 ++++++++++--------- manuskript/ui/welcome.py | 6 +++-- 27 files changed, 133 insertions(+), 73 deletions(-) diff --git a/manuskript/converters/markdownConverter.py b/manuskript/converters/markdownConverter.py index 1b2883a..6d4f2a4 100644 --- a/manuskript/converters/markdownConverter.py +++ b/manuskript/converters/markdownConverter.py @@ -11,6 +11,9 @@ from PyQt5.QtGui import QCursor from manuskript.converters import abstractConverter from manuskript.functions import mainWindow +import logging +LOGGER = logging.getLogger(__name__) + try: import markdown as MD except ImportError: @@ -31,7 +34,7 @@ class markdownConverter(abstractConverter): @classmethod def convert(self, markdown): if not self.isValid: - print("ERROR: markdownConverter is called but not valid.") + LOGGER.error("markdownConverter is called but not valid.") return "" html = MD.markdown(markdown) diff --git a/manuskript/converters/pandocConverter.py b/manuskript/converters/pandocConverter.py index ea91e9a..566c580 100644 --- a/manuskript/converters/pandocConverter.py +++ b/manuskript/converters/pandocConverter.py @@ -11,6 +11,8 @@ from PyQt5.QtGui import QCursor from manuskript.converters import abstractConverter from manuskript.functions import mainWindow +import logging +LOGGER = logging.getLogger(__name__) class pandocConverter(abstractConverter): @@ -38,7 +40,7 @@ class pandocConverter(abstractConverter): @classmethod def convert(self, src, _from="markdown", to="html", args=None, outputfile=None): if not self.isValid: - print("ERROR: pandocConverter is called but not valid.") + LOGGER.error("pandocConverter is called but not valid.") return "" cmd = [self.runCmd()] @@ -70,7 +72,7 @@ class pandocConverter(abstractConverter): if stderr: err = stderr.decode("utf-8") - print(err) + LOGGER.error(err) QMessageBox.critical(mainWindow().dialog, qApp.translate("Export", "Error"), err) return None diff --git a/manuskript/exporter/basic.py b/manuskript/exporter/basic.py index 4fa4ad2..7f02f9c 100644 --- a/manuskript/exporter/basic.py +++ b/manuskript/exporter/basic.py @@ -10,6 +10,8 @@ from PyQt5.QtWidgets import QWidget from manuskript.models import outlineItem from manuskript.functions import mainWindow +import logging +LOGGER = logging.getLogger(__name__) class basicExporter: @@ -58,7 +60,7 @@ class basicExporter: elif self.isValid() == 1: run = self.customPath else: - print("Error: no command for", self.name) + LOGGER.error("No command for %s.", self.name) return None r = subprocess.check_output([run] + args) # timeout=.2 return r.decode("utf-8") @@ -71,7 +73,7 @@ class basicExporter: # try: # output = subprocess.check_output(cmdl, stdin=cmd.stdout, stderr=subprocess.STDOUT) # , cwd="/tmp" # except subprocess.CalledProcessError as e: - # print("Error!") + # LOGGER.error("Failed to read from process output.") # return text # cmd.wait() # diff --git a/manuskript/exporter/manuskript/plainText.py b/manuskript/exporter/manuskript/plainText.py index 4eac456..187e863 100644 --- a/manuskript/exporter/manuskript/plainText.py +++ b/manuskript/exporter/manuskript/plainText.py @@ -10,6 +10,9 @@ from manuskript.models import outlineItem from manuskript.ui.exporters.manuskript.plainTextSettings import exporterSettings import codecs +import logging +LOGGER = logging.getLogger(__name__) + class plainText(basicFormat): name = qApp.translate("Export", "Plain text") description = qApp.translate("Export", """Simplest export to plain text. Allows you to use your own markup not understood @@ -90,7 +93,7 @@ class plainText(basicFormat): content = self.output(settingsWidget) if not content: - print("Error: No content. Nothing saved.") + LOGGER.error("No content. Nothing saved.") return with open(filename, "w", encoding='utf8') as f: diff --git a/manuskript/exporter/pandoc/__init__.py b/manuskript/exporter/pandoc/__init__.py index a920fcb..a9637e9 100644 --- a/manuskript/exporter/pandoc/__init__.py +++ b/manuskript/exporter/pandoc/__init__.py @@ -13,6 +13,8 @@ from manuskript.exporter.pandoc.outputFormats import ePub, OpenDocument, DocX from manuskript.exporter.pandoc.plainText import reST, markdown, latex, OPML from manuskript.functions import mainWindow +import logging +LOGGER = logging.getLogger(__name__) class pandocExporter(basicExporter): @@ -53,7 +55,7 @@ class pandocExporter(basicExporter): elif self.isValid() == 1: run = self.customPath else: - print("Error: no command for pandoc") + LOGGER.error("No command for pandoc.") return None args = [run] + args @@ -101,7 +103,7 @@ class pandocExporter(basicExporter): + "Return code" + ": %d\n" % (p.returncode) \ + "Command and parameters" + ":\n%s\n" % (p.args) \ + "Stderr content" + ":\n" + stderr.decode("utf-8") - print(err) + LOGGER.error(err) QMessageBox.critical(mainWindow().dialog, qApp.translate("Export", "Error"), err) return None diff --git a/manuskript/loadSave.py b/manuskript/loadSave.py index e0d95b2..7657376 100644 --- a/manuskript/loadSave.py +++ b/manuskript/loadSave.py @@ -9,6 +9,8 @@ import zipfile import manuskript.load_save.version_0 as v0 import manuskript.load_save.version_1 as v1 +import logging +LOGGER = logging.getLogger(__name__) def saveProject(version=None): @@ -57,8 +59,8 @@ def loadProject(project): with open(project, "r", encoding="utf-8") as f: version = int(f.read()) - print("Loading:", project) - print("Detected file format version: {}. Zip: {}.".format(version, isZip)) + LOGGER.info("Loading: %s", project) + LOGGER.info("Detected file format version: {}. Zip: {}.".format(version, isZip)) if version == 0: v0.loadProject(project) diff --git a/manuskript/load_save/version_0.py b/manuskript/load_save/version_0.py index e89aa22..a64f851 100644 --- a/manuskript/load_save/version_0.py +++ b/manuskript/load_save/version_0.py @@ -16,6 +16,9 @@ from manuskript import settings from manuskript.functions import iconColor, iconFromColorString, mainWindow from manuskript.models.characterModel import Character, CharacterInfo +import logging +LOGGER = logging.getLogger(__name__) + try: import zlib # Used with zipfile for compression @@ -37,7 +40,7 @@ def saveProject(): files.append((saveStandardItemModelXML(mw.mdlFlatData), "flatModel.xml")) - print("ERROR: file format 0 does not save characters !") + LOGGER.error("File format 0 does not save characters!") # files.append((saveStandardItemModelXML(mw.mdlCharacter), # "perso.xml")) files.append((saveStandardItemModelXML(mw.mdlWorld), @@ -91,7 +94,7 @@ def saveStandardItemModelXML(mdl, xml=None): data = ET.SubElement(root, "data") saveItem(data, mdl) - # print(qApp.tr("Saving to {}.").format(xml)) + # LOGGER.info("Saving to {}.".format(xml)) if xml: ET.ElementTree(root).write(xml, encoding="UTF-8", xml_declaration=True, pretty_print=True) else: @@ -189,13 +192,13 @@ def loadStandardItemModelXML(mdl, xml, fromString=False): """Load data to a QStandardItemModel mdl from xml. By default xml is a filename. If fromString=True, xml is a string containing the data.""" - # print(qApp.tr("Loading {}... ").format(xml), end="") + # LOGGER.info("Loading {}...".format(xml)) if not fromString: try: tree = ET.parse(xml) except: - print("Failed.") + LOGGER.error("Failed to load XML for QStandardItemModel (%s).", xml) return else: root = ET.fromstring(xml) @@ -210,7 +213,7 @@ def loadStandardItemModelXML(mdl, xml, fromString=False): for l in root.find("header").find("vertical").findall("label"): vLabels.append(l.attrib["text"]) - # print(root.find("header").find("vertical").text) + # LOGGER.debug(root.find("header").find("vertical").text) # mdl.setVerticalHeaderLabels(vLabels) # mdl.setHorizontalHeaderLabels(hLabels) diff --git a/manuskript/load_save/version_1.py b/manuskript/load_save/version_1.py index a5e9626..8536eb9 100644 --- a/manuskript/load_save/version_1.py +++ b/manuskript/load_save/version_1.py @@ -26,6 +26,9 @@ from manuskript.load_save.version_0 import loadFilesFromZip from manuskript.models.characterModel import CharacterInfo from manuskript.models import outlineItem +import logging +LOGGER = logging.getLogger(__name__) + try: import zlib # Used with zipfile for compression @@ -125,7 +128,7 @@ def saveProject(zip=None): # Sanity check (see PR-583): make sure we actually have a current project. if project == None: - print("Error: cannot save project because there is no current project in the UI.") + LOGGER.error("Cannot save project because there is no current project in the UI.") return False # File format version @@ -307,7 +310,7 @@ def saveProject(zip=None): # not exist, we check the parent folder, because it might be a new project. if os.path.exists(project) and not os.access(project, os.W_OK) or \ not os.path.exists(project) and not os.access(os.path.dirname(project), os.W_OK): - print("Error: you don't have write access to save this project there.") + LOGGER.error("You don't have write access to save this project there.") return False #################################################################################################################### @@ -924,7 +927,7 @@ def addTextItems(mdl, odict, parent=None): item._lastPath = odict[k + ":lastPath"] elif not ":lastPath" in k and k != "folder.txt": - print("* Strange things in file {}".format(k)) + LOGGER.debug("Strange things in file %s".format(k)) def outlineFromMMD(text, parent): diff --git a/manuskript/main.py b/manuskript/main.py index 3b05544..e9f3a08 100644 --- a/manuskript/main.py +++ b/manuskript/main.py @@ -18,7 +18,7 @@ from manuskript.version import getVersion faulthandler.enable() import logging -logger = logging.getLogger(__name__) +LOGGER = logging.getLogger(__name__) def prepare(arguments, tests=False): app = QApplication(sys.argv) @@ -34,7 +34,7 @@ def prepare(arguments, tests=False): # Handle all sorts of Qt logging messages in Python. manuskript.logging.integrateQtLogging() - logger.info("Running manuskript version {}.".format(getVersion())) + LOGGER.info("Running manuskript version {}.".format(getVersion())) icon = QIcon() for i in [16, 32, 64, 128, 256, 512]: icon.addFile(appPath("icons/Manuskript/icon-{}px.png".format(i))) @@ -57,7 +57,7 @@ def prepare(arguments, tests=False): """Tries to load and activate a given translation for use.""" if appTranslator.load(translation, appPath("i18n")): app.installTranslator(appTranslator) - logger.info("Loaded translation: {}".format(translation)) + LOGGER.info("Loaded translation: {}".format(translation)) # Note: QTranslator.load() does some fancy heuristics where it simplifies # the given locale until it is 'close enough' if the given filename does # not work out. For example, if given 'i18n/manuskript_en_US.qm', it tries: @@ -72,7 +72,7 @@ def prepare(arguments, tests=False): # filenames when you observe strange behaviour with the loaded translations. return True else: - logger.info("No translation found or loaded. ({})".format(translation)) + LOGGER.info("No translation found or loaded. ({})".format(translation)) return False def activateTranslation(translation, source): @@ -95,7 +95,7 @@ def prepare(arguments, tests=False): break if using_builtin_translation: - logger.info("Using the builtin translation. (U.S. English)") + LOGGER.info("Using the builtin translation. (U.S. English)") # Load application translation translation = "" @@ -109,7 +109,7 @@ def prepare(arguments, tests=False): translation = QLocale().uiLanguages() source = "available ui languages" - logger.info("Preferred translation: {} (based on {})".format(("builtin" if translation == "" else translation), source)) + LOGGER.info("Preferred translation: {} (based on {})".format(("builtin" if translation == "" else translation), source)) activateTranslation(translation, source) def respectSystemDarkThemeSetting(): @@ -241,6 +241,8 @@ def launch(arguments, app, MW = None): def sigint_handler(sig, MW): def handler(*args): + # Log before winding down to preserve order of cause and effect. + LOGGER.info(f'{sig} received. Quitting...') MW.close() print(f'{sig} received, quit.') diff --git a/manuskript/mainWindow.py b/manuskript/mainWindow.py index 38d5e4b..4352070 100644 --- a/manuskript/mainWindow.py +++ b/manuskript/mainWindow.py @@ -38,6 +38,9 @@ from manuskript.ui.statusLabel import statusLabel from manuskript.ui.views.textEditView import textEditView from manuskript.functions import Spellchecker +import logging +LOGGER = logging.getLogger(__name__) + class MainWindow(QMainWindow, Ui_MainWindow): # dictChanged = pyqtSignal(str) @@ -584,7 +587,7 @@ class MainWindow(QMainWindow, Ui_MainWindow): If ``loadFromFile`` is False, then it does not load datas from file. It assumes that the datas have been populated in a different way.""" if loadFromFile and not os.path.exists(project): - print(self.tr("The file {} does not exist. Has it been moved or deleted?").format(project)) + LOGGER.warning("The file {} does not exist. Has it been moved or deleted?".format(project)) F.statusMessage( self.tr("The file {} does not exist. Has it been moved or deleted?").format(project), importance=3) return @@ -850,7 +853,7 @@ class MainWindow(QMainWindow, Ui_MainWindow): # No UI feedback here as this code path indicates a race condition that happens # after the user has already closed the project through some way. But in that # scenario, this code should not be reachable to begin with. - print("Bug: there is no current project to save.") + LOGGER.error("There is no current project to save.") return r = loadSave.saveProject() # version=0 @@ -861,12 +864,11 @@ class MainWindow(QMainWindow, Ui_MainWindow): feedback = self.tr("Project {} saved.").format(projectName) F.statusMessage(feedback, importance=0) + LOGGER.info("Project {} saved.".format(projectName)) else: feedback = self.tr("WARNING: Project {} not saved.").format(projectName) F.statusMessage(feedback, importance=3) - - # Giving some feedback in console - print(feedback) + LOGGER.warning("Project {} not saved.".format(projectName)) def loadEmptyDatas(self): self.mdlFlatData = QStandardItemModel(self) @@ -883,13 +885,13 @@ class MainWindow(QMainWindow, Ui_MainWindow): # Giving some feedback if not errors: - print(self.tr("Project {} loaded.").format(project)) + LOGGER.info("Project {} loaded.".format(project)) F.statusMessage( self.tr("Project {} loaded.").format(project), 2000) else: - print(self.tr("Project {} loaded with some errors:").format(project)) + LOGGER.error("Project {} loaded with some errors:".format(project)) for e in errors: - print(self.tr(" * {} wasn't found in project file.").format(e)) + LOGGER.error(" * {} wasn't found in project file.".format(e)) F.statusMessage( self.tr("Project {} loaded with some errors.").format(project), 5000, importance = 3) @@ -1525,7 +1527,7 @@ class MainWindow(QMainWindow, Ui_MainWindow): self.menuView.addMenu(self.menuMode) self.menuView.addSeparator() - # print("Generating menus with", settings.viewSettings) + # LOGGER.debug("Generating menus with %s.", settings.viewSettings) for mnu, mnud, icon in menus: m = QMenu(mnu, self.menuView) @@ -1619,7 +1621,8 @@ class MainWindow(QMainWindow, Ui_MainWindow): warning2 = self.tr("PyQt {} and Qt {} are in use.").format(qVersion(), PYQT_VERSION_STR) # Don't translate for debug log. - print("WARNING:", warning1, warning2) + LOGGER.warning(warning1) + LOGGER.warning(warning2) msg = QMessageBox(QMessageBox.Warning, self.tr("Proceed with import at your own risk"), diff --git a/manuskript/models/abstractItem.py b/manuskript/models/abstractItem.py index a6e6096..e481b4d 100644 --- a/manuskript/models/abstractItem.py +++ b/manuskript/models/abstractItem.py @@ -13,6 +13,8 @@ import re from manuskript import enums +import logging +LOGGER = logging.getLogger(__name__) class abstractItem(): @@ -209,7 +211,7 @@ class abstractItem(): self.IDs = self.listAllIDs() if max([self.IDs.count(i) for i in self.IDs if i]) != 1: - print("WARNING ! There are some items with same IDs:", [i for i in self.IDs if i and self.IDs.count(i) != 1]) + LOGGER.warning("There are some items with overlapping IDs: %s", [i for i in self.IDs if i and self.IDs.count(i) != 1]) def checkChildren(item): for c in item.children(): diff --git a/manuskript/models/abstractModel.py b/manuskript/models/abstractModel.py index 828643d..425e0a2 100644 --- a/manuskript/models/abstractModel.py +++ b/manuskript/models/abstractModel.py @@ -26,6 +26,8 @@ except: pass import time, os +import logging +LOGGER = logging.getLogger(__name__) class abstractModel(QAbstractItemModel): """ @@ -74,7 +76,7 @@ class abstractModel(QAbstractItemModel): if len(parent.children()) == 0: return None - # print(item.title(), [i.title() for i in parent.children()]) + #LOGGER.debug("%s: %s", item.title(), [i.title() for i in parent.children()]) row = parent.children().index(item) col = column @@ -168,7 +170,7 @@ class abstractModel(QAbstractItemModel): # self.dataChanged.emit(index.sibling(index.row(), 0), # index.sibling(index.row(), max([i.value for i in Outline]))) - # print("Model emit", index.row(), index.column()) + # LOGGER.debug("Model dataChanged emit: %s, %s", index.row(), index.column()) self.dataChanged.emit(index, index) if index.column() == Outline.type: diff --git a/manuskript/models/outlineItem.py b/manuskript/models/outlineItem.py index 1d80be6..97160aa 100644 --- a/manuskript/models/outlineItem.py +++ b/manuskript/models/outlineItem.py @@ -23,6 +23,8 @@ except: # number formatting pass +import logging +LOGGER = logging.getLogger(__name__) class outlineItem(abstractItem, searchableItem): @@ -382,7 +384,7 @@ class outlineItem(abstractItem, searchableItem): searchIn = character.name() else: searchIn = "" - print("Character POV not found:", self.POV()) + LOGGER.error("Character POV not found: %s", self.POV()) elif c == self.enum.status: searchIn = mainWindow.mdlStatus.item(F.toInt(self.status()), 0).text() diff --git a/manuskript/models/references.py b/manuskript/models/references.py index c54e290..9baa8db 100644 --- a/manuskript/models/references.py +++ b/manuskript/models/references.py @@ -3,6 +3,9 @@ import re +import logging +LOGGER = logging.getLogger(__name__) + ############################################################################### # SHORT REFERENCES ############################################################################### @@ -627,7 +630,7 @@ def open(ref): mw.lstCharacters.setCurrentItem(item) return True - print("Error: Ref {} not found".format(ref)) + LOGGER.error("Character reference {} not found.".format(ref)) return False elif _type == TextLetter: @@ -639,7 +642,7 @@ def open(ref): mw.mainEditor.setCurrentModelIndex(index, newTab=True) return True else: - print("Ref not found") + LOGGER.error("Text reference {} not found.".format(ref)) return False elif _type == PlotLetter: @@ -651,7 +654,7 @@ def open(ref): mw.lstPlots.setCurrentItem(item) return True - print("Ref not found") + LOGGER.error("Plot reference {} not found.".format(ref)) return False elif _type == WorldLetter: @@ -664,8 +667,8 @@ def open(ref): mw.mdlWorld.indexFromItem(item)) return True - print("Ref not found") + LOGGER.error("World reference {} not found.".format(ref)) return False - print("Ref not implemented") + LOGGER.error("Unable to identify reference type: {}.".format(ref)) return False diff --git a/manuskript/settings.py b/manuskript/settings.py index 8f4884e..56eb0ec 100644 --- a/manuskript/settings.py +++ b/manuskript/settings.py @@ -8,6 +8,9 @@ from PyQt5.QtWidgets import qApp from manuskript.enums import Outline +import logging +LOGGER = logging.getLogger(__name__) + # TODO: move some/all of those settings to application settings and not project settings # in order to allow a shared project between several writers @@ -187,7 +190,7 @@ def load(string, fromString=False, protocol=None): allSettings = pickle.load(f) except: - print("{} doesn't exist, cannot load settings.".format(string)) + LOGGER.error("Cannot load settings, {} does not exist.".format(string)) return else: if protocol == 0: diff --git a/manuskript/ui/collapsibleGroupBox.py b/manuskript/ui/collapsibleGroupBox.py index 2b3cc04..e6c1b44 100644 --- a/manuskript/ui/collapsibleGroupBox.py +++ b/manuskript/ui/collapsibleGroupBox.py @@ -6,6 +6,8 @@ from PyQt5.QtWidgets import QSizePolicy, QGroupBox, QWidget, QStylePainter, QSty QStyle, QStyleOptionFrame, QStyleOptionFocusRect from manuskript.ui import style as S +import logging +LOGGER = logging.getLogger(__name__) class collapsibleGroupBox(QGroupBox): def __init__(self, parent=None): @@ -25,7 +27,7 @@ class collapsibleGroupBox(QGroupBox): self.tempWidget.setLayout(self.layout()) # Set empty layout l = QVBoxLayout() - # print(l.contentsMargins().left(), l.contentsMargins().bottom(), l.contentsMargins().top(), ) + # LOGGER.debug("Bounds: %s, %s, %s, %s", l.contentsMargins().left(), l.contentsMargins().bottom(), l.contentsMargins().top(), l.contentsMargins().right()) l.setContentsMargins(0, 0, 0, 0) self.setLayout(l) self.setSizePolicy(QSizePolicy.Preferred, QSizePolicy.Maximum) diff --git a/manuskript/ui/editors/MDFunctions.py b/manuskript/ui/editors/MDFunctions.py index 0fbd8b8..058de34 100644 --- a/manuskript/ui/editors/MDFunctions.py +++ b/manuskript/ui/editors/MDFunctions.py @@ -6,6 +6,8 @@ import re from PyQt5.QtCore import QRegExp from PyQt5.QtGui import QTextCursor +import logging +LOGGER = logging.getLogger(__name__) def MDFormatSelection(editor, style): """ @@ -15,5 +17,5 @@ def MDFormatSelection(editor, style): 1: italic 2: code """ - print("Formatting:", style, " (Unimplemented yet !)") + LOGGER.error("Formatting: %s (Not implemented!)", style) # FIXME \ No newline at end of file diff --git a/manuskript/ui/editors/fullScreenEditor.py b/manuskript/ui/editors/fullScreenEditor.py index 42941f9..5c7200d 100644 --- a/manuskript/ui/editors/fullScreenEditor.py +++ b/manuskript/ui/editors/fullScreenEditor.py @@ -19,6 +19,8 @@ from manuskript.ui.editors.themes import loadThemeDatas from manuskript.ui.views.MDEditView import MDEditView from manuskript.functions import Spellchecker +import logging +LOGGER = logging.getLogger(__name__) class fullScreenEditor(QWidget): def __init__(self, index, parent=None, screenNumber=None): @@ -177,7 +179,7 @@ class fullScreenEditor(QWidget): # self.show() def __del__(self): - # print("Leaving fullScreenEditor via Destructor event", flush=True) + LOGGER.debug("Leaving fullScreenEditor via Destructor event.") self.showNormal() self.close() @@ -286,7 +288,7 @@ class fullScreenEditor(QWidget): def keyPressEvent(self, event): if event.key() in [Qt.Key_Escape, Qt.Key_F11] and \ not self._locked: - # print("Leaving fullScreenEditor via keyPressEvent", flush=True) + LOGGER.debug("Leaving fullScreenEditor via keyPressEvent.") self.showNormal() self.close() elif (event.modifiers() & Qt.AltModifier) and \ diff --git a/manuskript/ui/editors/mainEditor.py b/manuskript/ui/editors/mainEditor.py index d8a5c67..8cc6453 100644 --- a/manuskript/ui/editors/mainEditor.py +++ b/manuskript/ui/editors/mainEditor.py @@ -20,6 +20,9 @@ try: except: pass +import logging +LOGGER = logging.getLogger(__name__) + class mainEditor(QWidget, Ui_mainEditor): """ `mainEditor` is responsible for opening `outlineItem`s and offering information @@ -389,7 +392,6 @@ class mainEditor(QWidget, Ui_mainEditor): ############################################################################### def setDict(self, dict): - print(dict) for w in self.allAllTabs(): w.setDict(dict) diff --git a/manuskript/ui/editors/tabSplitter.py b/manuskript/ui/editors/tabSplitter.py index 0ba8750..d6f4ff3 100644 --- a/manuskript/ui/editors/tabSplitter.py +++ b/manuskript/ui/editors/tabSplitter.py @@ -10,6 +10,8 @@ from manuskript.functions import mainWindow, appPath from manuskript.ui import style from manuskript.ui.editors.tabSplitter_ui import Ui_tabSplitter +import logging +LOGGER = logging.getLogger(__name__) class tabSplitter(QWidget, Ui_tabSplitter): """ @@ -39,7 +41,7 @@ class tabSplitter(QWidget, Ui_tabSplitter): # try: # self.tab.setTabBarAutoHide(True) # except AttributeError: - # print("Info: install Qt 5.4 or higher to use tab bar auto-hide in editor.") + # LOGGER.info("Install Qt 5.4 or higher to use tab bar auto-hide in editor.") # Button to split self.btnSplit = QPushButton(self) diff --git a/manuskript/ui/highlighters/basicHighlighter.py b/manuskript/ui/highlighters/basicHighlighter.py index 17ae8bd..2e7358e 100644 --- a/manuskript/ui/highlighters/basicHighlighter.py +++ b/manuskript/ui/highlighters/basicHighlighter.py @@ -12,6 +12,8 @@ import manuskript.ui.style as S from manuskript import settings from manuskript import functions as F +import logging +LOGGER = logging.getLogger(__name__) class BasicHighlighter(QSyntaxHighlighter): def __init__(self, editor): @@ -130,14 +132,14 @@ class BasicHighlighter(QSyntaxHighlighter): before you do any custom highlighting. Or implement doHighlightBlock. """ - #print(">", self.currentBlock().document().availableUndoSteps()) + #LOGGER.debug("undoSteps before: %s", self.currentBlock().document().availableUndoSteps()) c = QTextCursor(self.currentBlock()) #c.joinPreviousEditBlock() bf = QTextBlockFormat(self._defaultBlockFormat) if bf != c.blockFormat(): c.setBlockFormat(bf) #c.endEditBlock() - #print(" ", self.currentBlock().document().availableUndoSteps()) + #LOGGER.debug("undoSteps after: %s", self.currentBlock().document().availableUndoSteps()) # self.setFormat(0, len(text), self._defaultCharFormat) diff --git a/manuskript/ui/highlighters/markdownTokenizer.py b/manuskript/ui/highlighters/markdownTokenizer.py index 9bae886..237b18e 100644 --- a/manuskript/ui/highlighters/markdownTokenizer.py +++ b/manuskript/ui/highlighters/markdownTokenizer.py @@ -9,6 +9,9 @@ from PyQt5.QtWidgets import * from manuskript.ui.highlighters import MarkdownState as MS from manuskript.ui.highlighters import MarkdownTokenType as MTT +import logging +LOGGER = logging.getLogger(__name__) + # This file is simply a python translation of GhostWriter's Tokenizer. # http://wereturtle.github.io/ghostwriter/ # GPLV3+. @@ -56,7 +59,7 @@ class HighlightTokenizer: self.tokens.append(token) if token.type == -1: - print("Error here", token.position, token.length) + LOGGER.error("Token type invalid: position %s, length %s.", token.position, token.length) def setState(self, state): self.state = state diff --git a/manuskript/ui/views/MDEditView.py b/manuskript/ui/views/MDEditView.py index c5f4c33..dcd5e3a 100644 --- a/manuskript/ui/views/MDEditView.py +++ b/manuskript/ui/views/MDEditView.py @@ -14,6 +14,8 @@ from manuskript.ui.highlighters.markdownEnums import MarkdownState as MS from manuskript.ui.highlighters.markdownTokenizer import MarkdownTokenizer as MT from manuskript import functions as F +import logging +LOGGER = logging.getLogger(__name__) class MDEditView(textEditView): @@ -660,10 +662,10 @@ class ImageTooltip: return else: # Somehow we lost track. Log what we can to hopefully figure it out. - print("Warning: unable to match fetched data for tooltip to original request.") - print("- Completed request:", url_key) - print("- Status upon finishing:", reply.error(), reply.errorString()) - print("- Currently processing:", ImageTooltip.processing) + LOGGER.warning("Unable to match fetched data for tooltip to original request.") + LOGGER.warning("- Completed request: %s", url_key) + LOGGER.warning("- Status upon finishing: %s, %s", reply.error(), reply.errorString()) + LOGGER.warning("- Currently processing: %s", ImageTooltip.processing) return # Update cache with retrieved data. diff --git a/manuskript/ui/views/dndView.py b/manuskript/ui/views/dndView.py index c028964..b2abf08 100644 --- a/manuskript/ui/views/dndView.py +++ b/manuskript/ui/views/dndView.py @@ -13,7 +13,6 @@ class dndView(QAbstractItemView): def dragMoveEvent(self, event): # return QAbstractItemView.dragMoveEvent(self, event) - # print(a) if event.keyboardModifiers() & Qt.ControlModifier: event.setDropAction(Qt.CopyAction) else: diff --git a/manuskript/ui/views/propertiesView.py b/manuskript/ui/views/propertiesView.py index 2ae088d..0c5f95b 100644 --- a/manuskript/ui/views/propertiesView.py +++ b/manuskript/ui/views/propertiesView.py @@ -7,6 +7,8 @@ from manuskript.enums import Outline from manuskript.ui.views.propertiesView_ui import Ui_propertiesView from manuskript.models.characterPOVModel import characterPOVModel +import logging +LOGGER = logging.getLogger(__name__) class propertiesView(QWidget, Ui_propertiesView): def __init__(self, parent=None): @@ -39,7 +41,7 @@ class propertiesView(QWidget, Ui_propertiesView): def selectionChanged(self, sourceView): indexes = self.getIndexes(sourceView) - # print(indexes) + # LOGGER.debug("selectionChanged indexes: %s", indexes) if len(indexes) == 0: self.setEnabled(False) diff --git a/manuskript/ui/views/textEditView.py b/manuskript/ui/views/textEditView.py index b361bdf..b4f07e9 100644 --- a/manuskript/ui/views/textEditView.py +++ b/manuskript/ui/views/textEditView.py @@ -17,6 +17,9 @@ from manuskript.functions import Spellchecker from manuskript.models.characterModel import Character, CharacterInfo +import logging +LOGGER = logging.getLogger(__name__) + class textEditView(QTextEdit): def __init__(self, parent=None, index=None, html=None, spellcheck=None, highlighting=False, dict="", autoResize=False): @@ -58,13 +61,13 @@ class textEditView(QTextEdit): self.updateTimer.setInterval(500) self.updateTimer.setSingleShot(True) self.updateTimer.timeout.connect(self.submit) - # self.updateTimer.timeout.connect(lambda: print("Timeout")) + # self.updateTimer.timeout.connect(lambda: LOGGER.debug("Timeout.")) self.updateTimer.stop() self.document().contentsChanged.connect(self.updateTimer.start, F.AUC) - # self.document().contentsChanged.connect(lambda: print("Document changed")) + # self.document().contentsChanged.connect(lambda: LOGGER.debug("Document changed.")) - # self.document().contentsChanged.connect(lambda: print(self.objectName(), "Contents changed")) + # self.document().contentsChanged.connect(lambda: LOGGER.debug("Contents changed: %s", self.objectName())) self.setEnabled(False) @@ -248,7 +251,7 @@ class textEditView(QTextEdit): if topLeft.parent() != self._index.parent(): return - # print("Model changed: ({}:{}), ({}:{}/{}), ({}:{}) for {} of {}".format( + # LOGGER.debug("Model changed: ({}:{}), ({}:{}/{}), ({}:{}) for {} of {}".format( # topLeft.row(), topLeft.column(), # self._index.row(), self._index.row(), self._column, # bottomRight.row(), bottomRight.column(), @@ -278,11 +281,11 @@ class textEditView(QTextEdit): def updateText(self): self._updating.lock() - # print("Updating", self.objectName()) + # LOGGER.debug("Updating %s", self.objectName()) if self._index: self.disconnectDocument() if self.toPlainText() != F.toString(self._index.data()): - # print(" Updating plaintext") + # LOGGER.debug(" Updating plaintext") self.document().setPlainText(F.toString(self._index.data())) self.reconnectDocument() @@ -319,18 +322,18 @@ class textEditView(QTextEdit): text = self.toPlainText() self._updating.unlock() - # print("Submitting", self.objectName()) + # LOGGER.debug("Submitting %s", self.objectName()) if self._index and self._index.isValid(): # item = self._index.internalPointer() if text != self._index.data(): - # print(" Submitting plain text") + # LOGGER.debug(" Submitting plain text") self._model.setData(QModelIndex(self._index), text) elif self._indexes: for i in self._indexes: item = i.internalPointer() if text != F.toString(item.data(self._column)): - print("Submitting many indexes") + LOGGER.debug("Submitting many indexes") self._model.setData(i, text) def keyPressEvent(self, event): @@ -484,7 +487,7 @@ class textEditView(QTextEdit): def newCharacter(self): text = self.sender().data() - print("new character!", text) + LOGGER.debug(f'New character: {text}') # switch to character page mw = F.mainWindow() mw.tabMain.setCurrentIndex(mw.TabPersos) @@ -496,7 +499,7 @@ class textEditView(QTextEdit): def newPlotItem(self): text = self.sender().data() - print("new plot item!", text) + LOGGER.debug(f'New plot item: {text}') # switch to plot page mw = F.mainWindow() mw.tabMain.setCurrentIndex(mw.TabPlots) @@ -509,7 +512,7 @@ class textEditView(QTextEdit): def newWorldItem(self): text = self.sender().data() - print("new world item!", text) + LOGGER.debug(f'New world item: {text}') mw = F.mainWindow() mw.tabMain.setCurrentIndex(mw.TabWorld) item = mw.mdlWorld.addItem(title=text) diff --git a/manuskript/ui/welcome.py b/manuskript/ui/welcome.py index 5d2b90e..c612253 100644 --- a/manuskript/ui/welcome.py +++ b/manuskript/ui/welcome.py @@ -21,6 +21,9 @@ from manuskript.models.worldModel import worldModel from manuskript.ui.welcome_ui import Ui_welcome from manuskript.ui import style as S +import logging +LOGGER = logging.getLogger(__name__) + try: locale.setlocale(locale.LC_ALL, '') except: @@ -57,8 +60,7 @@ class welcome(QWidget, Ui_welcome): sttgs = QSettings() lastDirectory = sttgs.value("lastAccessedDirectory", defaultValue=".", type=str) if lastDirectory != '.': - print(qApp.translate("lastAccessedDirectoryInfo", "Last accessed directory \"{}\" loaded.").format( - lastDirectory)) + LOGGER.info("Last accessed directory \"{}\" loaded.".format(lastDirectory)) return lastDirectory def setLastAccessedDirectory(self, dir): From 37becdf80a1bf0cbfa3cb65c5ffbadbb2b606b49 Mon Sep 17 00:00:00 2001 From: Jan Wester Date: Mon, 14 Oct 2019 14:56:55 +0200 Subject: [PATCH 36/51] Converted version_1.py to new logging style It had its own mini-logging facility to suppress the most useless debug messages. Since the new facility does not show debug messages to the user, but still allows them to end up in the log file, I replaced it entirely with DEBUG-level logging. Some spots have received an extra ERROR-level logging on top for the sake of alerting the user to issues we would like to hear about, and to avoid breaking up the hierarchical indenting done by the DEBUG-level messages. --- manuskript/load_save/version_1.py | 65 ++++++++++++++----------------- 1 file changed, 30 insertions(+), 35 deletions(-) diff --git a/manuskript/load_save/version_1.py b/manuskript/load_save/version_1.py index 8536eb9..39f1b7d 100644 --- a/manuskript/load_save/version_1.py +++ b/manuskript/load_save/version_1.py @@ -54,8 +54,6 @@ characterMap = OrderedDict([ (Character.notes, "Notes") ]) -# If true, logs infos while saving and loading. -LOG = False def formatMetaData(name, value, tabLength=10): @@ -95,11 +93,6 @@ def slugify(name): return newName -def log(*args): - if LOG: - print(" ".join(str(a) for a in args)) - - def saveProject(zip=None): """ Saves the project. If zip is False, the project is saved as a multitude of plain-text files for the most parts @@ -113,7 +106,7 @@ def saveProject(zip=None): if zip == None: zip = settings.saveToZip - log("\n\nSaving to:", "zip" if zip else "folder") + LOGGER.info("Saving to: %s", "zip" if zip else "folder") # List of files to be written files = [] @@ -344,7 +337,7 @@ def saveProject(zip=None): folder = os.path.splitext(os.path.basename(project))[0] # Debug - log("\nSaving to folder", folder) + LOGGER.debug("Saving to folder %s", folder) # If cache is empty (meaning we haven't loaded from disk), we wipe folder, just to be sure. if not cache: @@ -361,7 +354,7 @@ def saveProject(zip=None): # Move the old file to the new place try: os.replace(oldPath, newPath) - log("* Renaming/moving {} to {}".format(old, new)) + LOGGER.debug("* Renaming/moving {} to {}".format(old, new)) except FileNotFoundError: # Maybe parent folder has been renamed pass @@ -371,7 +364,7 @@ def saveProject(zip=None): for f in cache: f2 = f.replace(old, new) if f2 != f: - log(" * Updating cache:", f, f2) + LOGGER.debug(" * Updating cache: %s, %s", f, f2) cache2[f2] = cache[f] cache = cache2 @@ -382,7 +375,7 @@ def saveProject(zip=None): # Check if content is in cache, and write if necessary if path not in cache or cache[path] != content: - log("* Writing file {} ({})".format(path, "not in cache" if path not in cache else "different")) + LOGGER.debug("* Writing file {} ({})".format(path, "not in cache" if path not in cache else "different")) # mode = "w" + ("b" if type(content) == bytes else "") if type(content) == bytes: with open(filename, "wb") as f: @@ -396,7 +389,7 @@ def saveProject(zip=None): # Removing phantoms for path in [p for p in cache if p not in [p for p, c in files]]: filename = os.path.join(dir, folder, path) - log("* Removing", path) + LOGGER.debug("* Removing %s", path) if os.path.isdir(filename): shutil.rmtree(filename) @@ -413,7 +406,7 @@ def saveProject(zip=None): newDir = os.path.join(root, dir) try: os.removedirs(newDir) - log("* Removing empty directory:", newDir) + LOGGER.debug("* Removing empty directory: %s", newDir) except: # Directory not empty, we don't remove. pass @@ -539,8 +532,8 @@ def exportOutlineItem(root): lp = child._lastPath if lp and spath != lp: moves.append((lp, spath)) - log(child.title(), "has been renamed (", lp, " → ", spath, ")") - log(" → We mark for moving:", lp) + LOGGER.debug("%s has been renamed (%s → %s)", child.title(), lp, spath) + LOGGER.debug(" → We mark for moving: %s", lp) # Updates item last's path child._lastPath = spath @@ -556,7 +549,7 @@ def exportOutlineItem(root): files.append((spath, content)) else: - log("Unknown type") + LOGGER.debug("Unknown type: %s", child.type()) f, m, r = exportOutlineItem(child) files += f @@ -634,7 +627,7 @@ def loadProject(project, zip=None): #################################################################################################################### # Read and store everything in a dict - log("\nLoading {} ({})".format(project, "ZIP" if zip else "not zip")) + LOGGER.debug("Loading {} ({})".format(project, "zip" if zip else "folder")) if zip: files = loadFilesFromZip(project) @@ -698,7 +691,7 @@ def loadProject(project, zip=None): mdl = mw.mdlLabels mdl.appendRow(QStandardItem("")) # Empty = No labels if "labels.txt" in files: - log("\nReading labels:") + LOGGER.debug("Reading labels:") for s in files["labels.txt"].split("\n"): if not s: continue @@ -706,7 +699,7 @@ def loadProject(project, zip=None): m = re.search(r"^(.*?):\s*(.*)$", s) txt = m.group(1) col = m.group(2) - log("* Add status: {} ({})".format(txt, col)) + LOGGER.debug("* Add status: {} ({})".format(txt, col)) icon = iconFromColorString(col) mdl.appendRow(QStandardItem(icon, txt)) @@ -719,11 +712,11 @@ def loadProject(project, zip=None): mdl = mw.mdlStatus mdl.appendRow(QStandardItem("")) # Empty = No status if "status.txt" in files: - log("\nReading Status:") + LOGGER.debug("Reading status:") for s in files["status.txt"].split("\n"): if not s: continue - log("* Add status:", s) + LOGGER.debug("* Add status: %s", s) mdl.appendRow(QStandardItem(s)) else: errors.append("status.txt") @@ -765,7 +758,7 @@ def loadProject(project, zip=None): mdl = mw.mdlPlots if "plots.xml" in files: - log("\nReading plots:") + LOGGER.debug("Reading plots:") # xml = bytearray(files["plots.xml"], "utf-8") root = ET.fromstring(files["plots.xml"]) @@ -774,7 +767,7 @@ def loadProject(project, zip=None): row = getStandardItemRowFromXMLEnum(plot, Plot) # Log - log("* Add plot: ", row[0].text()) + LOGGER.debug("* Add plot: %s", row[0].text()) # Characters if row[Plot.characters].text(): @@ -801,7 +794,7 @@ def loadProject(project, zip=None): mdl = mw.mdlWorld if "world.opml" in files: - log("\nReading World:") + LOGGER.debug("Reading World:") # xml = bytearray(files["plots.xml"], "utf-8") root = ET.fromstring(files["world.opml"]) body = root.find("body") @@ -817,7 +810,7 @@ def loadProject(project, zip=None): # Characters mdl = mw.mdlCharacter - log("\nReading Characters:") + LOGGER.debug("Reading Characters:") for f in [f for f in files if "characters" in f]: md, body = parseMMDFile(files[f]) c = mdl.addCharacter() @@ -843,7 +836,7 @@ def loadProject(project, zip=None): else: c.infos.append(CharacterInfo(c, desc, val)) - log("* Adds {} ({})".format(c.name(), c.ID())) + LOGGER.debug("* Adds {} ({})".format(c.name(), c.ID())) #################################################################################################################### # Texts @@ -851,14 +844,14 @@ def loadProject(project, zip=None): # everything, but the outline folder takes precedence (in cases it's been edited outside of manuskript. mdl = mw.mdlOutline - log("\nReading outline:") + LOGGER.debug("Reading outline:") paths = [f for f in files if "outline" in f] outline = OrderedDict() # We create a structure of imbricated OrderedDict to store the whole tree. for f in paths: split = f.split(os.path.sep)[1:] - # log("* ", split) + # LOGGER.debug("* %s", split) last = "" parent = outline @@ -913,7 +906,7 @@ def addTextItems(mdl, odict, parent=None): if type(odict[k]) == OrderedDict and "folder.txt" in odict[k]: # Adds folder - log("{}* Adds {} to {} (folder)".format(" " * parent.level(), k, parent.title())) + LOGGER.debug("{}* Adds {} to {} (folder)".format(" " * parent.level(), k, parent.title())) item = outlineFromMMD(odict[k]["folder.txt"], parent=parent) item._lastPath = odict[k + ":lastPath"] @@ -922,7 +915,7 @@ def addTextItems(mdl, odict, parent=None): # k is not a folder elif type(odict[k]) == str and k != "folder.txt" and not ":lastPath" in k: - log("{}* Adds {} to {} (file)".format(" " * parent.level(), k, parent.title())) + LOGGER.debug("{}* Adds {} to {} (file)".format(" " * parent.level(), k, parent.title())) item = outlineFromMMD(odict[k], parent=parent) item._lastPath = odict[k + ":lastPath"] @@ -977,17 +970,19 @@ def appendRevisions(mdl, root): # Get root's ID ID = root.attrib["ID"] if not ID: - log("* Serious problem: no ID!") + LOGGER.debug("* Serious problem: no ID!") + LOGGER.error("Revision has no ID associated!") continue # Find outline item in model item = mdl.getItemByID(ID) if not item: - log("* Error: no item whose ID is", ID) + LOGGER.debug("* Error: no item whose ID is %s", ID) + LOGGER.error("Could not identify the item matching the revision ID.") continue # Store revision - log("* Appends revision ({}) to {}".format(child.attrib["timestamp"], item.title())) + LOGGER.debug("* Appends revision ({}) to {}".format(child.attrib["timestamp"], item.title())) item.appendRevision(child.attrib["timestamp"], child.attrib["text"]) @@ -999,7 +994,7 @@ def getOutlineItem(item, enum): @return: [QStandardItem] """ row = getStandardItemRowFromXMLEnum(item, enum) - log("* Add worldItem:", row[0].text()) + LOGGER.debug("* Add worldItem: %s", row[0].text()) for child in item: sub = getOutlineItem(child, enum) row[0].appendRow(sub) From 239e66e7cb98efe178f4ead1ae83212e57cb24ca Mon Sep 17 00:00:00 2001 From: Jan Wester Date: Mon, 14 Oct 2019 20:16:07 +0200 Subject: [PATCH 37/51] Comprehensively log all version information Manuskript now logs the versions of modules and libraries powering them for as far those are easily accessible. This includes all the optional modules, too. None of this is visible on the terminal of course - unless Manuskript is run with the --verbose flag. This clears up the last bit of unnecessary console spam, leaving our users blissfully unaware. Until we (and/or Qt) break something again, that is... --- manuskript/logging.py | 122 +++++++++++++++++++++++++++++++-- manuskript/main.py | 5 +- manuskript/ui/views/webView.py | 3 - 3 files changed, 118 insertions(+), 12 deletions(-) diff --git a/manuskript/logging.py b/manuskript/logging.py index 56e5bf2..1561463 100644 --- a/manuskript/logging.py +++ b/manuskript/logging.py @@ -4,15 +4,17 @@ # standard python `logging` module, this module will take care of specific # manuskript needs to keep it separate from the rest of the logic. -from manuskript.functions import writablePath import os import logging +from manuskript.functions import writablePath +from importlib import import_module + +LOGGER = logging.getLogger(__name__) + LOGFORMAT_CONSOLE = "%(levelname)s> %(message)s" LOGFORMAT_FILE = "%(asctime)s - %(name)s - %(levelname)s - %(message)s" -logger = logging.getLogger(__name__) - def setUp(console_level=logging.WARN): """Sets up a convenient environment for logging. @@ -37,7 +39,7 @@ def setUp(console_level=logging.WARN): ch.setFormatter(logging.Formatter(LOGFORMAT_CONSOLE)) root_logger.addHandler(ch) - logger.debug("Logging to STDERR.") + LOGGER.debug("Logging to STDERR.") def logToFile(file_level=logging.DEBUG, logfile=None): @@ -65,9 +67,9 @@ def logToFile(file_level=logging.DEBUG, logfile=None): root_logger.addHandler(fh) # Use INFO level to make it easier to find for users. - logger.info("Logging to file: %s", logfile) + LOGGER.info("Logging to file: %s", logfile) except Exception as ex: - logger.warning("Cannot log to file '%s'. Reason: %s", logfile, ex) + LOGGER.warning("Cannot log to file '%s'. Reason: %s", logfile, ex) # Qt has its own logging facility that we would like to integrate into our own. @@ -103,4 +105,110 @@ def integrateQtLogging(): # I also feel a lot safer this way. Qt is a curse that just keeps # on giving, even when it isn't actually at fault. I hate you, Qt. - qInstallMessageHandler(qtMessageHandler) \ No newline at end of file + qInstallMessageHandler(qtMessageHandler) + + +def versionTupleToString(t): + """A bit of generic tuple conversion code that hopefully handles all the + different sorts of tuples we may come across while logging versions. + + None -> "N/A" + (,) -> "N/A" + (2, 4, 6) -> "2.4.6" + (2, 4, "alpha", 8) -> "2.4-alpha.8" + """ + + s = [] + if t is None or len(t) == 0: + return "N/A" + else: + s.append(str(t[0])) + + def version_chunk(v): + if isinstance(v, str): + return "-", str(v) + else: + return ".", str(v) + + s.extend(f for p in t[1:] for f in version_chunk(p)) + return "".join(s) + +def attributesFromOptionalModule(module, *attributes): + """It is nice to cut down on the try-except boilerplate by + putting this logic into its own function. + + Returns as many values as there are attributes. + A value will be None if it failed to get the attribute.""" + + assert(len(attributes) != 0) + v = [] + try: + m = import_module(module) + + for a in attributes: + v.append(getattr(m, a, None)) + except ImportError: + v.extend(None for _ in range(len(attributes))) + + if len(v) == 1: + # Return the value directly so we can use it in an expression. + return v[0] + else: + # The list is consumed as a part of the unpacking syntax. + return v + +def logVersionInformation(logger=None): + """Logs all important runtime information neatly together. + + Due to the generic nature, use the manuskript logger by default.""" + + if not logger: + logger = logging.getLogger("manuskript") + + vt2s = versionTupleToString + afom = attributesFromOptionalModule + + # Basic system information. + from platform import python_version, platform, processor, machine + logger.info("Operating System: %s", platform()) + logger.info("Hardware: %s / %s", machine(), processor()) + + # Manuskript and Python info. + from manuskript.version import getVersion + logger.info("Manuskript %s (Python %s)", getVersion(), python_version()) + + # Installed Python packages. + + # PyQt + Qt + from PyQt5.Qt import PYQT_VERSION_STR, qVersion + from PyQt5.QtCore import QT_VERSION_STR + logger.info("* PyQt %s (compiled against Qt %s)", PYQT_VERSION_STR, QT_VERSION_STR) + logger.info(" * Qt %s (runtime)", qVersion()) + + # Lxml + # See: https://lxml.de/FAQ.html#i-think-i-have-found-a-bug-in-lxml-what-should-i-do + from lxml import etree + logger.info("* lxml.etree %s", vt2s(etree.LXML_VERSION)) + logger.info(" * libxml %s (compiled: %s)", vt2s(etree.LIBXML_VERSION), vt2s(etree.LIBXML_COMPILED_VERSION)) + logger.info(" * libxslt %s (compiled: %s)", vt2s(etree.LIBXSLT_VERSION), vt2s(etree.LIBXSLT_COMPILED_VERSION)) + + # Spellcheckers. (Optional) + enchant_mod_ver, enchant_lib_ver = afom("enchant", "__version__", "get_enchant_version") + if enchant_lib_ver: + enchant_lib_ver = enchant_lib_ver() + if isinstance(enchant_lib_ver, bytes): # PyEnchant version < 3.0.2 + enchant_lib_ver = enchant_lib_ver.decode('utf-8') + logger.info("* pyEnchant %s (libenchant: %s)", enchant_mod_ver or "N/A", enchant_lib_ver or "N/A") + + logger.info("* pySpellChecker %s", afom("spellchecker", "__version__") or "N/A") + logger.info("* Symspellpy %s", afom("symspellpy", "__version__") or "N/A") + + # Markdown. (Optional) + logger.info("* Markdown %s", afom("markdown", "__version__") or "N/A") + + # Web rendering engine + from manuskript.ui.views.webView import webEngine + logger.info("Web rendering engine: %s", webEngine) + + # Do not collect version information for Pandoc; that would require + # executing `pandov -v` and parsing the output, all of which is too slow. diff --git a/manuskript/main.py b/manuskript/main.py index e9f3a08..c3aeb25 100644 --- a/manuskript/main.py +++ b/manuskript/main.py @@ -7,7 +7,6 @@ import sys import signal import manuskript.logging -import manuskript.ui.views.webView from PyQt5.QtCore import QLocale, QTranslator, QSettings, Qt from PyQt5.QtGui import QIcon, QColor, QPalette from PyQt5.QtWidgets import QApplication, qApp, QStyleFactory @@ -34,7 +33,9 @@ def prepare(arguments, tests=False): # Handle all sorts of Qt logging messages in Python. manuskript.logging.integrateQtLogging() - LOGGER.info("Running manuskript version {}.".format(getVersion())) + # Log all the versions for less headaches. + manuskript.logging.logVersionInformation() + icon = QIcon() for i in [16, 32, 64, 128, 256, 512]: icon.addFile(appPath("icons/Manuskript/icon-{}px.png".format(i))) diff --git a/manuskript/ui/views/webView.py b/manuskript/ui/views/webView.py index 4d6462c..23e09d1 100644 --- a/manuskript/ui/views/webView.py +++ b/manuskript/ui/views/webView.py @@ -22,16 +22,13 @@ else: if features['qtwebkit']: from PyQt5.QtWebKitWidgets import QWebView - print("Debug: Web rendering engine used: QWebView") webEngine = "QtWebKit" webView = QWebView elif features['qtwebengine']: from PyQt5 import QtWebEngineWidgets - print("Debug: Web rendering engine used: QWebEngineView") webEngine = "QtWebEngine" webView = QtWebEngineWidgets.QWebEngineView else: from PyQt5.QtWidgets import QTextEdit - print("Debug: Web rendering engine used: QTextEdit") webEngine = "QTextEdit" webView = QTextEdit From c797b5a18b2d459d0e7f310fbb6180d86b2f896f Mon Sep 17 00:00:00 2001 From: Jan Wester Date: Tue, 15 Oct 2019 14:32:07 +0200 Subject: [PATCH 38/51] Log the git revision if applicable During development, the version number does not have much meaning... but when faced with a reported issue, you would still like to know in more detail what version of the Manuskript code was at work there. Knowing the exact git revision will hopefully make it easier to troubleshoot such issues in the future. Note: this code takes special care to not rely on external modules (we have enough dependencies) or even the git executable (invoking a program can be relatively slow on some operating systems). It might not handle all the edge cases, but I think it should cover our needs well enough. --- manuskript/functions/__init__.py | 47 ++++++++++++++++++++++++++++++++ manuskript/logging.py | 7 ++++- 2 files changed, 53 insertions(+), 1 deletion(-) diff --git a/manuskript/functions/__init__.py b/manuskript/functions/__init__.py index 4acae75..7e4edd6 100644 --- a/manuskript/functions/__init__.py +++ b/manuskript/functions/__init__.py @@ -3,6 +3,8 @@ import os import re +import sys +import pathlib from random import * from PyQt5.QtCore import Qt, QRect, QStandardPaths, QObject, QRegExp, QDir @@ -13,6 +15,9 @@ from PyQt5.QtWidgets import qApp, QFileDialog from manuskript.enums import Outline +import logging +LOGGER = logging.getLogger(__name__) + # Used to detect multiple connections AUC = Qt.AutoConnection | Qt.UniqueConnection MW = None @@ -493,5 +498,47 @@ def getSearchResultContext(text, startPos, endPos): return context + +# Based on answer by jfs at: +# https://stackoverflow.com/questions/3718657/how-to-properly-determine-current-script-directory +def getManuskriptPath(follow_symlinks=True): + """Used to obtain the path Manuskript is located at.""" + if getattr(sys, 'frozen', False): # py2exe, PyInstaller, cx_Freeze + path = os.path.abspath(sys.executable) + else: + import inspect + path = inspect.getabsfile(getManuskriptPath) + "/../.." + if follow_symlinks: + path = os.path.realpath(path) + return os.path.dirname(path) + +# Based on answer by kagronik at: +# https://stackoverflow.com/questions/14989858/get-the-current-git-hash-in-a-python-script +def getGitRevision(base_path): + """Get git revision without relying on external processes or libraries.""" + git_dir = pathlib.Path(base_path) / '.git' + if not git_dir.exists(): + return None + + with (git_dir / 'HEAD').open('r') as head: + ref = head.readline().split(' ')[-1].strip() + + with (git_dir / ref).open('r') as git_hash: + return git_hash.readline().strip() + +def getGitRevisionAsString(base_path, short=False): + """Catches errors and presents a nice string.""" + try: + rev = getGitRevision(base_path) + if rev is not None: + if short: + rev = rev[:7] + return "#" + rev + else: + return "" # not a git repository + except Exception as e: + LOGGER.warning("Failed to obtain Git revision: %s", e) + return "#ERROR" + # Spellchecker loads writablePath from this file, so we need to load it after they get defined from manuskript.functions.spellchecker import Spellchecker diff --git a/manuskript/logging.py b/manuskript/logging.py index 1561463..5c33b9a 100644 --- a/manuskript/logging.py +++ b/manuskript/logging.py @@ -157,6 +157,8 @@ def attributesFromOptionalModule(module, *attributes): # The list is consumed as a part of the unpacking syntax. return v +import pathlib + def logVersionInformation(logger=None): """Logs all important runtime information neatly together. @@ -174,8 +176,11 @@ def logVersionInformation(logger=None): logger.info("Hardware: %s / %s", machine(), processor()) # Manuskript and Python info. + from manuskript.functions import getGitRevisionAsString, getManuskriptPath from manuskript.version import getVersion - logger.info("Manuskript %s (Python %s)", getVersion(), python_version()) + logger.info("Manuskript %s%s (Python %s)", getVersion(), + getGitRevisionAsString(getManuskriptPath(), short=True), + python_version()) # Installed Python packages. From 091024689937939cab363776cadfa2a29df14153 Mon Sep 17 00:00:00 2001 From: Jan Wester Date: Sat, 19 Oct 2019 00:38:27 +0200 Subject: [PATCH 39/51] Write log file in UTF-8 to fix encoding errors Some log messages use characters in the Unicode character set that aren't typically represented in the older encodings. One such example was the messages that happen when renaming an item and saving the project. Positive note though: errors while logging might not end up in the log file when the log file is the cause, but they still showed on the terminal with excessive detail. Also, despite the exceptions and errors, the project I was testing successfully completed its saving procedures as a subsequent reload showed. I am personally quite happy with the degree of thought and care put into the Python logging system. :-) --- manuskript/logging.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/manuskript/logging.py b/manuskript/logging.py index 5c33b9a..69d0963 100644 --- a/manuskript/logging.py +++ b/manuskript/logging.py @@ -59,7 +59,7 @@ def logToFile(file_level=logging.DEBUG, logfile=None): # log files may not be in our users best interest for the time # being. (Unfortunately.) try: - fh = logging.FileHandler(logfile, mode='w') + fh = logging.FileHandler(logfile, mode='w', encoding='utf-8') fh.setLevel(file_level) fh.setFormatter(logging.Formatter(LOGFORMAT_FILE)) From 5117f7d47621b248c9e503e8cb607cd7894c9422 Mon Sep 17 00:00:00 2001 From: Jan Wester Date: Sat, 2 Nov 2019 15:32:31 +0100 Subject: [PATCH 40/51] Logging uncaught & unraisable exceptions When implementing most of the logging code weeks ago, I got so caught up in implementing and testing the Qt bits that I completely blanked on actually implementing the Python-side of catching exceptions. Unfortunately, it is not exactly trivial. PyQt complicates things, but also Python itself isn't very helpful in older versions which will rob the ability to properly log errors from threads. By the time I realized we don't actually use the threading module and that catching the errors on there does not actually help to fix the weirdness I was seeing, it was already implemented. Thank you PyQt for surprising me yet again! :-) I have tested this on Python 3.7 by raising random exceptions in various parts of the codebase to make sure it behaves as expected. I haven't quite gotten around to installing Python 3.8 yet but this gets it out for testing. I'll hopefully not forget to do more tests in 3.8 when I do the final squashing prior to a merge. --- manuskript/logging.py | 66 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) diff --git a/manuskript/logging.py b/manuskript/logging.py index 69d0963..6ae492d 100644 --- a/manuskript/logging.py +++ b/manuskript/logging.py @@ -5,6 +5,7 @@ # manuskript needs to keep it separate from the rest of the logic. import os +import sys import logging from manuskript.functions import writablePath @@ -39,6 +40,9 @@ def setUp(console_level=logging.WARN): ch.setFormatter(logging.Formatter(LOGFORMAT_CONSOLE)) root_logger.addHandler(ch) + # Any exceptions we did not account for need to be logged. + logFutureExceptions() + LOGGER.debug("Logging to STDERR.") @@ -71,6 +75,68 @@ def logToFile(file_level=logging.DEBUG, logfile=None): except Exception as ex: LOGGER.warning("Cannot log to file '%s'. Reason: %s", logfile, ex) +# Log uncaught and unraisable exceptions. + +# Uncaught exceptions trigger moments before a thread is terminated due to +# an uncaught exception. It is the final stop, and as such is very likely +# to be the reason Manuskript suddenly closed on the user without warning. +# (It can also happen on other threads, but it is a bad thing regardless!) +def handle_uncaught_exception(exc_type, exc_value, exc_traceback): + # Allow Ctrl+C for script execution to keep functioning as-is. + if issubclass(exc_type, KeyboardInterrupt): + sys.__excepthook__(exc_type, exc_value, exc_traceback) + return # default exception hook handled it + + # Anything that reaches this handler can be considered a deal-breaker. + LOGGER.critical("An unhandled exception has occurred!", exc_info=(exc_type, exc_value, exc_traceback)) + + # Exit the program to preserve PyQt 'functionality' that is broken by + # having our own uncaught exception hook. For more information, see: + # https://stackoverflow.com/questions/49065371/why-does-sys-excepthook-behave-differently-when-wrapped + sys.exit(1) + + # Note that without it, unhandled Python exceptions thrown while in the + # bowels of Qt may be written to the log multiple times. Under the motto + # of failing fast and not having a misleading log file, this appears to + # be the best course of action. + + +# The situation with threads and uncaught exceptions is fraught in peril. +# Hopefully this solves our problems on more recent versions of Python. +def handle_uncaught_thread_exception(args): + if issubclass(exc_type, SystemExit): + return # match behaviour of default hook, see manual + + # Anything that reaches this handler can be considered a minor deal-breaker. + LOGGER.error("An unhandled exception has occurred in a thread: %s", repr(args.thread), + exc_info=(args.exc_type, args.exc_value, args.exc_traceback)) + + +# Unraisable exceptions are exceptions that failed to be raised to a caller +# due to the nature of the exception. Examples: __del__(), GC error, etc. +# Logging these may expose bugs / errors that would otherwise go unnoticed. +def handle_unraisable_exception(unraisable): + # Log as warning because the application is likely to limp along with + # no serious side effects; a resource leak is the most likely. + LOGGER.warning("%s: %s", unraisable.err_msg or "Exception ignored in", repr(unraisable.object), + exc_info=(unraisable.exc_type, unraisable.exc_value, unraisable.exc_traceback)) + + +# Because we are already somewhat careful in regards to the order of code +# execution when it comes to setting up the logging environment, this has +# been put in its own function as opposed to letting a direct import handle it. +def logFutureExceptions(): + """Log all the interesting exceptions that may happen in the future.""" + sys.excepthook = handle_uncaught_exception + try: + import threading # threading module was optional pre-3.7 + if hasattr(threading, "excepthook"): # Python 3.8+ + threading.excepthook = handle_uncaught_thread_exception + except: + pass + if hasattr(sys, "unraisablehook"): # Python 3.8+ + sys.unraisablehook = handle_unraisable_exception + # Qt has its own logging facility that we would like to integrate into our own. # See: http://thispageintentionally.blogspot.com/2014/03/trapping-qt-log-messages.html From 2d622792f382caa4b1b12962b02a2aa8f0f6bee3 Mon Sep 17 00:00:00 2001 From: Jan Wester Date: Mon, 4 Nov 2019 14:35:21 +0100 Subject: [PATCH 41/51] Additional logging centered around sys module Due to my struggles reproducing the official build, I felt it might be useful to log extra information regarding the version of PyInstaller. Unfortunately, such information is not available due to the way things work. However, during that process I came across some other interesting details that would likely be useful when logged. --- manuskript/logging.py | 29 ++++++++++++++++++++++++++--- manuskript/main.py | 2 +- 2 files changed, 27 insertions(+), 4 deletions(-) diff --git a/manuskript/logging.py b/manuskript/logging.py index 6ae492d..b0218d6 100644 --- a/manuskript/logging.py +++ b/manuskript/logging.py @@ -7,9 +7,11 @@ import os import sys import logging +import pathlib from manuskript.functions import writablePath from importlib import import_module +from pprint import pformat LOGGER = logging.getLogger(__name__) @@ -223,9 +225,7 @@ def attributesFromOptionalModule(module, *attributes): # The list is consumed as a part of the unpacking syntax. return v -import pathlib - -def logVersionInformation(logger=None): +def logRuntimeInformation(logger=None): """Logs all important runtime information neatly together. Due to the generic nature, use the manuskript logger by default.""" @@ -241,6 +241,29 @@ def logVersionInformation(logger=None): logger.info("Operating System: %s", platform()) logger.info("Hardware: %s / %s", machine(), processor()) + # Information about the running instance. See: + # https://pyinstaller.readthedocs.io/en/v3.3.1/runtime-information.html + # http://www.py2exe.org/index.cgi/Py2exeEnvironment + # https://cx-freeze.readthedocs.io/en/latest/faq.html#data-files + frozen = getattr(sys, 'frozen', False) + if frozen: + logger.info("Running in a frozen (packaged) state.") + logger.debug("* sys.frozen = %s", pformat(frozen)) + + # PyInstaller, py2exe and cx_Freeze modules are not accessible while frozen, + # so logging their version is (to my knowledge) impossible without including + # special steps into the distribution process. But some traces do exist... + logger.debug("* sys._MEIPASS = %s", getattr(sys, '_MEIPASS', "N/A")) # PyInstaller bundle + # cx_Freeze and py2exe do not appear to leave anything similar exposed. + else: + logger.info("Running from unpackaged source code.") + + # File not found? These bits of information might help. + logger.debug("* sys.executable = %s", pformat(sys.executable)) + logger.debug("* sys.argv = %s", pformat(sys.argv)) + logger.debug("* sys.path = %s", pformat(sys.path)) + logger.debug("* sys.prefix = %s", pformat(sys.prefix)) + # Manuskript and Python info. from manuskript.functions import getGitRevisionAsString, getManuskriptPath from manuskript.version import getVersion diff --git a/manuskript/main.py b/manuskript/main.py index c3aeb25..c4d5bb6 100644 --- a/manuskript/main.py +++ b/manuskript/main.py @@ -34,7 +34,7 @@ def prepare(arguments, tests=False): manuskript.logging.integrateQtLogging() # Log all the versions for less headaches. - manuskript.logging.logVersionInformation() + manuskript.logging.logRuntimeInformation() icon = QIcon() for i in [16, 32, 64, 128, 256, 512]: From 40e6bf0793368da4c06d880845c731f7e5c434fc Mon Sep 17 00:00:00 2001 From: Alexandre Date: Fri, 9 Apr 2021 10:03:31 -0400 Subject: [PATCH 42/51] Fix #846 close Fullscreen when exiting main editor (#854) * Fix #846 close Fullscreen when exiting main screen * Removing debug code and initializing _fullscreen * Removing the print --- manuskript/mainWindow.py | 4 ++++ manuskript/ui/editors/fullScreenEditor.py | 18 +++++++++--------- manuskript/ui/editors/mainEditor.py | 10 ++++++++++ 3 files changed, 23 insertions(+), 9 deletions(-) diff --git a/manuskript/mainWindow.py b/manuskript/mainWindow.py index 4352070..2c5e8e0 100644 --- a/manuskript/mainWindow.py +++ b/manuskript/mainWindow.py @@ -794,6 +794,10 @@ class MainWindow(QMainWindow, Ui_MainWindow): # Remembering the current items (stores outlineItem's ID) settings.openIndexes = self.mainEditor.tabSplitter.openIndexes() + # Call close on the main window to clean children widgets + if self.mainEditor: + self.mainEditor.close() + # Save data from models if settings.saveOnQuit: self.saveDatas() diff --git a/manuskript/ui/editors/fullScreenEditor.py b/manuskript/ui/editors/fullScreenEditor.py index 5c7200d..10b8657 100644 --- a/manuskript/ui/editors/fullScreenEditor.py +++ b/manuskript/ui/editors/fullScreenEditor.py @@ -2,7 +2,7 @@ # --!-- coding: utf8 --!-- import os -from PyQt5.QtCore import Qt, QSize, QPoint, QRect, QEvent, QTime, QTimer +from PyQt5.QtCore import Qt, QSize, QPoint, QRect, QEvent, QTime, QTimer, pyqtSignal from PyQt5.QtGui import QFontMetrics, QColor, QBrush, QPalette, QPainter, QPixmap, QCursor from PyQt5.QtGui import QIcon from PyQt5.QtWidgets import QFrame, QWidget, QPushButton, qApp, QStyle, QComboBox, QLabel, QScrollBar, \ @@ -23,6 +23,8 @@ import logging LOGGER = logging.getLogger(__name__) class fullScreenEditor(QWidget): + exited = pyqtSignal() + def __init__(self, index, parent=None, screenNumber=None): QWidget.__init__(self, parent) self.setAttribute(Qt.WA_DeleteOnClose, True) @@ -178,13 +180,13 @@ class fullScreenEditor(QWidget): # self.showMaximized() # self.show() - def __del__(self): - LOGGER.debug("Leaving fullScreenEditor via Destructor event.") - self.showNormal() - self.close() - def leaveFullscreen(self): + self.__exit__("Leaving fullScreenEditor via leaveFullScreen.") + + def __exit__(self, message): + LOGGER.debug(message) self.showNormal() + self.exited.emit() self.close() def setLocked(self, val): @@ -288,9 +290,7 @@ class fullScreenEditor(QWidget): def keyPressEvent(self, event): if event.key() in [Qt.Key_Escape, Qt.Key_F11] and \ not self._locked: - LOGGER.debug("Leaving fullScreenEditor via keyPressEvent.") - self.showNormal() - self.close() + self.__exit__("Leaving fullScreenEditor via keyPressEvent.") elif (event.modifiers() & Qt.AltModifier) and \ event.key() in [Qt.Key_PageUp, Qt.Key_PageDown, Qt.Key_Left, Qt.Key_Right]: if event.key() in [Qt.Key_PageUp, Qt.Key_Left]: diff --git a/manuskript/ui/editors/mainEditor.py b/manuskript/ui/editors/mainEditor.py index 8cc6453..7ee4300 100644 --- a/manuskript/ui/editors/mainEditor.py +++ b/manuskript/ui/editors/mainEditor.py @@ -67,6 +67,7 @@ class mainEditor(QWidget, Ui_mainEditor): QWidget.__init__(self, parent) self.setupUi(self) self._updating = False + self._fullScreen = None self.mw = mainWindow() @@ -154,6 +155,10 @@ class mainEditor(QWidget, Ui_mainEditor): for ts in reversed(self.allTabSplitters()): ts.closeSplit() + def close(self): + if self._fullScreen is not None: + self._fullScreen.leaveFullscreen() + def allTabs(self, tabWidget=None): """Returns all the tabs from the given tabWidget. If tabWidget is None, from the current tabWidget.""" if tabWidget == None: @@ -386,6 +391,11 @@ class mainEditor(QWidget, Ui_mainEditor): self._fullScreen = fullScreenEditor( self.currentEditor().currentIndex, screenNumber=currentScreenNumber) + # Clean the variable when closing fullscreen prevent errors + self._fullScreen.exited.connect(self.clearFullScreen) + + def clearFullScreen(self): + self._fullScreen = None ############################################################################### # DICT AND STUFF LIKE THAT From f5fa60c50c64fd8ac3dc91c37dd61e5a26455ed9 Mon Sep 17 00:00:00 2001 From: Alexandre Date: Fri, 9 Apr 2021 10:03:59 -0400 Subject: [PATCH 43/51] Fix #855 - Avoid a crash when there's no model (#856) * Fix #855 - Avoid a crash when there's no model * Moved the update id to the AbstactItem class --- manuskript/models/abstractItem.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/manuskript/models/abstractItem.py b/manuskript/models/abstractItem.py index c805303..17ad36b 100644 --- a/manuskript/models/abstractItem.py +++ b/manuskript/models/abstractItem.py @@ -47,14 +47,9 @@ class abstractItem(): if parent: # add this as a child to the parent, and link to the outlineModel of the parent parent.appendChild(self) - elif not model: - print("Warning: floating outline item (has no parent or associated Outline model).") if ID: self._data[self.enum.ID] = ID - self._model.updateAvailableIDs(ID) # Informs the ID distributor that this ID number has been used - else: - self._data[self.enum.ID] = self._model.requestNewID() @@ -64,6 +59,11 @@ class abstractItem(): def setModel(self, model): self._model = model + if not self.ID(): + self.getUniqueID() + elif model: + # if we are setting a model update it's ID + self._model.updateAvailableIDs(self.ID()) for c in self.children(): c.setModel(model) From d22eb3bcb9cbc21f4243f501c163769aa5bdf758 Mon Sep 17 00:00:00 2001 From: Belug Date: Fri, 9 Apr 2021 19:19:03 -0400 Subject: [PATCH 44/51] Fixing the tests for travis-CI --- .gitignore | 1 + manuskript/mainWindow.py | 4 ++-- manuskript/models/abstractItem.py | 3 ++- manuskript/tests/models/test_outlineItem.py | 6 +++--- manuskript/ui/welcome.py | 4 ++-- 5 files changed, 10 insertions(+), 8 deletions(-) diff --git a/.gitignore b/.gitignore index 1b14a20..7f6031a 100644 --- a/.gitignore +++ b/.gitignore @@ -11,6 +11,7 @@ .idea .project .pydevproject +.python-version .settings/org.eclipse.core.resources.prefs .vscode ExportTest diff --git a/manuskript/mainWindow.py b/manuskript/mainWindow.py index 2c5e8e0..b4a7bbf 100644 --- a/manuskript/mainWindow.py +++ b/manuskript/mainWindow.py @@ -1,6 +1,6 @@ #!/usr/bin/env python # --!-- coding: utf8 --!-- -import imp +import importlib import os import re @@ -594,7 +594,7 @@ class MainWindow(QMainWindow, Ui_MainWindow): if loadFromFile: # Load empty settings - imp.reload(settings) + importlib.reload(settings) settings.initDefaultValues() # Load data diff --git a/manuskript/models/abstractItem.py b/manuskript/models/abstractItem.py index 17ad36b..fb38691 100644 --- a/manuskript/models/abstractItem.py +++ b/manuskript/models/abstractItem.py @@ -250,7 +250,8 @@ class abstractItem(): # Setting data self._data[column] = data - if column == self.enum.ID: + # The _model will be none during splitting + if self._model and column == self.enum.ID: self._model.updateAvailableIDs(data) # Emit signal diff --git a/manuskript/tests/models/test_outlineItem.py b/manuskript/tests/models/test_outlineItem.py index c7fb7df..e217309 100644 --- a/manuskript/tests/models/test_outlineItem.py +++ b/manuskript/tests/models/test_outlineItem.py @@ -123,10 +123,10 @@ def test_modelStuff(outlineModelBasic): assert folder.findItemsContaining("VALUE", cols, MW, True) == [] assert folder.findItemsContaining("VALUE", cols, MW, False) == [text2.ID()] - # Model, count and copy + # Model, count and copy k = folder._model - folder.setModel(14) - assert text2._model == 14 + folder.setModel(None) + assert text2._model is None folder.setModel(k) assert folder.columnCount() == len(folder.enum) text1 = text2.copy() diff --git a/manuskript/ui/welcome.py b/manuskript/ui/welcome.py index c612253..fce923b 100644 --- a/manuskript/ui/welcome.py +++ b/manuskript/ui/welcome.py @@ -2,7 +2,7 @@ # --!-- coding: utf8 --!-- import locale -import imp +import importlib import os from PyQt5.QtCore import QSettings, QRegExp, Qt, QDir @@ -427,7 +427,7 @@ class welcome(QWidget, Ui_welcome): """Initialize a basic Manuskript project.""" # Empty settings - imp.reload(settings) + importlib.reload(settings) settings.initDefaultValues() self.mw.loadEmptyDatas() From 173531ef2cd159353f1648963d6c74b1d795aebb Mon Sep 17 00:00:00 2001 From: TheJackiMonster Date: Sat, 10 Apr 2021 14:46:03 +0200 Subject: [PATCH 45/51] Combined #777 with changes from #827 Signed-off-by: TheJackiMonster --- .gitignore | 1 + manuskript/models/abstractModel.py | 17 ++--------------- manuskript/ui/mainWindow.py | 6 +++--- 3 files changed, 6 insertions(+), 18 deletions(-) diff --git a/.gitignore b/.gitignore index 7f6031a..75595ae 100644 --- a/.gitignore +++ b/.gitignore @@ -14,6 +14,7 @@ .python-version .settings/org.eclipse.core.resources.prefs .vscode +.vimrc ExportTest Notes.t2t dist diff --git a/manuskript/models/abstractModel.py b/manuskript/models/abstractModel.py index f7c2a75..2ec3bfc 100644 --- a/manuskript/models/abstractModel.py +++ b/manuskript/models/abstractModel.py @@ -438,23 +438,10 @@ class abstractModel(QAbstractItemModel): for item in items: if item.ID() in IDs: - def makeNewID(item): - k = 1 - while True: # Python doesn't have "Do...While" - ks = str(k) - if ks not in IDs: - item.setData(Outline.ID,ks) - IDs.append(ks) #Keep track of new IDs allocated. - for c in item.children(): - makeNewID(c) - break # Actual Loop Exit - else: - k = k+1 # Try the next candidate ID - - makeNewID(item) + item.getUniqueID(recursive=true) + r = self.insertItems(items, beginRow, parent) - return r ################# ADDING AND REMOVING ################# diff --git a/manuskript/ui/mainWindow.py b/manuskript/ui/mainWindow.py index 630f0e6..6736b74 100644 --- a/manuskript/ui/mainWindow.py +++ b/manuskript/ui/mainWindow.py @@ -2,9 +2,10 @@ # Form implementation generated from reading ui file 'manuskript/ui/mainWindow.ui' # -# Created by: PyQt5 UI code generator 5.14.1 +# Created by: PyQt5 UI code generator 5.15.4 # -# WARNING! All changes made in this file will be lost! +# WARNING: Any manual changes made to this file will be lost when pyuic5 is +# run again. Do not edit this file unless you know what you are doing. from PyQt5 import QtCore, QtGui, QtWidgets @@ -1655,7 +1656,6 @@ class Ui_MainWindow(object): self.actFormatBlockquote.setText(_translate("MainWindow", "B&lockquote")) self.actSearch.setText(_translate("MainWindow", "Search")) self.actSearch.setShortcut(_translate("MainWindow", "Ctrl+F")) - from manuskript.ui.cheatSheet import cheatSheet from manuskript.ui.editors.mainEditor import mainEditor from manuskript.ui.search import search From 49f0c298c3e4c34b32bf4477eb2d77ebc62d0502 Mon Sep 17 00:00:00 2001 From: DarkRedman Date: Sat, 10 Apr 2021 14:58:00 +0200 Subject: [PATCH 46/51] Fixed pandoc command arguments (#790) * Fixed pandoc command arguments `--base-header-level` throws a new export error because it is deprecated, now we should use `--shift-heading-level-by` * Adjusted default and min value for base-header Co-authored-by: Tobias Frisch --- manuskript/exporter/pandoc/abstractPlainText.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/manuskript/exporter/pandoc/abstractPlainText.py b/manuskript/exporter/pandoc/abstractPlainText.py index 9dcfd8f..8c5a07b 100644 --- a/manuskript/exporter/pandoc/abstractPlainText.py +++ b/manuskript/exporter/pandoc/abstractPlainText.py @@ -108,9 +108,9 @@ class pandocSettings(markdownSettings): # pandoc v1 only "normalize": pandocSetting("--normalize", "checkbox", "", qApp.translate("Export", "Normalize the document (cleaner)")), - "base-header": pandocSetting("--base-header-level=", "number", "", + "base-header": pandocSetting("--shift-heading-level-by=", "number", "", qApp.translate("Export", "Specify the base level for headers: "), - default=1, min=1), + default=0, min=0), "disable-YAML": pandocSetting("EXT-yaml_metadata_block", "checkbox", "", qApp.translate("Export", "Disable YAML metadata block.\nUse that if you get YAML related error.")), From 4107c48ea9dfa1b7d56abdbf8c9fc0d9d83b24d6 Mon Sep 17 00:00:00 2001 From: Alexandre Date: Sun, 11 Apr 2021 08:31:06 -0400 Subject: [PATCH 47/51] Fix 860 languagetool get locale language (#861) * Fix #860 missing get_locale_language on languagetool * Update spellchecker.py Co-authored-by: Tobias Frisch --- manuskript/functions/spellchecker.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/manuskript/functions/spellchecker.py b/manuskript/functions/spellchecker.py index a29e735..62e292d 100644 --- a/manuskript/functions/spellchecker.py +++ b/manuskript/functions/spellchecker.py @@ -530,6 +530,12 @@ def get_languagetool_languages(): else: return languagetool.LanguageTool()._get_languages() +def get_languagetool_locale_language(): + if use_language_check: + return languagetool.get_locale_language() + else: + return languagetool.utils.get_locale_language() + class LanguageToolDictionary(BasicDictionary): def __init__(self, name): @@ -577,7 +583,7 @@ class LanguageToolDictionary(BasicDictionary): if not LanguageToolDictionary.isInstalled(): return None - default_locale = languagetool.get_locale_language() + default_locale = get_languagetool_locale_language() if default_locale and not default_locale in get_languagetool_languages(): default_locale = None From b090c11a9c6d30cc3dbce50180e790442cc407dd Mon Sep 17 00:00:00 2001 From: TheJackiMonster Date: Sun, 11 Apr 2021 16:02:41 +0200 Subject: [PATCH 48/51] Fixed multiple processes for LanguageTool by using one instance only Signed-off-by: TheJackiMonster --- manuskript/functions/spellchecker.py | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/manuskript/functions/spellchecker.py b/manuskript/functions/spellchecker.py index 62e292d..61da802 100644 --- a/manuskript/functions/spellchecker.py +++ b/manuskript/functions/spellchecker.py @@ -524,11 +524,11 @@ class LanguageToolCache: if len(text) != self._length: self._matches = self._buildMatches(tool, text) -def get_languagetool_languages(): +def get_languagetool_languages(tool): if use_language_check: return languagetool.get_languages() else: - return languagetool.LanguageTool()._get_languages() + return tool._get_languages() def get_languagetool_locale_language(): if use_language_check: @@ -538,13 +538,18 @@ def get_languagetool_locale_language(): class LanguageToolDictionary(BasicDictionary): + if use_language_check: + _tool = None + else: + _tool = languagetool.LanguageTool() + def __init__(self, name): BasicDictionary.__init__(self, name) - if not (self._lang and self._lang in get_languagetool_languages()): + if not (self._lang and self._lang in get_languagetool_languages(self._tool)): self._lang = self.getDefaultDictionary() - self._tool = languagetool.LanguageTool(self._lang) + self._tool.language(self._lang) self._cache = {} @staticmethod @@ -572,7 +577,7 @@ class LanguageToolDictionary(BasicDictionary): @staticmethod def availableDictionaries(): if LanguageToolDictionary.isInstalled(): - languages = list(get_languagetool_languages()) + languages = list(get_languagetool_languages(LanguageToolDictionary._tool)) languages.sort() return languages @@ -585,7 +590,7 @@ class LanguageToolDictionary(BasicDictionary): default_locale = get_languagetool_locale_language() - if default_locale and not default_locale in get_languagetool_languages(): + if default_locale and not default_locale in get_languagetool_languages(LanguageToolDictionary._tool): default_locale = None if default_locale == None: From 9bb64d24713a4acd635470e3c0650d71b67d58d1 Mon Sep 17 00:00:00 2001 From: Belug Date: Sun, 11 Apr 2021 11:07:20 -0400 Subject: [PATCH 49/51] Fix errors when language tool isn't installed --- manuskript/functions/spellchecker.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/manuskript/functions/spellchecker.py b/manuskript/functions/spellchecker.py index 61da802..2e884d0 100644 --- a/manuskript/functions/spellchecker.py +++ b/manuskript/functions/spellchecker.py @@ -538,10 +538,10 @@ def get_languagetool_locale_language(): class LanguageToolDictionary(BasicDictionary): - if use_language_check: - _tool = None - else: + if languagetool: _tool = languagetool.LanguageTool() + else: + _tool = None def __init__(self, name): BasicDictionary.__init__(self, name) From a36fbb0211594b73a79252bba8df5e9bc45200a3 Mon Sep 17 00:00:00 2001 From: Belug Date: Sun, 11 Apr 2021 12:45:51 -0400 Subject: [PATCH 50/51] Add configuration for github actions to test linux on pull requests --- .github/workflows/linux.yml | 46 +++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 .github/workflows/linux.yml diff --git a/.github/workflows/linux.yml b/.github/workflows/linux.yml new file mode 100644 index 0000000..7286cb9 --- /dev/null +++ b/.github/workflows/linux.yml @@ -0,0 +1,46 @@ +# This is a basic workflow to help you get started with Actions + +name: CI + +# Controls when the action will run. +on: + # Triggers the workflow on push or pull request events but only for the develop branch + push: + branches: [ develop ] + pull_request: + branches: [ develop ] + + # Allows you to run this workflow manually from the Actions tab + workflow_dispatch: + +# A workflow run is made up of one or more jobs that can run sequentially or in parallel +jobs: + # This workflow contains a single job called "build" + test: + name: Test on node ${{ matrix.python_version }} and ${{ matrix.os }} + # The type of runner that the job will run on + runs-on: ${{ matrix.os }} + strategy: + matrix: + python-version: [3.6] + # python-version: [3.6, 3.7, 3.8, 3.9] + os: [ubuntu-16.04] + # os: [ubuntu-16.04, ubuntu-latest, windows-latest, macos-10.15] + + # Steps represent a sequence of tasks that will be executed as part of the job + steps: + - uses: actions/checkout@v2 + - name: Set up Python ${{ matrix.python-version }} + uses: actions/setup-python@v2 + with: + python-version: ${{ matrix.python-version }} + - name: Install dependencies + run: | + python -m pip install --upgrade pip + pip install pyqt5==5.9 lxml pytest pytest-faulthandler + sudo apt-get -qq update + sudo apt-get -qq install python3-pip python3-dev build-essential qt5-default libxml2-dev libxslt1-dev mesa-utils libgl1-mesa-glx libgl1-mesa-dev libxcb-xinerama0-dev + if [ -f requirements.txt ]; then pip install -r requirements.txt; fi + - name: Test with pytest + run: | + xvfb-run -s '-screen 0 640x480x24 +extension GLX' pytest -vs \ No newline at end of file From b2817b5f08a74d367306876dbfcd5cd124e95476 Mon Sep 17 00:00:00 2001 From: worstje Date: Tue, 13 Apr 2021 13:32:46 +0200 Subject: [PATCH 51/51] Friendly logging for end users (#859) * Changed default logging behaviour We now log by default to a timestamped file in $datadir/logs/. No longer shall restarting Manuskript after a crash wipe a very useful logfile. Logs older than 35 days in the $datadir/logs/ directory are pruned during startup. In case of subtle corruption detected a few weeks after the fact, relevant logs might still exist to explain what had happened... yet it does not come at the cost of infinitely gobbling up a users storage space, either. The --logfile (-L) argument can now utilize strftime() specifiers. A special modifier %# is also supported which will insert the process id. Besides being an added factor of uniqueness for a filename, it can also be relevant to help identify the log file belonging to a misbehaving Manuskript process. * Added support-related items to Help menu The 'Technical Support' item should lead to a landing page that will guide the user to the most efficient way to resolve their problem. How to report bugs and submit logs would be one of those. The 'Locate Log File' item should open a file manager window with the logfile of this session highlighted. Because Manuskript is still writing to it, we first remind them of its limited use until Manuskript is closed. This approach was chosen because users might want to locate the file prior to reproducing a bug, or because they'd like to look at other logs from previous sessions. * Updated translation files and added german translation Co-authored-by: TheJackiMonster --- i18n/manuskript_ar_SA.ts | 724 +++++++++++++++-------------- i18n/manuskript_de.qm | Bin 86174 -> 87654 bytes i18n/manuskript_de.ts | 757 +++++++++++++++++-------------- i18n/manuskript_en_GB.ts | 724 +++++++++++++++-------------- i18n/manuskript_es.ts | 724 +++++++++++++++-------------- i18n/manuskript_fa.ts | 724 +++++++++++++++-------------- i18n/manuskript_fr.ts | 724 +++++++++++++++-------------- i18n/manuskript_hu.ts | 724 +++++++++++++++-------------- i18n/manuskript_id.ts | 724 +++++++++++++++-------------- i18n/manuskript_it.ts | 724 +++++++++++++++-------------- i18n/manuskript_ja.ts | 724 +++++++++++++++-------------- i18n/manuskript_ko.ts | 724 +++++++++++++++-------------- i18n/manuskript_nb_NO.ts | 724 +++++++++++++++-------------- i18n/manuskript_nl.ts | 724 +++++++++++++++-------------- i18n/manuskript_pl.ts | 724 +++++++++++++++-------------- i18n/manuskript_pt_BR.ts | 724 +++++++++++++++-------------- i18n/manuskript_pt_PT.ts | 724 +++++++++++++++-------------- i18n/manuskript_ro.ts | 724 +++++++++++++++-------------- i18n/manuskript_ru.ts | 724 +++++++++++++++-------------- i18n/manuskript_sv.ts | 724 +++++++++++++++-------------- i18n/manuskript_tr.ts | 724 +++++++++++++++-------------- i18n/manuskript_uk.ts | 724 +++++++++++++++-------------- i18n/manuskript_zh_CN.ts | 724 +++++++++++++++-------------- i18n/manuskript_zh_HANT.ts | 724 +++++++++++++++-------------- manuskript/functions/__init__.py | 40 +- manuskript/logging.py | 71 ++- manuskript/mainWindow.py | 49 +- manuskript/ui/mainWindow.py | 21 +- manuskript/ui/mainWindow.ui | 40 +- 29 files changed, 9150 insertions(+), 7756 deletions(-) diff --git a/i18n/manuskript_ar_SA.ts b/i18n/manuskript_ar_SA.ts index 6e921ec..abf045f 100644 --- a/i18n/manuskript_ar_SA.ts +++ b/i18n/manuskript_ar_SA.ts @@ -38,7 +38,7 @@ استعراض مع وضع الإبانة. - + Plain text نص عادي @@ -53,82 +53,82 @@ يحتاج أن يكون LaTeX مثبتاً. - + Error خطأ - + Standalone document (not just a fragment) مستند مُستقل (ليس مجرد جزء) - + Include a table of contents. ضمّن جدول محتويات. - + Number of sections level to include in TOC: كم مستوى من الأجزاء ستُضمّن في جدول المحتويات: - + Typographically correct output ناتج المخرجات صحيح بشكل طباعي - + Normalize the document (cleaner) تسوية المستند (مُنظف) - + Specify the base level for headers: حدد المستوى الأساس للعناوين الرئسية - + Use reference-style links instead of inline links استخدم روابط ذات شكل مفهرس بدلاً من الروابط بين السطور - + Use ATX-style headers استخدم شكل ATX للعناوين الرأسية - + Self-contained HTML files, with no dependencies ملفات HTML مصنوعة بشكل مستقل بحيث لاتحتاج لملحقات وتبعات - + Use <q> tags for quotes in HTML استخدم وسوم <q> للاقتباسات في HTML - + LaTeX engine used to produce the PDF. اُستخدم محرك LaTeX لإنتاج PDF. - + Paper size: حجم الورقة: - + Font size: حجم الخط: - + Class: الفئة (Class): - + Line spacing: تباعد الأسطر: @@ -160,14 +160,14 @@ على إفتراض أن النصوص مكتوبة بصيغة مارك داون. - + Simplest export to plain text. Allows you to use your own markup not understood by Manuskript, for example <a href='www.fountain.io'>Fountain</a>. الإخراج الأسهل للنصوص العادية. تسمح لك باستخدام صيغة ترميز لا يفهمها هذا التطبيق (manuskript) مثل صيغة <a href='www.fountain.io'>Fountain</a>. - + <p>A universal document converter. Can be used to convert Markdown to a wide range of other formats.</p> <p>Website: <a href="http://www.pandoc.org">http://pandoc.org/</a></p> @@ -208,25 +208,25 @@ عبر المحررات تلك. - + Disable YAML metadata block. Use that if you get YAML related error. تعطيل كتلة البيانات الوصفة ذات صيغة YAML. استخدم هذا الخيار عند تعرضك لخطأ YAML. - + Convert to ePUB3 تحويل إلى ePUB3 - + Could not process regular expression: {} - + Choose output file… @@ -335,24 +335,24 @@ Use that if you get YAML related error. Import - + Markdown import استيراد مارك داون (Markdown) - + <b>Info:</b> A very simple parser that will go through a markdown document and create items for each titles.<br/>&nbsp; - + Folder import - + <p><b>Info:</b> Imports a whole directory structure. Folders are added as folders, and plaintext documents within (you chose which ones by extension) @@ -361,47 +361,47 @@ Use that if you get YAML related error. - + Include only those extensions: - + Comma separated values - + Sort items by name - + Import folder then files - + OPML Import - + File open failed. - + This does not appear to be a valid OPML file. - + Pandoc import - + <b>Info:</b> Manuskript can import from <b>markdown</b> or <b>OPML</b>. Pandoc will convert your document to either (see option below), and @@ -411,17 +411,17 @@ Use that if you get YAML related error. - + Import using: - + Wrap lines: - + <p>Should pandoc create cosmetic / non-semantic line-breaks?</p><p> <b>auto</b>: wraps at 72 characters.<br> @@ -431,27 +431,27 @@ Use that if you get YAML related error. - + Mind Map Import - + This does not appear to be a valid Mind Map file. - + Mind Map import - + Import tip as: - + Untitled @@ -707,7 +707,7 @@ Use that if you get YAML related error. - + Outline @@ -752,157 +752,157 @@ Use that if you get YAML related error. - + &Tools - + &Edit - + &View - + &Mode - + &Cheat sheet - + Sea&rch - + &Navigation - + &Open - + Ctrl+O - + &Save - + Ctrl+S - + Sa&ve as... - + Ctrl+Shift+S - + &Quit - + Ctrl+Q - + &Show help texts - + Ctrl+Shift+B - + &Spellcheck - + F9 - + &Labels... - + &Status... - + Tree - + &Simple - + &Fiction - + Index cards - + S&ettings - + F8 - + &Close project - + Co&mpile - + F6 - + &Frequency Analyzer @@ -912,194 +912,184 @@ Use that if you get YAML related error. - + &About - + About Manuskript - + Manuskript مانيوسكريبت - + Project {} saved. - + WARNING: Project {} not saved. - + Project {} loaded. - - Project {} loaded with some errors: - - - - - * {} wasn't found in project file. - - - - + Project {} loaded with some errors. - + (~{} pages) - + Words: {}{} - + Book summary - + Project tree - + Metadata - + Story line - + Enter information about your book, and yourself. - + The basic situation, in the form of a 'What if...?' question. Ex: 'What if the most dangerous evil wizard wasn't able to kill a baby?' (Harry Potter) - + Take time to think about a one sentence (~50 words) summary of your book. Then expand it to a paragraph, then to a page, then to a full summary. - + Create your characters. - + Develop plots. - + Build worlds. Create hierarchy of broad categories down to specific details. - + Create the outline of your masterpiece. - + Write. - + Debug info. Sometimes useful. - + Dictionary - + Nothing - + POV - + Label - + Progress - + Compile - + Icon color - + Text color - + Background color - + Icon - + Text - + Background - + Border - + Corner @@ -1109,307 +1099,307 @@ Use that if you get YAML related error. - + &Import… - + F7 - + &Copy - + Ctrl+C - + C&ut - + Ctrl+X - + &Paste - + Ctrl+V - + &Split… - + Ctrl+Shift+K - + Sp&lit at cursor - + Ctrl+K - + Ctrl+M - + Ctrl+D - + Del - + &Move Up - + Ctrl+Shift+Up - + M&ove Down - + Ctrl+Shift+Down - + Dupl&icate - + &Delete - + &Rename - + F2 - + Organi&ze - + M&erge - + &Format - + &Header - + &Level 1 (setext) - + Ctrl+Alt+1 - + Level &2 - + Ctrl+Alt+2 - + Level &1 (atx) - + Ctrl+1 - + L&evel 2 - + Ctrl+2 - + Level &3 - + Ctrl+3 - + Level &4 - + Ctrl+4 - + Level &5 - + Ctrl+5 - + Level &6 - + Ctrl+6 - + &Bold - + Ctrl+B - + &Italic - + Ctrl+I - + &Strike - + &Verbatim - + Su&perscript - + Ctrl++ - + Subsc&ript - + Ctrl+- - + Co&mment block - + Ctrl+Shift+C - + Clear &formats - + Ctrl+0 - + &Comment line(s) - + &Ordered list - + &Unordered list - + B&lockquote @@ -1419,52 +1409,52 @@ Use that if you get YAML related error. - + The file {} does not exist. Has it been moved or deleted? - + Install {}{} to use spellcheck - + {} has no installed dictionaries - + {}{} is not installed - + Save project? - + Save changes to project "{}" before closing? - + Your changes will be lost if you don't save them. - + PyQt / Qt versions 5.11 and 5.12 are known to cause a crash which might result in a loss of data. - + PyQt {} and Qt {} are in use. - + Proceed with import at your own risk @@ -1474,12 +1464,12 @@ Use that if you get YAML related error. - + Search - + Ctrl+F @@ -1503,6 +1493,76 @@ Use that if you get YAML related error. Status الحالة + + + &Technical Support + + + + + How to obtain technical support for Manuskript. + + + + + F1 + + + + + &Locate log file... + + + + + Locate log file + + + + + Locate the diagnostic log file used for this session. + + + + + Shift+F1 + + + + + Sorry! + + + + + This session is not being logged. + + + + + A log file is a Work in Progress! + + + + + The log file "{}" will continue to be written to until Manuskript is closed. + + + + + It will now be displayed in your file manager, but is of limited use until you close Manuskript. + + + + + Error! + + + + + An error was encountered while trying to show the log file below in your file manager. + + Search @@ -2224,42 +2284,42 @@ Use that if you get YAML related error. SpellAction - + Spelling Suggestions - + &Add to dictionary - + &Remove from custom dictionary - + &New Character - + &New Plot Item - + &New World Item - + &Correction Suggestions - + &Correction Suggestion @@ -2293,37 +2353,37 @@ Use that if you get YAML related error. abstractModel - + Title - + POV - + Label - + Status الحالة - + Compile - + Word count - + Goal @@ -2364,12 +2424,12 @@ Use that if you get YAML related error. characterModel - + Name - + Value @@ -2377,17 +2437,17 @@ Use that if you get YAML related error. characterTreeView - + Main - + Secondary - + Minor @@ -2819,72 +2879,72 @@ Use that if you get YAML related error. fullScreenEditor - + Theme: - + {} words / {} - + {} words - + Spellcheck - + Navigation - + New Text - + Title - + Title: Show Full Path - + Theme selector - + Word count - + Progress - + Progress: Auto Show/Hide - + Clock - + Clock: Show Seconds @@ -2963,14 +3023,6 @@ Use that if you get YAML related error. الإعدادات - - lastAccessedDirectoryInfo - - - Last accessed directory "{}" loaded. - - - lineEditView @@ -3085,32 +3137,32 @@ Use that if you get YAML related error. - + Root - + {} words - + ({} chars) {} words / {} - + {} words / {} - + {} chars - + {} chars @@ -3164,7 +3216,7 @@ Use that if you get YAML related error. myPanel - + Auto-hide @@ -3318,12 +3370,12 @@ Use that if you get YAML related error. outlineItem - + {} words / {} ({}) - + {} words @@ -3331,17 +3383,17 @@ Use that if you get YAML related error. pandocSettings - + General - + Table of Content - + Custom settings for {} @@ -3545,32 +3597,32 @@ Use that if you get YAML related error. plotModel - + Name - + Meta - + New step - + Main - + Secondary - + Minor @@ -3578,22 +3630,22 @@ Use that if you get YAML related error. plotTreeView - + Main - + Secondary - + Minor - + **Plot:** {} @@ -3657,52 +3709,52 @@ Use that if you get YAML related error. references - + Not a reference: {}. - + Unknown reference: {}. - + Path: المسار: - + Stats: - + POV: - + Status: الحالة: - + Label: - + Short summary: - + Long summary: - + Notes: @@ -3722,72 +3774,72 @@ Use that if you get YAML related error. - + Go to {}. - + Description وصف - + Result - + Characters - + Resolution steps - + Passion - + Conflict - + <b>Unknown reference:</b> {}. - + Folder: <b>{}</b> - + Text: <b>{}</b> - + Character: <b>{}</b> - + Plot: <b>{}</b> - + World: <b>{name}</b>{path} - + Referenced in: @@ -3830,12 +3882,12 @@ Use that if you get YAML related error. - + Restore - + Delete @@ -3895,12 +3947,12 @@ Use that if you get YAML related error. - + Line {}: - + Clear all @@ -3921,52 +3973,52 @@ Use that if you get YAML related error. settingsWindow - + New status - + New label - + newtheme - + New theme - + (read-only) - + Open Image - + Image files (*.jpg; *.jpeg; *.png) - + Error خطأ - + Unable to load selected file - + Unable to add selected image: {} @@ -4053,22 +4105,22 @@ Use that if you get YAML related error. tabSplitter - + Open selected items in that view. - + Split horizontally - + Close split - + Split vertically @@ -4076,7 +4128,7 @@ Use that if you get YAML related error. textEditView - + Various @@ -4175,27 +4227,27 @@ Use that if you get YAML related error. - + Novel - + Novella - + Short Story - + Research paper - + Demo projects @@ -4230,147 +4282,147 @@ Use that if you get YAML related error. - + Open project - + Manuskript project (*.msk);;All files (*) - + Save project as... - + Manuskript project (*.msk) - + Manuskript مانيوسكريبت - + Create New Project - + Warning - + Overwrite existing project {} ? - + Empty fiction - + Chapter - + Scene - + Trilogy - + Book - + Section - + Empty non-fiction - + words each. - + of - + Text - + Something - + <b>Total:</b> {} words (~ {} pages) - + Fiction - + Non-fiction - + Idea - + Note - + Research - + TODO - + First draft - + Second draft - + Final diff --git a/i18n/manuskript_de.qm b/i18n/manuskript_de.qm index 55a539c459d34ab4cd3806af4c8dd3679f68d76a..fb3a6c2f6be1b3efe215cc2edbe8e97374aa1895 100644 GIT binary patch delta 9238 zcmZ{o2V4{P`^TS4?k+oVFto0KTND>Kt5y+L0SCj4G6Do4(GWzj5@!{}MN||KwQj|U zb%0U_xCeDrv5tyb_ue@EpUYXbzyI&2FMTJMyYG0O&ojQ4vz)t~%gw22n?OW$iKZlh z&55bofQX$-G}H;q0Na9gFce$>P6ji7Lo}eADCjVeEqkW;;mK5@;BG`C{6#K#Dzc!mgAA8JlB-stO52DX zT0|5uOXTA-Sl3`;>KTYFV2S1(B=$lO(fo}fPrPxE@p1w&*PdY_e>?1;jSl9B7mBh) zp2P&gjW<0+{v9at9_t{(z7wh2DYEi@k*?!K)>sYyFXE?nTn}&XvB1!saPmmUeO+A1V_`9Po;*%N z-M)v&b6QKH>XoS3#!JMsZb)sf;roI^)PC+fEHK+fod;hf;^V0s=Sj5VH|jpU9WlDQ z)P30sqIZv|M-oDCHb=d@7h@;Osn_nE2p=E%v9B{R&JW42^?Ra0C&{n-Zer@sB)>)B zMDhU+GES-F&;CSAgNfwdY9cW$Z-xDhE?Q|91$F`P6q$JEBE@ zP`@#V(};ADSqhQ)r4BOOa0=ouQK7fUeGNtKA1CrjSCKEH9b_bKBBe7#y56Fo$p;bt zG2c;eEIz~}QE=QIh+`dv)W-sj{Z1ii`9yAI4l=4->fb64qWL6pUo;IEdk{W-O#?na zD=RM3z-(V)JX_Mh1GwIH2n{@fD15p4~pP$M)ou~g*#iWD7un3!5pGVPWiyywz{vU$~s+FYPXuS1D$O{B?{nh@Pa zh|f$Qro}q@Y0kyA@F!Z;KuU~PXIeE723U5E)*pBT?G2-iU68di_tC~p7NWP?D8GuC zn9Ad*APSQ5eMftpQy_^Qbn+hVkKX1WqwGQ_?^hD9HSoc&JBfZuY2I^VO@qu>xFzz)Ih-R&3ny6pz6yo3dnAzJ3&r>;5NSJu)N@o9+EhrB$%(2a> zkX|q5TpY&f{giq5@Fo)EkK2R~L~}YbPjWXAeY(KB8y5i0Zf8F6CQQ6iBKdtFETWNU z-kc@IJ6O^!84_r{PBQTHOQMyblF;^Dh_1OwBClN_^0_IA9#xDDq)K8CmGo+)B>AsW zV$^jcDKW5c*?YEbJtWJ&vq2hdI!e|gKE%KmBx@EF!Szoin}*dO+Id8>BW)GJ z|GLNrcO(UUy22GrB?VE~sV^fbxL6y-@0FzB4OrYua(3@jVqEr1&Yi(Tzc-Tn*~gRU zQVq$2lf#G-HcDO`KSxYsPV%<6n8?swDzW(w#)>nf+S(t8(dJ4kNU`(l52Y1T{E)GK zkTw>6|8ttON#kIm%de!(`gbJib4uELbS^PAhNi1jk8z)0#y`;NKuM(NurG+D~qvx-sM;e48FO^G=?Wm6o?;<@_?;O!b zC+Ydh4T;vCmtJs^5^cOIy-@2Y(#R|6?OtmT0~@4w>*t_ls3d*jHV@GpYGWmpuz(7c zS?-A7o1<*iL+j9AaBRJcCSsH}w%G!t^h#FNcUc9Z{z+`NjaP|jQpN_{!~*`R#|}d) zK!5+t4i5~3%c`+q5?Jt1A{&=95}Ns&ja%kPjH;B44}fcbzs!zm1`EWRSW5|_uBk1N zO$tYN$6R73kKBjoe88rfo)P0d7<>t)gKxpT;5+aU_@0>Bwb)cMfqg&;I1%K)ZEWgN zgzM8-HZ3^_eaka8eKQj2k3Q^zv;#!`P1%J#k$C6!VY3I}yKU}Nc4_Q$F zFaSg*4zhu-z%Afg@Gr0&U0fyb1Ly;yJq)(88)h@$DiB%-z97=R59HxWJU3g8_#aS- z&25Y@n^)68MmLqs%?c;7KW1|`3`MD!BJz(Cc1w3F!gUV2V|QKLpTX{I4WIw2WAo*| z5mPCEEl}aPLDSiytnRR&g)J%`M-un(e=Ok}UMgIJxS+51hE=-47bALNZ3 z_EB~M!dSyTOP3JUe#pM+v<{tJD*OJ(d7`MM6 zCc5eYoLjv*M9KxM=^ADkYU?$Jra*W^%|~k3^w%P3KxNE9*aL@sgV;3fhqJ}u?uD`2p7*SLix@W`q$+@eX_!HwMF>Cm*bDYy7!JQ8Lz zE_?Ptd=KT8PQrdd?A)>dczE3eZuO$AM2Qw|^#^~%#;@Gknv!fn}UC2Dtt z+Zx*ml3K`}iJgs&z2MG#s!5cR!JVyF2+gwXxeMQWqnnt=UCT!sv#kSnSD8XIiRbPQ zOoS%`xcd*+6YW08J!phX+#;5H*en$_Nx?mSg^9C@dFgNk65v^$djjoe`ti04c z@GcRs(6(~kB@YfL{hhB7^nz&3SiWvi2GPMLe7#vV+}L0{-_!~d-}dL5tw&L8bAWGK z=OauW!~3K{i=%Ej$f!s0K38g>2p-{kU4m9?_2m7mi1zYfyuSyF^bzYIBb&|lbNdOF zh~d-cox=+E@$mu+R*2j?T;x?J2N~`; zAD@wmOia8#01vT#uZ%bQ-m8nd8#ttOJVhx`)bO{=WAw5Cx5?r4t$=*-=Bj8WlrHAs?H!f zGWloeEpV#H;9t98N7)_tH>rryQZN4f&w0?wC;np?uD7lz!8gQ3QEt!Pc^i-C9Iun+hDY9gz z$TBC{tc_Vjt&Ym(XFNo8kB}|+p%@GOcu}^Z&=)@Qm90&|%AEGfHZaGCa$IGb4+rAd z5+&Q}_lOwzW7*!s5oq;R%MNS_MHPQ8J2)NHyZ$HHk_Hk!-Wbmo7 zPqQ&`#eH&#n+|b%Q!XuzMN9arym3G!Vw(4pw{+G(Jj3Lz%gYc>cjR46^O1pLw&Og) zB}9I#2yvX7D?h$yGSoUjezq%oe6~#fX7pH`EHBF6mOe+b9I9ZCq7mZXD!5v=P&9Yg zn^tnM6_hDF-as->UMo7a!^UqkQus%IL`%C#mpO%ROD|# z7VuoD*mpdbXsJSRC>Zy>*q}JS69%t5SaBzL6564eihDlyh>o^Yl#eJPTJ5L!n2X>0 zj#eu3lHtjv-ISUKN6~R^Ryue30cZ9{%4ThDK{9idEm;_Li<7eLfdq6BGLZ`}i2VD7 z^7~crP->B~V*~~qGeX&U9ulQ|sj^@AaC9H*m4h~Xgo738giY`Hu)(>bS=j5 z=oe*N;!8xiMQM^fB5J%`Ieu*eq$5U|YP-u}hpUt`g3v$doR#)2?TP9&Q7%$N;d;4p zaic}ZKLyHP%5Fd-Ta;@j!S@$yDAx+_5ZnVCWHd*Wxs9jdEy@Uy4>l`{+Q6bo*G1mH zraZO-nY~3Tjw>qkV@1_uW z`>2KvJdZqQSH*3FD>NTe@u49^XF918&bPz~wa}&-?}RX~(^EC2E~0ijsit`1MUt+c zYDTsd?|FKw(t9|Ai$p$jSEa9;jGf$8&5l}+X!Taj@kah@TB2G|^Dg?hQ>ulxkoQ_v zS1qmpizKa5WzRl^_d`XhW!+(EpCPK%e)zt_UA4M&9u{cZtlBWg8{r+U+PpXs>EeYd z?*YD_P^osk3PnRyuKI1@Rh+Tcs7{<8hQogo)#-92ERd!;YxF@n`A&6qZ6NOdSyft! zp1RWj)zz`ce~nXAZ~HIB+m%_W_mg3vhhb`6+Db%&tJ>OuR#RoB&nPSnBiCSM(X=NL@ALT&7X=rB90N8)`TMV(PwdSaZjKI-x7 zg-*`vj(Vb75Ycx>)l;Nt=rEtCr)>3tMb@gPFYkaecDj1{h85_sIdv*;CpzH&nOUD% zCbDdrgN%Dsb-Du4bm^&j?p4%AuQ}@Z>#%{#7Imf$N9;CIb>`*?=)tF}vzSuEzx#Cc z;)G2^r^3{WXI4Sg2G0*i{O?yUsgIT3oS|N`aW3Ak1gO^>!Oq-%6d7GnrBJm z>dmK3Xq9`Yw>4&n;(XM*=hwy2+FhN$wKj@#xVnHr9;q8Gay9|l4%c)Yh$sz_fzQES zAkKp!_cdJyNpa5e()8MigK2Z6=EtfvQDLWO!gJ3;GUGMIHb^5k)@i0Zn2IC$Wld@y zR|Jt%v*aqKZP!+_G7FNN{7$oGaUh!iL7H{d&>rnMqvSd+KC zA)0_d&2}CeoZVVelw(EXHdj-0^9SwldsB?|fC; z_Tw%LFj4!x2X^p&y|%~AS$KO=sO^cGMem1ddyhgftx&EFj!DOBn~vK4-J$(i(b@?v zcs_KW$b%&!@3qy=+zIJzT&i92+L=h#OS@v0tuju?k=m^fQi&=|((Y=874I6QE%w4n z=RVaQuTzW!+Fg6~Dl|Ojl=jgGc)Hdp?c)>qc&@hgxhx*{SJ%E6cM7%bk@m%sFdX?; zfZ^bE?T1)s*g6x03#~;u>$t9Rc_Avm23-}~hDSKMkJ8n=h_H|UOQ#R4O5|EY z*SrQyzQ#${ehzl3{G{v97du+lT-Wg|?u%`y>(UZhUcFV&qLc(NoO00GR{yNowfWsw5TI> zKbZs2pX}4647a0g=r8hBE1hjC#28ngn^lSuQ2B{2!yU(*O&1+xs)Xs*2=5#d-{^{s zNEggp-R~)9(bxT`yK*N7X``v`Rvb1KabI`KijB?k&^_iL+H>JGbkBtwI=k!MZ|Flz zl^oqCBgE5sr4gsRg1pFTFWcuS2AJ5c^{5^?J_8vk8vpCbkIeYg1TPxG$m+Q6N%$)# z{6Pw*%Juxr5n)z?KF%Dik21y?JUu<_`$xFsjUDn>>e~RL1>va(iXjumOmKWMkOdL@UXURo#$=2Li_-@tjvQ&WSnU%-tK`KEpDy(dAYTk(`X39^J0`GV zXcGn%rWCH2?2oorZS3}C0=LdzmZ~=<=)?5=&6W{*qeL5)$0(6^A(Gy@*gS zw)L1V!7)k#Hm`SV-voBUrx=RE|H4MX9oOUWsSm!JDH-1r9M6Sei%||kTJej)VL%f# z#+{K^*?%{$ux4Q_7~J;R;!VgO);Hmw;1glWWDG3)|Bs(c-*_aXvq^8TSj-lEQdolC zV2Us&nydzkAyS_d1OMo)ma#@twBBmgC&ZYO^wyZKzSD;r;&2JZ7;8?n=+%Nh_3>e* zuxNwDUSWuH-iOGsii+L7*pm0LTH-vq!QcAKb!`}R-Xzm)zLxf1_W5dg-d9+aXx^Aa zp3yY_GLWQObHVEN*wGC&Ex)!oe+oeENTlKx?)#DozR<4CKgec~9G zyaQu?W^8vpt0M{PvcRK)?h^6ut9QQ!%|Bj!54FVMeqr4P$GuL7;m)VzQhEB9_lj234+l_#F_E^U$z=o zCC@Lpj>PL9q5hYI^2Ob{|HveQ?`@<1m5u%h8-YSJ2!Sr_@@r=KFB8BT4hekYm@pcF zrxIbMI7b)@q7j4Eh!MYurdH(rc~wH3L>j}QP38ovG2&|ufe9iV8nMQ}HVH@|MzhHg zEO9?ImFIa(P2^k?MSp+UDIaJEvqZ!=B%htuv~~qdAA?OqVNo84p09x+4~#KJSv?RQ z6UVu@{rj%3f%4B?E$tKMSE*riY)welj?H|TRS{^kCfaRLRqe;qI#iWYFp_TqeG{L7 zW{YL47@zVPPK>3kf~-Lol+sMdio}rVGGjI|4v-)G>*oTJM8>5Bm}7n3lj7w zY*7dgAz_M@z~UH9_%5c!aC}cds8+SRmsYU}*M(mMoeN4%g2#kFGkg=ienH>nFZXfd z-9<@9m?2A3BGR2%kam*AXtf#;-saDG{i;$y(hlWDddg7Hl>SHq{f(wbv%S_3-WKqA z$6{3dTP5G_Q>bo2Pz&oEiB+2M$qbd59SRd{hAQ{Xy4`}lk&Cbdli7-e3Yi&|G}`ca zF?N?By1Zld-=x(V(~lVBpXwKc;SA7AlrXTp{9d){6#~q9l&{1%YXan$Xo?gz^I2$l zQ!+hUO7&FFUa_RUPFpX)kfisC3A2PnpfK3Y$DOMRWj_F82_Yd=ygpdAu!Sa>Py89z z&yVzp!y0>94e|f=k^Xp8NUh={6?BeSP+a38zdVz-?N}(67h1BbZsyz8O!K_EuS#m} eRJbs0D`vK-&D37dfKg{&ZoqWi>C}ixtM`9vW|_PI delta 7774 zcmY+I30zI-|Hr@Q-gC~~?^Vd27DR=}o;^g8tul(VQ&O}bOV?P2(p0)7L^Pr(iW`xg z8pMq3YRDF2EBg}B|Ij~7zezlZvCanz@QFqutHt<^IX5%~bN~9kk@Nk`hS}G|M9vnL-u(VR( zUmpbCZ!hrS9|FHOH;|E32vkN3H2Ns8Z8L$UUIHz{iM?w}G{c72C(DRtb{ClVzKL3* z18al_-<=I)m@&kD^~S)TzyrisZYR#>22n}~adxA@x5V}TL3F5#z+!WOM*;-?{g=R3 z?*+cj6Ih=j@LQz722)V`gBW8Q;s$3C)t@GA%o-x!2I9u{CGx`un^+Vh@T(PZE<=fa zOaNg|zZ1l{ZNcvf0~zrQ;yfT=YKg!juLVA51lBGCcM;S1GjWjtL_zk%X?01&bSoon zBOW~HFYv`m;_@*;)NO&g#t6K0SKtE(hTj>rmq2SX;*K05TAVB}*Mhjyfkc-xh~_cuzw%K_|fyvPrO;ssf@_6JK0=;w~sEP z9&7E1+8dMIzDiVEHv17te=?BK zFf@T(hUfJ(q2JHM^zfz$flCl2+FIeFbURHbTLUj`B-d$Q5hh_Y`S>8B4LLMrG2(Vs zD}fs-1s>1~{2pT<{UBh;q=pY z_)tb3P2W12n6BX2rsp?k`h^ulZ%&YBvv|@{*3aa58aB-?BF}Ps=*vX%yaFDPBMBA} z<=B#!0>3Zz6PV*8@ZflXmsJ99tT&KRuOzQZIHQ9H&EVsSa>vt*Rk$zuL^JYCiS~jG zkBRp5Chy=*gNc?fO&6GO0L^wkPfVMo6m}HpcjhWu@ff}_;1;d?>`ipfnN}Hh2QN~_ zuaU%bH`f(#CfZ~d+SOGIlOCmA(;@e!Y}z++5m8by?b{zg^mZwgv<^omPNic(aIw+# zbfRS}T%ia3@uCijwla_rdC?y)n-gPqj~=s-?|BwI>5)m~G@2Sp>WQL<(D#-QbJ=Z1 ze18$Ot?IXIdiWN6I3$g1#xh}w#G_9f%o3Qqx4CHgm5)SQdx*RpMiSi` zD+;)Oi)hqf(d-3f#PnrEa}bqOH&C?XVHGj#5K-(LX!5Tz(Yk!pJFi!wthVrk0YgPO z(Y4T!t0-qMMgu|zTaBs%s5Jib75 z{lpq#j0TEsT*CwxCX4P)LbO+m621Ck7E#zi(T7Vn;Oomp^<`y5KG(#e30_DeFT`rg z@5JzB;$~u3qB||bMzJnP*fO!LwrRli{o?Mn?qCP8-L#=Z6V1fE7UmOUnkcr9@+T@d zE1uv20os*_-A9Z=dg&(i*pD>9DaF$YTM_B}#4~#>C$cCLdnZ5>0sX|m9TuW;yNiQ| zpClR>CyqJ{f%gQ7f6+`K%Ciw?PJ_u3JBqd0`&JQSepa0KqME2`zxZesI42!^K@@B+ zJ~rWAPjFR7CMDR%CpVs9AHCyU=8!6fN84_dV!8IJV23Fk(cTSi6l# z?Z#2;=pD__I&5Oc?5oC$UaV^k1h_MSot3ta=>A03XX;dF;w9@Vf=W+pWkVOuM+P6p zhVJM=jQBk}&lNVlC}J1bHEHBA8&QEM>sHGy@q_nELacr1;2tpU;~)W#)T7j0ThAtAO}-fvvJ!IuFvh+_$6-8Xb787fP^|O zjolc3mT3IX?51%@#BpZqR!`i=xwG3t(ulNg9ogUFLkK+r``gWRi1$Wzrx<*Hkj*}Z zj_t-Nc6UEdqWE^84s>RBr{V*y@7Wv=nCNydHuuObOxTajOZ{Eq-`#ip|eMUwI}^;Gdt_ zLZ>LiZ8CfKXlJyBer$1n*gXF}TOvJ0jC?kGOo8`)+QXJ^aYB)GU`xxE5_vnY7sD{_ zkw1H}Mi1vyvE{FKBH{kYURjt*bnF{jK?w7~KiG;vDyY)y7<BGM4 z>4-dG!q#n#MEC}>?-E2rmbL7sVS9+_#IOw)Zlcd(Iq~v%qU4U8_|OERZ>>4D>HAe8 zuBDMFdg}_#yh|q{c{9#xJzR)cz*!~OqZW@An8FD>pTpVQxrlZspX63paTV7VvR5=aC{Vj|9)3#t2z zRG-a-yg_>KHx-!rHy66apD6Gv7kX|1@{|h~Sv4Dq?Z_?PfcaXT;g;(>k&!ig(*^QM zdv5(!IJ1?OTYvlw5?)&_A-@mNynY5U>}@XLIP%EnIb50yVVzaLZK{AJwvFXBuPg$W za~XfkLwl3UZB05y6yAs1z7i9;6>&RUVbQEf-0ttt9CwJzHC=^bU&-xVuf>YE0$kt) zi&g@&CkQMCd?u#bj7UP%MAuUVp-bDQUdeM~3_|p6A}cxs%%SEyJVGD@%D3e`sRw zCEi5ukH+r{-@)wz(e`nC=h76S5;wj}BF0(T@;#%V$!Zf`YquB0&wda;u+tBywioXh z2PX`DZXmxUHJ(%EYiYpfsMKR6!T@!fIaUP9fqoV zpZ8g;Mln6khZ=dq_NVxH!{D4(*75TaZ$Q9gfd`jqg^Qwr0&hA9{GsIMrNklATJd2T zNFFWX=bM^BWzYDC_3g2NbLN*Ya+shszeEj9rA^_N^2oT-L454fDk9lcfxqSpEcM`5 z+ulQ4;ls!8fMDXae9B??+;MFme#^{lL@}rMZNDRdnf$_MDs~V(G~u_ec!Iv_B%kfu z11o;Q@2-cl#w_5^uYu||JMow7TEe>%1g5PQc)yXqd<(wtxHEri8%&V=l&@Yjj%Y{< z|Db*l(QZ5b;qM6V-J$%m$|=amH^ltQUYW3YJpVEo5+%9uwTf$~K^p#DLT~IEM)IG{ zv7%HJ|0NFLdDV+=_(e~&vl+uUjMSF>BK?x+QlZ5A@qk51ei70hO zoVSofR9r`=HAoUOwKWpoOUaswm9Vj+B;iUrR9GbNe6_$T2T9_-Ekyk;O43qli9Xp% zHV!WXvm`rDj)tjPN^)Z%n5M5Jk12;r)BcteoS%vZ)sjLVIWa1^ZGMH3yB6=>- zgfEh_h2E&r?2vvab>uOAlO}W&*r3zK|wzU7Z#|Wn*(ve|lM3oz)Bja4)RBfbAuO<=xNXL%A3N7VQ zufBLcCqX(>YK@(vtJLq)e)K2LrE`MN9+VkNV|zEp!hEE$+NO&`4}=GebEUD>&meJE zX@Wo2Q zcSy6l;=3C?rA1T2i2jV0p8N&@MlF?|c^`|OcZKx46-;vBf>c|6_$I<8Tv}d=c+OrX zy|j51y68#L>!Yp{U6M<`EQ}#qn=7radXKH>Eg5^U2T`N3jO+M>Xx}d~%@vGqeoEG2 z%uuBA6j{fy5b)q}navmY)U(sFVS}KN%E__`vwxts-7j#Oi@?VFTAAC$>+r^O*-s8N zL<@S$yyGzOoHhc}T?JmN68OnaHrsR%eB(D+ge|tHnq=8xB?MVETejph8mVTMvb8M` zZlM9PwHr|F<(*`SU0sPn7R$DmqI>Vd%67l&PIU8x?7$Thq+)HkOn>JBR3?%Yt?7*1 zT_h_hM1ttnUUvGDJ5*RH``sM_Uq#7o7Q+W>dbILJq&B86g$ImOQh;TI|Q%=-b870CnU2O> z4cFxXZ@a;_vIG`i6L_?{z!wJ%)KcwH;lZ2E0>3^K_^n1@!$t!c<4k#AehV~Ak@C5t z%CJF-kcUQpM9*0&50lgp*=EU?=XQm2UX{l^=dhKHmalh1<0R=J*Nt=_>e5}lSrLTi zm*g4No6-B)%YS?P2=V_cMxMJ8w!bn;p4)VaVBu;Y!#$Gc+pfX+Njrfxi{+&Qpwb0} z0w3oZ$f(=N%MT;>+wPa&(q$uKvhq9b7braktiYZc2|ApSdzQ>^ZcaL%hxtnPu6B*|RG z`mIse0p=(Y#3C=}(*xl`3{PLDh~$irp@_-}g?jyDAj|7AW$P`y$>;6a^X42-{GF z{uS=e^;VpkUX4xl1;yo?v#`q_qtIUYCWjXvP+SjoM1mQixSl%|1NSMas?bFbmny1b zkP*9lQq)h|j&qbmMZ+pJ(GzQ>CO(@Ovm|AUDfMWQrzv~>h16`nP1(zRHF`)lWgoLD zqEj!G4wvu3G)t93f{GAbwMxeXXlB6&rBliW%(G~?()C;f&O36IQ{P}E315|-XTWWR zO3%xkuyKi3`aLU$YRi?u!w?N2ZI$!qoLDc50!`LPMMf!6HY7FWevd|dcAU8 z-cD@hmn-9V9nsOKe|Sbqc5DE5>p)Am5lYnzqn8tkEa zFIA>5h8SNbE7J>BfLY2d4Ay0_PMHz8ADJBdwKZuOt4d|YO&=_DpmLiPT)+p+#|!lRMPOlofsEyOWxBfBc!is&M7S9cl#80VCz5zYn6_KLzT+Pasy}(;Ykn27rgb4CUpLYuL6t zP~LWI58sYczNm$Z7!@h&w>Drycux6s{|^M+dga$bQxw~?D*9-LR&kVyTk#mK)JY|| zb`#NGqmrG3hBvD~EiN91sN`lnh>U(ysg`(R=crd{>MOBbU{$SZk(reuRi9nU5fquK zzL~B>%A>0Oce2sP990eIKNMTmgQ`)}5sYqK!S~=?5F0;trD~L?7<5-T7h~sXvr;v_ zjVVg)YL#F9bsS1gPz7rTAZ=7us8+vPgN|&HDsECM1kX~{wrU78XrL-5V=CHyPt~4w zn{imVUEr}90w0}J?YZVn)GrM^_a*%PW3+U4xwPHzCMJ?KaNp-kDd-PYE5wsoOPhO zx8)kFh*S4I4=0?^LESI#IW%FX9{A%3-v6W?Y_po^L!^3aO(Kp*&Z)WK?b zGi5E*?sF1wPBT=ip5_#fGqwKe6(;z=i~xZpp9MY=sedho6YdIEZ~NR5RoYp-GqE|g zzerV`VA}WU z58HgPcmD|bVXv<3t&tywt$R9ZntwZqOnyz%IHrVoY(Ddp6 zm1fpx9FnmTd81~?WC)zaXogFlQQz947oD$J7Ve6s zcz`C>M~CtsE3mdvqdfp8n{B5_tU@MNMQTzku#efDYanA>smaOTkAz&WDGN@;8Jef& zYV38GYMbWXGkpJ=hvrFW8?vKW3pG!ou(CDZG_N^0A%XsQ5FDy|n_!~fJS~jXRd}*` z{~5Jn{T`nLvHo0ujM2XgijnEl=D*|hC5w1Q_hfNreb1QgBE5RqI!6CJwyQ{&pp)xI zuQZo3uDX-)t#oy9{g^?z&hfVRKg+9yJ}5q#)5()<&@GK`=h(@`H!{l1*WW)dGBPm0EFd@nD-4f_F|$~@+`=q0+&3UF zpoawCY!ixsBmNmT>OaHAg$0GDA0NW>)B7}5m@2IQCz4Kmx1DaqTD45tB+UHK@TlSr zri_b`R!$=*6n_IL^1lL$M}&qpO~OY8`bPNAVUUi+?daPoGSDnCFf1}SDtKYwzvk49 zxZgEBp(mr%c??#k-?3v_7;!GXeu4j%OV@U_)!={2XiO7nJ{&68;98i82K{#~>BRX_ z!Qo+%gZ@3qn_s#&O){ysF-?W+O)L42Gyd;Q`BZ}z;Bx=(-G{fjsQx{ - + + Export @@ -38,7 +39,7 @@ Vorschau mit Hervorhebung. - + Plain text Einfacher Text @@ -53,82 +54,82 @@ LaTeX muss installiert sein. - + Error Fehler - + Standalone document (not just a fragment) Eigenständiges Dokument (nicht nur ein Fragment) - + Include a table of contents. Erzeuge ein Inhaltsverzeichnis. - + Number of sections level to include in TOC: Anzahl der Ebenen im Inhaltsverzeichnis: - + Typographically correct output Typographisch korrekte Ausgabe - + Normalize the document (cleaner) Automatische Bereinigung des Dokuments - + Specify the base level for headers: Lege die Basisebene für Überschriften fest: - + Use reference-style links instead of inline links Verwende Referenz-Verweise, anstatt Inline-Verweise - + Use ATX-style headers Verwende ATX-Headers - + Self-contained HTML files, with no dependencies Eigenständige HTML-Dateien, ohne Abhängigkeiten - + Use <q> tags for quotes in HTML Nutzt <p>-Tags für Zitate in HTML - + LaTeX engine used to produce the PDF. LaTeX-Engine wird für Erzeugung des PDFs genutzt. - + Paper size: Seitengröße: - + Font size: Schriftgröße: - + Class: Klasse: - + Line spacing: Zeilenabstand: @@ -160,14 +161,14 @@ Setzt voraus, dass Texte bereits in Markdown formatiert sind. - + Simplest export to plain text. Allows you to use your own markup not understood by Manuskript, for example <a href='www.fountain.io'>Fountain</a>. Einfacher Export in Plaintext. Erlaubt die Benutzung von Markups, die von Manuskript nicht interpretiert werden können, wie zum Beispiel <a href='www.fountain.io'>Fountain</a>. - + <p>A universal document converter. Can be used to convert Markdown to a wide range of other formats.</p> <p>Website: <a href="http://www.pandoc.org">http://pandoc.org/</a></p> @@ -208,27 +209,27 @@ interpretiert werden können, wie zum Beispiel <a href='www.fountain.io& durchsucht oder kontrolliert werden können. - + Disable YAML metadata block. Use that if you get YAML related error. Entfernt den YAML-Metadaten-Block. Nutze das, wenn du YAML-Errors bekommst. - + Convert to ePUB3 Konvertierung nach ePUB3 - + Could not process regular expression: {} Fehler bei der Verarbeitung eines regulären Ausdruckes: {} - - Choose output file… + + Choose output file… Ausgabe-Datei wählen… @@ -336,12 +337,12 @@ Nutze das, wenn du YAML-Errors bekommst. Import - + Markdown import Markdown-Import - + <b>Info:</b> A very simple parser that will go through a markdown document and create items for each titles.<br/>&nbsp; @@ -350,12 +351,12 @@ Nutze das, wenn du YAML-Errors bekommst. für jeden Titel eigene Einträge anlegt.<br/>&nbsp; - + Folder import Ordnerimport - + <p><b>Info:</b> Imports a whole directory structure. Folders are added as folders, and plaintext documents within (you chose which ones by extension) @@ -368,47 +369,47 @@ Nutze das, wenn du YAML-Errors bekommst. <p>Es werden nur Textdateien unterstützt (keine Bilder, Binärdateien oder andere).</p> - + Include only those extensions: Nur diese Dateinamenerweiterungen hinzufügen: - + Comma separated values Komma-getrennte Werte - + Sort items by name Elemente nach Namen sortieren - + Import folder then files Erst Ordner, danach Dateien importieren - + OPML Import OPML importieren - + File open failed. Öffnen der Datei fehlgeschlagen. - + This does not appear to be a valid OPML file. Dies scheint keine gültige OPML-Datei zu sein. - + Pandoc import Pandoc importieren - + <b>Info:</b> Manuskript can import from <b>markdown</b> or <b>OPML</b>. Pandoc will convert your document to either (see option below), and @@ -423,17 +424,17 @@ Nutze das, wenn du YAML-Errors bekommst. <br/>&nbsp; - + Import using: Importieren mit: - + Wrap lines: Zeilenumbruch: - + <p>Should pandoc create cosmetic / non-semantic line-breaks?</p><p> <b>auto</b>: wraps at 72 characters.<br> @@ -447,27 +448,27 @@ Nutze das, wenn du YAML-Errors bekommst. <b>preserve</b>: versucht, Umbrüche aus dem Originaldokument zu erhalten.</p> - + Mind Map Import Mind Map importieren - + This does not appear to be a valid Mind Map file. Dies scheint keine gültige Mind Map-Datei zu sein. - + Mind Map import Mind Map importieren - + Import tip as: Hinweis importieren als: - + Untitled Ohne Titel @@ -723,7 +724,7 @@ Nutze das, wenn du YAML-Errors bekommst. Quelle des Konflikts - + Outline Struktur @@ -768,157 +769,157 @@ Nutze das, wenn du YAML-Errors bekommst. &Hilfe - + &Tools &Werkzeuge - + &Edit &Bearbeiten - + &View &Ansicht - + &Mode &Modus - + &Cheat sheet &Spickzettel - + Sea&rch Su&che - + &Navigation &Navigation - + &Open &Öffnen - + Ctrl+O Strg+O - + &Save &Speichern - + Ctrl+S Strg+S - + Sa&ve as... Sp&eichern als ... - + Ctrl+Shift+S Strg+Shift+S - + &Quit &Schließen - + Ctrl+Q Strg+Q - + &Show help texts &Zeige Hilfetext - + Ctrl+Shift+B Strg+Shift+B - + &Spellcheck &Rechtschreibprüfung - + F9 F9 - + &Labels... &Labels... - + &Status... &Status ... - + Tree Baum - + &Simple &Einfach - + &Fiction &Fiktionaler Text - + Index cards Karteikarten - + S&ettings E&instellungen - + F8 F8 - + &Close project &Projekt schließen - + Co&mpile Ko&mpilieren - + F6 F6 - + &Frequency Analyzer &Häufigkeitsanalyse @@ -928,196 +929,186 @@ Nutze das, wenn du YAML-Errors bekommst. Buchinformationen - + &About &Über - + About Manuskript Über Manuskript - + Manuskript Manuskript - + Project {} saved. Projekt {} gespeichert. - + WARNING: Project {} not saved. WARNUNG: Projekt {} nicht gespeichert. - + Project {} loaded. Projekt {} geladen. - - Project {} loaded with some errors: - Projekt {} mit einigen Fehlern geladen: - - - - * {} wasn't found in project file. - * {} konnte in der Projektdatei nicht gefunden werden. - - - + Project {} loaded with some errors. Projekt {} wurde mit einigen Fehlern geladen. - + (~{} pages) (~{} Seiten) - + Words: {}{} Wörter: {}{} - + Book summary Buchzusammenfassung - + Project tree Projektbaum - + Metadata Metadaten - + Story line Handlung - + Enter information about your book, and yourself. Gib Informationen über dein Buch und dich ein. - + The basic situation, in the form of a 'What if...?' question. Ex: 'What if the most dangerous evil wizard wasn't able to kill a baby?' (Harry Potter) Die Ausgangssituation, in Form von 'Was wäre wenn ...?" Fragen. Beispiel: "Was wäre wenn der gefährlichste böse Zauberer nicht einmal ein Baby töten könnte?" (Harry Potter) - + Take time to think about a one sentence (~50 words) summary of your book. Then expand it to a paragraph, then to a page, then to a full summary. Nehmen Sie sich Zeit, sich einen Satz auszudenken (~15 Wörter), der Ihr Buch zusammenfasst. Dann erweitern Sie ihn zu einem Absatz, dann zu einer ganzen Seite und abschließend zu einer ausführlichen Zusammenfassung. - + Create your characters. Erschaffen Sie Ihre Charaktere. - + Develop plots. Entwickle Handlungsstränge. - + Build worlds. Create hierarchy of broad categories down to specific details. Erbaue Welten. Erstelle Hierachien breitgefächterter Kategorien, bis hin zu spezifischen Details. - + Create the outline of your masterpiece. Arbeiten Sie die Struktur Ihres Meisterwerks aus. - + Write. Schreibe. - + Debug info. Sometimes useful. Debuginformationen. Manchmal hilfreich. - + Dictionary Wörterbuch - + Nothing Keine - + POV Perspektive - + Label Label - + Progress Fortschritt - + Compile Kompiliere - + Icon color Iconfarbe - + Text color Textfarbe - + Background color Hintergrundfarbe - + Icon Icon - + Text Text - + Background Hintergrund - + Border Rahmen - + Corner Ecke @@ -1127,307 +1118,307 @@ Nutze das, wenn du YAML-Errors bekommst. Füge Handlungsschritt hinzu (Strg+Enter) - - &Import… + + &Import… &Importieren - + F7 F7 - + &Copy &Kopieren - + Ctrl+C Strg+C - + C&ut A&usschneiden - + Ctrl+X Strg+X - + &Paste &Einfügen - + Ctrl+V Strg+V - - &Split… + + &Split… &Aufteilen - + Ctrl+Shift+K Strg+Umschalt+K - + Sp&lit at cursor Am Mauszeiger aufteilen - + Ctrl+K Strg+K - + Ctrl+M Strg+M - + Ctrl+D Strg+D - + Del Löschen - + &Move Up &Nach oben - + Ctrl+Shift+Up Strg ➕ Umschalttaste ➕ Aufwärts - + M&ove Down N&ach unten - + Ctrl+Shift+Down Strg+Umschalt+Abwärts - + Dupl&icate Dupl&izieren - + &Delete &Löschen - + &Rename &Umbenennen - + F2 F2 - + Organi&ze Verwal&ten - + M&erge Zusamm&enführen - + &Format &Formatieren - + &Header Übersc&hrift - + &Level 1 (setext) &Level 1 (setext) - + Ctrl+Alt+1 Strg+Alt+1 - + Level &2 Level &2 - + Ctrl+Alt+2 Strg+Alt+2 - + Level &1 (atx) Level &1 (atx) - + Ctrl+1 Strg+1 - + L&evel 2 L&evel 2 - + Ctrl+2 Strg+2 - + Level &3 Level &3 - + Ctrl+3 Strg+3 - + Level &4 Level &4 - + Ctrl+4 Strg+4 - + Level &5 Level &5 - + Ctrl+5 Ctrl+5 - + Level &6 Level &6 - + Ctrl+6 Strg+6 - + &Bold &Fett - + Ctrl+B Strg+B - + &Italic &Kursiv - + Ctrl+I Strg+I - + &Strike Durchge&strichen - + &Verbatim &Wörtlich - + Su&perscript H&ochgestellt - + Ctrl++ Strg++ - + Subsc&ript &Tiefgestellt - + Ctrl+- Strg+- - + Co&mment block Ko&mmentarblock - + Ctrl+Shift+C Strg+Umschalt+C - + Clear &formats Formatierungen &löschen - + Ctrl+0 Strg+0 - + &Comment line(s) &Kommentarzeile(n) - + &Ordered list Ge&ordnete Liste - + &Unordered list &Ungeordnete Liste - + B&lockquote &Blockzitat @@ -1437,52 +1428,52 @@ Nutze das, wenn du YAML-Errors bekommst. Ausgewählte Plot-Schritt(e) entfernen - + The file {} does not exist. Has it been moved or deleted? Die Datei {} existiert nicht. Wurde sie verschoben oder gelöscht? - + Install {}{} to use spellcheck Installlieren Sie {}{}, für eine Rechtschreibprüfung - + {} has no installed dictionaries Für {} sind keine Wörterbücher installiert - + {}{} is not installed {}{} ist nicht installiert - + Save project? Projekt speichern? - + Save changes to project "{}" before closing? Änderungen an Projekt "{}" vor dem Schließen speichern? - + Your changes will be lost if you don't save them. Wenn Sie nicht speichern, gehen Ihre Änderungen verloren. - + PyQt / Qt versions 5.11 and 5.12 are known to cause a crash which might result in a loss of data. Es ist bekannt, dass PyQt / Qt in den Versionen 5.11 und 5.12 Abstürze verursacht, wodurch Daten verloren gehen könnten. - + PyQt {} and Qt {} are in use. Sie verwenden PyQt {} und Qt {}. - + Proceed with import at your own risk Wenn Sie fortfahren, könnte das einen Absturz und/oder Datenverlust zur Folge haben @@ -1492,34 +1483,104 @@ Nutze das, wenn du YAML-Errors bekommst. POV erlauben - + Search - + Suche - + Ctrl+F - + Strg+F F3 - F3 + F3 Shift+F3 - + Shift+F3 Situation - + Situation Status - Status + Status + + + + &Technical Support + &Technischer Support + + + + How to obtain technical support for Manuskript. + Wie man technischen Support für Manuskript erhält. + + + + F1 + F1 + + + + &Locate log file... + &Zeige Log-Datei... + + + + Locate log file + Zeige Log-Datei + + + + Locate the diagnostic log file used for this session. + Zeige die diagnostische Log-Datei für die aktuelle Session. + + + + Shift+F1 + Shift+F1 + + + + Sorry! + Ups! + + + + This session is not being logged. + Diese Session wird nicht protokolliert. + + + + A log file is a Work in Progress! + Eine Log-Datei ist noch in Bearbeitung! + + + + The log file "{}" will continue to be written to until Manuskript is closed. + Die Log-Datei "{}" wird weiterhin beschrieben, bis Manuskript vollständig beendet wurde. + + + + It will now be displayed in your file manager, but is of limited use until you close Manuskript. + Es wird nun die Datei im üblichen Datei-Manager gezeigt. Verwenden sie diese erst nach dem Schließen von Manuskript. + + + + Error! + Fehler! + + + + An error was encountered while trying to show the log file below in your file manager. + Es ist ein Fehler beim Prozess aufgetreten, die Log-Datei im Datei-Manager zu zeigen. @@ -1527,7 +1588,7 @@ Nutze das, wenn du YAML-Errors bekommst. No results found - + Keine Treffer gefunden @@ -2243,44 +2304,44 @@ Wörtern an SpellAction - + Spelling Suggestions Korrekturvorschläge - + &Add to dictionary Zum Wörterbuch &hinzufügen - + &Remove from custom dictionary Aus dem Wörterbuch &entfernen - + &Correction Suggestions &Korrekturvorschläge - + &Correction Suggestion &Korrekturvorschlag - + &New Character - + &Neuer Charakter - + &New Plot Item - + &Neues Plot-Element - + &New World Item - + &Neues Welt-Element @@ -2312,37 +2373,37 @@ Wörtern an abstractModel - + Title Titel - + POV POV - + Label Kategorie - + Status Status - + Compile Kompilieren - + Word count Wortanzahl - + Goal Ziel @@ -2383,12 +2444,12 @@ Wörtern an characterModel - + Name Name - + Value Wert @@ -2396,17 +2457,17 @@ Wörtern an characterTreeView - + Main Primär - + Secondary Sekundär - + Minor Nebensächlich @@ -2770,12 +2831,12 @@ Wörtern an - Replace ... with … + Replace ... with … ... ersetzen durch … - Replace --- with — + Replace --- with — --- ersetzen durch — @@ -2838,72 +2899,72 @@ Wörtern an fullScreenEditor - + Theme: Thema: - + {} words / {} {} Wörter / {} - + {} words {} Wörter - + Spellcheck Rechtschreibprüfung - + Navigation Navigation - + New Text Neuer Text - + Title Titel - + Title: Show Full Path Titel: Zeige kompletten Dateipfad - + Theme selector Thema auswählen - + Word count Wortanzahl - + Progress Fortschritt - + Progress: Auto Show/Hide Fortschritt: Automatisch Zeigen/Verstecken - + Clock Uhr - + Clock: Show Seconds Uhr: Zeige Sekunden @@ -2982,14 +3043,6 @@ Wörtern an Einstellungen - - lastAccessedDirectoryInfo - - - Last accessed directory "{}" loaded. - Zuletzt verwendeten Ordner "{}" geladen. - - lineEditView @@ -3104,32 +3157,32 @@ Wörtern an Alt+Nach oben - + Root Stamm - + {} words {} Wörter - + ({} chars) {} words / {} ({} Zeichen) {} Wörter / {} - + {} words / {} {} Wörter / {} - + {} chars {} Zeichen - + {} chars {} Zeichen @@ -3183,7 +3236,7 @@ Wörtern an myPanel - + Auto-hide Automatisches Ausblenden @@ -3337,12 +3390,12 @@ Wörtern an outlineItem - + {} words / {} ({}) {} Wörter / {} ({}) - + {} words {} Wörter @@ -3350,17 +3403,17 @@ Wörtern an pandocSettings - + General Allgemein - + Table of Content Inhaltsverzeichnis - + Custom settings for {} Benutzerdefinierte Einstellungen für {} @@ -3564,32 +3617,32 @@ Wörtern an plotModel - + Name Name - + Meta Meta - + New step Neuer Schritt - + Main Primär - + Secondary Sekundär - + Minor Nebensächlich @@ -3597,22 +3650,22 @@ Wörtern an plotTreeView - + Main Primär - + Secondary Sekundär - + Minor Nebensächlich - + **Plot:** {} **Handlungsstrang:** {} @@ -3676,52 +3729,52 @@ Wörtern an references - + Not a reference: {}. Keine Referenz: {}. - + Unknown reference: {}. Unbekannte Referenz: {}. - + Path: Pfad: - + Stats: Status: - + POV: POV: - + Status: Status: - + Label: Label: - + Short summary: Kurzinhaltsangabe: - + Long summary: Ausführliche Inhaltsangabe: - + Notes: Notizen: @@ -3741,72 +3794,72 @@ Wörtern an POV von: - + Go to {}. Gehe zu {}. - + Description Beschreibung - + Result Ergebnis - + Characters Charaktere - + Resolution steps Lösungsschritte - + Passion Leidenschaft - + Conflict Konflikt - + <b>Unknown reference:</b> {}. <b>Unbekannte Referenz:</b> {}. - + Folder: <b>{}</b> Ordner:<b>{}</b> - + Text: <b>{}</b> Text:<b>{}</b> - + Character: <b>{}</b> Charakter:<b>{}</b> - + Plot: <b>{}</b> Plot:<b>{}</b> - + World: <b>{name}</b>{path} Welt:<b>{name}</b>{path} - + Referenced in: Referenziert in: @@ -3849,12 +3902,12 @@ Wörtern an Optionen - + Restore Wiederherstellen - + Delete Löschen @@ -3914,12 +3967,12 @@ Wörtern an {} Sekunden zuvor - + Line {}: Zeile {}: - + Clear all Leeren @@ -3940,52 +3993,52 @@ Wörtern an settingsWindow - + New status Neuer Status - + New label Neue Beschriftung - + newtheme Neues Thema - + New theme Neues Thema - + (read-only) (schreibgeschützt) - + Open Image Bild öffnen - + Image files (*.jpg; *.jpeg; *.png) Bilddateien - + Error Fehler - + Unable to load selected file Laden der Datei fehlgeschlagen - + Unable to add selected image: {} Hinzufügen des Bildes fehgeschlagen: @@ -4087,22 +4140,22 @@ Wörtern an tabSplitter - + Open selected items in that view. Öffne markierte Elemente in dieser Ansicht. - + Split horizontally Ansicht horizontal teilen - + Close split Teilung beenden - + Split vertically Ansicht vertikal teilen @@ -4110,7 +4163,7 @@ Wörtern an textEditView - + Various Verschiedenes @@ -4209,27 +4262,27 @@ Wörtern an Leer - + Novel Roman - + Novella Novelle - + Short Story Kurzgeschichte - + Research paper Forschungsbericht - + Demo projects Demo Projekte @@ -4264,147 +4317,147 @@ Wörtern an Erstellen - + Open project Öffne Projekt - + Manuskript project (*.msk);;All files (*) Manuskript Projekt (*.msk);;Alle Dateien (*) - + Save project as... Speichern als ... - + Manuskript project (*.msk) Manuskript Projekt (*.msk) - + Manuskript Manuskript - + Create New Project Erzeuge neues Projekt - + Warning Warnung - + Overwrite existing project {} ? Existierendes Projekt {} überschreiben? - + Empty fiction Leere Geschichte - + Chapter Kapitel - + Scene Szene - + Trilogy Trilogie - + Book Buch - + Section Absatz - + Empty non-fiction Leeres Sachbuch - + words each. Wörter. - + of von - + Text Text - + Something Irgendwas - + <b>Total:</b> {} words (~ {} pages) <b>Gesamt:</b> {} Wörter (~ {} Seiten) - + Fiction Geschichte - + Non-fiction Sachtext - + Idea Idee - + Note Notiz - + Research Recherche - + TODO ToDo - + First draft Erster Entwurf - + Second draft Zweiter Entwurf - + Final Endgültig diff --git a/i18n/manuskript_en_GB.ts b/i18n/manuskript_en_GB.ts index b2a7eb1..477584b 100644 --- a/i18n/manuskript_en_GB.ts +++ b/i18n/manuskript_en_GB.ts @@ -3,88 +3,88 @@ Export - + Standalone document (not just a fragment) - + Include a table of contents. - + Number of sections level to include in TOC: - + Typographically correct output - + Normalize the document (cleaner) Normalise the document (cleaner) - + Specify the base level for headers: - + Disable YAML metadata block. Use that if you get YAML related error. - + Use reference-style links instead of inline links - + Use ATX-style headers - + Self-contained HTML files, with no dependencies - + Use <q> tags for quotes in HTML - + LaTeX engine used to produce the PDF. - + Convert to ePUB3 - + Paper size: - + Font size: - + Class: - + Line spacing: @@ -155,7 +155,7 @@ Use that if you get YAML related error. - + <p>A universal document converter. Can be used to convert Markdown to a wide range of other formats.</p> <p>Website: <a href="http://www.pandoc.org">http://pandoc.org/</a></p> @@ -163,7 +163,7 @@ Use that if you get YAML related error. - + Error @@ -193,12 +193,12 @@ Use that if you get YAML related error. - + Plain text - + Simplest export to plain text. Allows you to use your own markup not understood by Manuskript, for example <a href='www.fountain.io'>Fountain</a>. @@ -209,13 +209,13 @@ Use that if you get YAML related error. - + Could not process regular expression: {} - + Choose output file… @@ -324,24 +324,24 @@ Use that if you get YAML related error. Import - + Markdown import - + <b>Info:</b> A very simple parser that will go through a markdown document and create items for each titles.<br/>&nbsp; - + Folder import - + <p><b>Info:</b> Imports a whole directory structure. Folders are added as folders, and plaintext documents within (you chose which ones by extension) @@ -350,47 +350,47 @@ Use that if you get YAML related error. - + Include only those extensions: - + Comma separated values - + Sort items by name - + Import folder then files - + OPML Import - + File open failed. - + This does not appear to be a valid OPML file. - + Pandoc import - + <b>Info:</b> Manuskript can import from <b>markdown</b> or <b>OPML</b>. Pandoc will convert your document to either (see option below), and @@ -400,17 +400,17 @@ Use that if you get YAML related error. - + Import using: - + Wrap lines: - + <p>Should pandoc create cosmetic / non-semantic line-breaks?</p><p> <b>auto</b>: wraps at 72 characters.<br> @@ -420,27 +420,27 @@ Use that if you get YAML related error. - + Mind Map Import - + This does not appear to be a valid Mind Map file. - + Mind Map import - + Import tip as: - + Untitled @@ -711,7 +711,7 @@ Use that if you get YAML related error. - + Outline @@ -756,704 +756,694 @@ Use that if you get YAML related error. - + &Tools - + &Edit - + &Format - + &Header - + &View - + &Mode - + Organi&ze Organi&se - + &Cheat sheet - + Sea&rch - + &Navigation - + &Open - + Ctrl+O - + &Save - + Ctrl+S - + Sa&ve as... - + Ctrl+Shift+S - + &Quit - + Ctrl+Q - + &Show help texts - + Ctrl+Shift+B - + &Spellcheck - + F9 - + &Labels... - + &Status... - + Tree - + &Simple - + &Fiction - + Index cards - + S&ettings - + F8 - + &Close project - + Co&mpile - + F6 - + &Frequency Analyzer &Frequency Analyser - + &About - + About Manuskript - + &Import… - + F7 - + &Copy - + Ctrl+C - + C&ut - + Ctrl+X - + &Paste - + Ctrl+V - + &Split… - + Ctrl+Shift+K - + Sp&lit at cursor - + Ctrl+K - + M&erge - + Ctrl+M - + Dupl&icate - + &Delete - + Del - + &Move Up - + Ctrl+Shift+Up - + M&ove Down - + Ctrl+Shift+Down - + &Rename - + F2 - + &Level 1 (setext) - + Ctrl+Alt+1 - + Level &2 - + Ctrl+Alt+2 - + Level &1 (atx) - + Ctrl+1 - + L&evel 2 - + Ctrl+2 - + Level &3 - + Ctrl+3 - + Level &4 - + Ctrl+4 - + Level &5 - + Ctrl+5 - + Level &6 - + Ctrl+6 - + &Bold - + Ctrl+B - + &Italic - + Ctrl+I - + &Strike - + &Verbatim - + Su&perscript - + Ctrl++ - + Subsc&ript - + Ctrl+- - + Co&mment block - + Ctrl+Shift+C - + Clear &formats - + Ctrl+0 - + &Comment line(s) - + Ctrl+D - + &Ordered list - + &Unordered list - + B&lockquote - + The file {} does not exist. Has it been moved or deleted? - + Manuskript - + Project {} saved. - + WARNING: Project {} not saved. - + Project {} loaded. - - Project {} loaded with some errors: - - - - - * {} wasn't found in project file. - - - - + Project {} loaded with some errors. - + (~{} pages) - + Words: {}{} - + Book summary - + Project tree - + Metadata - + Story line - + Enter information about your book, and yourself. - + The basic situation, in the form of a 'What if...?' question. Ex: 'What if the most dangerous evil wizard wasn't able to kill a baby?' (Harry Potter) - + Take time to think about a one sentence (~50 words) summary of your book. Then expand it to a paragraph, then to a page, then to a full summary. - + Create your characters. - + Develop plots. - + Build worlds. Create hierarchy of broad categories down to specific details. - + Create the outline of your masterpiece. - + Write. - + Debug info. Sometimes useful. - + Dictionary - + Install {}{} to use spellcheck - + {} has no installed dictionaries - + {}{} is not installed - + Nothing - + POV - + Label - + Progress - + Compile - + Icon color Icon colour - + Text color Text colour - + Background color Background colour - + Icon - + Text - + Background - + Border - + Corner - + Save project? - + Save changes to project "{}" before closing? - + Your changes will be lost if you don't save them. - + PyQt / Qt versions 5.11 and 5.12 are known to cause a crash which might result in a loss of data. - + PyQt {} and Qt {} are in use. - + Proceed with import at your own risk @@ -1463,12 +1453,12 @@ Use that if you get YAML related error. - + Search - + Ctrl+F @@ -1492,6 +1482,76 @@ Use that if you get YAML related error. Status + + + &Technical Support + + + + + How to obtain technical support for Manuskript. + + + + + F1 + + + + + &Locate log file... + + + + + Locate log file + + + + + Locate the diagnostic log file used for this session. + + + + + Shift+F1 + + + + + Sorry! + + + + + This session is not being logged. + + + + + A log file is a Work in Progress! + + + + + The log file "{}" will continue to be written to until Manuskript is closed. + + + + + It will now be displayed in your file manager, but is of limited use until you close Manuskript. + + + + + Error! + + + + + An error was encountered while trying to show the log file below in your file manager. + + Search @@ -2213,42 +2273,42 @@ Use that if you get YAML related error. SpellAction - + Spelling Suggestions - + &Add to dictionary - + &Remove from custom dictionary - + &New Character - + &New Plot Item - + &New World Item - + &Correction Suggestions - + &Correction Suggestion @@ -2282,37 +2342,37 @@ Use that if you get YAML related error. abstractModel - + Title - + POV - + Label - + Status - + Compile - + Word count - + Goal @@ -2353,12 +2413,12 @@ Use that if you get YAML related error. characterModel - + Name - + Value @@ -2366,17 +2426,17 @@ Use that if you get YAML related error. characterTreeView - + Main - + Secondary - + Minor @@ -2808,72 +2868,72 @@ Use that if you get YAML related error. fullScreenEditor - + Theme: - + Spellcheck - + Navigation - + New Text - + Title - + Title: Show Full Path - + Theme selector - + Word count - + Progress - + Progress: Auto Show/Hide - + Clock - + Clock: Show Seconds - + {} words / {} - + {} words @@ -2952,14 +3012,6 @@ Use that if you get YAML related error. - - lastAccessedDirectoryInfo - - - Last accessed directory "{}" loaded. - - - lineEditView @@ -3074,32 +3126,32 @@ Use that if you get YAML related error. - + Root - + {} words - + ({} chars) {} words / {} - + {} words / {} - + {} chars - + {} chars @@ -3153,7 +3205,7 @@ Use that if you get YAML related error. myPanel - + Auto-hide @@ -3307,12 +3359,12 @@ Use that if you get YAML related error. outlineItem - + {} words / {} ({}) - + {} words @@ -3320,17 +3372,17 @@ Use that if you get YAML related error. pandocSettings - + General - + Table of Content - + Custom settings for {} @@ -3539,32 +3591,32 @@ Use that if you get YAML related error. plotModel - + Name - + Meta - + New step - + Main - + Secondary - + Minor @@ -3572,22 +3624,22 @@ Use that if you get YAML related error. plotTreeView - + Main - + Secondary - + Minor - + **Plot:** {} @@ -3651,52 +3703,52 @@ Use that if you get YAML related error. references - + Not a reference: {}. - + Unknown reference: {}. - + Path: - + Stats: - + POV: - + Status: - + Label: - + Short summary: - + Long summary: - + Notes: @@ -3716,7 +3768,7 @@ Use that if you get YAML related error. - + Go to {}. @@ -3731,7 +3783,7 @@ Use that if you get YAML related error. - + Conflict @@ -3751,62 +3803,62 @@ Use that if you get YAML related error. - + Description - + Result - + Characters - + Resolution steps - + Passion - + <b>Unknown reference:</b> {}. - + Folder: <b>{}</b> - + Text: <b>{}</b> - + Character: <b>{}</b> - + Plot: <b>{}</b> - + World: <b>{name}</b>{path} - + Referenced in: @@ -3824,12 +3876,12 @@ Use that if you get YAML related error. - + Restore - + Delete @@ -3889,12 +3941,12 @@ Use that if you get YAML related error. - + Line {}: - + Clear all @@ -3915,53 +3967,53 @@ Use that if you get YAML related error. settingsWindow - + Open Image - + Image files (*.jpg; *.jpeg; *.png) - + Error - + Unable to load selected file - + Unable to add selected image: {} - + New status - + New label - + newtheme - + New theme - + (read-only) @@ -4047,22 +4099,22 @@ Use that if you get YAML related error. tabSplitter - + Open selected items in that view. - + Split horizontally - + Close split - + Split vertically @@ -4070,7 +4122,7 @@ Use that if you get YAML related error. textEditView - + Various @@ -4169,27 +4221,27 @@ Use that if you get YAML related error. - + Novel - + Novella - + Short Story - + Research paper - + Demo projects @@ -4224,147 +4276,147 @@ Use that if you get YAML related error. - + Open project - + Manuskript project (*.msk);;All files (*) - + Save project as... - + Manuskript project (*.msk) - + Manuskript - + Create New Project - + Warning - + Overwrite existing project {} ? - + Empty fiction - + Chapter - + Scene - + Trilogy - + Book - + Section - + Empty non-fiction - + words each. - + of - + Text - + Something - + <b>Total:</b> {} words (~ {} pages) - + Fiction - + Non-fiction - + Idea - + Note - + Research - + TODO - + First draft - + Second draft - + Final diff --git a/i18n/manuskript_es.ts b/i18n/manuskript_es.ts index fbc2697..7fa2280 100644 --- a/i18n/manuskript_es.ts +++ b/i18n/manuskript_es.ts @@ -23,7 +23,7 @@ Un formato poco conocido utilizado modestamente. Ya sabes, páginas web, por ejemplo. - + <p>A universal document converter. Can be used to convert Markdown to a wide range of other formats.</p> <p>Website: <a href="http://www.pandoc.org">http://pandoc.org/</a></p> @@ -46,12 +46,12 @@ Previsualización con Markdown Highlighter. - + Plain text Texto plano - + Simplest export to plain text. Allows you to use your own markup not understood by Manuskript, for example <a href='www.fountain.io'>Fountain</a>. La exportación más simple, a texto plano. Permite utilizar un formato de marcado propio, @@ -73,7 +73,7 @@ Salida HTML - + Error Error @@ -117,77 +117,77 @@ para crear documentos de gran calidad. - + Standalone document (not just a fragment) Documento autónomo (no solo un fragmento) - + Include a table of contents. Incluye una tabla de contenido. - + Number of sections level to include in TOC: Número de niveles de sección a incluir en la tabla de contenido: - + Typographically correct output Salida tipográficamente correcta - + Normalize the document (cleaner) Normalizar el documento (más claro) - + Specify the base level for headers: Especificar el nivel de inicio de las cabeceras: - + Use reference-style links instead of inline links Usar referencias para los enlaces en lugar de integrados en el texto - + Use ATX-style headers Utiliza cabeceras tipo ATX - + Self-contained HTML files, with no dependencies Ficheros HTML auto-contenidos, sin dependencias externas - + Use <q> tags for quotes in HTML Utiliza etiquetas <q> para las citas en HTML - + LaTeX engine used to produce the PDF. Motor LaTeX utilizado para producir el PDF. - + Paper size: Tamaño del papel: - + Font size: Tamaño de fuente: - + Class: Clase: - + Line spacing: Espaciado de línea: @@ -208,25 +208,25 @@ o controlados a través de un outliner. - + Disable YAML metadata block. Use that if you get YAML related error. Deshabilita el bloque de metadatos YAML. Úselo si recibe errores de YAML. - + Convert to ePUB3 Convierte a ePUB3 - + Could not process regular expression: {} - + Choose output file… @@ -335,12 +335,12 @@ Use that if you get YAML related error. Import - + Markdown import Importar markdown - + <b>Info:</b> A very simple parser that will go through a markdown document and create items for each titles.<br/>&nbsp; @@ -349,12 +349,12 @@ Use that if you get YAML related error. elementos para cada título.<br/>&nbsp; - + Folder import Importar carpeta - + <p><b>Info:</b> Imports a whole directory structure. Folders are added as folders, and plaintext documents within (you chose which ones by extension) @@ -367,47 +367,47 @@ Use that if you get YAML related error. <p>Sólo se soportan ficheros de texto (no imágenes, binarios ni otros).</p> - + Include only those extensions: Incluir sólo estas extensiones: - + Comma separated values Valores separados por comas - + Sort items by name Ordenar elementos por nombre - + Import folder then files Importar carpeta con sus ficheros - + OPML Import Importar OPML - + File open failed. Falló la apertura del fichero. - + This does not appear to be a valid OPML file. No parece ser un fichero OPML válido. - + Pandoc import Importar Pandoc - + <b>Info:</b> Manuskript can import from <b>markdown</b> or <b>OPML</b>. Pandoc will convert your document to either (see option below), and @@ -422,17 +422,17 @@ Use that if you get YAML related error. <br/>&nbsp; - + Import using: Importar usando: - + Wrap lines: Ajustar lineas: - + <p>Should pandoc create cosmetic / non-semantic line-breaks?</p><p> <b>auto</b>: wraps at 72 characters.<br> @@ -447,27 +447,27 @@ Use that if you get YAML related error. documento original.</p> - + Mind Map Import Importar Mind Map - + This does not appear to be a valid Mind Map file. No parece ser un fichero Mind Map válido. - + Mind Map import Importar Mind Map - + Import tip as: Importar sugerencias como: - + Untitled Sin título @@ -723,7 +723,7 @@ Use that if you get YAML related error. Causa de conflicto - + Outline Esquema @@ -763,7 +763,7 @@ Use that if you get YAML related error. &Recientes - + &Mode &Modo @@ -773,321 +773,311 @@ Use that if you get YAML related error. A&yuda - + &Tools &Herramientas - + &View &Ver - + &Cheat sheet &Guía rápida - + Sea&rch &Buscar - + &Navigation &Navegación - + &Open &Abrir - + Ctrl+O Ctrl+O - + &Save &Guardar - + Ctrl+S Ctrl+S - + Sa&ve as... G&uardar Como... - + Ctrl+Shift+S Ctrl+Shift+S - + &Quit &Cerrar - + Ctrl+Q Ctrl+Q - + &Show help texts &Ver textos de ayuda - + Ctrl+Shift+B Ctrl+Shift+B - + &Spellcheck &Corrector Ortográfico - + F9 F9 - + &Labels... &Etiquetas... - + &Status... E&stado... - + Tree Árbol - + &Simple &Sencillo - + Index cards Fichas - + S&ettings &Preferencias - + F8 F8 - + &Close project &Cerrar proyecto - + Co&mpile C&ompilar - + F6 F6 - + &Frequency Analyzer A&nalizador de frecuencias - + &Fiction &Ficción - + Project {} saved. Proyecto {} guardado. - + Project {} loaded. Proyecto {} cargado. - - Project {} loaded with some errors: - Proyecto {} cargado con algunos errores: - - - - * {} wasn't found in project file. - * {} no se encontró en el archivo del proyecto. - - - + Project {} loaded with some errors. Proyecto {} cargado con algunos errores. - + (~{} pages) (~{} páginas) - + Words: {}{} Palabras: {}{} - + Book summary Resumen del libro - + Project tree Árbol del proyecto - + Metadata Metadata - + Story line Historia - + Enter information about your book, and yourself. Introduzca información acerca de tu libro y sobre ti mismo. - + The basic situation, in the form of a 'What if...?' question. Ex: 'What if the most dangerous evil wizard wasn't able to kill a baby?' (Harry Potter) La situación básica en la forma de una pregunta tipo "¿Que pasaría sí...?'. Ej:"¿Que pasaría si el más peligroso hechicero malvado no pudiera ser capaz de matar un bebe?" (Harry Potter) - + Take time to think about a one sentence (~50 words) summary of your book. Then expand it to a paragraph, then to a page, then to a full summary. Tómate tu tiempo para pensar en resumen de una linea (apróximadamente 50 palabras) de tu libro. Después expándelo hasta un párrafo, después hasta una página, y por último hasta un resumen completo. - + Create your characters. Crea tus personajes. - + Develop plots. Desarrolla las tramas. - + Create the outline of your masterpiece. Crea el esquema de tu obra maestra. - + Write. Escribe. - + Debug info. Sometimes useful. Depura la información. A veces es útil. - + Dictionary Diccionario - + Nothing Ninguno - + POV - + Label Etiqueta - + Progress Progreso - + Compile Compilar - + Icon color Color del icono - + Text color Color del texto - + Background color Color del Fondo - + Icon Icono - + Text Texto - + Background Fondo - + Border Borde - + Corner Esquina - + &Edit &Editar @@ -1097,27 +1087,27 @@ Use that if you get YAML related error. Informaciones del libro - + &About &Acerca de - + About Manuskript Acerca de Manuskript - + Manuskript Manuskript - + WARNING: Project {} not saved. ADVERTENCIA: Proyecto {} no guardado. - + Build worlds. Create hierarchy of broad categories down to specific details. Construir mundos. Crear una jerarquía desde categorías amplias hasta detalles especifícos. @@ -1127,307 +1117,307 @@ Use that if you get YAML related error. Añadir un paso a la trama (CTRL+Intro) - + &Import… &Importar… - + F7 F7 - + &Copy &Copiar - + Ctrl+C Ctrl+C - + C&ut C&ortar - + Ctrl+X Ctrl+X - + &Paste &Pegar - + Ctrl+V Ctrl+V - + &Split… Dividir… - + Ctrl+Shift+K Ctrl+Mayús+K - + Sp&lit at cursor Di&vidir en el cursor - + Ctrl+K Ctrl+K - + Ctrl+M Ctrl+M - + Ctrl+D Ctrl+D - + Del Supr - + &Move Up Subir - + Ctrl+Shift+Up Ctrl+Mayús+Arriba - + M&ove Down Bajar - + Ctrl+Shift+Down Ctrl+Mayús+Abajo - + Dupl&icate Dupl&icar - + &Delete Eliminar - + &Rename &Renombrar - + F2 F2 - + Organi&ze Organi&zar - + M&erge Combinar - + &Format &Formato - + &Header &Encabezado - + &Level 1 (setext) &Nivel 1 (setext) - + Ctrl+Alt+1 Ctrl+Alt+1 - + Level &2 Nivel &2 - + Ctrl+Alt+2 Ctrl+Alt+2 - + Level &1 (atx) Nivel &1 (atx) - + Ctrl+1 Ctrl+1 - + L&evel 2 N&ivel 2 - + Ctrl+2 Ctrl+2 - + Level &3 Nivel &3 - + Ctrl+3 Ctrl+3 - + Level &4 Nivel &4 - + Ctrl+4 Ctrl+4 - + Level &5 Nivel &5 - + Ctrl+5 Ctrl+5 - + Level &6 Nivel &6 - + Ctrl+6 Ctrl+6 - + &Bold &Negrita - + Ctrl+B Ctrl+B - + &Italic &Cursiva - + Ctrl+I Ctrl+I - + &Strike &Tachado - + &Verbatim &Literal - + Su&perscript Su&períndice - + Ctrl++ Ctrl++ - + Subsc&ript Subín&dice - + Ctrl+- Ctrl+- - + Co&mment block Co&mentario en bloque - + Ctrl+Shift+C Ctrl+Shift+C - + Clear &formats Eliminar &formatos - + Ctrl+0 Ctrl+0 - + &Comment line(s) &Línea de comentario(s) - + &Ordered list &Lista ordenada - + &Unordered list &Lista no ordenada - + B&lockquote C&ita en bloque @@ -1437,52 +1427,52 @@ Use that if you get YAML related error. Eliminar el paso(s) seleccionado de la trama - + The file {} does not exist. Has it been moved or deleted? El archivo {} no existe. ¿Ha sido movido o eliminado? - + Install {}{} to use spellcheck - + {} has no installed dictionaries - + {}{} is not installed - + Save project? - + Save changes to project "{}" before closing? - + Your changes will be lost if you don't save them. - + PyQt / Qt versions 5.11 and 5.12 are known to cause a crash which might result in a loss of data. - + PyQt {} and Qt {} are in use. - + Proceed with import at your own risk @@ -1492,12 +1482,12 @@ Use that if you get YAML related error. - + Search - + Ctrl+F @@ -1521,6 +1511,76 @@ Use that if you get YAML related error. Status Estado + + + &Technical Support + + + + + How to obtain technical support for Manuskript. + + + + + F1 + F1 + + + + &Locate log file... + + + + + Locate log file + + + + + Locate the diagnostic log file used for this session. + + + + + Shift+F1 + + + + + Sorry! + + + + + This session is not being logged. + + + + + A log file is a Work in Progress! + + + + + The log file "{}" will continue to be written to until Manuskript is closed. + + + + + It will now be displayed in your file manager, but is of limited use until you close Manuskript. + + + + + Error! + + + + + An error was encountered while trying to show the log file below in your file manager. + + Search @@ -2242,42 +2302,42 @@ Use that if you get YAML related error. SpellAction - + Spelling Suggestions Sugerencias de Ortografía - + &Add to dictionary &Añadir al diccionario - + &Remove from custom dictionary &Eliminar del diccionario personal - + &New Character - + &New Plot Item - + &New World Item - + &Correction Suggestions - + &Correction Suggestion @@ -2311,37 +2371,37 @@ Use that if you get YAML related error. abstractModel - + Title Título - + POV PDV - + Label Etiqueta - + Status Estado - + Compile Compilar - + Word count Número de palabras - + Goal Objetivo @@ -2382,12 +2442,12 @@ Use that if you get YAML related error. characterModel - + Name Nombre - + Value Valor @@ -2395,17 +2455,17 @@ Use that if you get YAML related error. characterTreeView - + Main Principal - + Secondary Secundario - + Minor Menor @@ -2837,72 +2897,72 @@ Use that if you get YAML related error. fullScreenEditor - + Theme: Tema: - + {} words / {} {} palabras / {} - + {} words {} palabras - + Spellcheck - + Navigation - + New Text - + Title Título - + Title: Show Full Path - + Theme selector - + Word count Número de palabras - + Progress Progreso - + Progress: Auto Show/Hide - + Clock - + Clock: Show Seconds @@ -2981,14 +3041,6 @@ Use that if you get YAML related error. Preferencias - - lastAccessedDirectoryInfo - - - Last accessed directory "{}" loaded. - - - lineEditView @@ -3093,7 +3145,7 @@ Use that if you get YAML related error. - + Root Raíz @@ -3108,27 +3160,27 @@ Use that if you get YAML related error. Alt+Arriba - + {} words {} palabras - + ({} chars) {} words / {} - + {} words / {} - + {} chars - + {} chars @@ -3182,7 +3234,7 @@ Use that if you get YAML related error. myPanel - + Auto-hide Auto ocultar @@ -3336,12 +3388,12 @@ Use that if you get YAML related error. outlineItem - + {} words / {} ({}) {} palabras / {} ({}) - + {} words {} palabras @@ -3349,17 +3401,17 @@ Use that if you get YAML related error. pandocSettings - + General General - + Table of Content Tabla de Contenido - + Custom settings for {} Preferencias personalizadas para {} @@ -3563,32 +3615,32 @@ Use that if you get YAML related error. plotModel - + Name Nombre - + Meta Meta - + New step Siguiente paso - + Main Principal - + Secondary Secundario - + Minor Menor @@ -3596,22 +3648,22 @@ Use that if you get YAML related error. plotTreeView - + Main Principal - + Secondary Secundario - + Minor Menor - + **Plot:** {} **Trama:** {} @@ -3675,52 +3727,52 @@ Use that if you get YAML related error. references - + Not a reference: {}. No es una referencia: {}. - + Unknown reference: {}. Referencia desconocida: {}. - + Path: Ruta: - + Stats: Características: - + POV: - + Status: Estado: - + Label: Etiqueta: - + Short summary: Resumen corto: - + Long summary: Resumen largo: - + Notes: Notas: @@ -3740,72 +3792,72 @@ Use that if you get YAML related error. PDV de: - + Go to {}. Ir a {}. - + Description Descripción - + Result Resultado - + Characters Personajes - + Resolution steps Pasos para la resolución - + Passion Pasión - + Conflict Conflicto - + Folder: <b>{}</b> Carpeta: <b>{}</b> - + Text: <b>{}</b> Texto: <b>{}</b> - + Character: <b>{}</b> Personaje: <b>{}</b> - + Plot: <b>{}</b> Trama: <b>{}</b> - + World: <b>{name}</b>{path} Mundo: <b>{name}</b>{path} - + <b>Unknown reference:</b> {}. <b>Referencia desconocida:</b> {}. - + Referenced in: Referenciado en: @@ -3848,12 +3900,12 @@ Use that if you get YAML related error. Opciones - + Restore Restaurar - + Delete Borrar @@ -3913,12 +3965,12 @@ Use that if you get YAML related error. Hace {} segundos - + Line {}: Linea {}: - + Clear all Limpiar todo @@ -3939,52 +3991,52 @@ Use that if you get YAML related error. settingsWindow - + New status Nuevo estado - + New label Nueva etiqueta - + newtheme nuevotema - + New theme Nuevo Tema - + (read-only) (sólo lectura) - + Open Image - + Image files (*.jpg; *.jpeg; *.png) - + Error Error - + Unable to load selected file - + Unable to add selected image: {} @@ -4085,22 +4137,22 @@ Use that if you get YAML related error. tabSplitter - + Open selected items in that view. Abre los elementos seleccionados en esta vista. - + Split horizontally Dividir horizontalmente - + Close split Cerrar división - + Split vertically Dividir verticalmente @@ -4108,7 +4160,7 @@ Use that if you get YAML related error. textEditView - + Various Varios @@ -4207,27 +4259,27 @@ Use that if you get YAML related error. Vacía - + Novel Novela - + Novella Novela Corta - + Short Story Cuento - + Research paper Árticulo de investigación - + Demo projects Proyectos de ejemplo @@ -4262,147 +4314,147 @@ Use that if you get YAML related error. Crear - + Open project Abrir proyecto - + Manuskript project (*.msk);;All files (*) Proyecto de Manuskript (*.msk);;Todos los ficheros (*) - + Save project as... Guardar proyecto como... - + Manuskript project (*.msk) Proyecto de Manuskript (*.msk) - + Create New Project Crear un Proyecto Nuevo - + Empty fiction Ficción vacía - + Chapter Capítulo - + Scene Escena - + Trilogy Trilogía - + Book Libro - + Section Sección - + Empty non-fiction No-Ficción vacía - + words each. palabras cada una. - + of de - + Text Texto - + Something Algo - + <b>Total:</b> {} words (~ {} pages) <b>Total:</b> {} palabras (~ {} páginas) - + Fiction Ficción - + Non-fiction No-ficción - + Idea - + Note Nota - + Research Investigación - + TODO POR HACER - + First draft Primer borrador - + Second draft Segundo borrador - + Final Final - + Manuskript Manuskript - + Warning Advertencia - + Overwrite existing project {} ? ¿Sobreescribir el proyecto existe {}? diff --git a/i18n/manuskript_fa.ts b/i18n/manuskript_fa.ts index 0c6fdcd..407bc98 100644 --- a/i18n/manuskript_fa.ts +++ b/i18n/manuskript_fa.ts @@ -38,7 +38,7 @@ - + Plain text @@ -53,82 +53,82 @@ - + Error - + Standalone document (not just a fragment) - + Include a table of contents. - + Number of sections level to include in TOC: - + Typographically correct output - + Normalize the document (cleaner) - + Specify the base level for headers: - + Use reference-style links instead of inline links - + Use ATX-style headers - + Self-contained HTML files, with no dependencies - + Use <q> tags for quotes in HTML - + LaTeX engine used to produce the PDF. - + Paper size: - + Font size: - + Class: - + Line spacing: @@ -159,13 +159,13 @@ - + Simplest export to plain text. Allows you to use your own markup not understood by Manuskript, for example <a href='www.fountain.io'>Fountain</a>. - + <p>A universal document converter. Can be used to convert Markdown to a wide range of other formats.</p> <p>Website: <a href="http://www.pandoc.org">http://pandoc.org/</a></p> @@ -198,24 +198,24 @@ - + Disable YAML metadata block. Use that if you get YAML related error. - + Convert to ePUB3 - + Could not process regular expression: {} - + Choose output file… @@ -324,24 +324,24 @@ Use that if you get YAML related error. Import - + Markdown import - + <b>Info:</b> A very simple parser that will go through a markdown document and create items for each titles.<br/>&nbsp; - + Folder import - + <p><b>Info:</b> Imports a whole directory structure. Folders are added as folders, and plaintext documents within (you chose which ones by extension) @@ -350,47 +350,47 @@ Use that if you get YAML related error. - + Include only those extensions: - + Comma separated values - + Sort items by name - + Import folder then files - + OPML Import - + File open failed. - + This does not appear to be a valid OPML file. - + Pandoc import - + <b>Info:</b> Manuskript can import from <b>markdown</b> or <b>OPML</b>. Pandoc will convert your document to either (see option below), and @@ -400,17 +400,17 @@ Use that if you get YAML related error. - + Import using: - + Wrap lines: - + <p>Should pandoc create cosmetic / non-semantic line-breaks?</p><p> <b>auto</b>: wraps at 72 characters.<br> @@ -420,27 +420,27 @@ Use that if you get YAML related error. - + Mind Map Import - + This does not appear to be a valid Mind Map file. - + Mind Map import - + Import tip as: - + Untitled @@ -696,7 +696,7 @@ Use that if you get YAML related error. - + Outline @@ -741,157 +741,157 @@ Use that if you get YAML related error. - + &Tools - + &Edit - + &View - + &Mode - + &Cheat sheet - + Sea&rch - + &Navigation - + &Open - + Ctrl+O - + &Save - + Ctrl+S - + Sa&ve as... - + Ctrl+Shift+S - + &Quit - + Ctrl+Q - + &Show help texts - + Ctrl+Shift+B - + &Spellcheck - + F9 - + &Labels... - + &Status... - + Tree - + &Simple - + &Fiction - + Index cards - + S&ettings - + F8 - + &Close project - + Co&mpile - + F6 - + &Frequency Analyzer @@ -901,194 +901,184 @@ Use that if you get YAML related error. - + &About - + About Manuskript - + Manuskript - + Project {} saved. - + WARNING: Project {} not saved. - + Project {} loaded. - - Project {} loaded with some errors: - - - - - * {} wasn't found in project file. - - - - + Project {} loaded with some errors. - + (~{} pages) - + Words: {}{} - + Book summary - + Project tree - + Metadata - + Story line - + Enter information about your book, and yourself. - + The basic situation, in the form of a 'What if...?' question. Ex: 'What if the most dangerous evil wizard wasn't able to kill a baby?' (Harry Potter) - + Take time to think about a one sentence (~50 words) summary of your book. Then expand it to a paragraph, then to a page, then to a full summary. - + Create your characters. - + Develop plots. - + Build worlds. Create hierarchy of broad categories down to specific details. - + Create the outline of your masterpiece. - + Write. - + Debug info. Sometimes useful. - + Dictionary - + Nothing - + POV - + Label - + Progress - + Compile - + Icon color - + Text color - + Background color - + Icon - + Text - + Background - + Border - + Corner @@ -1098,307 +1088,307 @@ Use that if you get YAML related error. - + &Import… - + F7 - + &Copy - + Ctrl+C - + C&ut - + Ctrl+X - + &Paste - + Ctrl+V - + &Split… - + Ctrl+Shift+K - + Sp&lit at cursor - + Ctrl+K - + Ctrl+M - + Ctrl+D - + Del - + &Move Up - + Ctrl+Shift+Up - + M&ove Down - + Ctrl+Shift+Down - + Dupl&icate - + &Delete - + &Rename - + F2 - + Organi&ze - + M&erge - + &Format - + &Header - + &Level 1 (setext) - + Ctrl+Alt+1 - + Level &2 - + Ctrl+Alt+2 - + Level &1 (atx) - + Ctrl+1 - + L&evel 2 - + Ctrl+2 - + Level &3 - + Ctrl+3 - + Level &4 - + Ctrl+4 - + Level &5 - + Ctrl+5 - + Level &6 - + Ctrl+6 - + &Bold - + Ctrl+B - + &Italic - + Ctrl+I - + &Strike - + &Verbatim - + Su&perscript - + Ctrl++ - + Subsc&ript - + Ctrl+- - + Co&mment block - + Ctrl+Shift+C - + Clear &formats - + Ctrl+0 - + &Comment line(s) - + &Ordered list - + &Unordered list - + B&lockquote @@ -1408,52 +1398,52 @@ Use that if you get YAML related error. - + The file {} does not exist. Has it been moved or deleted? - + Install {}{} to use spellcheck - + {} has no installed dictionaries - + {}{} is not installed - + Save project? - + Save changes to project "{}" before closing? - + Your changes will be lost if you don't save them. - + PyQt / Qt versions 5.11 and 5.12 are known to cause a crash which might result in a loss of data. - + PyQt {} and Qt {} are in use. - + Proceed with import at your own risk @@ -1463,12 +1453,12 @@ Use that if you get YAML related error. - + Search - + Ctrl+F @@ -1492,6 +1482,76 @@ Use that if you get YAML related error. Status + + + &Technical Support + + + + + How to obtain technical support for Manuskript. + + + + + F1 + + + + + &Locate log file... + + + + + Locate log file + + + + + Locate the diagnostic log file used for this session. + + + + + Shift+F1 + + + + + Sorry! + + + + + This session is not being logged. + + + + + A log file is a Work in Progress! + + + + + The log file "{}" will continue to be written to until Manuskript is closed. + + + + + It will now be displayed in your file manager, but is of limited use until you close Manuskript. + + + + + Error! + + + + + An error was encountered while trying to show the log file below in your file manager. + + Search @@ -2213,42 +2273,42 @@ Use that if you get YAML related error. SpellAction - + Spelling Suggestions - + &Add to dictionary - + &Remove from custom dictionary - + &New Character - + &New Plot Item - + &New World Item - + &Correction Suggestions - + &Correction Suggestion @@ -2282,37 +2342,37 @@ Use that if you get YAML related error. abstractModel - + Title - + POV - + Label - + Status - + Compile - + Word count - + Goal @@ -2353,12 +2413,12 @@ Use that if you get YAML related error. characterModel - + Name - + Value @@ -2366,17 +2426,17 @@ Use that if you get YAML related error. characterTreeView - + Main - + Secondary - + Minor @@ -2808,72 +2868,72 @@ Use that if you get YAML related error. fullScreenEditor - + Theme: - + {} words / {} - + {} words - + Spellcheck - + Navigation - + New Text - + Title - + Title: Show Full Path - + Theme selector - + Word count - + Progress - + Progress: Auto Show/Hide - + Clock - + Clock: Show Seconds @@ -2952,14 +3012,6 @@ Use that if you get YAML related error. - - lastAccessedDirectoryInfo - - - Last accessed directory "{}" loaded. - - - lineEditView @@ -3074,32 +3126,32 @@ Use that if you get YAML related error. - + Root - + {} words - + ({} chars) {} words / {} - + {} words / {} - + {} chars - + {} chars @@ -3153,7 +3205,7 @@ Use that if you get YAML related error. myPanel - + Auto-hide @@ -3307,12 +3359,12 @@ Use that if you get YAML related error. outlineItem - + {} words / {} ({}) - + {} words @@ -3320,17 +3372,17 @@ Use that if you get YAML related error. pandocSettings - + General - + Table of Content - + Custom settings for {} @@ -3534,32 +3586,32 @@ Use that if you get YAML related error. plotModel - + Name - + Meta - + New step - + Main - + Secondary - + Minor @@ -3567,22 +3619,22 @@ Use that if you get YAML related error. plotTreeView - + Main - + Secondary - + Minor - + **Plot:** {} @@ -3646,52 +3698,52 @@ Use that if you get YAML related error. references - + Not a reference: {}. - + Unknown reference: {}. - + Path: - + Stats: - + POV: - + Status: - + Label: - + Short summary: - + Long summary: - + Notes: @@ -3711,72 +3763,72 @@ Use that if you get YAML related error. - + Go to {}. - + Description - + Result - + Characters - + Resolution steps - + Passion - + Conflict - + <b>Unknown reference:</b> {}. - + Folder: <b>{}</b> - + Text: <b>{}</b> - + Character: <b>{}</b> - + Plot: <b>{}</b> - + World: <b>{name}</b>{path} - + Referenced in: @@ -3819,12 +3871,12 @@ Use that if you get YAML related error. - + Restore - + Delete @@ -3884,12 +3936,12 @@ Use that if you get YAML related error. - + Line {}: - + Clear all @@ -3910,52 +3962,52 @@ Use that if you get YAML related error. settingsWindow - + New status - + New label - + newtheme - + New theme - + (read-only) - + Open Image - + Image files (*.jpg; *.jpeg; *.png) - + Error - + Unable to load selected file - + Unable to add selected image: {} @@ -4042,22 +4094,22 @@ Use that if you get YAML related error. tabSplitter - + Open selected items in that view. - + Split horizontally - + Close split - + Split vertically @@ -4065,7 +4117,7 @@ Use that if you get YAML related error. textEditView - + Various @@ -4164,27 +4216,27 @@ Use that if you get YAML related error. - + Novel - + Novella - + Short Story - + Research paper - + Demo projects @@ -4219,147 +4271,147 @@ Use that if you get YAML related error. - + Open project - + Manuskript project (*.msk);;All files (*) - + Save project as... - + Manuskript project (*.msk) - + Manuskript - + Create New Project - + Warning - + Overwrite existing project {} ? - + Empty fiction - + Chapter - + Scene - + Trilogy - + Book - + Section - + Empty non-fiction - + words each. - + of - + Text - + Something - + <b>Total:</b> {} words (~ {} pages) - + Fiction - + Non-fiction - + Idea - + Note - + Research - + TODO - + First draft - + Second draft - + Final diff --git a/i18n/manuskript_fr.ts b/i18n/manuskript_fr.ts index c8154dd..7499cf0 100644 --- a/i18n/manuskript_fr.ts +++ b/i18n/manuskript_fr.ts @@ -23,7 +23,7 @@ Un format utilisé parfois, pour les sites internet par exemple. - + <p>A universal document converter. Can be used to convert Markdown to a wide range of other formats.</p> <p>Website: <a href="http://www.pandoc.org">http://pandoc.org/</a></p> @@ -44,12 +44,12 @@ Aperçu avec coloration syntaxique. - + Plain text Texte brut - + Simplest export to plain text. Allows you to use your own markup not understood by Manuskript, for example <a href='www.fountain.io'>Fountain</a>. Export le plus simple, en texte brut. Permet d'utiliser des langages que Manuskript ne comprend pas. @@ -71,7 +71,7 @@ Par exemple <a href='www.fountain.io'>Fountain</a>.Sortie HTML - + Error Erreur @@ -113,77 +113,77 @@ Par exemple <a href='www.fountain.io'>Fountain</a>.LaTeX est une suite d'outils et un format utilisé pour créer des documents magnifiques. - + Standalone document (not just a fragment) Document autonome (pas juste un fragment) - + Include a table of contents. Inclure une table des matières. - + Number of sections level to include in TOC: Nombre de niveaux à inclure dans la table des matières : - + Typographically correct output Corrections typographiques - + Normalize the document (cleaner) Normalise le document (plus propre) - + Specify the base level for headers: Spécifier le niveau de base pour les titres : - + Use reference-style links instead of inline links Utilise des références pour les liens, et non intégrés dans le texte - + Use ATX-style headers Utiliser le format ATX pour les titres - + Self-contained HTML files, with no dependencies Document HTML autonome, sans dépendances externes - + Use <q> tags for quotes in HTML Utilise le tag <q> pour les citations en HTML - + LaTeX engine used to produce the PDF. Le moteur LaTeX utilisé pour produire le PDF. - + Paper size: Taille du papier : - + Font size: Taille de la police : - + Class: Classe : - + Line spacing: Espacement des lignes : @@ -201,26 +201,26 @@ Par exemple <a href='www.fountain.io'>Fountain</a>.Le but de ce format est de fournir un moyen d'échanger des informations entre outliners et services internet. - + Disable YAML metadata block. Use that if you get YAML related error. Désactiver le bloc de métadonnée YAML. Cochez ceci si vous avez des erreurs liées à YAML. - + Convert to ePUB3 Convertir vers ePUB3 - + Could not process regular expression: {} Erreur avec une expression régulière : {} - + Choose output file… Choisir le fichier de sortie… @@ -329,12 +329,12 @@ Cochez ceci si vous avez des erreurs liées à YAML. Import - + Markdown import Importation markdown - + <b>Info:</b> A very simple parser that will go through a markdown document and create items for each titles.<br/>&nbsp; @@ -343,12 +343,12 @@ Cochez ceci si vous avez des erreurs liées à YAML. des éléments à chaque titre détecté.<br/>&nbsp; - + Folder import Importation depuis un dossier - + <p><b>Info:</b> Imports a whole directory structure. Folders are added as folders, and plaintext documents within (you chose which ones by extension) @@ -358,47 +358,47 @@ Cochez ceci si vous avez des erreurs liées à YAML. <p>Seuls les fichiers textes sont pris en charge (pas les images, fichiers binaires ou autres).</p> - + Include only those extensions: Inclure seulement ces extensions: - + Comma separated values Valeurs séparées par des virgules - + Sort items by name Trier les éléments par leur noms - + Import folder then files - + OPML Import - + File open failed. - + This does not appear to be a valid OPML file. - + Pandoc import - + <b>Info:</b> Manuskript can import from <b>markdown</b> or <b>OPML</b>. Pandoc will convert your document to either (see option below), and @@ -408,17 +408,17 @@ Cochez ceci si vous avez des erreurs liées à YAML. - + Import using: - + Wrap lines: - + <p>Should pandoc create cosmetic / non-semantic line-breaks?</p><p> <b>auto</b>: wraps at 72 characters.<br> @@ -428,27 +428,27 @@ Cochez ceci si vous avez des erreurs liées à YAML. - + Mind Map Import - + This does not appear to be a valid Mind Map file. - + Mind Map import - + Import tip as: - + Untitled @@ -724,7 +724,7 @@ Cochez ceci si vous avez des erreurs liées à YAML. - + Outline @@ -769,714 +769,704 @@ Cochez ceci si vous avez des erreurs liées à YAML. - + &Tools - + &Edit - + &Format - + &Header - + &View - + &Mode - + Organi&ze - + &Cheat sheet - + Sea&rch - + &Navigation - + &Open - + Ctrl+O - + &Save - + Ctrl+S - + Sa&ve as... - + Ctrl+Shift+S - + &Quit - + Ctrl+Q - + &Show help texts - + Ctrl+Shift+B - + &Spellcheck - + F9 - + &Labels... - + &Status... - + Tree - + &Simple - + &Fiction - + Index cards - + S&ettings - + F8 - + &Close project - + Co&mpile - + F6 - + &Frequency Analyzer - + &About - + About Manuskript - + &Import… - + F7 - + &Copy - + Ctrl+C - + C&ut - + Ctrl+X - + &Paste - + Ctrl+V - + &Split… - + Ctrl+Shift+K - + Sp&lit at cursor - + Ctrl+K - + M&erge - + Ctrl+M - + Dupl&icate - + &Delete - + Del - + &Move Up - + Ctrl+Shift+Up - + M&ove Down - + Ctrl+Shift+Down - + &Rename - + F2 - + &Level 1 (setext) - + Ctrl+Alt+1 - + Level &2 - + Ctrl+Alt+2 - + Level &1 (atx) - + Ctrl+1 - + L&evel 2 - + Ctrl+2 - + Level &3 - + Ctrl+3 - + Level &4 - + Ctrl+4 - + Level &5 - + Ctrl+5 - + Level &6 - + Ctrl+6 - + &Bold - + Ctrl+B - + &Italic - + Ctrl+I - + &Strike - + &Verbatim - + Su&perscript - + Ctrl++ - + Subsc&ript - + Ctrl+- - + Co&mment block - + Ctrl+Shift+C - + Clear &formats - + Ctrl+0 - + &Comment line(s) - + Ctrl+D - + &Ordered list - + &Unordered list - + B&lockquote - + Search - + Ctrl+F - + The file {} does not exist. Has it been moved or deleted? - + Manuskript Manuskript - + Save project? - + Save changes to project "{}" before closing? - + Your changes will be lost if you don't save them. - + Project {} saved. - + WARNING: Project {} not saved. - + Project {} loaded. - - Project {} loaded with some errors: - - - - - * {} wasn't found in project file. - - - - + Project {} loaded with some errors. - + (~{} pages) - + Words: {}{} - + Book summary - + Project tree - + Metadata - + Story line - + Enter information about your book, and yourself. - + The basic situation, in the form of a 'What if...?' question. Ex: 'What if the most dangerous evil wizard wasn't able to kill a baby?' (Harry Potter) - + Take time to think about a one sentence (~50 words) summary of your book. Then expand it to a paragraph, then to a page, then to a full summary. - + Create your characters. - + Develop plots. - + Build worlds. Create hierarchy of broad categories down to specific details. - + Create the outline of your masterpiece. - + Write. - + Debug info. Sometimes useful. - + Dictionary - + Install {}{} to use spellcheck - + {} has no installed dictionaries - + {}{} is not installed - + Nothing - + POV - + Label - + Progress - + Compile - + Icon color - + Text color - + Background color - + Icon - + Text - + Background - + Border - + Corner - + PyQt / Qt versions 5.11 and 5.12 are known to cause a crash which might result in a loss of data. - + PyQt {} and Qt {} are in use. - + Proceed with import at your own risk @@ -1500,6 +1490,76 @@ Cochez ceci si vous avez des erreurs liées à YAML. Status Statut + + + &Technical Support + + + + + How to obtain technical support for Manuskript. + + + + + F1 + + + + + &Locate log file... + + + + + Locate log file + + + + + Locate the diagnostic log file used for this session. + + + + + Shift+F1 + + + + + Sorry! + + + + + This session is not being logged. + + + + + A log file is a Work in Progress! + + + + + The log file "{}" will continue to be written to until Manuskript is closed. + + + + + It will now be displayed in your file manager, but is of limited use until you close Manuskript. + + + + + Error! + + + + + An error was encountered while trying to show the log file below in your file manager. + + Search @@ -2221,42 +2281,42 @@ Cochez ceci si vous avez des erreurs liées à YAML. SpellAction - + &New Character - + &New Plot Item - + &New World Item - + Spelling Suggestions - + &Add to dictionary - + &Correction Suggestions - + &Correction Suggestion - + &Remove from custom dictionary @@ -2290,37 +2350,37 @@ Cochez ceci si vous avez des erreurs liées à YAML. abstractModel - + Title - + POV - + Label - + Status Statut - + Compile - + Word count - + Goal @@ -2361,12 +2421,12 @@ Cochez ceci si vous avez des erreurs liées à YAML. characterModel - + Name - + Value @@ -2374,17 +2434,17 @@ Cochez ceci si vous avez des erreurs liées à YAML. characterTreeView - + Main - + Secondary - + Minor @@ -2816,72 +2876,72 @@ Cochez ceci si vous avez des erreurs liées à YAML. fullScreenEditor - + Theme: - + Spellcheck - + Navigation - + New Text - + Title - + Title: Show Full Path - + Theme selector - + Word count - + Progress - + Progress: Auto Show/Hide - + Clock - + Clock: Show Seconds - + {} words / {} - + {} words @@ -2960,14 +3020,6 @@ Cochez ceci si vous avez des erreurs liées à YAML. Réglages - - lastAccessedDirectoryInfo - - - Last accessed directory "{}" loaded. - - - lineEditView @@ -3082,32 +3134,32 @@ Cochez ceci si vous avez des erreurs liées à YAML. - + Root - + ({} chars) {} words / {} - + {} words / {} - + {} chars - + {} chars - + {} words @@ -3161,7 +3213,7 @@ Cochez ceci si vous avez des erreurs liées à YAML. myPanel - + Auto-hide @@ -3315,12 +3367,12 @@ Cochez ceci si vous avez des erreurs liées à YAML. outlineItem - + {} words / {} ({}) - + {} words @@ -3328,17 +3380,17 @@ Cochez ceci si vous avez des erreurs liées à YAML. pandocSettings - + General - + Table of Content - + Custom settings for {} @@ -3547,32 +3599,32 @@ Cochez ceci si vous avez des erreurs liées à YAML. plotModel - + Name - + Meta - + New step - + Main - + Secondary - + Minor @@ -3580,22 +3632,22 @@ Cochez ceci si vous avez des erreurs liées à YAML. plotTreeView - + Main - + Secondary - + Minor - + **Plot:** {} @@ -3659,52 +3711,52 @@ Cochez ceci si vous avez des erreurs liées à YAML. references - + Not a reference: {}. - + Unknown reference: {}. - + Path: Chemin : - + Stats: - + POV: - + Status: Statut : - + Label: - + Short summary: - + Long summary: - + Notes: @@ -3724,7 +3776,7 @@ Cochez ceci si vous avez des erreurs liées à YAML. - + Go to {}. @@ -3739,7 +3791,7 @@ Cochez ceci si vous avez des erreurs liées à YAML. - + Conflict @@ -3759,62 +3811,62 @@ Cochez ceci si vous avez des erreurs liées à YAML. - + Description Description - + Result - + Characters - + Resolution steps - + Passion - + <b>Unknown reference:</b> {}. - + Folder: <b>{}</b> - + Text: <b>{}</b> - + Character: <b>{}</b> - + Plot: <b>{}</b> - + World: <b>{name}</b>{path} - + Referenced in: @@ -3832,12 +3884,12 @@ Cochez ceci si vous avez des erreurs liées à YAML. - + Restore - + Delete @@ -3897,12 +3949,12 @@ Cochez ceci si vous avez des erreurs liées à YAML. - + Line {}: - + Clear all @@ -3923,53 +3975,53 @@ Cochez ceci si vous avez des erreurs liées à YAML. settingsWindow - + Open Image - + Image files (*.jpg; *.jpeg; *.png) - + Error Erreur - + Unable to load selected file - + Unable to add selected image: {} - + New status - + New label - + newtheme - + New theme - + (read-only) @@ -4055,22 +4107,22 @@ Cochez ceci si vous avez des erreurs liées à YAML. tabSplitter - + Open selected items in that view. - + Split horizontally - + Close split - + Split vertically @@ -4078,7 +4130,7 @@ Cochez ceci si vous avez des erreurs liées à YAML. textEditView - + Various @@ -4177,27 +4229,27 @@ Cochez ceci si vous avez des erreurs liées à YAML. - + Novel - + Novella - + Short Story - + Research paper - + Demo projects @@ -4232,147 +4284,147 @@ Cochez ceci si vous avez des erreurs liées à YAML. - + Open project - + Manuskript project (*.msk);;All files (*) - + Save project as... - + Manuskript project (*.msk) - + Manuskript Manuskript - + Create New Project - + Warning - + Overwrite existing project {} ? - + Empty fiction - + Chapter - + Scene - + Trilogy - + Book - + Section - + Empty non-fiction - + words each. - + of - + Text - + Something - + <b>Total:</b> {} words (~ {} pages) - + Fiction - + Non-fiction - + Idea - + Note - + Research - + TODO - + First draft - + Second draft - + Final diff --git a/i18n/manuskript_hu.ts b/i18n/manuskript_hu.ts index fc2fa5a..58eeae3 100644 --- a/i18n/manuskript_hu.ts +++ b/i18n/manuskript_hu.ts @@ -38,7 +38,7 @@ Előnézet kiemelővel. - + Plain text Egyszerű szöveg @@ -53,77 +53,77 @@ Szükséges a latex telepítése. - + Error Hiba - + Standalone document (not just a fragment) Egyedülálló dokumentum (nem csak töredék) - + Include a table of contents. Tartalomjegyzék belefoglalása. - + Number of sections level to include in TOC: Szekció szintek száma, melyek bekerülnek a Tartalomjegyzékbe: - + Typographically correct output Tipográfiailag helyes kimenet - + Normalize the document (cleaner) Dokumentum normalizálása (tisztító) - + Specify the base level for headers: Adja meg az alapszintet a tartalomjegyzékhez: - + Use reference-style links instead of inline links Referencia-stílus linkek helyett inline linkek használata - + Use ATX-style headers ATX stílusú fejlécek használata - + Use <q> tags for quotes in HTML Használja a <q> címkéket a HTML idézetekhez - + LaTeX engine used to produce the PDF. A LaTeX motort PDF generálására használjuk. - + Paper size: Papírméret: - + Font size: Betűméret: - + Class: Osztály: - + Line spacing: Sortávolság: @@ -155,14 +155,14 @@ Feltételezi, hogy a szövegek a markdown-ban vannak formázva. - + Simplest export to plain text. Allows you to use your own markup not understood by Manuskript, for example <a href='www.fountain.io'>Fountain</a>. A legegyszerűbb lehetőség sima szöveg exportálására. Lehetővé teszi saját jelölőnyelv használatát, melyet a manuskript nem tud feldolgozni, mint például a <a href='www.fountain.io'>Fountain</a>. - + <p>A universal document converter. Can be used to convert Markdown to a wide range of other formats.</p> <p>Website: <a href="http://www.pandoc.org">http://pandoc.org/</a></p> @@ -203,30 +203,30 @@ egy egész sor más formátumra</p> böngészhetők vagy vezérelhetők. - + Disable YAML metadata block. Use that if you get YAML related error. YAML metaadt blokk letiltása. Akkor használja ezt, ha YAML-hoz kapcsolódó gondjai vannak. - + Convert to ePUB3 Konvertálás ePUB3 formátumra - + Self-contained HTML files, with no dependencies - + Could not process regular expression: {} - + Choose output file… @@ -335,12 +335,12 @@ Akkor használja ezt, ha YAML-hoz kapcsolódó gondjai vannak. Import - + Markdown import Markdown importálása - + <b>Info:</b> A very simple parser that will go through a markdown document and create items for each titles.<br/>&nbsp; @@ -349,12 +349,12 @@ Akkor használja ezt, ha YAML-hoz kapcsolódó gondjai vannak. elemeket hoz létre minden egyes címhez.<br/>&nbsp; - + Folder import Mappa importálása - + <p><b>Info:</b> Imports a whole directory structure. Folders are added as folders, and plaintext documents within (you chose which ones by extension) @@ -367,47 +367,47 @@ Akkor használja ezt, ha YAML-hoz kapcsolódó gondjai vannak. <p>Csak szövegfájlokat támogat (sem képeket, sem bináris állományokat vagy egyebet nem támogat).</p> - + Include only those extensions: Csak a következő kiterjesztésűek belefoglalása: - + Comma separated values Veszővel elválasztott értékek - + Sort items by name Elemek rendezése név szerint - + Import folder then files Mappa, majd fájlok importálása - + OPML Import OPML importálás - + File open failed. Fájlmegnyitás sikertelen. - + This does not appear to be a valid OPML file. Ez egy érvénytelen OPML fájlnak tűnik. - + Pandoc import Pandoc importálása - + <b>Info:</b> Manuskript can import from <b>markdown</b> or <b>OPML</b>. Pandoc will convert your document to either (see option below), and @@ -422,17 +422,17 @@ Akkor használja ezt, ha YAML-hoz kapcsolódó gondjai vannak. <br/>&nbsp; - + Import using: Importálás ezzel: - + Wrap lines: Sorok tördelése: - + <p>Should pandoc create cosmetic / non-semantic line-breaks?</p><p> <b>auto</b>: wraps at 72 characters.<br> @@ -446,27 +446,27 @@ Akkor használja ezt, ha YAML-hoz kapcsolódó gondjai vannak. <b>megőrzés</b>:megpróbálja megőrizni az eredeti sortöréseket.</p> - + Mind Map Import Elmetérkép importálása - + This does not appear to be a valid Mind Map file. Ez egy érvénytelen Elmetérkép fájlnak tűnik. - + Mind Map import Elmetérkép importálása - + Import tip as: Importálás mint: - + Untitled Név nélküli @@ -722,7 +722,7 @@ Akkor használja ezt, ha YAML-hoz kapcsolódó gondjai vannak. Konfliktus forrása - + Outline Áttekintés @@ -767,157 +767,157 @@ Akkor használja ezt, ha YAML-hoz kapcsolódó gondjai vannak. &Súgó - + &Tools &Eszközök - + &Edit &Szerkesztés - + &View &Nézet - + &Mode &Mód - + &Cheat sheet &Puska - + Sea&rch &Keresés - + &Navigation &Navigáció - + &Open Megn&yitás - + Ctrl+O Ctrl+O - + &Save &Mentés - + Ctrl+S Ctrl+S - + Sa&ve as... Mentés m&ásként... - + Ctrl+Shift+S Ctrl+Shift+S - + &Quit &Kilépés - + Ctrl+Q Ctrl+Q - + &Show help texts Sú&gó szövegek mutatása - + Ctrl+Shift+B Ctrl+Shift+B - + &Spellcheck &Helyesírás-ellenőrzés - + F9 F9 - + &Labels... &Címkék... - + &Status... &Státusz... - + Tree Fa - + &Simple &Egyszerű - + &Fiction &Fikció - + Index cards Tárgymutató kártyák - + S&ettings &Beállítások - + F8 F8 - + &Close project &Projekt bezárása - + Co&mpile &Összeállítás - + F6 F6 - + &Frequency Analyzer &Gyakoriság Elemző @@ -927,196 +927,186 @@ Akkor használja ezt, ha YAML-hoz kapcsolódó gondjai vannak. Könyv információk - + &About &Névjegy - + About Manuskript A Manuskript -ről - + Manuskript Manuskript - + Project {} saved. {} projekt mentve. - + WARNING: Project {} not saved. FIGYELEM: {} projekt nem került mentésre. - + Project {} loaded. {} projekt betöltve. - - Project {} loaded with some errors: - {} projekt betöltve, hibákkal: - - - - * {} wasn't found in project file. - * {} nem található a projekt fájlban. - - - + Project {} loaded with some errors. {} projekt betöltve, hibákkal. - + (~{} pages) (~{} oldal) - + Words: {}{} Szó: {}{} - + Book summary Könyv összefoglalása - + Project tree Projektfa - + Metadata Metaadat - + Story line Történetív - + Enter information about your book, and yourself. Adjon meg információt a könyvéről és önmagáról. - + The basic situation, in the form of a 'What if...?' question. Ex: 'What if the most dangerous evil wizard wasn't able to kill a baby?' (Harry Potter) Az alapszituáció 'Mi lenne ha...?' kérdésként feltéve. Pl.. 'Mi lenne ha a legveszélyesebb ' gonosz varázsló ne lenne képes megölni egy csecsemőt?' (Harry Potter) - + Take time to think about a one sentence (~50 words) summary of your book. Then expand it to a paragraph, then to a page, then to a full summary. Szánjon rá időt, hogy elgondolkodjon a könyve egymondatos (-50 szavas) összefoglalóján. Aztán bővítse ki egy bekezdéssé, majd egy oldallá, majd egy teljes összefoglalóvá. - + Create your characters. Alkossa meg a szereplőit. - + Develop plots. Cselekmények kidolgozása. - + Build worlds. Create hierarchy of broad categories down to specific details. Építsen világokat. Készítse el az átfogó kategóriák (és az specifikus részleteinek) hierarchiáját. - + Create the outline of your masterpiece. Készítse el a mesterműve áttekintését. - + Write. Írjon. - + Debug info. Sometimes useful. Hibakeresési információ. Valami hasznos. - + Dictionary Szótár - + Nothing Semmi - + POV Szempont - + Label Címke - + Progress Előrehaladás - + Compile Összeállítás - + Icon color Ikonszín - + Text color Szövegszín - + Background color Háttérszín - + Icon Ikon - + Text Szöveg - + Background Háttér - + Border Szegély - + Corner Sarok @@ -1126,127 +1116,127 @@ Akkor használja ezt, ha YAML-hoz kapcsolódó gondjai vannak. Cselekmény lépés hozzáadása (CTRL+Enter) - + &Import… &Importálás… - + F7 F7 - + &Copy &Másolás - + Ctrl+C Ctrl+C - + C&ut &Kivágás - + Ctrl+X Ctrl+X - + &Paste &Beillesztés - + Ctrl+V Ctrl+V - + &Split… &Felosztás… - + Ctrl+Shift+K Ctrl+Shift+K - + Sp&lit at cursor Fe&losztás kurzornál - + Ctrl+K Ctrl+K - + Ctrl+M Ctrl+M - + Ctrl+D Ctrl+D - + Del Törlés - + &Move Up &Mozgatás Fel - + Ctrl+Shift+Up Ctrl+Shift+Up - + M&ove Down M&ozgatás Le - + Ctrl+Shift+Down Ctrl+Shift+Down - + Dupl&icate &Duplikálás - + &Delete &Törlés - + &Rename &Átnevezés - + F2 F2 - + Organi&ze &Rendszerezés - + M&erge Össze&fésülés @@ -1256,232 +1246,232 @@ Akkor használja ezt, ha YAML-hoz kapcsolódó gondjai vannak. - + &Format - + &Header - + &Level 1 (setext) - + Ctrl+Alt+1 - + Level &2 - + Ctrl+Alt+2 - + Level &1 (atx) - + Ctrl+1 - + L&evel 2 - + Ctrl+2 - + Level &3 - + Ctrl+3 - + Level &4 - + Ctrl+4 - + Level &5 - + Ctrl+5 - + Level &6 - + Ctrl+6 - + &Bold - + Ctrl+B - + &Italic - + Ctrl+I - + &Strike - + &Verbatim - + Su&perscript - + Ctrl++ - + Subsc&ript - + Ctrl+- - + Co&mment block - + Ctrl+Shift+C - + Clear &formats - + Ctrl+0 - + &Comment line(s) - + &Ordered list - + &Unordered list - + B&lockquote - + The file {} does not exist. Has it been moved or deleted? - + Install {}{} to use spellcheck - + {} has no installed dictionaries - + {}{} is not installed - + Save project? - + Save changes to project "{}" before closing? - + Your changes will be lost if you don't save them. - + PyQt / Qt versions 5.11 and 5.12 are known to cause a crash which might result in a loss of data. - + PyQt {} and Qt {} are in use. - + Proceed with import at your own risk @@ -1491,12 +1481,12 @@ Akkor használja ezt, ha YAML-hoz kapcsolódó gondjai vannak. - + Search - + Ctrl+F @@ -1520,6 +1510,76 @@ Akkor használja ezt, ha YAML-hoz kapcsolódó gondjai vannak. Status Státusz + + + &Technical Support + + + + + How to obtain technical support for Manuskript. + + + + + F1 + F1 + + + + &Locate log file... + + + + + Locate log file + + + + + Locate the diagnostic log file used for this session. + + + + + Shift+F1 + + + + + Sorry! + + + + + This session is not being logged. + + + + + A log file is a Work in Progress! + + + + + The log file "{}" will continue to be written to until Manuskript is closed. + + + + + It will now be displayed in your file manager, but is of limited use until you close Manuskript. + + + + + Error! + + + + + An error was encountered while trying to show the log file below in your file manager. + + Search @@ -2241,42 +2301,42 @@ Akkor használja ezt, ha YAML-hoz kapcsolódó gondjai vannak. SpellAction - + Spelling Suggestions Helyesírási javaslatok - + &Add to dictionary &Hozzáadás a szótárhoz - + &Remove from custom dictionary &Eltávolítás az egyéni szótárból - + &New Character - + &New Plot Item - + &New World Item - + &Correction Suggestions - + &Correction Suggestion @@ -2310,37 +2370,37 @@ Akkor használja ezt, ha YAML-hoz kapcsolódó gondjai vannak. abstractModel - + Title Cím - + POV Szempont - + Label Cím - + Status Státusz - + Compile Összeállítás - + Word count Szószám - + Goal Cél @@ -2381,12 +2441,12 @@ Akkor használja ezt, ha YAML-hoz kapcsolódó gondjai vannak. characterModel - + Name Név - + Value Érték @@ -2394,17 +2454,17 @@ Akkor használja ezt, ha YAML-hoz kapcsolódó gondjai vannak. characterTreeView - + Main - + Secondary Másodlagos - + Minor Kisebb jelentőségű @@ -2836,72 +2896,72 @@ Akkor használja ezt, ha YAML-hoz kapcsolódó gondjai vannak. fullScreenEditor - + Theme: Téma: - + {} words / {} {} szó / {} - + {} words {} szó - + Spellcheck - + Navigation - + New Text - + Title Cím - + Title: Show Full Path - + Theme selector - + Word count Szószám - + Progress Előrehaladás - + Progress: Auto Show/Hide - + Clock - + Clock: Show Seconds @@ -2980,14 +3040,6 @@ Akkor használja ezt, ha YAML-hoz kapcsolódó gondjai vannak. Beállítások - - lastAccessedDirectoryInfo - - - Last accessed directory "{}" loaded. - - - lineEditView @@ -3102,32 +3154,32 @@ Akkor használja ezt, ha YAML-hoz kapcsolódó gondjai vannak. Alt+Up - + Root Gyökér - + {} words {} szó. - + ({} chars) {} words / {} - + {} words / {} - + {} chars - + {} chars @@ -3181,7 +3233,7 @@ Akkor használja ezt, ha YAML-hoz kapcsolódó gondjai vannak. myPanel - + Auto-hide Auto-rejtés @@ -3335,12 +3387,12 @@ Akkor használja ezt, ha YAML-hoz kapcsolódó gondjai vannak. outlineItem - + {} words / {} ({}) {} szó / {} ({}) - + {} words {} szó @@ -3348,17 +3400,17 @@ Akkor használja ezt, ha YAML-hoz kapcsolódó gondjai vannak. pandocSettings - + General Általános - + Table of Content Tartalomjegyzék - + Custom settings for {} Egyedi beállítások erre {} @@ -3562,32 +3614,32 @@ Akkor használja ezt, ha YAML-hoz kapcsolódó gondjai vannak. plotModel - + Name Név - + Meta Meta - + New step Új lépés - + Main - + Secondary Másodlagos - + Minor Kisebb jelentőségű @@ -3595,22 +3647,22 @@ Akkor használja ezt, ha YAML-hoz kapcsolódó gondjai vannak. plotTreeView - + Main - + Secondary Másodlagos - + Minor Kisebb jelentőségű - + **Plot:** {} **Cselekmény:** {} @@ -3674,52 +3726,52 @@ Akkor használja ezt, ha YAML-hoz kapcsolódó gondjai vannak. references - + Not a reference: {}. Ez nem hivatkozás: {}. - + Unknown reference: {}. Ismeretlen hivatkozás: {}. - + Path: Elérési út: - + Stats: Statisztika: - + POV: Szempont: - + Status: Státusz: - + Label: Címke: - + Short summary: Rövid összefoglaló: - + Long summary: Hosszú összefoglaló: - + Notes: Jegyzetek: @@ -3739,72 +3791,72 @@ Akkor használja ezt, ha YAML-hoz kapcsolódó gondjai vannak. A következő szempontja: - + Go to {}. Menj ide {}. - + Description Leírás - + Result Eredmény - + Characters Szereplők - + Resolution steps Megoldási lépések - + Passion Szenvedély - + Conflict Konfliktus - + <b>Unknown reference:</b> {}. <b>Ismeretlen hivatkozás:</b> {}. - + Folder: <b>{}</b> Mappa: <b>{}</b> - + Text: <b>{}</b> Szöveg: <b>{}</b> - + Character: <b>{}</b> Szereplő: <b>{}</b> - + Plot: <b>{}</b> Cselekmény: <b>{}</b> - + World: <b>{name}</b>{path} Világ: <b>{name}</b>{path} - + Referenced in: Hivatkozva itt: @@ -3847,12 +3899,12 @@ Akkor használja ezt, ha YAML-hoz kapcsolódó gondjai vannak. Lehetőségek - + Restore Visszaállítás - + Delete Törlés @@ -3912,12 +3964,12 @@ Akkor használja ezt, ha YAML-hoz kapcsolódó gondjai vannak. {} másodperccel ezelőtt - + Line {}: Sor {}: - + Clear all Minden törlése @@ -3938,52 +3990,52 @@ Akkor használja ezt, ha YAML-hoz kapcsolódó gondjai vannak. settingsWindow - + New status Új státusz - + New label Új címke - + newtheme újtéma - + New theme Új téma - + (read-only) (csak-olvasható) - + Open Image - + Image files (*.jpg; *.jpeg; *.png) - + Error Hiba - + Unable to load selected file - + Unable to add selected image: {} @@ -4084,22 +4136,22 @@ Akkor használja ezt, ha YAML-hoz kapcsolódó gondjai vannak. tabSplitter - + Open selected items in that view. Kijelölt elemek megnyitása abban a nézetben. - + Split horizontally Vízszintes felosztás - + Close split Felosztás bezárása - + Split vertically Függőleges felosztás @@ -4107,7 +4159,7 @@ Akkor használja ezt, ha YAML-hoz kapcsolódó gondjai vannak. textEditView - + Various Különféle @@ -4206,27 +4258,27 @@ Akkor használja ezt, ha YAML-hoz kapcsolódó gondjai vannak. Üres - + Novel Regény - + Novella Kisregény - + Short Story Elbeszélés - + Research paper Kutatási jegyzet - + Demo projects Bemutató projektet @@ -4261,147 +4313,147 @@ Akkor használja ezt, ha YAML-hoz kapcsolódó gondjai vannak. Létrehozás - + Open project Projekt megnyitása - + Manuskript project (*.msk);;All files (*) Manuskript projekt (*.msk);;Minden fájl (*) - + Save project as... Projekt mentése másként... - + Manuskript project (*.msk) Manuskript projekt (*.msk) - + Manuskript Manuskript - + Create New Project Új Projekt Létrehozása - + Warning Figyelmeztetés - + Overwrite existing project {} ? Felülírja a létező projektet {} ? - + Empty fiction Üres regény - + Chapter Fejezet - + Scene Jelenet - + Trilogy Trilógia - + Book Könyv - + Section Szakasz - + Empty non-fiction Üres nem-kitalált - + words each. szó mindegyik. - + of a - + Text Szöveg - + Something Valami - + <b>Total:</b> {} words (~ {} pages) <b>Összesen:</b> {} szó (~ {} oldal) - + Fiction Kitalált - + Non-fiction Valós alapú - + Idea Ötlet - + Note Jegyzet - + Research Kutatás - + TODO TODO - + First draft Első vázlat - + Second draft Második vázlat - + Final Végső diff --git a/i18n/manuskript_id.ts b/i18n/manuskript_id.ts index 46bfcb5..ac1ef54 100644 --- a/i18n/manuskript_id.ts +++ b/i18n/manuskript_id.ts @@ -38,7 +38,7 @@ Pratinjau dengan stabilo. - + Plain text Teks biasa @@ -53,77 +53,77 @@ Membutuhkan latex untuk dipasang. - + Error Eror - + Standalone document (not just a fragment) Dokumen yang berdiri sendiri (bukan hanya bagian) - + Include a table of contents. Termasuk daftar isi. - + Number of sections level to include in TOC: Jumlah tingkat bagian untuk memasukkan dalam TOC: - + Typographically correct output Keluaran tipografi yang benar - + Normalize the document (cleaner) Normalisasikan dokumen (pembersih) - + Specify the base level for headers: Tentukan tingkat dasar untuk tajuk: - + Use reference-style links instead of inline links - + Use ATX-style headers - + Use <q> tags for quotes in HTML - + LaTeX engine used to produce the PDF. - + Paper size: - + Font size: - + Class: - + Line spacing: @@ -154,13 +154,13 @@ - + Simplest export to plain text. Allows you to use your own markup not understood by Manuskript, for example <a href='www.fountain.io'>Fountain</a>. - + <p>A universal document converter. Can be used to convert Markdown to a wide range of other formats.</p> <p>Website: <a href="http://www.pandoc.org">http://pandoc.org/</a></p> @@ -193,29 +193,29 @@ - + Disable YAML metadata block. Use that if you get YAML related error. - + Convert to ePUB3 - + Self-contained HTML files, with no dependencies - + Could not process regular expression: {} - + Choose output file… @@ -324,24 +324,24 @@ Use that if you get YAML related error. Import - + Markdown import - + <b>Info:</b> A very simple parser that will go through a markdown document and create items for each titles.<br/>&nbsp; - + Folder import - + <p><b>Info:</b> Imports a whole directory structure. Folders are added as folders, and plaintext documents within (you chose which ones by extension) @@ -350,47 +350,47 @@ Use that if you get YAML related error. - + Include only those extensions: - + Comma separated values - + Sort items by name - + Import folder then files - + OPML Import - + File open failed. - + This does not appear to be a valid OPML file. - + Pandoc import - + <b>Info:</b> Manuskript can import from <b>markdown</b> or <b>OPML</b>. Pandoc will convert your document to either (see option below), and @@ -400,17 +400,17 @@ Use that if you get YAML related error. - + Import using: - + Wrap lines: - + <p>Should pandoc create cosmetic / non-semantic line-breaks?</p><p> <b>auto</b>: wraps at 72 characters.<br> @@ -420,27 +420,27 @@ Use that if you get YAML related error. - + Mind Map Import - + This does not appear to be a valid Mind Map file. - + Mind Map import - + Import tip as: - + Untitled @@ -696,7 +696,7 @@ Use that if you get YAML related error. - + Outline @@ -741,157 +741,157 @@ Use that if you get YAML related error. - + &Tools - + &Edit - + &View - + &Mode - + &Cheat sheet - + Sea&rch - + &Navigation - + &Open - + Ctrl+O - + &Save - + Ctrl+S - + Sa&ve as... - + Ctrl+Shift+S - + &Quit - + Ctrl+Q - + &Show help texts - + Ctrl+Shift+B - + &Spellcheck - + F9 - + &Labels... - + &Status... - + Tree - + &Simple - + &Fiction - + Index cards - + S&ettings - + F8 - + &Close project - + Co&mpile - + F6 - + &Frequency Analyzer @@ -901,194 +901,184 @@ Use that if you get YAML related error. - + &About - + About Manuskript - + Manuskript - + Project {} saved. - + WARNING: Project {} not saved. - + Project {} loaded. - - Project {} loaded with some errors: - - - - - * {} wasn't found in project file. - - - - + Project {} loaded with some errors. - + (~{} pages) - + Words: {}{} - + Book summary - + Project tree - + Metadata - + Story line - + Enter information about your book, and yourself. - + The basic situation, in the form of a 'What if...?' question. Ex: 'What if the most dangerous evil wizard wasn't able to kill a baby?' (Harry Potter) - + Take time to think about a one sentence (~50 words) summary of your book. Then expand it to a paragraph, then to a page, then to a full summary. - + Create your characters. - + Develop plots. - + Build worlds. Create hierarchy of broad categories down to specific details. - + Create the outline of your masterpiece. - + Write. - + Debug info. Sometimes useful. - + Dictionary - + Nothing - + POV - + Label - + Progress - + Compile - + Icon color - + Text color - + Background color - + Icon - + Text - + Background - + Border - + Corner @@ -1098,127 +1088,127 @@ Use that if you get YAML related error. - + &Import… - + F7 - + &Copy - + Ctrl+C - + C&ut - + Ctrl+X - + &Paste - + Ctrl+V - + &Split… - + Ctrl+Shift+K - + Sp&lit at cursor - + Ctrl+K - + Ctrl+M - + Ctrl+D - + Del - + &Move Up - + Ctrl+Shift+Up - + M&ove Down - + Ctrl+Shift+Down - + Dupl&icate - + &Delete - + &Rename - + F2 - + Organi&ze - + M&erge @@ -1228,232 +1218,232 @@ Use that if you get YAML related error. - + &Format - + &Header - + &Level 1 (setext) - + Ctrl+Alt+1 - + Level &2 - + Ctrl+Alt+2 - + Level &1 (atx) - + Ctrl+1 - + L&evel 2 - + Ctrl+2 - + Level &3 - + Ctrl+3 - + Level &4 - + Ctrl+4 - + Level &5 - + Ctrl+5 - + Level &6 - + Ctrl+6 - + &Bold - + Ctrl+B - + &Italic - + Ctrl+I - + &Strike - + &Verbatim - + Su&perscript - + Ctrl++ - + Subsc&ript - + Ctrl+- - + Co&mment block - + Ctrl+Shift+C - + Clear &formats - + Ctrl+0 - + &Comment line(s) - + &Ordered list - + &Unordered list - + B&lockquote - + The file {} does not exist. Has it been moved or deleted? - + Install {}{} to use spellcheck - + {} has no installed dictionaries - + {}{} is not installed - + Save project? - + Save changes to project "{}" before closing? - + Your changes will be lost if you don't save them. - + PyQt / Qt versions 5.11 and 5.12 are known to cause a crash which might result in a loss of data. - + PyQt {} and Qt {} are in use. - + Proceed with import at your own risk @@ -1463,12 +1453,12 @@ Use that if you get YAML related error. - + Search - + Ctrl+F @@ -1492,6 +1482,76 @@ Use that if you get YAML related error. Status + + + &Technical Support + + + + + How to obtain technical support for Manuskript. + + + + + F1 + + + + + &Locate log file... + + + + + Locate log file + + + + + Locate the diagnostic log file used for this session. + + + + + Shift+F1 + + + + + Sorry! + + + + + This session is not being logged. + + + + + A log file is a Work in Progress! + + + + + The log file "{}" will continue to be written to until Manuskript is closed. + + + + + It will now be displayed in your file manager, but is of limited use until you close Manuskript. + + + + + Error! + + + + + An error was encountered while trying to show the log file below in your file manager. + + Search @@ -2213,42 +2273,42 @@ Use that if you get YAML related error. SpellAction - + Spelling Suggestions - + &Add to dictionary - + &Remove from custom dictionary - + &New Character - + &New Plot Item - + &New World Item - + &Correction Suggestions - + &Correction Suggestion @@ -2282,37 +2342,37 @@ Use that if you get YAML related error. abstractModel - + Title - + POV - + Label - + Status - + Compile - + Word count - + Goal @@ -2353,12 +2413,12 @@ Use that if you get YAML related error. characterModel - + Name - + Value @@ -2366,17 +2426,17 @@ Use that if you get YAML related error. characterTreeView - + Main - + Secondary - + Minor @@ -2808,72 +2868,72 @@ Use that if you get YAML related error. fullScreenEditor - + Theme: - + {} words / {} - + {} words - + Spellcheck - + Navigation - + New Text - + Title - + Title: Show Full Path - + Theme selector - + Word count - + Progress - + Progress: Auto Show/Hide - + Clock - + Clock: Show Seconds @@ -2952,14 +3012,6 @@ Use that if you get YAML related error. - - lastAccessedDirectoryInfo - - - Last accessed directory "{}" loaded. - - - lineEditView @@ -3074,32 +3126,32 @@ Use that if you get YAML related error. - + Root - + {} words - + ({} chars) {} words / {} - + {} words / {} - + {} chars - + {} chars @@ -3153,7 +3205,7 @@ Use that if you get YAML related error. myPanel - + Auto-hide @@ -3307,12 +3359,12 @@ Use that if you get YAML related error. outlineItem - + {} words / {} ({}) - + {} words @@ -3320,17 +3372,17 @@ Use that if you get YAML related error. pandocSettings - + General - + Table of Content - + Custom settings for {} @@ -3534,32 +3586,32 @@ Use that if you get YAML related error. plotModel - + Name - + Meta - + New step - + Main - + Secondary - + Minor @@ -3567,22 +3619,22 @@ Use that if you get YAML related error. plotTreeView - + Main - + Secondary - + Minor - + **Plot:** {} @@ -3646,52 +3698,52 @@ Use that if you get YAML related error. references - + Not a reference: {}. - + Unknown reference: {}. - + Path: - + Stats: - + POV: - + Status: - + Label: - + Short summary: - + Long summary: - + Notes: @@ -3711,72 +3763,72 @@ Use that if you get YAML related error. - + Go to {}. - + Description - + Result - + Characters - + Resolution steps - + Passion - + Conflict - + <b>Unknown reference:</b> {}. - + Folder: <b>{}</b> - + Text: <b>{}</b> - + Character: <b>{}</b> - + Plot: <b>{}</b> - + World: <b>{name}</b>{path} - + Referenced in: @@ -3819,12 +3871,12 @@ Use that if you get YAML related error. - + Restore - + Delete @@ -3884,12 +3936,12 @@ Use that if you get YAML related error. - + Line {}: - + Clear all @@ -3910,52 +3962,52 @@ Use that if you get YAML related error. settingsWindow - + New status - + New label - + newtheme - + New theme - + (read-only) - + Open Image - + Image files (*.jpg; *.jpeg; *.png) - + Error Eror - + Unable to load selected file - + Unable to add selected image: {} @@ -4042,22 +4094,22 @@ Use that if you get YAML related error. tabSplitter - + Open selected items in that view. - + Split horizontally - + Close split - + Split vertically @@ -4065,7 +4117,7 @@ Use that if you get YAML related error. textEditView - + Various @@ -4164,27 +4216,27 @@ Use that if you get YAML related error. - + Novel - + Novella - + Short Story - + Research paper - + Demo projects @@ -4219,147 +4271,147 @@ Use that if you get YAML related error. - + Open project - + Manuskript project (*.msk);;All files (*) - + Save project as... - + Manuskript project (*.msk) - + Manuskript - + Create New Project - + Warning - + Overwrite existing project {} ? - + Empty fiction - + Chapter - + Scene - + Trilogy - + Book - + Section - + Empty non-fiction - + words each. - + of - + Text - + Something - + <b>Total:</b> {} words (~ {} pages) - + Fiction - + Non-fiction - + Idea - + Note - + Research - + TODO - + First draft - + Second draft - + Final diff --git a/i18n/manuskript_it.ts b/i18n/manuskript_it.ts index ee97a92..1fb0d3b 100644 --- a/i18n/manuskript_it.ts +++ b/i18n/manuskript_it.ts @@ -38,7 +38,7 @@ Anteprima con evidenziatore. - + Plain text Testo normale @@ -53,77 +53,77 @@ È necessario installare LaTeX. - + Error Errore - + Standalone document (not just a fragment) Documento autonomo (non solo un frammento) - + Include a table of contents. Include un sommario. - + Number of sections level to include in TOC: Numero di sezioni da includere nel sommario: - + Typographically correct output Output tipograficamente corretto - + Normalize the document (cleaner) Normalizza il documento (pulitore) - + Specify the base level for headers: Specifica il livello di base per le intestazioni: - + Use reference-style links instead of inline links Usa links di stile di riferimento anziché links in linea - + Use ATX-style headers Usa intestazioni in stile ATX - + Use <q> tags for quotes in HTML Usa <q> tags per le virgolette in HTML - + LaTeX engine used to produce the PDF. Motore LaTeX usato per produrre PDF. - + Paper size: Dimensione del foglio: - + Font size: Dimensione del font: - + Class: Classe: - + Line spacing: Interlinea: @@ -155,14 +155,14 @@ Presuppone che i testi siano formattati in markdown. - + Simplest export to plain text. Allows you to use your own markup not understood by Manuskript, for example <a href='www.fountain.io'>Fountain</a>. La più semplice esportazione in testo piano. Ti permette di usare il tuo markup non riconosciuto da Manuskript, per esempio <a href='www.fountain.io'>Fountain</a>. - + <p>A universal document converter. Can be used to convert Markdown to a wide range of other formats.</p> <p>Website: <a href="http://www.pandoc.org">http://pandoc.org/</a></p> @@ -203,31 +203,31 @@ attraverso un outliner. - + Disable YAML metadata block. Use that if you get YAML related error. Disabilita il blocco dei metadati YAML. Usalo se ottieni un errore relativo a YAML. - + Convert to ePUB3 Converti in formato ePUB3 - + Self-contained HTML files, with no dependencies Files HTML autosufficienti, non servono dipendenze - + Could not process regular expression: {} Errore durante l'elaborazione dell'espressione regolare: {} - + Choose output file… Scegli il file di output @@ -336,12 +336,12 @@ Usalo se ottieni un errore relativo a YAML. Import - + Markdown import Importa file in Markdown - + <b>Info:</b> A very simple parser that will go through a markdown document and create items for each titles.<br/>&nbsp; @@ -350,12 +350,12 @@ Usalo se ottieni un errore relativo a YAML. creerà un oggetto per ogni titolo.<br/>&nbsp; - + Folder import Importa cartella - + <p><b>Info:</b> Imports a whole directory structure. Folders are added as folders, and plaintext documents within (you chose which ones by extension) @@ -368,47 +368,47 @@ Usalo se ottieni un errore relativo a YAML. <p>Sono supportati solo i files di testo (non immagini, binari o altro).</p> - + Include only those extensions: Includi solo queste estensioni: - + Comma separated values Valori separati da virgole - + Sort items by name Ordina gli oggetti per nome - + Import folder then files Importa la cartella e poi i files - + OPML Import Importa OPML - + File open failed. Apertura del file fallita. - + This does not appear to be a valid OPML file. Questo non sembra essere un file OPML valido. - + Pandoc import Importa Pandoc - + <b>Info:</b> Manuskript can import from <b>markdown</b> or <b>OPML</b>. Pandoc will convert your document to either (see option below), and @@ -423,17 +423,17 @@ Usalo se ottieni un errore relativo a YAML. <br/>&nbsp; - + Import using: Importa usando: - + Wrap lines: Linee a capo: - + <p>Should pandoc create cosmetic / non-semantic line-breaks?</p><p> <b>auto</b>: wraps at 72 characters.<br> @@ -448,27 +448,27 @@ Usalo se ottieni un errore relativo a YAML. documento originale.</p> - + Mind Map Import Importa mappa mentale - + This does not appear to be a valid Mind Map file. Questo non sembra essere un file di mappa mentale valido. - + Mind Map import Importa mappa mentale - + Import tip as: Importa tip come: - + Untitled Senza titolo @@ -724,7 +724,7 @@ Usalo se ottieni un errore relativo a YAML. Fonte di conflitto - + Outline Quadro d'insieme @@ -769,157 +769,157 @@ Usalo se ottieni un errore relativo a YAML. &Guida - + &Tools &Strumenti - + &Edit &Modifica - + &View &Visualizza - + &Mode &Modalità - + &Cheat sheet &Promemoria - + Sea&rch Rice&rca - + &Navigation &Navigazione - + &Open &Apri - + Ctrl+O - + &Save &Salva - + Ctrl+S - + Sa&ve as... Sal&va come... - + Ctrl+Shift+S - + &Quit &Esci - + Ctrl+Q - + &Show help texts &Mostra la guida - + Ctrl+Shift+B - + &Spellcheck &Controllo ortografico - + F9 - + &Labels... &Etichette... - + &Status... &Stato... - + Tree Albero - + &Simple &Semplice - + &Fiction &Narrativa - + Index cards Schede - + S&ettings I&mpostazioni - + F8 - + &Close project &Chiudi progetto - + Co&mpile Co&mpila per esportazione - + F6 - + &Frequency Analyzer &Analizzatore di frequenza @@ -929,196 +929,186 @@ Usalo se ottieni un errore relativo a YAML. Ragguagli sul libro - + &About &A proposito - + About Manuskript A proposito di Manuskript - + Manuskript - + Project {} saved. Progetto {} salvato. - + WARNING: Project {} not saved. ATTENZIONE: Progetto {} non salvato. - + Project {} loaded. Progetto {} caricato. - - Project {} loaded with some errors: - Progetto {} caricato con alcuni errori: - - - - * {} wasn't found in project file. - * {} non trovato nel file di progetto. - - - + Project {} loaded with some errors. Progetto {} caricato con alcuni errori. - + (~{} pages) (~{} pagine) - + Words: {}{} Parole: {}{} - + Book summary Riassunto del libro - + Project tree Schema ad albero del progetto - + Metadata Metadati - + Story line Sviluppo della storia - + Enter information about your book, and yourself. Inserisci informazioni sul tuo libro, e su di te. - + The basic situation, in the form of a 'What if...?' question. Ex: 'What if the most dangerous evil wizard wasn't able to kill a baby?' (Harry Potter) La situazione iniziale, in forma di domanda tipo 'Cosa succede se...?'. Es: 'Cosa succede se il pericoloso mago cattivo non riesce ad uccidere un bambino?' (Harry Potter) - + Take time to think about a one sentence (~50 words) summary of your book. Then expand it to a paragraph, then to a page, then to a full summary. Prenditi il tempo per pensare ad una frase riassuntiva (~50 parole) del tuo libro. Poi espandila ad un paragrafo, poi ad una pagina, poi ad un riassunto completo. - + Create your characters. Crea i tuoi personaggi. - + Develop plots. Sviluppa le trame. - + Build worlds. Create hierarchy of broad categories down to specific details. Costruisci i mondi. Crea una gerarchia di ampie categorie fino ad arrivare ai dettagli specifici. - + Create the outline of your masterpiece. Crea il contorno del tuo capolavoro. - + Write. Scrivi. - + Debug info. Sometimes useful. Informazioni di debug. A volte possono essere utili. - + Dictionary Dizionario - + Nothing Niente - + POV - + Label Etichetta - + Progress Avanzamento - + Compile Compilato - + Icon color Colore dell'icona - + Text color Colore del testo - + Background color Colore dello sfondo - + Icon Icona - + Text Testo - + Background Sfondo - + Border Bordo - + Corner Angolo @@ -1128,127 +1118,127 @@ Usalo se ottieni un errore relativo a YAML. Aggiungi un passaggio alla trama - + &Import… &Importa… - + F7 - + &Copy &Copia - + Ctrl+C - + C&ut T&aglia - + Ctrl+X - + &Paste &Incolla - + Ctrl+V - + &Split… &Dividi… - + Ctrl+Shift+K - + Sp&lit at cursor Di&vidi al cursore - + Ctrl+K - + Ctrl+M - + Ctrl+D - + Del Canc - + &Move Up &Sposta in alto - + Ctrl+Shift+Up Ctrl+Shift+Freccia su - + M&ove Down Sp&osta in basso - + Ctrl+Shift+Down Ctrl+Shift+Freccia giù - + Dupl&icate Dupl&ica - + &Delete &Cancella - + &Rename &Rinomina - + F2 - + Organi&ze Organi&zza - + M&erge U&nisci @@ -1258,232 +1248,232 @@ Usalo se ottieni un errore relativo a YAML. Rimuovi il passaggio(i) di trama selezionato(i) - + &Format &Formato - + &Header &Intestazione - + &Level 1 (setext) &Livello 1 (setext) - + Ctrl+Alt+1 Ctrl+Alt+1 - + Level &2 Livello &2 - + Ctrl+Alt+2 Ctrl+Alt+2 - + Level &1 (atx) Livello &1 (atx) - + Ctrl+1 Ctrl+1 - + L&evel 2 L&ivello 2 - + Ctrl+2 Ctrl+2 - + Level &3 Livello &3 - + Ctrl+3 Ctrl+3 - + Level &4 Livello &4 - + Ctrl+4 Ctrl+4 - + Level &5 Livello &5 - + Ctrl+5 Ctrl+5 - + Level &6 Livello &6 - + Ctrl+6 Ctrl+6 - + &Bold &Grassetto - + Ctrl+B Ctrl+B - + &Italic &Corsivo - + Ctrl+I Ctrl+I - + &Strike &Barrato - + &Verbatim &Parola per parola - + Su&perscript A&pice - + Ctrl++ Ctrl++ - + Subsc&ript P&edice - + Ctrl+- Ctrl+- - + Co&mment block Blocco di co&mmenti - + Ctrl+Shift+C Ctrl+Shift+C - + Clear &formats Cancella i &formati - + Ctrl+0 Ctrl+0 - + &Comment line(s) Linea(e) di &commento - + &Ordered list &Elenco numerato - + &Unordered list &Elenco puntato - + B&lockquote Citazione (b&locco) - + The file {} does not exist. Has it been moved or deleted? Il file {} non esiste. È stato spostato o cancellato? - + Install {}{} to use spellcheck Installa {}{} per usare il correttore ortografico - + {} has no installed dictionaries {} non vi sono dizionari installati - + {}{} is not installed {}{} non è installato - + Save project? Salvare il progetto? - + Save changes to project "{}" before closing? Salvare i cambiamenti del progetto"{}" prima di chiuderlo? - + Your changes will be lost if you don't save them. I cambiamenti apportati andranno persi se non li salvi. - + PyQt / Qt versions 5.11 and 5.12 are known to cause a crash which might result in a loss of data. PyQt / Qt versione 5.11 e 5.12 sono conosciuti per provocare crash che potrebbero portare a perdita dei dati. - + PyQt {} and Qt {} are in use. PyQt{} e Qt {} sono in uso. - + Proceed with import at your own risk Il procedimento potrebbe arrestarsi in modo anomalo e perdere dati @@ -1493,12 +1483,12 @@ Usalo se ottieni un errore relativo a YAML. - + Search - + Ctrl+F @@ -1522,6 +1512,76 @@ Usalo se ottieni un errore relativo a YAML. Status Stato + + + &Technical Support + + + + + How to obtain technical support for Manuskript. + + + + + F1 + + + + + &Locate log file... + + + + + Locate log file + + + + + Locate the diagnostic log file used for this session. + + + + + Shift+F1 + + + + + Sorry! + + + + + This session is not being logged. + + + + + A log file is a Work in Progress! + + + + + The log file "{}" will continue to be written to until Manuskript is closed. + + + + + It will now be displayed in your file manager, but is of limited use until you close Manuskript. + + + + + Error! + + + + + An error was encountered while trying to show the log file below in your file manager. + + Search @@ -2243,42 +2303,42 @@ Usalo se ottieni un errore relativo a YAML. SpellAction - + Spelling Suggestions Suggerimenti ortografici - + &Add to dictionary &Aggiungi al dizionario - + &Remove from custom dictionary &Rimuovi dal dizionario personale - + &New Character - + &New Plot Item - + &New World Item - + &Correction Suggestions - + &Correction Suggestion @@ -2312,37 +2372,37 @@ Usalo se ottieni un errore relativo a YAML. abstractModel - + Title Titolo - + POV - + Label Etichetta - + Status Stato - + Compile Compila - + Word count Conteggio parole - + Goal Obiettivo @@ -2383,12 +2443,12 @@ Usalo se ottieni un errore relativo a YAML. characterModel - + Name Nome - + Value Valore @@ -2396,17 +2456,17 @@ Usalo se ottieni un errore relativo a YAML. characterTreeView - + Main Principale - + Secondary Secondario - + Minor Minore @@ -2838,72 +2898,72 @@ Usalo se ottieni un errore relativo a YAML. fullScreenEditor - + Theme: Tema: - + {} words / {} {} parole / {} - + {} words {} parole - + Spellcheck Controllo ortografico - + Navigation Navigazione - + New Text Nuovo testo - + Title Titolo - + Title: Show Full Path Titolo: Mostra il percorso completo - + Theme selector Selettore del tema - + Word count Conteggio parole - + Progress Avanzamento - + Progress: Auto Show/Hide Avanzamento: mostra/nascondi automaticamente - + Clock Orologio - + Clock: Show Seconds Orologio: mostra i secondi @@ -2982,14 +3042,6 @@ Usalo se ottieni un errore relativo a YAML. Impostazioni - - lastAccessedDirectoryInfo - - - Last accessed directory "{}" loaded. - L'ultima directory accessibile "{}" è stata caricata. - - lineEditView @@ -3104,32 +3156,32 @@ Usalo se ottieni un errore relativo a YAML. - + Root Radice - + {} words {} parole - + ({} chars) {} words / {} - + {} words / {} - + {} chars - + {} chars @@ -3183,7 +3235,7 @@ Usalo se ottieni un errore relativo a YAML. myPanel - + Auto-hide Nascondi automaticamente @@ -3337,12 +3389,12 @@ Usalo se ottieni un errore relativo a YAML. outlineItem - + {} words / {} ({}) {} parole / {} ({}) - + {} words {} parole @@ -3350,17 +3402,17 @@ Usalo se ottieni un errore relativo a YAML. pandocSettings - + General Generale - + Table of Content Tavola dei contenuti - + Custom settings for {} Impostazioni personali per {} @@ -3564,32 +3616,32 @@ Usalo se ottieni un errore relativo a YAML. plotModel - + Name Nome - + Meta - + New step Nuovo passaggio - + Main Principale - + Secondary Secondario - + Minor Minore @@ -3597,22 +3649,22 @@ Usalo se ottieni un errore relativo a YAML. plotTreeView - + Main Principale - + Secondary Secondario - + Minor Minore - + **Plot:** {} **Trama:** {} @@ -3676,52 +3728,52 @@ Usalo se ottieni un errore relativo a YAML. references - + Not a reference: {}. Non è un riferimento: {}. - + Unknown reference: {}. Riferimento sconosciuto: {}. - + Path: Percorso: - + Stats: Statistiche: - + POV: - + Status: Stato: - + Label: Etichetta: - + Short summary: Riassunto breve: - + Long summary: Riassunto esteso: - + Notes: Note: @@ -3741,72 +3793,72 @@ Usalo se ottieni un errore relativo a YAML. POV di: - + Go to {}. Vai a {}. - + Description Descrizione - + Result Esito - + Characters Personaggi - + Resolution steps Passaggi risolutivi - + Passion Passione - + Conflict Conflitto - + <b>Unknown reference:</b> {}. <b>Riferimento sconosciuto:</b> {}. - + Folder: <b>{}</b> Cartella: <b>{}</b> - + Text: <b>{}</b> Testo: <b>{}</b> - + Character: <b>{}</b> Personaggio: <b>{}</b> - + Plot: <b>{}</b> Trama: <b>{}</b> - + World: <b>{name}</b>{path} Mondo: <b>{nome}</b>{percorso} - + Referenced in: Riferimento in: @@ -3849,12 +3901,12 @@ Usalo se ottieni un errore relativo a YAML. Opzioni - + Restore Ripristina - + Delete Cancella @@ -3914,12 +3966,12 @@ Usalo se ottieni un errore relativo a YAML. {} secondi fa - + Line {}: Riga {}: - + Clear all Cancella tutto @@ -3940,52 +3992,52 @@ Usalo se ottieni un errore relativo a YAML. settingsWindow - + New status Nuovo stato - + New label Nuova etichetta - + newtheme nuovo tema - + New theme Nuovo tema - + (read-only) (sola lettura) - + Open Image Apri immagine - + Image files (*.jpg; *.jpeg; *.png) Files di immagine (*.jpg; *.jpeg; *.png) - + Error Errore - + Unable to load selected file Impossibile caricare il file selezionato - + Unable to add selected image: {} Impossibile aggiungere l'immagine selezionata: @@ -4087,22 +4139,22 @@ Usalo se ottieni un errore relativo a YAML. tabSplitter - + Open selected items in that view. Apri gli elementi selezionati in questa schermata. - + Split horizontally Dividi orizzontalmente - + Close split Chiudi la divisione - + Split vertically Dividi verticalmente @@ -4110,7 +4162,7 @@ Usalo se ottieni un errore relativo a YAML. textEditView - + Various Vari @@ -4209,27 +4261,27 @@ Usalo se ottieni un errore relativo a YAML. Vuoto - + Novel Romanzo - + Novella Romanzo breve - + Short Story Racconto - + Research paper Documento di ricerca - + Demo projects Progetto dimostrativo @@ -4264,147 +4316,147 @@ Usalo se ottieni un errore relativo a YAML. Crea - + Open project Apri un progetto - + Manuskript project (*.msk);;All files (*) Progetto di Manuskript (*.msk);;Tutti i files (*) - + Save project as... Salva il progetto come... - + Manuskript project (*.msk) Progetto di Manuskript (*.msk) - + Manuskript - + Create New Project Crea un nuovo progetto - + Warning Attenzione - + Overwrite existing project {} ? Sovrascrivere il progetto esistente {} ? - + Empty fiction Narrativa vuota - + Chapter Capitolo - + Scene Scena - + Trilogy Trilogia - + Book Libro - + Section Sezione - + Empty non-fiction Saggistica vuota - + words each. parole ognuno. - + of di - + Text Testo - + Something Qualcosa - + <b>Total:</b> {} words (~ {} pages) <b>Totale:</b> {} parole (~ {} pagine) - + Fiction Letteratura - + Non-fiction Saggistica - + Idea - + Note Nota - + Research Ricerca - + TODO - + First draft Prima stesura - + Second draft Seconda stesura - + Final Stesura definitiva diff --git a/i18n/manuskript_ja.ts b/i18n/manuskript_ja.ts index be474c8..a40988d 100644 --- a/i18n/manuskript_ja.ts +++ b/i18n/manuskript_ja.ts @@ -38,7 +38,7 @@ 構文を強調表示しての事前確認する。 - + Plain text Plain text @@ -53,82 +53,82 @@ LaTeXをインストールする必要があります。 - + Error Error - + Standalone document (not just a fragment) 独立文書 (単なる断片ではない) - + Include a table of contents. 目次に含める。 - + Number of sections level to include in TOC: 目次に含めるセクションレベルの数: - + Typographically correct output - + Normalize the document (cleaner) 文書の正規化 (整理) - + Specify the base level for headers: 見出しのデフォルトレベルを指定します。 - + Use reference-style links instead of inline links インラインリンクの代わりに、参照リンクを使用 - + Use ATX-style headers ATX形式のスタイルを使用 - + Self-contained HTML files, with no dependencies 外部依存のない自己完結型のHTMLファイル - + Use <q> tags for quotes in HTML HTMLで引用符を示すには、`<q>`タグを使用 - + LaTeX engine used to produce the PDF. PDFを生成するためには、LaTeXエンジンを使用する。 - + Paper size: 用紙サイズ: - + Font size: フォントサイズ: - + Class: Class: - + Line spacing: 行間: @@ -160,14 +160,14 @@ テキストはマークダウンでフォーマットされていることを前提としている。 - + Simplest export to plain text. Allows you to use your own markup not understood by Manuskript, for example <a href='www.fountain.io'>Fountain</a>. プレーンテキストに出力する最も簡単な設定です。 <a href='www.fountain.io'>噴水</a>など、Manuskriptにはないタグを使用できます。 - + <p>A universal document converter. Can be used to convert Markdown to a wide range of other formats.</p> <p>Website: <a href="http://www.pandoc.org">http://pandoc.org/</a></p> @@ -201,26 +201,26 @@ - + Disable YAML metadata block. Use that if you get YAML related error. YAMLメタデータブロックを無効にします。 YAML関連のエラーが発生した場合は、このオプションを有効にして、再度試してください。 - + Convert to ePUB3 ePUB3に変換 - + Could not process regular expression: {} 正規表現の処理中にエラーが発生: {} - + Choose output file… 出力ファイルを選択... @@ -329,24 +329,24 @@ YAML関連のエラーが発生した場合は、このオプションを有効 Import - + Markdown import マークダウンの読み込み - + <b>Info:</b> A very simple parser that will go through a markdown document and create items for each titles.<br/>&nbsp; - + Folder import フォルダーを追加 - + <p><b>Info:</b> Imports a whole directory structure. Folders are added as folders, and plaintext documents within (you chose which ones by extension) @@ -355,47 +355,47 @@ YAML関連のエラーが発生した場合は、このオプションを有効 - + Include only those extensions: 次の拡張子のみを追加する: - + Comma separated values カンマ区切り値 - + Sort items by name 項目を名前順に並べ替える - + Import folder then files フォルダとファイルを追加 - + OPML Import OPML 読み込み - + File open failed. ファイルを開くことができません。 - + This does not appear to be a valid OPML file. これは有効なOPMLファイルではありません。 - + Pandoc import Pandoc 追加 - + <b>Info:</b> Manuskript can import from <b>markdown</b> or <b>OPML</b>. Pandoc will convert your document to either (see option below), and @@ -405,17 +405,17 @@ YAML関連のエラーが発生した場合は、このオプションを有効 - + Import using: - + Wrap lines: 行を折り返す: - + <p>Should pandoc create cosmetic / non-semantic line-breaks?</p><p> <b>auto</b>: wraps at 72 characters.<br> @@ -425,27 +425,27 @@ YAML関連のエラーが発生した場合は、このオプションを有効 - + Mind Map Import Mind Mapのインポート - + This does not appear to be a valid Mind Map file. これは有効なマインドマップのファイルではありません。 - + Mind Map import Mind Map インポート - + Import tip as: インポートのヒントは以下のとおりです。 - + Untitled Untitled @@ -701,7 +701,7 @@ YAML関連のエラーが発生した場合は、このオプションを有効 対立の原因 - + Outline 概要 @@ -746,157 +746,157 @@ YAML関連のエラーが発生した場合は、このオプションを有効 ヘルプ (&H) - + &Tools ツール (&T) - + &Edit 編集 (&E) - + &View 閲覧 (&V) - + &Mode モード (&M) - + &Cheat sheet 備忘録 - + Sea&rch 検索 (&R) - + &Navigation ナビゲーション (&N) - + &Open 開く (&O) - + Ctrl+O Ctrl+O - + &Save 保存 (&S) - + Ctrl+S Ctrl+S - + Sa&ve as... 名前を付けて保存... (&V) - + Ctrl+Shift+S Ctrl+Shift+S - + &Quit 終了 (&Q) - + Ctrl+Q Ctrl+Q - + &Show help texts ヘルプ文書を表示 (&S) - + Ctrl+Shift+B Ctrl+Shift+B - + &Spellcheck スペルチェック - + F9 F9 - + &Labels... ラベル... (&L) - + &Status... 状態... (&S) - + Tree ツリー - + &Simple シンプル - + &Fiction フィクション - + Index cards 索引目録 - + S&ettings 設定 - + F8 F8 - + &Close project プロジェクトを閉じる (&C) - + Co&mpile コンパイル - + F6 F6 - + &Frequency Analyzer @@ -906,195 +906,185 @@ YAML関連のエラーが発生した場合は、このオプションを有効 本の情報 - + &About About (&A) - + About Manuskript Manuskriptについて - + Manuskript Manuskript - + Project {} saved. - + WARNING: Project {} not saved. - + Project {} loaded. - - Project {} loaded with some errors: - - - - - * {} wasn't found in project file. - - - - + Project {} loaded with some errors. - + (~{} pages) - + Words: {}{} 字数:{}{} - + Book summary 本の要約 - + Project tree プロジェクトツリー - + Metadata メタデータ - + Story line - + Enter information about your book, and yourself. あなたの本とあなた自身に関する情報を入力してください。 - + The basic situation, in the form of a 'What if...?' question. Ex: 'What if the most dangerous evil wizard wasn't able to kill a baby?' (Harry Potter) - + Take time to think about a one sentence (~50 words) summary of your book. Then expand it to a paragraph, then to a page, then to a full summary. あなたの本の要約を50単語ほどで考えてください。この作業は時間をかけるべきでしょう。 それを段落、ページに落とし込み、最後に完全な要約を書きます。 - + Create your characters. あなたの登場人物を作りましょう。 - + Develop plots. プロットを作成します。 - + Build worlds. Create hierarchy of broad categories down to specific details. 世界を創造しましょう。Manuskriptは、一般的なものから詳細なものまで、様々な設定を作成します。 - + Create the outline of your masterpiece. あなたの傑作の輪郭を作ります。 - + Write. - + Debug info. Sometimes useful. デバッグ情報。時に便利なものです。 - + Dictionary 辞書 - + Nothing - + POV POV - + Label ラベル - + Progress 進捗 - + Compile 編纂 - + Icon color アイコンの色 - + Text color 文字色 - + Background color 背景色 - + Icon アイコン - + Text テキスト - + Background 背景 - + Border 境界線 - + Corner @@ -1104,307 +1094,307 @@ YAML関連のエラーが発生した場合は、このオプションを有効 プロットステップを追加 - + &Import… インポート… - + F7 F7 - + &Copy コピー - + Ctrl+C Ctrl+C - + C&ut 切り取り - + Ctrl+X Ctrl+X - + &Paste 貼り付け - + Ctrl+V Ctrl+V - + &Split… 分割 - + Ctrl+Shift+K Ctrl+Shift+K - + Sp&lit at cursor カーソル位置で分割 - + Ctrl+K Ctrl+K - + Ctrl+M Ctrl+M - + Ctrl+D Ctrl+D - + Del Del - + &Move Up 上に移動 (&M) - + Ctrl+Shift+Up Ctrl+Shift+Up - + M&ove Down 下に移動 (&O) - + Ctrl+Shift+Down Ctrl+Shift+Down - + Dupl&icate コピー - + &Delete 削除 - + &Rename 名前の変更 - + F2 F2 - + Organi&ze 整理 - + M&erge マージ - + &Format フォーマット - + &Header ヘッダ - + &Level 1 (setext) - + Ctrl+Alt+1 - + Level &2 - + Ctrl+Alt+2 - + Level &1 (atx) - + Ctrl+1 Ctrl+1 - + L&evel 2 - + Ctrl+2 Ctrl+2 - + Level &3 - + Ctrl+3 Ctrl+3 - + Level &4 - + Ctrl+4 Ctrl+4 - + Level &5 - + Ctrl+5 Ctrl+5 - + Level &6 - + Ctrl+6 Ctrl+6 - + &Bold - + Ctrl+B - + &Italic - + Ctrl+I - + &Strike - + &Verbatim - + Su&perscript - + Ctrl++ - + Subsc&ript - + Ctrl+- - + Co&mment block - + Ctrl+Shift+C - + Clear &formats - + Ctrl+0 Ctrl+0 - + &Comment line(s) 注釈行 (&C) - + &Ordered list 番号リスト (&O) - + &Unordered list 番号なしリスト (&U) - + B&lockquote 引用符 (&B) @@ -1414,52 +1404,52 @@ YAML関連のエラーが発生した場合は、このオプションを有効 選択したプロットを削除する - + The file {} does not exist. Has it been moved or deleted? ファイル {} は存在しません。移動または削除しましたか? - + Install {}{} to use spellcheck - + {} has no installed dictionaries - + {}{} is not installed - + Save project? - + Save changes to project "{}" before closing? - + Your changes will be lost if you don't save them. - + PyQt / Qt versions 5.11 and 5.12 are known to cause a crash which might result in a loss of data. - + PyQt {} and Qt {} are in use. - + Proceed with import at your own risk @@ -1469,12 +1459,12 @@ YAML関連のエラーが発生した場合は、このオプションを有効 - + Search - + Ctrl+F @@ -1498,6 +1488,76 @@ YAML関連のエラーが発生した場合は、このオプションを有効 Status 状態 + + + &Technical Support + + + + + How to obtain technical support for Manuskript. + + + + + F1 + F1 + + + + &Locate log file... + + + + + Locate log file + + + + + Locate the diagnostic log file used for this session. + + + + + Shift+F1 + + + + + Sorry! + + + + + This session is not being logged. + + + + + A log file is a Work in Progress! + + + + + The log file "{}" will continue to be written to until Manuskript is closed. + + + + + It will now be displayed in your file manager, but is of limited use until you close Manuskript. + + + + + Error! + + + + + An error was encountered while trying to show the log file below in your file manager. + + Search @@ -2219,42 +2279,42 @@ YAML関連のエラーが発生した場合は、このオプションを有効 SpellAction - + Spelling Suggestions 綴りの候補 - + &Add to dictionary 辞書を追加 (&A) - + &Remove from custom dictionary カスタム辞書から削除 (&R) - + &New Character - + &New Plot Item - + &New World Item - + &Correction Suggestions - + &Correction Suggestion @@ -2288,37 +2348,37 @@ YAML関連のエラーが発生した場合は、このオプションを有効 abstractModel - + Title 表題 - + POV POV - + Label ラベル - + Status 状態 - + Compile 編纂 - + Word count 単語数 - + Goal 目的 @@ -2359,12 +2419,12 @@ YAML関連のエラーが発生した場合は、このオプションを有効 characterModel - + Name 名前 - + Value @@ -2372,17 +2432,17 @@ YAML関連のエラーが発生した場合は、このオプションを有効 characterTreeView - + Main - + Secondary 第二項 - + Minor 重要ではない @@ -2814,72 +2874,72 @@ YAML関連のエラーが発生した場合は、このオプションを有効 fullScreenEditor - + Theme: 主題: - + {} words / {} {} 単語 / {} - + {} words {} 単語 - + Spellcheck 綴り照合 - + Navigation - + New Text - + Title 表題 - + Title: Show Full Path 表題:フルパスを表示 - + Theme selector 主題の選択 - + Word count 単語数 - + Progress 進捗 - + Progress: Auto Show/Hide 進捗: Auto Show/Hide - + Clock - + Clock: Show Seconds @@ -2958,14 +3018,6 @@ YAML関連のエラーが発生した場合は、このオプションを有効 設定 - - lastAccessedDirectoryInfo - - - Last accessed directory "{}" loaded. - 最後にアクセスしたディレクトリ "{}" がロードされました。 - - lineEditView @@ -3080,32 +3132,32 @@ YAML関連のエラーが発生した場合は、このオプションを有効 Alt+Up - + Root - + {} words {} 単語 - + ({} chars) {} words / {} - + {} words / {} - + {} chars - + {} chars @@ -3159,7 +3211,7 @@ YAML関連のエラーが発生した場合は、このオプションを有効 myPanel - + Auto-hide 自動的に隠す @@ -3313,12 +3365,12 @@ YAML関連のエラーが発生した場合は、このオプションを有効 outlineItem - + {} words / {} ({}) {} 単語 / {} ({}) - + {} words {} 単語 @@ -3326,17 +3378,17 @@ YAML関連のエラーが発生した場合は、このオプションを有効 pandocSettings - + General 全般 - + Table of Content - + Custom settings for {} @@ -3540,32 +3592,32 @@ YAML関連のエラーが発生した場合は、このオプションを有効 plotModel - + Name 名前 - + Meta - + New step - + Main - + Secondary 第二項 - + Minor 重要ではない @@ -3573,22 +3625,22 @@ YAML関連のエラーが発生した場合は、このオプションを有効 plotTreeView - + Main - + Secondary 第二項 - + Minor 重要ではない - + **Plot:** {} @@ -3652,52 +3704,52 @@ YAML関連のエラーが発生した場合は、このオプションを有効 references - + Not a reference: {}. - + Unknown reference: {}. - + Path: パス: - + Stats: - + POV: POV: - + Status: 状態: - + Label: ラベル: - + Short summary: 短い要約: - + Long summary: 長い要約: - + Notes: @@ -3717,72 +3769,72 @@ YAML関連のエラーが発生した場合は、このオプションを有効 - + Go to {}. - + Description 説明 - + Result 結果 - + Characters 登場人物 - + Resolution steps 解決手順 - + Passion - + Conflict 対立 - + <b>Unknown reference:</b> {}. - + Folder: <b>{}</b> - + Text: <b>{}</b> - + Character: <b>{}</b> 登場人物: <b>{}</b> - + Plot: <b>{}</b> - + World: <b>{name}</b>{path} 世界:<b>{name}</b>{path} - + Referenced in: @@ -3825,12 +3877,12 @@ YAML関連のエラーが発生した場合は、このオプションを有効 - + Restore - + Delete 削除 @@ -3890,12 +3942,12 @@ YAML関連のエラーが発生した場合は、このオプションを有効 {} 秒前 - + Line {}: 行 {}: - + Clear all すべて消去 @@ -3916,52 +3968,52 @@ YAML関連のエラーが発生した場合は、このオプションを有効 settingsWindow - + New status 新しい状態 - + New label 新しいラベル - + newtheme 新しい主題 - + New theme 新しい主題 - + (read-only) (読み取り専用) - + Open Image 画像を開く - + Image files (*.jpg; *.jpeg; *.png) 画像 (*.jpg; *.jpeg; *.png) - + Error Error - + Unable to load selected file 選択したファイルを読み込めませんでした - + Unable to add selected image: {} 選択した画像を追加できません: @@ -4049,22 +4101,22 @@ YAML関連のエラーが発生した場合は、このオプションを有効 tabSplitter - + Open selected items in that view. この画面で選択した項目を開きます。 - + Split horizontally 画面を水平方向に分割する - + Close split 画面の分割を閉じる - + Split vertically 縦に分割 @@ -4072,7 +4124,7 @@ YAML関連のエラーが発生した場合は、このオプションを有効 textEditView - + Various @@ -4171,27 +4223,27 @@ YAML関連のエラーが発生した場合は、このオプションを有効 - + Novel 小説 - + Novella 中編小説 - + Short Story 短編小説 - + Research paper 研究論文 - + Demo projects デモプロジェクト @@ -4226,147 +4278,147 @@ YAML関連のエラーが発生した場合は、このオプションを有効 作成 - + Open project プロジェクトを開く - + Manuskript project (*.msk);;All files (*) Manuskript project (*.msk);;All files (*) - + Save project as... 名前を付けてプロジェクトを保存... - + Manuskript project (*.msk) Manuskript project (*.msk) - + Manuskript Manuskript - + Create New Project 新しいプロジェクトを作成する - + Warning 警告 - + Overwrite existing project {} ? 既存のプロジェクト {} を上書きしますか? - + Empty fiction - + Chapter チャプター - + Scene シーン - + Trilogy 三部作 - + Book - + Section セクション - + Empty non-fiction - + words each. 単語 (各項目)。 - + of - + Text テキスト - + Something - + <b>Total:</b> {} words (~ {} pages) <b>合計:</b> {} 単語 (約 {} ページ) - + Fiction - + Non-fiction - + Idea アイディア - + Note ノート - + Research 研究 - + TODO TODO - + First draft 初稿 - + Second draft 第二稿 - + Final 決定稿 diff --git a/i18n/manuskript_ko.ts b/i18n/manuskript_ko.ts index 66100d8..7a39fe3 100644 --- a/i18n/manuskript_ko.ts +++ b/i18n/manuskript_ko.ts @@ -38,7 +38,7 @@ 형광 표시와 함께 미리 봅니다. - + Plain text 일반 텍스트 @@ -53,82 +53,82 @@ LaTeX를 깔아야 합니다. - + Error 오류 - + Standalone document (not just a fragment) (조각나지 않은) 독립 문서 - + Include a table of contents. 목차를 포함합니다. - + Number of sections level to include in TOC: 목차에 포함할 개요 수준의 단계수: - + Typographically correct output 인쇄용으로 올바르게 출력 - + Normalize the document (cleaner) 문서 정리 - + Specify the base level for headers: 제목의 기본 수준: - + Use reference-style links instead of inline links 인라인 링크 대신 참조 링크 사용 - + Use ATX-style headers ATX 형식의 제목 사용 - + Self-contained HTML files, with no dependencies 종속성이 없는 자체 HTML 파일 - + Use <q> tags for quotes in HTML HTML 인용문에 <q> 태그 쓰기 - + LaTeX engine used to produce the PDF. PDF를 제작하는 데 쓰이는 LaTeX 엔진입니다. - + Paper size: 용지 크기: - + Font size: 글자 크기: - + Class: 분류: - + Line spacing: 줄 간격: @@ -160,14 +160,14 @@ 텍스트가 마크다운 형식으로 되어 있다고 가정합니다. - + Simplest export to plain text. Allows you to use your own markup not understood by Manuskript, for example <a href='www.fountain.io'>Fountain</a>. 단순히 일반 텍스트로만 내보냅니다. <a href='www.fountain.io'>Fountain</a>처럼 Manuskript에서 쓰지 않는 자신만의 마크업을 허용합니다. - + <p>A universal document converter. Can be used to convert Markdown to a wide range of other formats.</p> <p>Website: <a href="http://www.pandoc.org">http://pandoc.org/</a></p> @@ -205,26 +205,26 @@ 서로 교환할 목적으로 만들어졌습니다. - + Disable YAML metadata block. Use that if you get YAML related error. YAML 메타데이터 블록을 비활성화합니다. YAML에 문제가 있을 때 사용하십시오. - + Convert to ePUB3 ePUB3로 변환 - + Could not process regular expression: {} 정규식을 처리하지 못했습니다: {} - + Choose output file… 내보낼 파일을 고르세요... @@ -333,12 +333,12 @@ YAML에 문제가 있을 때 사용하십시오. Import - + Markdown import 마크다운 가져오기 - + <b>Info:</b> A very simple parser that will go through a markdown document and create items for each titles.<br/>&nbsp; @@ -347,12 +347,12 @@ YAML에 문제가 있을 때 사용하십시오. 분석기입니다.<br/>&nbsp; - + Folder import 폴더 가져오기 - + <p><b>Info:</b> Imports a whole directory structure. Folders are added as folders, and plaintext documents within (you chose which ones by extension) @@ -364,47 +364,47 @@ YAML에 문제가 있을 때 사용하십시오. <p>(이미지나 다른 종류가 아닌) 텍스트 파일만 지원합니다.</p> - + Include only those extensions: 다음 확장자만 추가: - + Comma separated values 콤마로 구분된 값 - + Sort items by name 이름순으로 정렬 - + Import folder then files 폴더와 파일 가져오기 - + OPML Import OPML 가져오기 - + File open failed. 파일을 열지 못했습니다. - + This does not appear to be a valid OPML file. 유효한 OPML 파일이 아닌 것 같습니다. - + Pandoc import Pandoc 가져오기 - + <b>Info:</b> Manuskript can import from <b>markdown</b> or <b>OPML</b>. Pandoc will convert your document to either (see option below), and @@ -419,17 +419,17 @@ YAML에 문제가 있을 때 사용하십시오. <br/>&nbsp; - + Import using: 다음 형태로 가져오기: - + Wrap lines: 줄바꿈: - + <p>Should pandoc create cosmetic / non-semantic line-breaks?</p><p> <b>auto</b>: wraps at 72 characters.<br> @@ -443,27 +443,27 @@ YAML에 문제가 있을 때 사용하십시오. <b>보존</b>: 원본의 줄바꿈을 그대로 따라갑니다.</p> - + Mind Map Import 마인드맵 가져오기 - + This does not appear to be a valid Mind Map file. 유효한 마인드맵 파일이 아닌 것 같습니다. - + Mind Map import 마인드맵 가져오기 - + Import tip as: 다음 형태로 가져올 때의 조언: - + Untitled 무제 @@ -719,7 +719,7 @@ YAML에 문제가 있을 때 사용하십시오. - + Outline 개요 @@ -764,157 +764,157 @@ YAML에 문제가 있을 때 사용하십시오. 도움말(&H) - + &Tools 도구(&T) - + &Edit 편집(&E) - + &View 보기(&V) - + &Mode 모드(&M) - + &Cheat sheet 협서(&C) - + Sea&rch 찾기(&r) - + &Navigation 내비게이션(&N) - + &Open 열기(&O) - + Ctrl+O Ctrl+O - + &Save 갈무리(&S) - + Ctrl+S Ctrl+S - + Sa&ve as... 다른 이름으로 갈무리... (&v) - + Ctrl+Shift+S Ctrl+Shift+S - + &Quit 끝(&Q) - + Ctrl+Q Ctrl+Q - + &Show help texts 도움말 띄우기(&S) - + Ctrl+Shift+B Ctrl+Shift+B - + &Spellcheck 맞춤법 검사(&S) - + F9 F9 - + &Labels... 라벨... (&L) - + &Status... 상태... (&S) - + Tree 나무 - + &Simple 간단(&S) - + &Fiction 소설(&F) - + Index cards 색인 카드 - + S&ettings 설정(&e) - + F8 F8 - + &Close project 프로젝트 닫기(&C) - + Co&mpile 엮기(&m) - + F6 F6 - + &Frequency Analyzer 빈도 분석기(&F) @@ -924,196 +924,186 @@ YAML에 문제가 있을 때 사용하십시오. 책 정보 - + &About 정보(&A) - + About Manuskript Manuskript란 - + Manuskript Manuskript - + Project {} saved. 프로젝트 {}을(를) 갈무리하였습니다. - + WARNING: Project {} not saved. 경고: 프로젝트 {}을(를) 갈무리하지 않았습니다. - + Project {} loaded. 프로젝트 {}을(를) 불러왔습니다. - - Project {} loaded with some errors: - 불러온 프로젝트 {}에 다음 오류가 있습니다: - - - - * {} wasn't found in project file. - * {}을(를) 프로젝트 파일에서 찾지 못했습니다. - - - + Project {} loaded with some errors. 불러온 프로젝트 {}에 오류가 있습니다. - + (~{} pages) (~{} 쪽) - + Words: {}{} 낱말: {}{} - + Book summary 책 요약 - + Project tree 프로젝트 나무 - + Metadata 메타데이터 - + Story line 줄거리 - + Enter information about your book, and yourself. 당신과 당신의 책에 대한 정보를 입력하여 주십시오. - + The basic situation, in the form of a 'What if...?' question. Ex: 'What if the most dangerous evil wizard wasn't able to kill a baby?' (Harry Potter) ‘만약……?’이라는 질문 형태의 기본적인 상황입니다. 예: ‘만약 가장 위험하고 사악한 마법사가 아기를 죽이지 못했다면?’ (해리 포터) - + Take time to think about a one sentence (~50 words) summary of your book. Then expand it to a paragraph, then to a page, then to a full summary. 당신의 책을 한 문장(50 어절 정도)으로 간추려 보세요. 그 다음에 문단 단위, 쪽 단위, 전체 요약으로 부풀리세요. - + Create your characters. 등장인물을 만듭시다. - + Develop plots. 플롯을 구성합니다. - + Build worlds. Create hierarchy of broad categories down to specific details. 세계를 만듭니다. 광범위한 것부터 세세한 것까지 설정을 체계적으로 만들어 봅시다. - + Create the outline of your masterpiece. 당신이 만들 걸작의 테두리를 쳐 봅시다. - + Write. 써 보세요. - + Debug info. Sometimes useful. 디버그 정보입니다. 때론 도움이 됩니다. - + Dictionary 사전 - + Nothing 없음 - + POV 시점 - + Label 라벨 - + Progress 진척 - + Compile 엮기 - + Icon color 아이콘 색 - + Text color 글자 색 - + Background color 배경 색 - + Icon 아이콘 - + Text - + Background 배경 - + Border - + Corner @@ -1123,307 +1113,307 @@ YAML에 문제가 있을 때 사용하십시오. 사건 더하기 - + &Import… 가져오기... (&I) - + F7 F7 - + &Copy 복사(&C) - + Ctrl+C Ctrl+C - + C&ut 오리기(&C) - + Ctrl+X Ctrl+X - + &Paste 붙이기(&P) - + Ctrl+V Ctrl+V - + &Split… 쪼개기… (&S) - + Ctrl+Shift+K Ctrl+Shift+K - + Sp&lit at cursor 커서로 쪼개기(&l) - + Ctrl+K Ctrl+K - + Ctrl+M Ctrl+M - + Ctrl+D Ctrl+D - + Del Del - + &Move Up 위로 이동(&M) - + Ctrl+Shift+Up Ctrl+Shift+Up - + M&ove Down 아래로 이동(&o) - + Ctrl+Shift+Down Ctrl+Shift+Down - + Dupl&icate 복제(&i) - + &Delete 제거(&D) - + &Rename 이름 바꾸기(&R) - + F2 F2 - + Organi&ze 정리(&z) - + M&erge 합치기(&e) - + &Format 서식(&F) - + &Header 제목(&H) - + &Level 1 (setext) 수준 1(setext) (&L) - + Ctrl+Alt+1 Ctrl+Alt+1 - + Level &2 수준 &2 - + Ctrl+Alt+2 Ctrl+Alt+2 - + Level &1 (atx) 수준 &1(atx) - + Ctrl+1 Ctrl+1 - + L&evel 2 수준 2(&e) - + Ctrl+2 Ctrl+2 - + Level &3 수준 &3 - + Ctrl+3 Ctrl+3 - + Level &4 수준 &4 - + Ctrl+4 Ctrl+4 - + Level &5 수준 &5 - + Ctrl+5 Ctrl+5 - + Level &6 수준 &6 - + Ctrl+6 Ctrl+6 - + &Bold 굵게(&B) - + Ctrl+B Ctrl+B - + &Italic 기울여(&I) - + Ctrl+I Ctrl+I - + &Strike 취소선(&S) - + &Verbatim - + Su&perscript 위 첨자(&p) - + Ctrl++ Ctrl++ - + Subsc&ript 아래 첨자(&r) - + Ctrl+- Ctrl+- - + Co&mment block - + Ctrl+Shift+C Ctrl+Shift+C - + Clear &formats 서식 지우기 - + Ctrl+0 Ctrl+0 - + &Comment line(s) - + &Ordered list 번호 붙인 목록(&O) - + &Unordered list 번호 없는 목록(&U) - + B&lockquote 따옴표(&l) @@ -1433,52 +1423,52 @@ YAML에 문제가 있을 때 사용하십시오. 선택한 사건 빼기 - + The file {} does not exist. Has it been moved or deleted? 파일 {}이(가) 없습니다. 지우거나 옮기셨습니까? - + Install {}{} to use spellcheck 맞춤법 검사를 사용하기 위해 {}{} 깔기 - + {} has no installed dictionaries {}에 설치된 사전 없음 - + {}{} is not installed {}{} 미설치 - + Save project? 프로젝트 갈무리? - + Save changes to project "{}" before closing? 프로젝트 “{}”를 닫기 전에 변경 사항을 갈무리하시겠습니까? - + Your changes will be lost if you don't save them. 갈무리하지 않으면 고친 것을 날려 버립니다. - + PyQt / Qt versions 5.11 and 5.12 are known to cause a crash which might result in a loss of data. PyQt / Qt 버전 5.11과 5.12는 충돌을 일으켜 데이터를 날리는 것으로 알려져 있습니다. - + PyQt {} and Qt {} are in use. PyQt {}와(과) Qt {}를 쓰고 있습니다. - + Proceed with import at your own risk 속행 시 충돌과 데이터 손실 우려 @@ -1488,12 +1478,12 @@ YAML에 문제가 있을 때 사용하십시오. - + Search - + Ctrl+F @@ -1517,6 +1507,76 @@ YAML에 문제가 있을 때 사용하십시오. Status 상태 + + + &Technical Support + + + + + How to obtain technical support for Manuskript. + + + + + F1 + F1 + + + + &Locate log file... + + + + + Locate log file + + + + + Locate the diagnostic log file used for this session. + + + + + Shift+F1 + + + + + Sorry! + + + + + This session is not being logged. + + + + + A log file is a Work in Progress! + + + + + The log file "{}" will continue to be written to until Manuskript is closed. + + + + + It will now be displayed in your file manager, but is of limited use until you close Manuskript. + + + + + Error! + + + + + An error was encountered while trying to show the log file below in your file manager. + + Search @@ -2238,42 +2298,42 @@ YAML에 문제가 있을 때 사용하십시오. SpellAction - + Spelling Suggestions 추천 단어 - + &Add to dictionary 사전에 추가(&A) - + &Remove from custom dictionary 사용자 사전에서 제거(&R) - + &New Character - + &New Plot Item - + &New World Item - + &Correction Suggestions - + &Correction Suggestion @@ -2307,37 +2367,37 @@ YAML에 문제가 있을 때 사용하십시오. abstractModel - + Title 제목 - + POV 시점 - + Label 라벨 - + Status 상태 - + Compile 엮기 - + Word count 낱말 수 - + Goal 목표 @@ -2378,12 +2438,12 @@ YAML에 문제가 있을 때 사용하십시오. characterModel - + Name 이름 - + Value 비중 @@ -2391,17 +2451,17 @@ YAML에 문제가 있을 때 사용하십시오. characterTreeView - + Main 주연 - + Secondary 조연 - + Minor 단역 @@ -2833,72 +2893,72 @@ YAML에 문제가 있을 때 사용하십시오. fullScreenEditor - + Theme: 테마: - + {} words / {} {} 단어 / {} - + {} words {} 단어 - + Spellcheck 맞춤법 검사 - + Navigation 내비게이션 - + New Text 새 글 - + Title 제목 - + Title: Show Full Path - + Theme selector - + Word count 낱말 수 - + Progress 진척 - + Progress: Auto Show/Hide - + Clock - + Clock: Show Seconds @@ -2977,14 +3037,6 @@ YAML에 문제가 있을 때 사용하십시오. 설정 - - lastAccessedDirectoryInfo - - - Last accessed directory "{}" loaded. - 마지막으로 접근한 디렉터리 “{}”을(를) 불러왔습니다. - - lineEditView @@ -3099,32 +3151,32 @@ YAML에 문제가 있을 때 사용하십시오. Alt+Up - + Root - + {} words {} 단어 - + ({} chars) {} words / {} - + {} words / {} - + {} chars - + {} chars @@ -3178,7 +3230,7 @@ YAML에 문제가 있을 때 사용하십시오. myPanel - + Auto-hide @@ -3332,12 +3384,12 @@ YAML에 문제가 있을 때 사용하십시오. outlineItem - + {} words / {} ({}) {} 단어 / {} ({}) - + {} words {} 단어 @@ -3345,17 +3397,17 @@ YAML에 문제가 있을 때 사용하십시오. pandocSettings - + General 일반 - + Table of Content 목차 - + Custom settings for {} @@ -3559,32 +3611,32 @@ YAML에 문제가 있을 때 사용하십시오. plotModel - + Name 이름 - + Meta - + New step - + Main 주연 - + Secondary 조연 - + Minor 단역 @@ -3592,22 +3644,22 @@ YAML에 문제가 있을 때 사용하십시오. plotTreeView - + Main 주연 - + Secondary 조연 - + Minor 단역 - + **Plot:** {} @@ -3671,52 +3723,52 @@ YAML에 문제가 있을 때 사용하십시오. references - + Not a reference: {}. - + Unknown reference: {}. - + Path: 경로: - + Stats: - + POV: 시점: - + Status: 상태: - + Label: 라벨: - + Short summary: - + Long summary: - + Notes: @@ -3736,72 +3788,72 @@ YAML에 문제가 있을 때 사용하십시오. - + Go to {}. - + Description 설명 - + Result 결과 - + Characters 등장인물 - + Resolution steps 해결 과정 - + Passion - + Conflict 갈등 - + <b>Unknown reference:</b> {}. - + Folder: <b>{}</b> 폴더: <b>{}</b> - + Text: <b>{}</b> 글: <b>{}</b> - + Character: <b>{}</b> 등장인물: <b>{}</b> - + Plot: <b>{}</b> 플롯: <b>{}</b> - + World: <b>{name}</b>{path} 세계: <b>{name}</b>{path} - + Referenced in: @@ -3844,12 +3896,12 @@ YAML에 문제가 있을 때 사용하십시오. - + Restore - + Delete 제거 @@ -3909,12 +3961,12 @@ YAML에 문제가 있을 때 사용하십시오. {} 초 전 - + Line {}: - + Clear all @@ -3935,52 +3987,52 @@ YAML에 문제가 있을 때 사용하십시오. settingsWindow - + New status - + New label 새 라벨 - + newtheme 새테마 - + New theme 새 테마 - + (read-only) (읽기 전용) - + Open Image 그림 열기 - + Image files (*.jpg; *.jpeg; *.png) 그림 파일 (*.jpg; *.jpeg; *.png) - + Error 오류 - + Unable to load selected file 선택한 파일을 불러올 수 없음 - + Unable to add selected image: {} 선택한 그림을 추가할 수 없습니다: @@ -4068,22 +4120,22 @@ YAML에 문제가 있을 때 사용하십시오. tabSplitter - + Open selected items in that view. - + Split horizontally - + Close split - + Split vertically @@ -4091,7 +4143,7 @@ YAML에 문제가 있을 때 사용하십시오. textEditView - + Various 여럿 @@ -4190,27 +4242,27 @@ YAML에 문제가 있을 때 사용하십시오. - + Novel - + Novella - + Short Story - + Research paper - + Demo projects @@ -4245,147 +4297,147 @@ YAML에 문제가 있을 때 사용하십시오. 만들기 - + Open project 프로젝트 열기 - + Manuskript project (*.msk);;All files (*) Manuskript 프로젝트 (*.msk);;모든 파일 (*) - + Save project as... 다른 이름으로 프로젝트 갈무리... - + Manuskript project (*.msk) Manuskript 프로젝트 (*.msk) - + Manuskript Manuskript - + Create New Project 새로운 프로젝트 만들기 - + Warning 경고 - + Overwrite existing project {} ? 이미 존재하는 프로젝트 {}을(를) 덮어쓸까요? - + Empty fiction - + Chapter - + Scene - + Trilogy - + Book - + Section - + Empty non-fiction - + words each. - + of - + Text - + Something - + <b>Total:</b> {} words (~ {} pages) - + Fiction - + Non-fiction - + Idea - + Note - + Research - + TODO - + First draft - + Second draft - + Final diff --git a/i18n/manuskript_nb_NO.ts b/i18n/manuskript_nb_NO.ts index 61008b0..39ea2d7 100644 --- a/i18n/manuskript_nb_NO.ts +++ b/i18n/manuskript_nb_NO.ts @@ -38,7 +38,7 @@ Forhåndsvis med framhever. - + Plain text Klartekst @@ -53,82 +53,82 @@ Krever at LaTex er installert. - + Error - + Standalone document (not just a fragment) Frittstående dokument (ikke bare et fragment) - + Include a table of contents. Inkluder innholdsfortegnelse. - + Number of sections level to include in TOC: Aantal niveau's voor de inhoudstafel: - + Typographically correct output Typografisk korrekt utdata - + Normalize the document (cleaner) Normaliser dokumentet (renere) - + Specify the base level for headers: Angi rotnivå for hoder: - + Use reference-style links instead of inline links Bruk lenker i referansestil istedenfor innebygde lenker - + Use ATX-style headers Bruk hoder i ATX-stil - + Self-contained HTML files, with no dependencies Frittstående HTML-filer, uten noen avhengigheter - + Use <q> tags for quotes in HTML Gebruik <q> tags voor citaten in HTML - + LaTeX engine used to produce the PDF. LaTex-motor brukt til å produsere PDF-dokumentet. - + Paper size: Papirstørrelse: - + Font size: Skriftstørrelse: - + Class: Klasse: - + Line spacing: Linjeavstand: @@ -159,14 +159,14 @@ - + Simplest export to plain text. Allows you to use your own markup not understood by Manuskript, for example <a href='www.fountain.io'>Fountain</a>. Enkleste eksport til kartekst. Tillater deg å bruke ditt egen oppmerking, som ikke forstås av Manuskript, for eksempel <a href='www.fountain.io'>Fountain</a>. - + <p>A universal document converter. Can be used to convert Markdown to a wide range of other formats.</p> <p>Website: <a href="http://www.pandoc.org">http://pandoc.org/</a></p> @@ -202,25 +202,25 @@ av Manuskript, for eksempel <a href='www.fountain.io'>Fountain&l - + Disable YAML metadata block. Use that if you get YAML related error. - + Convert to ePUB3 Konverter til ePUB3 - + Could not process regular expression: {} Feil under behandling av regulært uttrykk: {} - + Choose output file… Velg utdatafil… @@ -329,24 +329,24 @@ Use that if you get YAML related error. Import - + Markdown import - + <b>Info:</b> A very simple parser that will go through a markdown document and create items for each titles.<br/>&nbsp; - + Folder import Mappeimport - + <p><b>Info:</b> Imports a whole directory structure. Folders are added as folders, and plaintext documents within (you chose which ones by extension) @@ -355,47 +355,47 @@ Use that if you get YAML related error. - + Include only those extensions: - + Comma separated values Kommainndelte verdier - + Sort items by name Sorter elementer etter navn - + Import folder then files - + OPML Import OPML-import - + File open failed. Filåpning mislyktes. - + This does not appear to be a valid OPML file. Dette later ikke til å være en gyldig OPML-fil. - + Pandoc import Pandoc-import - + <b>Info:</b> Manuskript can import from <b>markdown</b> or <b>OPML</b>. Pandoc will convert your document to either (see option below), and @@ -405,17 +405,17 @@ Use that if you get YAML related error. - + Import using: Importer med: - + Wrap lines: Linjebryting: - + <p>Should pandoc create cosmetic / non-semantic line-breaks?</p><p> <b>auto</b>: wraps at 72 characters.<br> @@ -425,27 +425,27 @@ Use that if you get YAML related error. - + Mind Map Import - + This does not appear to be a valid Mind Map file. - + Mind Map import - + Import tip as: - + Untitled Uten tittel @@ -701,7 +701,7 @@ Use that if you get YAML related error. Konfliktopphav - + Outline Utkast @@ -746,157 +746,157 @@ Use that if you get YAML related error. - + &Tools &Verktøy - + &Edit &Rediger - + &View - + &Mode - + &Cheat sheet &Jukseark - + Sea&rch &Søk - + &Navigation - + &Open - + Ctrl+O - + &Save &Lagre - + Ctrl+S - + Sa&ve as... - + Ctrl+Shift+S - + &Quit &Avslutt - + Ctrl+Q - + &Show help texts &Vis hjelpetekster - + Ctrl+Shift+B - + &Spellcheck &Stavekontroll - + F9 - + &Labels... - + &Status... - + Tree Tre - + &Simple &Enkelt - + &Fiction &Skjønnlitteratur - + Index cards - + S&ettings &Innstillinger - + F8 - + &Close project &Lukk prosjekt - + Co&mpile &Kompiler - + F6 - + &Frequency Analyzer &Frevensanalyse @@ -906,194 +906,184 @@ Use that if you get YAML related error. Bokinformasjon - + &About &Om - + About Manuskript Om Manuskript - + Manuskript - + Project {} saved. Prosjekt {} lagret. - + WARNING: Project {} not saved. ADVARSEL: Prosjekt {} er ikke lagret. - + Project {} loaded. Prosjekt {} innlastet. - - Project {} loaded with some errors: - Prosjekt {} innlastet med noen feil: - - - - * {} wasn't found in project file. - * {} ble ikke funnet i prosjektfila. - - - + Project {} loaded with some errors. Prosjekt {} innlastet med noen feil. - + (~{} pages) - + Words: {}{} Ord: {}{} - + Book summary Boksammendrag - + Project tree Prosjekttre - + Metadata - + Story line - + Enter information about your book, and yourself. - + The basic situation, in the form of a 'What if...?' question. Ex: 'What if the most dangerous evil wizard wasn't able to kill a baby?' (Harry Potter) - + Take time to think about a one sentence (~50 words) summary of your book. Then expand it to a paragraph, then to a page, then to a full summary. - + Create your characters. Opprett dine karakterer - + Develop plots. - + Build worlds. Create hierarchy of broad categories down to specific details. - + Create the outline of your masterpiece. - + Write. Skriv. - + Debug info. Sometimes useful. - + Dictionary Ordbok - + Nothing Ingenting - + POV - + Label - + Progress Fremdrift - + Compile Kompiler - + Icon color - + Text color - + Background color Bakgrunnsfarge - + Icon - + Text - + Background Bakgrunn - + Border Kant - + Corner Hjørne @@ -1103,307 +1093,307 @@ Use that if you get YAML related error. Legg til plottsteg - + &Import… &Importer… - + F7 - + &Copy &Kopier - + Ctrl+C - + C&ut - + Ctrl+X - + &Paste &Lim inn - + Ctrl+V - + &Split… &Del opp… - + Ctrl+Shift+K - + Sp&lit at cursor - + Ctrl+K - + Ctrl+M - + Ctrl+D - + Del - + &Move Up - + Ctrl+Shift+Up - + M&ove Down - + Ctrl+Shift+Down - + Dupl&icate - + &Delete - + &Rename &Gi nytt navn - + F2 - + Organi&ze &Organiser - + M&erge &Flett - + &Format &Formater - + &Header &Hode - + &Level 1 (setext) &Nivå 1 (setext) - + Ctrl+Alt+1 Ctrl+Alt+1 - + Level &2 Nivå &2 - + Ctrl+Alt+2 Ctrl+Alt+2 - + Level &1 (atx) Nivå %2 (atx) - + Ctrl+1 Ctrl+1 - + L&evel 2 N&ivå 2 - + Ctrl+2 Ctrl+2 - + Level &3 Nivå &3 - + Ctrl+3 Ctrl+3 - + Level &4 Nivå &4 - + Ctrl+4 Ctrl+4 - + Level &5 Nivå &5 - + Ctrl+5 Ctrl+5 - + Level &6 Nivå &6 - + Ctrl+6 Ctrl+6 - + &Bold &Fet - + Ctrl+B Ctrl+B - + &Italic &Kursiv - + Ctrl+I Ctrl+I - + &Strike &Gjennomstrek - + &Verbatim &Verbatim - + Su&perscript He&vet skrift - + Ctrl++ Ctrl++ - + Subsc&ript Senket sk&rift - + Ctrl+- Ctrl+- - + Co&mment block Ko&mmentarblokk - + Ctrl+Shift+C Ctrl+Shift+C - + Clear &formats Tøm &formater - + Ctrl+0 Ctrl+0 - + &Comment line(s) &Kommentarlinje(r) - + &Ordered list &Anordnet liste - + &Unordered list &Ikke anordnet liste - + B&lockquote B&lokksitat @@ -1413,52 +1403,52 @@ Use that if you get YAML related error. Fjern valgte plottsteg - + The file {} does not exist. Has it been moved or deleted? Filen {} finnes ikke. Har den blitt flyttet eller slettet? - + Install {}{} to use spellcheck Installer {}{} for å bruke stavekontroll - + {} has no installed dictionaries {} har ingen installerte ordbøker - + {}{} is not installed {}{} er ikke installert - + Save project? Lagre prosjekt? - + Save changes to project "{}" before closing? Lagre endringer i prosjektet «{}» før lukking? - + Your changes will be lost if you don't save them. Dine endringer vil gå tapt hvis du ikke lagrer dem. - + PyQt / Qt versions 5.11 and 5.12 are known to cause a crash which might result in a loss of data. PyQt / Qt-versjonene 5.11 og 5.12 er kjent for å forårsake kræsj som kan resultere i datatap. - + PyQt {} and Qt {} are in use. PyQt {} og Qt {} er i bruk. - + Proceed with import at your own risk Å fortsette kan forårsake kræsj og datatap @@ -1468,12 +1458,12 @@ Use that if you get YAML related error. - + Search - + Ctrl+F @@ -1497,6 +1487,76 @@ Use that if you get YAML related error. Status + + + &Technical Support + + + + + How to obtain technical support for Manuskript. + + + + + F1 + + + + + &Locate log file... + + + + + Locate log file + + + + + Locate the diagnostic log file used for this session. + + + + + Shift+F1 + + + + + Sorry! + + + + + This session is not being logged. + + + + + A log file is a Work in Progress! + + + + + The log file "{}" will continue to be written to until Manuskript is closed. + + + + + It will now be displayed in your file manager, but is of limited use until you close Manuskript. + + + + + Error! + + + + + An error was encountered while trying to show the log file below in your file manager. + + Search @@ -2218,42 +2278,42 @@ Use that if you get YAML related error. SpellAction - + Spelling Suggestions - + &Add to dictionary &Legg til i ordbok - + &Remove from custom dictionary - + &New Character - + &New Plot Item - + &New World Item - + &Correction Suggestions - + &Correction Suggestion @@ -2287,37 +2347,37 @@ Use that if you get YAML related error. abstractModel - + Title Tittel - + POV - + Label - + Status - + Compile Kompiler - + Word count Antall ord - + Goal Mål @@ -2358,12 +2418,12 @@ Use that if you get YAML related error. characterModel - + Name - + Value Verdi @@ -2371,17 +2431,17 @@ Use that if you get YAML related error. characterTreeView - + Main Hoved - + Secondary Sekundær - + Minor @@ -2813,72 +2873,72 @@ Use that if you get YAML related error. fullScreenEditor - + Theme: - + {} words / {} - + {} words {} ord - + Spellcheck Stavekontroll - + Navigation Navigasjon - + New Text Ny tekst - + Title Tittel - + Title: Show Full Path Tittel: Vis full sti - + Theme selector Draktvalg - + Word count Ordtelling - + Progress Framdrift - + Progress: Auto Show/Hide Framdrift: Automatisk visning/skjuling - + Clock Klokke - + Clock: Show Seconds Klokke: Vis sekunder @@ -2957,14 +3017,6 @@ Use that if you get YAML related error. - - lastAccessedDirectoryInfo - - - Last accessed directory "{}" loaded. - Sist brukte mappe "{}" valgt. - - lineEditView @@ -3079,32 +3131,32 @@ Use that if you get YAML related error. - + Root - + {} words {} ord - + ({} chars) {} words / {} - + {} words / {} - + {} chars - + {} chars @@ -3158,7 +3210,7 @@ Use that if you get YAML related error. myPanel - + Auto-hide @@ -3312,12 +3364,12 @@ Use that if you get YAML related error. outlineItem - + {} words / {} ({}) {} ord / {} ({}) - + {} words {} ord @@ -3325,17 +3377,17 @@ Use that if you get YAML related error. pandocSettings - + General - + Table of Content - + Custom settings for {} Egendefinerte innstillinger for {} @@ -3539,32 +3591,32 @@ Use that if you get YAML related error. plotModel - + Name - + Meta - + New step - + Main - + Secondary - + Minor @@ -3572,22 +3624,22 @@ Use that if you get YAML related error. plotTreeView - + Main - + Secondary - + Minor - + **Plot:** {} @@ -3651,52 +3703,52 @@ Use that if you get YAML related error. references - + Not a reference: {}. - + Unknown reference: {}. - + Path: Sti: - + Stats: - + POV: - + Status: - + Label: - + Short summary: Kort sammendrag: - + Long summary: Langt sammendrag: - + Notes: @@ -3716,72 +3768,72 @@ Use that if you get YAML related error. - + Go to {}. - + Description - + Result Resultat - + Characters - + Resolution steps - + Passion - + Conflict Konflikt - + <b>Unknown reference:</b> {}. <b>Ukjent referanse:</b> {}. - + Folder: <b>{}</b> Mappe: <b>{}</b> - + Text: <b>{}</b> - + Character: <b>{}</b> - + Plot: <b>{}</b> Plott: <b>{}</b> - + World: <b>{name}</b>{path} - + Referenced in: @@ -3824,12 +3876,12 @@ Use that if you get YAML related error. - + Restore - + Delete @@ -3889,12 +3941,12 @@ Use that if you get YAML related error. {} sekunder siden - + Line {}: - + Clear all Tøm alt @@ -3915,52 +3967,52 @@ Use that if you get YAML related error. settingsWindow - + New status - + New label - + newtheme - + New theme - + (read-only) - + Open Image Åpne bilde - + Image files (*.jpg; *.jpeg; *.png) Bildefiler (*.jpg; *.jpeg; *.png) - + Error Feil - + Unable to load selected file Kunne ikke laste inn valgt fil - + Unable to add selected image: {} Kunne ikke legge til valgt bilde: @@ -4062,22 +4114,22 @@ Use that if you get YAML related error. tabSplitter - + Open selected items in that view. - + Split horizontally Del vannrett - + Close split - + Split vertically Del loddrett @@ -4085,7 +4137,7 @@ Use that if you get YAML related error. textEditView - + Various Ymse @@ -4184,27 +4236,27 @@ Use that if you get YAML related error. Tom - + Novel Roman - + Novella Novelle - + Short Story - + Research paper - + Demo projects Demoprosjekter @@ -4239,147 +4291,147 @@ Use that if you get YAML related error. Opprett - + Open project - + Manuskript project (*.msk);;All files (*) Manuskript-prosjekt (*.msk);;Alle filer (*) - + Save project as... Lagre prosjekt som… - + Manuskript project (*.msk) Manuskript-prosjekt (*.msk) - + Manuskript - + Create New Project Opprett nytt prosjekt - + Warning Advarsel - + Overwrite existing project {} ? Overskriv eksisterende prosjekt {}? - + Empty fiction - + Chapter - + Scene - + Trilogy Trilogi - + Book - + Section Avsnitt - + Empty non-fiction - + words each. ord hver. - + of - + Text - + Something Noe - + <b>Total:</b> {} words (~ {} pages) - + Fiction - + Non-fiction - + Idea - + Note - + Research - + TODO - + First draft Første utkast - + Second draft Andre utkast - + Final Sluttprodukt diff --git a/i18n/manuskript_nl.ts b/i18n/manuskript_nl.ts index 0816483..37b5002 100644 --- a/i18n/manuskript_nl.ts +++ b/i18n/manuskript_nl.ts @@ -38,7 +38,7 @@ Vooruitblik met markeringen. - + Plain text Tekst zonder opmaak @@ -53,82 +53,82 @@ Latex moet geïnstalleerd zijn. - + Error Fout - + Standalone document (not just a fragment) Alleenstaand document (niet alleen een fragment) - + Include a table of contents. Inhoudstafel invoegen. - + Number of sections level to include in TOC: Aantal niveau's op te nemen in de inhoudsopgave: - + Typographically correct output Typografisch correcte uitvoer - + Normalize the document (cleaner) Normaliseer - + Specify the base level for headers: Geef het basisniveau voor kopteksten: - + Use reference-style links instead of inline links Referentie-stijl links gebruiken in plaats van inline links - + Use ATX-style headers Gebruik van ATX-stijl headers - + Self-contained HTML files, with no dependencies Zelfstandige html-bestanden, zonder afhankelijkheden - + Use <q> tags for quotes in HTML Gebruik <q>tags voor aanhalingstekens in HTML - + LaTeX engine used to produce the PDF. latex: het LaTeX-formaat. - + Paper size: Papierformaat: - + Font size: Tekengrootte: - + Class: Klasse: - + Line spacing: Regelafstand: @@ -160,14 +160,14 @@ Veronderstelt dat de teksten zijn opgemaakt in markdown. - + Simplest export to plain text. Allows you to use your own markup not understood by Manuskript, for example <a href='www.fountain.io'>Fountain</a>. Simpelste export naar ongemarkeerde text. Laat je je eigen markup gebruiken die niet begrepen wordt door manuskript, bijvoorbeeld <a href='www.fountain.io'>Fountain</a>. - + <p>A universal document converter. Can be used to convert Markdown to a wide range of other formats.</p> <p>Website: <a href="http://www.pandoc.org">http://pandoc.org/</a></p> @@ -207,26 +207,26 @@ door een outliner. - + Disable YAML metadata block. Use that if you get YAML related error. Schakel het YAML metadata block uit. Gebruik dit bij een YAML gerelateerde foutmelding. - + Convert to ePUB3 Converteer naar ePUB3 - + Could not process regular expression: {} Fout bij de verwerking van reguliere expressie : {} - + Choose output file… Kies uitvoerbestand..... @@ -335,24 +335,24 @@ Gebruik dit bij een YAML gerelateerde foutmelding. Import - + Markdown import - + <b>Info:</b> A very simple parser that will go through a markdown document and create items for each titles.<br/>&nbsp; - + Folder import - + <p><b>Info:</b> Imports a whole directory structure. Folders are added as folders, and plaintext documents within (you chose which ones by extension) @@ -361,47 +361,47 @@ Gebruik dit bij een YAML gerelateerde foutmelding. - + Include only those extensions: - + Comma separated values Door komma's gescheiden waarden - + Sort items by name - + Import folder then files - + OPML Import - + File open failed. - + This does not appear to be a valid OPML file. - + Pandoc import - + <b>Info:</b> Manuskript can import from <b>markdown</b> or <b>OPML</b>. Pandoc will convert your document to either (see option below), and @@ -411,17 +411,17 @@ Gebruik dit bij een YAML gerelateerde foutmelding. - + Import using: - + Wrap lines: - + <p>Should pandoc create cosmetic / non-semantic line-breaks?</p><p> <b>auto</b>: wraps at 72 characters.<br> @@ -431,27 +431,27 @@ Gebruik dit bij een YAML gerelateerde foutmelding. - + Mind Map Import - + This does not appear to be a valid Mind Map file. - + Mind Map import - + Import tip as: - + Untitled @@ -707,7 +707,7 @@ Gebruik dit bij een YAML gerelateerde foutmelding. - + Outline @@ -752,157 +752,157 @@ Gebruik dit bij een YAML gerelateerde foutmelding. - + &Tools - + &Edit - + &View - + &Mode - + &Cheat sheet - + Sea&rch - + &Navigation - + &Open - + Ctrl+O - + &Save - + Ctrl+S - + Sa&ve as... - + Ctrl+Shift+S - + &Quit - + Ctrl+Q - + &Show help texts - + Ctrl+Shift+B - + &Spellcheck - + F9 - + &Labels... - + &Status... - + Tree - + &Simple - + &Fiction - + Index cards - + S&ettings - + F8 - + &Close project - + Co&mpile - + F6 - + &Frequency Analyzer @@ -912,194 +912,184 @@ Gebruik dit bij een YAML gerelateerde foutmelding. - + &About - + About Manuskript - + Manuskript - + Project {} saved. - + WARNING: Project {} not saved. - + Project {} loaded. - - Project {} loaded with some errors: - - - - - * {} wasn't found in project file. - - - - + Project {} loaded with some errors. - + (~{} pages) - + Words: {}{} - + Book summary - + Project tree - + Metadata - + Story line - + Enter information about your book, and yourself. - + The basic situation, in the form of a 'What if...?' question. Ex: 'What if the most dangerous evil wizard wasn't able to kill a baby?' (Harry Potter) - + Take time to think about a one sentence (~50 words) summary of your book. Then expand it to a paragraph, then to a page, then to a full summary. - + Create your characters. - + Develop plots. - + Build worlds. Create hierarchy of broad categories down to specific details. - + Create the outline of your masterpiece. - + Write. - + Debug info. Sometimes useful. - + Dictionary - + Nothing - + POV - + Label - + Progress - + Compile - + Icon color - + Text color - + Background color - + Icon - + Text - + Background - + Border - + Corner @@ -1109,307 +1099,307 @@ Gebruik dit bij een YAML gerelateerde foutmelding. Plotstap toevoegen - + &Import… - + F7 - + &Copy - + Ctrl+C - + C&ut - + Ctrl+X - + &Paste - + Ctrl+V - + &Split… - + Ctrl+Shift+K - + Sp&lit at cursor - + Ctrl+K - + Ctrl+M - + Ctrl+D - + Del - + &Move Up O&mhoog - + Ctrl+Shift+Up - + M&ove Down &Omlaag - + Ctrl+Shift+Down Ctrl+Shift+Neer - + Dupl&icate Dupl&iceer - + &Delete - + &Rename He&rnoem - + F2 - + Organi&ze Organi&seer - + M&erge Sam&envoegen - + &Format &Opmaken - + &Header Kop - + &Level 1 (setext) Niveau 1 (setext) - + Ctrl+Alt+1 Ctrl+Alt+1 - + Level &2 Niveau &2 - + Ctrl+Alt+2 Ctrl+Alt+2 - + Level &1 (atx) Niveau &1 (atx) - + Ctrl+1 Ctrl+1 - + L&evel 2 L&level 2 - + Ctrl+2 Ctrl+2 - + Level &3 Niveau &3 - + Ctrl+3 Ctrl+3 - + Level &4 Niveau &4 - + Ctrl+4 Ctrl+4 - + Level &5 Niveau &5 - + Ctrl+5 Ctrl+5 - + Level &6 Niveau &6 - + Ctrl+6 Ctrl+6 - + &Bold &Dikgedrukt - + Ctrl+B Ctrl+B - + &Italic &Schuingedrukt - + Ctrl+I Ctrl+I - + &Strike &Doorgestreept - + &Verbatim - + Su&perscript - + Ctrl++ Ctrl++ - + Subsc&ript - + Ctrl+- Ctrl+- - + Co&mment block - + Ctrl+Shift+C - + Clear &formats - + Ctrl+0 Ctrl+0 - + &Comment line(s) - + &Ordered list - + &Unordered list - + B&lockquote @@ -1419,52 +1409,52 @@ Gebruik dit bij een YAML gerelateerde foutmelding. - + The file {} does not exist. Has it been moved or deleted? - + Install {}{} to use spellcheck - + {} has no installed dictionaries - + {}{} is not installed - + Save project? - + Save changes to project "{}" before closing? - + Your changes will be lost if you don't save them. - + PyQt / Qt versions 5.11 and 5.12 are known to cause a crash which might result in a loss of data. - + PyQt {} and Qt {} are in use. - + Proceed with import at your own risk @@ -1474,12 +1464,12 @@ Gebruik dit bij een YAML gerelateerde foutmelding. - + Search - + Ctrl+F @@ -1503,6 +1493,76 @@ Gebruik dit bij een YAML gerelateerde foutmelding. Status + + + &Technical Support + + + + + How to obtain technical support for Manuskript. + + + + + F1 + + + + + &Locate log file... + + + + + Locate log file + + + + + Locate the diagnostic log file used for this session. + + + + + Shift+F1 + + + + + Sorry! + + + + + This session is not being logged. + + + + + A log file is a Work in Progress! + + + + + The log file "{}" will continue to be written to until Manuskript is closed. + + + + + It will now be displayed in your file manager, but is of limited use until you close Manuskript. + + + + + Error! + + + + + An error was encountered while trying to show the log file below in your file manager. + + Search @@ -2224,42 +2284,42 @@ Gebruik dit bij een YAML gerelateerde foutmelding. SpellAction - + Spelling Suggestions - + &Add to dictionary - + &Remove from custom dictionary - + &New Character - + &New Plot Item - + &New World Item - + &Correction Suggestions - + &Correction Suggestion @@ -2293,37 +2353,37 @@ Gebruik dit bij een YAML gerelateerde foutmelding. abstractModel - + Title - + POV - + Label - + Status - + Compile - + Word count - + Goal @@ -2364,12 +2424,12 @@ Gebruik dit bij een YAML gerelateerde foutmelding. characterModel - + Name - + Value @@ -2377,17 +2437,17 @@ Gebruik dit bij een YAML gerelateerde foutmelding. characterTreeView - + Main - + Secondary - + Minor @@ -2819,72 +2879,72 @@ Gebruik dit bij een YAML gerelateerde foutmelding. fullScreenEditor - + Theme: - + {} words / {} - + {} words - + Spellcheck - + Navigation - + New Text - + Title - + Title: Show Full Path - + Theme selector - + Word count - + Progress - + Progress: Auto Show/Hide - + Clock - + Clock: Show Seconds @@ -2963,14 +3023,6 @@ Gebruik dit bij een YAML gerelateerde foutmelding. - - lastAccessedDirectoryInfo - - - Last accessed directory "{}" loaded. - - - lineEditView @@ -3085,32 +3137,32 @@ Gebruik dit bij een YAML gerelateerde foutmelding. - + Root - + {} words - + ({} chars) {} words / {} - + {} words / {} - + {} chars - + {} chars @@ -3164,7 +3216,7 @@ Gebruik dit bij een YAML gerelateerde foutmelding. myPanel - + Auto-hide @@ -3318,12 +3370,12 @@ Gebruik dit bij een YAML gerelateerde foutmelding. outlineItem - + {} words / {} ({}) - + {} words @@ -3331,17 +3383,17 @@ Gebruik dit bij een YAML gerelateerde foutmelding. pandocSettings - + General - + Table of Content - + Custom settings for {} @@ -3545,32 +3597,32 @@ Gebruik dit bij een YAML gerelateerde foutmelding. plotModel - + Name - + Meta - + New step - + Main - + Secondary - + Minor @@ -3578,22 +3630,22 @@ Gebruik dit bij een YAML gerelateerde foutmelding. plotTreeView - + Main - + Secondary - + Minor - + **Plot:** {} @@ -3657,52 +3709,52 @@ Gebruik dit bij een YAML gerelateerde foutmelding. references - + Not a reference: {}. - + Unknown reference: {}. - + Path: - + Stats: - + POV: - + Status: - + Label: - + Short summary: - + Long summary: - + Notes: @@ -3722,72 +3774,72 @@ Gebruik dit bij een YAML gerelateerde foutmelding. - + Go to {}. - + Description - + Result - + Characters - + Resolution steps - + Passion - + Conflict - + <b>Unknown reference:</b> {}. - + Folder: <b>{}</b> - + Text: <b>{}</b> - + Character: <b>{}</b> - + Plot: <b>{}</b> - + World: <b>{name}</b>{path} - + Referenced in: @@ -3830,12 +3882,12 @@ Gebruik dit bij een YAML gerelateerde foutmelding. - + Restore - + Delete @@ -3895,12 +3947,12 @@ Gebruik dit bij een YAML gerelateerde foutmelding. - + Line {}: - + Clear all @@ -3921,52 +3973,52 @@ Gebruik dit bij een YAML gerelateerde foutmelding. settingsWindow - + New status - + New label - + newtheme - + New theme - + (read-only) - + Open Image - + Image files (*.jpg; *.jpeg; *.png) - + Error Fout - + Unable to load selected file - + Unable to add selected image: {} @@ -4053,22 +4105,22 @@ Gebruik dit bij een YAML gerelateerde foutmelding. tabSplitter - + Open selected items in that view. - + Split horizontally - + Close split - + Split vertically @@ -4076,7 +4128,7 @@ Gebruik dit bij een YAML gerelateerde foutmelding. textEditView - + Various @@ -4175,27 +4227,27 @@ Gebruik dit bij een YAML gerelateerde foutmelding. - + Novel - + Novella - + Short Story - + Research paper - + Demo projects @@ -4230,147 +4282,147 @@ Gebruik dit bij een YAML gerelateerde foutmelding. - + Open project - + Manuskript project (*.msk);;All files (*) - + Save project as... - + Manuskript project (*.msk) - + Manuskript - + Create New Project - + Warning - + Overwrite existing project {} ? - + Empty fiction - + Chapter - + Scene - + Trilogy - + Book - + Section - + Empty non-fiction - + words each. - + of - + Text - + Something - + <b>Total:</b> {} words (~ {} pages) - + Fiction - + Non-fiction - + Idea - + Note - + Research - + TODO - + First draft - + Second draft - + Final diff --git a/i18n/manuskript_pl.ts b/i18n/manuskript_pl.ts index 82a2ef7..5ea1712 100644 --- a/i18n/manuskript_pl.ts +++ b/i18n/manuskript_pl.ts @@ -3,89 +3,89 @@ Export - + Standalone document (not just a fragment) Samodzielny dokument (nie tylko fragment) - + Include a table of contents. Dołącz spis treści. - + Number of sections level to include in TOC: Liczba poziomów sekcji do zawarcia w TOC: - + Typographically correct output Typograficznie poprawne - + Normalize the document (cleaner) Znormalizuj dokument (czystsza składnia) - + Specify the base level for headers: Ustal bazowy poziom dla nagłówków: - + Disable YAML metadata block. Use that if you get YAML related error. Wyłącz blok metadanych YAML. Włącz tę opcję jeśli otrzymasz błąd związany z YAML. - + Use reference-style links instead of inline links Użyj odnośników zamiast linków wbudowanych - + Use ATX-style headers Użyj nagłówków typu AXT - + Self-contained HTML files, with no dependencies Samozawierające pliki html, bez plików zależnych - + Use <q> tags for quotes in HTML Użyj taga <q> dla cytatów w HTML - + LaTeX engine used to produce the PDF. Silnik LaTeX używany do tworzenia plików PDF. - + Convert to ePUB3 Konwertuj do ePUB3 - + Paper size: Rozmiar papieru: - + Font size: Rozmiar czcionki: - + Class: Klasa: - + Line spacing: Rozmiar interlinii: @@ -160,7 +160,7 @@ przez outliner. prawidłowa instalacja LaTeX. Zobacz rekomendacje pandoc na: <a href="http://pandoc.org/installing.html">http://pandoc.org/installing.html</a>. Jeśli chcesz wsparcia unicode, potrzebujesz XeLateX. - + <p>A universal document converter. Can be used to convert Markdown to a wide range of other formats.</p> <p>Website: <a href="http://www.pandoc.org">http://pandoc.org/</a></p> @@ -170,7 +170,7 @@ przez outliner. - + Error Błąd @@ -200,12 +200,12 @@ przez outliner. Wyjście HTML - + Plain text Zwykły tekst - + Simplest export to plain text. Allows you to use your own markup not understood by Manuskript, for example <a href='www.fountain.io'>Fountain</a>. Najprostszy eksport do zwykłego tekstu. Pozwala na użycie własnego języka markup niezrozumiałego dla manuskript, na przykład <a href='www.fountain.io'>Fountain</a>. @@ -216,14 +216,14 @@ przez outliner. Domyślny eksporter, zapewnia podstawowe formaty używane przez inne eksportery. - + Could not process regular expression: {} Błąd podczas przetwarzania wyrażenia regularnego: {} - + Choose output file… Wybierz plik wyjściowy @@ -332,12 +332,12 @@ przez outliner. Import - + Markdown import Import markdown - + <b>Info:</b> A very simple parser that will go through a markdown document and create items for each titles.<br/>&nbsp; @@ -346,12 +346,12 @@ parser, który prześledzi znaczniki dokumentu i stworzy pozycje dla każdego tytułu.<br/>&nbsp; - + Folder import Import folderu - + <p><b>Info:</b> Imports a whole directory structure. Folders are added as folders, and plaintext documents within (you chose which ones by extension) @@ -361,47 +361,47 @@ i stworzy pozycje dla każdego tytułu.<br/>&nbsp; <p>Wspierane są tylko pliki tekstowe (nie obrazy, pliki binarne, inne).</p> - + Include only those extensions: Uwzględnij wyłącznie te rozszerzenia: - + Comma separated values Wartości oddzielone przecinkiem - + Sort items by name Sortuj elementy wg nazwy - + Import folder then files Zaimportuj folder, a następnie pliki - + OPML Import Import OPML - + File open failed. Otwarcie pliku nie powiodło się. - + This does not appear to be a valid OPML file. To nie jest prawidłowy plik OPML. - + Pandoc import Import Pandoc - + <b>Info:</b> Manuskript can import from <b>markdown</b> or <b>OPML</b>. Pandoc will convert your document to either (see option below), and @@ -411,17 +411,17 @@ i stworzy pozycje dla każdego tytułu.<br/>&nbsp; <b>Informacja:</b>Manuskript potrafi importować <b>markdown</b> i <b>OPML</b>. Pandoc przekonwertuje twoje dokumenty do któregoś z nich (zobacz opcję poniżej) i zostaną one zaimportowane do programu manuskript. Któryś z nich powinien dać lepsze efekty, zależnie od twojego dokumentu.<br/>&nbsp; - + Import using: Zaimportuj używając: - + Wrap lines: Zawijaj linie: - + <p>Should pandoc create cosmetic / non-semantic line-breaks?</p><p> <b>auto</b>: wraps at 72 characters.<br> @@ -434,27 +434,27 @@ i stworzy pozycje dla każdego tytułu.<br/>&nbsp; <b>zachowaj</b>: próbuje zachować zawijanie wierszy z oryginalnego dokumentu.</p> - + Mind Map Import Import Mind Map - + This does not appear to be a valid Mind Map file. To nie jest prawidłowy plik Mind Map. - + Mind Map import Importuj Mind Map - + Import tip as: Importuj wskazówkę jako: - + Untitled Bez tytułu @@ -720,7 +720,7 @@ i stworzy pozycje dla każdego tytułu.<br/>&nbsp; Źródło konfliktu - + Outline Zarys @@ -765,655 +765,645 @@ i stworzy pozycje dla każdego tytułu.<br/>&nbsp; &Pomoc - + &Tools &Narzędzia - + &Edit &Edycja - + &Format &Formatowanie - + &Header &Nagłówek - + &View &Widok - + &Mode &Tryb - + Organi&ze Organi&zuj - + &Cheat sheet Ś&ciągawka - + Sea&rch &Szukaj - + &Navigation &Nawigacja - + &Open &Otwórz - + Ctrl+O Ctrl+O - + &Save &Zapisz - + Ctrl+S Ctrl+S - + Sa&ve as... Za&pisz jako... - + Ctrl+Shift+S Ctrl+Shift+S - + &Quit &Zamknij - + Ctrl+Q Ctrl+Q - + &Show help texts &Pokaż podpowiedzi - + Ctrl+Shift+B Ctrl+Shift+B - + &Spellcheck &Sprawdzanie pisowni - + F9 F9 - + &Labels... &Etykiety... - + &Status... &Status... - + Tree Drzewo - + &Simple &Uproszczony - + &Fiction %Fikcji literackiej - + Index cards Karty katalogowe - + S&ettings U&stawienia - + F8 F8 - + &Close project &Zamknij projekt - + Co&mpile &Kompiluj - + F6 F6 - + &Frequency Analyzer &Analiza częstotliwości - + &About &O programie - + About Manuskript O Manuskript - + F7 F7 - + &Copy &Kopiuj - + Ctrl+C Ctrl+C - + C&ut &Wytnij - + Ctrl+X Ctrl+X - + &Paste W&klej - + Ctrl+V Ctrl+V - + Ctrl+Shift+K Ctrl+Shift+K - + Sp&lit at cursor Po&dziel w miejscu kursora - + Ctrl+K Ctrl+K - + M&erge P&ołącz - + Ctrl+M Ctrl+M - + Dupl&icate Dupl&ikuj - + &Delete &Usuń - + Del Del - + &Move Up P&rzesuń w górę - + Ctrl+Shift+Up Ctrl+Shift+Up - + M&ove Down Pr&zesuń w dół - + Ctrl+Shift+Down Ctrl+Shift+Down - + &Rename &Zmień nazwę - + F2 F2 - + &Level 1 (setext) &Poziom 1 (setext) - + Ctrl+Alt+1 Ctrl+Alt+1 - + Level &2 Poziom &2 - + Ctrl+Alt+2 Ctrl+Alt+2 - + Level &1 (atx) Poziom &1 (atx) - + Ctrl+1 Ctrl+1 - + L&evel 2 P&oziom 2 - + Ctrl+2 Ctrl+2 - + Level &3 Poziom &3 - + Ctrl+3 Ctrl+3 - + Level &4 Poziom &4 - + Ctrl+4 Ctrl+4 - + Level &5 Poziom &5 - + Ctrl+5 Ctrl+5 - + Level &6 Poziom &6 - + Ctrl+6 Ctrl+6 - + &Bold Pogru&bienie - + Ctrl+B Ctrl+B - + &Italic Pochylen&ie - + Ctrl+I Ctrl+I - + &Strike &Przekreślenie - + &Verbatim &Dosłownie - + Su&perscript Indeks &górny - + Ctrl++ Ctrl++ - + Subsc&ript Indeks &dolny - + Ctrl+- Ctrl+- - + Co&mment block Blok komentarza - + Ctrl+Shift+C Ctrl+Shift+C - + Clear &formats Wyczyść &formatowanie - + Ctrl+0 Ctrl+0 - + &Comment line(s) &Wiersz(-e) komentarza - + Ctrl+D Ctrl+D - + &Ordered list &Numerowanie - + &Unordered list &Wypunktowanie - + B&lockquote &Cytat - + Manuskript Manuskript - + Project {} saved. Projekt {} zapisany. - + WARNING: Project {} not saved. UWAGA: Nie zapisano projektu {}. - + Project {} loaded. Projekt {} wczytany. - - Project {} loaded with some errors: - Projekt {} wczytany z błędami: - - - - * {} wasn't found in project file. - * {} nie znaleziono w pliku projektu. - - - + Project {} loaded with some errors. Projekt {} wczytany z błędami. - + (~{} pages) (~{} stron) - + Words: {}{} Słowa: {}{} - + Book summary Podsumowanie książki - + Project tree Drzewo projektu - + Metadata Metadane - + Story line Linia fabularna - + Enter information about your book, and yourself. Wpisz informacje o swojej książce i o sobie. - + The basic situation, in the form of a 'What if...?' question. Ex: 'What if the most dangerous evil wizard wasn't able to kill a baby?' (Harry Potter) Podstawowa sytuacja, sformułowana jako pytanie "Co jeśli...?". Na przykład: "Co jeśli najniebezpieczniejszy zły czarownik nie mógł zabić dziecka?" (Harry Potter) - + Take time to think about a one sentence (~50 words) summary of your book. Then expand it to a paragraph, then to a page, then to a full summary. Poświęć czas na przemyślenie jednego zdania (ok. 50 słów) podsumowania swojej książki. Następnie rozwiń je do akapitu, następnie do strony, a następnie do pełnego podsumowania. - + Create your characters. Stwórz swoich bohaterów. - + Develop plots. Opracuj wątki. - + Build worlds. Create hierarchy of broad categories down to specific details. Buduj światy. Stwórz hierarchię szeroko zarysowanych kategorii do konkretnych szczegółów. - + Create the outline of your masterpiece. Stwórz zarys swojego dzieła. - + Write. Pisz. - + Debug info. Sometimes useful. Informacje debugowania. Czasem są użyteczne. - + Dictionary Słownik - + Nothing Nic - + POV Punkt widzenia - + Label Etykieta - + Progress Postęp - + Compile Kompiluj - + Icon color Kolor ikony - + Text color Kolor tekstu - + Background color Kolor tła - + Icon Ikona - + Text Tekst - + Background Tło - + Border Ramka - + Corner Narożnik - + &Import… &importuj… - + &Split… &Podziel… @@ -1423,52 +1413,52 @@ akapitu, następnie do strony, a następnie do pełnego podsumowania.Usuń wybrany(e) etapy fabuły - + The file {} does not exist. Has it been moved or deleted? Plik {} nie istnieje. Czy został przeniesiony lub skasowany? - + Install {}{} to use spellcheck Zainstaluj {}{}, aby użyć sprawdzania pisowni - + {} has no installed dictionaries {} nie ma zainstalowanych słowników - + {}{} is not installed {}{} jest niezainstalowany - + Save project? Zapisać projekt? - + Save changes to project "{}" before closing? Zapisać zmiany w projekcie "{}" przed zamknięciem? - + Your changes will be lost if you don't save them. Twoje postępy zostaną utracone jeśli ich nie zapiszesz. - + PyQt / Qt versions 5.11 and 5.12 are known to cause a crash which might result in a loss of data. - + PyQt {} and Qt {} are in use. - + Proceed with import at your own risk @@ -1478,12 +1468,12 @@ akapitu, następnie do strony, a następnie do pełnego podsumowania. - + Search - + Ctrl+F @@ -1507,6 +1497,76 @@ akapitu, następnie do strony, a następnie do pełnego podsumowania.Status Status + + + &Technical Support + + + + + How to obtain technical support for Manuskript. + + + + + F1 + F1 + + + + &Locate log file... + + + + + Locate log file + + + + + Locate the diagnostic log file used for this session. + + + + + Shift+F1 + + + + + Sorry! + + + + + This session is not being logged. + + + + + A log file is a Work in Progress! + + + + + The log file "{}" will continue to be written to until Manuskript is closed. + + + + + It will now be displayed in your file manager, but is of limited use until you close Manuskript. + + + + + Error! + + + + + An error was encountered while trying to show the log file below in your file manager. + + Search @@ -2228,42 +2288,42 @@ akapitu, następnie do strony, a następnie do pełnego podsumowania. SpellAction - + Spelling Suggestions Sugestie pisowni - + &Add to dictionary Dod&aj do słownika - + &Remove from custom dictionary &Usuń ze słownika użytkownika - + &New Character - + &New Plot Item - + &New World Item - + &Correction Suggestions - + &Correction Suggestion @@ -2297,37 +2357,37 @@ akapitu, następnie do strony, a następnie do pełnego podsumowania. abstractModel - + Title Tytuł - + POV Punkt widzenia - + Label Etykieta - + Status Status - + Compile Kompiluj - + Word count Liczba słów - + Goal Cel @@ -2368,12 +2428,12 @@ akapitu, następnie do strony, a następnie do pełnego podsumowania. characterModel - + Name Imię - + Value Wartość @@ -2381,17 +2441,17 @@ akapitu, następnie do strony, a następnie do pełnego podsumowania. characterTreeView - + Main Główny - + Secondary Poboczny - + Minor Epizodyczny @@ -2823,72 +2883,72 @@ akapitu, następnie do strony, a następnie do pełnego podsumowania. fullScreenEditor - + Theme: Motyw: - + {} words / {} {} słów / {} - + {} words {} słów - + Spellcheck Sprawdzanie pisowni - + Navigation Nawigacja - + New Text Nowy tekst - + Title Tytuł - + Title: Show Full Path Tytuł: pokaż pełną ścieżkę - + Theme selector Wybór motywów - + Word count Licznik słów - + Progress Postęp - + Progress: Auto Show/Hide Postęp: automatycznie pokaż/ukryj - + Clock Zegar - + Clock: Show Seconds Zegar: wyświetl sekundy @@ -2967,14 +3027,6 @@ akapitu, następnie do strony, a następnie do pełnego podsumowania.Ustawienia - - lastAccessedDirectoryInfo - - - Last accessed directory "{}" loaded. - - - lineEditView @@ -3089,32 +3141,32 @@ akapitu, następnie do strony, a następnie do pełnego podsumowania.F11 - + Root Katalog główny - + {} words {} słów - + ({} chars) {} words / {} - + {} words / {} - + {} chars - + {} chars @@ -3168,7 +3220,7 @@ akapitu, następnie do strony, a następnie do pełnego podsumowania. myPanel - + Auto-hide Auto-ukrywanie @@ -3322,12 +3374,12 @@ akapitu, następnie do strony, a następnie do pełnego podsumowania. outlineItem - + {} words / {} ({}) {} słów / {} ({}) - + {} words {} słów @@ -3335,17 +3387,17 @@ akapitu, następnie do strony, a następnie do pełnego podsumowania. pandocSettings - + General Ogólne - + Table of Content Spis treści - + Custom settings for {} Własne ustawienia dla {} @@ -3549,32 +3601,32 @@ akapitu, następnie do strony, a następnie do pełnego podsumowania. plotModel - + Name Nazwa - + Meta Meta - + New step Nowy krok - + Main Główny - + Secondary Poboczny - + Minor Epizodyczny @@ -3582,22 +3634,22 @@ akapitu, następnie do strony, a następnie do pełnego podsumowania. plotTreeView - + Main Główny - + Secondary Poboczny - + Minor Epizodyczny - + **Plot:** {} **Wątek:** {} @@ -3661,52 +3713,52 @@ akapitu, następnie do strony, a następnie do pełnego podsumowania. references - + Not a reference: {}. Nie jest referencją: {}. - + Unknown reference: {}. Nieznana referencja: {}. - + Path: Ścieżka: - + Stats: Statystyki: - + POV: Punkt widzenia: - + Status: Status: - + Label: Etykieta: - + Short summary: Krótkie podsumowanie: - + Long summary: Długie podsumowanie: - + Notes: Notatki: @@ -3726,7 +3778,7 @@ akapitu, następnie do strony, a następnie do pełnego podsumowania.Punkt widzenia: - + Go to {}. Idź do {}. @@ -3741,7 +3793,7 @@ akapitu, następnie do strony, a następnie do pełnego podsumowania.Cel - + Conflict Konflikt @@ -3761,62 +3813,62 @@ akapitu, następnie do strony, a następnie do pełnego podsumowania.Dłuższe podsumowanie - + Description Opis - + Result Rezultat - + Characters Postaci - + Resolution steps Kroki rozwiązania - + Passion Pasja - + <b>Unknown reference:</b> {}. <b>Nieznana referencja:</b> {}. - + Folder: <b>{}</b> Folder: <b>1{}</b>2 - + Text: <b>{}</b> Tekst: <b>{}</b> - + Character: <b>{}</b> Postać: <b>{}</b> - + Plot: <b>{}</b> Wątek: <b>{}</b> - + World: <b>{name}</b>{path} Świat: <b>{nazwa}</b>{ścieżka} - + Referenced in: Odniesione w: @@ -3834,12 +3886,12 @@ akapitu, następnie do strony, a następnie do pełnego podsumowania.Opcje - + Restore Przywróć - + Delete Usuń @@ -3899,12 +3951,12 @@ akapitu, następnie do strony, a następnie do pełnego podsumowania.{} sekund temu - + Line {}: Linia {}: - + Clear all Wyczyść wszystko @@ -3925,52 +3977,52 @@ akapitu, następnie do strony, a następnie do pełnego podsumowania. settingsWindow - + New status Nowy status - + New label Nowa etykieta - + newtheme nowymotyw - + New theme Nowy motyw - + (read-only) (tylko-do-odczytu) - + Open Image Otwórz obraz - + Image files (*.jpg; *.jpeg; *.png) Pliki obrazu (*.jpg; *.jpeg; *.png) - + Error Błąd - + Unable to load selected file Błąd wczytywania wybranego pliku - + Unable to add selected image: {} Błąd dodania wybranego obrazu: @@ -4058,22 +4110,22 @@ akapitu, następnie do strony, a następnie do pełnego podsumowania. tabSplitter - + Open selected items in that view. Otwórz zaznaczone obiekty w tym widoku. - + Split horizontally Rozdziel poziomo - + Close split Zamknij rozdzielenie widoku - + Split vertically Rozdziel pionowo @@ -4081,7 +4133,7 @@ akapitu, następnie do strony, a następnie do pełnego podsumowania. textEditView - + Various Różne @@ -4180,27 +4232,27 @@ akapitu, następnie do strony, a następnie do pełnego podsumowania.Pusty - + Novel Powieść - + Novella Krótka powieść - + Short Story Opowiadanie - + Research paper Artykuł naukowy - + Demo projects Projekt demonstracyjny @@ -4235,147 +4287,147 @@ akapitu, następnie do strony, a następnie do pełnego podsumowania.Nowy - + Open project Otwórz projekt - + Manuskript project (*.msk);;All files (*) projekt Manuskript (*.msk);;Wszystkie pliki (*) - + Save project as... Zapisz projekt jako... - + Manuskript project (*.msk) projekt Manuskript (*.msk) - + Manuskript Manuskript - + Create New Project Nowy Projekt - + Warning Ostrzeżenie - + Overwrite existing project {} ? Nadpisać obecny projekt {} ? - + Empty fiction Pusta historia - + Chapter Rozdział - + Scene Scena - + Trilogy Trylogia - + Book Książka - + Section Sekcja - + Empty non-fiction Pusty artykuł - + words each. słów każdy. - + of z - + Text Tekst - + Something Coś - + <b>Total:</b> {} words (~ {} pages) <b>Łącznie:</b> {} słów (~ {} stron) - + Fiction Fikcja - + Non-fiction Artykuł - + Idea Pomysł - + Note Uwagi - + Research Praca badawcza - + TODO DO ZROBIENIA - + First draft Pierwszy szkic - + Second draft Drugi szkic - + Final Wersja finalna diff --git a/i18n/manuskript_pt_BR.ts b/i18n/manuskript_pt_BR.ts index 0e9264f..1c28786 100644 --- a/i18n/manuskript_pt_BR.ts +++ b/i18n/manuskript_pt_BR.ts @@ -38,7 +38,7 @@ Visualizar com marcador. - + Plain text Texto simples @@ -53,82 +53,82 @@ Precisa de LaTeX para ser instalado. - + Error Erro - + Standalone document (not just a fragment) Documento autônomo (não apenas um fragmento) - + Include a table of contents. Inclua um índice. - + Number of sections level to include in TOC: Número de seções a serem incluídas no TOC: - + Typographically correct output Saída tipograficamente correta - + Normalize the document (cleaner) Normalize o documento (mais limpo) - + Specify the base level for headers: Especifique o nível base para os cabeçalhos: - + Use reference-style links instead of inline links Use links de referência em vez de links in-line - + Use ATX-style headers Use cabeçalhos no estilo ATX - + Self-contained HTML files, with no dependencies Arquivos HTML independentes, sem dependências - + Use <q> tags for quotes in HTML Use as tags <q> para marcações em HTML - + LaTeX engine used to produce the PDF. Mecanismo LaTeX usado para produzir o PDF. - + Paper size: Tamanho do papel: - + Font size: Tamanho da Fonte: - + Class: Classe: - + Line spacing: Espaçamento entre linhas: @@ -160,14 +160,14 @@ Pressupõe que os textos são formatados em markdown. - + Simplest export to plain text. Allows you to use your own markup not understood by Manuskript, for example <a href='www.fountain.io'>Fountain</a>. Exportação simples para texto simples. Permite que você use sua própria marcação não entendida pelo manuskript, por exemplo <a href='www.fountain.io'>Fountain</a>. - + <p>A universal document converter. Can be used to convert Markdown to a wide range of other formats.</p> <p>Website: <a href="http://www.pandoc.org">http://pandoc.org/</a></p> @@ -206,26 +206,26 @@ entre delineadores e serviços da Internet que podem ser pesquisados ou controlados através de um delineador. - + Disable YAML metadata block. Use that if you get YAML related error. Desativar o bloco de metadados YAML. Use isso se você receber um erro relacionado ao YAML. - + Convert to ePUB3 Converte para ePUB3 - + Could not process regular expression: {} Não pode processar expressões regulares: {} - + Choose output file… Escolha o arquivo de saída @@ -334,12 +334,12 @@ Use isso se você receber um erro relacionado ao YAML. Import - + Markdown import Importação de Markdown - + <b>Info:</b> A very simple parser that will go through a markdown document and create items for each titles.<br/>&nbsp; @@ -348,12 +348,12 @@ Use isso se você receber um erro relacionado ao YAML. criar itens para cada título<br/>&nbsp; - + Folder import Importação de pasta - + <p><b>Info:</b> Imports a whole directory structure. Folders are added as folders, and plaintext documents within (you chose which ones by extension) @@ -366,47 +366,47 @@ Use isso se você receber um erro relacionado ao YAML. <p>Somente arquivos de texto são suportados (imagens, arquivos binários e outros não).</p> - + Include only those extensions: Inclua apenas essas extensões: - + Comma separated values Valores separados por vírgula - + Sort items by name Ordenar itens por nome - + Import folder then files Importar pastas depois arquivos - + OPML Import Importa OPML - + File open failed. Falha na abertura do arquivo. - + This does not appear to be a valid OPML file. Este não parece ser um arquivo OPML válido. - + Pandoc import Importação Pandoc - + <b>Info:</b> Manuskript can import from <b>markdown</b> or <b>OPML</b>. Pandoc will convert your document to either (see option below), and @@ -421,17 +421,17 @@ Use isso se você receber um erro relacionado ao YAML. <br/>&nbsp; - + Import using: Importação usando: - + Wrap lines: Linhas cobertas: - + <p>Should pandoc create cosmetic / non-semantic line-breaks?</p><p> <b>auto</b>: wraps at 72 characters.<br> @@ -446,27 +446,27 @@ Use isso se você receber um erro relacionado ao YAML. documento original.</p> - + Mind Map Import Importação do Mapa Mental - + This does not appear to be a valid Mind Map file. Isso não parece ser um arquivo de Mapa Mental válido. - + Mind Map import Importar Mapa Mental - + Import tip as: Dica de importação como: - + Untitled Sem título @@ -722,7 +722,7 @@ Use isso se você receber um erro relacionado ao YAML. Fonte do conflito - + Outline Esboço @@ -767,157 +767,157 @@ Use isso se você receber um erro relacionado ao YAML. &Ajuda - + &Tools &Ferramentas - + &Edit &Editar - + &View &Vizualizar - + &Mode &Modo - + &Cheat sheet &Folha de notas - + Sea&rch P&rocurar - + &Navigation &Navegação - + &Open &Abrir - + Ctrl+O - + &Save &Salvar - + Ctrl+S - + Sa&ve as... Sa&lvar como... - + Ctrl+Shift+S - + &Quit &Sair - + Ctrl+Q - + &Show help texts &Mostrar textos de ajuda - + Ctrl+Shift+B - + &Spellcheck &Verificação ortográfica - + F9 - + &Labels... &Rótulos... - + &Status... - + Tree Árvore - + &Simple &Simples - + &Fiction &Ficção - + Index cards Cartões de índice - + S&ettings Configuraçõ&es - + F8 - + &Close project Fe&char o projeto - + Co&mpile Co&mpilar - + F6 - + &Frequency Analyzer Analizador de &Frequencia @@ -927,196 +927,186 @@ Use isso se você receber um erro relacionado ao YAML. Informações do livro - + &About S&obre - + About Manuskript Sobre o Manuskript - + Manuskript - + Project {} saved. Projeto {} salvo. - + WARNING: Project {} not saved. Atenção: Projeto {} não foi salvo. - + Project {} loaded. Projeto {} carregado. - - Project {} loaded with some errors: - Projeto {} com alguns erros: - - - - * {} wasn't found in project file. - * {} não foi encontrado o arquivo do projeto. - - - + Project {} loaded with some errors. Projeto {} carregado com alguns erros. - + (~{} pages) (~{} páginas) - + Words: {}{} Palavras: {}{} - + Book summary Sumário do livro - + Project tree Árvore do projeto - + Metadata Meta dados - + Story line Linhas históricas - + Enter information about your book, and yourself. Insira informações sobre seu livro e você mesmo. - + The basic situation, in the form of a 'What if...?' question. Ex: 'What if the most dangerous evil wizard wasn't able to kill a baby?' (Harry Potter) A situação básica, na forma de um questionamento tipo 'e se ...'. Ex: 'E se o mais perigoso malvado feiticeiro não foi capaz de matar um bebê?' (Harry Potter) - + Take time to think about a one sentence (~50 words) summary of your book. Then expand it to a paragraph, then to a page, then to a full summary. Tire um tempo para pensar em uma frase (~50 palavras) sumário do seu livro. Então expanda isso para um parágrafo, depois para uma página e, em seguida, para um sumário completo. - + Create your characters. Crie seus personagens. - + Develop plots. Desenvolva enredos. - + Build worlds. Create hierarchy of broad categories down to specific details. Construa mundos. Crie hierarquia de categorias mais amplas até os detalhes específicos. - + Create the outline of your masterpiece. Crie o esboço da sua obra-prima. - + Write. Escreva. - + Debug info. Sometimes useful. Informações de depuração. Às vezes é útil. - + Dictionary Dicionário - + Nothing Nada - + POV Ponto de Vista - + Label Rótulo - + Progress Progresso - + Compile Compilar - + Icon color Cor do ícone - + Text color Cor do texto - + Background color Cor do fundo - + Icon Ícone - + Text Texto - + Background Fundo - + Border Borda - + Corner Canto @@ -1126,307 +1116,307 @@ Então expanda isso para um parágrafo, depois para uma página e, em seguida, p Adicionar etapa de enredo - + &Import… &Importar… - + F7 - + &Copy &Copiar - + Ctrl+C - + C&ut C&ortar - + Ctrl+X - + &Paste Co&lar - + Ctrl+V - + &Split… &Separar… - + Ctrl+Shift+K - + Sp&lit at cursor Sep&arar no cursor - + Ctrl+K - + Ctrl+M - + Ctrl+D - + Del - + &Move Up &Mover para cima - + Ctrl+Shift+Up - + M&ove Down M&over pra baixo - + Ctrl+Shift+Down - + Dupl&icate Dupl&icar - + &Delete &Deletar - + &Rename &Renomear - + F2 - + Organi&ze Organi&zar - + M&erge Ju&ntar - + &Format &Formatar - + &Header &Cabeçalho - + &Level 1 (setext) &Nível 1 (setext) - + Ctrl+Alt+1 Ctrl+Alt+1 - + Level &2 Nível &2 - + Ctrl+Alt+2 Ctrl+Alt+2 - + Level &1 (atx) Nível &1 (atx) - + Ctrl+1 Ctrl+1 - + L&evel 2 N&ível 2 - + Ctrl+2 Ctrl+2 - + Level &3 Nível &3 - + Ctrl+3 Ctrl+3 - + Level &4 Nível &4 - + Ctrl+4 Ctrl+4 - + Level &5 Nível &5 - + Ctrl+5 Ctrl+5 - + Level &6 Nível &6 - + Ctrl+6 Ctrl+6 - + &Bold &Negrito - + Ctrl+B Ctrl+B - + &Italic &Italico - + Ctrl+I Ctrl+I - + &Strike &Sucesso - + &Verbatim &Textual - + Su&perscript So&brescrito - + Ctrl++ Ctrl++ - + Subsc&ript Subsc&rito - + Ctrl+- Ctrl+- - + Co&mment block Bloco de Co&mentário - + Ctrl+Shift+C Ctrl+Shift+C - + Clear &formats Limpar &formatação - + Ctrl+0 Ctrl+0 - + &Comment line(s) &Comentar linha(s) - + &Ordered list Lista &Ordenada - + &Unordered list Lista não o&rdenada - + B&lockquote B&loco de citação @@ -1436,52 +1426,52 @@ Então expanda isso para um parágrafo, depois para uma página e, em seguida, p Remover etapas de plotagem selecionada(s) - + The file {} does not exist. Has it been moved or deleted? O arquivo {} não existe. Ele foi movido ou deletado? - + Install {}{} to use spellcheck Instale {}{} para usar a verificação ortográfica - + {} has no installed dictionaries {} não possui dicionários instalados - + {}{} is not installed {}{} não está instalado - + Save project? Salvar o projeto? - + Save changes to project "{}" before closing? Salvar mudanças no projeto "{}" antes de fechar? - + Your changes will be lost if you don't save them. Suas mudanças vão perder se você não salvá-las. - + PyQt / Qt versions 5.11 and 5.12 are known to cause a crash which might result in a loss of data. PyQt / Qt versão 5.11 e 5.12 são conhecidas para causar travamentos e podem resultar em perda de dados. - + PyQt {} and Qt {} are in use. PyQt {} e Qt {} estão em uso. - + Proceed with import at your own risk Continuando pode travar e perder dados @@ -1491,12 +1481,12 @@ Então expanda isso para um parágrafo, depois para uma página e, em seguida, p - + Search - + Ctrl+F @@ -1520,6 +1510,76 @@ Então expanda isso para um parágrafo, depois para uma página e, em seguida, p Status + + + &Technical Support + + + + + How to obtain technical support for Manuskript. + + + + + F1 + + + + + &Locate log file... + + + + + Locate log file + + + + + Locate the diagnostic log file used for this session. + + + + + Shift+F1 + + + + + Sorry! + + + + + This session is not being logged. + + + + + A log file is a Work in Progress! + + + + + The log file "{}" will continue to be written to until Manuskript is closed. + + + + + It will now be displayed in your file manager, but is of limited use until you close Manuskript. + + + + + Error! + + + + + An error was encountered while trying to show the log file below in your file manager. + + Search @@ -2241,42 +2301,42 @@ Então expanda isso para um parágrafo, depois para uma página e, em seguida, p SpellAction - + Spelling Suggestions Sugestões de correção ortográfica - + &Add to dictionary &Adicionar ao dicionário - + &Remove from custom dictionary &Remover do dicionário customizado - + &New Character - + &New Plot Item - + &New World Item - + &Correction Suggestions - + &Correction Suggestion @@ -2310,37 +2370,37 @@ Então expanda isso para um parágrafo, depois para uma página e, em seguida, p abstractModel - + Title Título - + POV Ponto de vista - + Label - + Status - + Compile Compilar - + Word count Contagem de palavras - + Goal Objetivo @@ -2381,12 +2441,12 @@ Então expanda isso para um parágrafo, depois para uma página e, em seguida, p characterModel - + Name - + Value Valor @@ -2394,17 +2454,17 @@ Então expanda isso para um parágrafo, depois para uma página e, em seguida, p characterTreeView - + Main Principal - + Secondary Secundário - + Minor @@ -2836,72 +2896,72 @@ Então expanda isso para um parágrafo, depois para uma página e, em seguida, p fullScreenEditor - + Theme: - + {} words / {} {} palavras / {} - + {} words {} palavras - + Spellcheck Verificador ortográfico - + Navigation Navegação - + New Text Novo texto - + Title Título - + Title: Show Full Path Título: Mostrar o caminho completo - + Theme selector Seletor de tema - + Word count Contagem de palavras - + Progress Progresso - + Progress: Auto Show/Hide Progresso: Auto Mostrar/Esconder - + Clock Relógio - + Clock: Show Seconds Relógio: Mostrar Segundos @@ -2980,14 +3040,6 @@ Então expanda isso para um parágrafo, depois para uma página e, em seguida, p Configurações - - lastAccessedDirectoryInfo - - - Last accessed directory "{}" loaded. - Último diretório acessado "{}". - - lineEditView @@ -3102,32 +3154,32 @@ Então expanda isso para um parágrafo, depois para uma página e, em seguida, p - + Root - + {} words {} palavras - + ({} chars) {} words / {} - + {} words / {} - + {} chars - + {} chars @@ -3181,7 +3233,7 @@ Então expanda isso para um parágrafo, depois para uma página e, em seguida, p myPanel - + Auto-hide Ocultar automaticamente @@ -3335,12 +3387,12 @@ Então expanda isso para um parágrafo, depois para uma página e, em seguida, p outlineItem - + {} words / {} ({}) {} palavras / {} ({}) - + {} words {} palavras @@ -3348,17 +3400,17 @@ Então expanda isso para um parágrafo, depois para uma página e, em seguida, p pandocSettings - + General - + Table of Content - + Custom settings for {} Configurações personalizadas para {} @@ -3562,32 +3614,32 @@ Então expanda isso para um parágrafo, depois para uma página e, em seguida, p plotModel - + Name - + Meta - + New step Novo passo - + Main Principal - + Secondary Secundário - + Minor @@ -3595,22 +3647,22 @@ Então expanda isso para um parágrafo, depois para uma página e, em seguida, p plotTreeView - + Main Principal - + Secondary Secundário - + Minor - + **Plot:** {} **Enredo:** {} @@ -3674,52 +3726,52 @@ Então expanda isso para um parágrafo, depois para uma página e, em seguida, p references - + Not a reference: {}. Não é um a referência: {}. - + Unknown reference: {}. Referência desconhecida: {}. - + Path: Caminho: - + Stats: - + POV: Ponto de Vista: - + Status: - + Label: - + Short summary: Sumário curto: - + Long summary: Sumário longo: - + Notes: @@ -3739,72 +3791,72 @@ Então expanda isso para um parágrafo, depois para uma página e, em seguida, p Ponto de vista de: - + Go to {}. - + Description - + Result Resultado - + Characters Personagens - + Resolution steps Etapas de resolução - + Passion Paixão - + Conflict Conflito - + <b>Unknown reference:</b> {}. <b>Referência Desconhecida:</b> {}. - + Folder: <b>{}</b> Pasta: <b>{}</b> - + Text: <b>{}</b> - + Character: <b>{}</b> Personagem: <b>{}</b> - + Plot: <b>{}</b> Enredo: <b>{}</b> - + World: <b>{name}</b>{path} - + Referenced in: Referenciado em: @@ -3847,12 +3899,12 @@ Então expanda isso para um parágrafo, depois para uma página e, em seguida, p - + Restore Restaurar - + Delete @@ -3912,12 +3964,12 @@ Então expanda isso para um parágrafo, depois para uma página e, em seguida, p {} segundos atrás - + Line {}: - + Clear all Limpar tudo @@ -3938,52 +3990,52 @@ Então expanda isso para um parágrafo, depois para uma página e, em seguida, p settingsWindow - + New status - + New label - + newtheme novo tema - + New theme - + (read-only) (ler somente) - + Open Image Abrir Imagem - + Image files (*.jpg; *.jpeg; *.png) Arquivos de imagem (*.jpg; *.jpeg; *.png) - + Error Erro - + Unable to load selected file Incapaz de carregar o arquivo selecionado - + Unable to add selected image: {} Incapaz de adicionar a imagem selecionada: @@ -4084,22 +4136,22 @@ Então expanda isso para um parágrafo, depois para uma página e, em seguida, p tabSplitter - + Open selected items in that view. Abra itens selecionados nessa vista. - + Split horizontally Dividir horizontalmente - + Close split Fechar a divisão - + Split vertically Dividir verticalmente @@ -4107,7 +4159,7 @@ Então expanda isso para um parágrafo, depois para uma página e, em seguida, p textEditView - + Various Vários @@ -4206,27 +4258,27 @@ Então expanda isso para um parágrafo, depois para uma página e, em seguida, p Vazio - + Novel Romance - + Novella Novela - + Short Story História curta - + Research paper Artigo de pesquisa - + Demo projects Projetos de demonstração @@ -4261,147 +4313,147 @@ Então expanda isso para um parágrafo, depois para uma página e, em seguida, p Criar - + Open project - + Manuskript project (*.msk);;All files (*) Projeto do Manuskript (*.msk);;Todos arquivos (*) - + Save project as... Salvar o projeto como... - + Manuskript project (*.msk) Projeto do Manuskript (*.msk) - + Manuskript - + Create New Project Criar um Novo Projeto - + Warning Alerta - + Overwrite existing project {} ? Substituir projeto existente {} ? - + Empty fiction Ficção vazia - + Chapter Capítulo - + Scene Cena - + Trilogy Trilogia - + Book - + Section Seção - + Empty non-fiction Não ficção vazia - + words each. palavras cada. - + of - + Text - + Something Alguma coisa - + <b>Total:</b> {} words (~ {} pages) <b>Total:</b> {} palavras (~ {} páginas) - + Fiction Ficção - + Non-fiction Não ficção - + Idea - + Note - + Research Pesquisa - + TODO - + First draft Primeiro rascunho - + Second draft Segundo rascunho - + Final diff --git a/i18n/manuskript_pt_PT.ts b/i18n/manuskript_pt_PT.ts index e734ad1..b52808f 100644 --- a/i18n/manuskript_pt_PT.ts +++ b/i18n/manuskript_pt_PT.ts @@ -3,89 +3,89 @@ Export - + Standalone document (not just a fragment) Documento independente (não só fragmento) - + Include a table of contents. Incluir um índice. - + Number of sections level to include in TOC: Número de níveis de secção a incluir no índice: - + Typographically correct output Saída tipograficamente correcta - + Normalize the document (cleaner) Normalizar documento (mais limpo) - + Specify the base level for headers: Especifique o nível base para cabeçalhos: - + Disable YAML metadata block. Use that if you get YAML related error. Desactivar bloco de meta-dados YAML. Use se receber um erro YAML. - + Use reference-style links instead of inline links Usar ligações tipo referência em vez de ligações em linha - + Use ATX-style headers Usar cabeçalhos estilo ATX - + Self-contained HTML files, with no dependencies Ficheiros HTML auto-contidos, sem dependências - + Use <q> tags for quotes in HTML Usar etiquetas <q> para citações em HTML - + LaTeX engine used to produce the PDF. Motor LaTex usado para produzir o PDF. - + Convert to ePUB3 Converter para ePUB3 - + Paper size: Tamanho do papel: - + Font size: Tamanho da letra: - + Class: Classe: - + Line spacing: Espaçamento de linhas: @@ -162,7 +162,7 @@ Use se receber um erro YAML. <a href="https://pandoc.org/installing.html">1pandoc.org/installing.html</a>2. Se desejar suporte Unicode, precisará do XeLaTeX. - + <p>A universal document converter. Can be used to convert Markdown to a wide range of other formats.</p> <p>Website: <a href="http://www.pandoc.org">http://pandoc.org/</a></p> @@ -173,7 +173,7 @@ Use se receber um erro YAML. - + Error Erro @@ -203,12 +203,12 @@ Use se receber um erro YAML. Saída HTML - + Plain text Texto simples - + Simplest export to plain text. Allows you to use your own markup not understood by Manuskript, for example <a href='www.fountain.io'>Fountain</a>. Exportação simples para texto. Permite utilizar a sua própria marcação não compreendida @@ -220,14 +220,14 @@ Use se receber um erro YAML. Exportador predefinido, oferece formatos básicos utilizados por outros exportadores. - + Could not process regular expression: {} Impossível processar a expressão regular: {} - + Choose output file… Escolha o ficheiro de saída @@ -336,12 +336,12 @@ Use se receber um erro YAML. Import - + Markdown import Importação markdown - + <b>Info:</b> A very simple parser that will go through a markdown document and create items for each titles.<br/>&nbsp; @@ -350,12 +350,12 @@ Use se receber um erro YAML. e cria itens para cada título.<br/>&nbsp; - + Folder import Importação de pastas - + <p><b>Info:</b> Imports a whole directory structure. Folders are added as folders, and plaintext documents within (you chose which ones by extension) @@ -368,47 +368,47 @@ Use se receber um erro YAML. <p>Só são suportados ficheiros de texto (nem imagens, binários ou outros).</p> - + Include only those extensions: Incluir só estas extensões: - + Comma separated values Valores separados por vírgulas - + Sort items by name Ordenar itens por nome - + Import folder then files Importar pastas e depois ficheiros - + OPML Import Importação OPML - + File open failed. Falha ao abrir o ficheiro. - + This does not appear to be a valid OPML file. Não parece ser um ficheiro OPML válido. - + Pandoc import Importação Pandoc - + <b>Info:</b> Manuskript can import from <b>markdown</b> or <b>OPML</b>. Pandoc will convert your document to either (see option below), and @@ -423,17 +423,17 @@ Use se receber um erro YAML. <br/>&nbsp; - + Import using: Importar usando: - + Wrap lines: Quebra de linhas: - + <p>Should pandoc create cosmetic / non-semantic line-breaks?</p><p> <b>auto</b>: wraps at 72 characters.<br> @@ -448,27 +448,27 @@ Use se receber um erro YAML. do documento original.</p> - + Mind Map Import Importação de mapa mental - + This does not appear to be a valid Mind Map file. Não parece ser um ficheiro de mapa mental válido. - + Mind Map import Importação de mapa mental - + Import tip as: Importar dica como: - + Untitled Sem título @@ -739,7 +739,7 @@ Use se receber um erro YAML. Fonte do conflito - + Outline Esquema @@ -784,706 +784,696 @@ Use se receber um erro YAML. A&juda - + &Tools Ferramen&tas - + &Edit &Editar - + &Format &Formatar - + &Header Cabeçal&ho - + &View &Ver - + &Mode &Modo - + Organi&ze Organi&zar - + &Cheat sheet &Cábula - + Sea&rch P&rocurar - + &Navigation &Navegação - + &Open A&brir - + Ctrl+O Ctrl+B - + &Save &Gravar - + Ctrl+S Ctrl+G - + Sa&ve as... Gra&var como... - + Ctrl+Shift+S Ctrl+Shift+V - + &Quit &Sair - + Ctrl+Q Ctrl+S - + &Show help texts &Mostrar textos de ajuda - + Ctrl+Shift+B Ctrl+Shift+M - + &Spellcheck &Ortografia - + F9 F9 - + &Labels... Eti&quetas... - + &Status... E&stado... - + Tree Árvore - + &Simple &Simples - + &Fiction &Ficção - + Index cards Fichas indexadas - + S&ettings &Definições - + F8 F8 - + &Close project Fe&char projecto - + Co&mpile Co&mpilar - + F6 F6 - + &Frequency Analyzer Analisador de &frequência - + &About &Acerca de - + About Manuskript Acerca do Manuskript - + &Import… &Importar… - + F7 F7 - + &Copy &Copiar - + Ctrl+C Ctrl+C - + C&ut Cor&tar - + Ctrl+X Ctrl+X - + &Paste Co&lar - + Ctrl+V Ctrl+V - + &Split… Di&vidir… - + Ctrl+Shift+K Ctrl+Shift+V - + Sp&lit at cursor D&ividir no cursor - + Ctrl+K Ctrl+I - + M&erge &Unir - + Ctrl+M Ctrl+U - + Dupl&icate Dupl&icar - + &Delete &Eliminar - + Del Del - + &Move Up &Mover acima - + Ctrl+Shift+Up Ctrl+Shift+↑ - + M&ove Down M&over abaixo - + Ctrl+Shift+Down Ctrl+Shift+↓ - + &Rename &Renomear - + F2 F2 - + &Level 1 (setext) Níve&l 1 (defext) - + Ctrl+Alt+1 Ctrl+Alt+1 - + Level &2 Nível &2 - + Ctrl+Alt+2 Ctrl+Alt+2 - + Level &1 (atx) Nível &1 (atx) - + Ctrl+1 Ctrl+1 - + L&evel 2 Nív&el 2 - + Ctrl+2 Ctrl+2 - + Level &3 Nível &3 - + Ctrl+3 Ctrl+3 - + Level &4 Nível &4 - + Ctrl+4 Ctrl+4 - + Level &5 Nível &5 - + Ctrl+5 Ctrl+5 - + Level &6 Nível &6 - + Ctrl+6 Ctrl+6 - + &Bold &Negrito - + Ctrl+B Ctrl+N - + &Italic &Itálico - + Ctrl+I Ctrl+I - + &Strike Ra&surado - + &Verbatim &Verbatim - + Su&perscript Ex&poente - + Ctrl++ Ctrl++ - + Subsc&ript Subsc&rito - + Ctrl+- Ctrl+- - + Co&mment block Bloco de co&mentário - + Ctrl+Shift+C Ctrl+Shift+M - + Clear &formats Limpar &formatos - + Ctrl+0 Ctrl+F - + &Comment line(s) Lin&has de comentário - + Ctrl+D Ctrl+H - + &Ordered list Lista &ordenada - + &Unordered list Lista &desordenada - + B&lockquote Citação em b&loco - + The file {} does not exist. Has it been moved or deleted? O ficheiro {} não existe. Terá sido movido ou eliminado? - + Manuskript Manuskript - + Project {} saved. Projecto {} gravado. - + WARNING: Project {} not saved. AVISO: projecto {} não gravado. - + Project {} loaded. Projecto {} carregado. - - Project {} loaded with some errors: - Projecto {} carregado com alguns erros: - - - - * {} wasn't found in project file. - * {} não encontrado no ficheiro do projecto. - - - + Project {} loaded with some errors. Projecto {} carregado com alguns erros. - + (~{} pages) (~{} páginas) - + Words: {}{} Palavras: {}{} - + Book summary Sinopse do livro - + Project tree Árvore do projecto - + Metadata Meta-dados - + Story line Fio da história - + Enter information about your book, and yourself. Insira informação sobre o livro e sobre si. - + The basic situation, in the form of a 'What if...?' question. Ex: 'What if the most dangerous evil wizard wasn't able to kill a baby?' (Harry Potter) A situação básica, na forma de pergunta "E se...?". E.g.: "E se o mais maligno e perigoso feiticeiro não fosse capaz de matar um bebé?" (Harry Potter) - + Take time to think about a one sentence (~50 words) summary of your book. Then expand it to a paragraph, then to a page, then to a full summary. Leve o seu tempo a pensar numa frase (±50 palavras) que resuma o seu livro. Depois expanda-a para um parágrafo, em seguida para uma página e finalmente uma sinopse completa. - + Create your characters. Crie os seus personagens. - + Develop plots. Desenvolva enredos. - + Build worlds. Create hierarchy of broad categories down to specific details. Construa mundos. Crie uma hierarquia desde categorias vastas até detalhes específicos. - + Create the outline of your masterpiece. Crie o fio da meada para a sua obra. - + Write. Escreva. - + Debug info. Sometimes useful. Informação de depuração. Por vezes é útil. - + Dictionary Dicionário - + Nothing Nada - + POV PDV - + Label Etiqueta - + Progress Progresso - + Compile Compilar - + Icon color Cor do ícone - + Text color Cor do texto - + Background color Cor do fundo - + Icon Ícone - + Text Texto - + Background Fundo - + Border Contorno - + Corner Canto - + Install {}{} to use spellcheck Instalar {}{} para verificar a ortografia - + {} has no installed dictionaries {} não tem dicionários instalados - + {}{} is not installed {}{} não está instalado - + Save project? Gravar o projecto? - + Save changes to project "{}" before closing? Gravar alterações ao projecto "{}" antes de fechar? - + Your changes will be lost if you don't save them. Perderá as alterações se não as gravar. - + PyQt / Qt versions 5.11 and 5.12 are known to cause a crash which might result in a loss of data. As versões PyQt / Qt 5.11 e 5.12 são conhecidas por causar problemas que resultam numa perda de dados. - + PyQt {} and Qt {} are in use. PyQt {} e Qt {} estão em uso. - + Proceed with import at your own risk Continuar pode dar problemas e eliminar dados @@ -1493,12 +1483,12 @@ Use se receber um erro YAML. - + Search - + Ctrl+F @@ -1522,6 +1512,76 @@ Use se receber um erro YAML. Status Estado + + + &Technical Support + + + + + How to obtain technical support for Manuskript. + + + + + F1 + F1 + + + + &Locate log file... + + + + + Locate log file + + + + + Locate the diagnostic log file used for this session. + + + + + Shift+F1 + + + + + Sorry! + + + + + This session is not being logged. + + + + + A log file is a Work in Progress! + + + + + The log file "{}" will continue to be written to until Manuskript is closed. + + + + + It will now be displayed in your file manager, but is of limited use until you close Manuskript. + + + + + Error! + + + + + An error was encountered while trying to show the log file below in your file manager. + + Search @@ -2243,42 +2303,42 @@ Use se receber um erro YAML. SpellAction - + Spelling Suggestions Sugestões ortográficas - + &Add to dictionary &Adicionar ao dicionário - + &Remove from custom dictionary &Remover do dicionário pessoal - + &New Character - + &New Plot Item - + &New World Item - + &Correction Suggestions - + &Correction Suggestion @@ -2312,37 +2372,37 @@ Use se receber um erro YAML. abstractModel - + Title Título - + POV PDV - + Label Etiqueta - + Status Estado - + Compile Compilar - + Word count Total de palavras - + Goal Objectivo @@ -2383,12 +2443,12 @@ Use se receber um erro YAML. characterModel - + Name Nome - + Value Valor @@ -2396,17 +2456,17 @@ Use se receber um erro YAML. characterTreeView - + Main Principal - + Secondary Secundário - + Minor Menor @@ -2838,72 +2898,72 @@ Use se receber um erro YAML. fullScreenEditor - + Theme: Tema: - + {} words / {} {} palavras/{} - + {} words {} palavras - + Spellcheck Ortografia - + Navigation Navegação - + New Text Novo texto - + Title Título - + Title: Show Full Path Título: mostrar caminho completo - + Theme selector Selector de tema - + Word count Total de palavras - + Progress Progresso - + Progress: Auto Show/Hide Progresso mostrar/ocultar automático - + Clock Relógio - + Clock: Show Seconds Relógio: mostrar segundos @@ -2982,14 +3042,6 @@ Use se receber um erro YAML. Definições - - lastAccessedDirectoryInfo - - - Last accessed directory "{}" loaded. - Carregada a última pasta acedida "{}". - - lineEditView @@ -3104,32 +3156,32 @@ Use se receber um erro YAML. F11 - + Root Raiz - + {} words {} palavras - + ({} chars) {} words / {} - + {} words / {} - + {} chars - + {} chars @@ -3183,7 +3235,7 @@ Use se receber um erro YAML. myPanel - + Auto-hide Ocultar automaticamente @@ -3337,12 +3389,12 @@ Use se receber um erro YAML. outlineItem - + {} words / {} ({}) {} palavras/{} ({}) - + {} words {} palavras @@ -3350,17 +3402,17 @@ Use se receber um erro YAML. pandocSettings - + General Geral - + Table of Content Índice - + Custom settings for {} Definições personalizadas para {} @@ -3569,32 +3621,32 @@ Use se receber um erro YAML. plotModel - + Name Nome - + Meta Meta - + New step Novo passo - + Main Principal - + Secondary Secundário - + Minor Menor @@ -3602,22 +3654,22 @@ Use se receber um erro YAML. plotTreeView - + Main Principal - + Secondary Secundário - + Minor Menor - + **Plot:** {} **Enredo:** {} @@ -3681,52 +3733,52 @@ Use se receber um erro YAML. references - + Not a reference: {}. Não é referência: {}. - + Unknown reference: {}. Referência desconhecida: {}. - + Path: Caminho: - + Stats: Estatísticas: - + POV: PDV: - + Status: Estado: - + Label: Etiqueta: - + Short summary: Sinopse curta: - + Long summary: Sinopse longa: - + Notes: Notas: @@ -3746,7 +3798,7 @@ Use se receber um erro YAML. PDV de: - + Go to {}. Ir para {}. @@ -3761,7 +3813,7 @@ Use se receber um erro YAML. Objectivo - + Conflict Conflito @@ -3781,62 +3833,62 @@ Use se receber um erro YAML. Sinopse mais longa - + Description Descrição - + Result Resultado - + Characters Personagens - + Resolution steps Passos da resolução - + Passion Paixão - + <b>Unknown reference:</b> {}. <b>Referência desconhecida:</b> {}. - + Folder: <b>{}</b> Pasta: <b>{}</b> - + Text: <b>{}</b> Texto: <b>{}</b> - + Character: <b>{}</b> Personagem: <b>{}</b> - + Plot: <b>{}</b> Enredo: <b>{}</b> - + World: <b>{name}</b>{path} Mundo: <b>{name}</b>{path} - + Referenced in: Referência em: @@ -3854,12 +3906,12 @@ Use se receber um erro YAML. Opções - + Restore Restaurar - + Delete Eliminar @@ -3919,12 +3971,12 @@ Use se receber um erro YAML. {} segundos atrás - + Line {}: Linha {}: - + Clear all Limpar tudo @@ -3945,52 +3997,52 @@ Use se receber um erro YAML. settingsWindow - + New status Novo estado - + New label Nova etiqueta - + newtheme novotema - + New theme Novo tema - + (read-only) (só de leitura) - + Open Image Abrir imagem - + Image files (*.jpg; *.jpeg; *.png) Ficheiros de imagem (*.jpg; *.jpeg; *.png) - + Error Erro - + Unable to load selected file Impossível carregar o ficheiro seleccionado - + Unable to add selected image: {} Impossível adicionar a imagem seleccionada: @@ -4092,22 +4144,22 @@ Use se receber um erro YAML. tabSplitter - + Open selected items in that view. Abrir itens seleccionados na vista. - + Split horizontally Dividir na horizontal - + Close split Fechar divisão - + Split vertically Dividir na vertical @@ -4115,7 +4167,7 @@ Use se receber um erro YAML. textEditView - + Various Vários @@ -4214,27 +4266,27 @@ Use se receber um erro YAML. Vazio - + Novel Romance - + Novella Novela - + Short Story História curta - + Research paper Investigação - + Demo projects Projectos de demonstração @@ -4269,147 +4321,147 @@ Use se receber um erro YAML. Criar - + Open project Abrir projecto - + Manuskript project (*.msk);;All files (*) Projecto do Manuskript (*.msk);;Todos os ficheiros (*) - + Save project as... Gravar projecto como... - + Manuskript project (*.msk) Projecto do Manuskript (*.msk) - + Manuskript Manuskript - + Create New Project Criar novo projecto - + Warning Aviso - + Overwrite existing project {} ? Sobrescrever projecto {} existente? - + Empty fiction Ficção vazia - + Chapter capítulos - + Scene cenas - + Trilogy Trilogia - + Book livros - + Section secções - + Empty non-fiction Não-ficção vazia - + words each. palavras cada. - + of de - + Text Texto - + Something Algo - + <b>Total:</b> {} words (~ {} pages) <b>Total:</b> {} palavras (~ {} páginas) - + Fiction Ficção - + Non-fiction Não-ficção - + Idea Ideia - + Note Nota - + Research Investigação - + TODO A FAZER - + First draft 1º rascunho - + Second draft 2º rascunho - + Final Final diff --git a/i18n/manuskript_ro.ts b/i18n/manuskript_ro.ts index be2949c..29a1997 100644 --- a/i18n/manuskript_ro.ts +++ b/i18n/manuskript_ro.ts @@ -38,7 +38,7 @@ - + Plain text @@ -53,82 +53,82 @@ - + Error - + Standalone document (not just a fragment) - + Include a table of contents. - + Number of sections level to include in TOC: - + Typographically correct output - + Normalize the document (cleaner) - + Specify the base level for headers: - + Use reference-style links instead of inline links - + Use ATX-style headers - + Self-contained HTML files, with no dependencies - + Use <q> tags for quotes in HTML - + LaTeX engine used to produce the PDF. - + Paper size: - + Font size: - + Class: - + Line spacing: @@ -159,13 +159,13 @@ - + Simplest export to plain text. Allows you to use your own markup not understood by Manuskript, for example <a href='www.fountain.io'>Fountain</a>. - + <p>A universal document converter. Can be used to convert Markdown to a wide range of other formats.</p> <p>Website: <a href="http://www.pandoc.org">http://pandoc.org/</a></p> @@ -198,24 +198,24 @@ - + Disable YAML metadata block. Use that if you get YAML related error. - + Convert to ePUB3 - + Could not process regular expression: {} - + Choose output file… @@ -324,24 +324,24 @@ Use that if you get YAML related error. Import - + Markdown import - + <b>Info:</b> A very simple parser that will go through a markdown document and create items for each titles.<br/>&nbsp; - + Folder import - + <p><b>Info:</b> Imports a whole directory structure. Folders are added as folders, and plaintext documents within (you chose which ones by extension) @@ -350,47 +350,47 @@ Use that if you get YAML related error. - + Include only those extensions: - + Comma separated values - + Sort items by name - + Import folder then files - + OPML Import - + File open failed. - + This does not appear to be a valid OPML file. - + Pandoc import - + <b>Info:</b> Manuskript can import from <b>markdown</b> or <b>OPML</b>. Pandoc will convert your document to either (see option below), and @@ -400,17 +400,17 @@ Use that if you get YAML related error. - + Import using: - + Wrap lines: - + <p>Should pandoc create cosmetic / non-semantic line-breaks?</p><p> <b>auto</b>: wraps at 72 characters.<br> @@ -420,27 +420,27 @@ Use that if you get YAML related error. - + Mind Map Import - + This does not appear to be a valid Mind Map file. - + Mind Map import - + Import tip as: - + Untitled @@ -696,7 +696,7 @@ Use that if you get YAML related error. - + Outline @@ -741,157 +741,157 @@ Use that if you get YAML related error. - + &Tools - + &Edit - + &View - + &Mode - + &Cheat sheet - + Sea&rch - + &Navigation - + &Open - + Ctrl+O - + &Save - + Ctrl+S - + Sa&ve as... - + Ctrl+Shift+S - + &Quit - + Ctrl+Q - + &Show help texts - + Ctrl+Shift+B - + &Spellcheck - + F9 - + &Labels... - + &Status... - + Tree - + &Simple - + &Fiction - + Index cards - + S&ettings - + F8 - + &Close project - + Co&mpile - + F6 - + &Frequency Analyzer @@ -901,194 +901,184 @@ Use that if you get YAML related error. - + &About - + About Manuskript - + Manuskript - + Project {} saved. - + WARNING: Project {} not saved. - + Project {} loaded. - - Project {} loaded with some errors: - - - - - * {} wasn't found in project file. - - - - + Project {} loaded with some errors. - + (~{} pages) - + Words: {}{} - + Book summary - + Project tree - + Metadata - + Story line - + Enter information about your book, and yourself. - + The basic situation, in the form of a 'What if...?' question. Ex: 'What if the most dangerous evil wizard wasn't able to kill a baby?' (Harry Potter) - + Take time to think about a one sentence (~50 words) summary of your book. Then expand it to a paragraph, then to a page, then to a full summary. - + Create your characters. - + Develop plots. - + Build worlds. Create hierarchy of broad categories down to specific details. - + Create the outline of your masterpiece. - + Write. - + Debug info. Sometimes useful. - + Dictionary - + Nothing - + POV - + Label - + Progress - + Compile - + Icon color - + Text color - + Background color - + Icon - + Text - + Background - + Border - + Corner @@ -1098,307 +1088,307 @@ Use that if you get YAML related error. - + &Import… - + F7 - + &Copy - + Ctrl+C - + C&ut - + Ctrl+X - + &Paste - + Ctrl+V - + &Split… - + Ctrl+Shift+K - + Sp&lit at cursor - + Ctrl+K - + Ctrl+M - + Ctrl+D - + Del - + &Move Up - + Ctrl+Shift+Up - + M&ove Down - + Ctrl+Shift+Down - + Dupl&icate - + &Delete - + &Rename - + F2 - + Organi&ze - + M&erge - + &Format - + &Header - + &Level 1 (setext) - + Ctrl+Alt+1 - + Level &2 - + Ctrl+Alt+2 - + Level &1 (atx) - + Ctrl+1 - + L&evel 2 - + Ctrl+2 - + Level &3 - + Ctrl+3 - + Level &4 - + Ctrl+4 - + Level &5 - + Ctrl+5 - + Level &6 - + Ctrl+6 - + &Bold - + Ctrl+B - + &Italic - + Ctrl+I - + &Strike - + &Verbatim - + Su&perscript - + Ctrl++ - + Subsc&ript - + Ctrl+- - + Co&mment block - + Ctrl+Shift+C - + Clear &formats - + Ctrl+0 - + &Comment line(s) - + &Ordered list - + &Unordered list - + B&lockquote @@ -1408,52 +1398,52 @@ Use that if you get YAML related error. - + The file {} does not exist. Has it been moved or deleted? - + Install {}{} to use spellcheck - + {} has no installed dictionaries - + {}{} is not installed - + Save project? - + Save changes to project "{}" before closing? - + Your changes will be lost if you don't save them. - + PyQt / Qt versions 5.11 and 5.12 are known to cause a crash which might result in a loss of data. - + PyQt {} and Qt {} are in use. - + Proceed with import at your own risk @@ -1463,12 +1453,12 @@ Use that if you get YAML related error. - + Search - + Ctrl+F @@ -1492,6 +1482,76 @@ Use that if you get YAML related error. Status + + + &Technical Support + + + + + How to obtain technical support for Manuskript. + + + + + F1 + + + + + &Locate log file... + + + + + Locate log file + + + + + Locate the diagnostic log file used for this session. + + + + + Shift+F1 + + + + + Sorry! + + + + + This session is not being logged. + + + + + A log file is a Work in Progress! + + + + + The log file "{}" will continue to be written to until Manuskript is closed. + + + + + It will now be displayed in your file manager, but is of limited use until you close Manuskript. + + + + + Error! + + + + + An error was encountered while trying to show the log file below in your file manager. + + Search @@ -2213,42 +2273,42 @@ Use that if you get YAML related error. SpellAction - + Spelling Suggestions - + &Add to dictionary - + &Remove from custom dictionary - + &New Character - + &New Plot Item - + &New World Item - + &Correction Suggestions - + &Correction Suggestion @@ -2282,37 +2342,37 @@ Use that if you get YAML related error. abstractModel - + Title - + POV - + Label - + Status - + Compile - + Word count - + Goal @@ -2353,12 +2413,12 @@ Use that if you get YAML related error. characterModel - + Name - + Value @@ -2366,17 +2426,17 @@ Use that if you get YAML related error. characterTreeView - + Main - + Secondary - + Minor @@ -2808,72 +2868,72 @@ Use that if you get YAML related error. fullScreenEditor - + Theme: - + {} words / {} - + {} words - + Spellcheck - + Navigation - + New Text - + Title - + Title: Show Full Path - + Theme selector - + Word count - + Progress - + Progress: Auto Show/Hide - + Clock - + Clock: Show Seconds @@ -2952,14 +3012,6 @@ Use that if you get YAML related error. - - lastAccessedDirectoryInfo - - - Last accessed directory "{}" loaded. - - - lineEditView @@ -3074,32 +3126,32 @@ Use that if you get YAML related error. - + Root - + {} words - + ({} chars) {} words / {} - + {} words / {} - + {} chars - + {} chars @@ -3153,7 +3205,7 @@ Use that if you get YAML related error. myPanel - + Auto-hide @@ -3307,12 +3359,12 @@ Use that if you get YAML related error. outlineItem - + {} words / {} ({}) - + {} words @@ -3320,17 +3372,17 @@ Use that if you get YAML related error. pandocSettings - + General - + Table of Content - + Custom settings for {} @@ -3534,32 +3586,32 @@ Use that if you get YAML related error. plotModel - + Name - + Meta - + New step - + Main - + Secondary - + Minor @@ -3567,22 +3619,22 @@ Use that if you get YAML related error. plotTreeView - + Main - + Secondary - + Minor - + **Plot:** {} @@ -3646,52 +3698,52 @@ Use that if you get YAML related error. references - + Not a reference: {}. - + Unknown reference: {}. - + Path: - + Stats: - + POV: - + Status: - + Label: - + Short summary: - + Long summary: - + Notes: @@ -3711,72 +3763,72 @@ Use that if you get YAML related error. - + Go to {}. - + Description - + Result - + Characters - + Resolution steps - + Passion - + Conflict - + <b>Unknown reference:</b> {}. - + Folder: <b>{}</b> - + Text: <b>{}</b> - + Character: <b>{}</b> - + Plot: <b>{}</b> - + World: <b>{name}</b>{path} - + Referenced in: @@ -3819,12 +3871,12 @@ Use that if you get YAML related error. - + Restore - + Delete @@ -3884,12 +3936,12 @@ Use that if you get YAML related error. - + Line {}: - + Clear all @@ -3910,52 +3962,52 @@ Use that if you get YAML related error. settingsWindow - + New status - + New label - + newtheme - + New theme - + (read-only) - + Open Image - + Image files (*.jpg; *.jpeg; *.png) - + Error - + Unable to load selected file - + Unable to add selected image: {} @@ -4042,22 +4094,22 @@ Use that if you get YAML related error. tabSplitter - + Open selected items in that view. - + Split horizontally - + Close split - + Split vertically @@ -4065,7 +4117,7 @@ Use that if you get YAML related error. textEditView - + Various @@ -4164,27 +4216,27 @@ Use that if you get YAML related error. - + Novel - + Novella - + Short Story - + Research paper - + Demo projects @@ -4219,147 +4271,147 @@ Use that if you get YAML related error. - + Open project - + Manuskript project (*.msk);;All files (*) - + Save project as... - + Manuskript project (*.msk) - + Manuskript - + Create New Project - + Warning - + Overwrite existing project {} ? - + Empty fiction - + Chapter - + Scene - + Trilogy - + Book - + Section - + Empty non-fiction - + words each. - + of - + Text - + Something - + <b>Total:</b> {} words (~ {} pages) - + Fiction - + Non-fiction - + Idea - + Note - + Research - + TODO - + First draft - + Second draft - + Final diff --git a/i18n/manuskript_ru.ts b/i18n/manuskript_ru.ts index b002225..d0a4bcd 100644 --- a/i18n/manuskript_ru.ts +++ b/i18n/manuskript_ru.ts @@ -38,7 +38,7 @@ Предварительный просмотр с highlighter. - + Plain text Обычный текст @@ -53,82 +53,82 @@ Необходим установленный редактор LaTeX. - + Error Ошибка - + Standalone document (not just a fragment) Отдельный документ (а не фрагмент) - + Include a table of contents. Включить оглавление. - + Number of sections level to include in TOC: Число уровней разделов для включения в оглавление: - + Typographically correct output Типографически правильный вывод - + Normalize the document (cleaner) Нормализовать документа (чистильщик) - + Specify the base level for headers: Укажите базовый уровень для заголовков: - + Use reference-style links instead of inline links Использовать прямые ссылку в виде ссылки, а не встроенные ссылки - + Use ATX-style headers Использование ATX-стиль заголовков - + Self-contained HTML files, with no dependencies Автономные HTML файлы, без каких-либо зависимостей - + Use <q> tags for quotes in HTML Используйте теги <q> для цитат в HTML - + LaTeX engine used to produce the PDF. LaTeX использован для создания PDF. - + Paper size: Размер бумаги: - + Font size: Размер шрифта: - + Class: Класс: - + Line spacing: Междустрочный интервал: @@ -160,14 +160,14 @@ Предполагается, что тексты форматируются в markdown. - + Simplest export to plain text. Allows you to use your own markup not understood by Manuskript, for example <a href='www.fountain.io'>Fountain</a>. Простой экспорт в обычный текст. Позволяет вам использовать ваши собственные метки, не распознанные manuskript, например <a href='www.fountain.io'>Фонтан</a>. - + <p>A universal document converter. Can be used to convert Markdown to a wide range of other formats.</p> <p>Website: <a href="http://www.pandoc.org">http://pandoc.org/</a></p> @@ -208,26 +208,26 @@ или контролировать через планировщик. - + Disable YAML metadata block. Use that if you get YAML related error. Отключить блок метаданных YAML. Используйте это, если получаете ошибки связанные с YAML. - + Convert to ePUB3 Преобразовать в формат ePUB3 - + Could not process regular expression: {} Не удалось обработать регулярное выражение: {} - + Choose output file… Выберите выходной файл… @@ -336,12 +336,12 @@ Use that if you get YAML related error. Import - + Markdown import Markdown импорт - + <b>Info:</b> A very simple parser that will go through a markdown document and create items for each titles.<br/>&nbsp; @@ -350,12 +350,12 @@ Use that if you get YAML related error. создаст элементы для каждого заголовка.<br/>&nbsp; - + Folder import Импорт папки - + <p><b>Info:</b> Imports a whole directory structure. Folders are added as folders, and plaintext documents within (you chose which ones by extension) @@ -368,47 +368,47 @@ Use that if you get YAML related error. <p>Поддерживаются только текстовые файлы (не изображения, двоичный или другие).</p> - + Include only those extensions: Включить только эти расширения: - + Comma separated values Значения, разделенные запятыми - + Sort items by name Сортировка элементов по имени - + Import folder then files Импорт папки потом файлов - + OPML Import Импорт OPML - + File open failed. Файл открыть не удалось. - + This does not appear to be a valid OPML file. Это не допустимый OPML файл. - + Pandoc import Импорт Pandoc - + <b>Info:</b> Manuskript can import from <b>markdown</b> or <b>OPML</b>. Pandoc will convert your document to either (see option below), and @@ -423,17 +423,17 @@ Use that if you get YAML related error. <br/>&nbsp; - + Import using: Импортировать используя: - + Wrap lines: Перенос строк: - + <p>Should pandoc create cosmetic / non-semantic line-breaks?</p><p> <b>auto</b>: wraps at 72 characters.<br> @@ -448,27 +448,27 @@ Use that if you get YAML related error. исходного документа.</p> - + Mind Map Import Импорт Mind Map - + This does not appear to be a valid Mind Map file. Это не допустимый Mind Map файл. - + Mind Map import Импортировать Mind Map - + Import tip as: Советуем импортировать как: - + Untitled Без имени @@ -724,7 +724,7 @@ Use that if you get YAML related error. Источник конфликта - + Outline Схема @@ -769,157 +769,157 @@ Use that if you get YAML related error. &Помощь - + &Tools &Инструменты - + &Edit &Редактировать - + &View &Просмотр - + &Mode &Режим - + &Cheat sheet &Шпаргалка - + Sea&rch Пои&ск - + &Navigation &Навигация - + &Open &Открыть - + Ctrl+O - + &Save &Сохранить - + Ctrl+S - + Sa&ve as... Сохра&нить как... - + Ctrl+Shift+S - + &Quit &Выход - + Ctrl+Q - + &Show help texts &Показать текст подсказки - + Ctrl+Shift+B - + &Spellcheck &Проверка орфографии - + F9 - + &Labels... &Метки... - + &Status... &Статус... - + Tree Дерево - + &Simple &Простой - + &Fiction &Вымысел - + Index cards Индекс карты - + S&ettings Н&астройки - + F8 - + &Close project &Закрыть проект - + Co&mpile Со&брать - + F6 - + &Frequency Analyzer &Анализатор частоты повторений @@ -929,196 +929,186 @@ Use that if you get YAML related error. Информация о книге - + &About &О программе - + About Manuskript О Манускрипт - + Manuskript Манускрипт - + Project {} saved. Сохранить {} проект. - + WARNING: Project {} not saved. ВНИМАНИЕ: Проект {} не сохранён. - + Project {} loaded. Проект {} загружен. - - Project {} loaded with some errors: - Проект {} загружен некоторыми ошибками: - - - - * {} wasn't found in project file. - * {} не найден в файле проекта. - - - + Project {} loaded with some errors. Проект {} загружен с некоторыми ошибками. - + (~{} pages) (~{} страниц) - + Words: {}{} Слова: {}{} - + Book summary Краткое содержание книги - + Project tree Дерево проекта - + Metadata Метаданные - + Story line Сюжетная линия - + Enter information about your book, and yourself. Введите информацию о своей книге и о себе. - + The basic situation, in the form of a 'What if...?' question. Ex: 'What if the most dangerous evil wizard wasn't able to kill a baby?' (Harry Potter) Основная ситуация, в виде 'Что если ...?'. Вопрос. Пример: «Что, если самая опасная                       злой волшебник не смог бы убить ребенка? (Гарри Поттер) - + Take time to think about a one sentence (~50 words) summary of your book. Then expand it to a paragraph, then to a page, then to a full summary. Потратьте время, чтобы придумать одно предложение (~50 слов) о вашей книге. Затем дополните его до                       абзаца, затем до страницы, а затем до полного резюме. - + Create your characters. Создайте своих персонажей. - + Develop plots. Разработайте сюжет. - + Build worlds. Create hierarchy of broad categories down to specific details. Строить миры. Создайте иерархию общих категорий и до конкретных деталей. - + Create the outline of your masterpiece. Создайте план вашего шедевра. - + Write. Писать. - + Debug info. Sometimes useful. Отладочная информация. Иногда полезно. - + Dictionary Словарь - + Nothing Ничего - + POV Точка зрения - + Label Метка - + Progress Прогресс - + Compile Собрать - + Icon color Цвет иконки - + Text color Цвет текста - + Background color Цвет фона - + Icon Иконка - + Text Текст - + Background Фон - + Border Граница - + Corner Угол @@ -1128,307 +1118,307 @@ Use that if you get YAML related error. Добавить шаги сюжета - + &Import… - + F7 - + &Copy &Копировать - + Ctrl+C - + C&ut В&ырезать - + Ctrl+X - + &Paste &Вставить - + Ctrl+V - + &Split… &Разделить… - + Ctrl+Shift+K - + Sp&lit at cursor Ра&зделить на курсор - + Ctrl+K - + Ctrl+M - + Ctrl+D - + Del Удалить - + &Move Up &Переместить вверх - + Ctrl+Shift+Up - + M&ove Down П&ереместить вниз - + Ctrl+Shift+Down - + Dupl&icate Дупли&каты - + &Delete &Удалить - + &Rename &Переименовать - + F2 - + Organi&ze Органи&зовать - + M&erge С&оединить - + &Format &Форматировать - + &Header &Заголовок - + &Level 1 (setext) &Уровень 1 (с текстом) - + Ctrl+Alt+1 Ctrl+Alt+1 - + Level &2 Уровень &2 - + Ctrl+Alt+2 Ctrl+Alt+2 - + Level &1 (atx) Уровень &1 (atx) - + Ctrl+1 Ctrl+1 - + L&evel 2 У&ровень 2 - + Ctrl+2 Ctrl+2 - + Level &3 Уровень &3 - + Ctrl+3 Ctrl+3 - + Level &4 Уровень &4 - + Ctrl+4 Ctrl+4 - + Level &5 Уровень &5 - + Ctrl+5 Ctrl+5 - + Level &6 Уровень &6 - + Ctrl+6 Ctrl+6 - + &Bold &Жирный - + Ctrl+B Ctrl+B - + &Italic &Курсив - + Ctrl+I Ctrl+I - + &Strike &Зачеркнутый - + &Verbatim &Дословный - + Su&perscript Ве&рхний индекс - + Ctrl++ Ctrl++ - + Subsc&ript Инд&екс - + Ctrl+- Ctrl+- - + Co&mment block Бл&ок комментариев - + Ctrl+Shift+C Ctrl+Shift+C - + Clear &formats Очистить &форматирование - + Ctrl+0 Ctrl+0 - + &Comment line(s) &Строка комментария - + &Ordered list &Упорядоченный список - + &Unordered list &Неупорядоченный список - + B&lockquote Бло&к цитата @@ -1438,52 +1428,52 @@ Use that if you get YAML related error. Удалить выбранный шаг сюжета - + The file {} does not exist. Has it been moved or deleted? Файл {} не существует. Он был перемещен или удален? - + Install {}{} to use spellcheck Установите {}{}, чтобы использовать проверку орфографии - + {} has no installed dictionaries {} не имеет установленных словарей - + {}{} is not installed {}{} не установлен - + Save project? - + Save changes to project "{}" before closing? - + Your changes will be lost if you don't save them. - + PyQt / Qt versions 5.11 and 5.12 are known to cause a crash which might result in a loss of data. - + PyQt {} and Qt {} are in use. - + Proceed with import at your own risk @@ -1493,12 +1483,12 @@ Use that if you get YAML related error. - + Search - + Ctrl+F @@ -1522,6 +1512,76 @@ Use that if you get YAML related error. Status Статус + + + &Technical Support + + + + + How to obtain technical support for Manuskript. + + + + + F1 + + + + + &Locate log file... + + + + + Locate log file + + + + + Locate the diagnostic log file used for this session. + + + + + Shift+F1 + + + + + Sorry! + + + + + This session is not being logged. + + + + + A log file is a Work in Progress! + + + + + The log file "{}" will continue to be written to until Manuskript is closed. + + + + + It will now be displayed in your file manager, but is of limited use until you close Manuskript. + + + + + Error! + + + + + An error was encountered while trying to show the log file below in your file manager. + + Search @@ -2243,42 +2303,42 @@ Use that if you get YAML related error. SpellAction - + Spelling Suggestions Варианты правописания - + &Add to dictionary &Добавить в словарь - + &Remove from custom dictionary &Удалить из пользовательского словаря - + &New Character - + &New Plot Item - + &New World Item - + &Correction Suggestions - + &Correction Suggestion @@ -2312,37 +2372,37 @@ Use that if you get YAML related error. abstractModel - + Title Заголовок - + POV Точка зрения - + Label Метка - + Status Статус - + Compile Сборка - + Word count Количество слов - + Goal Цель @@ -2383,12 +2443,12 @@ Use that if you get YAML related error. characterModel - + Name Имя - + Value Значение @@ -2396,17 +2456,17 @@ Use that if you get YAML related error. characterTreeView - + Main Главная - + Secondary Вторичный - + Minor Незначительный @@ -2838,72 +2898,72 @@ Use that if you get YAML related error. fullScreenEditor - + Theme: Тема: - + {} words / {} {} слова / {} - + {} words {} слова - + Spellcheck Проверка орфографии - + Navigation Навигация - + New Text Новый текст - + Title Заголовок - + Title: Show Full Path Название: Показать полный путь - + Theme selector Выбор темы - + Word count Количество слов - + Progress Прогресс - + Progress: Auto Show/Hide Прогресс: Авто Показать/Скрыть - + Clock Часы - + Clock: Show Seconds Часы: Показать секунды @@ -2982,14 +3042,6 @@ Use that if you get YAML related error. Параметры - - lastAccessedDirectoryInfo - - - Last accessed directory "{}" loaded. - Загружается Последний доступ к каталогу "{}". - - lineEditView @@ -3104,32 +3156,32 @@ Use that if you get YAML related error. - + Root Корневой - + {} words {} слова - + ({} chars) {} words / {} - + {} words / {} - + {} chars - + {} chars @@ -3183,7 +3235,7 @@ Use that if you get YAML related error. myPanel - + Auto-hide Автоматически скрывать @@ -3337,12 +3389,12 @@ Use that if you get YAML related error. outlineItem - + {} words / {} ({}) {} слова / {} ({}) - + {} words {} слова @@ -3350,17 +3402,17 @@ Use that if you get YAML related error. pandocSettings - + General Основные - + Table of Content Содержание - + Custom settings for {} Пользовательские настройки для {} @@ -3564,32 +3616,32 @@ Use that if you get YAML related error. plotModel - + Name Имя - + Meta - + New step Новый шаг - + Main Главная - + Secondary Вторичный - + Minor Незначительный @@ -3597,22 +3649,22 @@ Use that if you get YAML related error. plotTreeView - + Main Главная - + Secondary Вторичный - + Minor Незначительный - + **Plot:** {} **Сюжет:** {} @@ -3676,52 +3728,52 @@ Use that if you get YAML related error. references - + Not a reference: {}. Не является ссылкой: {}. - + Unknown reference: {}. Неизвестная ссылка: {}. - + Path: Путь: - + Stats: Статистика: - + POV: Точка зрения: - + Status: Статус: - + Label: Метка: - + Short summary: Короткое резюме: - + Long summary: Длинное резюме: - + Notes: Примечания: @@ -3741,72 +3793,72 @@ Use that if you get YAML related error. Точки зрения: - + Go to {}. Пойти в {}. - + Description Описание - + Result Результат - + Characters Персонажи - + Resolution steps Шаги решения - + Passion Увлечение - + Conflict Конфликт - + <b>Unknown reference:</b> {}. <b>Неизвестная ссылка:</b> {}. - + Folder: <b>{}</b> Папка: <b>{}</b> - + Text: <b>{}</b> Текст: <b>{}</b> - + Character: <b>{}</b> Персонаж: <b>{}</b> - + Plot: <b>{}</b> Сюжет: <b>{}</b> - + World: <b>{name}</b>{path} Мир: <b>{name}</b>{path} - + Referenced in: Ссылка в: @@ -3849,12 +3901,12 @@ Use that if you get YAML related error. Параметры - + Restore Востановить - + Delete Удалить @@ -3914,12 +3966,12 @@ Use that if you get YAML related error. {} секунд назад - + Line {}: Строка {}: - + Clear all Очистить все @@ -3940,52 +3992,52 @@ Use that if you get YAML related error. settingsWindow - + New status Новый статус - + New label Новая метка - + newtheme Новая тема - + New theme Новая тема - + (read-only) (только чтение) - + Open Image Открытое изображение - + Image files (*.jpg; *.jpeg; *.png) Файлы изображений (*.jpg *.jpeg *.png) - + Error Ошибка - + Unable to load selected file Не удалось загрузить выбранный файл - + Unable to add selected image: {} Невозможно добавить выбранное изображение: @@ -4087,22 +4139,22 @@ Use that if you get YAML related error. tabSplitter - + Open selected items in that view. Открыть выбранные элементы в этом виде. - + Split horizontally Отразить по горизонтали - + Close split Закрыть разделение - + Split vertically Разделить по вертикали @@ -4110,7 +4162,7 @@ Use that if you get YAML related error. textEditView - + Various Различные @@ -4209,27 +4261,27 @@ Use that if you get YAML related error. Пустые - + Novel Роман - + Novella Повесть - + Short Story Короткий рассказ - + Research paper Научная статья - + Demo projects Демонстрационные проекты @@ -4264,147 +4316,147 @@ Use that if you get YAML related error. Создать - + Open project Открыть проект - + Manuskript project (*.msk);;All files (*) Манускрипт проект (*.msk);;Все файлы (*) - + Save project as... Сохранить проект как... - + Manuskript project (*.msk) Манускрипт проект (*.msk) - + Manuskript Манускрипт - + Create New Project Создать новый проект - + Warning Внимание - + Overwrite existing project {} ? Перезаписать существующий проект {} ? - + Empty fiction Чистый лист - + Chapter Глава - + Scene Сцена - + Trilogy Трилогия - + Book Книга - + Section Раздел - + Empty non-fiction Пустая научная литература - + words each. слов каждый. - + of из - + Text Текст - + Something Что-то - + <b>Total:</b> {} words (~ {} pages) <b>Итого:</b> {} слова (~ {} страниц) - + Fiction Художественная литература - + Non-fiction Научно-популярные - + Idea Идея - + Note Заметка - + Research Исследования - + TODO Список дел - + First draft Первый черновик - + Second draft Второй черновик - + Final Окончательный diff --git a/i18n/manuskript_sv.ts b/i18n/manuskript_sv.ts index d2d2632..839bfc1 100644 --- a/i18n/manuskript_sv.ts +++ b/i18n/manuskript_sv.ts @@ -45,12 +45,12 @@ Förhandsgranskning med märkpenna. - + Plain text Ren text - + Simplest export to plain text. Allows you to use your own markup not understood by Manuskript, for example <a href='www.fountain.io'>Fountain</a>. Enkel export till ren text. Låter dig använda egna markup-format som annars @@ -62,7 +62,7 @@ Ett relativt okänt format som används blygsamt, t.ex. på websidor. - + <p>A universal document converter. Can be used to convert Markdown to a wide range of other formats.</p> <p>Website: <a href="http://www.pandoc.org">http://pandoc.org/</a></p> @@ -73,7 +73,7 @@ - + Error Fel @@ -132,100 +132,100 @@ kan visas eller kontrolleras via en outliner. - + Standalone document (not just a fragment) Fristående dokument (inte bara ett fragment) - + Include a table of contents. Inkludera innehållsförteckning. - + Number of sections level to include in TOC: Antal av sektionsnivåer för inkludering i innehållsförteckningen: - + Typographically correct output Typografiskt korrekt utdata - + Normalize the document (cleaner) Normalisera dokumentet (renare) - + Specify the base level for headers: Välj rotnivå för rubriker: - + Use reference-style links instead of inline links Använd referenslänkar i stället för infogade länkar - + Use ATX-style headers Använd ATX-rubriker - + Self-contained HTML files, with no dependencies Fristående HTML-filer utan andra beroenden - + Use <q> tags for quotes in HTML Använd <q>-taggar för citat i HTML - + LaTeX engine used to produce the PDF. LaTeX-motor som används för att skapa PDF-dokumentet. - + Paper size: Pappersstorlek: - + Font size: Teckenstorlek: - + Class: Klass: - + Line spacing: Radavstånd: - + Disable YAML metadata block. Use that if you get YAML related error. Avaktivera YAML metadata block. Använd detta om du får ett felmeddelande angående YAML. - + Convert to ePUB3 Konvertera till ePUB3 - + Could not process regular expression: {} - + Choose output file… @@ -334,12 +334,12 @@ Använd detta om du får ett felmeddelande angående YAML. Import - + Markdown import Import av Markdown - + <b>Info:</b> A very simple parser that will go through a markdown document and create items for each titles.<br/>&nbsp; @@ -348,12 +348,12 @@ Använd detta om du får ett felmeddelande angående YAML. och skapar objekt för varje titel.<br/>&nbsp; - + Folder import Import av mappar - + <p><b>Info:</b> Imports a whole directory structure. Folders are added as folders, and plaintext documents within (you chose which ones by extension) @@ -366,47 +366,47 @@ Använd detta om du får ett felmeddelande angående YAML. <p>Endast textfiler stöds (inte bilder, binärer eller annat).</p> - + Include only those extensions: Inkludera endast dessa filändelserna: - + Comma separated values Kommasepareradevärden - + Sort items by name Sortera objekt efter namn - + Import folder then files Importera mapp och sedan filer - + OPML Import OPML-import - + File open failed. Misslyckades med att öppna fil. - + This does not appear to be a valid OPML file. Detta verkar inte vara en giltig OPML-fil. - + Pandoc import Pandoc-import - + <b>Info:</b> Manuskript can import from <b>markdown</b> or <b>OPML</b>. Pandoc will convert your document to either (see option below), and @@ -421,17 +421,17 @@ Använd detta om du får ett felmeddelande angående YAML. <br/>&nbsp; - + Import using: Importera via: - + Wrap lines: Radbryt rader: - + <p>Should pandoc create cosmetic / non-semantic line-breaks?</p><p> <b>auto</b>: wraps at 72 characters.<br> @@ -446,27 +446,27 @@ Använd detta om du får ett felmeddelande angående YAML. originaldokumentet.</p> - + Mind Map Import Import av Mind Map - + This does not appear to be a valid Mind Map file. Detta verkar inte vara en giltig Mind Map-fil. - + Mind Map import Mind Map-import - + Import tip as: Importera tips som: - + Untitled Namnlös @@ -727,7 +727,7 @@ Använd detta om du får ett felmeddelande angående YAML. Konfliktkälla - + Outline Utkast @@ -772,351 +772,341 @@ Använd detta om du får ett felmeddelande angående YAML. &Hjälp - + &Tools &Verktyg - + &Edit &Redigera - + &View &Visa - + &Mode &Läge - + &Cheat sheet &Fusklapp - + Sea&rch S&ök - + &Navigation &Navigation - + &Open &Öppna - + Ctrl+O Ctrl+O - + &Save &Spara - + Ctrl+S Ctrl+S - + Sa&ve as... Spara s&om... - + Ctrl+Shift+S Ctrl+Shift+S - + &Quit &Avsluta - + Ctrl+Q Ctrl+Q - + &Show help texts &Visa hjälptexter - + Ctrl+Shift+B Ctrl+Shift+B - + &Spellcheck &Stavningskontroll - + F9 F9 - + &Labels... &Etiketter... - + &Status... &Status... - + Tree Träd - + &Simple &Enkelt - + &Fiction &Skönlitteratur - + Index cards Registerkort - + S&ettings I&nställningar - + F8 F8 - + &Close project S&täng projekt - + Co&mpile Ko&mpilera - + F6 F6 - + &Frequency Analyzer &Frekvensanalys - + &About &Om - + About Manuskript Om Manuskript - + Manuskript Manuskript - + Project {} saved. Projekt {} sparades. - + WARNING: Project {} not saved. VARNING: Projekt {} sparades ej. - + Project {} loaded. Projekt {} laddades. - - Project {} loaded with some errors: - Projekt {} laddades med vissa fel: - - - - * {} wasn't found in project file. - * {} hittades inte i projektfilen. - - - + Project {} loaded with some errors. Projekt {} laddades med vissa fel. - + (~{} pages) (~{} sidor) - + Words: {}{} Ord: {}{} - + Book summary Sammanfattning av boken - + Project tree Projektträd - + Metadata Metadata - + Story line Handling - + Enter information about your book, and yourself. Skriv information om din bok och dig själv. - + The basic situation, in the form of a 'What if...?' question. Ex: 'What if the most dangerous evil wizard wasn't able to kill a baby?' (Harry Potter) Den grundläggande situationen i form av en "Tänk om...?"-mening. Exempel: 'Tänk om världens farligaste onda trollkarl misslyckades med att döda en baby?' (Harry Potter) - + Take time to think about a one sentence (~50 words) summary of your book. Then expand it to a paragraph, then to a page, then to a full summary. Tänk ut en kort (ca. 50 ord) mening som sammanfattar din bok. Utveckla den sedan till ett stycke, till en sida och sist till en full sammanfattning. - + Create your characters. Skapa dina karaktärer. - + Develop plots. Utveckla handlingen. - + Build worlds. Create hierarchy of broad categories down to specific details. Utforma världar. Skapa en hierarki av generella kategorier ned till minsta detalj. - + Create the outline of your masterpiece. Skapa ett utkast för ditt mästerverk. - + Write. Skriv. - + Debug info. Sometimes useful. Debug-information. Kan vara användbar. - + Dictionary Ordbok - + Nothing Ingenting - + POV Synvinkel - + Label Etikett - + Progress Framsteg - + Compile Kompilera - + Icon color Ikonfärg - + Text color Textfärg - + Background color Bakgrundsfärg - + Icon Ikon - + Text Text - + Background Bakgrund - + Border Kant - + Corner Hörn @@ -1126,307 +1116,307 @@ Använd detta om du får ett felmeddelande angående YAML. Lägg till nytt steg i handlingen (CTRL+Enter) - + &Import… &Importera… - + F7 F7 - + &Copy &Kopiera - + Ctrl+C Ctrl+C - + C&ut K&lipp ut - + Ctrl+X Ctrl+X - + &Paste &Klistra in - + Ctrl+V Ctrl+V - + &Split… &Dela… - + Ctrl+Shift+K Ctrl+Shift+K - + Sp&lit at cursor De&la vid markör - + Ctrl+K Ctrl+K - + Ctrl+M Ctrl+M - + Ctrl+D Ctrl+D - + Del Del - + &Move Up &Flytta upp - + Ctrl+Shift+Up Ctrl+Shift+Pil upp - + M&ove Down Fl&ytta ned - + Ctrl+Shift+Down Ctrl+Shift+Pil ned - + Dupl&icate Dupl&icera - + &Delete &Ta bort - + &Rename &Byt namn - + F2 F2 - + Organi&ze Organi&sera - + M&erge Sa&mmanfoga - + &Format - + &Header - + &Level 1 (setext) - + Ctrl+Alt+1 - + Level &2 - + Ctrl+Alt+2 - + Level &1 (atx) - + Ctrl+1 - + L&evel 2 - + Ctrl+2 - + Level &3 - + Ctrl+3 - + Level &4 - + Ctrl+4 - + Level &5 - + Ctrl+5 - + Level &6 - + Ctrl+6 - + &Bold - + Ctrl+B - + &Italic - + Ctrl+I - + &Strike - + &Verbatim - + Su&perscript - + Ctrl++ - + Subsc&ript - + Ctrl+- - + Co&mment block - + Ctrl+Shift+C - + Clear &formats - + Ctrl+0 - + &Comment line(s) - + &Ordered list - + &Unordered list - + B&lockquote @@ -1436,52 +1426,52 @@ Använd detta om du får ett felmeddelande angående YAML. - + The file {} does not exist. Has it been moved or deleted? - + Install {}{} to use spellcheck - + {} has no installed dictionaries - + {}{} is not installed - + Save project? - + Save changes to project "{}" before closing? - + Your changes will be lost if you don't save them. - + PyQt / Qt versions 5.11 and 5.12 are known to cause a crash which might result in a loss of data. - + PyQt {} and Qt {} are in use. - + Proceed with import at your own risk @@ -1491,12 +1481,12 @@ Använd detta om du får ett felmeddelande angående YAML. - + Search - + Ctrl+F @@ -1520,6 +1510,76 @@ Använd detta om du får ett felmeddelande angående YAML. Status Status + + + &Technical Support + + + + + How to obtain technical support for Manuskript. + + + + + F1 + F1 + + + + &Locate log file... + + + + + Locate log file + + + + + Locate the diagnostic log file used for this session. + + + + + Shift+F1 + + + + + Sorry! + + + + + This session is not being logged. + + + + + A log file is a Work in Progress! + + + + + The log file "{}" will continue to be written to until Manuskript is closed. + + + + + It will now be displayed in your file manager, but is of limited use until you close Manuskript. + + + + + Error! + + + + + An error was encountered while trying to show the log file below in your file manager. + + Search @@ -2241,42 +2301,42 @@ Använd detta om du får ett felmeddelande angående YAML. SpellAction - + Spelling Suggestions Stavningsförslag - + &Add to dictionary &Lägg till i ordbok - + &Remove from custom dictionary &Ta bort från ordbok - + &New Character - + &New Plot Item - + &New World Item - + &Correction Suggestions - + &Correction Suggestion @@ -2310,37 +2370,37 @@ Använd detta om du får ett felmeddelande angående YAML. abstractModel - + Title Titel - + POV Synvinkel - + Label Etikett - + Status Status - + Compile Kompilera - + Word count Antal ord - + Goal Mål @@ -2381,12 +2441,12 @@ Använd detta om du får ett felmeddelande angående YAML. characterModel - + Name Namn - + Value Värde @@ -2394,17 +2454,17 @@ Använd detta om du får ett felmeddelande angående YAML. characterTreeView - + Main Huvudkaraktär - + Secondary Bikaraktär - + Minor Statist @@ -2836,72 +2896,72 @@ Använd detta om du får ett felmeddelande angående YAML. fullScreenEditor - + Theme: Tema: - + {} words / {} {} ord / {} - + {} words {} ord - + Spellcheck - + Navigation - + New Text - + Title Titel - + Title: Show Full Path - + Theme selector - + Word count Antal ord - + Progress Framsteg - + Progress: Auto Show/Hide - + Clock - + Clock: Show Seconds @@ -2980,14 +3040,6 @@ Använd detta om du får ett felmeddelande angående YAML. Inställningar - - lastAccessedDirectoryInfo - - - Last accessed directory "{}" loaded. - - - lineEditView @@ -3102,32 +3154,32 @@ Använd detta om du får ett felmeddelande angående YAML. F11 - + Root Rot - + {} words {} ord - + ({} chars) {} words / {} - + {} words / {} - + {} chars - + {} chars @@ -3181,7 +3233,7 @@ Använd detta om du får ett felmeddelande angående YAML. myPanel - + Auto-hide Göm automatiskt @@ -3335,12 +3387,12 @@ Använd detta om du får ett felmeddelande angående YAML. outlineItem - + {} words / {} ({}) {} ord / {} ({}) - + {} words {} ord @@ -3348,17 +3400,17 @@ Använd detta om du får ett felmeddelande angående YAML. pandocSettings - + General Allmänt - + Table of Content Innehållsförteckning - + Custom settings for {} Anpassade inställningar för {} @@ -3562,32 +3614,32 @@ Använd detta om du får ett felmeddelande angående YAML. plotModel - + Name Namn - + Meta Meta - + New step Nytt steg - + Main Huvudkaraktär - + Secondary Bikaraktär - + Minor Statist @@ -3595,22 +3647,22 @@ Använd detta om du får ett felmeddelande angående YAML. plotTreeView - + Main Huvudkaraktär - + Secondary Bikaraktär - + Minor Statist - + **Plot:** {} **Handling:** {} @@ -3674,52 +3726,52 @@ Använd detta om du får ett felmeddelande angående YAML. references - + Not a reference: {}. Inte en referens: {}. - + Unknown reference: {}. Okänd referens: {}. - + Path: Sökväg: - + Stats: Statistik: - + POV: Synvinkel: - + Status: Status: - + Label: Etikett: - + Short summary: Kort sammanfattning: - + Long summary: Lång sammanfattning: - + Notes: Anteckningar: @@ -3739,7 +3791,7 @@ Använd detta om du får ett felmeddelande angående YAML. Synvinkel: - + Go to {}. Gå till {}. @@ -3754,7 +3806,7 @@ Använd detta om du får ett felmeddelande angående YAML. Mål - + Conflict Konflikt @@ -3774,62 +3826,62 @@ Använd detta om du får ett felmeddelande angående YAML. Längre sammanfattning - + Description Beskrivning - + Result Resultat - + Characters Karaktärer - + Resolution steps Lösningssteg - + Passion Passion - + <b>Unknown reference:</b> {}. <b>Okänd referens:</b> {}. - + Folder: <b>{}</b> Mapp: <b>{}</b> - + Text: <b>{}</b> Text: <b>{}</b> - + Character: <b>{}</b> Karaktär: <b>{}</b> - + Plot: <b>{}</b> Handling: <b>{}</b> - + World: <b>{name}</b>{path} Värld: <b>{name}</b>{path} - + Referenced in: Refereras till i: @@ -3847,12 +3899,12 @@ Använd detta om du får ett felmeddelande angående YAML. Alternativ - + Restore Återskapa - + Delete Ta bort @@ -3912,12 +3964,12 @@ Använd detta om du får ett felmeddelande angående YAML. {} sekunder sedan - + Line {}: Rad {}: - + Clear all Rensa @@ -3938,52 +3990,52 @@ Använd detta om du får ett felmeddelande angående YAML. settingsWindow - + New status Ny status - + New label Ny etikett - + newtheme newtheme - + New theme Nytt tema - + (read-only) (skrivskyddad) - + Open Image - + Image files (*.jpg; *.jpeg; *.png) - + Error Fel - + Unable to load selected file - + Unable to add selected image: {} @@ -4084,22 +4136,22 @@ Använd detta om du får ett felmeddelande angående YAML. tabSplitter - + Open selected items in that view. Öppna valda objekt i den visningen. - + Split horizontally Dela horisontellt - + Close split Stäng delning - + Split vertically Dela vertikalt @@ -4107,7 +4159,7 @@ Använd detta om du får ett felmeddelande angående YAML. textEditView - + Various Diverse @@ -4206,27 +4258,27 @@ Använd detta om du får ett felmeddelande angående YAML. Tom - + Novel Roman - + Novella Längre novell - + Short Story Kortare novell - + Research paper Uppsats - + Demo projects Demoprojekt @@ -4261,147 +4313,147 @@ Använd detta om du får ett felmeddelande angående YAML. Skapa - + Open project Öppna projekt - + Manuskript project (*.msk);;All files (*) Manuskript-projekt (*.msk);;Alla filer (*) - + Save project as... Spara projekt som... - + Manuskript project (*.msk) Manuskript-projekt (*.msk) - + Manuskript Manuskript - + Create New Project Skapa Nytt Projekt - + Warning Varning - + Overwrite existing project {} ? Skriv över existerande projekt {} ? - + Empty fiction Tom skönlitteratur - + Chapter Kapitel - + Scene Scen - + Trilogy Trilogi - + Book Bok - + Section Avsnitt - + Empty non-fiction Tom facklitteratur - + words each. ord vardera. - + of av - + Text Text - + Something Någonting - + <b>Total:</b> {} words (~ {} pages) <b>Total:</b> {} ord (~ {} sidor) - + Fiction Skönlitteratur - + Non-fiction Facklitteratur - + Idea Idé - + Note Anteckning - + Research Referensinformation - + TODO Att Göra - + First draft Första utkast - + Second draft Andra utkast - + Final Slutgiltig diff --git a/i18n/manuskript_tr.ts b/i18n/manuskript_tr.ts index 4b76609..7dfe4f4 100644 --- a/i18n/manuskript_tr.ts +++ b/i18n/manuskript_tr.ts @@ -38,7 +38,7 @@ - + Plain text Düz metin @@ -53,82 +53,82 @@ LaTex yüklü olmalıdır. - + Error Hata - + Standalone document (not just a fragment) - + Include a table of contents. İçindekiler kısmı ekleyin. - + Number of sections level to include in TOC: - + Typographically correct output Doğru yazılmış sonuç - + Normalize the document (cleaner) - + Specify the base level for headers: - + Use reference-style links instead of inline links - + Use ATX-style headers ATX-stili başlık kullan - + Self-contained HTML files, with no dependencies - + Use <q> tags for quotes in HTML - + LaTeX engine used to produce the PDF. - + Paper size: Kağıt boyutu: - + Font size: Yazı tipi boyutu: - + Class: Sınıf: - + Line spacing: Satır aralığı: @@ -159,13 +159,13 @@ - + Simplest export to plain text. Allows you to use your own markup not understood by Manuskript, for example <a href='www.fountain.io'>Fountain</a>. - + <p>A universal document converter. Can be used to convert Markdown to a wide range of other formats.</p> <p>Website: <a href="http://www.pandoc.org">http://pandoc.org/</a></p> @@ -198,24 +198,24 @@ - + Disable YAML metadata block. Use that if you get YAML related error. - + Convert to ePUB3 ePUB3 dosyasına çevir - + Could not process regular expression: {} Düzenli ifadeler işlenirken hata oluştu : {} - + Choose output file… @@ -324,24 +324,24 @@ Use that if you get YAML related error. Import - + Markdown import - + <b>Info:</b> A very simple parser that will go through a markdown document and create items for each titles.<br/>&nbsp; - + Folder import - + <p><b>Info:</b> Imports a whole directory structure. Folders are added as folders, and plaintext documents within (you chose which ones by extension) @@ -350,47 +350,47 @@ Use that if you get YAML related error. - + Include only those extensions: - + Comma separated values Virgülle ayrılmış değerler - + Sort items by name - + Import folder then files - + OPML Import - + File open failed. Dosya açılamadı. - + This does not appear to be a valid OPML file. Bu bir OPML dosyası değil. - + Pandoc import - + <b>Info:</b> Manuskript can import from <b>markdown</b> or <b>OPML</b>. Pandoc will convert your document to either (see option below), and @@ -400,17 +400,17 @@ Use that if you get YAML related error. - + Import using: Bunu kullanarak içeri aktar: - + Wrap lines: - + <p>Should pandoc create cosmetic / non-semantic line-breaks?</p><p> <b>auto</b>: wraps at 72 characters.<br> @@ -420,27 +420,27 @@ Use that if you get YAML related error. - + Mind Map Import - + This does not appear to be a valid Mind Map file. - + Mind Map import - + Import tip as: - + Untitled Başlıksız @@ -696,7 +696,7 @@ Use that if you get YAML related error. Çatışma kaynağı - + Outline Taslak @@ -741,157 +741,157 @@ Use that if you get YAML related error. &Yardım - + &Tools &Araçlar - + &Edit &Düzenle - + &View - + &Mode - + &Cheat sheet - + Sea&rch - + &Navigation - + &Open &Aç - + Ctrl+O Ctrl+O - + &Save &Kaydet - + Ctrl+S Ctrl+S - + Sa&ve as... Farklı Kaydet... - + Ctrl+Shift+S Ctrl+Shift+S - + &Quit &Kapat - + Ctrl+Q Ctrl+Q - + &Show help texts &Yardım dosyalarını göster - + Ctrl+Shift+B Ctrl+Shift+B - + &Spellcheck &Yazım Kontrolü - + F9 F9 - + &Labels... &Etiketler... - + &Status... &Durum... - + Tree - + &Simple - + &Fiction - + Index cards - + S&ettings - + F8 F8 - + &Close project - + Co&mpile - + F6 F6 - + &Frequency Analyzer @@ -901,194 +901,184 @@ Use that if you get YAML related error. - + &About - + About Manuskript - + Manuskript - + Project {} saved. - + WARNING: Project {} not saved. - + Project {} loaded. - - Project {} loaded with some errors: - - - - - * {} wasn't found in project file. - - - - + Project {} loaded with some errors. - + (~{} pages) - + Words: {}{} - + Book summary - + Project tree - + Metadata - + Story line - + Enter information about your book, and yourself. - + The basic situation, in the form of a 'What if...?' question. Ex: 'What if the most dangerous evil wizard wasn't able to kill a baby?' (Harry Potter) - + Take time to think about a one sentence (~50 words) summary of your book. Then expand it to a paragraph, then to a page, then to a full summary. - + Create your characters. - + Develop plots. - + Build worlds. Create hierarchy of broad categories down to specific details. - + Create the outline of your masterpiece. - + Write. - + Debug info. Sometimes useful. - + Dictionary - + Nothing - + POV - + Label - + Progress - + Compile - + Icon color - + Text color - + Background color - + Icon - + Text - + Background - + Border - + Corner @@ -1098,307 +1088,307 @@ Use that if you get YAML related error. - + &Import… - + F7 F7 - + &Copy - + Ctrl+C - + C&ut - + Ctrl+X - + &Paste - + Ctrl+V - + &Split… - + Ctrl+Shift+K - + Sp&lit at cursor - + Ctrl+K - + Ctrl+M - + Ctrl+D - + Del - + &Move Up - + Ctrl+Shift+Up - + M&ove Down - + Ctrl+Shift+Down - + Dupl&icate - + &Delete - + &Rename - + F2 F2 - + Organi&ze - + M&erge - + &Format - + &Header - + &Level 1 (setext) - + Ctrl+Alt+1 - + Level &2 - + Ctrl+Alt+2 - + Level &1 (atx) - + Ctrl+1 - + L&evel 2 - + Ctrl+2 - + Level &3 - + Ctrl+3 - + Level &4 - + Ctrl+4 - + Level &5 - + Ctrl+5 - + Level &6 - + Ctrl+6 - + &Bold - + Ctrl+B - + &Italic - + Ctrl+I - + &Strike - + &Verbatim - + Su&perscript - + Ctrl++ - + Subsc&ript - + Ctrl+- - + Co&mment block - + Ctrl+Shift+C - + Clear &formats - + Ctrl+0 - + &Comment line(s) - + &Ordered list - + &Unordered list - + B&lockquote @@ -1408,52 +1398,52 @@ Use that if you get YAML related error. - + The file {} does not exist. Has it been moved or deleted? - + Install {}{} to use spellcheck - + {} has no installed dictionaries - + {}{} is not installed - + Save project? - + Save changes to project "{}" before closing? - + Your changes will be lost if you don't save them. - + PyQt / Qt versions 5.11 and 5.12 are known to cause a crash which might result in a loss of data. - + PyQt {} and Qt {} are in use. - + Proceed with import at your own risk @@ -1463,12 +1453,12 @@ Use that if you get YAML related error. - + Search - + Ctrl+F @@ -1492,6 +1482,76 @@ Use that if you get YAML related error. Status Durum + + + &Technical Support + + + + + How to obtain technical support for Manuskript. + + + + + F1 + F1 + + + + &Locate log file... + + + + + Locate log file + + + + + Locate the diagnostic log file used for this session. + + + + + Shift+F1 + + + + + Sorry! + + + + + This session is not being logged. + + + + + A log file is a Work in Progress! + + + + + The log file "{}" will continue to be written to until Manuskript is closed. + + + + + It will now be displayed in your file manager, but is of limited use until you close Manuskript. + + + + + Error! + + + + + An error was encountered while trying to show the log file below in your file manager. + + Search @@ -2213,42 +2273,42 @@ Use that if you get YAML related error. SpellAction - + Spelling Suggestions - + &Add to dictionary - + &Remove from custom dictionary - + &New Character - + &New Plot Item - + &New World Item - + &Correction Suggestions - + &Correction Suggestion @@ -2282,37 +2342,37 @@ Use that if you get YAML related error. abstractModel - + Title Başlık - + POV - + Label - + Status Durum - + Compile - + Word count - + Goal Amaç @@ -2353,12 +2413,12 @@ Use that if you get YAML related error. characterModel - + Name İsim - + Value @@ -2366,17 +2426,17 @@ Use that if you get YAML related error. characterTreeView - + Main - + Secondary - + Minor @@ -2808,72 +2868,72 @@ Use that if you get YAML related error. fullScreenEditor - + Theme: - + {} words / {} - + {} words - + Spellcheck - + Navigation - + New Text - + Title Başlık - + Title: Show Full Path - + Theme selector - + Word count - + Progress - + Progress: Auto Show/Hide - + Clock - + Clock: Show Seconds @@ -2952,14 +3012,6 @@ Use that if you get YAML related error. Ayarlar - - lastAccessedDirectoryInfo - - - Last accessed directory "{}" loaded. - - - lineEditView @@ -3074,32 +3126,32 @@ Use that if you get YAML related error. - + Root - + {} words - + ({} chars) {} words / {} - + {} words / {} - + {} chars - + {} chars @@ -3153,7 +3205,7 @@ Use that if you get YAML related error. myPanel - + Auto-hide @@ -3307,12 +3359,12 @@ Use that if you get YAML related error. outlineItem - + {} words / {} ({}) - + {} words @@ -3320,17 +3372,17 @@ Use that if you get YAML related error. pandocSettings - + General Genel - + Table of Content - + Custom settings for {} @@ -3534,32 +3586,32 @@ Use that if you get YAML related error. plotModel - + Name İsim - + Meta - + New step - + Main - + Secondary - + Minor @@ -3567,22 +3619,22 @@ Use that if you get YAML related error. plotTreeView - + Main - + Secondary - + Minor - + **Plot:** {} @@ -3646,52 +3698,52 @@ Use that if you get YAML related error. references - + Not a reference: {}. - + Unknown reference: {}. - + Path: - + Stats: - + POV: - + Status: Durum: - + Label: - + Short summary: - + Long summary: - + Notes: @@ -3711,72 +3763,72 @@ Use that if you get YAML related error. - + Go to {}. - + Description Tanım - + Result Sonuç - + Characters Karakterler - + Resolution steps Çözülme adımları - + Passion - + Conflict Çatışma - + <b>Unknown reference:</b> {}. - + Folder: <b>{}</b> - + Text: <b>{}</b> - + Character: <b>{}</b> - + Plot: <b>{}</b> - + World: <b>{name}</b>{path} - + Referenced in: @@ -3819,12 +3871,12 @@ Use that if you get YAML related error. - + Restore - + Delete @@ -3884,12 +3936,12 @@ Use that if you get YAML related error. - + Line {}: - + Clear all @@ -3910,52 +3962,52 @@ Use that if you get YAML related error. settingsWindow - + New status - + New label - + newtheme - + New theme - + (read-only) - + Open Image - + Image files (*.jpg; *.jpeg; *.png) - + Error Hata - + Unable to load selected file - + Unable to add selected image: {} @@ -4042,22 +4094,22 @@ Use that if you get YAML related error. tabSplitter - + Open selected items in that view. - + Split horizontally - + Close split - + Split vertically @@ -4065,7 +4117,7 @@ Use that if you get YAML related error. textEditView - + Various @@ -4164,27 +4216,27 @@ Use that if you get YAML related error. - + Novel - + Novella - + Short Story - + Research paper - + Demo projects @@ -4219,147 +4271,147 @@ Use that if you get YAML related error. - + Open project - + Manuskript project (*.msk);;All files (*) - + Save project as... - + Manuskript project (*.msk) - + Manuskript - + Create New Project - + Warning - + Overwrite existing project {} ? - + Empty fiction - + Chapter - + Scene - + Trilogy - + Book - + Section - + Empty non-fiction - + words each. - + of - + Text - + Something - + <b>Total:</b> {} words (~ {} pages) - + Fiction - + Non-fiction - + Idea - + Note - + Research - + TODO - + First draft - + Second draft - + Final diff --git a/i18n/manuskript_uk.ts b/i18n/manuskript_uk.ts index 9f9a642..b077eb7 100644 --- a/i18n/manuskript_uk.ts +++ b/i18n/manuskript_uk.ts @@ -38,7 +38,7 @@ Попередній перегляд із маркером. - + Plain text Звичайний текст @@ -53,77 +53,77 @@ LaTeX має бути встановлено. - + Error Помилка - + Standalone document (not just a fragment) Окремий документ (не лише фрагмент) - + Include a table of contents. Включити зміст. - + Number of sections level to include in TOC: Рівень підрозділів, що їх буде додано до змісту: - + Typographically correct output Виправити результат для друку - + Normalize the document (cleaner) Чистіший документ (виправити помилки) - + Specify the base level for headers: Укажіть початковий рівень заголовків: - + Use reference-style links instead of inline links Використувати виноски замість вбудованих посилань - + Use ATX-style headers Використувати atx-заголовки (# ґратки) - + Use <q> tags for quotes in HTML Використувати тег <p> для цитувань у HTML - + LaTeX engine used to produce the PDF. Рушій LaTeX для створення файлу PDF. - + Paper size: Формат аркуша: - + Font size: Розмір шрифту: - + Class: Клас: - + Line spacing: Міжрядковий інтервал: @@ -155,14 +155,14 @@ Припускає, що текст форматовано на markdown. - + Simplest export to plain text. Allows you to use your own markup not understood by Manuskript, for example <a href='www.fountain.io'>Fountain</a>. Найпростіший експорт у звичайний текст. Дозволяє використувати власні мови розмітки, що їх не підтримує manuskript, наприклад <a href='www.fountain.io'>Fountain</a>. - + <p>A universal document converter. Can be used to convert Markdown to a wide range of other formats.</p> <p>Website: <a href="http://www.pandoc.org">http://pandoc.org/</a></p> @@ -203,30 +203,30 @@ за допомогою структуризатора. - + Disable YAML metadata block. Use that if you get YAML related error. Вимкнути блок метаданих YAML. Оберіть у разі помилки з YAML. - + Convert to ePUB3 Конвертувати у ePUB3 - + Self-contained HTML files, with no dependencies - + Could not process regular expression: {} - + Choose output file… @@ -335,12 +335,12 @@ Use that if you get YAML related error. Import - + Markdown import Імпортувати файл markdown - + <b>Info:</b> A very simple parser that will go through a markdown document and create items for each titles.<br/>&nbsp; @@ -349,12 +349,12 @@ Use that if you get YAML related error. створить елементи на кожний заголовок.<br/>&nbsp; - + Folder import Імпорт теки - + <p><b>Info:</b> Imports a whole directory structure. Folders are added as folders, and plaintext documents within (you chose which ones by extension) @@ -367,47 +367,47 @@ Use that if you get YAML related error. <p>Підтримувано лише текстові файли, а не зображення, двійкові тощо.</p> - + Include only those extensions: Включити лише наступні розширення: - + Comma separated values Значення, розділені комою - + Sort items by name Сортувати елементи за назвою - + Import folder then files Імпортувати теку і файли - + OPML Import Імпорт OPML - + File open failed. Не вдалося відкрити файл. - + This does not appear to be a valid OPML file. Здається, це не припустимий файл OPML. - + Pandoc import Імпорт pandoc - + <b>Info:</b> Manuskript can import from <b>markdown</b> or <b>OPML</b>. Pandoc will convert your document to either (see option below), and @@ -422,17 +422,17 @@ Use that if you get YAML related error. <br/>&nbsp; - + Import using: Імпорт за допомогою: - + Wrap lines: Переносити рядки: - + <p>Should pandoc create cosmetic / non-semantic line-breaks?</p><p> <b>auto</b>: wraps at 72 characters.<br> @@ -442,27 +442,27 @@ Use that if you get YAML related error. - + Mind Map Import Імпорт мапи думок - + This does not appear to be a valid Mind Map file. Це не припустимий формат файлу мапи думок. - + Mind Map import Імпорт мапи думок - + Import tip as: Імпортувати поради як: - + Untitled Без назви @@ -718,7 +718,7 @@ Use that if you get YAML related error. Джерело конфлікту - + Outline Обрис @@ -763,157 +763,157 @@ Use that if you get YAML related error. &Допомога - + &Tools &Знаряддя - + &Edit &Редагувати - + &View &Переглянути - + &Mode &Режим - + &Cheat sheet &Шпаргалка - + Sea&rch Шука&ти - + &Navigation &Перехід - + &Open &Відкрити - + Ctrl+O Ctrl+O - + &Save &Зберегти - + Ctrl+S Ctrl+S - + Sa&ve as... Збере&гти як... - + Ctrl+Shift+S Ctrl+Shift+S - + &Quit &Вихід - + Ctrl+Q Ctrl+Q - + &Show help texts &Показувати тексти довідки - + Ctrl+Shift+B Ctrl+Shift+B - + &Spellcheck &Перевірка правопису - + F9 F9 - + &Labels... &Позначки... - + &Status... &Стан... - + Tree Дерево - + &Simple &Простий - + &Fiction &Художня література - + Index cards Каталог - + S&ettings Н&алаштування - + F8 F8 - + &Close project &Закрити проект - + Co&mpile Екс&портувати - + F6 F6 - + &Frequency Analyzer &Частотний аналізатор @@ -923,194 +923,184 @@ Use that if you get YAML related error. Інформація про книжку - + &About &Про програму - + About Manuskript Про Манускрипт - + Manuskript Манускрипт - + Project {} saved. Проект {} збережено. - + WARNING: Project {} not saved. УВАГА: Проект {} не збережено. - + Project {} loaded. Проект {} завантажено. - - Project {} loaded with some errors: - Проект {} завантажено з кількома помилками: - - - - * {} wasn't found in project file. - * {} не знайдено у файлі проекту. - - - + Project {} loaded with some errors. Проект {} завантажено з кількома помилками. - + (~{} pages) (~{} сторінок) - + Words: {}{} Слів: {}{} - + Book summary Стислий переказ книжки - + Project tree Дерево проекту - + Metadata Метадані - + Story line - + Enter information about your book, and yourself. - + The basic situation, in the form of a 'What if...?' question. Ex: 'What if the most dangerous evil wizard wasn't able to kill a baby?' (Harry Potter) - + Take time to think about a one sentence (~50 words) summary of your book. Then expand it to a paragraph, then to a page, then to a full summary. - + Create your characters. - + Develop plots. - + Build worlds. Create hierarchy of broad categories down to specific details. - + Create the outline of your masterpiece. - + Write. - + Debug info. Sometimes useful. - + Dictionary - + Nothing - + POV З погляду - + Label Позначка - + Progress Стан - + Compile Експорт - + Icon color Колір позначки - + Text color Колір тексту - + Background color Колір тла - + Icon Значок - + Text Текст - + Background Тло - + Border Рамка - + Corner Кут @@ -1120,127 +1110,127 @@ Use that if you get YAML related error. - + &Import… - + F7 F7 - + &Copy - + Ctrl+C - + C&ut - + Ctrl+X - + &Paste - + Ctrl+V - + &Split… - + Ctrl+Shift+K - + Sp&lit at cursor - + Ctrl+K - + Ctrl+M - + Ctrl+D - + Del Вилучити - + &Move Up - + Ctrl+Shift+Up - + M&ove Down - + Ctrl+Shift+Down - + Dupl&icate - + &Delete &Вилучити - + &Rename &Перейменувати - + F2 F2 - + Organi&ze - + M&erge @@ -1250,232 +1240,232 @@ Use that if you get YAML related error. - + &Format - + &Header - + &Level 1 (setext) - + Ctrl+Alt+1 - + Level &2 - + Ctrl+Alt+2 - + Level &1 (atx) - + Ctrl+1 - + L&evel 2 - + Ctrl+2 - + Level &3 - + Ctrl+3 - + Level &4 - + Ctrl+4 - + Level &5 - + Ctrl+5 - + Level &6 - + Ctrl+6 - + &Bold - + Ctrl+B - + &Italic - + Ctrl+I - + &Strike - + &Verbatim - + Su&perscript - + Ctrl++ - + Subsc&ript - + Ctrl+- - + Co&mment block - + Ctrl+Shift+C - + Clear &formats - + Ctrl+0 - + &Comment line(s) - + &Ordered list - + &Unordered list - + B&lockquote - + The file {} does not exist. Has it been moved or deleted? - + Install {}{} to use spellcheck - + {} has no installed dictionaries - + {}{} is not installed - + Save project? - + Save changes to project "{}" before closing? - + Your changes will be lost if you don't save them. - + PyQt / Qt versions 5.11 and 5.12 are known to cause a crash which might result in a loss of data. - + PyQt {} and Qt {} are in use. - + Proceed with import at your own risk @@ -1485,12 +1475,12 @@ Use that if you get YAML related error. - + Search - + Ctrl+F @@ -1514,6 +1504,76 @@ Use that if you get YAML related error. Status Стан + + + &Technical Support + + + + + How to obtain technical support for Manuskript. + + + + + F1 + F1 + + + + &Locate log file... + + + + + Locate log file + + + + + Locate the diagnostic log file used for this session. + + + + + Shift+F1 + + + + + Sorry! + + + + + This session is not being logged. + + + + + A log file is a Work in Progress! + + + + + The log file "{}" will continue to be written to until Manuskript is closed. + + + + + It will now be displayed in your file manager, but is of limited use until you close Manuskript. + + + + + Error! + + + + + An error was encountered while trying to show the log file below in your file manager. + + Search @@ -2235,42 +2295,42 @@ Use that if you get YAML related error. SpellAction - + Spelling Suggestions - + &Add to dictionary - + &Remove from custom dictionary - + &New Character - + &New Plot Item - + &New World Item - + &Correction Suggestions - + &Correction Suggestion @@ -2304,37 +2364,37 @@ Use that if you get YAML related error. abstractModel - + Title Назва - + POV З погляду - + Label Позначка - + Status Стан - + Compile Експорт - + Word count - + Goal Мета @@ -2375,12 +2435,12 @@ Use that if you get YAML related error. characterModel - + Name Ім'я - + Value @@ -2388,17 +2448,17 @@ Use that if you get YAML related error. characterTreeView - + Main - + Secondary - + Minor @@ -2830,72 +2890,72 @@ Use that if you get YAML related error. fullScreenEditor - + Theme: - + {} words / {} - + {} words - + Spellcheck - + Navigation - + New Text - + Title Назва - + Title: Show Full Path - + Theme selector - + Word count - + Progress Стан - + Progress: Auto Show/Hide - + Clock - + Clock: Show Seconds @@ -2974,14 +3034,6 @@ Use that if you get YAML related error. Налаштування - - lastAccessedDirectoryInfo - - - Last accessed directory "{}" loaded. - - - lineEditView @@ -3096,32 +3148,32 @@ Use that if you get YAML related error. - + Root - + {} words {} слів - + ({} chars) {} words / {} - + {} words / {} - + {} chars - + {} chars @@ -3175,7 +3227,7 @@ Use that if you get YAML related error. myPanel - + Auto-hide @@ -3329,12 +3381,12 @@ Use that if you get YAML related error. outlineItem - + {} words / {} ({}) - + {} words @@ -3342,17 +3394,17 @@ Use that if you get YAML related error. pandocSettings - + General Загальне - + Table of Content - + Custom settings for {} @@ -3556,32 +3608,32 @@ Use that if you get YAML related error. plotModel - + Name Ім'я - + Meta - + New step - + Main - + Secondary - + Minor @@ -3589,22 +3641,22 @@ Use that if you get YAML related error. plotTreeView - + Main - + Secondary - + Minor - + **Plot:** {} @@ -3668,52 +3720,52 @@ Use that if you get YAML related error. references - + Not a reference: {}. - + Unknown reference: {}. - + Path: Шлях: - + Stats: - + POV: - + Status: Стан: - + Label: - + Short summary: - + Long summary: - + Notes: @@ -3733,72 +3785,72 @@ Use that if you get YAML related error. - + Go to {}. - + Description Опис - + Result Результат - + Characters Персонажі - + Resolution steps Кроки розвитку сюжету - + Passion - + Conflict Конфлікт - + <b>Unknown reference:</b> {}. - + Folder: <b>{}</b> - + Text: <b>{}</b> - + Character: <b>{}</b> - + Plot: <b>{}</b> - + World: <b>{name}</b>{path} - + Referenced in: @@ -3841,12 +3893,12 @@ Use that if you get YAML related error. - + Restore - + Delete @@ -3906,12 +3958,12 @@ Use that if you get YAML related error. - + Line {}: - + Clear all @@ -3932,52 +3984,52 @@ Use that if you get YAML related error. settingsWindow - + New status - + New label - + newtheme - + New theme - + (read-only) - + Open Image - + Image files (*.jpg; *.jpeg; *.png) - + Error Помилка - + Unable to load selected file - + Unable to add selected image: {} @@ -4064,22 +4116,22 @@ Use that if you get YAML related error. tabSplitter - + Open selected items in that view. - + Split horizontally - + Close split - + Split vertically @@ -4087,7 +4139,7 @@ Use that if you get YAML related error. textEditView - + Various @@ -4186,27 +4238,27 @@ Use that if you get YAML related error. - + Novel - + Novella - + Short Story - + Research paper - + Demo projects @@ -4241,147 +4293,147 @@ Use that if you get YAML related error. - + Open project - + Manuskript project (*.msk);;All files (*) - + Save project as... - + Manuskript project (*.msk) - + Manuskript Манускрипт - + Create New Project - + Warning - + Overwrite existing project {} ? - + Empty fiction - + Chapter - + Scene - + Trilogy - + Book - + Section - + Empty non-fiction - + words each. - + of - + Text Текст - + Something - + <b>Total:</b> {} words (~ {} pages) - + Fiction - + Non-fiction - + Idea - + Note - + Research - + TODO - + First draft - + Second draft - + Final diff --git a/i18n/manuskript_zh_CN.ts b/i18n/manuskript_zh_CN.ts index 0de6e56..a853388 100644 --- a/i18n/manuskript_zh_CN.ts +++ b/i18n/manuskript_zh_CN.ts @@ -38,7 +38,7 @@ 带高亮的预览。 - + Plain text 纯文本 @@ -53,82 +53,82 @@ 需要安装 LaTeX。 - + Error 错误 - + Standalone document (not just a fragment) 独立文档(不仅是片段) - + Include a table of contents. 包括目录。 - + Number of sections level to include in TOC: 目录中需要包含的段落级别数量: - + Typographically correct output 排版正确的输出 - + Normalize the document (cleaner) 规范化文档(清理器) - + Specify the base level for headers: 选择默认的 Header 级别: - + Use reference-style links instead of inline links 使用引用链接而不是内联链接 - + Use ATX-style headers - + Self-contained HTML files, with no dependencies 自包含的无依赖 HTML 文档 - + Use <q> tags for quotes in HTML 使用 <q> 标签来在 HTML 中表示引用 - + LaTeX engine used to produce the PDF. 用于生成 PDF 的 LaTeX 引擎。 - + Paper size: 纸张尺寸: - + Font size: 字体大小: - + Class: - + Line spacing: 行间距: @@ -160,13 +160,13 @@ 假设文本是 markdown 的格式。 - + Simplest export to plain text. Allows you to use your own markup not understood by Manuskript, for example <a href='www.fountain.io'>Fountain</a>. 最简单的导出到纯文本。允许你使用 manuskript 中没有的自定义标记,例如<a href='www.fountain.io'>Fountain</a>. - + <p>A universal document converter. Can be used to convert Markdown to a wide range of other formats.</p> <p>Website: <a href="http://www.pandoc.org">http://pandoc.org/</a></p> @@ -203,25 +203,25 @@ 方式。 - + Disable YAML metadata block. Use that if you get YAML related error. 关闭 YAML 元数据块。 如果你遇到了 YAML 有关的问题,可以尝试使用它。 - + Convert to ePUB3 导出为 ePUB3 - + Could not process regular expression: {} - + Choose output file… @@ -330,24 +330,24 @@ Use that if you get YAML related error. Import - + Markdown import 导入 Markdown - + <b>Info:</b> A very simple parser that will go through a markdown document and create items for each titles.<br/>&nbsp; - + Folder import 导入文件夹 - + <p><b>Info:</b> Imports a whole directory structure. Folders are added as folders, and plaintext documents within (you chose which ones by extension) @@ -356,47 +356,47 @@ Use that if you get YAML related error. - + Include only those extensions: 只包含如下扩展: - + Comma separated values 逗号分隔值 - + Sort items by name 按名称对项目排序 - + Import folder then files 导入文件夹和文件 - + OPML Import 导入 OPML 文件 - + File open failed. 打开文件失败。 - + This does not appear to be a valid OPML file. 不是一个合法的 OPML 文件。 - + Pandoc import 导入 Pandoc - + <b>Info:</b> Manuskript can import from <b>markdown</b> or <b>OPML</b>. Pandoc will convert your document to either (see option below), and @@ -406,17 +406,17 @@ Use that if you get YAML related error. - + Import using: 使用的导入方法: - + Wrap lines: - + <p>Should pandoc create cosmetic / non-semantic line-breaks?</p><p> <b>auto</b>: wraps at 72 characters.<br> @@ -426,27 +426,27 @@ Use that if you get YAML related error. - + Mind Map Import 导入思维导图 - + This does not appear to be a valid Mind Map file. 这不是一个合法的思维导图文件。 - + Mind Map import 导入思维导图 - + Import tip as: 导入 tip 为: - + Untitled 无标题 @@ -702,7 +702,7 @@ Use that if you get YAML related error. 冲突来源 - + Outline 大纲 @@ -747,157 +747,157 @@ Use that if you get YAML related error. 帮助(&H) - + &Tools 工具(&T) - + &Edit 编辑(&E) - + &View 查看&(V) - + &Mode 模式(&M) - + &Cheat sheet 备忘录 - + Sea&rch 搜索(&R) - + &Navigation 导航(&N) - + &Open 打开(&O) - + Ctrl+O Ctrl+O - + &Save 保存(&S) - + Ctrl+S Ctrl+S - + Sa&ve as... 另存为(&V) - + Ctrl+Shift+S Ctrl+Shift+S - + &Quit 退出(&Q) - + Ctrl+Q Ctrl+Q - + &Show help texts 显示帮助(&S) - + Ctrl+Shift+B Ctrl+Shift+B - + &Spellcheck 拼写检查(&S) - + F9 F9 - + &Labels... 标签...(&L) - + &Status... 状态...(&S) - + Tree - + &Simple 简单(&S) - + &Fiction 虚构小说 - + Index cards 索引卡 - + S&ettings 设置(&E) - + F8 F8 - + &Close project 关闭项目(&C) - + Co&mpile 编译(&M) - + F6 F6 - + &Frequency Analyzer 频率分析(&F) @@ -907,194 +907,184 @@ Use that if you get YAML related error. 书籍信息 - + &About 关于(&A) - + About Manuskript 关于 Manuskript - + Manuskript ManuSkript - + Project {} saved. 项目 {} 已保存。 - + WARNING: Project {} not saved. 警告:项目 {} 未保存。 - + Project {} loaded. 项目 {} 已载入。 - - Project {} loaded with some errors: - 载入项目 {} 时出错: - - - - * {} wasn't found in project file. - * {} 没有在项目文件中找到。 - - - + Project {} loaded with some errors. 载入项目 {} 时遇到错误。 - + (~{} pages) (约 {} 页) - + Words: {}{} 字数: {}{} - + Book summary 书籍摘要 - + Project tree 项目树 - + Metadata 元信息 - + Story line 故事线 - + Enter information about your book, and yourself. 输入有关你的书和你自己的信息。 - + The basic situation, in the form of a 'What if...?' question. Ex: 'What if the most dangerous evil wizard wasn't able to kill a baby?' (Harry Potter) 基本情况是形如'如果...?'的问题。例如:'如果一个最危险的巫师没能成功杀死一个婴儿……?'(哈利·波特) - + Take time to think about a one sentence (~50 words) summary of your book. Then expand it to a paragraph, then to a page, then to a full summary. 花一些时间想一个 50 字左右的一句话摘要来描述你的书。然后将它扩展成一段,一页,最后写成一个完整的摘要。 - + Create your characters. 建立你的角色。 - + Develop plots. 构造情节。 - + Build worlds. Create hierarchy of broad categories down to specific details. 构建世界。创造层次丰富包含方方面面的结构,直至具体细节。 - + Create the outline of your masterpiece. 建立你的作品的大纲。 - + Write. 写作。 - + Debug info. Sometimes useful. Debug 信息。有时候是有用的。 - + Dictionary 字典 - + Nothing - + POV POV - + Label 标签 - + Progress 进度 - + Compile 编译 - + Icon color 图标颜色 - + Text color 文本颜色 - + Background color 背景色 - + Icon 图标 - + Text 文本 - + Background 背景 - + Border 边缘 - + Corner 角落 @@ -1104,307 +1094,307 @@ Use that if you get YAML related error. 添加情节步骤 - + &Import… 导入(&I) - + F7 F7 - + &Copy 复制(&C) - + Ctrl+C Ctrl+C - + C&ut 剪切(&U) - + Ctrl+X Ctrl+X - + &Paste 粘贴(&P) - + Ctrl+V Ctrl+V - + &Split… 分割(&S) - + Ctrl+Shift+K Ctrl+Shift+K - + Sp&lit at cursor 在光标处分割(&L) - + Ctrl+K Ctrl+K - + Ctrl+M Ctrl+M - + Ctrl+D Ctrl+D - + Del Del - + &Move Up 向上移动(&M) - + Ctrl+Shift+Up Ctrl+Shift+Up - + M&ove Down 向下移动(&O) - + Ctrl+Shift+Down Ctrl+Shift+Down - + Dupl&icate 复写(&I) - + &Delete 删除(&D) - + &Rename 重命名(&R) - + F2 F2 - + Organi&ze 管理(&Z) - + M&erge 合并(&E) - + &Format 格式(&F) - + &Header 头(&H) - + &Level 1 (setext) - + Ctrl+Alt+1 Ctrl+Alt+1 - + Level &2 - + Ctrl+Alt+2 Ctrl+Alt+2 - + Level &1 (atx) - + Ctrl+1 Ctrl+1 - + L&evel 2 - + Ctrl+2 Ctrl+2 - + Level &3 - + Ctrl+3 Ctrl+3 - + Level &4 - + Ctrl+4 Ctrl+4 - + Level &5 - + Ctrl+5 Ctrl+5 - + Level &6 - + Ctrl+6 Ctrl+6 - + &Bold 加粗(&B) - + Ctrl+B Ctrl+B - + &Italic 斜体(&I) - + Ctrl+I Ctrl+I - + &Strike 删除线(&S) - + &Verbatim 逐字(&V) - + Su&perscript 上标(&P) - + Ctrl++ Ctrl++ - + Subsc&ript 下标(&R) - + Ctrl+- Ctrl+- - + Co&mment block 注释块(&M) - + Ctrl+Shift+C Ctrl+Shift+C - + Clear &formats 清除格式(&F) - + Ctrl+0 Ctrl+0 - + &Comment line(s) 行注释(&C) - + &Ordered list 有序列表(&O) - + &Unordered list 无序列表(&U) - + B&lockquote 引用块(&L) @@ -1414,52 +1404,52 @@ Use that if you get YAML related error. 删除选择的情节段 - + The file {} does not exist. Has it been moved or deleted? 文件 {} 不存在。是否被移动或删除? - + Install {}{} to use spellcheck - + {} has no installed dictionaries - + {}{} is not installed - + Save project? - + Save changes to project "{}" before closing? - + Your changes will be lost if you don't save them. - + PyQt / Qt versions 5.11 and 5.12 are known to cause a crash which might result in a loss of data. - + PyQt {} and Qt {} are in use. - + Proceed with import at your own risk @@ -1469,12 +1459,12 @@ Use that if you get YAML related error. - + Search - + Ctrl+F @@ -1498,6 +1488,76 @@ Use that if you get YAML related error. Status 状态 + + + &Technical Support + + + + + How to obtain technical support for Manuskript. + + + + + F1 + F1 + + + + &Locate log file... + + + + + Locate log file + + + + + Locate the diagnostic log file used for this session. + + + + + Shift+F1 + + + + + Sorry! + + + + + This session is not being logged. + + + + + A log file is a Work in Progress! + + + + + The log file "{}" will continue to be written to until Manuskript is closed. + + + + + It will now be displayed in your file manager, but is of limited use until you close Manuskript. + + + + + Error! + + + + + An error was encountered while trying to show the log file below in your file manager. + + Search @@ -2219,42 +2279,42 @@ Use that if you get YAML related error. SpellAction - + Spelling Suggestions 拼写建议 - + &Add to dictionary 加入字典(&A) - + &Remove from custom dictionary 从个人字典中删除(&R) - + &New Character - + &New Plot Item - + &New World Item - + &Correction Suggestions - + &Correction Suggestion @@ -2288,37 +2348,37 @@ Use that if you get YAML related error. abstractModel - + Title 标题 - + POV POV - + Label 标签 - + Status 状态 - + Compile 编译 - + Word count 字数统计 - + Goal 目标 @@ -2359,12 +2419,12 @@ Use that if you get YAML related error. characterModel - + Name 名字 - + Value @@ -2372,17 +2432,17 @@ Use that if you get YAML related error. characterTreeView - + Main 主要 - + Secondary 次要 - + Minor 不重要的 @@ -2814,72 +2874,72 @@ Use that if you get YAML related error. fullScreenEditor - + Theme: 主题: - + {} words / {} {} 字 / {} - + {} words {} 字 - + Spellcheck - + Navigation - + New Text - + Title 标题 - + Title: Show Full Path - + Theme selector - + Word count 字数统计 - + Progress - + Progress: Auto Show/Hide - + Clock - + Clock: Show Seconds @@ -2958,14 +3018,6 @@ Use that if you get YAML related error. 设置 - - lastAccessedDirectoryInfo - - - Last accessed directory "{}" loaded. - - - lineEditView @@ -3080,32 +3132,32 @@ Use that if you get YAML related error. Alt+Up - + Root - + {} words {} 字 - + ({} chars) {} words / {} - + {} words / {} - + {} chars - + {} chars @@ -3159,7 +3211,7 @@ Use that if you get YAML related error. myPanel - + Auto-hide 自动隐藏 @@ -3313,12 +3365,12 @@ Use that if you get YAML related error. outlineItem - + {} words / {} ({}) {} 字 / {} ({}) - + {} words {} 字 @@ -3326,17 +3378,17 @@ Use that if you get YAML related error. pandocSettings - + General 通用 - + Table of Content 内容表格(TOC) - + Custom settings for {} {} 的自定义设置 @@ -3540,32 +3592,32 @@ Use that if you get YAML related error. plotModel - + Name 名字 - + Meta 元(Meta) - + New step 新一步 - + Main 主要 - + Secondary 次要 - + Minor 不重要的 @@ -3573,22 +3625,22 @@ Use that if you get YAML related error. plotTreeView - + Main 主要 - + Secondary 次要 - + Minor 不重要的 - + **Plot:** {} **情节:** {} @@ -3652,52 +3704,52 @@ Use that if you get YAML related error. references - + Not a reference: {}. 不是一个参考文档:{}。 - + Unknown reference: {}. 未知参考文档:{}。 - + Path: 路径: - + Stats: 统计: - + POV: POV: - + Status: 状态: - + Label: 标签: - + Short summary: 短摘要: - + Long summary: 长摘要: - + Notes: 笔记: @@ -3717,72 +3769,72 @@ Use that if you get YAML related error. POV 对象: - + Go to {}. 转到 {}。 - + Description 描述 - + Result 结果 - + Characters 角色 - + Resolution steps 解决步骤 - + Passion 动机 - + Conflict 冲突 - + <b>Unknown reference:</b> {}. <b>未知参考</b> {}。 - + Folder: <b>{}</b> 文件夹:<b>{}</b> - + Text: <b>{}</b> 文本:<b>{}</b> - + Character: <b>{}</b> 角色:<b>{}</b> - + Plot: <b>{}</b> 情节:<b>{}</b> - + World: <b>{name}</b>{path} 世界:<b>{name}</b>{path} - + Referenced in: 引用于: @@ -3825,12 +3877,12 @@ Use that if you get YAML related error. - + Restore - + Delete 删除 @@ -3890,12 +3942,12 @@ Use that if you get YAML related error. - + Line {}: - + Clear all @@ -3916,52 +3968,52 @@ Use that if you get YAML related error. settingsWindow - + New status 新建状态 - + New label 新标签 - + newtheme 新主题 - + New theme 新建主题 - + (read-only) (只读) - + Open Image - + Image files (*.jpg; *.jpeg; *.png) - + Error 错误 - + Unable to load selected file - + Unable to add selected image: {} @@ -4048,22 +4100,22 @@ Use that if you get YAML related error. tabSplitter - + Open selected items in that view. - + Split horizontally - + Close split - + Split vertically @@ -4071,7 +4123,7 @@ Use that if you get YAML related error. textEditView - + Various 可变的 @@ -4170,27 +4222,27 @@ Use that if you get YAML related error. - + Novel 长篇小说 - + Novella 中篇小说 - + Short Story 短篇小说 - + Research paper 研究论文 - + Demo projects 示例项目 @@ -4225,147 +4277,147 @@ Use that if you get YAML related error. 创建 - + Open project 打开项目 - + Manuskript project (*.msk);;All files (*) Manuskript 项目 (*.msk);;所有文件 (*) - + Save project as... 另存项目为... - + Manuskript project (*.msk) Manuskript 项目 (*.msk) - + Manuskript ManuSkript - + Create New Project 创建新项目 - + Warning 警告 - + Overwrite existing project {} ? 覆盖已有项目 - + Empty fiction 空虚构效果 - + Chapter 章节 - + Scene 场景 - + Trilogy 三部曲 - + Book - + Section 部分 - + Empty non-fiction 空非虚构效果 - + words each. 字(每项)。 - + of - + Text 文本 - + Something - + <b>Total:</b> {} words (~ {} pages) <b>总计:</b> {} 字 (约 {} 页) - + Fiction 虚构小说 - + Non-fiction 非虚构小说 - + Idea 创意 - + Note 笔记 - + Research 研究 - + TODO TODO - + First draft 初稿 - + Second draft 二稿 - + Final 完成稿 diff --git a/i18n/manuskript_zh_HANT.ts b/i18n/manuskript_zh_HANT.ts index e480a0f..06b95b0 100644 --- a/i18n/manuskript_zh_HANT.ts +++ b/i18n/manuskript_zh_HANT.ts @@ -38,7 +38,7 @@ 以熒光筆模式預覽 - + Plain text 純文本 @@ -53,82 +53,82 @@ 需要安裝 LaTeX。 - + Error 錯誤 - + Standalone document (not just a fragment) 獨立文件(不只是分段) - + Include a table of contents. 包含一個目錄。 - + Number of sections level to include in TOC: - + Typographically correct output 排版正確的輸出 - + Normalize the document (cleaner) 規範化檔案(整理) - + Specify the base level for headers: 選擇默認的Header級別 - + Use reference-style links instead of inline links 使用引用樣式連結而不是內聯連結 - + Use ATX-style headers 使用 ATX 樣式 Headers - + Self-contained HTML files, with no dependencies 獨立的 HTML 檔案,無依賴項 - + Use <q> tags for quotes in HTML 在 HTML 中為引號使用<q>標記 - + LaTeX engine used to produce the PDF. PDF使用 LaTeX 引擎生成。 - + Paper size: 紙張大小: - + Font size: 字體大小: - + Class: 類別: - + Line spacing: @@ -159,13 +159,13 @@ - + Simplest export to plain text. Allows you to use your own markup not understood by Manuskript, for example <a href='www.fountain.io'>Fountain</a>. - + <p>A universal document converter. Can be used to convert Markdown to a wide range of other formats.</p> <p>Website: <a href="http://www.pandoc.org">http://pandoc.org/</a></p> @@ -198,24 +198,24 @@ - + Disable YAML metadata block. Use that if you get YAML related error. - + Convert to ePUB3 - + Could not process regular expression: {} - + Choose output file… @@ -324,24 +324,24 @@ Use that if you get YAML related error. Import - + Markdown import - + <b>Info:</b> A very simple parser that will go through a markdown document and create items for each titles.<br/>&nbsp; - + Folder import - + <p><b>Info:</b> Imports a whole directory structure. Folders are added as folders, and plaintext documents within (you chose which ones by extension) @@ -350,47 +350,47 @@ Use that if you get YAML related error. - + Include only those extensions: - + Comma separated values - + Sort items by name - + Import folder then files - + OPML Import - + File open failed. - + This does not appear to be a valid OPML file. - + Pandoc import - + <b>Info:</b> Manuskript can import from <b>markdown</b> or <b>OPML</b>. Pandoc will convert your document to either (see option below), and @@ -400,17 +400,17 @@ Use that if you get YAML related error. - + Import using: - + Wrap lines: - + <p>Should pandoc create cosmetic / non-semantic line-breaks?</p><p> <b>auto</b>: wraps at 72 characters.<br> @@ -420,27 +420,27 @@ Use that if you get YAML related error. - + Mind Map Import - + This does not appear to be a valid Mind Map file. - + Mind Map import - + Import tip as: - + Untitled @@ -696,7 +696,7 @@ Use that if you get YAML related error. - + Outline @@ -741,157 +741,157 @@ Use that if you get YAML related error. - + &Tools - + &Edit - + &View - + &Mode - + &Cheat sheet - + Sea&rch - + &Navigation - + &Open - + Ctrl+O - + &Save - + Ctrl+S - + Sa&ve as... - + Ctrl+Shift+S - + &Quit - + Ctrl+Q - + &Show help texts - + Ctrl+Shift+B - + &Spellcheck - + F9 - + &Labels... - + &Status... - + Tree - + &Simple - + &Fiction - + Index cards - + S&ettings - + F8 - + &Close project - + Co&mpile - + F6 - + &Frequency Analyzer @@ -901,194 +901,184 @@ Use that if you get YAML related error. - + &About - + About Manuskript - + Manuskript - + Project {} saved. - + WARNING: Project {} not saved. - + Project {} loaded. - - Project {} loaded with some errors: - - - - - * {} wasn't found in project file. - - - - + Project {} loaded with some errors. - + (~{} pages) - + Words: {}{} - + Book summary - + Project tree - + Metadata - + Story line - + Enter information about your book, and yourself. - + The basic situation, in the form of a 'What if...?' question. Ex: 'What if the most dangerous evil wizard wasn't able to kill a baby?' (Harry Potter) - + Take time to think about a one sentence (~50 words) summary of your book. Then expand it to a paragraph, then to a page, then to a full summary. - + Create your characters. - + Develop plots. - + Build worlds. Create hierarchy of broad categories down to specific details. - + Create the outline of your masterpiece. - + Write. - + Debug info. Sometimes useful. - + Dictionary - + Nothing - + POV - + Label - + Progress - + Compile - + Icon color - + Text color - + Background color - + Icon - + Text - + Background - + Border - + Corner @@ -1098,307 +1088,307 @@ Use that if you get YAML related error. - + &Import… - + F7 - + &Copy - + Ctrl+C - + C&ut - + Ctrl+X - + &Paste - + Ctrl+V - + &Split… - + Ctrl+Shift+K - + Sp&lit at cursor - + Ctrl+K - + Ctrl+M - + Ctrl+D - + Del - + &Move Up - + Ctrl+Shift+Up - + M&ove Down - + Ctrl+Shift+Down - + Dupl&icate - + &Delete - + &Rename - + F2 - + Organi&ze - + M&erge - + &Format - + &Header - + &Level 1 (setext) - + Ctrl+Alt+1 - + Level &2 - + Ctrl+Alt+2 - + Level &1 (atx) - + Ctrl+1 - + L&evel 2 - + Ctrl+2 - + Level &3 - + Ctrl+3 - + Level &4 - + Ctrl+4 - + Level &5 - + Ctrl+5 - + Level &6 - + Ctrl+6 - + &Bold - + Ctrl+B - + &Italic - + Ctrl+I - + &Strike - + &Verbatim - + Su&perscript - + Ctrl++ - + Subsc&ript - + Ctrl+- - + Co&mment block - + Ctrl+Shift+C - + Clear &formats - + Ctrl+0 - + &Comment line(s) - + &Ordered list - + &Unordered list - + B&lockquote @@ -1408,52 +1398,52 @@ Use that if you get YAML related error. - + The file {} does not exist. Has it been moved or deleted? - + Install {}{} to use spellcheck - + {} has no installed dictionaries - + {}{} is not installed - + Save project? - + Save changes to project "{}" before closing? - + Your changes will be lost if you don't save them. - + PyQt / Qt versions 5.11 and 5.12 are known to cause a crash which might result in a loss of data. - + PyQt {} and Qt {} are in use. - + Proceed with import at your own risk @@ -1463,12 +1453,12 @@ Use that if you get YAML related error. - + Search - + Ctrl+F @@ -1492,6 +1482,76 @@ Use that if you get YAML related error. Status + + + &Technical Support + + + + + How to obtain technical support for Manuskript. + + + + + F1 + + + + + &Locate log file... + + + + + Locate log file + + + + + Locate the diagnostic log file used for this session. + + + + + Shift+F1 + + + + + Sorry! + + + + + This session is not being logged. + + + + + A log file is a Work in Progress! + + + + + The log file "{}" will continue to be written to until Manuskript is closed. + + + + + It will now be displayed in your file manager, but is of limited use until you close Manuskript. + + + + + Error! + + + + + An error was encountered while trying to show the log file below in your file manager. + + Search @@ -2213,42 +2273,42 @@ Use that if you get YAML related error. SpellAction - + Spelling Suggestions - + &Add to dictionary - + &Remove from custom dictionary - + &New Character - + &New Plot Item - + &New World Item - + &Correction Suggestions - + &Correction Suggestion @@ -2282,37 +2342,37 @@ Use that if you get YAML related error. abstractModel - + Title - + POV - + Label - + Status - + Compile - + Word count - + Goal @@ -2353,12 +2413,12 @@ Use that if you get YAML related error. characterModel - + Name - + Value @@ -2366,17 +2426,17 @@ Use that if you get YAML related error. characterTreeView - + Main - + Secondary - + Minor @@ -2808,72 +2868,72 @@ Use that if you get YAML related error. fullScreenEditor - + Theme: - + {} words / {} - + {} words - + Spellcheck - + Navigation - + New Text - + Title - + Title: Show Full Path - + Theme selector - + Word count - + Progress - + Progress: Auto Show/Hide - + Clock - + Clock: Show Seconds @@ -2952,14 +3012,6 @@ Use that if you get YAML related error. - - lastAccessedDirectoryInfo - - - Last accessed directory "{}" loaded. - - - lineEditView @@ -3074,32 +3126,32 @@ Use that if you get YAML related error. - + Root - + {} words - + ({} chars) {} words / {} - + {} words / {} - + {} chars - + {} chars @@ -3153,7 +3205,7 @@ Use that if you get YAML related error. myPanel - + Auto-hide @@ -3307,12 +3359,12 @@ Use that if you get YAML related error. outlineItem - + {} words / {} ({}) - + {} words @@ -3320,17 +3372,17 @@ Use that if you get YAML related error. pandocSettings - + General - + Table of Content - + Custom settings for {} @@ -3534,32 +3586,32 @@ Use that if you get YAML related error. plotModel - + Name - + Meta - + New step - + Main - + Secondary - + Minor @@ -3567,22 +3619,22 @@ Use that if you get YAML related error. plotTreeView - + Main - + Secondary - + Minor - + **Plot:** {} @@ -3646,52 +3698,52 @@ Use that if you get YAML related error. references - + Not a reference: {}. - + Unknown reference: {}. - + Path: - + Stats: - + POV: - + Status: - + Label: - + Short summary: - + Long summary: - + Notes: @@ -3711,72 +3763,72 @@ Use that if you get YAML related error. - + Go to {}. - + Description - + Result - + Characters - + Resolution steps - + Passion - + Conflict - + <b>Unknown reference:</b> {}. - + Folder: <b>{}</b> - + Text: <b>{}</b> - + Character: <b>{}</b> - + Plot: <b>{}</b> - + World: <b>{name}</b>{path} - + Referenced in: @@ -3819,12 +3871,12 @@ Use that if you get YAML related error. - + Restore - + Delete @@ -3884,12 +3936,12 @@ Use that if you get YAML related error. - + Line {}: - + Clear all @@ -3910,52 +3962,52 @@ Use that if you get YAML related error. settingsWindow - + New status - + New label - + newtheme - + New theme - + (read-only) - + Open Image - + Image files (*.jpg; *.jpeg; *.png) - + Error 錯誤 - + Unable to load selected file - + Unable to add selected image: {} @@ -4042,22 +4094,22 @@ Use that if you get YAML related error. tabSplitter - + Open selected items in that view. - + Split horizontally - + Close split - + Split vertically @@ -4065,7 +4117,7 @@ Use that if you get YAML related error. textEditView - + Various @@ -4164,27 +4216,27 @@ Use that if you get YAML related error. - + Novel - + Novella - + Short Story - + Research paper - + Demo projects @@ -4219,147 +4271,147 @@ Use that if you get YAML related error. - + Open project - + Manuskript project (*.msk);;All files (*) - + Save project as... - + Manuskript project (*.msk) - + Manuskript - + Create New Project - + Warning - + Overwrite existing project {} ? - + Empty fiction - + Chapter - + Scene - + Trilogy - + Book - + Section - + Empty non-fiction - + words each. - + of - + Text - + Something - + <b>Total:</b> {} words (~ {} pages) - + Fiction - + Non-fiction - + Idea - + Note - + Research - + TODO - + First draft - + Second draft - + Final diff --git a/manuskript/functions/__init__.py b/manuskript/functions/__init__.py index 7e4edd6..4bce00b 100644 --- a/manuskript/functions/__init__.py +++ b/manuskript/functions/__init__.py @@ -7,8 +7,8 @@ import sys import pathlib from random import * -from PyQt5.QtCore import Qt, QRect, QStandardPaths, QObject, QRegExp, QDir -from PyQt5.QtCore import QUrl, QTimer +from PyQt5.QtCore import Qt, QRect, QStandardPaths, QObject, QProcess, QRegExp +from PyQt5.QtCore import QDir, QUrl, QTimer from PyQt5.QtGui import QBrush, QIcon, QPainter, QColor, QImage, QPixmap from PyQt5.QtGui import QDesktopServices from PyQt5.QtWidgets import qApp, QFileDialog @@ -540,5 +540,41 @@ def getGitRevisionAsString(base_path, short=False): LOGGER.warning("Failed to obtain Git revision: %s", e) return "#ERROR" +def showInFolder(path, open_file_as_fallback=False): + ''' + Show a file or folder in explorer/finder, highlighting it where possible. + Source: https://stackoverflow.com/a/46019091/3388962 + ''' + path = os.path.abspath(path) + dirPath = path if os.path.isdir(path) else os.path.dirname(path) + if sys.platform == 'win32': + args = [] + args.append('/select,') + args.append(QDir.toNativeSeparators(path)) + if QProcess.startDetached('explorer', args): + return True + elif sys.platform == 'darwin': + args = [] + args.append('-e') + args.append('tell application "Finder"') + args.append('-e') + args.append('activate') + args.append('-e') + args.append('select POSIX file "%s"' % path) + args.append('-e') + args.append('end tell') + args.append('-e') + args.append('return') + if not QProcess.execute('/usr/bin/osascript', args): + return True + #if not QtCore.QProcess.execute('/usr/bin/open', [dirPath]): + # return + # TODO: Linux is not implemented. It has many file managers (nautilus, xdg-open, etc.) + # each of which needs special ways to highlight a file in a file manager window. + + # Fallback. + return QDesktopServices.openUrl(QUrl(path if open_file_as_fallback else dirPath)) + + # Spellchecker loads writablePath from this file, so we need to load it after they get defined from manuskript.functions.spellchecker import Spellchecker diff --git a/manuskript/logging.py b/manuskript/logging.py index b0218d6..cced038 100644 --- a/manuskript/logging.py +++ b/manuskript/logging.py @@ -6,6 +6,7 @@ import os import sys +import time import logging import pathlib @@ -48,6 +49,62 @@ def setUp(console_level=logging.WARN): LOGGER.debug("Logging to STDERR.") +def getDefaultLogFile(): + """Returns a filename to log to inside {datadir}/logs/. + + It also prunes old logs so that we do not hog disk space excessively over time. + """ + # Ensure logs directory exists. + logsPath = os.path.join(writablePath(), "logs") + os.makedirs(logsPath, exist_ok=True) + # Prune irrelevant log files. They are only kept for 35 days. + try: # Guard against os.scandir() in the name of paranoia. + now = time.time() + with os.scandir(logsPath) as it: + for f in it: + try: # Avoid triggering outer try-except inside loop. + if f.is_dir(): + continue # If a subdirectory exists for whatever reason, don't touch it. + if (now - f.stat().st_ctime) // (24 * 3600) >= 35: + os.remove(f) + except OSError: + continue # Fail silently, but make sure we check other files. + except OSError: + pass # Fail silently. Don't explode and prevent Manuskript from starting. + return os.path.join(logsPath, "%Y-%m-%d_%H-%M-%S_manuskript#%#.log") + + +def formatLogName(formatString, pid=None, now=None): + """A minor hack on top of `strftime()` to support an identifier for the process ID. + + We want to support this in case some genius manages to start two manuskript processes + during the exact same second, causing a conflict in log filenames. + + Additionally, there is a tiny chance that the pid could actually end up relevant when + observing strange behaviour with a Manuskript process but having multiple instances open. + """ + if pid == None: + pid = os.getpid() + if now == None: + now = time.localtime() + + # Replace %# that is NOT preceded by %. Although this is not a perfect solution, + # it is good enough because it is unlikely anyone would want to format '%pid'. + lidx = 0 + while True: # This could be neater with the := operator of Python 3.8 ... + fidx = formatString.find("%#", lidx) + if fidx == -1: + break + elif (fidx == 0) or (formatString[fidx-1] != "%"): + formatString = formatString[:fidx] + str(pid) + formatString[fidx+2:] + lidx = fidx + len(str(pid)) - 2 + else: # skip and avoid endless loop + lidx = fidx + 1 + + # Finally apply strftime normally. + return time.strftime(formatString, now) + + def logToFile(file_level=logging.DEBUG, logfile=None): """Sets up the FileHandler that logs to a file. @@ -57,7 +114,9 @@ def logToFile(file_level=logging.DEBUG, logfile=None): To log file: >DEBUG, timestamped. (All the details.)""" if logfile is None: - logfile = os.path.join(writablePath(), "manuskript.log") + logfile = getDefaultLogFile() + + logfile = formatLogName(logfile) # Log with extreme prejudice; everything goes to the log file. # Because Qt gave me a megabyte-sized logfile while testing, it @@ -77,6 +136,16 @@ def logToFile(file_level=logging.DEBUG, logfile=None): except Exception as ex: LOGGER.warning("Cannot log to file '%s'. Reason: %s", logfile, ex) + +def getLogFilePath(): + """Extracts a filename we are logging to from the first FileHandler we find.""" + root_logger = logging.getLogger() + for handler in root_logger.handlers: + if isinstance(handler, logging.FileHandler): + return handler.baseFilename + return None + + # Log uncaught and unraisable exceptions. # Uncaught exceptions trigger moments before a thread is terminated due to diff --git a/manuskript/mainWindow.py b/manuskript/mainWindow.py index b4a7bbf..4778490 100644 --- a/manuskript/mainWindow.py +++ b/manuskript/mainWindow.py @@ -13,9 +13,10 @@ from PyQt5.QtWidgets import QMainWindow, QHeaderView, qApp, QMenu, QActionGroup, from manuskript import settings from manuskript.enums import Character, PlotStep, Plot, World, Outline -from manuskript.functions import wordCount, appPath, findWidgetsOfClass +from manuskript.functions import wordCount, appPath, findWidgetsOfClass, openURL, showInFolder import manuskript.functions as F from manuskript import loadSave +from manuskript.logging import getLogFilePath from manuskript.models.characterModel import characterModel from manuskript.models import outlineModel from manuskript.models.plotModel import plotModel @@ -179,6 +180,8 @@ class MainWindow(QMainWindow, Ui_MainWindow): # Main Menu:: Tool self.actToolFrequency.triggered.connect(self.frequencyAnalyzer) + self.actSupport.triggered.connect(self.support) + self.actLocateLog.triggered.connect(self.locateLogFile) self.actAbout.triggered.connect(self.about) self.makeUIConnections() @@ -1179,6 +1182,50 @@ class MainWindow(QMainWindow, Ui_MainWindow): r2 = self.geometry() win.move(r2.center() - QPoint(r.width()/2, r.height()/2)) + def support(self): + openURL("https://github.com/olivierkes/manuskript/wiki/Technical-Support") + + def locateLogFile(self): + logfile = getLogFilePath() + + # Make sure we are even logging to a file. + if not logfile: + QMessageBox(QMessageBox.Information, + self.tr("Sorry!"), + "

" + + self.tr("This session is not being logged.") + + "

", + QMessageBox.Ok).exec() + return + + # Remind user that log files are at their best once they are complete. + msg = QMessageBox(QMessageBox.Information, + self.tr("A log file is a Work in Progress!"), + "

" + + self.tr("The log file \"{}\" will continue to be written to until Manuskript is closed.").format(os.path.basename(logfile)) + + "

" + + "

" + + self.tr("It will now be displayed in your file manager, but is of limited use until you close Manuskript.") + + "

", + QMessageBox.Ok) + + ret = msg.exec() + + # Open the filemanager. + if ret == QMessageBox.Ok: + if not showInFolder(logfile): + # If everything convenient fails, at least make sure the user can browse to its location manually. + QMessageBox(QMessageBox.Critical, + self.tr("Error!"), + "

" + + self.tr("An error was encountered while trying to show the log file below in your file manager.") + + "

" + + "

" + + logfile + + "

", + QMessageBox.Ok).exec() + + def about(self): self.dialog = aboutDialog(mw=self) self.dialog.setFixedSize(self.dialog.size()) diff --git a/manuskript/ui/mainWindow.py b/manuskript/ui/mainWindow.py index 6736b74..eb8ce7f 100644 --- a/manuskript/ui/mainWindow.py +++ b/manuskript/ui/mainWindow.py @@ -381,7 +381,7 @@ class Ui_MainWindow(object): self.scrollAreaPersoInfos.setAlignment(QtCore.Qt.AlignLeading|QtCore.Qt.AlignLeft|QtCore.Qt.AlignTop) self.scrollAreaPersoInfos.setObjectName("scrollAreaPersoInfos") self.scrollAreaPersoInfosWidget = QtWidgets.QWidget() - self.scrollAreaPersoInfosWidget.setGeometry(QtCore.QRect(0, 0, 453, 695)) + self.scrollAreaPersoInfosWidget.setGeometry(QtCore.QRect(0, 0, 429, 719)) self.scrollAreaPersoInfosWidget.setObjectName("scrollAreaPersoInfosWidget") self.formLayout_8 = QtWidgets.QFormLayout(self.scrollAreaPersoInfosWidget) self.formLayout_8.setFieldGrowthPolicy(QtWidgets.QFormLayout.AllNonFixedFieldsGrow) @@ -757,7 +757,7 @@ class Ui_MainWindow(object): self.treeWorld.setRootIsDecorated(False) self.treeWorld.setObjectName("treeWorld") self.treeWorld.header().setVisible(False) - self.treeWorld.header().setDefaultSectionSize(25) + self.treeWorld.header().setDefaultSectionSize(35) self.verticalLayout_32.addWidget(self.treeWorld) self.horizontalLayout_19 = QtWidgets.QHBoxLayout() self.horizontalLayout_19.setObjectName("horizontalLayout_19") @@ -1042,7 +1042,7 @@ class Ui_MainWindow(object): self.horizontalLayout_2.addWidget(self.stack) MainWindow.setCentralWidget(self.centralwidget) self.menubar = QtWidgets.QMenuBar(MainWindow) - self.menubar.setGeometry(QtCore.QRect(0, 0, 1112, 24)) + self.menubar.setGeometry(QtCore.QRect(0, 0, 1112, 21)) self.menubar.setObjectName("menubar") self.menuFile = QtWidgets.QMenu(self.menubar) self.menuFile.setObjectName("menuFile") @@ -1287,6 +1287,10 @@ class Ui_MainWindow(object): icon = QtGui.QIcon.fromTheme("edit-find") self.actSearch.setIcon(icon) self.actSearch.setObjectName("actSearch") + self.actSupport = QtWidgets.QAction(MainWindow) + self.actSupport.setObjectName("actSupport") + self.actLocateLog = QtWidgets.QAction(MainWindow) + self.actLocateLog.setObjectName("actLocateLog") self.menuFile.addAction(self.actOpen) self.menuFile.addAction(self.menuRecents.menuAction()) self.menuFile.addAction(self.actSave) @@ -1298,6 +1302,10 @@ class Ui_MainWindow(object): self.menuFile.addSeparator() self.menuFile.addAction(self.actQuit) self.menuHelp.addAction(self.actShowHelp) + self.menuHelp.addSeparator() + self.menuHelp.addAction(self.actSupport) + self.menuHelp.addAction(self.actLocateLog) + self.menuHelp.addSeparator() self.menuHelp.addAction(self.actAbout) self.menuTools.addAction(self.actSpellcheck) self.menuTools.addAction(self.actToolFrequency) @@ -1656,6 +1664,13 @@ class Ui_MainWindow(object): self.actFormatBlockquote.setText(_translate("MainWindow", "B&lockquote")) self.actSearch.setText(_translate("MainWindow", "Search")) self.actSearch.setShortcut(_translate("MainWindow", "Ctrl+F")) + self.actSupport.setText(_translate("MainWindow", "&Technical Support")) + self.actSupport.setToolTip(_translate("MainWindow", "How to obtain technical support for Manuskript.")) + self.actSupport.setShortcut(_translate("MainWindow", "F1")) + self.actLocateLog.setText(_translate("MainWindow", "&Locate log file...")) + self.actLocateLog.setIconText(_translate("MainWindow", "Locate log file")) + self.actLocateLog.setToolTip(_translate("MainWindow", "Locate the diagnostic log file used for this session.")) + self.actLocateLog.setShortcut(_translate("MainWindow", "Shift+F1")) from manuskript.ui.cheatSheet import cheatSheet from manuskript.ui.editors.mainEditor import mainEditor from manuskript.ui.search import search diff --git a/manuskript/ui/mainWindow.ui b/manuskript/ui/mainWindow.ui index 3921e39..d036b5f 100644 --- a/manuskript/ui/mainWindow.ui +++ b/manuskript/ui/mainWindow.ui @@ -815,8 +815,8 @@ 0 0 - 453 - 695 + 429 + 719 @@ -1567,7 +1567,7 @@ false - 25 + 35
@@ -2115,7 +2115,7 @@ 0 0 1112 - 24 + 21 @@ -2147,6 +2147,10 @@ &Help + + + + @@ -2841,7 +2845,8 @@ - + + .. Search @@ -2850,6 +2855,31 @@ Ctrl+F + + + &Technical Support + + + How to obtain technical support for Manuskript. + + + F1 + + + + + &Locate log file... + + + Locate log file + + + Locate the diagnostic log file used for this session. + + + Shift+F1 + +