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 diff --git a/.gitignore b/.gitignore index c34333a..75595ae 100644 --- a/.gitignore +++ b/.gitignore @@ -11,12 +11,17 @@ .idea .project .pydevproject +.python-version .settings/org.eclipse.core.resources.prefs +.vscode +.vimrc ExportTest Notes.t2t dist build icons/Numix manuskript/pycallgraph.txt +manuskript.log snowflake* test-projects +main.pyproject.user diff --git a/.travis.yml b/.travis.yml index 57e6021..75d6174 100644 --- a/.travis.yml +++ b/.travis.yml @@ -2,7 +2,7 @@ language: generic os: - osx - linux -osx_image: xcode8.3 +osx_image: xcode13.4 sudo: required install: - if [ "$TRAVIS_OS_NAME" = "osx" ]; then package/prepare_osx.sh; fi diff --git a/CHANGELOG.md b/CHANGELOG.md index fc51501..5dacadf 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,358 @@ -# Change Log +# Changelog + +## [0.14.0](https://github.com/olivierkes/manuskript/tree/0.14.0) (2022-06-08) + +[Full Changelog](https://github.com/olivierkes/manuskript/compare/0.13.1...0.14.0) + +**Implemented enhancements:** + +- \[Feature Request\] Full Compile Export [\#1034](https://github.com/olivierkes/manuskript/issues/1034) +- Cleaning up the flatpak [\#1029](https://github.com/olivierkes/manuskript/issues/1029) + +**Fixed bugs:** + +- Crashing when I'm trying to create the 1st project [\#1035](https://github.com/olivierkes/manuskript/issues/1035) +- crash on the "Outline" section [\#1032](https://github.com/olivierkes/manuskript/issues/1032) +- Manuskript crashing while booting [\#1021](https://github.com/olivierkes/manuskript/issues/1021) +- \[Bug\] double click causes crash in outline or plots view [\#1014](https://github.com/olivierkes/manuskript/issues/1014) +- Re-ordering items in the outline causes data loss/text overwritting [\#1001](https://github.com/olivierkes/manuskript/issues/1001) +- An unhandled exception has occurred! on cheatsheet [\#994](https://github.com/olivierkes/manuskript/issues/994) +- Crash when changing index card style [\#992](https://github.com/olivierkes/manuskript/issues/992) +- Regex search causes crash [\#989](https://github.com/olivierkes/manuskript/issues/989) +- Crash when project file is open in another application [\#950](https://github.com/olivierkes/manuskript/issues/950) +- outliner folder gets renamed and contents replaced when dragged over other folder, only in upward direction [\#719](https://github.com/olivierkes/manuskript/issues/719) + +**Closed issues:** + +- Creating empty language file hr-HR [\#1023](https://github.com/olivierkes/manuskript/issues/1023) +- Creating project from template dialog has fixed size [\#996](https://github.com/olivierkes/manuskript/issues/996) +- Russian translation [\#990](https://github.com/olivierkes/manuskript/issues/990) +- \[Windows Version\] Two program windows pop up [\#327](https://github.com/olivierkes/manuskript/issues/327) + +**Merged pull requests:** + +- catch AttributeError in plotTreeView double click event \(fixes \#1014\) [\#1015](https://github.com/olivierkes/manuskript/pull/1015) ([amconners](https://github.com/amconners)) +- Change welcome page spacer size policy to allow welcome to expand to fill most of screen \(fixes olivierkes\#996\) [\#1007](https://github.com/olivierkes/manuskript/pull/1007) ([jdanielp](https://github.com/jdanielp)) +- Fix crash when files are locked for writing \(Fixes olivierkes\#950\) [\#1004](https://github.com/olivierkes/manuskript/pull/1004) ([jdanielp](https://github.com/jdanielp)) +- Fix crash when regex is not valid \(Fixes olivierkes\#989\) [\#1003](https://github.com/olivierkes/manuskript/pull/1003) ([jdanielp](https://github.com/jdanielp)) +- Potential fix for \#719, \#1001: data loss when reordering items in upward direction [\#1002](https://github.com/olivierkes/manuskript/pull/1002) ([olivierkes](https://github.com/olivierkes)) +- hard\_line\_breaks support [\#1000](https://github.com/olivierkes/manuskript/pull/1000) ([Mte90](https://github.com/Mte90)) +- Fix for \#992 and \#998 [\#999](https://github.com/olivierkes/manuskript/pull/999) ([amconners](https://github.com/amconners)) +- Write a test for ParseMMDFile function. [\#831](https://github.com/olivierkes/manuskript/pull/831) ([zeth](https://github.com/zeth)) + +## [0.13.1](https://github.com/olivierkes/manuskript/tree/0.13.1) (2021-12-13) + +[Full Changelog](https://github.com/olivierkes/manuskript/compare/0.12.0...0.13.1) + +**Implemented enhancements:** + +- Stripping down the install for low resource machines [\#956](https://github.com/olivierkes/manuskript/issues/956) +- Add filename/titles to warning dialog box when deleting files or folders [\#931](https://github.com/olivierkes/manuskript/issues/931) +- \[Request\] Additional Package formats: AppImage \(also note Flatpak, Snap\) [\#71](https://github.com/olivierkes/manuskript/issues/71) + +**Fixed bugs:** + +- Character Detailed Info Crash [\#971](https://github.com/olivierkes/manuskript/issues/971) +- Fail to launch [\#967](https://github.com/olivierkes/manuskript/issues/967) +- Critical error when running on Fedora 35 \(manuskript won't start\) [\#957](https://github.com/olivierkes/manuskript/issues/957) +- Can't open Manuskript executable "manuskript-0.12.0-win32" and "manuskript-0.12.0-fix-7e05b72-win32" on windows 7 professional. [\#951](https://github.com/olivierkes/manuskript/issues/951) +- Software crashes when I try to add a new character detail. [\#945](https://github.com/olivierkes/manuskript/issues/945) +- It crashes when I double click characters name's frame [\#937](https://github.com/olivierkes/manuskript/issues/937) +- calling pandoc 2.5 is broken with the later versions [\#922](https://github.com/olivierkes/manuskript/issues/922) +- Entry Point Error, how can I solve this ? [\#911](https://github.com/olivierkes/manuskript/issues/911) +- Issues pertaining to the wrong table being referenced in the "Detailed info" tab on the "Characters" pane [\#910](https://github.com/olivierkes/manuskript/issues/910) +- Upgraded from 0.11 to 0.12, open from command line and dolphin broken [\#898](https://github.com/olivierkes/manuskript/issues/898) +- IndexError in characterModel.py [\#896](https://github.com/olivierkes/manuskript/issues/896) +- Error on export return code: 43 [\#886](https://github.com/olivierkes/manuskript/issues/886) +- Issue installing v12 on Win7 64bit [\#872](https://github.com/olivierkes/manuskript/issues/872) +- well, now it don't even open... [\#870](https://github.com/olivierkes/manuskript/issues/870) +- Overlapping IDs repeating [\#865](https://github.com/olivierkes/manuskript/issues/865) +- crash on character details frame [\#843](https://github.com/olivierkes/manuskript/issues/843) +- POV selection changes if character is deleted and a new one is added [\#808](https://github.com/olivierkes/manuskript/issues/808) +- Crashhhh [\#791](https://github.com/olivierkes/manuskript/issues/791) +- Manuskript runs amok, with Project \(Project is added\) [\#729](https://github.com/olivierkes/manuskript/issues/729) + +**Security fixes:** + +- Possible security issue [\#891](https://github.com/olivierkes/manuskript/issues/891) + +**Closed issues:** + +- Ubuntu snap on edge channel not updated with v12 [\#955](https://github.com/olivierkes/manuskript/issues/955) +- Installed on chromebook \(linux\), no issues, opened it up and it has no words? [\#925](https://github.com/olivierkes/manuskript/issues/925) +- App crashing when adding detailed info to character. [\#920](https://github.com/olivierkes/manuskript/issues/920) +- Ubuntu 21.04, Manuskrip not installing or working with .deb snap or repository. [\#900](https://github.com/olivierkes/manuskript/issues/900) +- \(Windows, 0.12.0\) "GetDaylightFlag" not found in "kernel32.dll" [\#889](https://github.com/olivierkes/manuskript/issues/889) +- Text pasted in Summary or Notes/References disappears [\#873](https://github.com/olivierkes/manuskript/issues/873) +- Linux missing dependency? [\#847](https://github.com/olivierkes/manuskript/issues/847) +- Flatpak package [\#425](https://github.com/olivierkes/manuskript/issues/425) + +**Merged pull requests:** + +- Fixes for a number of reported bugs [\#901](https://github.com/olivierkes/manuskript/pull/901) ([worstje](https://github.com/worstje)) +- Kill old insecure pickle setting files \(untested\) [\#895](https://github.com/olivierkes/manuskript/pull/895) ([zeth](https://github.com/zeth)) +- Deal with race condition. [\#894](https://github.com/olivierkes/manuskript/pull/894) ([zeth](https://github.com/zeth)) +- Someone was in a JavaScript mood? [\#893](https://github.com/olivierkes/manuskript/pull/893) ([zeth](https://github.com/zeth)) + +## [0.12.0](https://github.com/olivierkes/manuskript/tree/0.12.0) (2021-04-30) + +[Full Changelog](https://github.com/olivierkes/manuskript/compare/0.11.0...0.12.0) + +**Implemented enhancements:** + +- \[Feature Request\] Word counter in full screen mode [\#723](https://github.com/olivierkes/manuskript/issues/723) +- Improving user-friendliness of log files [\#852](https://github.com/olivierkes/manuskript/issues/852) +- \[Feature Request\] Add spell check for Chinese. [\#822](https://github.com/olivierkes/manuskript/issues/822) +- Number of characters instead of number of words? [\#774](https://github.com/olivierkes/manuskript/issues/774) +- Italian spellchecker [\#730](https://github.com/olivierkes/manuskript/issues/730) +- Word count statistics incorrect when using Chinese characters [\#607](https://github.com/olivierkes/manuskript/issues/607) +- select which monitor in full screen mode [\#456](https://github.com/olivierkes/manuskript/issues/456) +- \[feature request\] Scene Search [\#376](https://github.com/olivierkes/manuskript/issues/376) +- \[Feature request\] References in characters' bios [\#347](https://github.com/olivierkes/manuskript/issues/347) +- add languagetool [\#142](https://github.com/olivierkes/manuskript/issues/142) + +**Fixed bugs:** + +- Can't open any file [\#758](https://github.com/olivierkes/manuskript/issues/758) +- Main major and minor character are not functional [\#698](https://github.com/olivierkes/manuskript/issues/698) +- Using a world building template is broken [\#866](https://github.com/olivierkes/manuskript/issues/866) +- Slow startup when using language\_tool\_python in the test python setup [\#862](https://github.com/olivierkes/manuskript/issues/862) +- When using the + on editor or outline the application crashes [\#855](https://github.com/olivierkes/manuskript/issues/855) +- Fullscreen and Exit -\> Fullscreen survives [\#846](https://github.com/olivierkes/manuskript/issues/846) +- Loading another project leads to crash [\#833](https://github.com/olivierkes/manuskript/issues/833) +- Crashes with using language-check [\#832](https://github.com/olivierkes/manuskript/issues/832) +- Crash on showing settingsWindow.py [\#817](https://github.com/olivierkes/manuskript/issues/817) +- Python syntax warning upon installation [\#792](https://github.com/olivierkes/manuskript/issues/792) +- Right click → Insert Reference buggy when search term is followed by punctuation [\#781](https://github.com/olivierkes/manuskript/issues/781) +- Error on export when using pandoc [\#736](https://github.com/olivierkes/manuskript/issues/736) +- Snap Package: All types of export with pandoc fail with error 97 [\#709](https://github.com/olivierkes/manuskript/issues/709) +- export error \(pandoc\) [\#590](https://github.com/olivierkes/manuskript/issues/590) + +**Closed issues:** + +- Help! Can't open MSK.file [\#759](https://github.com/olivierkes/manuskript/issues/759) +- Can't run Manuskript [\#742](https://github.com/olivierkes/manuskript/issues/742) +- Manuskript Crashes on Project Open [\#741](https://github.com/olivierkes/manuskript/issues/741) +- Program crashes randomly and then never opens again even after reinstall [\#665](https://github.com/olivierkes/manuskript/issues/665) +- PLOT Character Error Message [\#519](https://github.com/olivierkes/manuskript/issues/519) +- Enable/Disable POV-Option for Characters [\#335](https://github.com/olivierkes/manuskript/issues/335) +- Show character count progress indicator [\#334](https://github.com/olivierkes/manuskript/issues/334) +- Small bug with LanguageTool [\#860](https://github.com/olivierkes/manuskript/issues/860) + +**Merged pull requests:** + +- Hyphens no longer counted in word count [\#816](https://github.com/olivierkes/manuskript/pull/816) ([James-Joe](https://github.com/James-Joe)) +- - adding characters count. Implementing \#334 [\#339](https://github.com/olivierkes/manuskript/pull/339) ([lechbaczynski](https://github.com/lechbaczynski)) +- Fix missing root when using world building template [\#867](https://github.com/olivierkes/manuskript/pull/867) ([belug23](https://github.com/belug23)) +- Add configuration for github actions to test linux on pull requests [\#864](https://github.com/olivierkes/manuskript/pull/864) ([belug23](https://github.com/belug23)) +- Fix errors when language tool isn't installed [\#863](https://github.com/olivierkes/manuskript/pull/863) ([belug23](https://github.com/belug23)) +- Fix 860 languagetool get locale language [\#861](https://github.com/olivierkes/manuskript/pull/861) ([belug23](https://github.com/belug23)) +- Friendly logging for end users [\#859](https://github.com/olivierkes/manuskript/pull/859) ([worstje](https://github.com/worstje)) +- Fixing the tests for travis-CI [\#858](https://github.com/olivierkes/manuskript/pull/858) ([belug23](https://github.com/belug23)) +- Fix \#855 - Avoid a crash when there's no model [\#856](https://github.com/olivierkes/manuskript/pull/856) ([belug23](https://github.com/belug23)) +- Fix \#846 close Fullscreen when exiting main editor [\#854](https://github.com/olivierkes/manuskript/pull/854) ([belug23](https://github.com/belug23)) +- Fix \#456 - Force the distraction free window on the display of the main window [\#851](https://github.com/olivierkes/manuskript/pull/851) ([belug23](https://github.com/belug23)) +- Fixed project not opening with missing background [\#850](https://github.com/olivierkes/manuskript/pull/850) ([rbb8403](https://github.com/rbb8403)) +- setup signal handler to avoid accident data loss [\#835](https://github.com/olivierkes/manuskript/pull/835) ([lingsamuel](https://github.com/lingsamuel)) +- Properly disconnect add person connection. [\#834](https://github.com/olivierkes/manuskript/pull/834) ([BentleyJOakes](https://github.com/BentleyJOakes)) +- Change outlineItem ID assignment process for major optimization [\#827](https://github.com/olivierkes/manuskript/pull/827) ([emgineering](https://github.com/emgineering)) +- Fix for TypeErrors when using certain app styles [\#793](https://github.com/olivierkes/manuskript/pull/793) ([FrancoisDuchene](https://github.com/FrancoisDuchene)) +- Fixed pandoc command arguments [\#790](https://github.com/olivierkes/manuskript/pull/790) ([DarkRedman](https://github.com/DarkRedman)) +- Update manuskript\_fr.ts [\#789](https://github.com/olivierkes/manuskript/pull/789) ([DarkRedman](https://github.com/DarkRedman)) +- Update abstractModel.py [\#777](https://github.com/olivierkes/manuskript/pull/777) ([siliconserf](https://github.com/siliconserf)) +- Clones importance setting when adding new characters. [\#775](https://github.com/olivierkes/manuskript/pull/775) ([BentleyJOakes](https://github.com/BentleyJOakes)) +- typofixing here and there [\#768](https://github.com/olivierkes/manuskript/pull/768) ([goofy-mdn](https://github.com/goofy-mdn)) +- Fix Python 3.8 SyntaxWarning: "is not" with a literal [\#762](https://github.com/olivierkes/manuskript/pull/762) ([gedakc](https://github.com/gedakc)) +- Set minimum of xcode11 for macOS X in Travis CI build [\#760](https://github.com/olivierkes/manuskript/pull/760) ([gedakc](https://github.com/gedakc)) +- Enabling/Disabling POV for a specific character [\#748](https://github.com/olivierkes/manuskript/pull/748) ([TheJackiMonster](https://github.com/TheJackiMonster)) +- Added basic support for LanguageTool via 'language\_check' as advanced spellchecker [\#747](https://github.com/olivierkes/manuskript/pull/747) ([TheJackiMonster](https://github.com/TheJackiMonster)) +- Added char-count with settings to enable/disable it. [\#746](https://github.com/olivierkes/manuskript/pull/746) ([TheJackiMonster](https://github.com/TheJackiMonster)) +- Add snap layout for pandoc templates directory [\#737](https://github.com/olivierkes/manuskript/pull/737) ([tomwardill](https://github.com/tomwardill)) +- Select newly added world items, opening branches as necessary [\#735](https://github.com/olivierkes/manuskript/pull/735) ([johnbintz](https://github.com/johnbintz)) +- Add global search [\#717](https://github.com/olivierkes/manuskript/pull/717) ([moisesjbc](https://github.com/moisesjbc)) +- added 3 buttons to the textEditView that allow quickly adding new items [\#690](https://github.com/olivierkes/manuskript/pull/690) ([nagolinc](https://github.com/nagolinc)) +- Logging and command-line arguments [\#667](https://github.com/olivierkes/manuskript/pull/667) ([worstje](https://github.com/worstje)) + +## [0.11.0](https://github.com/olivierkes/manuskript/tree/0.11.0) (2020-01-18) + +[Full Changelog](https://github.com/olivierkes/manuskript/compare/0.10.0...0.11.0) + +**Implemented enhancements:** + +- \[Feature Request\] Automatically calculate folder word count goal [\#664](https://github.com/olivierkes/manuskript/issues/664) + +**Fixed bugs:** + +- Ctrl+Space destroys and Ctrl+Z can't recover [\#703](https://github.com/olivierkes/manuskript/issues/703) +- References Mysteriously Delete in Summary and Reference/Notes Fields [\#688](https://github.com/olivierkes/manuskript/issues/688) +- After use of ctrl-z or ctrl-v Manuskript goes in inactive State [\#672](https://github.com/olivierkes/manuskript/issues/672) +- Cut and Paste - Comment Field - First shows, then disappiers [\#670](https://github.com/olivierkes/manuskript/issues/670) +- 0.10.0 crash using Windows dark mode [\#659](https://github.com/olivierkes/manuskript/issues/659) + +**Closed issues:** + +- Can't get the program to open [\#686](https://github.com/olivierkes/manuskript/issues/686) +- Default for separator between folders should be pagebreak [\#680](https://github.com/olivierkes/manuskript/issues/680) +- Program crashes on copy and paste [\#441](https://github.com/olivierkes/manuskript/issues/441) + +**Merged pull requests:** + +- Change wording of import warning for PyQt/Qt versions 5.11 and 5.12 [\#715](https://github.com/olivierkes/manuskript/pull/715) ([gedakc](https://github.com/gedakc)) +- Remove support for macOS X Sierra \(10.12\) in Travis CI build [\#713](https://github.com/olivierkes/manuskript/pull/713) ([gedakc](https://github.com/gedakc)) +- Fixed bugs caused by parallel access during multithreading [\#706](https://github.com/olivierkes/manuskript/pull/706) ([TheJackiMonster](https://github.com/TheJackiMonster)) +- More german translations [\#701](https://github.com/olivierkes/manuskript/pull/701) ([fabianbeil](https://github.com/fabianbeil)) +- Fixed translation mistake. Trilogy translates to Trilogie in German [\#700](https://github.com/olivierkes/manuskript/pull/700) ([fabianbeil](https://github.com/fabianbeil)) +- Fix for Windows 10 Dark Theme on older Qt versions [\#660](https://github.com/olivierkes/manuskript/pull/660) ([worstje](https://github.com/worstje)) + +## [0.10.0](https://github.com/olivierkes/manuskript/tree/0.10.0) (2019-09-30) + +[Full Changelog](https://github.com/olivierkes/manuskript/compare/0.9.0...0.10.0) + +**Implemented enhancements:** + +- Add non-enchant spellcheck support [\#505](https://github.com/olivierkes/manuskript/issues/505) +- Basic dark theme support \(Windows 10\) [\#630](https://github.com/olivierkes/manuskript/pull/630) ([worstje](https://github.com/worstje)) +- Refactor spellchecker code and add other spellcheck library support [\#507](https://github.com/olivierkes/manuskript/pull/507) ([kakaroto](https://github.com/kakaroto)) + +**Fixed bugs:** + +- Impossible to change UI language to english if your system locale isn't set to an anglophonic country [\#619](https://github.com/olivierkes/manuskript/issues/619) +- All Imports are crashing [\#611](https://github.com/olivierkes/manuskript/issues/611) +- When compiling, it overwrite files without asking [\#608](https://github.com/olivierkes/manuskript/issues/608) +- Crash when exporting with pandoc as custom path only [\#563](https://github.com/olivierkes/manuskript/issues/563) +- Crash on insertion of new page character [\#562](https://github.com/olivierkes/manuskript/issues/562) +- Crash on adding word goal in outline [\#561](https://github.com/olivierkes/manuskript/issues/561) +- Crash in Windows 10 when drag and drop [\#559](https://github.com/olivierkes/manuskript/issues/559) +- Image crash: When using tooltip on an incomplete image filename [\#549](https://github.com/olivierkes/manuskript/issues/549) +- pandoc export crashes if project title is empty [\#535](https://github.com/olivierkes/manuskript/issues/535) +- editor/cork options wrong after deleting a text [\#516](https://github.com/olivierkes/manuskript/issues/516) +- crash on import directory [\#500](https://github.com/olivierkes/manuskript/issues/500) +- Inconsistent and/or undesirable window placements [\#481](https://github.com/olivierkes/manuskript/issues/481) +- Crash when deleting folder with files in tree view [\#479](https://github.com/olivierkes/manuskript/issues/479) +- New level 'unit' is reset [\#468](https://github.com/olivierkes/manuskript/issues/468) +- Lowering number of saved revisions below 1 crashes program [\#381](https://github.com/olivierkes/manuskript/issues/381) +- ValueError: All strings must be XML compatible: Unicode or ASCII, no NULL bytes or control characters [\#31](https://github.com/olivierkes/manuskript/issues/31) +- OS X: cannot leave fullscreen mode [\#24](https://github.com/olivierkes/manuskript/issues/24) + +**Closed issues:** + +- Fullscreen mode causes spike in CPU [\#643](https://github.com/olivierkes/manuskript/issues/643) +- Italian dictionary [\#638](https://github.com/olivierkes/manuskript/issues/638) +- Manuskript 9.0 crashes when creating new project or opening existing project [\#631](https://github.com/olivierkes/manuskript/issues/631) +- Spell Check Not working [\#625](https://github.com/olivierkes/manuskript/issues/625) +- Manuskript me fastidio un documento de word [\#616](https://github.com/olivierkes/manuskript/issues/616) +- Feature request: Option to vertically center text input line on screen in fullscreen mode [\#602](https://github.com/olivierkes/manuskript/issues/602) +- File Randomly won't open [\#597](https://github.com/olivierkes/manuskript/issues/597) +- utf-8' codec can't decode byte 0xff in position 0 [\#591](https://github.com/olivierkes/manuskript/issues/591) +- Issue with saving as directory [\#589](https://github.com/olivierkes/manuskript/issues/589) +- Headings h4 not translated from Markdown to ODF [\#580](https://github.com/olivierkes/manuskript/issues/580) +- \[BUG\] Shim error [\#579](https://github.com/olivierkes/manuskript/issues/579) +- Crash when edit text [\#555](https://github.com/olivierkes/manuskript/issues/555) +- Unusual environment failure [\#547](https://github.com/olivierkes/manuskript/issues/547) +- Won't run \(Arch Linux\) [\#546](https://github.com/olivierkes/manuskript/issues/546) +- Rendre extensible les modèles d'intrigue [\#329](https://github.com/olivierkes/manuskript/issues/329) +- Word count goal progress bar broken in develop. [\#652](https://github.com/olivierkes/manuskript/issues/652) +- story line feature crashing [\#620](https://github.com/olivierkes/manuskript/issues/620) +- Italian translation not applied, application still english. [\#599](https://github.com/olivierkes/manuskript/issues/599) +- Adding Persian\(Farsi\) in Weblate [\#596](https://github.com/olivierkes/manuskript/issues/596) +- Importing images into Manuskript [\#593](https://github.com/olivierkes/manuskript/issues/593) +- British English translation [\#592](https://github.com/olivierkes/manuskript/issues/592) +- Crashes in outliner [\#582](https://github.com/olivierkes/manuskript/issues/582) + +**Merged pull requests:** + +- Changes to Revisions UI [\#655](https://github.com/olivierkes/manuskript/pull/655) ([worstje](https://github.com/worstje)) +- Restore progress bar functionality [\#654](https://github.com/olivierkes/manuskript/pull/654) ([worstje](https://github.com/worstje)) +- Default keep revisions to disabled, and remove tests for revisions [\#653](https://github.com/olivierkes/manuskript/pull/653) ([gedakc](https://github.com/gedakc)) +- Fix word recognition for spell checker, ignore active partial words [\#651](https://github.com/olivierkes/manuskript/pull/651) ([gedakc](https://github.com/gedakc)) +- Fix typo missed in previous commit [\#648](https://github.com/olivierkes/manuskript/pull/648) ([luzpaz](https://github.com/luzpaz)) +- Fix source typo [\#645](https://github.com/olivierkes/manuskript/pull/645) ([luzpaz](https://github.com/luzpaz)) +- Move Qt 5.11 / 5.12 version warning to Import invocation [\#642](https://github.com/olivierkes/manuskript/pull/642) ([gedakc](https://github.com/gedakc)) +- Add DISABLE\_WAYLAND to snapcraft.yaml [\#637](https://github.com/olivierkes/manuskript/pull/637) ([gedakc](https://github.com/gedakc)) +- Further refinement of image tooltips \(issue \#593\) [\#629](https://github.com/olivierkes/manuskript/pull/629) ([worstje](https://github.com/worstje)) +- Reworking of the translation loading process \(issue \#619\) [\#627](https://github.com/olivierkes/manuskript/pull/627) ([worstje](https://github.com/worstje)) +- change markdown to "Markdown" in.... [\#624](https://github.com/olivierkes/manuskript/pull/624) ([leela52452](https://github.com/leela52452)) +- Fix tab key order, and default window tab for character & plot panes [\#623](https://github.com/olivierkes/manuskript/pull/623) ([gedakc](https://github.com/gedakc)) +- Add British English Translation updates [\#621](https://github.com/olivierkes/manuskript/pull/621) ([gedakc](https://github.com/gedakc)) +- Do not prompt "Save project?" when \_Save on quit\_ setting enabled [\#615](https://github.com/olivierkes/manuskript/pull/615) ([gedakc](https://github.com/gedakc)) +- Fix exports silently overwriting files \(fixes \#608\) & small fix to dialog logic [\#613](https://github.com/olivierkes/manuskript/pull/613) ([worstje](https://github.com/worstje)) +- Working Pandoc import \(fixes \#611\) & small dialog UI update. [\#612](https://github.com/olivierkes/manuskript/pull/612) ([worstje](https://github.com/worstje)) +- Fix Linux Travis CI build error - pyenv: version `3.6.3' not installed [\#610](https://github.com/olivierkes/manuskript/pull/610) ([gedakc](https://github.com/gedakc)) +- Fix crash when setting word Goal on new Text \(scene\) in Outline pane [\#609](https://github.com/olivierkes/manuskript/pull/609) ([gedakc](https://github.com/gedakc)) +- Spelling: Manuscript, could not, process, … No content [\#588](https://github.com/olivierkes/manuskript/pull/588) ([comradekingu](https://github.com/comradekingu)) +- fix issue \#468 'unit' is reset [\#587](https://github.com/olivierkes/manuskript/pull/587) ([NocturnalFred](https://github.com/NocturnalFred)) +- Fix pandoc export crashes is project title is empty [\#585](https://github.com/olivierkes/manuskript/pull/585) ([gedakc](https://github.com/gedakc)) +- Track dirty state and have the UI behave accordingly [\#583](https://github.com/olivierkes/manuskript/pull/583) ([worstje](https://github.com/worstje)) +- Fix crash if invalid character is inserted into the text. [\#578](https://github.com/olivierkes/manuskript/pull/578) ([kakaroto](https://github.com/kakaroto)) +- Fix crash if using a custom pandoc installation [\#577](https://github.com/olivierkes/manuskript/pull/577) ([kakaroto](https://github.com/kakaroto)) +- Fix dialog windows being created outside the desktop area [\#576](https://github.com/olivierkes/manuskript/pull/576) ([kakaroto](https://github.com/kakaroto)) +- Fix occasional crashes when \(re\)moving items [\#571](https://github.com/olivierkes/manuskript/pull/571) ([worstje](https://github.com/worstje)) +- trying to resolve full screen exit issues on macOS [\#569](https://github.com/olivierkes/manuskript/pull/569) ([dschanoeh](https://github.com/dschanoeh)) +- Fix typos in translation format placeholders that lead to crash [\#566](https://github.com/olivierkes/manuskript/pull/566) ([RaphaelWimmer](https://github.com/RaphaelWimmer)) +- Fixed \#549 and refactored the image tooltip code [\#558](https://github.com/olivierkes/manuskript/pull/558) ([worstje](https://github.com/worstje)) +- Fix typo [\#548](https://github.com/olivierkes/manuskript/pull/548) ([vulpivia](https://github.com/vulpivia)) +- Fix misc. typos [\#489](https://github.com/olivierkes/manuskript/pull/489) ([luzpaz](https://github.com/luzpaz)) + +## [0.9.0](https://github.com/olivierkes/manuskript/tree/0.9.0) (2019-04-04) + +[Full Changelog](https://github.com/olivierkes/manuskript/compare/0.8.0...0.9.0) + +**Implemented enhancements:** + +- Fullscreen editor suggestions [\#527](https://github.com/olivierkes/manuskript/issues/527) +- \[Feature Request\] Keyboard shortcuts in Full-Screen mode [\#444](https://github.com/olivierkes/manuskript/issues/444) +- \[Feature Request\] Add Ability to Add Image When Creating Fullscreen Theme [\#399](https://github.com/olivierkes/manuskript/issues/399) +- Making Fullscreen Mode Great Again [\#234](https://github.com/olivierkes/manuskript/issues/234) + +**Fixed bugs:** + +- Crash when previewing malformed regular expression when compiling [\#488](https://github.com/olivierkes/manuskript/issues/488) +- Spellcheck On/Off setting ignored / Manuskript unresponsive [\#474](https://github.com/olivierkes/manuskript/issues/474) +- Wrong codepage for import causes crash [\#470](https://github.com/olivierkes/manuskript/issues/470) +- Full-screen mode right-click menu black text on black background [\#440](https://github.com/olivierkes/manuskript/issues/440) +- Application language still the same after changing it in the settings. [\#411](https://github.com/olivierkes/manuskript/issues/411) + +**Closed issues:** + +- Python issues? lxml [\#541](https://github.com/olivierkes/manuskript/issues/541) +- Cannot open a project. [\#529](https://github.com/olivierkes/manuskript/issues/529) +- Corrupted Project File Crashes When Opening. [\#522](https://github.com/olivierkes/manuskript/issues/522) +- Specific document suddenly won't open [\#502](https://github.com/olivierkes/manuskript/issues/502) +- trying to get pandoc to work manuskript 0.8.0 Win10 64 [\#475](https://github.com/olivierkes/manuskript/issues/475) +- Editor does not show text [\#472](https://github.com/olivierkes/manuskript/issues/472) +- Application crashes when trying to save "…" [\#461](https://github.com/olivierkes/manuskript/issues/461) +- Feature Request: script writing interface for manuskript [\#435](https://github.com/olivierkes/manuskript/issues/435) +- suggestion: Use sudo for your Fedora install instructions, not su -c [\#573](https://github.com/olivierkes/manuskript/issues/573) +- Chinese translation filename suffix [\#428](https://github.com/olivierkes/manuskript/issues/428) + +**Merged pull requests:** + +- Fix color scheme of fullscreen editor [\#539](https://github.com/olivierkes/manuskript/pull/539) ([kakaroto](https://github.com/kakaroto)) +- Directory entries in ZIP break loading code [\#531](https://github.com/olivierkes/manuskript/pull/531) ([worstje](https://github.com/worstje)) +- Providing a suitable icon for consumption by Windows operating systems [\#530](https://github.com/olivierkes/manuskript/pull/530) ([worstje](https://github.com/worstje)) +- Ensure text file open methods use utf-8 encoding [\#515](https://github.com/olivierkes/manuskript/pull/515) ([gedakc](https://github.com/gedakc)) +- Fix crash when right-clicking twice on fullscreen panel in Windows 10 [\#514](https://github.com/olivierkes/manuskript/pull/514) ([kakaroto](https://github.com/kakaroto)) +- Add support for IPython Jupyter QT Console as a debugging aid [\#513](https://github.com/olivierkes/manuskript/pull/513) ([kakaroto](https://github.com/kakaroto)) +- Fix background of popup menus that were transparent \(black\) [\#512](https://github.com/olivierkes/manuskript/pull/512) ([kakaroto](https://github.com/kakaroto)) +- Add snap build and package [\#511](https://github.com/olivierkes/manuskript/pull/511) ([tomwardill](https://github.com/tomwardill)) +- Add ability to add new background images through UI. [\#510](https://github.com/olivierkes/manuskript/pull/510) ([kakaroto](https://github.com/kakaroto)) +- Fullscreen panels improvements [\#509](https://github.com/olivierkes/manuskript/pull/509) ([kakaroto](https://github.com/kakaroto)) +- Fix corkView background image on Windows [\#508](https://github.com/olivierkes/manuskript/pull/508) ([kakaroto](https://github.com/kakaroto)) +- Do not default spellcheck to True for new editor views [\#506](https://github.com/olivierkes/manuskript/pull/506) ([kakaroto](https://github.com/kakaroto)) +- Set editor theme stylesheet to QTextEdit only. [\#504](https://github.com/olivierkes/manuskript/pull/504) ([kakaroto](https://github.com/kakaroto)) +- Fix fullscreen editor's myScrollBar delayed destruction causing a crash [\#503](https://github.com/olivierkes/manuskript/pull/503) ([kakaroto](https://github.com/kakaroto)) +- 2nd try to fix macOS X blank screen when leaving fullscreen editor mode [\#495](https://github.com/olivierkes/manuskript/pull/495) ([gedakc](https://github.com/gedakc)) +- Fix crash when right clicking a word in editor and enchant is not installed [\#492](https://github.com/olivierkes/manuskript/pull/492) ([kakaroto](https://github.com/kakaroto)) +- Don't crash if a typo is made in the exporter's regular expression. [\#486](https://github.com/olivierkes/manuskript/pull/486) ([kakaroto](https://github.com/kakaroto)) +- Fix crash when previewing pandoc HTML with QTextEdit as web renderer… [\#485](https://github.com/olivierkes/manuskript/pull/485) ([kakaroto](https://github.com/kakaroto)) +- Fix crash when 7 pound signs are written alone on a line. [\#484](https://github.com/olivierkes/manuskript/pull/484) ([kakaroto](https://github.com/kakaroto)) +- Try to fix macOS X blank screen when leaving editor fullscreen mode [\#482](https://github.com/olivierkes/manuskript/pull/482) ([gedakc](https://github.com/gedakc)) +- Fix wrong codepage crash on import with Windows 10 [\#478](https://github.com/olivierkes/manuskript/pull/478) ([gedakc](https://github.com/gedakc)) +- Spelling: Manuscript, may have to be restarted [\#454](https://github.com/olivierkes/manuskript/pull/454) ([comradekingu](https://github.com/comradekingu)) +- Chinese translation [\#434](https://github.com/olivierkes/manuskript/pull/434) ([lingsamuel](https://github.com/lingsamuel)) +- fix translator [\#433](https://github.com/olivierkes/manuskript/pull/433) ([lingsamuel](https://github.com/lingsamuel)) +- Remember last accessed directory [\#431](https://github.com/olivierkes/manuskript/pull/431) ([lingsamuel](https://github.com/lingsamuel)) +- translation suffix, change translation load order [\#430](https://github.com/olivierkes/manuskript/pull/430) ([lingsamuel](https://github.com/lingsamuel)) ## [0.8.0](https://github.com/olivierkes/manuskript/tree/0.8.0) (2018-12-05) @@ -18,10 +372,11 @@ **Closed issues:** -- pt\_PT translation and Weblate [\#408](https://github.com/olivierkes/manuskript/issues/408) -- Italian translation [\#395](https://github.com/olivierkes/manuskript/issues/395) - Problems with running from 0.7.0 pyinstaller package on mac os x 10.13 [\#386](https://github.com/olivierkes/manuskript/issues/386) - Old bugs in current version 0.6.0 \(with crosslinks and details\) [\#371](https://github.com/olivierkes/manuskript/issues/371) +- pt\_PT translation and Weblate [\#408](https://github.com/olivierkes/manuskript/issues/408) +- Italian translation [\#395](https://github.com/olivierkes/manuskript/issues/395) +- Snowflake view mode always disabled [\#45](https://github.com/olivierkes/manuskript/issues/45) **Merged pull requests:** @@ -39,6 +394,7 @@ - Moved incorrectly placed parameter to correct place. Closes \#377. [\#389](https://github.com/olivierkes/manuskript/pull/389) ([RiderExMachina](https://github.com/RiderExMachina)) ## [0.7.0](https://github.com/olivierkes/manuskript/tree/0.7.0) (2018-08-15) + [Full Changelog](https://github.com/olivierkes/manuskript/compare/0.6.0...0.7.0) **Implemented enhancements:** @@ -97,6 +453,7 @@ - Build MacOS release with XCode 7.3 image [\#287](https://github.com/olivierkes/manuskript/pull/287) ([katafrakt](https://github.com/katafrakt)) ## [0.6.0](https://github.com/olivierkes/manuskript/tree/0.6.0) (2017-11-29) + [Full Changelog](https://github.com/olivierkes/manuskript/compare/0.5.0...0.6.0) **Implemented enhancements:** @@ -141,6 +498,7 @@ - Adds: Import OPML [\#192](https://github.com/olivierkes/manuskript/pull/192) ([camstevenson](https://github.com/camstevenson)) ## [0.5.0](https://github.com/olivierkes/manuskript/tree/0.5.0) (2017-10-31) + [Full Changelog](https://github.com/olivierkes/manuskript/compare/0.4.0...0.5.0) **Implemented enhancements:** @@ -219,6 +577,7 @@ - Fixes: incorrect reference to 32px icon [\#97](https://github.com/olivierkes/manuskript/pull/97) ([gedakc](https://github.com/gedakc)) ## [0.4.0](https://github.com/olivierkes/manuskript/tree/0.4.0) (2017-05-25) + [Full Changelog](https://github.com/olivierkes/manuskript/compare/0.3.0...0.4.0) **Implemented enhancements:** @@ -272,7 +631,6 @@ - Is This An Active Project [\#56](https://github.com/olivierkes/manuskript/issues/56) - Qt WebKit is deprecated [\#54](https://github.com/olivierkes/manuskript/issues/54) - Unable to run application [\#47](https://github.com/olivierkes/manuskript/issues/47) -- Snowflake view mode always disabled [\#45](https://github.com/olivierkes/manuskript/issues/45) - \[Windows\] Compile Dialog does not have a title [\#39](https://github.com/olivierkes/manuskript/issues/39) - Creating manuskript binay for Android and IOS [\#21](https://github.com/olivierkes/manuskript/issues/21) - Compiling Manuskript in windows [\#19](https://github.com/olivierkes/manuskript/issues/19) @@ -292,6 +650,7 @@ - Added spanish translation \(and changed "chuleta" for "guía rápida"\). [\#66](https://github.com/olivierkes/manuskript/pull/66) ([jmgaguilera](https://github.com/jmgaguilera)) ## [0.3.0](https://github.com/olivierkes/manuskript/tree/0.3.0) (2016-03-31) + [Full Changelog](https://github.com/olivierkes/manuskript/compare/0.2.0...0.3.0) **Fixed bugs:** @@ -306,6 +665,7 @@ - Windows installation issue [\#16](https://github.com/olivierkes/manuskript/issues/16) ## [0.2.0](https://github.com/olivierkes/manuskript/tree/0.2.0) (2016-02-28) + [Full Changelog](https://github.com/olivierkes/manuskript/compare/0.1.1...0.2.0) **Fixed bugs:** @@ -314,6 +674,7 @@ - Save file doesn't automatically add .msk [\#2](https://github.com/olivierkes/manuskript/issues/2) ## [0.1.1](https://github.com/olivierkes/manuskript/tree/0.1.1) (2016-02-08) + [Full Changelog](https://github.com/olivierkes/manuskript/compare/0.1.0...0.1.1) **Fixed bugs:** @@ -322,5 +683,8 @@ ## [0.1.0](https://github.com/olivierkes/manuskript/tree/0.1.0) (2016-02-06) +[Full Changelog](https://github.com/olivierkes/manuskript/compare/5df82d5e2de7cadd75b013c48ce4575688dd804a...0.1.0) -\* *This Change Log was automatically generated by [github_changelog_generator](https://github.com/skywinder/Github-Changelog-Generator)* + + +\* *This Changelog was automatically generated by [github_changelog_generator](https://github.com/github-changelog-generator/github-changelog-generator)* diff --git a/README.md b/README.md index b819417..6f55e71 100644 --- a/README.md +++ b/README.md @@ -1,11 +1,13 @@ # Manuskript -[Manuskript](http://www.theologeek.ch/manuskript) is an open-source +[Manuskript](https://www.theologeek.ch/manuskript) is an open-source tool for writers. +[![manuskript](https://snapcraft.io/manuskript/badge.svg)](https://snapcraft.io/manuskript) + Manuskript runs on GNU/Linux, Mac OS X, and Windows. -![Main view](http://www.theologeek.ch/manuskript/wp-content/uploads/2017/11/manuskript-0.5.0-main-view.jpg) +![Main view](https://www.theologeek.ch/manuskript/wp-content/uploads/2017/11/manuskript-0.5.0-main-view.jpg) ## Features @@ -18,34 +20,34 @@ With Manuskript you can: * Create characters * Conceive plots * Construct outlines - ([Outline mode](http://www.theologeek.ch/manuskript/2016/02/05/outliner/) + ([Outline mode](https://www.theologeek.ch/manuskript/2016/02/05/outliner/) and/or - [Index cards](http://www.theologeek.ch/manuskript/2016/02/05/index-cards/)) + [Index cards](https://www.theologeek.ch/manuskript/2016/02/05/index-cards/)) * Write with focus ([Distraction free mode](https://github.com/olivierkes/manuskript/wiki/Full-screen-mode)) * Build worlds * [Track items](https://github.com/olivierkes/manuskript/wiki/How-to-keep-track-of-important-items) * Edit and re-organize chapters and scenes -* View [Story line](http://www.theologeek.ch/manuskript/2016/02/28/story-line/) +* View [Story line](https://www.theologeek.ch/manuskript/2016/02/28/story-line/) * Compose with - [fiction or non-fiction templates and writing modes](http://www.theologeek.ch/manuskript/2016/03/31/writing-modes-simple-fiction/) -* Export to HTML, ePub, OpenDocument, DocX, PDF, and + [fiction or non-fiction templates and writing modes](https://www.theologeek.ch/manuskript/2016/03/31/writing-modes-simple-fiction/) +* Import and export document formats such as HTML, ePub, OpenDocument, DocX, and [more](https://github.com/olivierkes/manuskript/wiki/Import-and-Export-capabilities) Additionally Manuskript can help in many more ways with a spell checker, markdown highlighter, -[frequency analyzer](http://www.theologeek.ch/manuskript/2016/02/08/frequency-analyzer/), +[frequency analyzer](https://www.theologeek.ch/manuskript/2016/02/08/frequency-analyzer/), and automatic save in -[open and plain text file format](http://www.theologeek.ch/manuskript/2016/03/31/open-plain-text-file-format/). +[open and plain text file format](https://www.theologeek.ch/manuskript/2016/03/31/open-plain-text-file-format/). ## Download -[Download](http://www.theologeek.ch/manuskript/download) and install Manuskript today. +[Download](https://www.theologeek.ch/manuskript/download) and install Manuskript today. ## HowTo's -See the [Wiki](http://github.com/olivierkes/manuskript/wiki) for more +See the [Wiki](https://github.com/olivierkes/manuskript/wiki) for more detailed instructions on how to install and use Manuskript. ## Contribute @@ -56,7 +58,7 @@ You can help improve Manuskript by reporting and [translating to other languages](https://github.com/olivierkes/manuskript/wiki/Translate-Manuskript). See also -[Manuskript Contribute page](http://www.theologeek.ch/manuskript/contribute/). +[Manuskript Contribute page](https://www.theologeek.ch/manuskript/contribute/). Manuskript is written in Python3 and PyQt5. diff --git a/i18n/manuskript.pro b/i18n/manuskript.pro index 6b8e3a6..51e917e 100644 --- a/i18n/manuskript.pro +++ b/i18n/manuskript.pro @@ -89,17 +89,26 @@ SOURCES += ../manuskript/ui/views/outlineBasics.py SOURCES += ../manuskript/ui/views/outlineDelegates.py SOURCES += ../manuskript/ui/collapsibleDockWidgets.py +TRANSLATIONS += manuskript_ar_SA.ts TRANSLATIONS += manuskript_de.ts +TRANSLATIONS += manuskript_en_GB.ts TRANSLATIONS += manuskript_es.ts +TRANSLATIONS += manuskript_fa.ts TRANSLATIONS += manuskript_fr.ts TRANSLATIONS += manuskript_hu.ts TRANSLATIONS += manuskript_id.ts TRANSLATIONS += manuskript_it.ts +TRANSLATIONS += manuskript_ja.ts +TRANSLATIONS += manuskript_ko.ts TRANSLATIONS += manuskript_nb_NO.ts TRANSLATIONS += manuskript_nl.ts TRANSLATIONS += manuskript_pl.ts TRANSLATIONS += manuskript_pt_BR.ts TRANSLATIONS += manuskript_pt_PT.ts +TRANSLATIONS += manuskript_ro.ts TRANSLATIONS += manuskript_ru.ts TRANSLATIONS += manuskript_sv.ts +TRANSLATIONS += manuskript_tr.ts +TRANSLATIONS += manuskript_uk.ts TRANSLATIONS += manuskript_zh_CN.ts +TRANSLATIONS += manuskript_zh_HANT.ts diff --git a/i18n/manuskript_ar_SA.qm b/i18n/manuskript_ar_SA.qm new file mode 100644 index 0000000..841530e Binary files /dev/null and b/i18n/manuskript_ar_SA.qm differ diff --git a/i18n/manuskript_ar_SA.ts b/i18n/manuskript_ar_SA.ts new file mode 100644 index 0000000..3ad40ed --- /dev/null +++ b/i18n/manuskript_ar_SA.ts @@ -0,0 +1,4007 @@ + + + + + ExportersManager + + + Manage Exporters + تحكم بالمُصدرات + + + + Manuskript + مانيوسكريبت + + + + Description + وصف + + + + Offers export to + يقدم تصدير إلى + + + + Status + الحالة + + + + Status: + الحالة: + + + + Version: + النسخة: + + + + Path: + المسار: + + + + ... + ... + + + + {HelpText} + {HelpText} + + + + FrequencyAnalyzer + + + Frequency Analyzer + محلل التكرار + + + + Word frequency + تكرار الكلمة + + + + Settings + الإعدادات + + + + Minimum size: + الحجم الأدنى: + + + + Exclude words (comma separated): + استبعاد كلمات (مفصولة بفاصلة): + + + + Analyze + تحليل + + + + Phrase frequency + تكرار العبارة + + + + Number of words: from + عدد الكلمات: من + + + + to + إلى + + + + MDEditCompleter + + + Insert reference + إدراج مرجع + + + + MainWindow + + + General + عام + + + + Title + عنوان + + + + Subtitle + عنوان فرعي + + + + Series + سلسلة + + + + Volume + مجلد + + + + 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 + معلومات بسيطة + + + + 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 + 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 + محلل التكرار + + + + Book information + معلومات الكتاب + + + + &About + حول + + + + About Manuskript + حول مانيوسكربت + + + + Manuskript + مانيوسكريبت + + + + Project {} saved. + * {} لم يتم إيجاده في ملف المشروع. + + + + WARNING: Project {} not saved. + تنبيه: المشروع {} لم يتم حفظه. + + + + Project {} loaded. + المشروع {} تم تحميله. + + + + 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 + وجهة نظر (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. + النسخ 5.11 و 5.12 من PyQt / Qt معروفة بالتسبب بمشاكل قد تجعلك تفقد بيانات. + + + + PyQt {} and Qt {} are in use. + PyQt {} و Qt {} هي مايتم استخدامه. + + + + Proceed with import at your own risk + استمر بالإستيراد على مسؤوليتك + + + + Allow POV + + + + + Search + + + + + 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 + + + + + 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. + + + + + F3 + + + + + Shift+F3 + + + + + Situation + + + + + Status + الحالة + + + + Search + + + No results found + + + + + Settings + + + Settings + الإعدادات + + + + General + عام + + + + Revisions + المراجعات + + + + Views + العرض + + + + Labels + العناوين + + + + Status + الحالة + + + + Fullscreen + ملأ الشاشة + + + + General settings + اعدادات عامة + + + + Application settings + اعدادات التطبيق + + + + 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 + مرجعات لكل دقيقة لآخر عشر دقائق + + + + 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 + وجهة نظر (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 + + + + + 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 + + + About Manuskript + حول مانيوسكربت + + + + Manuskript + مانيوسكريبت + + + + aboutDialog + + + Version + + + + + Software Versions in Use: + + + + + abstractModel + + + Title + + + + + POV + وجهة نظر (POV) + + + + Label + عنوان + + + + Status + الحالة + + + + Compile + معالجة + + + + Word count + عدد الكلمات + + + + Goal + الهدف + + + + basicItemView + + + Form + + + + + POV: + + + + + Goal: + + + + + Word count + عدد الكلمات + + + + One line summary + + + + + Few sentences summary: + + + + + characterModel + + + Name + الاسم + + + + Value + + + + + New character + + + + + Description + وصف + + + + characterTreeView + + + Main + + + + + Secondary + + + + + Minor + + + + + cheatSheet + + + Form + + + + + Filter (type the name of anything in your project) + + + + + Minor + + + + + Secondary + + + + + Main + + + + + Characters + الشخصيات + + + + Texts + + + + + Plots + الحبكات + + + + World + العالم + + + + cmbOutlineCharacterChoser + + + None + + + + + Main + + + + + Secondary + + + + + Minor + + + + + Various + + + + + cmbOutlineLabelChoser + + + Various + + + + + cmbOutlineStatusChoser + + + Various + + + + + collapsibleDockWidgets + + + Dock Widgets Toolbar + + + + + completer + + + Form + + + + + corkDelegate + + + One line summary + + + + + Full summary + ملخص كامل + + + + editorWidget_ui + + + Form + + + + + exporter + + + Export + + + + + Export to: + + + + + Manage exporters + + + + + Preview + + + + + Settings + الإعدادات + + + + exporterDialog + + + {} (not implemented yet) + + + + + exporterSettings + + + Form + + + + + Content + + + + + Decide here what will be included in the final export. + + + + + Type + + + + + Title + + + + + Text + + + + + I need more granularity + + + + + Fi&lters + + + + + <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> + + + + + Ignore compile status (include all items) + + + + + Subitems of: + + + + + Labels + + + + + Status + الحالة + + + + Separations + + + + + Between folders: + + + + + Empty line + + + + + Custom + + + + + Between texts: + + + + + Between folder and text: + + + + + Between text and folder: + + + + + Transformations + + + + + Typographic replacements: + + + + + Replace double quotes (") with: + + + + + Replace single quotes (') with: + + + + + Remove multiple spaces + + + + + Custom replacements: + + + + + Enabled + + + + + Replace + + + + + With + + + + + RegExp + + + + + If checked, uses regular expression for replacement. If unchecked, replaced as plain text. + + + + + Preview + + + + + Font + الخط + + + + Font: + الخط: + + + + Font size: + حجم الخط: + + + + Folder + + + + + {}Level {} folder + + + + + {}Level {} text + + + + + Replace ... with … + + + + + Replace --- with — + + + + + exportersManager + + + Installed + + + + + Custom + + + + + Not found + + + + + {} not found. Install it, or set path manually. + + + + + <b>Status:</b> uninstalled. + + + + + <b>Requires:</b> + + + + + Set {} executable path. + + + + + frequencyAnalyzer + + + Phrases + + + + + Frequency + + + + + Word + + + + + 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 + + + + + generalSettings + + + General + عام + + + + Split scenes at: + + + + + \n---\n + + + + + Trim long titles (> 32 chars) + + + + + Import under: + + + + + Import in a top-level folder + + + + + helpLabel + + + If you don't wanna see me, you can hide me in Help menu. + + + + + importer + + + Import + + + + + Format: + + + + + Choose file + + + + + Clear file + + + + + Preview + + + + + Settings + الإعدادات + + + + lineEditView + + + Various + + + + + locker + + + Form + + + + + Lock screen: + + + + + Word target + + + + + Time target + + + + + words + + + + + minutes + + + + + Lock ! + + + + + ~{} h. + + + + + ~{} mn. + + + + + {}:{} + + + + + {} s. + + + + + {} remaining + + + + + {} words remaining + + + + + mainEditor + + + Form + + + + + Text + + + + + Index cards + + + + + Outline + + + + + F11 + + + + + Go to parent item + + + + + Alt+Up + + + + + Root + + + + + {} words + + + + + ({} chars) {} words / {} + + + + + {} words / {} + + + + + {} chars + + + + + {} chars + + + + + markdownSettings + + + Markdown + + + + + metadataView + + + Form + + + + + Properties + + + + + Summary + الملخص + + + + One line summary + + + + + Full summary + ملخص كامل + + + + Notes / References + + + + + Revisions + المراجعات + + + + myPanel + + + Auto-hide + + + + + outlineCharacterDelegate + + + None + + + + + Main + + + + + Secondary + + + + + Minor + + + + + pandocSettings + + + General + عام + + + + Table of Content + + + + + Custom settings for {} + + + + + persosProxyModel + + + Main + + + + + Secondary + + + + + Minors + + + + + plotDelegate + + + General + عام + + + + Promise + + + + + Problem + + + + + Progress + + + + + Resolution + + + + + Try / Fail + + + + + No and + + + + + Yes but + + + + + 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 + + + + + Tests + + + + + Approach + + + + + Abyss + + + + + Reward / Revelation + + + + + Transformation + + + + + Atonement + + + + + Return + + + + + plotModel + + + Name + الاسم + + + + Meta + + + + + New step + + + + + Main + + + + + Secondary + + + + + Minor + + + + + New plot + + + + + plotTreeView + + + Main + + + + + Secondary + + + + + Minor + + + + + **Plot:** {} + + + + + plotsProxyModel + + + Main + + + + + Secondary + + + + + Minors + + + + + propertiesView + + + Form + + + + + POV + وجهة نظر (POV) + + + + Status + الحالة + + + + Label + عنوان + + + + Compile + معالجة + + + + Goal + الهدف + + + + Word count + عدد الكلمات + + + + revisions + + + Form + + + + + Options + + + + + Restore + + + + + Delete + حذف + + + + Show modifications + + + + + Show ancient version + + + + + Show spaces + + + + + Show modifications only + + + + + {} years ago + + + + + {} months ago + + + + + {} days ago + + + + + 1 day ago + + + + + {} hours ago + + + + + {} minutes ago + + + + + {} seconds ago + + + + + Line {}: + + + + + Clear all + + + + + search + + + Form + + + + + Search for... + + + + + 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: +{} + + + + + sldImportance + + + Form + + + + + TextLabel + + + + + Minor + + + + + Secondary + + + + + Main + + + + + splitDialog + + + + <p>Split selected item(s) at the given mark.</p> + + <p>If one of the selected item is a folder, it will be applied + recursively to <i>all</i> of it's children items.</p> + + <p>The split mark can contain following escape sequences: + <ul> + <li><b><code>\n</code></b>: line break</li> + <li><b><code>\t</code></b>: tab</li> + </ul> + </p> + + <p><b>Mark:</b></p> + + + + + + Split '{}' + + + + + Split items + + + + + storylineView + + + Form + + + + + Show Plots + + + + + Show Characters + + + + + tabSplitter + + + Open selected items in that view. + + + + + Split horizontally + + + + + Close split + + + + + Split vertically + + + + + textEditView + + + Various + + + + + textFormat + + + Form + + + + + CTRL+B + + + + + CTRL+I + + + + + CTRL+U + + + + + CTRL+P + + + + + CTRL+L + + + + + CTRL+E + + + + + CTRL+R + + + + + CTRL+J + + + + + treeView + + + Expand {} + + + + + Collapse {} + + + + + Expand All + + + + + Collapse All + + + + + welcome + + + Form + + + + + 1 + + + + + Templates + + + + + Empty + + + + + Novel + + + + + Novella + + + + + Short Story + + + + + Research paper + + + + + Demo projects + + + + + Add level + + + + + Add word count + + + + + Next time, automatically open last project + + + + + Open... + + + + + Recent + + + + + Create + + + + + 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 + + + + + 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_ca.qm b/i18n/manuskript_ca.qm new file mode 100644 index 0000000..0f38cb9 Binary files /dev/null and b/i18n/manuskript_ca.qm differ diff --git a/i18n/manuskript_ca.ts b/i18n/manuskript_ca.ts new file mode 100644 index 0000000..ef5a09b --- /dev/null +++ b/i18n/manuskript_ca.ts @@ -0,0 +1,4539 @@ + + + + + Export + + + Basic HTML output using the Python module 'markdown'. + Sortida HTML bàsica utilitzant el mòdul de Python 'markdown'. + + + + Python module 'markdown'. + Mòdul de Python 'markdown'. + + + + Markdown source + Font MarkDown + + + + HTML Source + Font HTML + + + + HTML Output + Sortida HTML + + + + Default exporter, provides basic formats used by other exporters. + Exporter per defecte, proveeix formats bàsics utilitzats per altres exporters. + + + + Preview with highlighter. + Previsualització amb subratllat. + + + + Plain text + Text plà + + + + A little known format modestly used. You know, web sites for example. + Un format poc conegut utilitzat modestament. Ja ho sabeu, per exemple, a llocs web. + + + + Needs LaTeX to be installed. + Necessita que LaTeX estigui instal·lat. + + + + Error + Error + + + + Standalone document (not just a fragment) + Document autònom (no només un fragment) + + + + Include a table of contents. + Inclou una taula de continguts. + + + + Number of sections level to include in TOC: + Nombre de nivells de secció a incloure al TOC: + + + + Typographically correct output + Sortida tipogràficament correcta + + + + Normalize the document (cleaner) + Normalitzar el document (mes clar) + + + + Specify the base level for headers: + Especifiqueu el nivell base per a les capçaleres: + + + + Use reference-style links instead of inline links + Utilitzeu enllaços d'estil de referència en lloc d'enllaços en línia + + + + Use ATX-style headers + Utilitza capçaleres del tipus ATX + + + + Self-contained HTML files, with no dependencies + Fitxers HTML autònoms, sense dependències + + + + Use <q> tags for quotes in HTML + Utilitza etiquetes <q> per a les cometes en HTML + + + + LaTeX engine used to produce the PDF. + Motor LaTeX utilitzat per produir el PDF. + + + + Paper size: + Mida del paper: + + + + Font size: + Mida de la font: + + + + Class: + Classe: + + + + Line spacing: + Espaiat de línia: + + + + Books that don't kill trees. + Llibres que no maten arbres. + + + + OpenDocument format. Used by LibreOffice for example. + Format OpenDocument. Utilitzat per LibreOffice, per exemple. + + + + Microsoft Office (.docx) document. + Document de Microsoft Office (.docx). + + + + reStructuredText is a lightweight markup language. + reStructuredText és un llenguatge de marcatge lleuger. + + + + Just like plain text, excepts adds markdown titles. + Presupposes that texts are formatted in markdown. + Igual que el text sense format, excepte afegeix títols de marcat. + Pressuposa que els textos estan formatats en 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>. + + + + + <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> + + + + + + 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. + + + + + Export to markdown, using pandoc. Allows more formatting options + than the basic manuskript exporter. + + + + + LaTeX is a word processor and document markup language used to create + beautiful documents. + + + + + The purpose of this format is to provide a way to exchange information + between outliners and Internet services that can be browsed or controlled + through an outliner. + + + + + Disable YAML metadata block. +Use that if you get YAML related error. + + + + + Convert to ePUB3 + Convertir a ePUB3 + + + + Could not process regular expression: +{} + No es pot processar la expressió regular: +{} + + + + Choose output file… + + + + + ExportersManager + + + Manage Exporters + + + + + Manuskript + Manuskript + + + + Description + Descripció + + + + Offers export to + + + + + Status + Estat + + + + Status: + Estat: + + + + Version: + Versió: + + + + Path: + Camí: + + + + ... + ... + + + + {HelpText} + {Textd'Ajuda} + + + + FrequencyAnalyzer + + + Frequency Analyzer + Analitzador de freqüència + + + + Word frequency + Freqüència de paraules + + + + Settings + Ajustos + + + + Minimum size: + Mida mínima: + + + + Exclude words (comma separated): + Exclou paraules (separades per comes): + + + + Analyze + Analitza + + + + Phrase frequency + Freqüència de la frase + + + + Number of words: from + + + + + to + a + + + + 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; + + + + + 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) + are added as scene.</p> + <p>Only text files are supported (not images, binary or others).</p> + + + + + 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 + then it will be imported in manuskript. One or the other + might give better result depending on your document. + <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> + <b>none</b>: no line wrap.<br> + <b>preserve</b>: tries to preserves line wrap from the + original document.</p> + + + + + Mind Map Import + + + + + This does not appear to be a valid Mind Map file. + + + + + Mind Map import + + + + + Import tip as: + + + + + Untitled + + + + + MDEditCompleter + + + Insert reference + + + + + MainWindow + + + General + + + + + Title + + + + + Subtitle + + + + + Series + + + + + Volume + + + + + 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 + + + + + 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 + + + + + Book information + + + + + &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 + Progrés + + + + Compile + Compilar + + + + Icon color + Color de la icona + + + + Text color + Color del text + + + + Background color + Color de fons + + + + Icon + Icona + + + + Text + Text + + + + Background + Fons + + + + Border + Vora + + + + Corner + Cantonada + + + + Add plot step + Afegeix un pas de trama + + + + &Import… + + + + + F7 + + + + + &Copy + &Copia + + + + Ctrl+C + Ctrl+C + + + + C&ut + + + + + Ctrl+X + Ctrl+X + + + + &Paste + &Enganxa + + + + Ctrl+V + Ctrl+V + + + + &Split… + + + + + Ctrl+Shift+K + Ctrl+Maj+K + + + + Sp&lit at cursor + + + + + Ctrl+K + Ctrl+K + + + + Ctrl+M + Ctrl+M + + + + Ctrl+D + Ctrl+D + + + + Del + Supr + + + + &Move Up + &Amunt + + + + Ctrl+Shift+Up + Ctrl+Maj+Amunt + + + + M&ove Down + + + + + Ctrl+Shift+Down + Ctrl+Maj+Avall + + + + Dupl&icate + + + + + &Delete + &Suprimir + + + + &Rename + + + + + F2 + F2 + + + + Organi&ze + + + + + M&erge + + + + + &Format + + + + + &Header + &Capçalera + + + + &Level 1 (setext) + &Nivell 1 (setext) + + + + Ctrl+Alt+1 + Ctrl+Alt+1 + + + + Level &2 + Nivell &2 + + + + Ctrl+Alt+2 + Ctrl+Alt+2 + + + + Level &1 (atx) + Nivell &1 (atx) + + + + Ctrl+1 + Ctrl+1 + + + + L&evel 2 + + + + + Ctrl+2 + Ctrl+2 + + + + Level &3 + Nivell &3 + + + + Ctrl+3 + Ctrl+3 + + + + Level &4 + Nivell &4 + + + + Ctrl+4 + Ctrl+4 + + + + Level &5 + Nivell &5 + + + + Ctrl+5 + Ctrl+5 + + + + Level &6 + Nivell &6 + + + + Ctrl+6 + Ctrl+6 + + + + &Bold + &Negreta + + + + Ctrl+B + Ctrl+B + + + + &Italic + &Cursiva + + + + Ctrl+I + Ctrl+I + + + + &Strike + + + + + &Verbatim + + + + + Su&perscript + + + + + Ctrl++ + Ctrl++ + + + + Subsc&ript + + + + + Ctrl+- + 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 + + + + + Settings + + + Settings + + + + + General + + + + + Revisions + + + + + Views + + + + + Labels + + + + + Status + + + + + Fullscreen + + + + + General settings + + + + + Application settings + + + + + 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> + + + + + SpellAction + + + Spelling Suggestions + + + + + &Add to dictionary + + + + + &Remove from custom dictionary + + + + + about + + + About Manuskript + + + + + Manuskript + + + + + aboutDialog + + + Version + + + + + Software Versions in Use: + + + + + abstractModel + + + Title + + + + + POV + + + + + Label + + + + + Status + + + + + Compile + + + + + Word count + + + + + Goal + + + + + basicItemView + + + Form + + + + + POV: + + + + + Goal: + + + + + Word count + + + + + One line summary + + + + + Few sentences summary: + + + + + characterModel + + + New character + + + + + Name + + + + + Value + + + + + characterTreeView + + + Main + + + + + Secondary + + + + + Minor + + + + + cheatSheet + + + Form + + + + + Filter (type the name of anything in your project) + + + + + Minor + + + + + Secondary + + + + + Main + + + + + Characters + + + + + Texts + + + + + Plots + + + + + World + + + + + cmbOutlineCharacterChoser + + + None + + + + + Main + + + + + Secondary + + + + + Minor + + + + + Various + + + + + cmbOutlineLabelChoser + + + Various + + + + + cmbOutlineStatusChoser + + + Various + + + + + collapsibleDockWidgets + + + Dock Widgets Toolbar + + + + + completer + + + Form + + + + + corkDelegate + + + One line summary + + + + + Full summary + + + + + editorWidget_ui + + + Form + + + + + exporter + + + Export + + + + + Export to: + + + + + Manage exporters + + + + + Preview + + + + + Settings + + + + + exporterDialog + + + {} (not implemented yet) + + + + + exporterSettings + + + Form + + + + + Content + + + + + Decide here what will be included in the final export. + + + + + Type + + + + + Title + + + + + Text + + + + + I need more granularity + + + + + Fi&lters + + + + + <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> + + + + + Ignore compile status (include all items) + + + + + Subitems of: + + + + + Labels + + + + + Status + + + + + Separations + + + + + Between folders: + + + + + Empty line + + + + + Custom + + + + + Between texts: + + + + + Between folder and text: + + + + + Between text and folder: + + + + + Transformations + + + + + Typographic replacements: + + + + + Replace double quotes (") with: + + + + + Replace single quotes (') with: + + + + + Remove multiple spaces + + + + + Custom replacements: + + + + + Enabled + + + + + Replace + + + + + With + + + + + RegExp + + + + + If checked, uses regular expression for replacement. If unchecked, replaced as plain text. + + + + + Preview + + + + + Font + + + + + Font: + + + + + Font size: + + + + + Folder + + + + + {}Level {} folder + + + + + {}Level {} text + + + + + Replace ... with … + + + + + Replace --- with — + + + + + exportersManager + + + Installed + + + + + Custom + + + + + Not found + + + + + {} not found. Install it, or set path manually. + + + + + <b>Status:</b> uninstalled. + + + + + <b>Requires:</b> + + + + + Set {} executable path. + + + + + frequencyAnalyzer + + + Phrases + + + + + Frequency + + + + + Word + + + + + 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 + + + + + generalSettings + + + General + + + + + Split scenes at: + + + + + \n---\n + + + + + Trim long titles (> 32 chars) + + + + + Import under: + + + + + Import in a top-level folder + + + + + helpLabel + + + If you don't wanna see me, you can hide me in Help menu. + + + + + importer + + + Import + + + + + Format: + + + + + Choose file + + + + + Clear file + + + + + Preview + + + + + Settings + + + + + lastAccessedDirectoryInfo + + + Last accessed directory "{}" loaded. + + + + + lineEditView + + + Various + + + + + locker + + + Form + + + + + Lock screen: + + + + + Word target + + + + + Time target + + + + + words + + + + + minutes + + + + + Lock ! + + + + + ~{} h. + + + + + ~{} mn. + + + + + {}:{} + + + + + {} s. + + + + + {} remaining + + + + + {} words remaining + + + + + mainEditor + + + Form + + + + + Text + + + + + Index cards + + + + + Outline + + + + + F11 + + + + + Go to parent item + + + + + Alt+Up + + + + + Root + + + + + {} words / {} + + + + + {} words + + + + + markdownSettings + + + Markdown + + + + + metadataView + + + Form + + + + + Properties + + + + + Summary + + + + + One line summary + + + + + Full summary + + + + + Notes / References + + + + + Revisions + + + + + myPanel + + + Auto-hide + + + + + outlineBasics + + + Set POV + + + + + None + + + + + Set Status + + + + + Set Label + + + + + New + + + + + Main + + + + + Secondary + + + + + Minor + + + + + Set Custom Icon + + + + + Restore to default + + + + + Root + + + + + Open {} items in new tabs + + + + + Open {} in a new tab + + + + + 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). + + + + + New &Folder + + + + + New &Text + + + + + &Copy + + + + + C&ut + + + + + &Paste + + + + + &Rename + + + + + &Delete + + + + + outlineCharacterDelegate + + + None + + + + + Main + + + + + Secondary + + + + + Minor + + + + + outlineItem + + + {} words / {} ({}) + + + + + {} words + + + + + pandocSettings + + + General + + + + + Table of Content + + + + + Custom settings for {} + + + + + persosProxyModel + + + Main + + + + + Secondary + + + + + Minors + + + + + plotDelegate + + + General + + + + + Promise + + + + + Problem + + + + + Progress + + + + + Resolution + + + + + Try / Fail + + + + + No and + + + + + Yes but + + + + + 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 + + + + + Tests + + + + + Approach + + + + + Abyss + + + + + Reward / Revelation + + + + + Transformation + + + + + Atonement + + + + + Return + + + + + plotModel + + + New plot + + + + + Name + + + + + Meta + + + + + New step + + + + + Main + + + + + Secondary + + + + + Minor + + + + + plotTreeView + + + Main + + + + + Secondary + + + + + Minor + + + + + **Plot:** {} + + + + + plotsProxyModel + + + Main + + + + + Secondary + + + + + Minors + + + + + propertiesView + + + Form + + + + + POV + + + + + Status + + + + + Label + + + + + Compile + + + + + Goal + + + + + Word count + + + + + references + + + Not a reference: {}. + + + + + Unknown reference: {}. + + + + + Path: + + + + + Stats: + + + + + POV: + + + + + Status: + + + + + Label: + + + + + Short summary: + + + + + Long summary: + + + + + Notes: + + + + + Basic info + + + + + Detailed info + + + + + POV of: + + + + + 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: + + + + + Motivation + + + + + Goal + + + + + Epiphany + + + + + Short summary + + + + + Longer summary + + + + + revisions + + + Form + + + + + Options + + + + + Restore + + + + + Delete + + + + + Show modifications + + + + + Show ancient version + + + + + Show spaces + + + + + Show modifications only + + + + + {} years ago + + + + + {} months ago + + + + + {} days ago + + + + + 1 day ago + + + + + {} hours ago + + + + + {} minutes ago + + + + + {} seconds ago + + + + + Line {}: + + + + + Clear all + + + + + search + + + Form + + + + + 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: +{} + + + + + sldImportance + + + Form + + + + + TextLabel + + + + + Minor + + + + + Secondary + + + + + Main + + + + + splitDialog + + + + <p>Split selected item(s) at the given mark.</p> + + <p>If one of the selected item is a folder, it will be applied + recursively to <i>all</i> of it's children items.</p> + + <p>The split mark can contain following escape sequences: + <ul> + <li><b><code>\n</code></b>: line break</li> + <li><b><code>\t</code></b>: tab</li> + </ul> + </p> + + <p><b>Mark:</b></p> + + + + + + Split '{}' + + + + + Split items + + + + + storylineView + + + Form + + + + + Show Plots + + + + + Show Characters + + + + + tabSplitter + + + Open selected items in that view. + + + + + Split horizontally + + + + + Close split + + + + + Split vertically + + + + + textEditView + + + Various + + + + + textFormat + + + Form + + + + + CTRL+B + + + + + CTRL+I + + + + + CTRL+U + + + + + CTRL+P + + + + + CTRL+L + + + + + CTRL+E + + + + + CTRL+R + + + + + CTRL+J + + + + + treeView + + + Expand {} + + + + + Collapse {} + + + + + Expand All + + + + + Collapse All + + + + + welcome + + + Form + + + + + 1 + + + + + Templates + + + + + Empty + + + + + Novel + + + + + Novella + + + + + Short Story + + + + + Research paper + + + + + Demo projects + + + + + Add level + + + + + Add word count + + + + + Next time, automatically open last project + + + + + Open... + + + + + Recent + + + + + Create + + + + + 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 + + + + + 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_ca@valencia.qm b/i18n/manuskript_ca@valencia.qm new file mode 100644 index 0000000..cc7a25e Binary files /dev/null and b/i18n/manuskript_ca@valencia.qm differ diff --git a/i18n/manuskript_ca@valencia.ts b/i18n/manuskript_ca@valencia.ts new file mode 100644 index 0000000..5453e63 --- /dev/null +++ b/i18n/manuskript_ca@valencia.ts @@ -0,0 +1,4537 @@ + + + + + Export + + + Basic HTML output using the Python module 'markdown'. + Eixida HTML bàsica emprant el mòdul de Python 'markdown'. + + + + Python module 'markdown'. + Mòdul de Python 'markdown'. + + + + Markdown source + Font Markdown + + + + HTML Source + Font HTML + + + + HTML Output + Eixida HTML + + + + Default exporter, provides basic formats used by other exporters. + Exportador per defecte, proporciona formats bàsics emprats per altres exportadors. + + + + Preview with highlighter. + + + + + Plain text + + + + + A little known format modestly used. You know, web sites for example. + + + + + Needs LaTeX to be installed. + + + + + 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: + + + + + Books that don't kill trees. + + + + + OpenDocument format. Used by LibreOffice for example. + + + + + Microsoft Office (.docx) document. + + + + + reStructuredText is a lightweight markup language. + + + + + Just like plain text, excepts adds markdown titles. + Presupposes that texts are formatted 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>. + + + + + <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> + + + + + + 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. + + + + + Export to markdown, using pandoc. Allows more formatting options + than the basic manuskript exporter. + + + + + LaTeX is a word processor and document markup language used to create + beautiful documents. + + + + + The purpose of this format is to provide a way to exchange information + between outliners and Internet services that can be browsed or controlled + through an outliner. + + + + + Disable YAML metadata block. +Use that if you get YAML related error. + + + + + Convert to ePUB3 + + + + + Could not process regular expression: +{} + + + + + Choose output file… + + + + + ExportersManager + + + Manage Exporters + + + + + Manuskript + + + + + Description + + + + + Offers export to + + + + + Status + + + + + Status: + + + + + Version: + + + + + Path: + + + + + ... + + + + + {HelpText} + + + + + FrequencyAnalyzer + + + Frequency Analyzer + + + + + Word frequency + + + + + Settings + + + + + Minimum size: + + + + + Exclude words (comma separated): + + + + + Analyze + + + + + Phrase frequency + + + + + Number of words: from + + + + + to + + + + + 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) + are added as scene.</p> + <p>Only text files are supported (not images, binary or others).</p> + + + + + 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 + then it will be imported in manuskript. One or the other + might give better result depending on your document. + <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> + <b>none</b>: no line wrap.<br> + <b>preserve</b>: tries to preserves line wrap from the + original document.</p> + + + + + Mind Map Import + + + + + This does not appear to be a valid Mind Map file. + + + + + Mind Map import + + + + + Import tip as: + + + + + Untitled + + + + + MDEditCompleter + + + Insert reference + + + + + MainWindow + + + General + + + + + Title + + + + + Subtitle + + + + + Series + + + + + Volume + + + + + 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 + + + + + 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 + + + + + Book information + + + + + &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 + + + + + Settings + + + Settings + + + + + General + + + + + Revisions + + + + + Views + + + + + Labels + + + + + Status + + + + + Fullscreen + + + + + General settings + + + + + Application settings + + + + + 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> + + + + + SpellAction + + + Spelling Suggestions + + + + + &Add to dictionary + + + + + &Remove from custom dictionary + + + + + about + + + About Manuskript + + + + + Manuskript + + + + + aboutDialog + + + Version + + + + + Software Versions in Use: + + + + + abstractModel + + + Title + + + + + POV + + + + + Label + + + + + Status + + + + + Compile + + + + + Word count + + + + + Goal + + + + + basicItemView + + + Form + + + + + POV: + + + + + Goal: + + + + + Word count + + + + + One line summary + + + + + Few sentences summary: + + + + + characterModel + + + New character + + + + + Name + + + + + Value + + + + + characterTreeView + + + Main + + + + + Secondary + + + + + Minor + + + + + cheatSheet + + + Form + + + + + Filter (type the name of anything in your project) + + + + + Minor + + + + + Secondary + + + + + Main + + + + + Characters + + + + + Texts + + + + + Plots + + + + + World + + + + + cmbOutlineCharacterChoser + + + None + + + + + Main + + + + + Secondary + + + + + Minor + + + + + Various + + + + + cmbOutlineLabelChoser + + + Various + + + + + cmbOutlineStatusChoser + + + Various + + + + + collapsibleDockWidgets + + + Dock Widgets Toolbar + + + + + completer + + + Form + + + + + corkDelegate + + + One line summary + + + + + Full summary + + + + + editorWidget_ui + + + Form + + + + + exporter + + + Export + + + + + Export to: + + + + + Manage exporters + + + + + Preview + + + + + Settings + + + + + exporterDialog + + + {} (not implemented yet) + + + + + exporterSettings + + + Form + + + + + Content + + + + + Decide here what will be included in the final export. + + + + + Type + + + + + Title + + + + + Text + + + + + I need more granularity + + + + + Fi&lters + + + + + <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> + + + + + Ignore compile status (include all items) + + + + + Subitems of: + + + + + Labels + + + + + Status + + + + + Separations + + + + + Between folders: + + + + + Empty line + + + + + Custom + + + + + Between texts: + + + + + Between folder and text: + + + + + Between text and folder: + + + + + Transformations + + + + + Typographic replacements: + + + + + Replace double quotes (") with: + + + + + Replace single quotes (') with: + + + + + Remove multiple spaces + + + + + Custom replacements: + + + + + Enabled + + + + + Replace + + + + + With + + + + + RegExp + + + + + If checked, uses regular expression for replacement. If unchecked, replaced as plain text. + + + + + Preview + + + + + Font + + + + + Font: + + + + + Font size: + + + + + Folder + + + + + {}Level {} folder + + + + + {}Level {} text + + + + + Replace ... with … + + + + + Replace --- with — + + + + + exportersManager + + + Installed + + + + + Custom + + + + + Not found + + + + + {} not found. Install it, or set path manually. + + + + + <b>Status:</b> uninstalled. + + + + + <b>Requires:</b> + + + + + Set {} executable path. + + + + + frequencyAnalyzer + + + Phrases + + + + + Frequency + + + + + Word + + + + + 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 + + + + + generalSettings + + + General + + + + + Split scenes at: + + + + + \n---\n + + + + + Trim long titles (> 32 chars) + + + + + Import under: + + + + + Import in a top-level folder + + + + + helpLabel + + + If you don't wanna see me, you can hide me in Help menu. + + + + + importer + + + Import + + + + + Format: + + + + + Choose file + + + + + Clear file + + + + + Preview + + + + + Settings + + + + + lastAccessedDirectoryInfo + + + Last accessed directory "{}" loaded. + + + + + lineEditView + + + Various + + + + + locker + + + Form + + + + + Lock screen: + + + + + Word target + + + + + Time target + + + + + words + + + + + minutes + + + + + Lock ! + + + + + ~{} h. + + + + + ~{} mn. + + + + + {}:{} + + + + + {} s. + + + + + {} remaining + + + + + {} words remaining + + + + + mainEditor + + + Form + + + + + Text + + + + + Index cards + + + + + Outline + + + + + F11 + + + + + Go to parent item + + + + + Alt+Up + + + + + Root + + + + + {} words / {} + + + + + {} words + + + + + markdownSettings + + + Markdown + + + + + metadataView + + + Form + + + + + Properties + + + + + Summary + + + + + One line summary + + + + + Full summary + + + + + Notes / References + + + + + Revisions + + + + + myPanel + + + Auto-hide + + + + + outlineBasics + + + Set POV + + + + + None + + + + + Set Status + + + + + Set Label + + + + + New + + + + + Main + + + + + Secondary + + + + + Minor + + + + + Set Custom Icon + + + + + Restore to default + + + + + Root + + + + + Open {} items in new tabs + + + + + Open {} in a new tab + + + + + 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). + + + + + New &Folder + + + + + New &Text + + + + + &Copy + + + + + C&ut + + + + + &Paste + + + + + &Rename + + + + + &Delete + + + + + outlineCharacterDelegate + + + None + + + + + Main + + + + + Secondary + + + + + Minor + + + + + outlineItem + + + {} words / {} ({}) + + + + + {} words + + + + + pandocSettings + + + General + + + + + Table of Content + + + + + Custom settings for {} + + + + + persosProxyModel + + + Main + + + + + Secondary + + + + + Minors + + + + + plotDelegate + + + General + + + + + Promise + + + + + Problem + + + + + Progress + + + + + Resolution + + + + + Try / Fail + + + + + No and + + + + + Yes but + + + + + 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 + + + + + Tests + + + + + Approach + + + + + Abyss + + + + + Reward / Revelation + + + + + Transformation + + + + + Atonement + + + + + Return + + + + + plotModel + + + New plot + + + + + Name + + + + + Meta + + + + + New step + + + + + Main + + + + + Secondary + + + + + Minor + + + + + plotTreeView + + + Main + + + + + Secondary + + + + + Minor + + + + + **Plot:** {} + + + + + plotsProxyModel + + + Main + + + + + Secondary + + + + + Minors + + + + + propertiesView + + + Form + + + + + POV + + + + + Status + + + + + Label + + + + + Compile + + + + + Goal + + + + + Word count + + + + + references + + + Not a reference: {}. + + + + + Unknown reference: {}. + + + + + Path: + + + + + Stats: + + + + + POV: + + + + + Status: + + + + + Label: + + + + + Short summary: + + + + + Long summary: + + + + + Notes: + + + + + Basic info + + + + + Detailed info + + + + + POV of: + + + + + 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: + + + + + Motivation + + + + + Goal + + + + + Epiphany + + + + + Short summary + + + + + Longer summary + + + + + revisions + + + Form + + + + + Options + + + + + Restore + + + + + Delete + + + + + Show modifications + + + + + Show ancient version + + + + + Show spaces + + + + + Show modifications only + + + + + {} years ago + + + + + {} months ago + + + + + {} days ago + + + + + 1 day ago + + + + + {} hours ago + + + + + {} minutes ago + + + + + {} seconds ago + + + + + Line {}: + + + + + Clear all + + + + + search + + + Form + + + + + 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: +{} + + + + + sldImportance + + + Form + + + + + TextLabel + + + + + Minor + + + + + Secondary + + + + + Main + + + + + splitDialog + + + + <p>Split selected item(s) at the given mark.</p> + + <p>If one of the selected item is a folder, it will be applied + recursively to <i>all</i> of it's children items.</p> + + <p>The split mark can contain following escape sequences: + <ul> + <li><b><code>\n</code></b>: line break</li> + <li><b><code>\t</code></b>: tab</li> + </ul> + </p> + + <p><b>Mark:</b></p> + + + + + + Split '{}' + + + + + Split items + + + + + storylineView + + + Form + + + + + Show Plots + + + + + Show Characters + + + + + tabSplitter + + + Open selected items in that view. + + + + + Split horizontally + + + + + Close split + + + + + Split vertically + + + + + textEditView + + + Various + + + + + textFormat + + + Form + + + + + CTRL+B + + + + + CTRL+I + + + + + CTRL+U + + + + + CTRL+P + + + + + CTRL+L + + + + + CTRL+E + + + + + CTRL+R + + + + + CTRL+J + + + + + treeView + + + Expand {} + + + + + Collapse {} + + + + + Expand All + + + + + Collapse All + + + + + welcome + + + Form + + + + + 1 + + + + + Templates + + + + + Empty + + + + + Novel + + + + + Novella + + + + + Short Story + + + + + Research paper + + + + + Demo projects + + + + + Add level + + + + + Add word count + + + + + Next time, automatically open last project + + + + + Open... + + + + + Recent + + + + + Create + + + + + 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 + + + + + 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_da.qm b/i18n/manuskript_da.qm new file mode 100644 index 0000000..3223bc7 Binary files /dev/null and b/i18n/manuskript_da.qm differ diff --git a/i18n/manuskript_da.ts b/i18n/manuskript_da.ts new file mode 100644 index 0000000..66afc4b --- /dev/null +++ b/i18n/manuskript_da.ts @@ -0,0 +1,4652 @@ + + + + + Export + + + Basic HTML output using the Python module 'markdown'. + Grundlæggende HTML-output ved hjælp af Python-modulet 'markdown'. + + + + Python module 'markdown'. + Python modul 'markdown'. + + + + Markdown source + Markdown kilde + + + + HTML Source + HTML kilde + + + + HTML Output + HTML-output + + + + Default exporter, provides basic formats used by other exporters. + Standardeksportør, giver grundlæggende formater, der bruges af andre eksportører. + + + + Preview with highlighter. + Forhåndsvisning med highlighter. + + + + Plain text + Simpel tekst + + + + A little known format modestly used. You know, web sites for example. + Et mindre kendt format, der sparsomt bruges. Du ved, hjemmesider for eksempel. + + + + Needs LaTeX to be installed. + + + + + Error + Fejl + + + + Standalone document (not just a fragment) + Enkeltstående dokument (ikke bare et brudstykke) + + + + Include a table of contents. + Indsæt en indholdsfortegnelse. + + + + Number of sections level to include in TOC: + Antal afsnit, der skal med i indholdsfortegnelsen. + + + + Typographically correct output + Typografisk korrekt output + + + + Normalize the document (cleaner) + + + + + Specify the base level for headers: + Fastlæg grundniveauet for overskrifter: + + + + Use reference-style links instead of inline links + Brug referencestil-links i stedet for inline-links + + + + Use ATX-style headers + Brug ATX-overskrifter + + + + Self-contained HTML files, with no dependencies + Selvstændige HTML-filer, uden afhængigheder + + + + Use <q> tags for quotes in HTML + Brug <q> tags til citater i HTML + + + + LaTeX engine used to produce the PDF. + LaTeX-maskine, som bruges til at lave PDFen. + + + + Paper size: + Papirformat: + + + + Font size: + Skriftstørrelse: + + + + Class: + Klasse: + + + + Line spacing: + Linjeafstand: + + + + Books that don't kill trees. + Bøger, der ikke slår træer ihjel. + + + + OpenDocument format. Used by LibreOffice for example. + OpenDocument format. Bruges af LibreOffice, for eksempel. + + + + Microsoft Office (.docx) document. + Microsoft Office-dokument (.docx). + + + + reStructuredText is a lightweight markup language. + reStructuredText er et letvægts-markupsprog. + + + + Just like plain text, excepts adds markdown titles. + Presupposes that texts are formatted in markdown. + Ligesom almindelig tekst, tilføjer uddrag markdown-titler. + Antager at teksten er markdown-formateret. + + + + 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>. + Den nemmeste exportering til almindelig tekst. Tillader dig at bruge din egen markup, som Manuskript +ikke allerede kender, 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> + + <p>En universal dokumentkonverter. Kan bruges til at konvertere Markdown til en bred vifte af andre +formater.</p> +<p>Hjemmeside: <a href="http://www.pandoc.org">http://pandoc.org/</a></p> + + + + + 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. + En valid LaTeX installation. Pandoc forslag kan findes på: +<a href="https://pandoc.org/installing.html">pandoc.org/installing.html</a>. Hvis du vil have Unicode-understøttelse, har du brug for XeLaTeX. + + + + Export to markdown, using pandoc. Allows more formatting options + than the basic manuskript exporter. + Eksportér til markdown ved hjælp af pandoc. Tillader flere formateringsmuligheder +end basis-eksporteringen. + + + + LaTeX is a word processor and document markup language used to create + beautiful documents. + LaTeX er en tekstbehandler og et markupsprog, der bruges til at lave +smukke dokumenter. + + + + The purpose of this format is to provide a way to exchange information + between outliners and Internet services that can be browsed or controlled + through an outliner. + Formålet med dette format er, at give en måde hvorpå information kan udveksles +mellem dispositionsredaktører og internettjenester, der kan gennemses og styres +via en dispositionsredaktør. + + + + Disable YAML metadata block. +Use that if you get YAML related error. + Deaktivér YAML-metadatablok. +Brug dette, hvis du får en YAML-relateret fejlmelding. + + + + Convert to ePUB3 + Konvertér til ePUB3 + + + + Could not process regular expression: +{} + Kunne ikke behandle regulært udtryk: +{} + + + + Choose output file… + Vælg fil til udskrivning + + + + ExportersManager + + + Manage Exporters + Administrér eksportører + + + + Manuskript + Manuskript + + + + Description + Beskrivelse + + + + Offers export to + Eksporterer til + + + + Status + Status + + + + Status: + Status: + + + + Version: + Version: + + + + Path: + Sti: + + + + ... + + + + + {HelpText} + {Hjælpetekst} + + + + FrequencyAnalyzer + + + Frequency Analyzer + Frekvensanalyse + + + + Word frequency + Ordfrekvens + + + + Settings + Indstillinger + + + + Minimum size: + Minimumstørrelse: + + + + Exclude words (comma separated): + Ekskludér ord (kommasepareret): + + + + Analyze + Analysér + + + + Phrase frequency + Frasefrekvens + + + + Number of words: from + Antal ord: fra + + + + to + til + + + + 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; + <b>Info:</b> En meget simpel +parser, der løber gennem et markdown dokument og +laver elementer for hver titel.<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) + are added as scene.</p> + <p>Only text files are supported (not images, binary or others).</p> + + + + + 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 + then it will be imported in manuskript. One or the other + might give better result depending on your document. + <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> + <b>none</b>: no line wrap.<br> + <b>preserve</b>: tries to preserves line wrap from the + original document.</p> + + + + + Mind Map Import + + + + + This does not appear to be a valid Mind Map file. + + + + + Mind Map import + + + + + Import tip as: + + + + + Untitled + + + + + MDEditCompleter + + + Insert reference + + + + + MainWindow + + + General + + + + + Title + + + + + Subtitle + + + + + Series + + + + + Volume + + + + + 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 + + + + + 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 + + + + + Book information + + + + + &About + + + + + About Manuskript + + + + + Manuskript + + + + + Project {} saved. + + + + + WARNING: Project {} not saved. + + + + + Project {} loaded. + + + + + 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 + + + + + &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. + + + + + F3 + + + + + Shift+F3 + + + + + Situation + + + + + Status + + + + + Search + + + No results found + + + + + Settings + + + Settings + + + + + General + + + + + Revisions + + + + + Views + + + + + Labels + + + + + Status + + + + + Fullscreen + + + + + General settings + + + + + Application settings + + + + + 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 + + + About Manuskript + + + + + Manuskript + + + + + aboutDialog + + + Version + + + + + Software Versions in Use: + + + + + abstractModel + + + Title + + + + + POV + + + + + Label + + + + + Status + + + + + Compile + + + + + Word count + + + + + Goal + + + + + basicItemView + + + Form + + + + + POV: + + + + + Goal: + + + + + Word count + + + + + One line summary + + + + + Few sentences summary: + + + + + characterModel + + + Name + + + + + Value + + + + + characterTreeView + + + Main + + + + + Secondary + + + + + Minor + + + + + cheatSheet + + + Form + + + + + Filter (type the name of anything in your project) + + + + + Minor + + + + + Secondary + + + + + Main + + + + + Characters + + + + + Texts + + + + + Plots + + + + + World + + + + + cmbOutlineCharacterChoser + + + None + + + + + Main + + + + + Secondary + + + + + Minor + + + + + Various + + + + + cmbOutlineLabelChoser + + + Various + + + + + cmbOutlineStatusChoser + + + Various + + + + + collapsibleDockWidgets + + + Dock Widgets Toolbar + + + + + completer + + + Form + + + + + corkDelegate + + + One line summary + + + + + Full summary + + + + + editorWidget_ui + + + Form + + + + + exporter + + + Export + + + + + Export to: + + + + + Manage exporters + + + + + Preview + + + + + Settings + + + + + exporterDialog + + + {} (not implemented yet) + + + + + exporterSettings + + + Form + + + + + Content + + + + + Decide here what will be included in the final export. + + + + + Type + + + + + Title + + + + + Text + + + + + I need more granularity + + + + + Fi&lters + + + + + <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> + + + + + Ignore compile status (include all items) + + + + + Subitems of: + + + + + Labels + + + + + Status + + + + + Separations + + + + + Between folders: + + + + + Empty line + + + + + Custom + + + + + Between texts: + + + + + Between folder and text: + + + + + Between text and folder: + + + + + Transformations + + + + + Typographic replacements: + + + + + Replace double quotes (") with: + + + + + Replace single quotes (') with: + + + + + Remove multiple spaces + + + + + Custom replacements: + + + + + Enabled + + + + + Replace + + + + + With + + + + + RegExp + + + + + If checked, uses regular expression for replacement. If unchecked, replaced as plain text. + + + + + Preview + + + + + Font + + + + + Font: + + + + + Font size: + + + + + Folder + + + + + {}Level {} folder + + + + + {}Level {} text + + + + + Replace ... with … + + + + + Replace --- with — + + + + + exportersManager + + + Installed + + + + + Custom + + + + + Not found + + + + + {} not found. Install it, or set path manually. + + + + + <b>Status:</b> uninstalled. + + + + + <b>Requires:</b> + + + + + Set {} executable path. + + + + + frequencyAnalyzer + + + Phrases + + + + + Frequency + + + + + Word + + + + + 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 + + + + + generalSettings + + + General + + + + + Split scenes at: + + + + + \n---\n + + + + + Trim long titles (> 32 chars) + + + + + Import under: + + + + + Import in a top-level folder + + + + + helpLabel + + + If you don't wanna see me, you can hide me in Help menu. + + + + + importer + + + Import + + + + + Format: + + + + + Choose file + + + + + Clear file + + + + + Preview + + + + + Settings + + + + + lineEditView + + + Various + + + + + locker + + + Form + + + + + Lock screen: + + + + + Word target + + + + + Time target + + + + + words + + + + + minutes + + + + + Lock ! + + + + + ~{} h. + + + + + ~{} mn. + + + + + {}:{} + + + + + {} s. + + + + + {} remaining + + + + + {} words remaining + + + + + mainEditor + + + Form + + + + + Text + + + + + Index cards + + + + + Outline + + + + + F11 + + + + + Go to parent item + + + + + Alt+Up + + + + + Root + + + + + {} words + + + + + ({} chars) {} words / {} + + + + + {} words / {} + + + + + {} chars + + + + + {} chars + + + + + markdownSettings + + + Markdown + + + + + metadataView + + + Form + + + + + Properties + + + + + Summary + + + + + One line summary + + + + + Full summary + + + + + Notes / References + + + + + Revisions + + + + + myPanel + + + Auto-hide + + + + + outlineBasics + + + Set POV + + + + + None + + + + + Set Status + + + + + Set Label + + + + + New + + + + + Main + + + + + Secondary + + + + + Minor + + + + + Set Custom Icon + + + + + Restore to default + + + + + Root + + + + + Open {} items in new tabs + + + + + Open {} in a new tab + + + + + About to remove + + + + + Select at least two items. Folders are ignored. + + + + + All items must be on the same level (share the same parent). + + + + + New &Folder + + + + + New &Text + + + + + &Copy + + + + + C&ut + + + + + &Paste + + + + + &Rename + + + + + &Delete + + + + + You're about to delete {} item(s). + + + + + Are you sure? + + + + + outlineCharacterDelegate + + + None + + + + + Main + + + + + Secondary + + + + + Minor + + + + + outlineItem + + + {} words / {} ({}) + + + + + {} words + + + + + pandocSettings + + + General + + + + + Table of Content + + + + + Custom settings for {} + + + + + persosProxyModel + + + Main + + + + + Secondary + + + + + Minors + + + + + plotDelegate + + + General + + + + + Promise + + + + + Problem + + + + + Progress + + + + + Resolution + + + + + Try / Fail + + + + + No and + + + + + Yes but + + + + + 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 + + + + + Tests + + + + + Approach + + + + + Abyss + + + + + Reward / Revelation + + + + + Transformation + + + + + Atonement + + + + + Return + + + + + plotModel + + + Name + + + + + Meta + + + + + New step + + + + + Main + + + + + Secondary + + + + + Minor + + + + + plotTreeView + + + Main + + + + + Secondary + + + + + Minor + + + + + **Plot:** {} + + + + + plotsProxyModel + + + Main + + + + + Secondary + + + + + Minors + + + + + propertiesView + + + Form + + + + + POV + + + + + Status + + + + + Label + + + + + Compile + + + + + Goal + + + + + Word count + + + + + references + + + Not a reference: {}. + + + + + Unknown reference: {}. + + + + + Path: + + + + + Stats: + + + + + POV: + + + + + Status: + + + + + Label: + + + + + Short summary: + + + + + Long summary: + + + + + Notes: + + + + + Basic info + + + + + Detailed info + + + + + POV of: + + + + + 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: + + + + + Motivation + + + + + Goal + + + + + Epiphany + + + + + Short summary + + + + + Longer summary + + + + + revisions + + + Form + + + + + Options + + + + + Restore + + + + + Delete + + + + + Show modifications + + + + + Show ancient version + + + + + Show spaces + + + + + Show modifications only + + + + + {} years ago + + + + + {} months ago + + + + + {} days ago + + + + + 1 day ago + + + + + {} hours ago + + + + + {} minutes ago + + + + + {} seconds ago + + + + + Line {}: + + + + + Clear all + + + + + search + + + Form + + + + + Search for... + + + + + 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: +{} + + + + + sldImportance + + + Form + + + + + TextLabel + + + + + Minor + + + + + Secondary + + + + + Main + + + + + splitDialog + + + + <p>Split selected item(s) at the given mark.</p> + + <p>If one of the selected item is a folder, it will be applied + recursively to <i>all</i> of it's children items.</p> + + <p>The split mark can contain following escape sequences: + <ul> + <li><b><code>\n</code></b>: line break</li> + <li><b><code>\t</code></b>: tab</li> + </ul> + </p> + + <p><b>Mark:</b></p> + + + + + + Split '{}' + + + + + Split items + + + + + storylineView + + + Form + + + + + Show Plots + + + + + Show Characters + + + + + tabSplitter + + + Open selected items in that view. + + + + + Split horizontally + + + + + Close split + + + + + Split vertically + + + + + textEditView + + + Various + + + + + textFormat + + + Form + + + + + CTRL+B + + + + + CTRL+I + + + + + CTRL+U + + + + + CTRL+P + + + + + CTRL+L + + + + + CTRL+E + + + + + CTRL+R + + + + + CTRL+J + + + + + treeView + + + Expand {} + + + + + Collapse {} + + + + + Expand All + + + + + Collapse All + + + + + welcome + + + Form + + + + + 1 + + + + + Templates + + + + + Empty + + + + + Novel + + + + + Novella + + + + + Short Story + + + + + Research paper + + + + + Demo projects + + + + + Add level + + + + + Add word count + + + + + Next time, automatically open last project + + + + + Open... + + + + + Recent + + + + + Create + + + + + 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 + + + + + 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.qm b/i18n/manuskript_de.qm index 2d98217..6d307dd 100644 Binary files a/i18n/manuskript_de.qm and b/i18n/manuskript_de.qm differ diff --git a/i18n/manuskript_de.ts b/i18n/manuskript_de.ts index 43ae4d4..856823d 100644 --- a/i18n/manuskript_de.ts +++ b/i18n/manuskript_de.ts @@ -1,230 +1,6 @@ - - - Export - - - Basic HTML output using the Python module 'markdown'. - Einfacher HTML-Export mit dem Python-Modul "markdown". - - - - Python module 'markdown'. - Python-Modul 'markdown'. - - - - Markdown source - Markdown-Quelle - - - - HTML Source - HTML-Quelle - - - - HTML Output - HTML-Ausgabe - - - - Default exporter, provides basic formats used by other exporters. - Standardexport: Bietet Basis-Formate, die von anderen Exports genutzt werden. - - - - Preview with highlighter. - Vorschau mit Hervorhebung. - - - - Plain text - Einfacher Text - - - - Chose output file... - Wähle die Ausgabedatei... - - - - A little known format modestly used. You know, web sites for example. - Ein kaum bekanntes Format wird verwendet. Du weißt schon, für Webseiten und so. - - - - Needs LaTeX to be installed. - 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 - In sich geschlossene 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: - - - - Books that don't kill trees. - Bücher, für die keine Bäume sterben mussten. - - - - OpenDocument format. Used by LibreOffice for example. - OpenDocument-Format. Wird beispielsweise von LibreOffice genutzt. - - - - Microsoft Office (.docx) document. - Microsoft Office-Dokument (.docx). - - - - reStructuredText is a lightweight markup language. - reStructuredText (reST) ist eine leichtgewichtige Auszeichnungssprache … - - - - Just like plain text, excepts adds markdown titles. - Presupposes that texts are formatted in markdown. - Ähnlich Plaintext, erlaubt aber Hervorhebungen für Titel - 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> - - <p>Ein universaler Dokumenten-Konverter. Kann zur Konvertierung von Markup in eine Reihe von anderen Formaten genutzt - werden.</p> - <p>Website: <a href="http://www.pandoc.org">http://pandoc.org/</a></p> - - - - - 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. - eine funktionierende LaTex-Installation. Siehe Systemvorausetzungen für Pandoc: - <a href="http://pandoc.org/installing.html">http://pandoc.org/installing.html</a>. Wenn Unicode unterstützt werden soll, wird xelatex benötigt. - - - - Export to markdown, using pandoc. Allows more formatting options - than the basic manuskript exporter. - Exportiert nach Markdown via pandoc. Erlaubt mehr Formatierungen - als der Basis-Manuskript-Export. - - - - LaTeX is a word processor and document markup language used to create - beautiful documents. - LaTeX ist Textsatzprogramm und Markup-Language zur Erstellung - wunderschöner Dokumente. - - - - The purpose of this format is to provide a way to exchange information - between outliners and Internet services that can be browsed or controlled - through an outliner. - Dieses Format dient zum Austausch von Informationen - zwischen Outlinern und Internetservices, die von Outlinern - 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 - - + + ExportersManager @@ -303,7 +79,7 @@ Nutze das, wenn du YAML-Errors bekommst. Exclude words (comma separated): - Wörter ausschließen: <br>(Trennung durch Komma): + Wörter ausschließen: <br>(Trennen mit Komma): @@ -326,149 +102,10 @@ Nutze das, wenn du YAML-Errors bekommst. bis - - 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; - <b>Info:</b> Ein sehr einfacher - Parser, der ein Markdown-Dokument durchläuft und - 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) - are added as scene.</p> - <p>Only text files are supported (not images, binary or others).</p> - <p><b>Info:</b> Importiert eine ganze Verzeichnisstruktur. - Ordner werden als Ordner hinzugefügt, und Reintext-Dokumente - (Sie wählen welche, entsprechend der Erweiterung) werden als Szene - hinzugefügt.</p> - <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 - 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 kann - <b>Markdown</b> oder <b>OPML</b> importieren. Pandoc konvertiert - Ihr Dokument in das jeweilige Format, bevor - Manuskript es importiert. Das Ergebnis - hängt von der Art Ihres Dokuments ab. - <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> - <b>none</b>: no line wrap.<br> - <b>preserve</b>: tries to preserves line wrap from the - original document.</p> - <p>Soll pandoc - jede einzelne Zeile umbrechen?</p><p> - <b>auto</b>: bricht nach 72 Zeichen um.<br> - <b>none</b>: keine Zeilenumbrüche.<br> - <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 - - MDEditCompleter - + Insert reference Referenz einfügen @@ -476,968 +113,1111 @@ Nutze das, wenn du YAML-Errors bekommst. MainWindow - + General Allgemein - + Title Titel - + Subtitle Untertitel - + Series Serie - + Volume Band - + Genre Genre - + License - Linzenz + Lizenz - + Author Autor - + Name Name - + Email - Email + E-Mail - + Summary Zusammenfassung - + Situation: Situation: - + Summary: Zusammenfassung: - + One sentence Ein Satz - + One paragraph Ein Absatz - + One page Eine Seite - + Full Ausführlich - + One sentence summary Zusammenfassung in einem Satz - + One paragraph summary Zusammenfassung in einem Absatz - + Expand each sentence of your one paragraph summary to a paragraph Erweitern Sie jeden Satz Ihrer Ein-Absatz-Zusammenfassung zu einem eigenen Absatz - + One page summary Zusammenfassung auf einer Seite - + Full summary Ausführliche Zusammenfassung - + Next Weiter - + What if...? Was wäre wenn ...? - + Characters Charaktere - + Names 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">Zusammenfassung<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> + <html><head/><body><p align="right">Zusammenfassung<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 - + Book information Buchinformationen - + &About &Über - + About Manuskript Über Manuskript - + Manuskript Manuskript - + Project {} saved. - Projekt {} gespeichert. + Projekt {} wurde 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) + 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 - - Install PyEnchant to use spellcheck - Installiere PyEnchant um die Rechtschreibprüfung zu nutzen - - - + 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 … + Füge Handlungsschritt hinzu (Strg+Enter) - + 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 … - - + Ctrl+Shift+K Strg+Umschalt+K - + Sp&lit at cursor - Am Mauszeiger aufteilen + Am Mauszeiger auf&teilen - + 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 - + &Format - + &Header - + Übersc&hrift - + &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 1 (setext) - Level &4 - + Ctrl+Alt+1 + Strg+Alt+1 - - Ctrl+4 - + + Level &2 + Level &2 - Level &5 - + Ctrl+Alt+2 + Strg+Alt+2 - - Ctrl+5 - + + Level &1 (atx) + Level &1 (atx) - Level &6 - + Ctrl+1 + Strg+1 - - Ctrl+6 - + + L&evel 2 + L&evel 2 - - &Bold - + + Ctrl+2 + Strg+2 - - Ctrl+B - + + Level &3 + Level &3 + + + + Ctrl+3 + Strg+3 + + + + Level &4 + Level &4 - &Italic - + Ctrl+4 + Strg+4 - - Ctrl+I - + + Level &5 + Level &5 - - &Strike - + + Ctrl+5 + Ctrl+5 - - &Verbatim - + + Level &6 + Level &6 - - Su&perscript - + + 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+- - - - - - Co&mment block - - - - - Ctrl+Shift+C - - - - - Clear &formats - - - - - Ctrl+0 - - - - - &Comment line(s) - - - - - &Ordered list - + Strg+- + Co&mment block + Ko&mmentarblock + + + + Ctrl+Shift+C + Strg+Umschalt+C + + + + Clear &formats + &Formatierung 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 + Installieren Sie {}{} um die Rechtschreibprüfung zu nutzen + + + + {} has no installed dictionaries + {} hat keine installierten Wörterbücher + + + + {}{} 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 + + + + Allow POV + Erlaube POV + + + + Search + Suche + + + + Ctrl+F + Strg+F + + + + &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 in Verwendung! + + + + The log file "{}" will continue to be written to until Manuskript is closed. + Die Log-Datei "{}" wird weiterhin beschrieben bis Manuskript beendet wurde. + + + + It will now be displayed in your file manager, but is of limited use until you close Manuskript. + Sie wird nun in deinem Datei-Manager angezeigt. Allerdings sollte sie nicht verwendet werden bis Manuskript geschlossen wurde. + + + + Error! + Fehler! + + + + An error was encountered while trying to show the log file below in your file manager. + Es ist ein Fehler aufgetreten beim Versuch die aktuelle Log-Datei im Datei-Manager anzuzeigen. + + + + F3 + F3 + + + + Shift+F3 + Shift+F3 + + + + Situation + Situation + + + + Status + Status + + + + &Import… + &Importieren… + + + + &Split… + &Aufteilen… + + + + Search + + + No results found + Keine Ergebnisse gefunden @@ -1453,7 +1233,7 @@ Nutze das, wenn du YAML-Errors bekommst. Allgemein - + Revisions Revisionen @@ -1463,17 +1243,17 @@ Nutze das, wenn du YAML-Errors bekommst. Ansichten - + Labels Labels - + Status Status - + Fullscreen Vollbildmodus @@ -1485,656 +1265,713 @@ Nutze das, wenn du YAML-Errors bekommst. Application settings - Benutzeroberfläche + Anwendungseinstellungen - + Loading Laden - + Automatically load last project on startup - Läd automatisch das letzte Projekt beim Start + Beim Start automatisch das letzte Projekt laden - + 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 quit - Speichert beim Schließen + + Save on project close + Projekt beim Schließen speichern - - <html><head/><body><p>If you check this option, your project will be save as one single file. Easier to copy or backup, but does not allow collaborative editing, or versionning.<br/>If this is unchecked, your project will be save as a folder containing many small files.</p></body></html> - <html><head/><body><p>Wenn diese Option ausgewählt wurde, wird das Projekt in einer einzigen Datei gespeichert. Es ist leichter zu kopieren oder zu sichern, aber nicht für gemeinsame Bearbeitung oder Versionierung geeignet.<br/>Wenn diese Option nicht ausgewählt wurde, wird das Projekt in vielen kleinen einzelnen Dateien gespeichert.</p></body></html> + + <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 + 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 a&nzeigen - + 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: + Schriftgröße: - - You might need to restart manuskript in order for those settings to take effect properly and entirely. - + + 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 - Nichts + 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><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 + + + &New Character + &Neuer Charakter + + + + &New Plot Item + &Neues Plot-Element + + + + &New World Item + &Neues Welt-Element + + + + &Correction Suggestions + &Korrektur-Vorschläge + + + + &Correction Suggestion + &Korrekturvorschläge + about @@ -2165,54 +2002,41 @@ Nutze das, wenn du YAML-Errors bekommst. abstractModel - + Title Titel - + POV POV - + Label Kategorie - + Status Status - + Compile Kompilieren - + Word count Wortanzahl - + Goal Ziel - - app - - - Loaded translation: {}. - Geladene Übersetzung: {}. - - - - Note: No translator found or loaded for locale {}. - Notiz: Keine Übersetzung für {} gefunden oder geladen. - - basicItemView @@ -2249,35 +2073,40 @@ Nutze das, wenn du YAML-Errors bekommst. characterModel - - New character - Neuer Charakter - - - + Name Name - + Value Wert + + + New character + Neuer Charakter + + + + Description + Beschreibung + characterTreeView - + Main Primär - + Secondary Sekundär - + Minor Nebensächlich @@ -2393,12 +2222,12 @@ Nutze das, wenn du YAML-Errors bekommst. corkDelegate - + One line summary Inhaltsangabe in einem Satz - + Full summary Vollständige Zusammenfassung @@ -2444,7 +2273,7 @@ Nutze das, wenn du YAML-Errors bekommst. {} (not implemented yet) - {} (noch nicht implimentiert) + {} (noch nicht implementiert) @@ -2492,7 +2321,7 @@ Nutze das, wenn du YAML-Errors bekommst. <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>Filtert, welche Objekte beim finalen Export mit einbezogen werden sollen.<br/><span style=" color:#773333;">(Noch nicht vollständig implimentiert.)</span></p></body></html> + <html><head/><body><p>Filtert, welche Objekte beim finalen Export mit einbezogen werden sollen.<br/><span style=" color:#773333;">(Noch nicht vollständig implementiert.)</span></p></body></html> @@ -2639,15 +2468,15 @@ Nutze das, wenn du YAML-Errors bekommst. {}Level {} text {}Level {} Text - + - Replace ... with … - ... ersetzen durch … + Replace ... with … + Ersetze ... durch … - + - Replace --- with — - --- ersetzen durch — + Replace --- with — + Ersetze --- durch — @@ -2709,20 +2538,75 @@ Nutze das, wenn du YAML-Errors bekommst. 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 + generalSettings @@ -2779,7 +2663,7 @@ Nutze das, wenn du YAML-Errors bekommst. - Chose file + Choose file Datei wählen @@ -2801,7 +2685,7 @@ Nutze das, wenn du YAML-Errors bekommst. lineEditView - + Various Verschiedenes @@ -2912,25 +2796,40 @@ Nutze das, wenn du YAML-Errors bekommst. Alt+Nach oben - + Root Stamm - - {} words / {} + + {} words + {} Wörter + + + + ({} chars) {} words / {} + ({} Zeichen) {} Wörter / {} + + + + {} words / {} {} Wörter / {} - - {} words - {} Wörter + + {} chars + {} Zeichen + + + + {} chars + {} Zeichen markdownSettings - + Markdown Markdown @@ -2976,134 +2875,11 @@ Nutze das, wenn du YAML-Errors bekommst. myPanel - + Auto-hide Automatisches Ausblenden - - outlineBasics - - - Set POV - Wähle POV - - - - None - Nichts - - - - Set Status - Wähle Status - - - - Set Label - Wähle Label - - - - New - Neu - - - - Main - Primär - - - - Secondary - Sekundär - - - - Minor - Nebensächlich - - - - Set Custom Icon - Benutzerdefinierten Icon einfügen - - - - Restore to default - Auf Standard zurücksetzen - - - - Root - Stamm - - - - Open {} items in new tabs - {} Elemente in neuen Tabs öffnen - - - - Open {} in a new tab - {} in einem neuen Tab öffnen - - - - About to remove - Im Begriff, dies zu entfernen - - - - <p><b>You're about to delete {} item(s).</b></p><p>Are you sure?</p> - <p><b>Möchten Sie wirklich {} Element(e) löschen?</b></p> - - - - Select at least two items. Folders are ignored. - Wählen Sie mindestens zwei Elemente aus. Ordner werden ignoriert. - - - - All items must be on the same level (share the same parent). - Alle Elemente müssen sich auf der gleichen Ebene befinden (teilen sich die gleiche übergeordnete Ebene). - - - - New &Folder - Neuer &Ordner - - - - New &Text - Neuer &Text - - - - &Copy - &Kopieren - - - - C&ut - A&usschneiden - - - - &Paste - &Einfügen - - - - &Rename - &Umbenennen - - - - &Delete - &Löschen - - outlineCharacterDelegate @@ -3127,33 +2903,20 @@ Nutze das, wenn du YAML-Errors bekommst. Nebensächlich - - outlineItem - - - {} words / {} ({}) - {} Wörter / {} ({}) - - - - {} words - {} Wörter - - pandocSettings - + General Allgemein - + Table of Content Inhaltsverzeichnis - + Custom settings for {} Benutzerdefinierte Einstellungen für {} @@ -3168,7 +2931,7 @@ Nutze das, wenn du YAML-Errors bekommst. Secondary - Sekundär + Sekundär @@ -3256,7 +3019,7 @@ Nutze das, wenn du YAML-Errors bekommst. 1. Inciting event - Übertreten der Schwelle + Auslösendes Ereignis @@ -3357,60 +3120,60 @@ 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 + + + New plot + Neuer Plot + plotTreeView - + Main Primär - + Secondary Sekundär - + Minor Nebensächlich - + **Plot:** {} **Handlungsstrang:** {} @@ -3425,7 +3188,7 @@ Nutze das, wenn du YAML-Errors bekommst. Secondary - Sekundär + Sekundär @@ -3471,169 +3234,6 @@ Nutze das, wenn du YAML-Errors bekommst. Wortanzahl - - 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: - - - - 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 - - revisions @@ -3647,12 +3247,12 @@ Nutze das, wenn du YAML-Errors bekommst. Optionen - + Restore Wiederherstellen - + Delete Löschen @@ -3712,12 +3312,12 @@ Nutze das, wenn du YAML-Errors bekommst. {} Sekunden zuvor - + Line {}: Zeile {}: - + Clear all Leeren @@ -3734,89 +3334,61 @@ Nutze das, wenn du YAML-Errors bekommst. 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: +{} + sldImportance @@ -3865,13 +3437,13 @@ Nutze das, wenn du YAML-Errors bekommst. <p><b>Mark:</b></p> - + <p>Ausgewählte(s) Element(e) an der angegebenen Markierung aufteilen</p> <p>Wenn eines der ausgewählten Elemente ein Ordner ist, wird es rekursiv auf <i>alle</i> untergeordneten Elemente übertragen.</p> - <p>Die Trennmarkierung kann folgende Escape-Sequenzen enthalten: + <p>Die Trennmarkierung kann folgende Escape-Zeichen enthalten: <ul> <li><b><code>\n</code></b>: Zeilenumbruch</li> <li><b><code>\t</code></b>: Tab</li> @@ -3884,7 +3456,7 @@ Nutze das, wenn du YAML-Errors bekommst. Split '{}' - „{}” aufteilen + „{}“ aufteilen @@ -3913,22 +3485,22 @@ Nutze das, wenn du YAML-Errors bekommst. 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 @@ -4035,27 +3607,27 @@ Nutze das, wenn du YAML-Errors bekommst. Leer - + Novel Roman - + Novella Novelle - + Short Story Kurzgeschichte - + Research paper Forschungsbericht - + Demo projects Demo Projekte @@ -4067,7 +3639,7 @@ Nutze das, wenn du YAML-Errors bekommst. Add word count - Wortziel festlegen + Wortziel festlegen @@ -4090,147 +3662,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 - Triologie + 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 @@ -4238,214 +3810,214 @@ Nutze das, wenn du YAML-Errors bekommst. 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 - Geschlichterrollen + 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_el.qm b/i18n/manuskript_el.qm new file mode 100644 index 0000000..cd41c69 Binary files /dev/null and b/i18n/manuskript_el.qm differ diff --git a/i18n/manuskript_el.ts b/i18n/manuskript_el.ts new file mode 100644 index 0000000..5be1cc2 --- /dev/null +++ b/i18n/manuskript_el.ts @@ -0,0 +1,4539 @@ + + + + + Export + + + Basic HTML output using the Python module 'markdown'. + Βασική έξοδος HTML με τη χρήση της ενότητας 'markdown' της Python. + + + + Python module 'markdown'. + «Markdown» της μονάδας Python. + + + + Markdown source + Πηγή Markdown + + + + HTML Source + Πηγή HTML + + + + HTML Output + Έξοδος HTML + + + + Default exporter, provides basic formats used by other exporters. + Προεπιλεγμένος εξαγωγέας, παρέχει βασικές μορφές που χρησιμοποιούνται από άλλους εξαγωγείς. + + + + Preview with highlighter. + Προεπισκόπηση με επισήμανση. + + + + Plain text + Απλό κείμενο + + + + A little known format modestly used. You know, web sites for example. + Μια ελάχιστα γνωστή μορφή που χρησιμοποιείται μέτρια. Ξέρετε, ιστοσελίδες για παράδειγμα. + + + + Needs LaTeX to be installed. + Χρειάζεται να εγκατασταθεί το LaTex. + + + + Error + Σφάλμα + + + + Standalone document (not just a fragment) + Αυτοτελές έγγραφο (όχι μόνο ένα τμήμα) + + + + Include a table of contents. + Συμπεριλάβετε έναν πίνακα περιεχομένων. + + + + Number of sections level to include in TOC: + Αριθμός επιπέδων ενοτήτων που πρέπει να συμπεριληφθούν στο 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: + Διάστιχο: + + + + Books that don't kill trees. + Βιβλία που δεν καταστρέφουν δέντρα. + + + + OpenDocument format. Used by LibreOffice for example. + Μορφή OpenDocument. Χρησιμοποιείται από το LibreOffice για παράδειγμα. + + + + Microsoft Office (.docx) document. + Έγγραφο του Microsoft Office (.docx). + + + + reStructuredText is a lightweight markup language. + Το reStructuredText είναι μια ελαφριά γλώσσα σήμανσης. + + + + Just like plain text, excepts adds markdown titles. + Presupposes that texts are formatted in markdown. + Όπως και το απλό κείμενο, οι εξαιρέσεις προσθέτουν τίτλους markdown. + Προϋποθέτει ότι τα κείμενα είναι μορφοποιημένα σε 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> + + + + + + 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. + + + + + Export to markdown, using pandoc. Allows more formatting options + than the basic manuskript exporter. + + + + + LaTeX is a word processor and document markup language used to create + beautiful documents. + + + + + The purpose of this format is to provide a way to exchange information + between outliners and Internet services that can be browsed or controlled + through an outliner. + + + + + Disable YAML metadata block. +Use that if you get YAML related error. + + + + + Convert to ePUB3 + Μετατροπή σε ePUB3 + + + + Could not process regular expression: +{} + + + + + Choose output file… + + + + + ExportersManager + + + Manage Exporters + Διαχείριση εξαγωγέων + + + + Manuskript + Μάνουσκριπτ + + + + Description + Περιγραφή + + + + Offers export to + Προσφέρει εξαγωγή σε + + + + Status + Καθεστώς + + + + Status: + Καθεστώς: + + + + Version: + Έκδοση: + + + + Path: + Μονοπάτι: + + + + ... + + + + + {HelpText} + {Κείμενο βοηθείας} + + + + FrequencyAnalyzer + + + Frequency Analyzer + Αναλυτής συχνότητας + + + + Word frequency + Συχνότητα λέξεων + + + + Settings + Ρυθμίσεις + + + + Minimum size: + Ελάχιστο μέγεθος: + + + + Exclude words (comma separated): + Αποκλείστε λέξεις (διαχωρισμένες με κόμμα): + + + + Analyze + Ανάλυση + + + + Phrase frequency + + + + + Number of words: from + + + + + to + + + + + 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) + are added as scene.</p> + <p>Only text files are supported (not images, binary or others).</p> + + + + + 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 + Εισαγωγή 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 + then it will be imported in manuskript. One or the other + might give better result depending on your document. + <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> + <b>none</b>: no line wrap.<br> + <b>preserve</b>: tries to preserves line wrap from the + original document.</p> + + + + + Mind Map Import + + + + + This does not appear to be a valid Mind Map file. + + + + + Mind Map import + + + + + Import tip as: + + + + + Untitled + + + + + MDEditCompleter + + + Insert reference + + + + + MainWindow + + + General + + + + + Title + + + + + Subtitle + + + + + Series + + + + + Volume + + + + + 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 + + + + + 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 + + + + + Book information + + + + + &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 + + + + + Settings + + + Settings + + + + + General + + + + + Revisions + + + + + Views + + + + + Labels + + + + + Status + + + + + Fullscreen + + + + + General settings + + + + + Application settings + + + + + 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> + + + + + SpellAction + + + Spelling Suggestions + + + + + &Add to dictionary + + + + + &Remove from custom dictionary + + + + + about + + + About Manuskript + + + + + Manuskript + + + + + aboutDialog + + + Version + + + + + Software Versions in Use: + + + + + abstractModel + + + Title + + + + + POV + + + + + Label + + + + + Status + + + + + Compile + + + + + Word count + + + + + Goal + + + + + basicItemView + + + Form + + + + + POV: + + + + + Goal: + + + + + Word count + + + + + One line summary + + + + + Few sentences summary: + + + + + characterModel + + + New character + + + + + Name + + + + + Value + + + + + characterTreeView + + + Main + + + + + Secondary + + + + + Minor + + + + + cheatSheet + + + Form + + + + + Filter (type the name of anything in your project) + + + + + Minor + + + + + Secondary + + + + + Main + + + + + Characters + + + + + Texts + + + + + Plots + + + + + World + + + + + cmbOutlineCharacterChoser + + + None + + + + + Main + + + + + Secondary + + + + + Minor + + + + + Various + + + + + cmbOutlineLabelChoser + + + Various + + + + + cmbOutlineStatusChoser + + + Various + + + + + collapsibleDockWidgets + + + Dock Widgets Toolbar + + + + + completer + + + Form + + + + + corkDelegate + + + One line summary + + + + + Full summary + + + + + editorWidget_ui + + + Form + + + + + exporter + + + Export + + + + + Export to: + + + + + Manage exporters + + + + + Preview + + + + + Settings + + + + + exporterDialog + + + {} (not implemented yet) + + + + + exporterSettings + + + Form + + + + + Content + + + + + Decide here what will be included in the final export. + + + + + Type + + + + + Title + + + + + Text + + + + + I need more granularity + + + + + Fi&lters + + + + + <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> + + + + + Ignore compile status (include all items) + + + + + Subitems of: + + + + + Labels + + + + + Status + + + + + Separations + + + + + Between folders: + + + + + Empty line + + + + + Custom + + + + + Between texts: + + + + + Between folder and text: + + + + + Between text and folder: + + + + + Transformations + + + + + Typographic replacements: + + + + + Replace double quotes (") with: + + + + + Replace single quotes (') with: + + + + + Remove multiple spaces + + + + + Custom replacements: + + + + + Enabled + + + + + Replace + + + + + With + + + + + RegExp + + + + + If checked, uses regular expression for replacement. If unchecked, replaced as plain text. + + + + + Preview + + + + + Font + + + + + Font: + + + + + Font size: + + + + + Folder + + + + + {}Level {} folder + + + + + {}Level {} text + + + + + Replace ... with … + + + + + Replace --- with — + + + + + exportersManager + + + Installed + + + + + Custom + + + + + Not found + + + + + {} not found. Install it, or set path manually. + + + + + <b>Status:</b> uninstalled. + + + + + <b>Requires:</b> + + + + + Set {} executable path. + + + + + frequencyAnalyzer + + + Phrases + + + + + Frequency + + + + + Word + + + + + 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 + + + + + generalSettings + + + General + + + + + Split scenes at: + + + + + \n---\n + + + + + Trim long titles (> 32 chars) + + + + + Import under: + + + + + Import in a top-level folder + + + + + helpLabel + + + If you don't wanna see me, you can hide me in Help menu. + + + + + importer + + + Import + + + + + Format: + + + + + Choose file + + + + + Clear file + + + + + Preview + + + + + Settings + + + + + lastAccessedDirectoryInfo + + + Last accessed directory "{}" loaded. + + + + + lineEditView + + + Various + + + + + locker + + + Form + + + + + Lock screen: + + + + + Word target + + + + + Time target + + + + + words + + + + + minutes + + + + + Lock ! + + + + + ~{} h. + + + + + ~{} mn. + + + + + {}:{} + + + + + {} s. + + + + + {} remaining + + + + + {} words remaining + + + + + mainEditor + + + Form + + + + + Text + + + + + Index cards + + + + + Outline + + + + + F11 + + + + + Go to parent item + + + + + Alt+Up + + + + + Root + + + + + {} words / {} + + + + + {} words + + + + + markdownSettings + + + Markdown + + + + + metadataView + + + Form + + + + + Properties + + + + + Summary + + + + + One line summary + + + + + Full summary + + + + + Notes / References + + + + + Revisions + + + + + myPanel + + + Auto-hide + + + + + outlineBasics + + + Set POV + + + + + None + + + + + Set Status + + + + + Set Label + + + + + New + + + + + Main + + + + + Secondary + + + + + Minor + + + + + Set Custom Icon + + + + + Restore to default + + + + + Root + + + + + Open {} items in new tabs + + + + + Open {} in a new tab + + + + + 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). + + + + + New &Folder + + + + + New &Text + + + + + &Copy + + + + + C&ut + + + + + &Paste + + + + + &Rename + + + + + &Delete + + + + + outlineCharacterDelegate + + + None + + + + + Main + + + + + Secondary + + + + + Minor + + + + + outlineItem + + + {} words / {} ({}) + + + + + {} words + + + + + pandocSettings + + + General + + + + + Table of Content + + + + + Custom settings for {} + + + + + persosProxyModel + + + Main + + + + + Secondary + + + + + Minors + + + + + plotDelegate + + + General + + + + + Promise + + + + + Problem + + + + + Progress + + + + + Resolution + + + + + Try / Fail + + + + + No and + + + + + Yes but + + + + + 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 + + + + + Tests + + + + + Approach + + + + + Abyss + + + + + Reward / Revelation + + + + + Transformation + + + + + Atonement + + + + + Return + + + + + plotModel + + + New plot + + + + + Name + + + + + Meta + + + + + New step + + + + + Main + + + + + Secondary + + + + + Minor + + + + + plotTreeView + + + Main + + + + + Secondary + + + + + Minor + + + + + **Plot:** {} + + + + + plotsProxyModel + + + Main + + + + + Secondary + + + + + Minors + + + + + propertiesView + + + Form + + + + + POV + + + + + Status + + + + + Label + + + + + Compile + + + + + Goal + + + + + Word count + + + + + references + + + Not a reference: {}. + + + + + Unknown reference: {}. + + + + + Path: + + + + + Stats: + + + + + POV: + + + + + Status: + + + + + Label: + + + + + Short summary: + + + + + Long summary: + + + + + Notes: + + + + + Basic info + + + + + Detailed info + + + + + POV of: + + + + + 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: + + + + + Motivation + + + + + Goal + + + + + Epiphany + + + + + Short summary + + + + + Longer summary + + + + + revisions + + + Form + + + + + Options + + + + + Restore + + + + + Delete + + + + + Show modifications + + + + + Show ancient version + + + + + Show spaces + + + + + Show modifications only + + + + + {} years ago + + + + + {} months ago + + + + + {} days ago + + + + + 1 day ago + + + + + {} hours ago + + + + + {} minutes ago + + + + + {} seconds ago + + + + + Line {}: + + + + + Clear all + + + + + search + + + Form + + + + + 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: +{} + + + + + sldImportance + + + Form + + + + + TextLabel + + + + + Minor + + + + + Secondary + + + + + Main + + + + + splitDialog + + + + <p>Split selected item(s) at the given mark.</p> + + <p>If one of the selected item is a folder, it will be applied + recursively to <i>all</i> of it's children items.</p> + + <p>The split mark can contain following escape sequences: + <ul> + <li><b><code>\n</code></b>: line break</li> + <li><b><code>\t</code></b>: tab</li> + </ul> + </p> + + <p><b>Mark:</b></p> + + + + + + Split '{}' + + + + + Split items + + + + + storylineView + + + Form + + + + + Show Plots + + + + + Show Characters + + + + + tabSplitter + + + Open selected items in that view. + + + + + Split horizontally + + + + + Close split + + + + + Split vertically + + + + + textEditView + + + Various + + + + + textFormat + + + Form + + + + + CTRL+B + + + + + CTRL+I + + + + + CTRL+U + + + + + CTRL+P + + + + + CTRL+L + + + + + CTRL+E + + + + + CTRL+R + + + + + CTRL+J + + + + + treeView + + + Expand {} + + + + + Collapse {} + + + + + Expand All + + + + + Collapse All + + + + + welcome + + + Form + + + + + 1 + + + + + Templates + + + + + Empty + + + + + Novel + + + + + Novella + + + + + Short Story + + + + + Research paper + + + + + Demo projects + + + + + Add level + + + + + Add word count + + + + + Next time, automatically open last project + + + + + Open... + + + + + Recent + + + + + Create + + + + + 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 + Τελικό + + + + 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_en_GB.qm b/i18n/manuskript_en_GB.qm new file mode 100644 index 0000000..e16e538 Binary files /dev/null and b/i18n/manuskript_en_GB.qm differ diff --git a/i18n/manuskript_en_GB.ts b/i18n/manuskript_en_GB.ts new file mode 100644 index 0000000..82a549a --- /dev/null +++ b/i18n/manuskript_en_GB.ts @@ -0,0 +1,4010 @@ + + + + + ExportersManager + + + Manage Exporters + + + + + Manuskript + + + + + Description + + + + + Offers export to + + + + + Status + + + + + Status: + + + + + Version: + + + + + Path: + + + + + ... + + + + + {HelpText} + + + + + FrequencyAnalyzer + + + Frequency Analyzer + Frequency Analyser + + + + Word frequency + = + + + + Settings + + + + + Minimum size: + + + + + Exclude words (comma separated): + + + + + Analyze + Analyse + + + + Phrase frequency + + + + + Number of words: from + + + + + to + + + + + MDEditCompleter + + + Insert reference + + + + + MainWindow + + + General + + + + + Book information + + + + + Title + + + + + Subtitle + + + + + Series + + + + + Volume + + + + + Genre + + + + + License + Licence + + + + Author + + + + + Name + + + + + Email + E-mail + + + + 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 + + + + + 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 + + + + + F7 + + + + + &Copy + + + + + Ctrl+C + + + + + C&ut + + + + + Ctrl+X + + + + + &Paste + + + + + Ctrl+V + + + + + 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. + + + + + (~{} 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 project? + + + + Save changes to project "{}" before closing? + Save changes to project ‘{}’ before closing? + + + + Your changes will be lost if you don't save them. + 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 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. + PyQt {} and Qt {} are in use. + + + + Proceed with import at your own risk + Proceed with import at your own risk + + + + Allow POV + + + + + Search + + + + + 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 + + + + + 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. + + + + + F3 + + + + + Shift+F3 + + + + + Situation + + + + + Status + + + + + &Import… + + + + + &Split… + + + + + Search + + + No results found + + + + + Settings + + + Settings + + + + + General + + + + + Revisions + + + + + Views + + + + + Labels + + + + + Status + + + + + Fullscreen + + + + + General settings + + + + + Application settings + + + + + 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 + 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>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> + <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 + + + About Manuskript + + + + + Manuskript + + + + + aboutDialog + + + Version + + + + + Software Versions in Use: + + + + + abstractModel + + + Title + + + + + POV + + + + + Label + + + + + Status + + + + + Compile + + + + + Word count + + + + + Goal + + + + + basicItemView + + + Form + + + + + POV: + + + + + Goal: + + + + + Word count + + + + + One line summary + + + + + Few sentences summary: + + + + + characterModel + + + Name + + + + + Value + + + + + New character + + + + + Description + + + + + characterTreeView + + + Main + + + + + Secondary + + + + + Minor + + + + + cheatSheet + + + Form + + + + + Filter (type the name of anything in your project) + + + + + Minor + + + + + Secondary + + + + + Main + + + + + Characters + + + + + Texts + + + + + Plots + + + + + World + + + + + cmbOutlineCharacterChoser + + + None + + + + + Main + + + + + Secondary + + + + + Minor + + + + + Various + + + + + cmbOutlineLabelChoser + + + Various + + + + + cmbOutlineStatusChoser + + + Various + + + + + collapsibleDockWidgets + + + Dock Widgets Toolbar + + + + + completer + + + Form + + + + + corkDelegate + + + One line summary + + + + + Full summary + + + + + editorWidget_ui + + + Form + + + + + exporter + + + Export + + + + + Export to: + + + + + Manage exporters + + + + + Preview + + + + + Settings + + + + + exporterDialog + + + {} (not implemented yet) + + + + + exporterSettings + + + Form + + + + + Content + + + + + Decide here what will be included in the final export. + + + + + Type + + + + + Title + + + + + Text + + + + + I need more granularity + + + + + Fi&lters + + + + + <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> + + + + + Ignore compile status (include all items) + + + + + Subitems of: + + + + + Labels + + + + + Status + + + + + Separations + + + + + Between folders: + + + + + Empty line + + + + + Custom + + + + + Between texts: + + + + + Between folder and text: + + + + + Between text and folder: + + + + + Transformations + + + + + Typographic replacements: + + + + + Replace ... with … + Replace ... with … + + + + Replace --- with — + Replace --- with — + + + + Replace double quotes (") with: + + + + + Replace single quotes (') with: + + + + + Remove multiple spaces + + + + + Custom replacements: + + + + + Enabled + + + + + Replace + + + + + With + + + + + RegExp + + + + + If checked, uses regular expression for replacement. If unchecked, replaced as plain text. + + + + + Preview + + + + + Font + + + + + Font: + + + + + Font size: + + + + + Folder + + + + + {}Level {} folder + + + + + {}Level {} text + + + + + exportersManager + + + Installed + + + + + Custom + + + + + Not found + + + + + {} not found. Install it, or set path manually. + + + + + <b>Status:</b> uninstalled. + + + + + <b>Requires:</b> + + + + + Set {} executable path. + + + + + frequencyAnalyzer + + + Phrases + + + + + Frequency + + + + + Word + + + + + 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 + + + + + generalSettings + + + General + + + + + Split scenes at: + + + + + \n---\n + + + + + Trim long titles (> 32 chars) + + + + + Import under: + + + + + Import in a top-level folder + + + + + helpLabel + + + If you don't wanna see me, you can hide me in Help menu. + + + + + importer + + + Import + + + + + Format: + + + + + Choose file + + + + + Clear file + + + + + Preview + + + + + Settings + + + + + lineEditView + + + Various + + + + + locker + + + Form + + + + + Lock screen: + + + + + Word target + + + + + Time target + + + + + words + + + + + minutes + + + + + Lock ! + + + + + ~{} h. + + + + + ~{} mn. + + + + + {}:{} + + + + + {} s. + + + + + {} remaining + + + + + {} words remaining + + + + + mainEditor + + + Form + + + + + Go to parent item + + + + + Alt+Up + + + + + Text + + + + + Index cards + + + + + Outline + + + + + F11 + + + + + Root + + + + + {} words + + + + + ({} chars) {} words / {} + + + + + {} words / {} + + + + + {} chars + + + + + {} chars + + + + + markdownSettings + + + Markdown + + + + + metadataView + + + Form + + + + + Properties + + + + + Summary + + + + + One line summary + + + + + Full summary + + + + + Notes / References + + + + + Revisions + + + + + myPanel + + + Auto-hide + + + + + outlineCharacterDelegate + + + None + + + + + Main + + + + + Secondary + + + + + Minor + + + + + pandocSettings + + + General + + + + + Table of Content + + + + + Custom settings for {} + + + + + persosProxyModel + + + Main + + + + + Secondary + + + + + Minors + + + + + plotDelegate + + + General + + + + + Promise + + + + + Problem + + + + + Progress + + + + + Resolution + + + + + Try / Fail + + + + + No and + + + + + Yes but + + + + + 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 + + + Name + + + + + Meta + + + + + New step + + + + + Main + + + + + Secondary + + + + + Minor + + + + + New plot + + + + + plotTreeView + + + Main + + + + + Secondary + + + + + Minor + + + + + **Plot:** {} + + + + + plotsProxyModel + + + Main + + + + + Secondary + + + + + Minors + + + + + propertiesView + + + Form + + + + + POV + + + + + Status + + + + + Label + + + + + Compile + + + + + Goal + + + + + Word count + + + + + revisions + + + Form + + + + + Options + + + + + Restore + + + + + Delete + + + + + Show modifications + + + + + Show ancient version + + + + + Show spaces + + + + + Show modifications only + + + + + {} years ago + + + + + {} months ago + + + + + {} days ago + + + + + 1 day ago + + + + + {} hours ago + + + + + {} minutes ago + + + + + {} seconds ago + + + + + Line {}: + + + + + Clear all + + + + + search + + + Form + + + + + Search for... + + + + + 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) + + + + + sldImportance + + + Form + + + + + TextLabel + + + + + Minor + + + + + Secondary + + + + + Main + + + + + splitDialog + + + + <p>Split selected item(s) at the given mark.</p> + + <p>If one of the selected item is a folder, it will be applied + recursively to <i>all</i> of it's children items.</p> + + <p>The split mark can contain following escape sequences: + <ul> + <li><b><code>\n</code></b>: line break</li> + <li><b><code>\t</code></b>: tab</li> + </ul> + </p> + + <p><b>Mark:</b></p> + + + + + + Split '{}' + + + + + Split items + + + + + storylineView + + + Form + + + + + Show Plots + + + + + Show Characters + + + + + tabSplitter + + + Open selected items in that view. + + + + + Split horizontally + + + + + Close split + + + + + Split vertically + + + + + textEditView + + + Various + + + + + textFormat + + + Form + + + + + CTRL+B + + + + + CTRL+I + + + + + CTRL+U + + + + + CTRL+P + + + + + CTRL+L + + + + + CTRL+E + + + + + CTRL+R + + + + + CTRL+J + + + + + treeView + + + Expand {} + + + + + Collapse {} + + + + + Expand All + + + + + Collapse All + + + + + welcome + + + Form + + + + + 1 + + + + + Templates + + + + + Empty + + + + + Novel + + + + + Novella + + + + + Short Story + + + + + Research paper + + + + + Demo projects + + + + + Add level + + + + + Add word count + + + + + Next time, automatically open last project + + + + + Open... + + + + + Recent + + + + + Create + + + + + 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 + + + + + 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_eo.qm b/i18n/manuskript_eo.qm new file mode 100644 index 0000000..80dd46d Binary files /dev/null and b/i18n/manuskript_eo.qm differ diff --git a/i18n/manuskript_eo.ts b/i18n/manuskript_eo.ts new file mode 100644 index 0000000..45a03ed --- /dev/null +++ b/i18n/manuskript_eo.ts @@ -0,0 +1,4582 @@ + + + + + Export + + + Basic HTML output using the Python module 'markdown'. + Simpla HTML-eligo per la Python-modulo «markdown». + + + + Python module 'markdown'. + Python-modulo «markdown». + + + + Markdown source + Markdown-fonto + + + + HTML Source + HTML-fonto + + + + HTML Output + HTML-eligo + + + + Default exporter, provides basic formats used by other exporters. + Implicita elportilo, provizanta bazajn dosierformojn uzatajn de aliaj elportiloj. + + + + Preview with highlighter. + Antaŭrigardi kun sintaksreliefigo. + + + + Plain text + Simpla teksto + + + + A little known format modestly used. You know, web sites for example. + Senfama dosierformo iomete uzata. Eble vi konas ĝin — en la Tut-Tera Teksaĵo interalie? + + + + Needs LaTeX to be installed. + Postulas instalon de LaTeX. + + + + Error + Eraro + + + + Standalone document (not just a fragment) + Memstara dokumento (ne nura fragmento) + + + + Include a table of contents. + Enmeti enhavtabelon. + + + + Number of sections level to include in TOC: + Nombro de sekciaj niveloj inkluzivotaj en la enhavtabelo: + + + + Typographically correct output + Tipografie ĝusta eligo + + + + Normalize the document (cleaner) + Laŭnormigi la dokumenton + + + + Specify the base level for headers: + Specifi la baznivelon de sekcititoloj: + + + + Use reference-style links instead of inline links + Uzi referencajn ligojn anstataŭ entekstaj ligoj + + + + Use ATX-style headers + Uzi sekcititolojn de stilo atx + + + + Self-contained HTML files, with no dependencies + Memstaraj HTML-dosieroj, sen dependaĵoj + + + + Use <q> tags for quotes in HTML + Uzi elementojn <q> por citiloj en HTML + + + + LaTeX engine used to produce the PDF. + LaTeX-modulo por fari PDF. + + + + Paper size: + Formato: + + + + Font size: + Tipargrando: + + + + Class: + Klaso: + + + + Line spacing: + Spaco inter linioj: + + + + Books that don't kill trees. + Libroj, kiuj ne mortigas arbojn. + + + + OpenDocument format. Used by LibreOffice for example. + Dosierformo OpenDocument. Uzata de LibreOffice, ekzemple. + + + + Microsoft Office (.docx) document. + Dokumento de Microsoft Office (.docx). + + + + reStructuredText is a lightweight markup language. + reStructuredText estas simpla marklingvo. + + + + Just like plain text, excepts adds markdown titles. + Presupposes that texts are formatted in markdown. + Same kiel simpla teksto, krom aldono de Markdown-sekcititoloj. + Tio supozas, ke la tekstoj estas Markdown-dokumentoj. + + + + 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>. + Plej simpla elporto al simpla teksto. Permesas al vi uzi vian propran marklingvon ne komprenatan + de Manuskript, ekzemple <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> + + <p>Universala dokumentkonvertilo. Povas konverti Markdown al diversaj aliaj + dosierformoj. </p> + <p>Retejo: <a href="http://www.pandoc.org">http://pandoc.org/</a> </p> + + + + + 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. + valida instalo de LaTeX. Rekomendoj pri Pandoc troveblas ĉe + <a href="https://pandoc.org/installing.html">pandoc.org/installing.html</a>. Se vi volas uzi Unikodon, vi bezonas XeLaTeX. + + + + Export to markdown, using pandoc. Allows more formatting options + than the basic manuskript exporter. + Elporti al Markdown per Pandoc. Permesas pli da opcioj + ol la baza elportilo de Manuskript. + + + + LaTeX is a word processor and document markup language used to create + beautiful documents. + LaTeX estas tekstoprilaborilo kaj dokumenta marklingvo por krei + belajn dokumentojn. + + + + The purpose of this format is to provide a way to exchange information + between outliners and Internet services that can be browsed or controlled + through an outliner. + Ĉi tiu dosierformo celas provizi manieron interŝanĝi informojn + inter skiziloj kaj Interretaj servoj, kiujn oni povas legi aŭ modifi + per skizilo. + + + + Disable YAML metadata block. +Use that if you get YAML related error. + Malŝalti YAML-metadatenblokon. +Uzu ĉi tion se okazas YAML-rilata eraro. + + + + Convert to ePUB3 + Konverti al EPUB3 + + + + Could not process regular expression: +{} + Ne eblis uzi la regulan esprimon: +{} + + + + Choose output file… + Elekti eligan dosieron… + + + + ExportersManager + + + Manage Exporters + Administri elportilojn + + + + Manuskript + Manuskript + + + + Description + Priskribo + + + + Offers export to + Kapabla elporti al + + + + Status + Stato + + + + Status: + Stato: + + + + Version: + Versio: + + + + Path: + Dosierindiko: + + + + ... + + + + + {HelpText} + {HelpText} + + + + FrequencyAnalyzer + + + Frequency Analyzer + Oftecanalizilo + + + + Word frequency + Vortofteco + + + + Settings + Agordoj + + + + Minimum size: + Minimuma grando: + + + + Exclude words (comma separated): + Ekskluzivi la jenajn vortojn (kome disigitajn): + + + + Analyze + Analizi + + + + Phrase frequency + Ofteco de frazelemento + + + + Number of words: from + Nombro de vortoj: inter + + + + to + kaj + + + + Import + + + Markdown import + Enporti Markdown + + + + <b>Info:</b> A very simple + parser that will go through a markdown document and + create items for each titles.<br/>&nbsp; + <b>Informoj:</b> Tre simpla + sintaksanalizilo, kiu trairos Markdown-dokumenton kaj + kreos erojn po unu por ĉiu sekcititolo.<br/>&nbsp; + + + + Folder import + Enporti dosierujon + + + + <p><b>Info:</b> Imports a whole + directory structure. Folders are added as folders, and + plaintext documents within (you chose which ones by extension) + are added as scene.</p> + <p>Only text files are supported (not images, binary or others).</p> + <p><b>Informoj:</b>Enporti tutan + dosierujon. Aldoni dosierujojn kiel dosierujojn, kaj + simplajn tekstajn dokumentojn en ili (elektitajn laŭ dosiersufikso) + kiel scenojn.</p> + <p> Nur tekstaj dosieroj estas subtenataj (ne bildoj, duumaĵoj ktp).</p> + + + + Include only those extensions: + Inkluzivi nur la jenajn dosiersufiksojn: + + + + Comma separated values + Kome disigitaj valoroj + + + + Sort items by name + Ordigi laŭ nomo + + + + Import folder then files + Enporti dosierujon, poste dosierojn + + + + OPML Import + Enporti OPML + + + + File open failed. + Malsukcesis malfermi dosieron. + + + + This does not appear to be a valid OPML file. + Tiu ŝajne ne estas valida OPML-dosiero. + + + + Pandoc import + Enporti 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 + then it will be imported in manuskript. One or the other + might give better result depending on your document. + <br/>&nbsp; + <b>Informoj:</b> Manuskript povas + enporti dokumentojn de <b>Markdown</b> aŭ <b>OPML</b>. Pandoc + povas konverti vian dokumenton al unu ajn el la du (vidu la opcion ĉi-sube), + kaj poste Manuskript enportos ĝin. Unu aŭ la alia eble donos pli bonan + rezulton, depende de via dokumento. + <br/>&nbsp; + + + + Import using: + Enporti per: + + + + Wrap lines: + Faldi liniojn: + + + + <p>Should pandoc create + cosmetic / non-semantic line-breaks?</p><p> + <b>auto</b>: wraps at 72 characters.<br> + <b>none</b>: no line wrap.<br> + <b>preserve</b>: tries to preserves line wrap from the + original document.</p> + <p> Ĉu Pandoc enmetu + ornamajn / sensignifajn linifinojn?</p><p> + <b>auto</b>: faldi liniojn ĉe 72 skribsignoj.<br> + <b>none</b>: ne faldi liniojn.<br> + <b>preserve</b>: provi konservi linifinojn de la + originala dokumento.</p> + + + + Mind Map Import + Enporti mensmapon + + + + This does not appear to be a valid Mind Map file. + Ĉi tio ŝajne ne estas valida mensmapa dosiero. + + + + Mind Map import + Enporti mensmapon + + + + Import tip as: + Enporti konsileton kiel: + + + + Untitled + Sentitola + + + + MDEditCompleter + + + Insert reference + Enmeti referencon + + + + MainWindow + + + General + Ĝenerala + + + + Title + Titolo + + + + Subtitle + Subtitolo + + + + Series + Serio + + + + Volume + Volumo + + + + Genre + Ĝenro + + + + License + Permesilo + + + + Author + Aŭtoro + + + + Name + Nomo + + + + Email + Retpoŝta adreso + + + + Summary + Resumo + + + + Situation: + Situacio: + + + + Summary: + Resumo: + + + + One sentence + Unufraze + + + + One paragraph + Unualinee + + + + One page + Unupaĝe + + + + Full + Plene + + + + One sentence summary + Unufraza resumo + + + + One paragraph summary + Unualinea resumo + + + + Expand each sentence of your one paragraph summary to a paragraph + Plilongigu ĉiun frazon de via unualinea resumo al alineo + + + + One page summary + Unupaĝa resumo + + + + Full summary + Plena resumo + + + + Next + Sekva + + + + What if...? + Kio se…? + + + + Characters + Roluloj + + + + Names + Nomoj + + + + Filter + Filtri + + + + Basic info + Bazaj informoj + + + + Importance + Graveco + + + + Motivation + Instigo + + + + Goal + Celo + + + + Conflict + Konflikto + + + + Epiphany + Ekscio + + + + <html><head/><body><p align="right">One sentence<br/>summary</p></body></html> + <html><head/><body><p align="right">Unufraza<br/>resumo</p></body></html> + + + + <html><head/><body><p align="right">One paragraph<br/>summary</p></body></html> + <html><head/><body><p align="right">Unualinea<br/>resumo</p></body></html> + + + + Notes + Notoj + + + + Detailed info + Detaloj + + + + Plots + Intrigoj + + + + Plot + Intrigo + + + + Character(s) + Rolulo(j) + + + + Description + Priskribo + + + + Result + Rezulto + + + + Resolution steps + Solvopaŝoj + + + + World + Mondo + + + + Populates with empty data + Plenigi per malplenaj datenoj + + + + More + Pli + + + + Source of passion + Fonto de pasio + + + + Source of conflict + Fonto de konflikto + + + + Outline + Skizo + + + + Editor + Redaktilo + + + + Debug + Sencimigi + + + + FlatData + FlatData + + + + Persos + Roluloj + + + + Labels + Etikedoj + + + + &File + &Dosiero + + + + &Recent + &Lastatempaj + + + + &Help + &Helpo + + + + &Tools + &Iloj + + + + &Edit + R&edakti + + + + &View + &Vidi + + + + &Mode + Reĝi&mo + + + + &Cheat sheet + &Gvidfolio + + + + Sea&rch + Se&rĉi + + + + &Navigation + &Navigi + + + + &Open + &Malfermi + + + + Ctrl+O + Ctrl+O + + + + &Save + Kon&servi + + + + Ctrl+S + Ctrl+S + + + + Sa&ve as... + Konser&vi kiel… + + + + Ctrl+Shift+S + Ctrl+Shift+S + + + + &Quit + &Forlasi + + + + Ctrl+Q + Ctrl+Q + + + + &Show help texts + Montri helpotek&ston + + + + Ctrl+Shift+B + Ctrl+Shift+B + + + + &Spellcheck + &Literumilo + + + + F9 + F9 + + + + &Labels... + &Etikedoj… + + + + &Status... + &Stato… + + + + Tree + Arbo + + + + &Simple + &Simpla + + + + &Fiction + &Fikcio + + + + Index cards + Indekskartoj + + + + S&ettings + &Agordoj + + + + F8 + F8 + + + + &Close project + &Malfermi projekton + + + + Co&mpile + &Elporti + + + + F6 + F6 + + + + &Frequency Analyzer + O&ftecanalizilo + + + + Book information + Informoj pri libro + + + + &About + &Pri + + + + About Manuskript + Pri Manuskript + + + + Manuskript + Manuskript + + + + Project {} saved. + Projekto {} konserviĝis. + + + + WARNING: Project {} not saved. + AVERTO: Projekto {} ne konservita. + + + + Project {} loaded. + Projekto {} ŝargiĝis. + + + + Project {} loaded with some errors: + Projekto {} ŝargiĝis malgraŭ eraroj: + + + + * {} wasn't found in project file. + * {} ne troviĝis en la projekta dosiero. + + + + Project {} loaded with some errors. + Ŝargiĝis projekto {} malgraŭ eraroj. + + + + (~{} pages) + (~{} paĝoj) + + + + Words: {}{} + Vortoj: {}{} + + + + Book summary + Resumo de libro + + + + Project tree + Projektarbo + + + + Metadata + Metadatenoj + + + + Story line + Intrigo + + + + Enter information about your book, and yourself. + Tajpu informojn pri via libro kaj vi mem. + + + + 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 baza situacio, en la formo de demando «Kio se…?». Ekz.: «Kio se la plej danĝera + malbona sorĉisto ne povis mortigi bebon?» (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. + Pripensu unufrazan (proksimume 50-vortan) resumon de via libro. Poste plilongigu ĝin al + alineo, poste al paĝo, poste al plena resumo. + + + + Create your characters. + Kreu viajn rolulojn. + + + + Develop plots. + Disvolvu intrigojn. + + + + Build worlds. Create hierarchy of broad categories down to specific details. + Konstruu mondojn. Kreu hierarkion de larĝaj kategorioj ĝis specifaj detaloj. + + + + Create the outline of your masterpiece. + Kreu la skizon de via ĉefverko. + + + + Write. + Verku. + + + + Debug info. Sometimes useful. + Informoj por cimtrovado. Kelkfoje utilaj. + + + + Dictionary + Vortaro + + + + Nothing + Nenio + + + + POV + Perspektivo + + + + Label + Etikedo + + + + Progress + Progreso + + + + Compile + Elporti + + + + Icon color + Koloro de piktogramo + + + + Text color + Koloro de teksto + + + + Background color + Fonkoloro + + + + Icon + Piktogramo + + + + Text + Teksto + + + + Background + Fono + + + + Border + Rando + + + + Corner + Angulo + + + + Add plot step + Enmeti paŝon de intrigo + + + + &Import… + &Enporti… + + + + F7 + F7 + + + + &Copy + &Kopii + + + + Ctrl+C + Ctrl+C + + + + C&ut + &Eltondi + + + + Ctrl+X + Ctrl+X + + + + &Paste + &Alglui + + + + Ctrl+V + Ctrl+V + + + + &Split… + &Dividi… + + + + Ctrl+Shift+K + Ctrl+Shift+K + + + + Sp&lit at cursor + &Dividi ĉe kursoro + + + + Ctrl+K + Ctrl+K + + + + Ctrl+M + Ctrl+M + + + + Ctrl+D + Ctrl+D + + + + Del + Del + + + + &Move Up + &Movi supren + + + + Ctrl+Shift+Up + Ctrl+Shift+Up + + + + M&ove Down + M&ovi malsupren + + + + Ctrl+Shift+Down + Ctrl+Shift+Down + + + + Dupl&icate + Duobl&igi + + + + &Delete + &Forigi + + + + &Rename + Ŝanĝi &nomon + + + + F2 + F2 + + + + Organi&ze + Organi&zi + + + + M&erge + &Kunfandi + + + + &Format + &Aranĝi + + + + &Header + Sekci&titolo + + + + &Level 1 (setext) + Nive&lo 1 (setext) + + + + Ctrl+Alt+1 + Ctrl+Alt+1 + + + + Level &2 + Nivelo &2 + + + + Ctrl+Alt+2 + Ctrl+Alt+2 + + + + Level &1 (atx) + Nivelo &1 (atx) + + + + Ctrl+1 + Ctrl+1 + + + + L&evel 2 + Niv&elo 2 + + + + Ctrl+2 + Ctrl+2 + + + + Level &3 + Nivelo &3 + + + + Ctrl+3 + Ctrl+3 + + + + Level &4 + Nivelo &4 + + + + Ctrl+4 + Ctrl+4 + + + + Level &5 + Nivelo &5 + + + + Ctrl+5 + Ctrl+5 + + + + Level &6 + Nivelo &6 + + + + Ctrl+6 + Ctrl+6 + + + + &Bold + &Grasa + + + + Ctrl+B + Ctrl+B + + + + &Italic + Obl&ikva + + + + Ctrl+I + Ctrl+I + + + + &Strike + Tra&strekita + + + + &Verbatim + &Laŭliteraĵo + + + + Su&perscript + Su&pra indico + + + + Ctrl++ + Ctrl++ + + + + Subsc&ript + Malsup&ra indico + + + + Ctrl+- + Ctrl+- + + + + Co&mment block + Ko&mentigi blokon + + + + Ctrl+Shift+C + Ctrl+Shift+C + + + + Clear &formats + &Senigi tekstan aranĝon + + + + Ctrl+0 + Ctrl+0 + + + + &Comment line(s) + &Komentigi linio(j)n + + + + &Ordered list + &Ordita listo + + + + &Unordered list + &Neordita listo + + + + B&lockquote + Citob&loko + + + + Remove selected plot step(s) + Forigi elektita(j)n paŝo(j)n de intrigo + + + + The file {} does not exist. Has it been moved or deleted? + La dosiero {} ne ekzistas. Ĉu ĝi estas movita aŭ forigita? + + + + Install {}{} to use spellcheck + Instalu {}{} por literumilo + + + + {} has no installed dictionaries + Instalitaj vortaroj mankas al {} + + + + {}{} is not installed + {}{} ne estas instalita + + + + Save project? + Ĉu konservi projekton? + + + + Save changes to project "{}" before closing? + Ĉu konservi ŝanĝojn al projekto «{}» antaŭ ol fermi? + + + + Your changes will be lost if you don't save them. + Viaj ŝanĝoj perdiĝos se vi ne konservos ilin. + + + + PyQt / Qt versions 5.11 and 5.12 are known to cause a crash which might result in a loss of data. + Versioj 5.11 kaj 5.22 de PyQt / Qt kaŭzas kolapson kaj eblan perdon de datenoj. + + + + PyQt {} and Qt {} are in use. + PyQt {} kaj Qt {} estas uzataj. + + + + Proceed with import at your own risk + Enportu je via propra risko + + + + Settings + + + Settings + Agordoj + + + + General + Ĝenerala + + + + Revisions + Revizioj + + + + Views + Vidoj + + + + Labels + Etikedoj + + + + Status + Stato + + + + Fullscreen + Plenekrane + + + + General settings + Ĝeneralaj agordoj + + + + Application settings + Agordoj pri la progamo + + + + Loading + Ŝargante + + + + Automatically load last project on startup + Aŭtomate ŝargi la lastan projekton dum lanĉo + + + + Saving + Konservante + + + + Automatically save every + Aŭtomate konservi po unu fojo en + + + + minutes. + minutoj. + + + + If no changes during + Se ŝanĝoj ne okazas dum + + + + seconds. + sekundoj. + + + + Save on project close + Konservi dum fermo de projekto + + + + <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 vi elektus ĉi tiun opcion, via projekto estus konservita kiel unu sola dosiero, pli facile (sav)kopiebla; sed tio ne permesus kunlaboran redaktadon aŭ versikontroladon.<br/>Se vi ne elektus ĉi tiun opcion, via projekto estus konservita kiel dosierujo enhavanta multajn malgrandajn dosierojn.</p></body></html> + + + + Save to one single file + Konservi sur unu solan dosieron + + + + 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. + Revizioj estas metodo spuri modifojn. Por ĉiu teksta ero, ĝi konservas iujn ajn ŝanĝojn faritajn al la ĉefteksto, permesante al vi vidi kaj restaŭri antaŭajn versiojn. + + + + Keep revisions + Konservi reviziojn + + + + S&mart remove + Saĝe &forigi + + + + Keep: + Konservi: + + + + 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. + Saĝa forigado permesas konservi nur kelke da revizioj. Estas rekomendegite uzi ĝin, por ke vi ne konservadu milojn da sensignifaj ŝanĝoj. + + + + revisions per day for the last month + reviziojn por ĉiu tago en la lasta monato + + + + revisions per minute for the last 10 minutes + reviziojn por ĉiu minuto el la lastaj 10 minutoj + + + + revisions per hour for the last day + reviziojn por ĉiu horo en la lasta tago + + + + revisions per 10 minutes for the last hour + reviziojn por ĉiu minutdeko en la lasta horo + + + + revisions per week till the end of time + reviziojn por ĉiu semajno + + + + Views settings + Agordoj pri vido + + + + Tree + Arbo + + + + Colors + Koloroj + + + + Icon color: + Koloro de piktogramo: + + + + Nothing + Nenio + + + + POV + Perspektivo + + + + Label + Etikedo + + + + Progress + Progreso + + + + Compile + Elporti + + + + Text color: + Tekstkoloro: + + + + Background color: + Fonkoloro: + + + + Folders + Dosierujoj + + + + Show ite&m count + &Montri nombron de eroj + + + + Show summary + Montri resumon + + + + &Nothing + &Nenio + + + + Text + Teksto + + + + Outline + Skizo + + + + Visible columns + Videblaj kolumnoj + + + + Goal + Celo + + + + Word count + Nombro de vortoj + + + + Percentage + Procento + + + + Title + Titolo + + + + Index cards + Indekskartoj + + + + Item colors + Koloroj de eroj + + + + Border color: + Koloro de rando: + + + + Corner color: + Koloro de angulo: + + + + Background + Fono + + + + Color: + Koloro: + + + + Ctrl+S + Ctrl+S + + + + Image: + Bildo: + + + + Text editor + Tekstredaktilo + + + + Font + Tiparo + + + + Family: + Familio: + + + + Size: + Grando: + + + + Misspelled: + Ortografia misaĵo: + + + + Background: + Fono: + + + + Paragraphs + Alineoj + + + + Line spacing: + Spaco inter linioj: + + + + Single + Unuobla + + + + 1.5 lines + 1,5-obla + + + + Double + Duobla + + + + Proportional + Proporcia + + + + % + % + + + + Tab width: + Tabeliga larĝo: + + + + px + bildero(j) + + + + Indent 1st line + Deŝovi la unuan linion + + + + Spacing: + Spaco: + + + + New + Nova + + + + Edit + Redakti + + + + Delete + Forigi + + + + Theme name: + Nomo de etoso: + + + + Apply + Efektivigi + + + + Cancel + Nuligi + + + + Window Background + Fenestra fono + + + + Text Background + Teksta fono + + + + Text Options + Opcioj pri teksto + + + + Paragraph Options + Opcioj pri alineo + + + + Type: + Tipo: + + + + No Image + Sen bildo + + + + Tiled + Kahelita + + + + Centered + Centrita + + + + Stretched + Streĉita + + + + Scaled + Skale aligrandigita + + + + Zoomed + Zomita + + + + Opacity: + Opakeco: + + + + Position: + Pozicio: + + + + Left + Maldekstra + + + + Center + Centra + + + + Right + Dekstra + + + + Width: + Larĝo: + + + + Corner radius: + Angulradiuso: + + + + Margins: + Marĝenoj: + + + + Padding: + Ena marĝeno: + + + + Font: + Tiparo: + + + + Style + Stilo + + + + Cursor + Kursoro + + + + Use block insertion of + Bloka kursoro de + + + + Alignment: + Rektigi: + + + + Justify + Ambaŭrande + + + + Alignment + Rektigo + + + + Icon Size + Grando de piktogramo + + + + TextLabel + Teksta etikedo + + + + Disable blinking + Malŝalti blinkadon + + + + Text area + Tekstareo + + + + Max width + Maksimuma larĝo + + + + Left/Right margins: + Maldekstra/dekstra marĝenoj: + + + + Top/Bottom margins: + Supra/malsupra marĝenoj: + + + + S&how progress + Montri &progreson + + + + Show summar&y + Montri r&esumon + + + + Show p&rogress + Montri p&rogreson + + + + Old st&yle + Malnovst&ila + + + + Transparent + Travidebla + + + + Restore defaults + Ŝanĝi al la implicitaj valoroj + + + + Style: + Stilo: + + + + Language: + Lingvo: + + + + Font size: + Tipargrando: + + + + Restarting Manuskript ensures all settings take effect. + Relanĉado de Manuskript certigos, ke ĉiuj agordoj estos efektivaj. + + + + Show &word count + &Montri la nombron de vortoj + + + + &Show word count + &Montri la nombron de vortoj + + + + &New style + &Nova stilo + + + + Typewriter mode + Skribmaŝina reĝimo + + + + Focus mode + Fokusiga reĝimo + + + + None + Nenio + + + + Sentence + Frazo + + + + Line + Linio + + + + Paragraph + Alineo + + + + <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 funkcio Revizioj estas la kaŭzo de multaj raportitaj cimoj. En ĉi tiu versio de Manuskript, ĝi estis malŝaltita implicite por novaj projektoj por la plej bona sperto.</b></p><p>Kial ĉi tiuj problemoj ne estas jam riparitaj? <a href="https://www.theologeek.ch/manuskript/contribute/">Ni bezonas vian helpon por plibonigi Manuskript!</a></p> + + + + SpellAction + + + Spelling Suggestions + Literumilaj sugestoj + + + + &Add to dictionary + Enmeti en vort&aron + + + + &Remove from custom dictionary + & Forigi el propra vortaro + + + + about + + + About Manuskript + Pri Manuskript + + + + Manuskript + Manuskript + + + + aboutDialog + + + Version + Versio + + + + Software Versions in Use: + Uzataj versioj de programoj: + + + + abstractModel + + + Title + Titolo + + + + POV + Perspektivo + + + + Label + Etikedo + + + + Status + Stato + + + + Compile + Elporti + + + + Word count + Nombro de vortoj + + + + Goal + Celo + + + + basicItemView + + + Form + Formularo + + + + POV: + Perspektivo: + + + + Goal: + Celo: + + + + Word count + Nombro de vortoj + + + + One line summary + Unulinia resumo + + + + Few sentences summary: + Kelkfraza resumo: + + + + characterModel + + + New character + Nova rolulo + + + + Name + Nomo + + + + Value + Valoro + + + + characterTreeView + + + Main + Ĉefa + + + + Secondary + Malpli grava + + + + Minor + Malgrava + + + + cheatSheet + + + Form + Formularo + + + + Filter (type the name of anything in your project) + Filtri (tajpu la nomon de io ajn en via projekto) + + + + Minor + Malgrava + + + + Secondary + Malpli grava + + + + Main + Ĉefa + + + + Characters + Roluloj + + + + Texts + Tekstoj + + + + Plots + Intrigoj + + + + World + Mondo + + + + cmbOutlineCharacterChoser + + + None + Nenio + + + + Main + Ĉefa + + + + Secondary + Malpli grava + + + + Minor + Malgrava + + + + Various + Diversaj + + + + cmbOutlineLabelChoser + + + Various + Diversaj + + + + cmbOutlineStatusChoser + + + Various + Diversaj + + + + collapsibleDockWidgets + + + Dock Widgets Toolbar + Ilobreto de endokigeblaĵoj + + + + completer + + + Form + Formularo + + + + corkDelegate + + + One line summary + Unulinia resumo + + + + Full summary + Plena resumo + + + + editorWidget_ui + + + Form + Formularo + + + + exporter + + + Export + Elporti + + + + Export to: + Elporti al: + + + + Manage exporters + Administri elportilojn + + + + Preview + Antaŭrigardi + + + + Settings + Agordoj + + + + exporterDialog + + + {} (not implemented yet) + {} (ankoraŭ ne efektiva) + + + + exporterSettings + + + Form + Formularo + + + + Content + Enhavo + + + + Decide here what will be included in the final export. + Ĉi tie decidu tion, kio inkluziviĝos en la neta elportaĵo. + + + + Type + Tipo + + + + Title + Titolo + + + + Text + Teksto + + + + I need more granularity + Mi bezonas pli da opcioj + + + + Fi&lters + Fi&ltriloj + + + + <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>Filtras la erojn inkluzivotaj en la neta elportaĵo.<br/><span style=" color:#773333;">(Ankoraŭ ne plene efektivigita.)</span></p></body></html> + + + + Ignore compile status (include all items) + Ignori elportitecon (inkluzivi ĉion) + + + + Subitems of: + Suberoj de: + + + + Labels + Etikedoj + + + + Status + Stato + + + + Separations + Apartigiloj + + + + Between folders: + Inter dosierujoj: + + + + Empty line + Malplena linio + + + + Custom + Propra + + + + Between texts: + Inter tekstoj: + + + + Between folder and text: + Inter dosierujo kaj teksto: + + + + Between text and folder: + Inter teksto kaj dosierujo: + + + + Transformations + Transformado + + + + Typographic replacements: + Tipografiaj anstataŭigoj: + + + + Replace double quotes (") with: + Anstataŭigi Askiajn duoblajn citilojn (") per: + + + + Replace single quotes (') with: + Anstataŭigi Askiajn unuoblajn citilojn (') per: + + + + Remove multiple spaces + Forigi pluroblajn spacetojn + + + + Custom replacements: + Propraj anstataŭigoj: + + + + Enabled + Ŝaltita + + + + Replace + Anstataŭigi + + + + With + per + + + + RegExp + Regula esprimo + + + + If checked, uses regular expression for replacement. If unchecked, replaced as plain text. + Se markita, uzi regulan esprimon por anstataŭigo. Se ne, anstataŭigi kiel simplan tekston. + + + + Preview + Antaŭrigardo + + + + Font + Tiparo + + + + Font: + Tiparo: + + + + Font size: + Tipargrando: + + + + Folder + Dosierujo + + + + {}Level {} folder + {}Dosierujo de nivelo {} + + + + {}Level {} text + {}Teksto de nivelo {} + + + + Replace ... with … + Anstataŭigi tri punktojn (...) per tripunkto (…) + + + + Replace --- with — + Anstataŭigi tri dividstrekojn (---) per haltostreko (—) + + + + exportersManager + + + Installed + Instalita + + + + Custom + Propra + + + + Not found + Ne trovita + + + + {} not found. Install it, or set path manually. + {} ne troviĝis. Instalu ĝin aŭ agordu dosierindikon permane. + + + + <b>Status:</b> uninstalled. + <b>Stato:</b> malinstalita. + + + + <b>Requires:</b> + <b>Postulas:</b> + + + + Set {} executable path. + Agordi lokon de la ruleblaĵo «{}». + + + + frequencyAnalyzer + + + Phrases + Frazelementoj + + + + Frequency + Ofteco + + + + Word + Vorto + + + + fullScreenEditor + + + Theme: + Etoso: + + + + {} words / {} + {} vortoj / {} + + + + {} words + {} vortoj + + + + Spellcheck + Literumilo + + + + Navigation + Navigado + + + + New Text + Nova teksto + + + + Title + Titolo + + + + Title: Show Full Path + Titolo: montri plenan dosierindikon + + + + Theme selector + Elektilo de etoso + + + + Word count + Nombro de vortoj + + + + Progress + Progreso + + + + Progress: Auto Show/Hide + Progreso: aŭtomate (mal)kaŝi + + + + Clock + Horloĝo + + + + Clock: Show Seconds + Horloĝo: montri sekundojn + + + + generalSettings + + + General + Ĝenerala + + + + Split scenes at: + Dividi scenojn ĉe: + + + + \n---\n + \n---\n + + + + Trim long titles (> 32 chars) + Mallongigi longajn titolojn (pli longajn ol 32 skribsignojn) + + + + Import under: + Enporti sub: + + + + Import in a top-level folder + Enporti en supranivelan dosierujon + + + + helpLabel + + + If you don't wanna see me, you can hide me in Help menu. + Se vi ne volas vidi min, vi povas kaŝi min per la menuo «Helpo». + + + + importer + + + Import + Enporti + + + + Format: + Dosierformo: + + + + Choose file + Elekti dosieron + + + + Clear file + Malelekti dosieron + + + + Preview + Antaŭrigardi + + + + Settings + Agordoj + + + + lastAccessedDirectoryInfo + + + Last accessed directory "{}" loaded. + Ŝargiĝis la laste uzita dosierujo «{}». + + + + lineEditView + + + Various + Diversaj + + + + locker + + + Form + Formularo + + + + Lock screen: + Ŝlosekrano: + + + + Word target + Celata nombro de vortoj + + + + Time target + Celata daŭro + + + + words + vortoj + + + + minutes + minutoj + + + + Lock ! + Ŝlosi! + + + + ~{} h. + ~{} h + + + + ~{} mn. + ~{} min + + + + {}:{} + {}:{} + + + + {} s. + {} s + + + + {} remaining + {} restas + + + + {} words remaining + {} vortoj restas + + + + mainEditor + + + Form + Formularo + + + + Text + Teksto + + + + Index cards + Indekskartoj + + + + Outline + Skizo + + + + F11 + F11 + + + + Go to parent item + Iri al patra ero + + + + Alt+Up + Alt+Up + + + + Root + Radiko + + + + {} words / {} + {} vortoj / {} + + + + {} words + {} vortoj + + + + markdownSettings + + + Markdown + Markdown + + + + metadataView + + + Form + Formularo + + + + Properties + Atributoj + + + + Summary + Resumo + + + + One line summary + Unulinia resumo + + + + Full summary + Plena resumo + + + + Notes / References + Notoj / referencoj + + + + Revisions + Revizioj + + + + myPanel + + + Auto-hide + Aŭtomate kaŝi + + + + outlineBasics + + + Set POV + Agordi perspektivon + + + + None + Nenio + + + + Set Status + Agordi staton + + + + Set Label + Fiksi etikedon + + + + New + Nova + + + + Main + Ĉefa + + + + Secondary + Malpli grava + + + + Minor + Malgrava + + + + Set Custom Icon + Agordi propran piktogramon + + + + Restore to default + Ŝanĝi al la implicita + + + + Root + Radiko + + + + Open {} items in new tabs + Malfermi {} erojn en novaj langetoj + + + + Open {} in a new tab + Malfermi {} en nova langeto + + + + About to remove + Forigonta + + + + <p><b>You're about to delete {} item(s).</b></p><p>Are you sure?</p> + <p><b>Vi estas forigonta {} ero(j)n.</b></p><p>Ĉu vi certas?</p> + + + + Select at least two items. Folders are ignored. + Elektu almenaŭ du erojn. Dosierujoj estas ignorataj. + + + + All items must be on the same level (share the same parent). + Ĉiuj eroj devas esti samnivelaj (idoj de unu patro). + + + + New &Folder + Nova &dosierujo + + + + New &Text + Nova &teksto + + + + &Copy + &Kopii + + + + C&ut + &Eltondi + + + + &Paste + &Alglui + + + + &Rename + Ŝanĝi &nomon + + + + &Delete + &Forigi + + + + outlineCharacterDelegate + + + None + Nenio + + + + Main + Ĉefa + + + + Secondary + Malpli grava + + + + Minor + Malgrava + + + + outlineItem + + + {} words / {} ({}) + {} vortoj / {} ({}) + + + + {} words + {} vortoj + + + + pandocSettings + + + General + Ĝenerala + + + + Table of Content + Enhavtabelo + + + + Custom settings for {} + Propraj agordoj pri {} + + + + persosProxyModel + + + Main + Ĉefa + + + + Secondary + Malpli grava + + + + Minors + Malgravaj + + + + plotDelegate + + + General + Ĝenerala + + + + Promise + Promeso + + + + Problem + Problemo + + + + Progress + Progreso + + + + Resolution + Solvo + + + + Try / Fail + Provi / malsukcesi + + + + No and + Ne, kaj + + + + Yes but + Jes, sed + + + + Freytag's pyramid + Piramido de Freytag + + + + Exposition + Klarigo + + + + Rising action + Kreskanta agado + + + + Climax + Klimakso + + + + Falling action + Malkreskanta agado + + + + Three acts + Tri aktoj + + + + 1. Setup + 1. Komenco + + + + 1. Inciting event + 1. Transpaŝo de la sojlo + + + + 1. Turning point + 1. Turnopunkto + + + + 2. Choice + 2. Elekto + + + + 2. Reversal + 2. Renverso + + + + 2. Disaster + 2. Katastrofo + + + + 3. Stand up + 3. Restariĝo + + + + 3. Climax + 3. Klimakso + + + + 3. Ending + 3. Fino + + + + Hero's journey + Vojaĝo de la heroo + + + + Ordinary world + Ordinara mondo + + + + Call to adventure + Voko al aventuro + + + + Refusal of the call + Rifuzo de la alvoko + + + + Meeting with mentor + Renkontiĝo kun mentoro + + + + Tests + Ekzamenoj + + + + Approach + Alproksimiĝo + + + + Abyss + Abismo + + + + Reward / Revelation + Rekompenco / rivelo + + + + Transformation + Transformiĝo + + + + Atonement + Rebonigo + + + + Return + Reveno + + + + plotModel + + + New plot + Nova intrigo + + + + Name + Nomo + + + + Meta + Metainformoj + + + + New step + Nova paŝo + + + + Main + Ĉefa + + + + Secondary + Malpli grava + + + + Minor + Malgrava + + + + plotTreeView + + + Main + Ĉefa + + + + Secondary + Malpli grava + + + + Minor + Malgrava + + + + **Plot:** {} + **Intrigo:** {} + + + + plotsProxyModel + + + Main + Ĉefa + + + + Secondary + Malpli grava + + + + Minors + Malgravaj + + + + propertiesView + + + Form + Formularo + + + + POV + Perspektivo + + + + Status + Stato + + + + Label + Etikedo + + + + Compile + Elporti + + + + Goal + Celo + + + + Word count + Nombro de vortoj + + + + references + + + Not a reference: {}. + Ne estas referenco: {}. + + + + Unknown reference: {}. + Nekonata referenco: {}. + + + + Path: + Dosierindiko: + + + + Stats: + Statistikoj: + + + + POV: + Perspektivo: + + + + Status: + Stato: + + + + Label: + Etikedo: + + + + Short summary: + Mallonga resumo: + + + + Long summary: + Longa resumo: + + + + Notes: + Notoj: + + + + Basic info + Bazaj informoj + + + + Detailed info + Detaloj + + + + POV of: + Perspektivo de: + + + + Go to {}. + Iri al {}. + + + + Description + Priskribo + + + + Result + Rezulto + + + + Characters + Roluloj + + + + Resolution steps + Solvopaŝoj + + + + Passion + Pasio + + + + Conflict + Konflikto + + + + <b>Unknown reference:</b> {}. + <b>Nekonata referenco:</b> {}. + + + + Folder: <b>{}</b> + Dosierujo: <b>{}</b> + + + + Text: <b>{}</b> + Teksto: <b>{}</b> + + + + Character: <b>{}</b> + Rolulo: <b>{}</b> + + + + Plot: <b>{}</b> + Intrigo: <b>{}</b> + + + + World: <b>{name}</b>{path} + Monto: <b>{name}</b>{path} + + + + Referenced in: + Referencita en: + + + + Motivation + Instigo + + + + Goal + Celo + + + + Epiphany + Ekscio + + + + Short summary + Mallonga resumo + + + + Longer summary + Longa resumo + + + + revisions + + + Form + Formularo + + + + Options + Opcioj + + + + Restore + Restaŭri + + + + Delete + Forigi + + + + Show modifications + Montri modifojn + + + + Show ancient version + Montri malnovegan version + + + + Show spaces + Montri spacetojn + + + + Show modifications only + Montri nur modifojn + + + + {} years ago + antaŭ {} jaroj + + + + {} months ago + antaŭ {} monatoj + + + + {} days ago + antaŭ {} tagoj + + + + 1 day ago + antaŭ 1 tago + + + + {} hours ago + antaŭ {} horoj + + + + {} minutes ago + antaŭ {} minutoj + + + + {} seconds ago + antaŭ {} sekundoj + + + + Line {}: + Linio {}: + + + + Clear all + Forviŝi ĉion + + + + search + + + Form + Formularo + + + + Search for... + Serĉi… + + + + Search in: + Serĉi en: + + + + All + Ĉio + + + + Title + Titolo + + + + Text + Teksto + + + + Summary + Resumo + + + + Notes + Notoj + + + + POV + Perspektivo + + + + Status + Stato + + + + Label + Etikedo + + + + Options: + Opcioj: + + + + Case sensitive + Usklecdistinga + + + + settingsWindow + + + New status + Nova stato + + + + New label + Nova etikedo + + + + newtheme + nova etoso + + + + New theme + Nova etoso + + + + (read-only) + (nurlega) + + + + Open Image + Malfermi bildon + + + + Image files (*.jpg; *.jpeg; *.png) + Bildodosieroj (*.jpg; *.jpeg; *.png) + + + + Error + Eraro + + + + Unable to load selected file + Ne eblas ŝargi elektitan dosieron + + + + Unable to add selected image: +{} + Ne eblas enmeti elektitan bildon: +{} + + + + sldImportance + + + Form + Formularo + + + + TextLabel + Teksta etikedo + + + + Minor + Malgrava + + + + Secondary + Malpli grava + + + + Main + Ĉefa + + + + splitDialog + + + + <p>Split selected item(s) at the given mark.</p> + + <p>If one of the selected item is a folder, it will be applied + recursively to <i>all</i> of it's children items.</p> + + <p>The split mark can contain following escape sequences: + <ul> + <li><b><code>\n</code></b>: line break</li> + <li><b><code>\t</code></b>: tab</li> + </ul> + </p> + + <p><b>Mark:</b></p> + + + <p>Dividi elektitajn erojn ĉe la specifita marko.</p> + + <p>Se unu el la elektitaj eroj estas dosierujo, la divido okazos + rikure en <i>ĉiuj</i> idoj.</p> + + <p>La dividmarko povas enhavi la jenajn fuĝsekvencojn: + <ul> + <li><b><code>\n</code></b>: linifino</li> + <li><b><code>\t</code></b>: tabeligo</li> + </ul> + </p> + + <p><b>Marko:</b></p> + + + + + Split '{}' + Dividi «{}» + + + + Split items + Dividi erojn + + + + storylineView + + + Form + Formularo + + + + Show Plots + Montri intrigojn + + + + Show Characters + Montri rolulojn + + + + tabSplitter + + + Open selected items in that view. + Malfermi elektitajn erojn en tiu vido. + + + + Split horizontally + Dividi horizontale + + + + Close split + Fermi dividaĵon + + + + Split vertically + Dividi vertikale + + + + textEditView + + + Various + Diversaj + + + + textFormat + + + Form + Formularo + + + + CTRL+B + CTRL+B + + + + 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 + + + + treeView + + + Expand {} + Malkaŝi {} + + + + Collapse {} + Kaŝi {} + + + + Expand All + Malkaŝi ĉion + + + + Collapse All + Kaŝi ĉion + + + + welcome + + + Form + Formularo + + + + 1 + 1 + + + + Templates + Ŝablonoj + + + + Empty + Malplena + + + + Novel + Romano + + + + Novella + Romaneto + + + + Short Story + Novelo + + + + Research paper + Scienca artikolo + + + + Demo projects + Ekzemplaj projektoj + + + + Add level + Aldoni nivelon + + + + Add word count + Enmeti nombron de vortoj + + + + Next time, automatically open last project + Poste, aŭtomate malfermi la lastan projekton + + + + Open... + Malfermi… + + + + Recent + Lastatempaj + + + + Create + Krei + + + + Open project + Malfermi projekton + + + + Manuskript project (*.msk);;All files (*) + Manuskript-projekto (*.msk);;Ĉiuj dosieroj (*) + + + + Save project as... + Konservi projekton kiel… + + + + Manuskript project (*.msk) + Manuskript-projekto (*.msk) + + + + Manuskript + Manuskript + + + + Create New Project + Krei novan projekton + + + + Warning + Averto + + + + Overwrite existing project {} ? + Ĉu superskribi super ekzistantan projekton {}? + + + + Empty fiction + Malplena fikcio + + + + Chapter + Ĉapitro + + + + Scene + Sceno + + + + Trilogy + Trilogio + + + + Book + Libro + + + + Section + Sekcio + + + + Empty non-fiction + Malplena nefikcio + + + + words each. + vortoj. + + + + of + de + + + + Text + Teksto + + + + Something + Io + + + + <b>Total:</b> {} words (~ {} pages) + <b>Entute:</b> {} vortoj (~ {} paĝoj) + + + + Fiction + Fikcio + + + + Non-fiction + Nefikcio + + + + Idea + Ideo + + + + Note + Noto + + + + Research + Informokolektado + + + + TODO + FARENDA + + + + First draft + Unua malneto + + + + Second draft + Dua malneto + + + + Final + Neto + + + + worldModel + + + New item + Nova ero + + + + Fantasy world building + Konstruado de fantasta mondo + + + + Physical + Fizika + + + + Climate + Klimato + + + + Topography + Topografio + + + + Astronomy + Astronomio + + + + Wild life + Faŭno + + + + Flora + Flaŭro + + + + History + Historio + + + + Races + Rasoj + + + + Diseases + Malsanoj + + + + Cultural + Kultura + + + + Customs + Kutimoj + + + + Food + Manĝo + + + + Languages + Lingvoj + + + + Education + Eduko + + + + Dresses + Vesto + + + + Science + Scienco + + + + Calendar + Kalendaro + + + + Bodily language + Korpolingvo + + + + Ethics + Etiko + + + + Religion + Religio + + + + Government + Registaro + + + + Politics + Politiko + + + + Gender roles + Seksroloj + + + + Music and arts + Muziko kaj artoj + + + + Architecture + Arkitekturo + + + + Military + Milito + + + + Technology + Tekniko + + + + Courtship + Amindumado + + + + Demography + Demografio + + + + Transportation + Transporto + + + + Medicine + Medicino + + + + Magic system + Magisistemo + + + + Rules + Reguloj + + + + Organization + Organizo + + + + Magical objects + Magiaĵoj + + + + Magical places + Magiejoj + + + + Magical races + Magiuloj + + + + Important places + Gravaj lokoj + + + + Important objects + Gravaj objektoj + + + + Natural resources + Resursoj + + + diff --git a/i18n/manuskript_es.qm b/i18n/manuskript_es.qm index 70c4232..c64724e 100644 Binary files a/i18n/manuskript_es.qm and b/i18n/manuskript_es.qm differ diff --git a/i18n/manuskript_es.ts b/i18n/manuskript_es.ts index dbdd1c2..1ea5ad4 100644 --- a/i18n/manuskript_es.ts +++ b/i18n/manuskript_es.ts @@ -1,230 +1,6 @@ - - - Export - - - Default exporter, provides basic formats used by other exporters. - Exportador por defecto, proporciona los formatos básicos que utilizan otros exportadores. - - - - Basic HTML output using the Python module 'markdown'. - Salida en HTML básico que utiliza el módulo de python 'markdown'. - - - - Python module 'markdown'. - módulo de python 'markdown'. - - - - A little known format modestly used. You know, web sites for example. - 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> - - <p>Convertidor de documentos universal. Se puede utilizar para convertir markdown a un amplio - conjunto de otros formatos.</p> - <p>Sede: <a href="http://www.pandoc.org">http://pandoc.org/</a></p> - - - - - Just like plain text, excepts adds markdown titles. - Presupposes that texts are formatted in markdown. - Es como el texto plano, excepto que añade títulos de markdown. - Presupone que el texto está formateado en markdown. - - - - Preview with highlighter. - 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, - no conocido por manuskript. Por ejemplo <a href='www.fountain.io'>Fountain</a>. - - - - Markdown source - Fuente Markdown - - - - HTML Source - Fuente HTML - - - - HTML Output - Salida HTML - - - - Chose output file... - Selecciona el fichero de salida... - - - - Error - Error - - - - Books that don't kill trees. - Libros que no matan árboles. - - - - OpenDocument format. Used by LibreOffice for example. - Formato OpenDocument. Utilizado por LibreOffice, por ejemplo. - - - - Microsoft Office (.docx) document. - Documento en formato de Microsoft Office (.docx). - - - - Needs LaTeX to be installed. - Necesita que LaTeX esté instalado. - - - - Export to markdown, using pandoc. Allows more formatting options - than the basic manuskript exporter. - Exportar a markdown utilizando pandoc. Permite más opciones de formateo - que el exportador básico de manuskript. - - - - reStructuredText is a lightweight markup language. - reStructuredText es un lenguaje de marcado ligero... - - - - LaTeX is a word processor and document markup language used to create - beautiful documents. - LaTeX es un procesador de texto y lenguaje de marcado de documentos utilizado - 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: - - - - 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. - una instalación de latex válida. Vea las recomendaciones de pandoc en: - <a href="http://pandoc.org/installing.html">http://pandoc.org/installing.html</a>. Si desea soporte unicode, necesitará xelatex. - - - - The purpose of this format is to provide a way to exchange information - between outliners and Internet services that can be browsed or controlled - through an outliner. - El propósito de este formato es proporcionar una manera de intercambiar información - entre outliners y servicios de Internet que puedan ser explorados - 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 - - + + ExportersManager @@ -283,7 +59,7 @@ Use that if you get YAML related error. Frequency Analyzer - Analizador de Frecuencias + Analizador de frecuencias @@ -303,7 +79,7 @@ Use that if you get YAML related error. Exclude words (comma separated): - Palabras a excluir (separadas por comas): + Palabras a excluir (separadas por comas): @@ -318,7 +94,7 @@ Use that if you get YAML related error. Number of words: from - Numero de palabras: desde + Número de palabras: desde @@ -326,150 +102,10 @@ Use that if you get YAML related error. hasta - - 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; - <b>Info:</b> Un analizador muy sencillo - que recorre un documento markdown y crea - 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) - are added as scene.</p> - <p>Only text files are supported (not images, binary or others).</p> - <p><b>Info:</b> Importa la estructura - completa de un directorio. Las carpetas se añaden como carpetas, y - los ficheros de texto plano contenidos (eliges cuales por su extensión) - se añaden como escenas.</p> - <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 - 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 puede - importar desde <b>markdown</b> u <b>OPML</b>. Pandoc convertirá - tu documento a uno de ellos (ver la opción de debajo), y - después se importará en manuskript. Dependiendo de tu documento - podrías obtener mejores resultados con uno u otro. - <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> - <b>none</b>: no line wrap.<br> - <b>preserve</b>: tries to preserves line wrap from the - original document.</p> - <p>¿Debería insertar pandoc - saltos de línea cosméticos / no-semánticos?</p><p> - <b>auto</b>: salto a los 72 caracteres.<br> - <b>none</b>: sin ajuste de línea.<br> - <b>preserve</b>: intenta conservar los ajustes de línea del - 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 - - MDEditCompleter - + Insert reference Insertar referencia @@ -477,968 +113,1111 @@ Use that if you get YAML related error. MainWindow - + General General - + Title Título - + Subtitle Subtítulo - + Series Serie - + Volume Volumen - + Genre Género - + License Licencia - + Author Autor - + Name Nombre - + Email - Email + Correo electrónico - + Summary Resumen - + Situation: Situación: - + Summary: Resumen: - + One sentence Una frase - + One paragraph Un párrafo - + One page Una página - + Full Completo - + One sentence summary Resumen de una frase - + One paragraph summary Resumen de un párrafo - + Expand each sentence of your one paragraph summary to a paragraph - En tu resumen de un párrafo expande cada frase en un párrafo + En su resumen de un párrafo, expanda cada frase en un párrafo - + One page summary Resumen de una página - + Full summary Resumen completo - + Next Siguiente - + What if...? - Qué pasaría si...? + ¿Qué pasaría si...? - + Characters Personajes - + Names Nombres - + Filter Filtro - + Basic info - Informaciónes básicas + Información básica - + 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 + Información detallada - + 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 + Persos - + 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... + G&uardar como... - + Ctrl+Shift+S - Ctrl+Shift+S + Ctrl+Mayús+S - + &Quit &Cerrar - + Ctrl+Q Ctrl+Q - + &Show help texts - &Ver textos de ayuda + &Mostrar textos de ayuda - + Ctrl+Shift+B - Ctrl+Shift+B + Ctrl+Mayús+B - + &Spellcheck - &Corrector Ortográfico + &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. + Introduzca información acerca de su libro y sobre sí 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) + 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 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. - 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. + Tómese su tiempo para pensar en resumen de una línea (aproximadamente 50 palabras) de su libro. Después, expándalo hasta + un párrafo, después hasta una página y, por último, hasta un resumen completo. - + Create your characters. - Crea tus personajes. + Cree sus personajes. - + Develop plots. - Desarrolla las tramas. + Desarrolle las tramas. - + Create the outline of your masterpiece. - Crea el esquema de tu obra maestra. + Cree el esquema de su obra maestra. - + Write. - Escribe. + Escriba. - + Debug info. Sometimes useful. - Depura la información. A veces es útil. + Información de depuración. A veces es útil. - + Dictionary Diccionario - - Install PyEnchant to use spellcheck - Instala PyEnchant para usar el chequeo ortográfico - - - + Nothing Ninguno - + POV - + Punto de vista - + Label Etiqueta - + Progress Progreso - + Compile Compilar - + Icon color Color del icono - + Text color Color del texto - + Background color - Color del Fondo + Color del fondo - + Icon Icono - + Text Texto - + Background Fondo - + Border Borde - + Corner Esquina - + &Edit &Editar - + Book information - Informaciones del libro + Información 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. + Construir mundos. Crear una jerarquía desde categorías amplias hasta detalles específicos. - + Add plot step - Añadir un paso a la trama (CTRL+Intro) + 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… + &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 + &Subir - + Ctrl+Shift+Up Ctrl+Mayús+Arriba - + M&ove Down - Bajar + &Bajar - + Ctrl+Shift+Down Ctrl+Mayús+Abajo - + Dupl&icate Dupl&icar - + &Delete - Eliminar + &Eliminar - + &Rename &Renombrar - + F2 F2 - + Organi&ze Organi&zar - + M&erge - Combinar + &Combinar - + &Format - + &Formato - + &Header - + &Encabezado - + &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 - + &Nivel 1 (setext) - Level &4 - + Ctrl+Alt+1 + Ctrl+Alt+1 - - Ctrl+4 - + + Level &2 + Nivel &2 - Level &5 - + Ctrl+Alt+2 + Ctrl+Alt+2 - - Ctrl+5 - + + Level &1 (atx) + Nivel &1 (atx) - Level &6 - + Ctrl+1 + Ctrl+1 - - Ctrl+6 - + + L&evel 2 + N&ivel 2 - - &Bold - + + Ctrl+2 + Ctrl+2 - - Ctrl+B - + + Level &3 + Nivel &3 + + + + Ctrl+3 + Ctrl+3 + + + + Level &4 + Nivel &4 - &Italic - + Ctrl+4 + Ctrl+4 - - Ctrl+I - + + Level &5 + Nivel &5 - - &Strike - + + Ctrl+5 + Ctrl+5 - - &Verbatim - + + Level &6 + Nivel &6 - - Su&perscript - + + 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+- - - - - - Co&mment block - - - - - Ctrl+Shift+C - - - - - Clear &formats - - - - - Ctrl+0 - - - - - &Comment line(s) - - - - - &Ordered list - + Ctrl+- + Co&mment block + Co&mentario en bloque + + + + Ctrl+Shift+C + Ctrl+Mayús+C + + + + Clear &formats + Eliminar &formatos + + + + Ctrl+0 + Ctrl+0 + + + + &Comment line(s) + &Línea(s) de comentario(s) + + + + &Ordered list + &Lista ordenada + + + &Unordered list - + &Lista no ordenada - + B&lockquote - + C&ita en bloque - + Remove selected plot step(s) - + Eliminar paso(s) seleccionado(s) 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 + Instale {}{} para usar el corrector ortográfico + + + + {} has no installed dictionaries + {} no tiene diccionarios instalados + + + + {}{} is not installed + {}{} no está instalado + + + + Save project? + ¿Guardar el proyecto? + + + + Save changes to project "{}" before closing? + ¿Guardar cambios en el proyecto «{}» antes de salir? + + + + Your changes will be lost if you don't save them. + Sus cambios se perderán si no los guarda. + + + + PyQt / Qt versions 5.11 and 5.12 are known to cause a crash which might result in a loss of data. + Se conoce que las versiones PyQt / Qt 5.11 y 5.12 pueden causar errores que resulten en pérdida de datos. + + + + PyQt {} and Qt {} are in use. + PyQt {} y Qt {} están en uso. + + + + Proceed with import at your own risk + Proceda con la importación bajo su propio riesgo + + + + Allow POV + Permitir POV + + + + Search + Buscar + + + + Ctrl+F + Ctrl+F + + + + &Technical Support + &Soporte técnico + + + + How to obtain technical support for Manuskript. + Cómo obtener soporte técnico para Manuskript. + + + + F1 + F1 + + + + &Locate log file... + &Abrir archivo de registro... + + + + Locate log file + Localizar archivo de registro + + + + Locate the diagnostic log file used for this session. + Abrir archivo de registro usado para este sesión. + + + + Shift+F1 + Mayús+F1 + + + + Sorry! + ¡Lo siento! + + + + This session is not being logged. + Esta sesión no está registrándose. + + + + A log file is a Work in Progress! + ¡Archivo de registro en progreso! + + + + The log file "{}" will continue to be written to until Manuskript is closed. + El archivo de registro "{}" continuará siendo escrito hasta que Manuskript se cierre. + + + + It will now be displayed in your file manager, but is of limited use until you close Manuskript. + Ahora se mostrará en su gestor de archivos, pero es de uso limitado hasta que usted cierre Manuskript. + + + + Error! + ¡Error! + + + + An error was encountered while trying to show the log file below in your file manager. + Ha habido un error al intentar mostrar el archivo de registro inferior en su gestor de archivos. + + + + F3 + F3 + + + + Shift+F3 + Mayús+F3 + + + + Situation + Situación + + + + Status + Estado + + + + Search + + + No results found + No se han encontrado resultados @@ -1454,7 +1233,7 @@ Use that if you get YAML related error. General - + Revisions Revisiones @@ -1464,19 +1243,19 @@ Use that if you get YAML related error. Vistas - + Labels Etiquetas - + Status Estado - + Fullscreen - Pantalla Completa + Pantalla completa @@ -1486,656 +1265,713 @@ Use that if you get YAML related error. Application settings - Estilo de la aplicación + 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 - Grabar automáticamente en + Guardar automáticamente cada - + minutes. minutos. - + If no changes during - si no hay cambios durante + Si no hay cambios durante - + seconds. segundos. - - Save on quit + + 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, permientiendote ver y restaurar versiones anteriores. + Las revisiones son una manera de realizar un seguimiento de las modificaciones. Para cada elemento de texto, almacena cualquier cambio que haga en el texto principal, permitiéndole ver y restaurar versiones anteriores. - + Keep revisions - Alamacenar revisiones + Almacenar revisiones - + S&mart remove - Al&macenamiento inteligente + 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 almacenamiento 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. + El borrado inteligente le permite almacenar solo un cierto número de revisiones. Se recomienda encarecidamente que lo use para que su 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 - + Punto de vista - + 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 + Mostrar número de ele&mentos - + Show summary - Ver resumen + Mostrar 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 + 1,5 líneas - + Double Doble - + Proportional Proporcional - + % % - + Tab width: Anchura del tabulador: - + px px - + Indent 1st line - Indentar la 1ª linea + Sangrar la 1ª linea - + Spacing: Espaciado: - + New Nuevo - + Edit Editar - + Delete - Borrar + Eliminar - + 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 + Sin imagen - + Tiled - Tileado + En mosaico - + 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: + Márgenes: - + Padding: Relleno: - + Font: Fuente: - - <html><head/><body><p>If you check this option, your project will be save as one single file. Easier to copy or backup, but does not allow collaborative editing, or versionning.<br/>If this is unchecked, your project will be save 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> + + <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 marca esta opción, su proyecto se guardará en un único archivo. Es más fácil de copiar o de guardar, pero no permitirá una edición colaborativa o distintas versiones.<br/>Si está desmarcada, su proyecto se guardará como una carpeta que contendrá múltiples archivos pequeños.</p></body></html> - + Save to one single file - Guardar en un único fichero + Guardar en un único archivo - + &Nothing &Ninguno - + Style Estilo - + Cursor Cursor - + Use block insertion of Usar bloque de inserción de - + Alignment: - Alineamiento: + Alineación: - + Justify - Justificación + Justificar - + Alignment - Alineamiento + Alineación - + 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 + &Mostrar progreso - + Show summar&y - Mostrar resumen + &Mostrar resumen - + Show p&rogress - Muestra p&rogreso + Mostrar p&rogreso - + Old st&yle Estilo antiguo - + Transparent Transparente - + Restore defaults - Restaura valores por defecto + Restaurar valores por defecto - + Style: - + Estilo: - + Language: - + Idioma: - + Font size: - Tamaño de fuente: + Tamaño de fuente: - - You might need to restart manuskript in order for those settings to take effect properly and entirely. - + + Restarting Manuskript ensures all settings take effect. + Reiniciar Manuskript asegura que todos los ajustes surtan efecto. - + 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 + 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> + <p><b>La función de Revisiones ha sido la fuente de muchos problemas reportados. En esta versión de Manuskript se ha desactivado para proyectos nuevos para proveer la mejor experiencia posible.</b></p><p>¿Por qué estos problemas no se han solucionado? <a href="https://www.theologeek.ch/manuskript/contribute/">¡Necesitamos su ayuda para mejorar Manuskript!</a></p> + + + + Show progress in chars next + to words + Mostrar progreso en caracteres junto + a las palabras + + + + Char/Word Counter + Contador de caracteres/palabras + + + + Count spaces as chars + Contar espacios como caracteres + + + + Show char c&ount + Mostrar c&uenta de caracteres + + + + Sho&w char count + Mos&trar conteo de caracteres SpellAction - + Spelling Suggestions - Sugerencias de Ortografía + Sugerencias de ortografía - + &Add to dictionary &Añadir al diccionario - + &Remove from custom dictionary &Eliminar del diccionario personal + + + &New Character + &Nuevo personaje + + + + &New Plot Item + &Nuevo elemento de la trama + + + + &New World Item + &Nuevo elemento del mundo + + + + &Correction Suggestions + &Sugerencias de corrección + + + + &Correction Suggestion + &Sugerencia de corrección + about @@ -2166,54 +2002,41 @@ Use that if you get YAML related error. abstractModel - + Title Título - + POV - PDV + Punto de vista - + Label Etiqueta - + Status Estado - + Compile Compilar - + Word count Número de palabras - + Goal Objetivo - - app - - - Loaded translation: {}. - Cargada la traducción: {}. - - - - Note: No translator found or loaded for locale {}. - Nota: No se ha encontrado traducción o se ha cargado para el locale {}. - - basicItemView @@ -2224,7 +2047,7 @@ Use that if you get YAML related error. POV: - + Punto de vista: @@ -2250,35 +2073,40 @@ Use that if you get YAML related error. characterModel - - New character - Nuevo personaje - - - + Name Nombre - + Value Valor + + + New character + + + + + Description + Descripción + characterTreeView - + Main Principal - + Secondary Secundario - + Minor Menor @@ -2293,7 +2121,7 @@ Use that if you get YAML related error. Filter (type the name of anything in your project) - Filtro (escribe el nombre de cualquier elemento de tu proyecto) + Filtro (escriba el nombre de cualquier elemento de su proyecto) @@ -2380,7 +2208,7 @@ Use that if you get YAML related error. Dock Widgets Toolbar - Anclar Barra de Herramientas + Anclar barra de herramientas @@ -2394,12 +2222,12 @@ Use that if you get YAML related error. corkDelegate - + One line summary Resumen de una línea - + Full summary Resumen completo @@ -2463,7 +2291,7 @@ Use that if you get YAML related error. Decide here what will be included in the final export. - Decide aquí lo que se incluirá en la exportación final. + Decida aquí lo que se incluirá en la exportación final. @@ -2568,7 +2396,7 @@ Use that if you get YAML related error. Replace single quotes (') with: - Reemplazar comillas simples (') con: + Reemplazar comillas simples (') con: @@ -2643,12 +2471,12 @@ Use that if you get YAML related error. Replace ... with … - Reemplazar ... con ... + Reemplazar ... por … Replace --- with — - Reemplazar --- con — + Reemplazar --- con — @@ -2671,7 +2499,7 @@ Use that if you get YAML related error. {} not found. Install it, or set path manually. - {} no encontrado, instálalo, o establece el camino (path) manualmente. + {} no encontrado. Instálelo o establezca la ruta manualmente. @@ -2686,7 +2514,7 @@ Use that if you get YAML related error. Set {} executable path. - Establecer {} camino(path) del ejecutable. + Establecer {} ruta del ejecutable. @@ -2710,20 +2538,75 @@ Use that if you get YAML related error. fullScreenEditor - + Theme: Tema: - + {} words / {} {} palabras / {} - + {} words {} palabras + + + Spellcheck + Correción ortográfica + + + + Navigation + Navegación + + + + New Text + Texto nuevo + + + + Title + Título + + + + Title: Show Full Path + Título: Mostrar ruta completa + + + + Theme selector + Selector de temas + + + + Word count + Número de palabras + + + + Progress + Progreso + + + + Progress: Auto Show/Hide + Progreso: Mostrar/Ocultar automáticamente + + + + Clock + Reloj + + + + Clock: Show Seconds + Reloj: Mostrar segundos + generalSettings @@ -2763,7 +2646,7 @@ Use that if you get YAML related error. If you don't wanna see me, you can hide me in Help menu. - Si no quieres verme, puedes ocultarme en el menú Ayuda. + Si no quiere verme, puede ocultarme en el menú Ayuda. @@ -2780,13 +2663,13 @@ Use that if you get YAML related error. - Chose file - Seleccionar fichero + Choose file + Seleccionar archivo Clear file - Borrar fichero + Eliminar archivo @@ -2802,7 +2685,7 @@ Use that if you get YAML related error. lineEditView - + Various Varios @@ -2842,7 +2725,7 @@ Use that if you get YAML related error. Lock ! - ¡ Bloquear ! + ¡Bloquear! @@ -2903,7 +2786,7 @@ Use that if you get YAML related error. - + Root Raíz @@ -2918,20 +2801,35 @@ Use that if you get YAML related error. Alt+Arriba - - {} words / {} - {} palabras / {} - - - + {} words {} palabras + + + ({} chars) {} words / {} + ({} caracteres) {} palabras / {} + + + + {} words / {} + {} palabras / {} + + + + {} chars + {} caracteres + + + + {} chars + {} caracteres + markdownSettings - + Markdown Markdown @@ -2977,132 +2875,9 @@ Use that if you get YAML related error. myPanel - + Auto-hide - Auto ocultar - - - - outlineBasics - - - Set POV - Establecer PDV - - - - None - Ninguno - - - - Set Status - Establecer Estado - - - - Set Label - Establecer Etiqueta - - - - New - Nuevo - - - - Main - Principal - - - - Secondary - Secundario - - - - Minor - Menor - - - - Set Custom Icon - Poner icono personalizado - - - - Restore to default - Restaurar valores por defecto - - - - Root - Raíz - - - - Open {} items in new tabs - Abrir {} elementos en pestañas nuevas - - - - Open {} in a new tab - Abrir {} en una nueva pestaña - - - - About to remove - A punto de borrar - - - - <p><b>You're about to delete {} item(s).</b></p><p>Are you sure?</p> - <p><b>Estás a punto de borrar {} elemento(s).</b></p><p>¿Estás seguro?</p> - - - - Select at least two items. Folders are ignored. - Selecciona al menos dos elementos. Las carpetas no se tienen en cuenta. - - - - All items must be on the same level (share the same parent). - Todos los elementos deben estar al mismo nivel (tener el mismo padre). - - - - New &Folder - Nueva carpeta - - - - New &Text - Nuevo &texto - - - - &Copy - &Copiar - - - - C&ut - Cortar - - - - &Paste - &Pegar - - - - &Rename - &Renombrar - - - - &Delete - Eliminar + Autoocultar @@ -3128,33 +2903,20 @@ Use that if you get YAML related error. Menor - - outlineItem - - - {} words / {} ({}) - {} palabras / {} ({}) - - - - {} words - {} palabras - - pandocSettings - + General General - + Table of Content - Tabla de Contenido + Tabla de contenido - + Custom settings for {} Preferencias personalizadas para {} @@ -3169,7 +2931,7 @@ Use that if you get YAML related error. Secondary - Secundario + Secundario @@ -3217,12 +2979,12 @@ Use that if you get YAML related error. Yes but - Si pero + Sí, pero Freytag's pyramid - Piramide de Freytag + Pirámide de Freytag @@ -3257,7 +3019,7 @@ Use that if you get YAML related error. 1. Inciting event - Cruce del primer umbral + 1. Cruce del primer umbral @@ -3297,7 +3059,7 @@ Use that if you get YAML related error. Hero's journey - El Viaje del Héroe + El viaje del héroe @@ -3358,60 +3120,60 @@ 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 + + + New plot + + plotTreeView - + Main Principal - + Secondary Secundario - + Minor Menor - + **Plot:** {} **Trama:** {} @@ -3426,7 +3188,7 @@ Use that if you get YAML related error. Secondary - Secundario + Secundario @@ -3444,7 +3206,7 @@ Use that if you get YAML related error. POV - + Punto de vista @@ -3472,169 +3234,6 @@ Use that if you get YAML related error. Número de palabras - - 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: - - - - Basic info - Informaciones básicas - - - - Detailed info - Informaciones detalladas - - - - POV of: - 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: - - - - Motivation - Motivación - - - - Goal - Objetivo - - - - Epiphany - Epifanía - - - - Short summary - Resumen corto - - - - Longer summary - Resumen largo - - revisions @@ -3648,34 +3247,34 @@ Use that if you get YAML related error. Opciones - + Restore Restaurar - + Delete - Borrar + Eliminar Show modifications - Ver modificaciones + Mostrar modificaciones Show ancient version - Ver versión antigua + Mostrar versión antigua Show spaces - Ver espacios + Mostrar espacios Show modifications only - Ver sólo modificaciones + Mostrar sólo modificaciones @@ -3713,12 +3312,12 @@ Use that if you get YAML related error. Hace {} segundos - + Line {}: Linea {}: - + Clear all Limpiar todo @@ -3730,61 +3329,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... @@ -3794,30 +3338,57 @@ Use that if you get YAML related error. settingsWindow - + New status Nuevo estado - + New label Nueva etiqueta - + newtheme nuevotema - + New theme - Nuevo Tema + Nuevo tema - + (read-only) (sólo lectura) + + + Open Image + Abrir imagen + + + + Image files (*.jpg; *.jpeg; *.png) + Archivos de imágenes (*.jpg; *.jpeg; *.png) + + + + Error + Error + + + + Unable to load selected file + Ha sido imposible cargar el archivo seleccionado + + + + Unable to add selected image: +{} + Ha sido imposible añadir la imagen seleccionada: +{} + sldImportance @@ -3866,26 +3437,26 @@ Use that if you get YAML related error. <p><b>Mark:</b></p> - + <p>Divide los elemento(s) seleccionado(s) en la marca indicada.</p> - <p>Si uno de los elementos seleccionados es una carpeta, se aplicará - recursivamente a <i>todos</i> sus elementos hijos.</p> + <p>Si uno de los elementos seleccionados es una carpeta, se aplicará + recursivamente a <i>todos</i> sus elementos hijos.</p> - <p>La marca de división puede contener las siguientes secuencias de escape: - <ul> - <li><b><code>\n</code></b>: salto de línea</li> - <li><b><code>\t</code></b>: tabulador</li> - </ul> - </p> + <p>La marca de división puede contener las siguientes secuencias de escape: + <ul> + <li><b><code>\n</code></b>: salto de línea</li> + <li><b><code>\t</code></b>: tabulador</li> + </ul> + </p> - <p><b>Marca:</b></p> + <p><b>Marca:</b></p> Split '{}' - Dividir '{}' + Dividir '{}' @@ -3903,33 +3474,33 @@ Use that if you get YAML related error. Show Plots - Ver Tramas + Mostrar tramas Show Characters - Ver Personajes + Mostrar personajes tabSplitter - + Open selected items in that view. - Abre los elementos seleccionados en esta vista. + Abrir los elementos seleccionados en esta vista. - + Split horizontally Dividir horizontalmente - + Close split Cerrar división - + Split vertically Dividir verticalmente @@ -4005,12 +3576,12 @@ Use that if you get YAML related error. Expand All - Expandir Todo + Expandir todo Collapse All - Contraer Todo + Contraer todo @@ -4036,27 +3607,27 @@ Use that if you get YAML related error. Vacía - + Novel Novela - + Novella - Novela Corta + Novela corta - + Short Story Cuento - + Research paper - Árticulo de investigación + Artículo de investigación - + Demo projects Proyectos de ejemplo @@ -4068,12 +3639,12 @@ Use that if you get YAML related error. Add word count - Añadir cuenta de palabras + Añadir recuento de palabras Next time, automatically open last project - La proxima vez, abrir el último proyecto automáticamente + La próxima vez, abrir el último proyecto automáticamente @@ -4091,362 +3662,362 @@ 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 (*) + Proyecto de Manuskript (*.msk);;Todos los archivos (*) - + Save project as... Guardar proyecto como... - + Manuskript project (*.msk) Proyecto de Manuskript (*.msk) - + Create New Project - Crear un Proyecto Nuevo + 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 {}? + ¿Sobreescribir el proyecto existente {}? worldModel - + New item Nuevo elemento - + Fantasy world building - Construcción del mundo de fantasía + Construcción de un mundo de fantasía - + Physical - Fisico + Entorno físico - + 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.qm b/i18n/manuskript_fa.qm new file mode 100644 index 0000000..1c1ecdf Binary files /dev/null and b/i18n/manuskript_fa.qm differ diff --git a/i18n/manuskript_fa.ts b/i18n/manuskript_fa.ts new file mode 100644 index 0000000..bed2ff0 --- /dev/null +++ b/i18n/manuskript_fa.ts @@ -0,0 +1,4005 @@ + + + + + ExportersManager + + + Manage Exporters + + + + + Manuskript + + + + + Description + + + + + Offers export to + + + + + Status + + + + + Status: + + + + + Version: + + + + + Path: + + + + + ... + + + + + {HelpText} + + + + + FrequencyAnalyzer + + + Frequency Analyzer + + + + + Word frequency + + + + + Settings + + + + + Minimum size: + + + + + Exclude words (comma separated): + + + + + Analyze + + + + + Phrase frequency + + + + + Number of words: from + + + + + to + + + + + MDEditCompleter + + + Insert reference + + + + + MainWindow + + + General + + + + + Title + + + + + Subtitle + + + + + Series + + + + + Volume + + + + + 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 + + + + + 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 + + + + + Book information + + + + + &About + + + + + About Manuskript + + + + + Manuskript + + + + + Project {} saved. + + + + + WARNING: Project {} not saved. + + + + + Project {} loaded. + + + + + 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 + + + + + &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 + + + No results found + + + + + Settings + + + Settings + + + + + General + + + + + Revisions + + + + + Views + + + + + Labels + + + + + Status + + + + + Fullscreen + + + + + General settings + + + + + Application settings + + + + + 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 + + + About Manuskript + + + + + Manuskript + + + + + aboutDialog + + + Version + + + + + Software Versions in Use: + + + + + abstractModel + + + Title + + + + + POV + + + + + Label + + + + + Status + + + + + Compile + + + + + Word count + + + + + Goal + + + + + basicItemView + + + Form + + + + + POV: + + + + + Goal: + + + + + Word count + + + + + One line summary + + + + + Few sentences summary: + + + + + characterModel + + + Name + + + + + Value + + + + + New character + + + + + Description + + + + + characterTreeView + + + Main + + + + + Secondary + + + + + Minor + + + + + cheatSheet + + + Form + + + + + Filter (type the name of anything in your project) + + + + + Minor + + + + + Secondary + + + + + Main + + + + + Characters + + + + + Texts + + + + + Plots + + + + + World + + + + + cmbOutlineCharacterChoser + + + None + + + + + Main + + + + + Secondary + + + + + Minor + + + + + Various + + + + + cmbOutlineLabelChoser + + + Various + + + + + cmbOutlineStatusChoser + + + Various + + + + + collapsibleDockWidgets + + + Dock Widgets Toolbar + + + + + completer + + + Form + + + + + corkDelegate + + + One line summary + + + + + Full summary + + + + + editorWidget_ui + + + Form + + + + + exporter + + + Export + + + + + Export to: + + + + + Manage exporters + + + + + Preview + + + + + Settings + + + + + exporterDialog + + + {} (not implemented yet) + + + + + exporterSettings + + + Form + + + + + Content + + + + + Decide here what will be included in the final export. + + + + + Type + + + + + Title + + + + + Text + + + + + I need more granularity + + + + + Fi&lters + + + + + <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> + + + + + Ignore compile status (include all items) + + + + + Subitems of: + + + + + Labels + + + + + Status + + + + + Separations + + + + + Between folders: + + + + + Empty line + + + + + Custom + + + + + Between texts: + + + + + Between folder and text: + + + + + Between text and folder: + + + + + Transformations + + + + + Typographic replacements: + + + + + Replace double quotes (") with: + + + + + Replace single quotes (') with: + + + + + Remove multiple spaces + + + + + Custom replacements: + + + + + Enabled + + + + + Replace + + + + + With + + + + + RegExp + + + + + If checked, uses regular expression for replacement. If unchecked, replaced as plain text. + + + + + Preview + + + + + Font + + + + + Font: + + + + + Font size: + + + + + Folder + + + + + {}Level {} folder + + + + + {}Level {} text + + + + + Replace ... with … + + + + + Replace --- with — + + + + + exportersManager + + + Installed + + + + + Custom + + + + + Not found + + + + + {} not found. Install it, or set path manually. + + + + + <b>Status:</b> uninstalled. + + + + + <b>Requires:</b> + + + + + Set {} executable path. + + + + + frequencyAnalyzer + + + Phrases + + + + + Frequency + + + + + Word + + + + + 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 + + + + + generalSettings + + + General + + + + + Split scenes at: + + + + + \n---\n + + + + + Trim long titles (> 32 chars) + + + + + Import under: + + + + + Import in a top-level folder + + + + + helpLabel + + + If you don't wanna see me, you can hide me in Help menu. + + + + + importer + + + Import + + + + + Format: + + + + + Choose file + + + + + Clear file + + + + + Preview + + + + + Settings + + + + + lineEditView + + + Various + + + + + locker + + + Form + + + + + Lock screen: + + + + + Word target + + + + + Time target + + + + + words + + + + + minutes + + + + + Lock ! + + + + + ~{} h. + + + + + ~{} mn. + + + + + {}:{} + + + + + {} s. + + + + + {} remaining + + + + + {} words remaining + + + + + mainEditor + + + Form + + + + + Text + + + + + Index cards + + + + + Outline + + + + + F11 + + + + + Go to parent item + + + + + Alt+Up + + + + + Root + + + + + {} words + + + + + ({} chars) {} words / {} + + + + + {} words / {} + + + + + {} chars + + + + + {} chars + + + + + markdownSettings + + + Markdown + + + + + metadataView + + + Form + + + + + Properties + + + + + Summary + + + + + One line summary + + + + + Full summary + + + + + Notes / References + + + + + Revisions + + + + + myPanel + + + Auto-hide + + + + + outlineCharacterDelegate + + + None + + + + + Main + + + + + Secondary + + + + + Minor + + + + + pandocSettings + + + General + + + + + Table of Content + + + + + Custom settings for {} + + + + + persosProxyModel + + + Main + + + + + Secondary + + + + + Minors + + + + + plotDelegate + + + General + + + + + Promise + + + + + Problem + + + + + Progress + + + + + Resolution + + + + + Try / Fail + + + + + No and + + + + + Yes but + + + + + 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 + + + + + Tests + + + + + Approach + + + + + Abyss + + + + + Reward / Revelation + + + + + Transformation + + + + + Atonement + + + + + Return + + + + + plotModel + + + Name + + + + + Meta + + + + + New step + + + + + Main + + + + + Secondary + + + + + Minor + + + + + New plot + + + + + plotTreeView + + + Main + + + + + Secondary + + + + + Minor + + + + + **Plot:** {} + + + + + plotsProxyModel + + + Main + + + + + Secondary + + + + + Minors + + + + + propertiesView + + + Form + + + + + POV + + + + + Status + + + + + Label + + + + + Compile + + + + + Goal + + + + + Word count + + + + + revisions + + + Form + + + + + Options + + + + + Restore + + + + + Delete + + + + + Show modifications + + + + + Show ancient version + + + + + Show spaces + + + + + Show modifications only + + + + + {} years ago + + + + + {} months ago + + + + + {} days ago + + + + + 1 day ago + + + + + {} hours ago + + + + + {} minutes ago + + + + + {} seconds ago + + + + + Line {}: + + + + + Clear all + + + + + search + + + Form + + + + + Search for... + + + + + 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: +{} + + + + + sldImportance + + + Form + + + + + TextLabel + + + + + Minor + + + + + Secondary + + + + + Main + + + + + splitDialog + + + + <p>Split selected item(s) at the given mark.</p> + + <p>If one of the selected item is a folder, it will be applied + recursively to <i>all</i> of it's children items.</p> + + <p>The split mark can contain following escape sequences: + <ul> + <li><b><code>\n</code></b>: line break</li> + <li><b><code>\t</code></b>: tab</li> + </ul> + </p> + + <p><b>Mark:</b></p> + + + + + + Split '{}' + + + + + Split items + + + + + storylineView + + + Form + + + + + Show Plots + + + + + Show Characters + + + + + tabSplitter + + + Open selected items in that view. + + + + + Split horizontally + + + + + Close split + + + + + Split vertically + + + + + textEditView + + + Various + + + + + textFormat + + + Form + + + + + CTRL+B + + + + + CTRL+I + + + + + CTRL+U + + + + + CTRL+P + + + + + CTRL+L + + + + + CTRL+E + + + + + CTRL+R + + + + + CTRL+J + + + + + treeView + + + Expand {} + + + + + Collapse {} + + + + + Expand All + + + + + Collapse All + + + + + welcome + + + Form + + + + + 1 + + + + + Templates + + + + + Empty + + + + + Novel + + + + + Novella + + + + + Short Story + + + + + Research paper + + + + + Demo projects + + + + + Add level + + + + + Add word count + + + + + Next time, automatically open last project + + + + + Open... + + + + + Recent + + + + + Create + + + + + 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 + + + + + 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_fi.qm b/i18n/manuskript_fi.qm new file mode 100644 index 0000000..050e942 Binary files /dev/null and b/i18n/manuskript_fi.qm differ diff --git a/i18n/manuskript_fi.ts b/i18n/manuskript_fi.ts new file mode 100644 index 0000000..4c6c43c --- /dev/null +++ b/i18n/manuskript_fi.ts @@ -0,0 +1,4638 @@ + + + + + Export + + + Basic HTML output using the Python module 'markdown'. + + + + + Python module 'markdown'. + Python moduuli 'markdown'. + + + + Markdown source + Markdown lähde + + + + HTML Source + HTML Lähde + + + + HTML Output + HTML Tuloste + + + + Default exporter, provides basic formats used by other exporters. + + + + + Preview with highlighter. + + + + + Plain text + + + + + A little known format modestly used. You know, web sites for example. + + + + + Needs LaTeX to be installed. + LaTeX täytyy olla asennettu. + + + + Error + Virhe + + + + Standalone document (not just a fragment) + + + + + Include a table of contents. + Sisällytä sisällysluettelo. + + + + Number of sections level to include in TOC: + + + + + Typographically correct output + + + + + Normalize the document (cleaner) + Normalisoi dokumentti (puhdistin) + + + + 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: + Kirjaisimen koko: + + + + Class: + Luokka: + + + + Line spacing: + Riviväli: + + + + Books that don't kill trees. + Kirjoja, jotka eivät tapa puita. + + + + OpenDocument format. Used by LibreOffice for example. + OpenDocument-tiedostomuoto. Muun muassa LibreOfficen käyttämä. + + + + Microsoft Office (.docx) document. + Microsoft Office (.docx) dokumentti. + + + + reStructuredText is a lightweight markup language. + + + + + Just like plain text, excepts adds markdown titles. + Presupposes that texts are formatted 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>. + + + + + <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> + + + + + + 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. + + + + + Export to markdown, using pandoc. Allows more formatting options + than the basic manuskript exporter. + + + + + LaTeX is a word processor and document markup language used to create + beautiful documents. + + + + + The purpose of this format is to provide a way to exchange information + between outliners and Internet services that can be browsed or controlled + through an outliner. + + + + + Disable YAML metadata block. +Use that if you get YAML related error. + + + + + Convert to ePUB3 + Muunna ePUB3:ksi + + + + Could not process regular expression: +{} + + + + + Choose output file… + + + + + ExportersManager + + + Manage Exporters + + + + + Manuskript + Manuskript + + + + Description + Kuvaus + + + + Offers export to + + + + + Status + Tila + + + + Status: + Tila: + + + + Version: + Versio: + + + + Path: + Polku: + + + + ... + ... + + + + {HelpText} + + + + + FrequencyAnalyzer + + + Frequency Analyzer + + + + + Word frequency + + + + + Settings + Asetukset + + + + Minimum size: + Minimikoko: + + + + Exclude words (comma separated): + Poisjätetyt sanat (pilkuilla eroteltuna): + + + + Analyze + Analysoi + + + + Phrase frequency + + + + + Number of words: from + + + + + to + + + + + 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) + are added as scene.</p> + <p>Only text files are supported (not images, binary or others).</p> + + + + + Include only those extensions: + + + + + Comma separated values + + + + + Sort items by name + + + + + Import folder then files + + + + + OPML Import + OPML-tuonti + + + + File open failed. + Tiedoston avaaminen epäonnistui. + + + + This does not appear to be a valid OPML file. + Tämä ei vaikuta olevan validi OPML-tiedosto. + + + + Pandoc import + Pandoc-tuonti + + + + <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 + then it will be imported in manuskript. One or the other + might give better result depending on your document. + <br/>&nbsp; + + + + + Import using: + Tuo käyttäen: + + + + Wrap lines: + + + + + <p>Should pandoc create + cosmetic / non-semantic line-breaks?</p><p> + <b>auto</b>: wraps at 72 characters.<br> + <b>none</b>: no line wrap.<br> + <b>preserve</b>: tries to preserves line wrap from the + original document.</p> + + + + + Mind Map Import + + + + + This does not appear to be a valid Mind Map file. + + + + + Mind Map import + + + + + Import tip as: + + + + + Untitled + + + + + MDEditCompleter + + + Insert reference + + + + + MainWindow + + + General + + + + + Title + Otsikko + + + + Subtitle + Alaotsikko + + + + Series + + + + + Volume + + + + + Genre + + + + + License + Lisenssi + + + + Author + Kirjoittaja + + + + Name + Nimi + + + + Email + Sähköposti + + + + Summary + Tiivistelmä + + + + Situation: + + + + + Summary: + + + + + One sentence + Yksi lause + + + + One paragraph + Yksi kappale + + + + One page + Yksi sivu + + + + Full + Täysi + + + + One sentence summary + Yhden lauseen tiivistelmä + + + + One paragraph summary + Yhden kappaleen tiivistelmä + + + + Expand each sentence of your one paragraph summary to a paragraph + + + + + One page summary + Yhden sivun tiivistelmä + + + + Full summary + Koko tiivistelmä + + + + Next + Seuraava + + + + What if...? + Mitä jos...? + + + + Characters + Hahmot + + + + Names + Nimet + + + + Filter + Suodatin + + + + Basic info + Perustiedot + + + + Importance + Tärkeys + + + + Motivation + Motivaatio + + + + Goal + Tavoite + + + + Conflict + Konflikti + + + + 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 + Muistiinpanot + + + + Detailed info + + + + + Plots + Juonet + + + + Plot + Juoni + + + + Character(s) + Hahmo(t) + + + + Description + Kuvaus + + + + Result + Lopputulos + + + + Resolution steps + + + + + World + Maailma + + + + Populates with empty data + + + + + More + Lisää + + + + Source of passion + Intohimon lähde + + + + Source of conflict + Konfliktin lähde + + + + Outline + + + + + Editor + + + + + Debug + + + + + FlatData + + + + + Persos + + + + + Labels + + + + + &File + &Tiedosto + + + + &Recent + + + + + &Help + + + + + &Tools + &Työkalut + + + + &Edit + &Muokkaa + + + + &View + &Katso + + + + &Mode + &Tila + + + + &Cheat sheet + + + + + Sea&rch + + + + + &Navigation + + + + + &Open + &Avaa + + + + Ctrl+O + Ctrl+O + + + + &Save + &Tallenna + + + + Ctrl+S + 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 + F8 + + + + &Close project + + + + + Co&mpile + + + + + F6 + F6 + + + + &Frequency Analyzer + + + + + Book information + Kirjan tiedot + + + + &About + + + + + About Manuskript + Manuskriptista + + + + Manuskript + Manuskript + + + + Project {} saved. + + + + + WARNING: Project {} not saved. + + + + + Project {} loaded. + Projekti {} ladattu. + + + + Project {} loaded with some errors. + + + + + (~{} pages) + + + + + Words: {}{} + Sanoja: {}{} + + + + Book summary + Kirjan tiivistelmä + + + + Project tree + Projektipuu + + + + Metadata + 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. + Kirjoita. + + + + Debug info. Sometimes useful. + + + + + Dictionary + Sanakirja + + + + Nothing + + + + + POV + + + + + Label + + + + + Progress + Edistyminen + + + + Compile + Käännä + + + + Icon color + Ikonin väri + + + + Text color + Tekstin väri + + + + Background color + Taustaväri + + + + Icon + Ikoni + + + + Text + + + + + Background + + + + + Border + + + + + Corner + Kulma + + + + 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 + + + + + Ctrl+Shift+Up + Ctrl+Shift+Up + + + + M&ove Down + + + + + Ctrl+Shift+Down + Ctrl+Shift+Down + + + + Dupl&icate + + + + + &Delete + + + + + &Rename + + + + + F2 + F2 + + + + Organi&ze + + + + + M&erge + + + + + &Format + + + + + &Header + + + + + &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 + + + + + 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? + Tallenna projekti? + + + + 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 + Etsi + + + + Ctrl+F + Ctrl+F + + + + &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 + 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! + Virhe! + + + + An error was encountered while trying to show the log file below in your file manager. + + + + + F3 + F3 + + + + Shift+F3 + Shift+F3 + + + + Situation + + + + + Status + + + + + Search + + + No results found + + + + + Settings + + + Settings + Asetukset + + + + General + Yleinen + + + + Revisions + + + + + Views + + + + + Labels + + + + + Status + + + + + Fullscreen + Kokoruutu + + + + General settings + Yleiset asetukset + + + + Application settings + Sovelluksen asetukset + + + + 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 + Uusi + + + + Edit + Muokkaa + + + + Delete + Poista + + + + Theme name: + Teeman nimi + + + + Apply + + + + + Cancel + Peruuta + + + + Window Background + + + + + Text Background + + + + + Text Options + + + + + Paragraph Options + + + + + Type: + + + + + No Image + Ei kuvaa + + + + 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: + Kieli: + + + + Font size: + Fontin koko: + + + + Restarting Manuskript ensures all settings take effect. + + + + + Show &word count + + + + + &Show word count + + + + + &New style + + + + + Typewriter mode + + + + + Focus mode + Keskittymistila + + + + None + + + + + Sentence + Lause + + + + Line + + + + + Paragraph + Kappale + + + + <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 + + + About Manuskript + + + + + Manuskript + Manuskript + + + + aboutDialog + + + Version + Versio + + + + Software Versions in Use: + + + + + abstractModel + + + Title + + + + + POV + + + + + Label + + + + + Status + + + + + Compile + + + + + Word count + + + + + Goal + + + + + basicItemView + + + Form + + + + + POV: + + + + + Goal: + Tavoite: + + + + Word count + Sanamäärä + + + + One line summary + Yhden rivin tiivistelmä + + + + Few sentences summary: + Muutaman lauseen tiivistelmä: + + + + characterModel + + + Name + Nimi: + + + + Value + Arvo + + + + characterTreeView + + + Main + + + + + Secondary + + + + + Minor + + + + + cheatSheet + + + Form + + + + + Filter (type the name of anything in your project) + + + + + Minor + + + + + Secondary + + + + + Main + + + + + Characters + + + + + Texts + + + + + Plots + + + + + World + + + + + cmbOutlineCharacterChoser + + + None + + + + + Main + + + + + Secondary + + + + + Minor + + + + + Various + + + + + cmbOutlineLabelChoser + + + Various + + + + + cmbOutlineStatusChoser + + + Various + + + + + collapsibleDockWidgets + + + Dock Widgets Toolbar + + + + + completer + + + Form + + + + + corkDelegate + + + One line summary + + + + + Full summary + + + + + editorWidget_ui + + + Form + + + + + exporter + + + Export + + + + + Export to: + + + + + Manage exporters + + + + + Preview + + + + + Settings + + + + + exporterDialog + + + {} (not implemented yet) + + + + + exporterSettings + + + Form + + + + + Content + + + + + Decide here what will be included in the final export. + + + + + Type + + + + + Title + + + + + Text + + + + + I need more granularity + + + + + Fi&lters + + + + + <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> + + + + + Ignore compile status (include all items) + + + + + Subitems of: + + + + + Labels + + + + + Status + + + + + Separations + + + + + Between folders: + + + + + Empty line + + + + + Custom + + + + + Between texts: + + + + + Between folder and text: + + + + + Between text and folder: + + + + + Transformations + + + + + Typographic replacements: + + + + + Replace double quotes (") with: + + + + + Replace single quotes (') with: + + + + + Remove multiple spaces + + + + + Custom replacements: + + + + + Enabled + + + + + Replace + + + + + With + + + + + RegExp + + + + + If checked, uses regular expression for replacement. If unchecked, replaced as plain text. + + + + + Preview + + + + + Font + + + + + Font: + + + + + Font size: + + + + + Folder + + + + + {}Level {} folder + + + + + {}Level {} text + + + + + Replace ... with … + + + + + Replace --- with — + + + + + exportersManager + + + Installed + + + + + Custom + + + + + Not found + + + + + {} not found. Install it, or set path manually. + + + + + <b>Status:</b> uninstalled. + + + + + <b>Requires:</b> + + + + + Set {} executable path. + + + + + frequencyAnalyzer + + + Phrases + + + + + Frequency + + + + + Word + + + + + 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 + + + + + generalSettings + + + General + + + + + Split scenes at: + + + + + \n---\n + + + + + Trim long titles (> 32 chars) + + + + + Import under: + + + + + Import in a top-level folder + + + + + helpLabel + + + If you don't wanna see me, you can hide me in Help menu. + + + + + importer + + + Import + + + + + Format: + + + + + Choose file + + + + + Clear file + + + + + Preview + + + + + Settings + + + + + lineEditView + + + Various + + + + + locker + + + Form + + + + + Lock screen: + + + + + Word target + + + + + Time target + + + + + words + + + + + minutes + + + + + Lock ! + + + + + ~{} h. + + + + + ~{} mn. + + + + + {}:{} + + + + + {} s. + + + + + {} remaining + + + + + {} words remaining + + + + + mainEditor + + + Form + + + + + Text + + + + + Index cards + + + + + Outline + + + + + F11 + + + + + Go to parent item + + + + + Alt+Up + + + + + Root + + + + + {} words + + + + + ({} chars) {} words / {} + + + + + {} words / {} + + + + + {} chars + + + + + {} chars + + + + + markdownSettings + + + Markdown + + + + + metadataView + + + Form + + + + + Properties + + + + + Summary + + + + + One line summary + + + + + Full summary + + + + + Notes / References + + + + + Revisions + + + + + myPanel + + + Auto-hide + + + + + outlineBasics + + + Set POV + + + + + None + + + + + Set Status + + + + + Set Label + + + + + New + + + + + Main + + + + + Secondary + + + + + Minor + + + + + Set Custom Icon + + + + + Restore to default + + + + + Root + + + + + Open {} items in new tabs + + + + + Open {} in a new tab + + + + + About to remove + + + + + Select at least two items. Folders are ignored. + + + + + All items must be on the same level (share the same parent). + + + + + New &Folder + + + + + New &Text + + + + + &Copy + + + + + C&ut + + + + + &Paste + + + + + &Rename + + + + + &Delete + + + + + You're about to delete {} item(s). + + + + + Are you sure? + + + + + outlineCharacterDelegate + + + None + + + + + Main + + + + + Secondary + + + + + Minor + + + + + outlineItem + + + {} words / {} ({}) + + + + + {} words + + + + + pandocSettings + + + General + + + + + Table of Content + + + + + Custom settings for {} + + + + + persosProxyModel + + + Main + + + + + Secondary + + + + + Minors + + + + + plotDelegate + + + General + + + + + Promise + + + + + Problem + + + + + Progress + + + + + Resolution + + + + + Try / Fail + + + + + No and + + + + + Yes but + + + + + 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 + + + + + Tests + + + + + Approach + + + + + Abyss + + + + + Reward / Revelation + + + + + Transformation + + + + + Atonement + + + + + Return + + + + + plotModel + + + Name + + + + + Meta + + + + + New step + + + + + Main + + + + + Secondary + + + + + Minor + + + + + plotTreeView + + + Main + + + + + Secondary + + + + + Minor + + + + + **Plot:** {} + + + + + plotsProxyModel + + + Main + + + + + Secondary + + + + + Minors + + + + + propertiesView + + + Form + + + + + POV + + + + + Status + + + + + Label + + + + + Compile + + + + + Goal + + + + + Word count + + + + + references + + + Not a reference: {}. + + + + + Unknown reference: {}. + + + + + Path: + + + + + Stats: + + + + + POV: + + + + + Status: + + + + + Label: + + + + + Short summary: + + + + + Long summary: + + + + + Notes: + + + + + Basic info + + + + + Detailed info + + + + + POV of: + + + + + 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: + + + + + Motivation + + + + + Goal + + + + + Epiphany + + + + + Short summary + + + + + Longer summary + + + + + revisions + + + Form + + + + + Options + + + + + Restore + + + + + Delete + + + + + Show modifications + + + + + Show ancient version + + + + + Show spaces + + + + + Show modifications only + + + + + {} years ago + + + + + {} months ago + + + + + {} days ago + + + + + 1 day ago + + + + + {} hours ago + + + + + {} minutes ago + + + + + {} seconds ago + + + + + Line {}: + + + + + Clear all + + + + + search + + + Form + + + + + Search for... + + + + + 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: +{} + + + + + sldImportance + + + Form + + + + + TextLabel + + + + + Minor + + + + + Secondary + + + + + Main + + + + + splitDialog + + + + <p>Split selected item(s) at the given mark.</p> + + <p>If one of the selected item is a folder, it will be applied + recursively to <i>all</i> of it's children items.</p> + + <p>The split mark can contain following escape sequences: + <ul> + <li><b><code>\n</code></b>: line break</li> + <li><b><code>\t</code></b>: tab</li> + </ul> + </p> + + <p><b>Mark:</b></p> + + + + + + Split '{}' + + + + + Split items + + + + + storylineView + + + Form + + + + + Show Plots + + + + + Show Characters + + + + + tabSplitter + + + Open selected items in that view. + + + + + Split horizontally + + + + + Close split + + + + + Split vertically + + + + + textEditView + + + Various + + + + + textFormat + + + Form + + + + + CTRL+B + + + + + CTRL+I + + + + + CTRL+U + + + + + CTRL+P + + + + + CTRL+L + + + + + CTRL+E + + + + + CTRL+R + + + + + CTRL+J + + + + + treeView + + + Expand {} + + + + + Collapse {} + + + + + Expand All + + + + + Collapse All + + + + + welcome + + + Form + + + + + 1 + + + + + Templates + + + + + Empty + + + + + Novel + + + + + Novella + + + + + Short Story + + + + + Research paper + + + + + Demo projects + + + + + Add level + + + + + Add word count + + + + + Next time, automatically open last project + + + + + Open... + + + + + Recent + + + + + Create + + + + + 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 + + + + + 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 + Politiikka + + + + Gender roles + Sukupuoliroolit + + + + Music and arts + Musiikki ja taide + + + + Architecture + Arkkitehtuuri + + + + Military + + + + + Technology + Teknologia + + + + Courtship + + + + + Demography + + + + + Transportation + + + + + Medicine + + + + + Magic system + + + + + Rules + + + + + Organization + + + + + Magical objects + + + + + Magical places + + + + + Magical races + + + + + Important places + Tärkeät paikat + + + + Important objects + Tärkeät esineet + + + + Natural resources + + + + diff --git a/i18n/manuskript_fr.qm b/i18n/manuskript_fr.qm index 160740e..81afa76 100644 Binary files a/i18n/manuskript_fr.qm and b/i18n/manuskript_fr.qm differ diff --git a/i18n/manuskript_fr.ts b/i18n/manuskript_fr.ts index bc4b1a1..ee214f8 100644 --- a/i18n/manuskript_fr.ts +++ b/i18n/manuskript_fr.ts @@ -1,222 +1,6 @@ - - - Export - - - Default exporter, provides basic formats used by other exporters. - Exporteur de base, fournit les formats de base utilisés par les autres exporteurs. - - - - Basic HTML output using the Python module 'markdown'. - Format HTML de base, utilisant le module python 'markdown'. - - - - Python module 'markdown'. - module python 'markdown'. - - - - A little known format modestly used. You know, web sites for example. - 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> - - <p>Convertisseur universel. Permet de convertir de markdown à un grand nombre de formats.</p> -<p>Site internet: <a href="http://www.pandoc.org">http://pandoc.org/</a></p> - - - - - Just like plain text, excepts adds markdown titles. - Presupposes that texts are formatted in markdown. - Comme en texte brute, mais rajoute les titres markdown. - - - - Preview with highlighter. - Aperçu avec coloration syntaxique. - - - - Plain text - Texte brute - - - - 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 brute. Permet d'utiliser des langages que manuskript ne comprends pas. Par exemple <a href='www.fountain.io'>Fountain</a>. - - - - Markdown source - Source markdown - - - - HTML Source - Source HTML - - - - HTML Output - Sortie HTML - - - - Chose output file... - Choisir le fichier de destination… - - - - Error - Erreur - - - - Books that don't kill trees. - Des livres qui ne tuent pas les arbres. - - - - OpenDocument format. Used by LibreOffice for example. - Format OpenDocument. Utilisé notamment par LibreOffice. - - - - Microsoft Office (.docx) document. - Document Microsoft Office (.docx). - - - - Needs LaTeX to be installed. - Nécessite d'avoir installé latex. - - - - 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. - - - - reStructuredText is a lightweight markup language. - reStructuredText est un langage de balisage léger… - - - - 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. - - - - 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 niveau à 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 : - - - - 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. - - - - The purpose of this format is to provide a way to exchange information - between outliners and Internet services that can be browsed or controlled - through an outliner. - 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 - - + + ExportersManager @@ -242,22 +26,22 @@ Cochez ceci si vous avez des erreurs liées à YAML. Status - Status + Statut Status: - Status : + Statut : Version: - Version: + Version : Path: - Chemin: + Chemin : @@ -290,12 +74,12 @@ Cochez ceci si vous avez des erreurs liées à YAML. Minimum size: - Taille minimum: + Taille minimum : Exclude words (comma separated): - Exclure les mots<br>(séparés par des virgules): + Exclure les mots (séparés par des virgules) : @@ -310,7 +94,7 @@ Cochez ceci si vous avez des erreurs liées à YAML. Number of words: from - Nombre de mots: de + Nombre de mots : de @@ -318,140 +102,10 @@ 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; - <b>Info:</b> Un simple parser - qui va parcourir le document markdown et créer - 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) - 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> - - - - 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 - Importer les dossiers en premier - - - - OPML Import - Importation OPML - - - - File open failed. - Echec 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 - - - - <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 - 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: - - - - <p>Should pandoc create - cosmetic / non-semantic line-breaks?</p><p> - <b>auto</b>: wraps at 72 characters.<br> - <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> -<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 pointes comme: - - - - Untitled - Sans titre - - MDEditCompleter - + Insert reference Insérer une référence @@ -459,966 +113,1111 @@ Cochez ceci si vous avez des erreurs liées à YAML. MainWindow - + Title Titre - + Subtitle Sous-titre - + Series Série - + Volume Volume - + Genre Genre - + License - License + Licence - + Author Informations sur l'auteur - + Name Nom - + Email - Email + Courriel - + 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) + Personnage (s) - + Description Description - + Result Résultat - + Resolution steps Étapes de résolution - + Outline Plan - + Editor Rédaction - + Debug - Debug + Débogage - + 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: + Situation : - + Summary: - Résumé: + Résumé : - + What if...? - Et si...? + 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é. + Le projet {} a été sauvegardé. - + 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 - + 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 personnage. - + 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 des fois pendant qu'on code c'est utile. + Infos de débogage. Parfois utile. - + Dictionary Dictionnaire - - Install PyEnchant to use spellcheck - Installez PyEnchant pour profiter du correcteur orthographique - - - + Nothing Rien - + POV - POV + Point de Vue - + Label - Label + Étiquette - + Progress - Progrès + Progression - + Icon color - Couleur de l'icone + Couleur de l'icône - + Text color Couleur du texte - + Background color Couleur de l'arrière-plan - + Icon Icone - + 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'aides - + &Spellcheck &Correcteur orthographique - + &Labels... &Labels… - + &Status... &Status… - + &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 - + Trame - + 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) + 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. + Prenez le temps de penser à une phrase (~50 mots) qui résume votre livre. Ensuite, développez-la en + un paragraphe, puis une page, puis un résumé complet. - + &Edit - &Édition + &Modifier - + Book information Informations sur le livre - + &About - &A propos + &À propos - + About Manuskript À propos de Manuskript - + Manuskript Manuskript - + 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'au détails les plus spécifiques. - + Add plot step - Ajouter une étape de résolution (CTRL+Enter) + 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) - - - - - Ctrl+Alt+1 - - - - - Level &2 - - - - - Ctrl+Alt+2 - - - - - Level &1 (atx) - - - - - Ctrl+1 - - - - - L&evel 2 - - - - - Ctrl+2 - - - - - Level &3 - - - - - Ctrl+3 - + &Niveau 1 (setext) - Level &4 - + Ctrl+Alt+1 + Ctrl+Alt+1 - - Ctrl+4 - + + Level &2 + Niveau &2 - Level &5 - + Ctrl+Alt+2 + Ctrl+Alt+2 - - Ctrl+5 - + + Level &1 (atx) + Niveau &1 (atx) - Level &6 - + Ctrl+1 + Ctrl+1 - - Ctrl+6 - + + L&evel 2 + Niv&eau 2 - - &Bold - + + Ctrl+2 + Ctrl+2 - - Ctrl+B - + + Level &3 + Niveau &3 + + + + Ctrl+3 + Ctrl+3 + + + + Level &4 + Niveau &4 - &Italic - + Ctrl+4 + Ctrl+4 - - Ctrl+I - + + Level &5 + Niveau &5 - - &Strike - + + Ctrl+5 + Ctrl+5 - - &Verbatim - + + Level &6 + Niveau &6 - - Su&perscript - + + Ctrl+6 + Ctrl+6 + &Bold + &Gras + + + + Ctrl+B + Ctrl+B + + + + &Italic + &Italique + + + + Ctrl+I + Ctrl+I + + + + &Strike + &Barré + + + + &Verbatim + &Mot pour mot + + + + Su&perscript + Ex&posant + + + Ctrl++ - + Ctrl++ - + Subsc&ript - + In&dice - + Ctrl+- - - - - - Co&mment block - - - - - Ctrl+Shift+C - - - - - Clear &formats - - - - - Ctrl+0 - - - - - &Comment line(s) - - - - - &Ordered list - + Ctrl+- + Co&mment block + Bloc de co&mmentaires + + + + Ctrl+Shift+C + Ctrl+Shift+C + + + + Clear &formats + Supprimer le &formatage + + + + Ctrl+0 + Ctrl+0 + + + + &Comment line(s) + Ligne(s) de &commentaire + + + + &Ordered list + Liste &ordonnée + + + &Unordered list - + &Liste non ordonnée - + B&lockquote - + B&loc de citation - + Remove selected plot step(s) - + Supprimer les étapes de résolution sélectionnées - + The file {} does not exist. Has it been moved or deleted? - + Le fichier {} n'existe pas. A-t-il été déplacé ou supprimé ? + + + + Install {}{} to use spellcheck + Installer {}{} pour utiliser le correcteur orthographique + + + + {} has no installed dictionaries + {} n'a pas de dictionnaires installés + + + + {}{} is not installed + {}{} n'est pas installé + + + + Save project? + Enregistrer le projet ? + + + + Save changes to project "{}" before closing? + Enregistrer les changements au projet « {} » avant de fermer ? + + + + Your changes will be lost if you don't save them. + Vos changements seront perdus si vous ne les enregistrez pas. + + + + PyQt / Qt versions 5.11 and 5.12 are known to cause a crash which might result in a loss of data. + Les versions 5.11 et 5.12 de PyQt / Qt sont connues pour produire un plantage, qui peut conduire à une perte de données. + + + + PyQt {} and Qt {} are in use. + PyQt {} et Qt {} sont utilisés. + + + + Proceed with import at your own risk + Confirmez l'importation à vos risques et périls + + + + Allow POV + Autoriser le Point de vue + + + + Search + Rechercher + + + + Ctrl+F + Ctrl+F + + + + &Technical Support + &Support Technique + + + + How to obtain technical support for Manuskript. + Comment obtenir de l'assistance pour Manuskript. + + + + F1 + F1 + + + + &Locate log file... + &Localiser le fichier log... + + + + Locate log file + Localiser le fichier journal + + + + Locate the diagnostic log file used for this session. + Recherchez le fichier journal de diagnostic utilisé pour cette session. + + + + Shift+F1 + Shift+F1 + + + + Sorry! + Désolé ! + + + + This session is not being logged. + Cette session n'est pas enregistrée. + + + + A log file is a Work in Progress! + Un fichier journal est un travail en cours ! + + + + The log file "{}" will continue to be written to until Manuskript is closed. + Le fichier journal "{}" continuera à être écrit jusqu'à ce que Manuskript soit fermé. + + + + It will now be displayed in your file manager, but is of limited use until you close Manuskript. + Il s'affichera désormais dans votre gestionnaire de fichiers, mais sera d'une utilité limitée jusqu'à ce que vous fermiez Manuskript. + + + + Error! + Erreur ! + + + + An error was encountered while trying to show the log file below in your file manager. + Une erreur s'est produite lors de la tentative d'affichage du fichier journal ci-dessous, dans votre gestionnaire de fichiers. + + + + F3 + F3 + + + + Shift+F3 + Shift+F3 + + + + Situation + Situation + + + + Status + Statut + + + + &Import… + &Importer… + + + + &Split… + &Scinder… + + + + Search + + + No results found + Aucun résultat trouvé @@ -1431,20 +1230,20 @@ Cochez ceci si vous avez des erreurs liées à YAML. Views - Apparence + Vues - + Labels - Labels + Étiquettes - + Status - Status + Statut - + Fullscreen Plein écran @@ -1456,366 +1255,365 @@ Cochez ceci si vous avez des erreurs liées à YAML. Application settings - Style de l'application + Paramètres 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 quit + + Save on project close Enregistrer en quittant - + Views settings Apparence - + Tree Arbre - + Colors Couleurs - + Icon color: - Icone: + Couleur de l'icône : - + Nothing Rien - + POV POV - + Label Label - + Progress Progrès - + Compile Compilation - + Text color: - Texte: + Texte : - + Background color: - Arrière-plan: + 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: + Couleur de la Bordure : - + Corner color: - Coin: + Couleur du coin : - + Background Arrière-plan - + Color: - Couleur: + Couleur : - + Ctrl+S Ctrl+S - + Image: - Image: + Image : - + New Nouveau - + Edit Modifier - + Delete Supprimer - + Theme name: - Nom du thème: + 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: + Type : - + No Image Pas d'image - + Tiled Mosaïque - + Centered Centrée - + Stretched Étirée - + Scaled Mise à l'échelle - + Zoomed Zoomée - + Opacity: - Opacité: + Opacité : - + % % - + Position: - Position: + Position : - + Left Gauche - + Center Centre - + Right Droite - + Width: - Largeur: + Largeur : - + px - px + px - + Corner radius: - Arrondi: + Arrondi : - + Margins: - Marges: + Marges : - + Padding: - Intérieur: + Intérieur : - + Font: - Police: + Police : - + Size: - Taille: + Taille : - + Misspelled: - Orthographe: + Erreur d'orthographe : - + Line spacing: - Espacement -des lignes: + Espacement des lignes : - + Single Simple - + 1.5 lines 1.5 lignes - + Double Double - + Proportional Proportionnel - + Tab width: - Tabulation: + Tabulation : - + Spacing: - Espacement: + Espacement : - + Indent 1st line Retrait 1ère ligne @@ -1825,298 +1623,355 @@ des lignes: 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: + Famille : - + Paragraphs Paragraphes - + Background: - Arrière-plan: + 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: + 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 save as one single file. Easier to copy or backup, but does not allow collaborative editing, or versionning.<br/>If this is unchecked, your project will be save as a folder containing many small files.</p></body></html> + + <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é + Montrer le résumé - + &Nothing &Rien - + Style Apparence - + Cursor Curseur - + Use block insertion of Curseur bloc de - + Alignment: - Alignement: + 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: + Marges gauche/droite : - + Top/Bottom margins: - Marges haut/bas: + 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: - + Style : - + Language: - + Langage : - + Font size: - + Taille de police : - - You might need to restart manuskript in order for those settings to take effect properly and entirely. - + + Restarting Manuskript ensures all settings take effect. + Redémarrer Manuskript garantit la prise en compte des paramètres. - + Show &word count - + Montrer le nombre de &mots - + &Show word count - + Montrer le nombre de mo&ts - + &New style - + &Nouveau style - + Typewriter mode - + Mode machine à écrire - + Focus mode - + Mode Focus - + None - Aucun + Aucun - + Sentence - + Phrase - + Line - + Ligne - + Paragraph - + Paragraphe + + + + <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 fonction «Révisions» a été à l'origine de nombreux problèmes rapportés. Dans cette version de Manuskript, elle a été désactivée par défaut pour les nouveaux projets afin d'offrir la meilleure expérience. </b></p><p>Pourquoi ces problèmes n'ont pas déjà été résolus ?<a href="https://www.theologeek.ch/manuskript/contribute/">Nous avons besoin de votre aide pour rendre Manuskript meilleur !</a></p> + + + + Show progress in chars next + to words + Afficher la progression en caractères près + des mots + + + + Char/Word Counter + Compteur de caractères/mots + + + + Count spaces as chars + Compter les espaces comme des caractères + + + + Show char c&ount + Afficher le nombre de caractères + + + + Sho&w char count + Afficher le nombre de caractères SpellAction - + Spelling Suggestions Suggestions - + &Add to dictionary &Ajouter au dictionnaire - + &Remove from custom dictionary &Supprimer du dictionnaire + + + &New Character + &Nouveau Personnage + + + + &New Plot Item + &Nouvel Objet d’intrigue + + + + &New World Item + &Nouvel élément du monde + + + + &Correction Suggestions + &Suggestions de correction + + + + &Correction Suggestion + &Suggestion de correction + about @@ -2141,60 +1996,47 @@ des lignes: Software Versions in Use: - Version des logiciels utilisés: + Version des logiciels utilisés : abstractModel - + Title Titre - + POV POV - + Label Label - + Status Status - + Compile - Compile + Compiler - + Word count Nombre de mots - + Goal Cible - - app - - - Loaded translation: {}. - Traduction chargée: {}. - - - - Note: No translator found or loaded for locale {}. - Note: aucune traduction n'a été trouvée ou chargée pour locale {}. - - basicItemView @@ -2205,12 +2047,12 @@ des lignes: POV: - POV: + POV : Goal: - Cible: + Cible : @@ -2225,41 +2067,46 @@ des lignes: Few sentences summary: - Résumé en quelques phrases: + Résumé en quelques phrases : characterModel - - New character - Nouveau personnage - - - + Name Nom - + Value Valeur + + + New character + Nouveau personnage + + + + Description + Description + characterTreeView - + Main Principal - + Secondary Secondaire - + Minor Mineur @@ -2361,7 +2208,7 @@ des lignes: Dock Widgets Toolbar - + Barre d'outils Dock Widgets @@ -2375,12 +2222,12 @@ des lignes: corkDelegate - + One line summary Résumé en une ligne - + Full summary Résumé complet @@ -2403,7 +2250,7 @@ des lignes: Export to: - Exporter vers: + Exporter vers : @@ -2444,7 +2291,7 @@ des lignes: Decide here what will be included in the final export. - Choisissez ici ce qui sera inclu dans l'export. + Choisissez ici ce qui sera inclus dans l'export final. @@ -2474,7 +2321,7 @@ des lignes: <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> + <html><head/><body><p>Filtrer les éléments qui seront inclus dans l'export.<br/><span style=" color:#773333;">(Pas encore complètement implémenté.)</span></p></body></html> @@ -2484,7 +2331,7 @@ des lignes: Subitems of: - Sous-éléments de: + Sous-éléments de : @@ -2504,7 +2351,7 @@ des lignes: Between folders: - Entre les dossiers: + Entre les dossiers : @@ -2519,17 +2366,17 @@ des lignes: Between texts: - Entre les textes: + Entre les textes : Between folder and text: - Entre dossier et texte: + Entre dossier et texte : Between text and folder: - Entre texte et dossier: + Entre texte et dossier : @@ -2539,27 +2386,27 @@ des lignes: Typographic replacements: - Corrections typographiques: + Corrections typographiques : - Replace ... with … - Remplacer ... avec … + Replace ... with … + Remplacer ... par … - Replace --- with — - Remplacer --- avec — + Replace --- with — + Remplacer --- avec â Replace double quotes (") with: - Remplacer les guillements doubles (") avec: + Remplacer les guillemets droits (") par : Replace single quotes (') with: - Remplacer les guillements simples (') avec: + Remplacer les guillements simples (') par : @@ -2569,7 +2416,7 @@ des lignes: Custom replacements: - Remplacements personnalisés + Remplacements personnalisés : @@ -2609,17 +2456,17 @@ des lignes: Font: - Police: + Police : Font size: - Taille de la police: + Taille de la police : Folder - Dosser + Dossier @@ -2647,7 +2494,7 @@ des lignes: {} not found. Install it, or set path manually. - {} n'a pas été trouvé. Installé le, ou indiquez l'emplacement manuellement. + {} n'a pas été trouvé. Installez-le, ou indiquez l'emplacement manuellement. @@ -2691,20 +2538,75 @@ des lignes: fullScreenEditor - + Theme: - Thème: + Thème : - + {} words / {} {} mots / {} - + {} words {} mots + + + Spellcheck + Correcteur orthographique + + + + Navigation + Navigation + + + + New Text + Nouveau texte + + + + Title + Titre + + + + Title: Show Full Path + Titre : Montrer le chemin complet + + + + Theme selector + Sélecteur de thème + + + + Word count + Nombre de mots + + + + Progress + Progrès + + + + Progress: Auto Show/Hide + Progrès : Montrer/Cacher automatiquement + + + + Clock + Horloge + + + + Clock: Show Seconds + Horloge : montrer les secondes + generalSettings @@ -2716,7 +2618,7 @@ des lignes: Split scenes at: - Diviser les scènes à: + Diviser les scènes à : @@ -2731,7 +2633,7 @@ des lignes: Import under: - Importer sous: + Importer sous : @@ -2757,11 +2659,11 @@ des lignes: Format: - Format: + Format : - Chose file + Choose file Choisir un fichier @@ -2783,7 +2685,7 @@ des lignes: lineEditView - + Various Différentes valeurs @@ -2798,7 +2700,7 @@ des lignes: Lock screen: - Bloquer l'écran: + Bloquer l'écran : @@ -2859,7 +2761,7 @@ des lignes: mainEditor - + Root Racine @@ -2899,20 +2801,35 @@ des lignes: Alt+Up - - {} words / {} - {} mots / {} - - - + {} words {} mots + + + ({} chars) {} words / {} + ({} caractères) {} mots / {} + + + + {} words / {} + {} mots / {} + + + + {} chars + {} charactères + + + + {} chars + {} charactères + markdownSettings - + Markdown Markdown @@ -2958,134 +2875,11 @@ des lignes: myPanel - + 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 - - - - &Paste - C&oller - - - - &Rename - &Renommer - - - - &Delete - &Supprimer - - outlineCharacterDelegate @@ -3109,33 +2903,20 @@ des lignes: Mineur - - outlineItem - - - {} words / {} ({}) - {} mots / {} ({}) - - - - {} words - {} mots - - pandocSettings - + General Général - + Table of Content Table des matières - + Custom settings for {} Réglages spécifiques pour {} @@ -3150,7 +2931,7 @@ des lignes: Secondary - Secondaire + Secondaire @@ -3228,7 +3009,7 @@ des lignes: 1. Inciting event - Franchir le seuil + 1. Franchir le seuil @@ -3339,60 +3120,60 @@ des lignes: plotModel - - New plot - Nouvelle intrigue - - - + Main Principale - + Secondary Secondaire - + Minor Mineure - + Name Nom - + Meta Meta - + New step Nouvelle étape + + + New plot + Nouvelle intrigue + plotTreeView - + Main Principale - + Secondary Secondaire - + Minor Mineure - + **Plot:** {} **Intrigue:** {} @@ -3407,7 +3188,7 @@ des lignes: Secondary - Secondaire + Secondaire @@ -3440,7 +3221,7 @@ des lignes: Compile - Compile + Compiler @@ -3453,169 +3234,6 @@ des lignes: Nombre de mots - - references - - - 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: - - - - Stats: - Stats: - - - - POV: - POV: - - - - Status: - Status: - - - - Label: - Label: - - - - Short summary: - Résumé court: - - - - Long summary: - Résumé long: - - - - Notes: - Notes: - - - - Not a reference: {}. - Pas une référence: {}. - - - - Go to {}. - Aller à {}. - - - - 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> - - revisions @@ -3624,12 +3242,12 @@ des lignes: Form - + Restore Restaurer - + Delete Supprimer @@ -3684,9 +3302,9 @@ des lignes: Montrer les modifications seulement - + Line {}: - Ligne {}: + Ligne {} : @@ -3699,7 +3317,7 @@ des lignes: Il y a {} mois - + Clear all Effacer tout @@ -3711,61 +3329,6 @@ 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... @@ -3775,29 +3338,56 @@ des lignes: settingsWindow - + New status Nouveau status - + New label Nouveau label - + newtheme nouveautheme - + New theme Nouveau Thème - + (read-only) - (lecture seule) + (lecture seule) + + + + Open Image + Ouvrir l'image + + + + Image files (*.jpg; *.jpeg; *.png) + Fichiers image (*.jpg ; *.jpeg ; *.png) + + + + Error + Erreur + + + + Unable to load selected file + Impossible de charger le fichier sélectionné + + + + Unable to add selected image: +{} + Impossible d'ajouter l'image sélectionnée : +{} @@ -3847,19 +3437,20 @@ 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>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: + <p>La marque de séparation peut contenir les caractères d’échappement suivants: <ul> - <li><b><code>\n</code></b>: retour à la ligne</li> - <li><b><code>\t</code></b>: tabulation</li> + <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> + <p><b>Marque :</b></p> @@ -3894,22 +3485,22 @@ des lignes: tabSplitter - + 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 @@ -4016,27 +3607,27 @@ des lignes: Vide - + Novel Roman - + Novella Nouvelle - + Short Story Histoire courte - + Research paper Article académique - + Demo projects Projets de démonstration @@ -4048,7 +3639,7 @@ des lignes: Add word count - Ajouter le nombre de mots + Ajouter le nombre de mots @@ -4071,147 +3662,147 @@ des lignes: 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 - + Empty non-fiction Non-fiction vide - + Fiction Fiction - + Non-fiction Non-fiction - + Manuskript Manuskript - + Warning Attention - + Overwrite existing project {} ? Écraser le projet existant {} ? @@ -4219,214 +3810,214 @@ des lignes: 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 - + Ressources naturelles diff --git a/i18n/manuskript_he.qm b/i18n/manuskript_he.qm new file mode 100644 index 0000000..305acb1 Binary files /dev/null and b/i18n/manuskript_he.qm differ diff --git a/i18n/manuskript_he.ts b/i18n/manuskript_he.ts new file mode 100644 index 0000000..8a923c3 --- /dev/null +++ b/i18n/manuskript_he.ts @@ -0,0 +1,4633 @@ + + + + + Export + + + Basic HTML output using the Python module 'markdown'. + + + + + Python module 'markdown'. + + + + + Markdown source + + + + + HTML Source + מקור HTML + + + + HTML Output + + + + + Default exporter, provides basic formats used by other exporters. + + + + + Preview with highlighter. + + + + + Plain text + + + + + A little known format modestly used. You know, web sites for example. + + + + + Needs LaTeX to be installed. + + + + + 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: + + + + + Books that don't kill trees. + + + + + OpenDocument format. Used by LibreOffice for example. + + + + + Microsoft Office (.docx) document. + + + + + reStructuredText is a lightweight markup language. + + + + + Just like plain text, excepts adds markdown titles. + Presupposes that texts are formatted 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>. + + + + + <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> + + + + + + 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. + + + + + Export to markdown, using pandoc. Allows more formatting options + than the basic manuskript exporter. + + + + + LaTeX is a word processor and document markup language used to create + beautiful documents. + + + + + The purpose of this format is to provide a way to exchange information + between outliners and Internet services that can be browsed or controlled + through an outliner. + + + + + Disable YAML metadata block. +Use that if you get YAML related error. + + + + + Convert to ePUB3 + + + + + Could not process regular expression: +{} + + + + + Choose output file… + + + + + ExportersManager + + + Manage Exporters + + + + + Manuskript + + + + + Description + תיאור + + + + Offers export to + + + + + Status + + + + + Status: + + + + + Version: + גרסה: + + + + Path: + נתיב: + + + + ... + + + + + {HelpText} + + + + + FrequencyAnalyzer + + + Frequency Analyzer + + + + + Word frequency + + + + + Settings + הגדרות + + + + Minimum size: + + + + + Exclude words (comma separated): + + + + + Analyze + + + + + Phrase frequency + + + + + Number of words: from + + + + + to + + + + + 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) + are added as scene.</p> + <p>Only text files are supported (not images, binary or others).</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. + + + + + 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 + then it will be imported in manuskript. One or the other + might give better result depending on your document. + <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> + <b>none</b>: no line wrap.<br> + <b>preserve</b>: tries to preserves line wrap from the + original document.</p> + + + + + Mind Map Import + + + + + This does not appear to be a valid Mind Map file. + + + + + Mind Map import + + + + + Import tip as: + + + + + Untitled + ללא שם + + + + MDEditCompleter + + + Insert reference + + + + + MainWindow + + + General + כללי + + + + Title + כותרת + + + + Subtitle + הערה + + + + Series + סדרה + + + + Volume + + + + + 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 + + + + + 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 + + + + + Book information + + + + + &About + על &אודות + + + + About Manuskript + + + + + Manuskript + + + + + Project {} saved. + + + + + WARNING: Project {} not saved. + + + + + Project {} loaded. + + + + + 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 + + + + + &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. + + + + + F3 + + + + + Shift+F3 + + + + + Situation + + + + + Status + + + + + Search + + + No results found + + + + + Settings + + + Settings + + + + + General + + + + + Revisions + + + + + Views + + + + + Labels + + + + + Status + + + + + Fullscreen + + + + + General settings + + + + + Application settings + + + + + 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 + + + About Manuskript + + + + + Manuskript + + + + + aboutDialog + + + Version + + + + + Software Versions in Use: + + + + + abstractModel + + + Title + + + + + POV + + + + + Label + + + + + Status + + + + + Compile + + + + + Word count + + + + + Goal + + + + + basicItemView + + + Form + + + + + POV: + + + + + Goal: + + + + + Word count + + + + + One line summary + + + + + Few sentences summary: + + + + + characterModel + + + Name + + + + + Value + + + + + characterTreeView + + + Main + + + + + Secondary + + + + + Minor + + + + + cheatSheet + + + Form + + + + + Filter (type the name of anything in your project) + + + + + Minor + + + + + Secondary + + + + + Main + + + + + Characters + + + + + Texts + + + + + Plots + + + + + World + + + + + cmbOutlineCharacterChoser + + + None + + + + + Main + + + + + Secondary + + + + + Minor + + + + + Various + + + + + cmbOutlineLabelChoser + + + Various + + + + + cmbOutlineStatusChoser + + + Various + + + + + collapsibleDockWidgets + + + Dock Widgets Toolbar + + + + + completer + + + Form + + + + + corkDelegate + + + One line summary + + + + + Full summary + + + + + editorWidget_ui + + + Form + + + + + exporter + + + Export + + + + + Export to: + + + + + Manage exporters + + + + + Preview + + + + + Settings + + + + + exporterDialog + + + {} (not implemented yet) + + + + + exporterSettings + + + Form + + + + + Content + + + + + Decide here what will be included in the final export. + + + + + Type + + + + + Title + + + + + Text + + + + + I need more granularity + + + + + Fi&lters + + + + + <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> + + + + + Ignore compile status (include all items) + + + + + Subitems of: + + + + + Labels + + + + + Status + + + + + Separations + + + + + Between folders: + + + + + Empty line + + + + + Custom + + + + + Between texts: + + + + + Between folder and text: + + + + + Between text and folder: + + + + + Transformations + + + + + Typographic replacements: + + + + + Replace double quotes (") with: + + + + + Replace single quotes (') with: + + + + + Remove multiple spaces + + + + + Custom replacements: + + + + + Enabled + + + + + Replace + + + + + With + + + + + RegExp + + + + + If checked, uses regular expression for replacement. If unchecked, replaced as plain text. + + + + + Preview + + + + + Font + + + + + Font: + + + + + Font size: + + + + + Folder + + + + + {}Level {} folder + + + + + {}Level {} text + + + + + Replace ... with … + + + + + Replace --- with — + + + + + exportersManager + + + Installed + + + + + Custom + + + + + Not found + + + + + {} not found. Install it, or set path manually. + + + + + <b>Status:</b> uninstalled. + + + + + <b>Requires:</b> + + + + + Set {} executable path. + + + + + frequencyAnalyzer + + + Phrases + + + + + Frequency + + + + + Word + + + + + 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 + + + + + generalSettings + + + General + + + + + Split scenes at: + + + + + \n---\n + + + + + Trim long titles (> 32 chars) + + + + + Import under: + + + + + Import in a top-level folder + + + + + helpLabel + + + If you don't wanna see me, you can hide me in Help menu. + + + + + importer + + + Import + + + + + Format: + + + + + Choose file + + + + + Clear file + + + + + Preview + + + + + Settings + + + + + lineEditView + + + Various + + + + + locker + + + Form + + + + + Lock screen: + + + + + Word target + + + + + Time target + + + + + words + + + + + minutes + + + + + Lock ! + + + + + ~{} h. + + + + + ~{} mn. + + + + + {}:{} + + + + + {} s. + + + + + {} remaining + + + + + {} words remaining + + + + + mainEditor + + + Form + + + + + Text + + + + + Index cards + + + + + Outline + + + + + F11 + + + + + Go to parent item + + + + + Alt+Up + + + + + Root + + + + + {} words + + + + + ({} chars) {} words / {} + + + + + {} words / {} + + + + + {} chars + + + + + {} chars + + + + + markdownSettings + + + Markdown + + + + + metadataView + + + Form + + + + + Properties + + + + + Summary + + + + + One line summary + + + + + Full summary + + + + + Notes / References + + + + + Revisions + + + + + myPanel + + + Auto-hide + + + + + outlineBasics + + + Set POV + + + + + None + + + + + Set Status + + + + + Set Label + + + + + New + + + + + Main + + + + + Secondary + + + + + Minor + + + + + Set Custom Icon + + + + + Restore to default + + + + + Root + + + + + Open {} items in new tabs + פתיחת {} פריטים בלשוניות חדשות + + + + Open {} in a new tab + פתיחת {} בלשונית חדשה + + + + 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). + + + + + New &Folder + + + + + New &Text + + + + + &Copy + + + + + C&ut + + + + + &Paste + + + + + &Rename + + + + + &Delete + + + + + outlineCharacterDelegate + + + None + + + + + Main + + + + + Secondary + + + + + Minor + + + + + outlineItem + + + {} words / {} ({}) + + + + + {} words + + + + + pandocSettings + + + General + + + + + Table of Content + + + + + Custom settings for {} + + + + + persosProxyModel + + + Main + + + + + Secondary + + + + + Minors + + + + + plotDelegate + + + General + + + + + Promise + + + + + Problem + + + + + Progress + + + + + Resolution + + + + + Try / Fail + + + + + No and + + + + + Yes but + כן אבל + + + + 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 + + + + + Tests + + + + + Approach + + + + + Abyss + + + + + Reward / Revelation + + + + + Transformation + + + + + Atonement + + + + + Return + + + + + plotModel + + + Name + + + + + Meta + + + + + New step + + + + + Main + + + + + Secondary + + + + + Minor + + + + + plotTreeView + + + Main + + + + + Secondary + + + + + Minor + + + + + **Plot:** {} + + + + + plotsProxyModel + + + Main + + + + + Secondary + + + + + Minors + + + + + propertiesView + + + Form + + + + + POV + + + + + Status + + + + + Label + + + + + Compile + + + + + Goal + + + + + Word count + + + + + references + + + Not a reference: {}. + + + + + Unknown reference: {}. + + + + + Path: + + + + + Stats: + + + + + POV: + + + + + Status: + + + + + Label: + + + + + Short summary: + + + + + Long summary: + + + + + Notes: + + + + + Basic info + + + + + Detailed info + + + + + POV of: + + + + + 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: + + + + + Motivation + + + + + Goal + + + + + Epiphany + + + + + Short summary + + + + + Longer summary + + + + + revisions + + + Form + + + + + Options + + + + + Restore + + + + + Delete + + + + + Show modifications + + + + + Show ancient version + + + + + Show spaces + + + + + Show modifications only + + + + + {} years ago + + + + + {} months ago + + + + + {} days ago + + + + + 1 day ago + + + + + {} hours ago + + + + + {} minutes ago + + + + + {} seconds ago + + + + + Line {}: + + + + + Clear all + + + + + search + + + Form + + + + + Search for... + + + + + 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: +{} + + + + + sldImportance + + + Form + + + + + TextLabel + + + + + Minor + + + + + Secondary + + + + + Main + + + + + splitDialog + + + + <p>Split selected item(s) at the given mark.</p> + + <p>If one of the selected item is a folder, it will be applied + recursively to <i>all</i> of it's children items.</p> + + <p>The split mark can contain following escape sequences: + <ul> + <li><b><code>\n</code></b>: line break</li> + <li><b><code>\t</code></b>: tab</li> + </ul> + </p> + + <p><b>Mark:</b></p> + + + + + + Split '{}' + + + + + Split items + + + + + storylineView + + + Form + + + + + Show Plots + + + + + Show Characters + + + + + tabSplitter + + + Open selected items in that view. + + + + + Split horizontally + + + + + Close split + + + + + Split vertically + + + + + textEditView + + + Various + + + + + textFormat + + + Form + + + + + CTRL+B + + + + + CTRL+I + + + + + CTRL+U + + + + + CTRL+P + + + + + CTRL+L + + + + + CTRL+E + + + + + CTRL+R + + + + + CTRL+J + + + + + treeView + + + Expand {} + + + + + Collapse {} + + + + + Expand All + + + + + Collapse All + + + + + welcome + + + Form + + + + + 1 + + + + + Templates + + + + + Empty + + + + + Novel + + + + + Novella + + + + + Short Story + + + + + Research paper + + + + + Demo projects + + + + + Add level + + + + + Add word count + + + + + Next time, automatically open last project + + + + + Open... + פתיחה... + + + + Recent + + + + + Create + + + + + 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 + + + + + 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_hr.qm b/i18n/manuskript_hr.qm new file mode 100644 index 0000000..c7c075d Binary files /dev/null and b/i18n/manuskript_hr.qm differ diff --git a/i18n/manuskript_hr.ts b/i18n/manuskript_hr.ts new file mode 100644 index 0000000..1d923d9 --- /dev/null +++ b/i18n/manuskript_hr.ts @@ -0,0 +1,4684 @@ + + + + + Export + + + Basic HTML output using the Python module 'markdown'. + Osnovni HTML izlaz koristeći Python modul 'markdown'. + + + + Python module 'markdown'. + Modul Pythona 'markdown'. + + + + Markdown source + Izvor markdown-a + + + + HTML Source + Izvor HTML-a + + + + HTML Output + Izlaz HTML-a + + + + Default exporter, provides basic formats used by other exporters. + Zadani izvoz, daje osnovne formate koje koriste ostali izvođači. + + + + Preview with highlighter. + Pretplegledajte sa highlighter-om. + + + + Plain text + Jednostavan tekst + + + + A little known format modestly used. You know, web sites for example. + Slabo poznat format korišten na web-stranicama. + + + + Needs LaTeX to be installed. + Potrebno je instalirati LaTeX. + + + + Error + Greška + + + + Standalone document (not just a fragment) + Cjelovit dokument (bez manjih dijelova) + + + + Include a table of contents. + Koristite tablicu sadržaja. + + + + Number of sections level to include in TOC: + Broj dijelova koje trebate uključiti u TOC: + + + + Typographically correct output + Tipografski točan izlaz + + + + Normalize the document (cleaner) + Pojednostavnite dokument (neka bude pregledniji) + + + + Specify the base level for headers: + Odredite osnovnu razinu zaglavlja: + + + + Use reference-style links instead of inline links + Koristite reference umjesto ubacivanja poveznica u tekst + + + + Use ATX-style headers + Koristite ATX stil zaglavlja + + + + Self-contained HTML files, with no dependencies + Samostalne HTML datoteke + + + + Use <q> tags for quotes in HTML + Koristite <q> oznake za citate u HTML-u + + + + LaTeX engine used to produce the PDF. + LaTeX se koristi za izvoz dokumenta u PDF. + + + + Paper size: + Veličina papira: + + + + Font size: + Veličina fonta: + + + + Class: + Razred: + + + + Line spacing: + Razmak između redova: + + + + Books that don't kill trees. + Knjige koje ne ubijaju stabla. + + + + OpenDocument format. Used by LibreOffice for example. + Format OpenDocument, korišten u LibreOffice. + + + + Microsoft Office (.docx) document. + Dokument Microsoft Office-a (.docx). + + + + reStructuredText is a lightweight markup language. + reStructuredText je lagan markup jezik. + + + + Just like plain text, excepts adds markdown titles. + Presupposes that texts are formatted in markdown. + Izgleda kao jednostavan tekst, osim što dodaje naslove markdown-a. +Pretpostavlja da su tekstovi formatirani u markdown-u. + + + + 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>. + Najjednostavniji izvoz u jednostavan tekst. Dozvoljava vam da koristite svoj vlastiti markup, iako ga Manuskript ne razumije, + kao npr. <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> + + <p>Univerzalni pretvarač dokumenta. Koristi se za pretvaranje Markdown u mnoge druge +formate.</p> +<p>Web-stranica:<a href="http://www.pandoc.org">http://pandoc.org/</a></p> + + + + + 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. + Ispravna instalacija LaTeX. Prijedloge Pandoc-a je sada moguće pronaći na: + <a href="https://pandoc.org/installing.html">pandoc.org/installing.html</a>. Ako želite podršku za Unicode, instalirajte +XeLaTeX. + + + + Export to markdown, using pandoc. Allows more formatting options + than the basic manuskript exporter. + Izvezite dokument u markdown, koristeći pandoc. Omogućuje više opcija formatiranja +usporedo s osnovnim manuskript izvozom. + + + + LaTeX is a word processor and document markup language used to create + beautiful documents. + LaTex je program za obradu teksta i jezik markup koji omogućuje stvaranje +prekrasnih dokumenata. + + + + The purpose of this format is to provide a way to exchange information + between outliners and Internet services that can be browsed or controlled + through an outliner. + Svrha ovog formata je da omogući izmjenu informacija +između korisnika internetskih usluga koje + je moguće pretražiti. + + + + Disable YAML metadata block. +Use that if you get YAML related error. + Onemogućite YAML metapodatke, +ako dobijete grešku vezanu uz YAML. + + + + Convert to ePUB3 + Pretvorite u ePUB3 + + + + Could not process regular expression: +{} + Nemoguće obraditi uobičajeni izraz: +{} + + + + Choose output file… + Odaerite oblik datoteke + + + + ExportersManager + + + Manage Exporters + Upravljajte izvozima + + + + Manuskript + Manuskript + + + + Description + Opis + + + + Offers export to + Omogućuje izvoz u + + + + Status + Status + + + + Status: + Status: + + + + Version: + Inačica: + + + + Path: + Mjesto: + + + + ... + ... + + + + {HelpText} + {HelpText} + + + + FrequencyAnalyzer + + + Frequency Analyzer + Analiza učestalosti + + + + Word frequency + Učestalost riječi + + + + Settings + Postavke + + + + Minimum size: + Minimalna veličina: + + + + Exclude words (comma separated): + Izdvojite riječi (odvojite svaku zarezom): + + + + Analyze + Analiziraj + + + + Phrase frequency + Učestalost izraza + + + + Number of words: from + Broj riječi: od + + + + to + do + + + + Import + + + Markdown import + Uvoz markdown + + + + <b>Info:</b> A very simple + parser that will go through a markdown document and + create items for each titles.<br/>&nbsp; + <b>O:</b>Vrlo jednostavan +program koji za vas skenira markdown dokument +i stvara oznake za svaki naslov.<br/>&nbsp; + + + + Folder import + Uvoz mape + + + + <p><b>Info:</b> Imports a whole + directory structure. Folders are added as folders, and + plaintext documents within (you chose which ones by extension) + are added as scene.</p> + <p>Only text files are supported (not images, binary or others).</p> + <p><b>O:</b> Uvozi cjelovit +direktorij. Mape su dodane kao mape, a +jednostavni tekstovi unutar mapa (vi određujete koji tako da odaberete točnu ekstenziju) +su dodani kao scena.</p> +<p>Isključivo tekstovi su podržani (ne slike, binarni i ostalo).</p> + + + + Include only those extensions: + Uključi samo ove ekstenzije: + + + + Comma separated values + Vrijednosti odvojene zarezom + + + + Sort items by name + Rasporedi datoteke po imenu + + + + Import folder then files + Uvezi mapu, a nakon toga datoteke + + + + OPML Import + OPML uvoz + + + + File open failed. + Nemoguće otvoriti datoteku. + + + + This does not appear to be a valid OPML file. + Ovo nije valjana OPML datoteka. + + + + Pandoc import + Pandoc uvoz + + + + <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 + then it will be imported in manuskript. One or the other + might give better result depending on your document. + <br/>&nbsp; + <b>O:</b> Manuskript podržava + uvoz sa strane <b>markdown</b> ili <b>OPML</b>. Pandoc + će pretvoriti vašu datoteku u jedno ili drugi (vidi opcije ispod), te + će je uvesti u manuskript. Koji format će vam dati bolji rezultat ovisi o vašem dokumentu. + <br/>&nbsp; + + + + Import using: + Uvezi pomoću: + + + + Wrap lines: + Suzite retke: + + + + <p>Should pandoc create + cosmetic / non-semantic line-breaks?</p><p> + <b>auto</b>: wraps at 72 characters.<br> + <b>none</b>: no line wrap.<br> + <b>preserve</b>: tries to preserves line wrap from the + original document.</p> + <p>Želite li da pandoc stvori +uredne / nesemantičke uvlake između redaka?</p><p> +<b>automatski<b>: uvlači nakon 72 karaktera.<b> +<b>ništa<b>: bez uvlake.<b> +<b>sačuvaj<b>: pokušava sačuvati uvlake iz +originalnog dokumenta.</p> + + + + Mind Map Import + Uvoz Umne Mape + + + + This does not appear to be a valid Mind Map file. + Ovo nije valjana datoteka Umne Mape. + + + + Mind Map import + Uvoz Umne Mape + + + + Import tip as: + Uvezi kao: + + + + Untitled + Neimenovano + + + + MDEditCompleter + + + Insert reference + Dodaj referencu + + + + MainWindow + + + General + Općenito + + + + Title + Naslov + + + + Subtitle + Podnaslov + + + + Series + Serija + + + + Volume + Broj + + + + Genre + Žanr + + + + License + Licenca + + + + Author + Autor + + + + Name + Ime + + + + Email + Email + + + + Summary + Sažetak + + + + Situation: + Situacija: + + + + Summary: + Sažetak: + + + + One sentence + Jedna rečenica + + + + One paragraph + Jedan paragraf + + + + One page + Jedna stranica + + + + Full + Cjelovit + + + + One sentence summary + Sažetak u jednoj rečenici + + + + One paragraph summary + Sažetak u jednom paragrafu + + + + Expand each sentence of your one paragraph summary to a paragraph + Proširite svaku rečenicu svog paragrafa u još jedan paragraf + + + + One page summary + Sažetak u jednoj stranici + + + + Full summary + Cjelovit sažetak + + + + Next + Sljedeće + + + + What if...? + Što bi bilo kad bi bilo...? + + + + Characters + Likovi + + + + Names + Imena + + + + Filter + Filtar + + + + Basic info + Osnovne informacije + + + + Importance + Važnost + + + + Motivation + Motivacija + + + + Goal + Cilj + + + + Conflict + Sukob + + + + Epiphany + Prosvjetljenje + + + + <html><head/><body><p align="right">One sentence<br/>summary</p></body></html> + <html><head/><body><p align="right">Sažetaku u<br/>jednoj rečenici</p></body></html> + + + + <html><head/><body><p align="right">One paragraph<br/>summary</p></body></html> + <html><head/><body><p align="right">Sažetak u<br/>jednom pragrafu</p></body></html> + + + + Notes + Bilješke + + + + Detailed info + Detaljan opis + + + + Plots + Fabule + + + + Plot + Fabula + + + + Character(s) + Lik(ovi) + + + + Description + Opis + + + + Result + Rezultat + + + + Resolution steps + Koraci raspleta + + + + World + Svijet + + + + Populates with empty data + Ispunjeno praznim informacijama + + + + More + Više + + + + Source of passion + Izvor strasti + + + + Source of conflict + Uzrok sukoba + + + + Outline + Obris + + + + Editor + Uređivač + + + + Debug + Debug + + + + FlatData + Prazni podatci + + + + Persos + persos + + + + Labels + Oznake + + + + &File + &Dokument + + + + &Recent + &Nedavno + + + + &Help + &Pomoć + + + + &Tools + &Alati + + + + &Edit + &Uredi + + + + &View + &Pregled + + + + &Mode + &Način + + + + &Cheat sheet + &Šalabahter + + + + Sea&rch + Pre&traži + + + + &Navigation + &Navigacija + + + + &Open + &Otvori + + + + Ctrl+O + Ctrl+O + + + + &Save + &Spremi + + + + Ctrl+S + Ctrl+S + + + + Sa&ve as... + Spre&mi kao... + + + + Ctrl+Shift+S + Ctrl+Shift+S + + + + &Quit + &Izađi + + + + Ctrl+Q + Ctrl+Q + + + + &Show help texts + &Prikaži pomoćne tekstove + + + + Ctrl+Shift+B + Ctrl+Shift+B + + + + &Spellcheck + &Provjera pravopisa + + + + F9 + F9 + + + + &Labels... + &Oznake... + + + + &Status... + &Status... + + + + Tree + Stablo + + + + &Simple + &Jednostavno + + + + &Fiction + &Fikcija + + + + Index cards + Indeks kartice + + + + S&ettings + Po&stavke + + + + F8 + F8 + + + + &Close project + &Zatvori projekt + + + + Co&mpile + Sa&stavi + + + + F6 + F6 + + + + &Frequency Analyzer + &Analiza učestalosti + + + + Book information + O knjizi + + + + &About + &O + + + + About Manuskript + O Manuskriptu + + + + Manuskript + Manuskript + + + + Project {} saved. + Projekt {} spremljen. + + + + WARNING: Project {} not saved. + UPOZORENJE: Projekt {} nije spremljen. + + + + Project {} loaded. + Projekt {} učitan. + + + + Project {} loaded with some errors. + Projekt {} je učitan s nekim greškama. + + + + (~{} pages) + (~{} stranice) + + + + Words: {}{} + Riječi: {}{} + + + + Book summary + Sažetak knjige + + + + Project tree + Razvoj projekta + + + + Metadata + Meta podaci + + + + Story line + Radnja priče + + + + Enter information about your book, and yourself. + Unesite informacije o knjizi i o sebi. + + + + 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) + Uobičajena situacija, u obliku 'Što bi bilo kad bi bilo...?' pitanja. Primjer: 'Što bi bilo kada opasni + i zao čarobnjak ne bi moga ubiti bebu?' (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. + Uzmite si vremena i promislite o jednoj rečenici (~50 riječi) kao sažetku svoje knjige. Onda tu rečenicu proširite +u paragraf pa u jednu stranicu i na kraju u jedan cjelovit sažetak. + + + + Create your characters. + Stvorite likove. + + + + Develop plots. + Razradite fabulu. + + + + Build worlds. Create hierarchy of broad categories down to specific details. + Gradite svjetove. Napravite hijerarhiju u svim mogućim kategorijama , do same njezine srži. + + + + Create the outline of your masterpiece. + Stvorite obris svog remek-djela. + + + + Write. + Pišite. + + + + Debug info. Sometimes useful. + Informacije o Debug. Ponekad može biti korisno. + + + + Dictionary + Rječnik + + + + Nothing + Ništa + + + + POV + Perspektiva + + + + Label + Oznaka + + + + Progress + Napredak + + + + Compile + Sastavi + + + + Icon color + Boja ikone + + + + Text color + Boja teksta + + + + Background color + Boja pozadine + + + + Icon + Ikona + + + + Text + Tekst + + + + Background + Pozadina + + + + Border + Obrub + + + + Corner + Kut + + + + Add plot step + Dodajte stepenicu fabuli + + + + &Import… + &Uvezi… + + + + F7 + F7 + + + + &Copy + &Kopiraj + + + + Ctrl+C + Ctrl+C + + + + C&ut + Iz&reži + + + + Ctrl+X + CTRL+X + + + + &Paste + &Zalijepi + + + + Ctrl+V + CTRL+V + + + + &Split… + &Razdvoji… + + + + Ctrl+Shift+K + Ctrl+Shift+K + + + + Sp&lit at cursor + Raz&dvoji na mjestu pokazivača + + + + Ctrl+K + Ctrl+K + + + + Ctrl+M + Ctrl+M + + + + Ctrl+D + Ctrl+D + + + + Del + Del + + + + &Move Up + &Pomakni Gore + + + + Ctrl+Shift+Up + Ctrl+Shift+Up + + + + M&ove Down + P&omakni Dolje + + + + Ctrl+Shift+Down + Ctrl+Shift+Down + + + + Dupl&icate + Dupl&iciraj + + + + &Delete + &Obriši + + + + &Rename + &Preimenuj + + + + F2 + F2 + + + + Organi&ze + Organi&ziraj + + + + M&erge + S&topi + + + + &Format + &Formatiraj + + + + &Header + &Uzglavlje + + + + &Level 1 (setext) + &Razina 1 (setekst) + + + + Ctrl+Alt+1 + Ctrl+Alt+1 + + + + Level &2 + Razina &2 + + + + Ctrl+Alt+2 + Ctrl+Alt+2 + + + + Level &1 (atx) + Razina &1 (atx) + + + + Ctrl+1 + Ctrl+1 + + + + L&evel 2 + R&azina 2 + + + + Ctrl+2 + Ctrl+1 + + + + Level &3 + Razina &3 + + + + Ctrl+3 + Ctrl+1 + + + + Level &4 + Razina &4 + + + + Ctrl+4 + Ctrl+4 + + + + Level &5 + Razina &5 + + + + Ctrl+5 + Ctrl+5 + + + + Level &6 + Razina &6 + + + + Ctrl+6 + Ctrl+6 + + + + &Bold + &Podebljano + + + + Ctrl+B + Ctrl+B + + + + &Italic + &Kurziv + + + + Ctrl+I + Ctrl+I + + + + &Strike + &Precrtano + + + + &Verbatim + &Doslovno + + + + Su&perscript + Su&perskripta + + + + Ctrl++ + Ctrl++ + + + + Subsc&ript + Sub&skripta + + + + Ctrl+- + Ctrl+- + + + + Co&mment block + Po&lje za komentar + + + + Ctrl+Shift+C + Ctrl+Shift+C + + + + Clear &formats + Očisti &formati + + + + Ctrl+0 + Ctrl+0 + + + + &Comment line(s) + &Red(ovi) komentara + + + + &Ordered list + &Poredana lista + + + + &Unordered list + &Neporedana lista + + + + B&lockquote + B&lokiraj citat + + + + Remove selected plot step(s) + Obriši odabrane/i korak(e) razvoja fabule + + + + The file {} does not exist. Has it been moved or deleted? + Datoteka {} ne postoji. Možda ste je premjestili ili izbrisali? + + + + Install {}{} to use spellcheck + Instalirajte {}{} kako biste koristili provjeru pravopisa + + + + {} has no installed dictionaries + {} nema instaliranih rječnika + + + + {}{} is not installed + {}{} nije instaliran + + + + Save project? + Spremiti projekt? + + + + Save changes to project "{}" before closing? + Spremiti promjene na projektu "{}" prije zatvaranja? + + + + Your changes will be lost if you don't save them. + Vaše promjene u protivnom neće biti spremljene. + + + + PyQt / Qt versions 5.11 and 5.12 are known to cause a crash which might result in a loss of data. + PyQt / Qt inačice 5.11 i 5.12 mogu uzrokovati pad programa što može uzrokovati gubitak podataka. + + + + PyQt {} and Qt {} are in use. + PyQt {} i Qt {} se trenutačno koriste. + + + + Proceed with import at your own risk + Nastavite s uvozom na svoj vlastiti rizik + + + + Allow POV + Omogući perspektivu + + + + Search + Traži + + + + Ctrl+F + Ctrl+F + + + + &Technical Support + &Tehnička Podrška + + + + How to obtain technical support for Manuskript. + Kako dobiti tehničku podršku za Manuskript. + + + + F1 + F1 + + + + &Locate log file... + &Pronađi log datoteku... + + + + Locate log file + Pronađi log datoteku + + + + Locate the diagnostic log file used for this session. + Pronađi log datoteku dijagnoze korištene tijekom ove sesije. + + + + Shift+F1 + Shift+F1 + + + + Sorry! + Ispričavamo se! + + + + This session is not being logged. + Ova sesija nije praćena. + + + + A log file is a Work in Progress! + Log datoteka je Rad u Tijeku! + + + + The log file "{}" will continue to be written to until Manuskript is closed. + Log datoteka "{}" će biti pisana sve dok se Manuskript ne zatvori. + + + + It will now be displayed in your file manager, but is of limited use until you close Manuskript. + Biti će trenutačno prikazana u vašem eksploreru za datoteke, ali je njegovo korištenje ograničeno sve dok ne zatvorite Manuskript. + + + + Error! + Greška! + + + + An error was encountered while trying to show the log file below in your file manager. + Dogodila se greška prilikom pokušaja prikazivanja log datoteke u vašem eksploreru za datoteke. + + + + F3 + F3 + + + + Shift+F3 + Shift+F3 + + + + Situation + Situacija + + + + Status + Status + + + + Search + + + No results found + Nema pronađenih rezultata + + + + Settings + + + Settings + Postavke + + + + General + Općenito + + + + Revisions + Ispravljanja + + + + Views + Pregledi + + + + Labels + Oznake + + + + Status + Status + + + + Fullscreen + Cijeli zaslon + + + + General settings + Općenite postavke + + + + Application settings + Postavke aplikacije + + + + Loading + Učitavanje + + + + Automatically load last project on startup + Odmah učitaj zadnje spremljen projekt prilikom pokretanja + + + + Saving + Spremanje + + + + Automatically save every + Automatski spremi svakih + + + + minutes. + minuta. + + + + If no changes during + Ako nije bilo promjena tijekom + + + + seconds. + sekunda. + + + + Save on project close + Spremi projekt pri zatvaranju + + + + <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>Ako odaberete ovu opciju, vaš projekt će biti spremljen kao samostalna datoteka. Lakše ju je kopirati i sigurnosno kopirati, ali je onemogućeno zajedničko korištenje.<br/>Ako ovo nije odabrano, vaš projekt će biti spremljen kao mapa koja sadrži puno malih datoteka.</p></body></html> + + + + Save to one single file + Spremi kao samostalnu datoteku + + + + 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. + Revizije vam omogućuju praćenje promjena na vašem dokumentu. Za svaki dio teksta, one spremaju bilo koju promjenu primijenjenu na vaš tekst, tako da kasnije vi možete pregledati promjene ili se čak vratiti na starije verzije teksta. + + + + Keep revisions + Zadrži revizije + + + + S&mart remove + P&ametno uklanjanje + + + + Keep: + Zadrži: + + + + 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. + Pametno uklanjanje vam omogućuje da zadržite određen broj revizija. Preporučamo vam da ga koristite, inače će vaš dokument preplaviti povijest tisuća nevažnih promjena. + + + + revisions per day for the last month + Revizije po danu u zadnjih mjesec dana + + + + revisions per minute for the last 10 minutes + Revizije po minuti u zadnjih 10 minuta + + + + revisions per hour for the last day + Jučerašnje revizije po satu + + + + revisions per 10 minutes for the last hour + Revizije po 10 minuta u zadnjem satu + + + + revisions per week till the end of time + Revizije po tjednu inače + + + + Views settings + Postavke prikaza + + + + Tree + Stablo + + + + Colors + Boje + + + + Icon color: + Boja ikona: + + + + Nothing + Ništa + + + + POV + Perspektiva + + + + Label + Oznaka + + + + Progress + Tijek + + + + Compile + Sastavi + + + + Text color: + Boja teksta: + + + + Background color: + Boja pozadine: + + + + Folders + Mape + + + + Show ite&m count + Prikaži bro&j predmeta + + + + Show summary + Prikaži sažetak + + + + &Nothing + &Ništa + + + + Text + Tekst + + + + Outline + Obrub + + + + Visible columns + Vidljivi stupci + + + + Goal + Cilj + + + + Word count + Broj riječi + + + + Percentage + Postotak + + + + Title + Naslov + + + + Index cards + Kartice indeksa + + + + Item colors + Boja predmeta + + + + Border color: + Boja granice: + + + + Corner color: + Boja rubova: + + + + Background + Pozadina + + + + Color: + Boja: + + + + Ctrl+S + Ctrl+S + + + + Image: + Slika: + + + + Text editor + Uređivač teksta + + + + Font + Font + + + + Family: + Porodica: + + + + Size: + Veličina: + + + + Misspelled: + Pogrešno napisano: + + + + Background: + Pozadina: + + + + Paragraphs + Paragrafi + + + + Line spacing: + Razmak između redova: + + + + Single + Jednostruk + + + + 1.5 lines + 1.5 redova + + + + Double + Dvostruko + + + + Proportional + Proporcionalno + + + + % + % + + + + Tab width: + Širina kartica: + + + + px + px + + + + Indent 1st line + Uvlačenje prvog reda + + + + Spacing: + Prored: + + + + New + Novo + + + + Edit + Uredi + + + + Delete + Izbriši + + + + Theme name: + Naziv teme: + + + + Apply + Primjeni + + + + Cancel + Otkaži + + + + Window Background + Pozadina Prozora + + + + Text Background + Pozadina Teksta + + + + Text Options + Opcije Teksta + + + + Paragraph Options + Opcije Paragrafa + + + + Type: + Tip: + + + + No Image + Nema Slike + + + + Tiled + Popločeno + + + + Centered + Centrirano + + + + Stretched + Istegnuto + + + + Scaled + Razmjeran + + + + Zoomed + Uvećano + + + + Opacity: + Prozirnost: + + + + Position: + Pozicija: + + + + Left + Lijevo + + + + Center + Centriraj + + + + Right + Desno + + + + Width: + Širina: + + + + Corner radius: + Radijus kuta: + + + + Margins: + Margine: + + + + Padding: + Postava: + + + + Font: + Font: + + + + Style + Stil + + + + Cursor + Pokazivača + + + + Use block insertion of + Umetni blok od + + + + Alignment: + Poravnanje: + + + + Justify + Poravnaj obostrano + + + + Alignment + Poravnanje + + + + Icon Size + Veličina ikone + + + + TextLabel + TextLabel + + + + Disable blinking + Onemogući treptanje + + + + Text area + Područje teksta + + + + Max width + Maksimalna širina + + + + Left/Right margins: + Lijevo/Desno margine: + + + + Top/Bottom margins: + Vrh/Dno margina: + + + + S&how progress + P&rikaži tijek + + + + Show summar&y + Prikaži sažeta&k + + + + Show p&rogress + Prikaži t&ijek + + + + Old st&yle + Stari st&il + + + + Transparent + Transparent + + + + Restore defaults + Vrati zadano + + + + Style: + Stil: + + + + Language: + Jezik: + + + + Font size: + Veličina fonta: + + + + Restarting Manuskript ensures all settings take effect. + Ponovno pokretanje Manuskripta osigurava da sve postavke stupe na snagu. + + + + Show &word count + Prikaži &broj riječi + + + + &Show word count + &Prikaži broj riječi + + + + &New style + &Novi stil + + + + Typewriter mode + Način pisaćeg stroja + + + + Focus mode + Način za fokusiranje + + + + None + Ništa + + + + Sentence + Rečenica + + + + Line + Redak + + + + 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> Stavka Revizija pomaže u prijavljivanju pogrešaka u programu. U ovoj verziji Manuskripta stavka je isključena po zadanom kako bi omogućili najbolje iskustvo.</b></p><p>Zašto ovi problemi nisu popravljeni do sada?<a href="https://www.theologeek.ch/manuskript/contribute/">Trebamo Vašu pomoć kako bi napravili Manuskriptom boljim"</a></p> + + + + Show progress in chars next + to words + Prikaži tijek karaktera pokraj +riječi + + + + Char/Word Counter + Broj Karaktera/Riječi + + + + Count spaces as chars + Broji razmake kao karaktere + + + + Show char c&ount + Prikaži broj k&araktera + + + + Sho&w char count + Pri&kaži broj karaktera + + + + SpellAction + + + Spelling Suggestions + Prijedlozi pravopisa + + + + &Add to dictionary + &Dodaj u rječnik + + + + &Remove from custom dictionary + &Ukloni iz prilagođenog rječnika + + + + &New Character + &Novi Lik + + + + &New Plot Item + &Nova Fabula Predmet + + + + &New World Item + &Novi Svijet Predmet + + + + &Correction Suggestions + &Prijedlozi ispravka + + + + &Correction Suggestion + &Prijedlog Ispravka + + + + about + + + About Manuskript + O Manuskriptu + + + + Manuskript + Manuskript + + + + aboutDialog + + + Version + Inačica + + + + Software Versions in Use: + Inačice programa koje se trenutačno koriste: + + + + abstractModel + + + Title + Naslov + + + + POV + Perspektiva + + + + Label + Oznaka + + + + Status + Status + + + + Compile + Sastavi + + + + Word count + Broj riječi + + + + Goal + Cilj + + + + basicItemView + + + Form + Oblik + + + + POV: + Perspektiva: + + + + Goal: + Cilj: + + + + Word count + Broj riječi + + + + One line summary + Sažetak u jednom retku + + + + Few sentences summary: + Sažetak u par rečenica: + + + + characterModel + + + Name + Naziv + + + + Value + Vrijednost + + + + characterTreeView + + + Main + Glavni + + + + Secondary + Sekundarni + + + + Minor + Sporedni + + + + cheatSheet + + + Form + Oblik + + + + Filter (type the name of anything in your project) + Filtriraj (upišite naziv bilo kojeg predmeta u svom projektu) + + + + Minor + Sporedni + + + + Secondary + Sekundarni + + + + Main + Glavni + + + + Characters + Likovi + + + + Texts + Tekstovi + + + + Plots + Fabule + + + + World + Svijet + + + + cmbOutlineCharacterChoser + + + None + Ništa + + + + Main + Glavni + + + + Secondary + Sekundarni + + + + Minor + Sporedni + + + + Various + Raznorazni + + + + cmbOutlineLabelChoser + + + Various + Raznorazni + + + + cmbOutlineStatusChoser + + + Various + Raznorazni + + + + collapsibleDockWidgets + + + Dock Widgets Toolbar + Alatna traka plutajućih widgeta + + + + completer + + + Form + Oblik + + + + corkDelegate + + + One line summary + Sažetak u jednoj rečenici + + + + Full summary + Cjelovit sažetak + + + + editorWidget_ui + + + Form + Oblik + + + + exporter + + + Export + Izvezi + + + + Export to: + Izvezi u : + + + + Manage exporters + Upravljaj izvoznicima + + + + Preview + Pretpregled + + + + Settings + Postavke + + + + exporterDialog + + + {} (not implemented yet) + {} (nije još uvedeno) + + + + exporterSettings + + + Form + Oblik + + + + Content + Sadržaj + + + + Decide here what will be included in the final export. + Odlučite što će biti u završnom izvozu. + + + + Type + Tip + + + + Title + Naslov + + + + Text + Tekst + + + + I need more granularity + Potrebno mi je više granularnosti + + + + Fi&lters + Fi&lteri + + + + <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>Filtrira koji će predmeti biti uključeni u završni izvoz.<br/><span style=" color:#773333;">(Nije cjelovito dovršeno...još)</span></p></body></html> + + + + Ignore compile status (include all items) + Ignoriraj status sastavljanja (uključi sve predmete) + + + + Subitems of: + Podstavke od: + + + + Labels + Oznake + + + + Status + Status + + + + Separations + Odjeljci + + + + Between folders: + Između mapa: + + + + Empty line + Prazan redak + + + + Custom + Prilagođeno + + + + Between texts: + Između tekstova: + + + + Between folder and text: + Između mape i teksta: + + + + Between text and folder: + Između teksta i mape: + + + + Transformations + Transformacije + + + + Typographic replacements: + Tipografska zamjena: + + + + Replace double quotes (") with: + Zamijenite dvostruke navodnike (") sa: + + + + Replace single quotes (') with: + Zamijenite jednostruke navodnike (') sa: + + + + Remove multiple spaces + Ukloni suvišne razmake + + + + Custom replacements: + Prilagođene zamjene: + + + + Enabled + Omogućeno + + + + Replace + Zamijeni + + + + With + Sa + + + + RegExp + RegExp + + + + If checked, uses regular expression for replacement. If unchecked, replaced as plain text. + Ako je odabrano, koristi uobičajene izraze kao zamjenu, a ako nije, zamijenjeno je kao jednostavan tekst. + + + + Preview + Pretpregled + + + + Font + Font + + + + Font: + Font: + + + + Font size: + Veličina fonta: + + + + Folder + Mapa + + + + {}Level {} folder + {}Razina {} mapa + + + + {}Level {} text + {}Razina {} tekst + + + + Replace ... with … + Zamijeni ... sa … + + + + Replace --- with — + Zamijeni --- sa — + + + + exportersManager + + + Installed + Instalirano + + + + Custom + Prilagođeni + + + + Not found + Nije pronađeno + + + + {} not found. Install it, or set path manually. + {} nije pronađen. Instalirajte ga ili postavite sami mjesto datoteke. + + + + <b>Status:</b> uninstalled. + <b>Status:</b> deinstalirano. + + + + <b>Requires:</b> + <b>Zahtjeva:</b> + + + + Set {} executable path. + Postavi {} kao izvršni put. + + + + frequencyAnalyzer + + + Phrases + Fraze + + + + Frequency + Učestalost + + + + Word + Riječ + + + + fullScreenEditor + + + Theme: + Tema: + + + + {} words / {} + {} riječi / {} + + + + {} words + {} riječi + + + + Spellcheck + Provjera pravopisa + + + + Navigation + Navigacija + + + + New Text + Novi Tekst + + + + Title + Naslov + + + + Title: Show Full Path + Naslov: Prikaži cjelovito Mjesto + + + + Theme selector + Odabir teme + + + + Word count + Broj riječi + + + + Progress + Tijek + + + + Progress: Auto Show/Hide + Tijek: Automatski Prikaži/Sakrij + + + + Clock + Sat + + + + Clock: Show Seconds + Sat: Prikaži Sekunde + + + + generalSettings + + + General + Općenito + + + + Split scenes at: + Razdvoji scene kod: + + + + \n---\n + \n---\n + + + + Trim long titles (> 32 chars) + Skrati dugačke naslove (> 32 karaktera) + + + + Import under: + Uvezi u: + + + + Import in a top-level folder + Uvezi u prvu mapu po redu + + + + helpLabel + + + If you don't wanna see me, you can hide me in Help menu. + Ako me ne želite vidjeti, možete me sakriti u meniju za Pomoć. + + + + importer + + + Import + Uvezi + + + + Format: + Format: + + + + Choose file + Odaberi datoteku + + + + Clear file + Očisti datoteku + + + + Preview + Pretpregled + + + + Settings + Postavke + + + + lineEditView + + + Various + Raznorazni + + + + locker + + + Form + Oblik + + + + Lock screen: + Zaključani zaslon: + + + + Word target + Cilj riječi + + + + Time target + Ciljano vrijeme + + + + words + riječi + + + + minutes + minuta + + + + Lock ! + Zaključaj ! + + + + ~{} h. + ~{} h. + + + + ~{} mn. + ~{} min. + + + + {}:{} + + + + + {} s. + {} i. + + + + {} remaining + {} preostalo + + + + {} words remaining + {} riječi preostalo + + + + mainEditor + + + Form + Oblik + + + + Text + Tekst + + + + Index cards + Kartice indeksa + + + + Outline + Obris + + + + F11 + F11 + + + + Go to parent item + Odi na nadređeni predmet + + + + Alt+Up + Alt+Up + + + + Root + Korijen + + + + {} words + {} riječi + + + + ({} chars) {} words / {} + ({} karaktera) {} riječi / {} + + + + {} words / {} + {} riječi / {} + + + + {} chars + {} karaktera + + + + {} chars + {} karaktera + + + + markdownSettings + + + Markdown + Markdown + + + + metadataView + + + Form + Oblik + + + + Properties + Svojstva + + + + Summary + Sažetak + + + + One line summary + Sažetak u jednoj crti + + + + Full summary + Cjelovit sažetak + + + + Notes / References + Bilješke / Reference + + + + Revisions + Revizije + + + + myPanel + + + Auto-hide + Automatski Sakrij + + + + outlineBasics + + + Set POV + Postavi Perspektivu + + + + None + Ništa + + + + Set Status + Postavi Status + + + + Set Label + Postavi Oznaku + + + + New + Novi + + + + Main + Glavni + + + + Secondary + Sekundarni + + + + Minor + Sporedni + + + + Set Custom Icon + Postavite prilagođenu ikonu + + + + Restore to default + Vratite na zadano + + + + Root + Korijen + + + + Open {} items in new tabs + Otvorite {} predmete u novoj kartici + + + + Open {} in a new tab + Otvorite {} u novoj kartici + + + + About to remove + Biti će uklonjeno + + + + Select at least two items. Folders are ignored. + Odaberite barem dva predmeta. Mape će se ignorirati. + + + + All items must be on the same level (share the same parent). + Svi predmeti moraju biti na istoj razini (dijeliti istu nadređenu mapu). + + + + New &Folder + Nova &Mapa + + + + New &Text + Novi &Tekst + + + + &Copy + &Kopiraj + + + + C&ut + I&zreži + + + + &Paste + &Zalijepi + + + + &Rename + &Preimenuj + + + + &Delete + &Izbriši + + + + You're about to delete {} item(s). + Upravo ćete obrisati {} datoteku/e. + + + + Are you sure? + Jeste li sigurni? + + + + outlineCharacterDelegate + + + None + Ništa + + + + Main + Glavni + + + + Secondary + Sekundarni + + + + Minor + Sporedni + + + + outlineItem + + + {} words / {} ({}) + {} riječi / {} ({}) + + + + {} words + {} riječi + + + + pandocSettings + + + General + Općenito + + + + Table of Content + Sadržaj + + + + Custom settings for {} + Prilagođene postavke za {} + + + + persosProxyModel + + + Main + Glavni + + + + Secondary + Sekundarni + + + + Minors + Sporedni + + + + plotDelegate + + + General + Općenito + + + + Promise + Obećanje + + + + Problem + Problem + + + + Progress + Tijek + + + + Resolution + Rasplet + + + + Try / Fail + Pokušaj / Promašaj + + + + No and + Ne i + + + + Yes but + Da, ali + + + + Freytag's pyramid + Freytagova piramida + + + + Exposition + Izlaganje + + + + Rising action + Trenutak uspinjanja + + + + Climax + Vrhunac + + + + Falling action + Kamen spoticanja + + + + Three acts + Tri čina + + + + 1. Setup + 1. Postava + + + + 1. Inciting event + 1. Poticajni događaj + + + + 1. Turning point + 1. Trenutak preokreta + + + + 2. Choice + 2. Odabir + + + + 2. Reversal + 2. Preokret + + + + 2. Disaster + 2. Katastrofa + + + + 3. Stand up + 3. Ustanak + + + + 3. Climax + 3. Vrhunac + + + + 3. Ending + 3. Svršetak + + + + Hero's journey + Herojsko putovanje + + + + Ordinary world + Uobičajeni svijet + + + + Call to adventure + Poziv u avanturu + + + + Refusal of the call + Odbijanje poziva + + + + Meeting with mentor + Sastanak sa mentorom + + + + Tests + Testovi + + + + Approach + Pristup + + + + Abyss + Bezdan + + + + Reward / Revelation + Nagrada / Otkrivenje + + + + Transformation + Transformacija + + + + Atonement + Pokajanje + + + + Return + Povratak + + + + plotModel + + + Name + Naziv + + + + Meta + Zlo + + + + New step + Novi korak + + + + Main + Glavni + + + + Secondary + Sekundarni + + + + Minor + Sporedni + + + + plotTreeView + + + Main + Glavni + + + + Secondary + Sekundarni + + + + Minor + Sporedni + + + + **Plot:** {} + **Fabula:** {} + + + + plotsProxyModel + + + Main + Glavni + + + + Secondary + Sekundarni + + + + Minors + Sporedni + + + + propertiesView + + + Form + Oblik + + + + POV + Perspektiva + + + + Status + Status + + + + Label + Oznaka + + + + Compile + Sastavi + + + + Goal + Cilj + + + + Word count + Broj riječi + + + + references + + + Not a reference: {}. + Ovo nije referenca: {}. + + + + Unknown reference: {}. + Nepoznata referenca: {}. + + + + Path: + Mjesto: + + + + Stats: + Statistika: + + + + POV: + Perspektiva: + + + + Status: + Status: + + + + Label: + Oznaka: + + + + Short summary: + Kratak sažetak: + + + + Long summary: + Opširan sažetak: + + + + Notes: + Bilješke: + + + + Basic info + Opći opis + + + + Detailed info + Detaljan opis + + + + POV of: + Perspektiva od: + + + + Go to {}. + Idi na {}. + + + + Description + Opis + + + + Result + Rezultat + + + + Characters + Likovi + + + + Resolution steps + Stepa razvoja + + + + Passion + Strast + + + + Conflict + Sukob + + + + <b>Unknown reference:</b> {}. + <b>Nepoznata referenca:</b> {}. + + + + Folder: <b>{}</b> + Mapa: <b>{}</b> + + + + Text: <b>{}</b> + Tekst: <b>{}</b> + + + + Character: <b>{}</b> + Lik: <b>{}</b> + + + + Plot: <b>{}</b> + Fabula: <b>{}</b> + + + + World: <b>{name}</b>{path} + Svijet: <b>{naziv}</b>{mjesto} + + + + Referenced in: + Referirano u: + + + + Motivation + Motivacija + + + + Goal + Cilj + + + + Epiphany + Prosvjetljenje + + + + Short summary + Kratak sažetak + + + + Longer summary + Poduži sažetak + + + + revisions + + + Form + Oblik + + + + Options + Opcije + + + + Restore + Vrati + + + + Delete + Izbriši + + + + Show modifications + Prikaži promjene + + + + Show ancient version + Prikaži zastarjelu inačicu + + + + Show spaces + Prikaži razmake + + + + Show modifications only + Prikaži samo promjene + + + + {} years ago + {} godina prije + + + + {} months ago + {} mjeseci prije + + + + {} days ago + {} dana prije + + + + 1 day ago + prije 1 dan + + + + {} hours ago + prije {} sati + + + + {} minutes ago + prije {} minuta + + + + {} seconds ago + prije {} sekundi + + + + Line {}: + Redak {}: + + + + Clear all + Očisti Sve + + + + search + + + Form + Oblik + + + + Search for... + Traži za... + + + + settingsWindow + + + New status + Novi status + + + + New label + Nova oznaka + + + + newtheme + novatema + + + + New theme + Nova tema + + + + (read-only) + (samo-za-čitanje) + + + + Open Image + Otvori Sliku + + + + Image files (*.jpg; *.jpeg; *.png) + Formati slika (*.jpg; *.jpeg; *.png) + + + + Error + Greška + + + + Unable to load selected file + Nije moguće učitati odabranu datoteku + + + + Unable to add selected image: +{} + Nije moguće dodati odabranu sliku: +{} + + + + sldImportance + + + Form + Oblik + + + + TextLabel + OznakaTeksta + + + + Minor + Sporedni + + + + Secondary + Sekundarni + + + + Main + Glavni + + + + splitDialog + + + + <p>Split selected item(s) at the given mark.</p> + + <p>If one of the selected item is a folder, it will be applied + recursively to <i>all</i> of it's children items.</p> + + <p>The split mark can contain following escape sequences: + <ul> + <li><b><code>\n</code></b>: line break</li> + <li><b><code>\t</code></b>: tab</li> + </ul> + </p> + + <p><b>Mark:</b></p> + + + <p>Odvoji odabrani/e predmet(e) na odabranom mjestu.</p> + + <p>Ako je odabrani predmet mapa, ove postavke će se primijeniti + na <i>sve</i> podmape i predmete u mapi.</p> + + <p>Oznaka razdvoja može sadržavati sljedeće znakove: + <ul> + <li><b><code>\n</code></b>: prekid retka</li> + <li><b><code>\t</code></b>:tab</li> + </ul> + </p> + + <p><b>Oznaka:</b></p> + + + + + Split '{}' + Odvoji '{}' + + + + Split items + Odvoji predmete + + + + storylineView + + + Form + Oblik + + + + Show Plots + Prikaži Fabule + + + + Show Characters + Prikaži Likove + + + + tabSplitter + + + Open selected items in that view. + Otvori odabrane datoteke u tom prikazu. + + + + Split horizontally + Odvoji horizontalno + + + + Close split + Zatvori dvojni prikaz + + + + Split vertically + Odvoji vertikalno + + + + textEditView + + + Various + Razni + + + + textFormat + + + Form + Oblik + + + + CTRL+B + CTRL+B + + + + 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 + + + + treeView + + + Expand {} + Proširi {} + + + + Collapse {} + Sažmi {} + + + + Expand All + Proširi Sve + + + + Collapse All + Sažmi Sve + + + + welcome + + + Form + Oblik + + + + 1 + 1 + + + + Templates + Predlošci + + + + Empty + Prazno + + + + Novel + Roman + + + + Novella + Novela + + + + Short Story + Kratka Priča + + + + Research paper + Znanstveni rad + + + + Demo projects + Demo projekti + + + + Add level + Dodaj razinu + + + + Add word count + Dodaj brojač riječi + + + + Next time, automatically open last project + Sljedeći put, automatski otvori posljednji projekt + + + + Open... + Otvori... + + + + Recent + Nedavno + + + + Create + Stvori + + + + Open project + Otvori projekt + + + + Manuskript project (*.msk);;All files (*) + Manuskript projekt (*.msk);;Sve datoteke (*) + + + + Save project as... + Spremi projekt kao... + + + + Manuskript project (*.msk) + Manuskript projekt (*.msk) + + + + Manuskript + Manuskript + + + + Create New Project + Stvori Novi Projekt + + + + Warning + Upozorenje + + + + Overwrite existing project {} ? + Prebrisati već postojeći projekt {} ? + + + + Empty fiction + Prazna fikcija + + + + Chapter + Poglavlje + + + + Scene + Scena + + + + Trilogy + Trilogija + + + + Book + Knjiga + + + + Section + Odjeljak + + + + Empty non-fiction + Prazno ne fiktivno djelo + + + + words each. + pojedinačno riječi. + + + + of + od + + + + Text + Tekst + + + + Something + Nešto + + + + <b>Total:</b> {} words (~ {} pages) + <b>Ukupno:</b> {} riječi (~ {} stranica) + + + + Fiction + Fikcija + + + + Non-fiction + Nefiktivno djelo + + + + Idea + Ideja + + + + Note + Bilješka + + + + Research + Istraživanje + + + + TODO + DOVRŠITI + + + + First draft + Prva skica + + + + Second draft + Druga skica + + + + Final + Finalno + + + + worldModel + + + New item + Novi predmet + + + + Fantasy world building + Stvaranje fantastičnog svijeta + + + + Physical + Fizički izgled + + + + Climate + Klima + + + + Topography + Topografija + + + + Astronomy + Astronomija + + + + Wild life + Živi svijet + + + + Flora + Flora + + + + History + Povijest + + + + Races + Rase + + + + Diseases + Bolesti + + + + Cultural + Kultura + + + + Customs + Običaji + + + + Food + Hrana + + + + Languages + Jezici + + + + Education + Edukacija + + + + Dresses + Način odijevanja + + + + Science + Znanost + + + + Calendar + Kalendar + + + + Bodily language + Govor tijela + + + + Ethics + Etika + + + + Religion + Religija + + + + Government + Vlada + + + + Politics + Politika + + + + Gender roles + Uloge po spolu + + + + Music and arts + Glazba i umjetnost + + + + Architecture + Arhitektura + + + + Military + Vojska + + + + Technology + Tehnologija + + + + Courtship + Udvaranje + + + + Demography + Demografija + + + + Transportation + Način transporta + + + + Medicine + Medicina + + + + Magic system + Sistem čarolije + + + + Rules + Pravila + + + + Organization + Organizacija + + + + Magical objects + Čarobni objekti + + + + Magical places + Fantastična mjesta + + + + Magical races + Fantastične rase + + + + Important places + Važna mjesta + + + + Important objects + Važni objekti + + + + Natural resources + Prirodna bogatstva + + + diff --git a/i18n/manuskript_hu.qm b/i18n/manuskript_hu.qm index 4d836e0..608b867 100644 Binary files a/i18n/manuskript_hu.qm and b/i18n/manuskript_hu.qm differ diff --git a/i18n/manuskript_hu.ts b/i18n/manuskript_hu.ts index 7618e9f..28384f5 100644 --- a/i18n/manuskript_hu.ts +++ b/i18n/manuskript_hu.ts @@ -1,230 +1,6 @@ - - - Export - - - Basic HTML output using the Python module 'markdown'. - Alap HTML kimenet a python 'markdown' modult használva. - - - - Python module 'markdown'. - python modul 'markdown'. - - - - Markdown source - Markdown forrás - - - - HTML Source - HTML Forrás - - - - HTML Output - HTML Kimenet - - - - Default exporter, provides basic formats used by other exporters. - Alapértelmezett exportáló, egyszerű formátumokat biztosít. - - - - Preview with highlighter. - Előnézet kiemelővel. - - - - Plain text - Egyszerű szöveg - - - - Chose output file... - Válasszon kimeneti fájlt... - - - - A little known format modestly used. You know, web sites for example. - Kevésbé ismert formátum. Pl. weboldalak esetében. - - - - Needs LaTeX to be installed. - 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: - - - - Books that don't kill trees. - Könyvek, melyek nem ölnek fákat. - - - - OpenDocument format. Used by LibreOffice for example. - OpenDocument formátum. Pl. LibreOffice is ezt használja. - - - - Microsoft Office (.docx) document. - Microsoft Office (.docx) dokumentum. - - - - reStructuredText is a lightweight markup language. - reStructuredText egy könnyűsúlyú jelölőnyelv... - - - - Just like plain text, excepts adds markdown titles. - Presupposes that texts are formatted in markdown. - Csakúgy, mint az egyszerű szöveg, kivéve a jelölőnyelv címeket - 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> - - <p>Univerzális dokumentum konvertáló. Arra használható , hogy markdown tartalmakat alakítson át -egy egész sor más formátumra</p> - <p>Weboldald: <a href="http://www.pandoc.org">http://pandoc.org/</a></p> - - - - - 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. - egy érvényes latex telepítés. Lásd a pandoc javaslatait erre: - <a href="http://pandoc.org/installing.html">http://pandoc.org/installing.html</a>. Unicode támogatáshoz szüksége van a xelatex -re. - - - - Export to markdown, using pandoc. Allows more formatting options - than the basic manuskript exporter. - Markdown exportálása a pandoc-kal. Több formázási lehetőséges biztosít, - mint az alap Manuskript exportáló. - - - - LaTeX is a word processor and document markup language used to create - beautiful documents. - A LaTeX egy szövegszerkesztő és dokumentum jelölőnyelv - gyönyörű dokumentumok létrehozásához. - - - - The purpose of this format is to provide a way to exchange information - between outliners and Internet services that can be browsed or controlled - through an outliner. - Ennek a formátumnak az a célja, hogy lehetőséget biztosítson az információcserére - azon szövegkiemelők és Internet szolgáltatások között, mely egy kiemelőn keresztül - 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 - - - + + ExportersManager @@ -326,149 +102,10 @@ Akkor használja ezt, ha YAML-hoz kapcsolódó gondjai vannak. to - - 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; - <b>Infó:</b> Egy nagyon egyszerű - elemző, amely végigfut a dokumentum markdown-ján és - 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) - are added as scene.</p> - <p>Only text files are supported (not images, binary or others).</p> - <p><b>Infó:</b> Teljes mappastruktúra importálása. - A mappák mappaként adódnak hozzá, és az azokban lévő - egyszerű szöveges dokumentumok (kiválaszthatja melyek, kiterjesztés alapján) - pedig, mint jelentek adódnak hozzá..</p> - <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 - then it will be imported in manuskript. One or the other - might give better result depending on your document. - <br/>&nbsp; - <b>Infó:</b>A Manuskript képes - importálni <b>markdown-ból</b> vagy <b>OPML-ből</b>. A Pandoc - konvertálni fogja az dokumentumát mindkettőről (lássa a lenti beállításokat), - majd importálja őket . A dokumentuma típusától függően - egyik lehetőség jobb eredménnyel járhat, mint a másik. - <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> - <b>none</b>: no line wrap.<br> - <b>preserve</b>: tries to preserves line wrap from the - original document.</p> - <p>Szükséges, hogy a pandoc - szépítő / nem-szemantikus sortöréseket hozzon létre?</p><p> - <b>automatikus</b>: a 72. karakternél töri.<br> - <b>egyik sem</b>: nincs sortörés.<br> - <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 - - MDEditCompleter - + Insert reference Hivatkozás beszúrása @@ -476,969 +113,1112 @@ Akkor használja ezt, ha YAML-hoz kapcsolódó gondjai vannak. MainWindow - + General Általános - + Title Cím - + Subtitle Alcím - + Series Sorozat - + Volume Kötet - + Genre Műfaj - + License Licenc - + Author Szerző - + Name Név - + Email Email cím - + Summary Összefoglaló - + Situation: Szituáció: - + Summary: Összefoglaló: - + One sentence Egy mondat - + One paragraph Egy bekezdés - + One page Egy oldal - + Full Teljes - + One sentence summary Egy mondatos összefoglaló - + One paragraph summary Egy bekezdéses összefoglaló - + Expand each sentence of your one paragraph summary to a paragraph Bővítse ki az egybekezdéses összefoglalók mondatait egy-egy bekezdéssé - + One page summary Egyoldalas összefoglaló - + Full summary Teljes összefoglaló - + Next Következő - + What if...? Mi lenne ha...? - + Characters Szereplők - + Names 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ő - + Book information 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) + 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 - - Install PyEnchant to use spellcheck - PyEnchant telepítése helyesírás-ellenőrzés használatához - - - + 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 + + + + &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 + + + No results found + + Settings @@ -1453,7 +1233,7 @@ Akkor használja ezt, ha YAML-hoz kapcsolódó gondjai vannak. Általános - + Revisions Felülvizsgálatok @@ -1463,17 +1243,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ő @@ -1488,653 +1268,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 quit - Mentés kilépéskor + + Save on project close + Mentés kilépéskor - - <html><head/><body><p>If you check this option, your project will be save as one single file. Easier to copy or backup, but does not allow collaborative editing, or versionning.<br/>If this is unchecked, your project will be save 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> + + <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: - - You might need to restart manuskript in order for those settings to take effect properly and entirely. + + 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 @@ -2165,54 +2001,41 @@ 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 - - app - - - Loaded translation: {}. - Betöltött fordítás: {}. - - - - Note: No translator found or loaded for locale {}. - Megjegyzés: Ehhez a nyelvhez nem található fordító: {}. - - basicItemView @@ -2249,35 +2072,40 @@ Akkor használja ezt, ha YAML-hoz kapcsolódó gondjai vannak. characterModel - - New character - Új szereplő - - - + Name Név - + Value Érték + + + New character + + + + + Description + Leírás + characterTreeView - + Main - + Secondary Másodlagos - + Minor Kisebb jelentőségű @@ -2393,12 +2221,12 @@ Akkor használja ezt, ha YAML-hoz kapcsolódó gondjai vannak. corkDelegate - + One line summary Egysoros összefoglaló - + Full summary Teljes összefoglaló @@ -2567,7 +2395,7 @@ Akkor használja ezt, ha YAML-hoz kapcsolódó gondjai vannak. Replace single quotes (') with: - Egyszeri idézőjelek (') cseréje ezzel: + Egyszeri idézőjelek (') cseréje ezzel: @@ -2639,12 +2467,12 @@ Akkor használja ezt, ha YAML-hoz kapcsolódó gondjai vannak. {}Level {} text {}Szint {} szöveg - + Replace ... with … Csere ... ezzel … - + Replace --- with — Csere --- ezzel — @@ -2709,20 +2537,75 @@ 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 + + generalSettings @@ -2779,8 +2662,8 @@ Akkor használja ezt, ha YAML-hoz kapcsolódó gondjai vannak. - Chose file - Fájl kiválasztása + Choose file + Fájl kiválasztása @@ -2801,7 +2684,7 @@ Akkor használja ezt, ha YAML-hoz kapcsolódó gondjai vannak. lineEditView - + Various Különféle @@ -2912,25 +2795,40 @@ Akkor használja ezt, ha YAML-hoz kapcsolódó gondjai vannak. Alt+Up - + Root Gyökér - - {} words / {} - {} szó / {} - - - + {} words {} szó. + + + ({} chars) {} words / {} + + + + + {} words / {} + + + + + {} chars + + + + + {} chars + + markdownSettings - + Markdown Markdown @@ -2976,134 +2874,11 @@ Akkor használja ezt, ha YAML-hoz kapcsolódó gondjai vannak. myPanel - + Auto-hide Auto-rejtés - - outlineBasics - - - Set POV - Szempont beállítása - - - - None - Egyik sem - - - - Set Status - Státusz Beállítása - - - - Set Label - Címke beállítása - - - - New - Új - - - - Main - - - - - Secondary - Másodlagos - - - - Minor - Kisebb jelentőségű - - - - Set Custom Icon - Egyedi Ikon Beállítása - - - - Restore to default - Visszaállítása alapértelmezettre - - - - Root - Gyökér - - - - Open {} items in new tabs - {} elemek megnyitása új füleken - - - - Open {} in a new tab - {} megnyitása új fülön - - - - About to remove - Eltávolítás - - - - <p><b>You're about to delete {} item(s).</b></p><p>Are you sure?</p> - <p><b>Ezzel törli a következő eleme(ke)t {} .</b></p><p>Biztos benne?</p> - - - - Select at least two items. Folders are ignored. - Válasszon ki legalább két elemet. A mappákat figyelmen kívül hagyja. - - - - All items must be on the same level (share the same parent). - Minden elemnek ugyanazon a szinten kell lennie (közös szülőn kell osztoznia). - - - - New &Folder - Új &Mappa - - - - New &Text - Új &Szöveg - - - - &Copy - &Másolás - - - - C&ut - &Kivágás - - - - &Paste - &Beillesztés - - - - &Rename - &Átnevezés - - - - &Delete - &Törlés - - outlineCharacterDelegate @@ -3127,33 +2902,20 @@ Akkor használja ezt, ha YAML-hoz kapcsolódó gondjai vannak. Kisebb jelentőségű - - outlineItem - - - {} words / {} ({}) - {} szó / {} ({}) - - - - {} words - {} szó - - pandocSettings - + General Általános - + Table of Content Tartalomjegyzék - + Custom settings for {} Egyedi beállítások erre {} @@ -3357,60 +3119,60 @@ 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ű + + + New plot + + plotTreeView - + Main - + Secondary Másodlagos - + Minor Kisebb jelentőségű - + **Plot:** {} **Cselekmény:** {} @@ -3471,169 +3233,6 @@ Akkor használja ezt, ha YAML-hoz kapcsolódó gondjai vannak. Szószám - - 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: - - - - Basic info - Alapinformáció - - - - Detailed info - Részletes információ - - - - POV of: - 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: - - - - Motivation - Motiváció - - - - Goal - Cél - - - - Epiphany - Fordulópont - - - - Short summary - Rövid összefoglaló - - - - Longer summary - Hosszabb összefoglaló - - revisions @@ -3647,12 +3246,12 @@ Akkor használja ezt, ha YAML-hoz kapcsolódó gondjai vannak. Lehetőségek - + Restore Visszaállítás - + Delete Törlés @@ -3712,12 +3311,12 @@ Akkor használja ezt, ha YAML-hoz kapcsolódó gondjai vannak. {} másodperccel ezelőtt - + Line {}: Sor {}: - + Clear all Minden törlése @@ -3734,89 +3333,60 @@ 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: +{} + + sldImportance @@ -3884,7 +3454,7 @@ Akkor használja ezt, ha YAML-hoz kapcsolódó gondjai vannak. Split '{}' - Vágás '{}' + Vágás '{}' @@ -3913,22 +3483,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 @@ -4035,27 +3605,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 @@ -4090,147 +3660,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ő @@ -4238,212 +3808,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.qm b/i18n/manuskript_id.qm index a7db7b4..c5085b6 100644 Binary files a/i18n/manuskript_id.qm and b/i18n/manuskript_id.qm differ diff --git a/i18n/manuskript_id.ts b/i18n/manuskript_id.ts index 4c6a942..30c99ed 100644 --- a/i18n/manuskript_id.ts +++ b/i18n/manuskript_id.ts @@ -1,270 +1,57 @@ - - - Export - - - Basic HTML output using the Python module 'markdown'. - Keluaran HTML dasar menggunakan modul python 'markdown'. - - - - Python module 'markdown'. - Modul python 'markdown'. - - - - Markdown source - Sumber markdown - - - - HTML Source - Sumber HTML - - - - HTML Output - Hasil HTML - - - - Default exporter, provides basic formats used by other exporters. - Eksporter bawaan, menyediakan format dasar yang digunakan oleh eksporter lainnya. - - - - Preview with highlighter. - Pratinjau dengan stabilo. - - - - Plain text - Teks biasa - - - - Chose output file... - Pilih file keluaran... - - - - A little known format modestly used. You know, web sites for example. - - - - - Needs LaTeX to be installed. - 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: - - - - - Books that don't kill trees. - - - - - OpenDocument format. Used by LibreOffice for example. - - - - - Microsoft Office (.docx) document. - - - - - reStructuredText is a lightweight markup language. - - - - - Just like plain text, excepts adds markdown titles. - Presupposes that texts are formatted 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>. - - - - - <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> - - - - - - 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. - - - - - Export to markdown, using pandoc. Allows more formatting options - than the basic manuskript exporter. - - - - - LaTeX is a word processor and document markup language used to create - beautiful documents. - - - - - The purpose of this format is to provide a way to exchange information - between outliners and Internet services that can be browsed or controlled - through an outliner. - - - - - Disable YAML metadata block. -Use that if you get YAML related error. - - - - - Convert to ePUB3 - - - - - Self-contained HTML files, with no dependencies - - - + + ExportersManager Manage Exporters - + Kelola Exportir Manuskript - + Manuskript Description - + Deskripsi Offers export to - + Tawaran ekspor ke Status - + Status Status: - + Status: Version: - + Versi: Path: - + Jalan: ... - + ... {HelpText} - + {TeksBantuan} @@ -272,1160 +59,1181 @@ Use that if you get YAML related error. Frequency Analyzer - + Penganalisis Frekuensi Word frequency - + Frekuensi Kata Settings - + Pengaturan Minimum size: - + Ukuran minimum: Exclude words (comma separated): - + Kata-kata yang dikecualikan (pisahkan dengan koma): Analyze - + Analisa Phrase frequency - + Frekuensi frasa Number of words: from - + Jumlah kata: dari to - - - - - 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) - are added as scene.</p> - <p>Only text files are supported (not images, binary or others).</p> - - - - - 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 - then it will be imported in manuskript. One or the other - might give better result depending on your document. - <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> - <b>none</b>: no line wrap.<br> - <b>preserve</b>: tries to preserves line wrap from the - original document.</p> - - - - - Mind Map Import - - - - - This does not appear to be a valid Mind Map file. - - - - - Mind Map import - - - - - Import tip as: - - - - - Untitled - + ke MDEditCompleter - + Insert reference - + Masukan referensi MainWindow - + General - + Umum - + Title - + Judul - + Subtitle - + Subjudul - + Series - + Seri - + Volume - + Jilid - + Genre - + Genre - + License - + Lisensi - + Author - + Pengarang - + Name - + Nama - + Email - + Surel - + Summary - + Ringkasan - + Situation: - + Situasi: - + Summary: - + Ringkasan: - + One sentence - + Satu kalimat - + One paragraph - + Satu paragraf - + One page - + Satu halaman - + Full - + Penuh - + One sentence summary - + Ringkasan satu kalimat - + One paragraph summary - + Ringkasan satu paragraf - + Expand each sentence of your one paragraph summary to a paragraph - + Kembangkan tiap kalimat dari paragraf ringkasan ke sebuah paragraf baru - + One page summary - + Ringkasan satu halaman - + Full summary - + Ringkasan penuh - + Next - - - - - What if...? - + Selanjutnya + What if...? + Bagaimana jika...? + + + Characters - + Karakter - + Names - + Nama - + Filter - + Filter - + Basic info - + Info dasar - + Importance - + Kepentingan - + Motivation - + Motivasi - + Goal - + Tujuan - + Conflict - + Konflik - + Epiphany - + Pencerahan - + <html><head/><body><p align="right">One sentence<br/>summary</p></body></html> - + <html><head/><body><p align="right">Satu kalimat<br/>ringkasan</p></body></html> - + <html><head/><body><p align="right">One paragraph<br/>summary</p></body></html> - + <html><head/><body><p align="right">Satu paragraf<br/>ringkasan</p></body></html> - + Notes - + Catatan - + Detailed info - + Info detail - + Plots - + Alur - + Plot - + Alur - + Character(s) - + Karakter - + Description - + Deskripsi - + Result - + Hasil - + Resolution steps - + Langkah-langkah resolusi - + World - + Dunia - + Populates with empty data - + Populasi dengan data kosong - + More - + Lebih - + Source of passion - + Sumber semangat - + Source of conflict - + Sumber konflik - + Outline - + Garis besar - + Editor - + Editor - + Debug - + Debug - + FlatData - + FlatData - + Persos - + Labels - + Label - + &File - + &File - + &Recent - + &Baru - + &Help - + &Bantuan - + &Tools - + &Alat - + &Edit - + &Edit - + &View - + &Gambaran - + &Mode - + &Cheat sheet - + Sea&rch - + &Navigation - + &Navigasi - + &Open - + &Buka - + Ctrl+O - + Ctrl+O - + &Save - + &Simpan - + Ctrl+S - + Ctrl+S - + Sa&ve as... - + Ctrl+Shift+S - + Ctrl+Shift+S - + &Quit - + &Keluar - + Ctrl+Q - + Ctrl+Q - + &Show help texts - + &Tunjukan teks bantuan - + Ctrl+Shift+B - + Ctrl+Shift+B - + &Spellcheck - + F9 - + F9 - + &Labels... - + &Label... - + &Status... - + &Status... - + Tree - + Pohon - + &Simple - + &Simpel - + &Fiction - + &Fiksi - + Index cards - + Kartu indeks - + S&ettings - + F8 - + F8 - + &Close project - + &Tutup pekerjaan - + Co&mpile - + F6 - + F6 - + &Frequency Analyzer - + &Penganalisis Frekuensi - + Book information - + Informasi buku - + &About - + &Tentang - + About Manuskript - + Tentang Manuskript - + Manuskript - + Manuskript - + Project {} saved. - + Pekerjaan {} disimpan. - + WARNING: Project {} not saved. - + PERHATIAN: Pekerjaan {} belum tersimpan. - + Project {} loaded. - + Pekerjaan {} diproses. - - Project {} loaded with some errors: - - - - - * {} wasn't found in project file. - - - - + Project {} loaded with some errors. - + (~{} pages) - + (~{} halaman) - + Words: {}{} - + Kata: {}{} - + Book summary - + Ringkasan buku - + Project tree - + Pohon proyek - + Metadata - + Story line - + Jalan cerita - + Enter information about your book, and yourself. - + Masukan informasi tentang buku anda, dan tentang diri anda. - + 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) - + Situasi dasar, dalam bentuk pertanyaan 'Bagaiaman jika...?'. Cth: 'Bagaimana jika + penyihir jahat paling berbahaya tidak mampu membunuh seorang bayi?' (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. - + Ambil waktu untuk memikirkan sebuah kalimat (~50 kata) ringkasan untuk buku anda. Kemudian kembangkan + menjadi sebuah paragraf, kemudian menjadi halaman, kemudian menjadi ringkasan penuh. - + Create your characters. - + Buat karakter anda. - + Develop plots. - + Kembangkan alur. - + Build worlds. Create hierarchy of broad categories down to specific details. - + Bangun dunia. Buat hirarki dari kategori yang luas menjadi detail spesifik. - + Create the outline of your masterpiece. - + Buat garis besar karya besar anda. - + Write. - + Tulis. - + Debug info. Sometimes useful. - + Info debug. Sesuatu yang berguna. - + Dictionary - + Diksi - - Install PyEnchant to use spellcheck - - - - + Nothing - + POV - + Sudut Pandang - + Label - + Label - + Progress - + Kemajuan - + Compile - + Icon color - + Warna ikon - + Text color - + Warna teks - + Background color - + Warna latar belakang - + Icon - + Ikon - + Text - + Teks - + Background - + Latar belakang - + Border - + Garis tepi - + Corner - + Ujung - + Add plot step - + Tambahkan langkah alur - - + + &Import… - + &Impor… - + F7 - + F7 - + &Copy - + Ctrl+C - + Ctrl+C - + C&ut - + Ctrl+X - + Ctrl+X - + &Paste - + &Tempel - + 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 - + &Move Up - + &Pindahkan ke atas - + Ctrl+Shift+Up - + Ctrl+Shift+Up - + M&ove Down - + Ctrl+Shift+Down - + Ctrl+Shift+Down - + Dupl&icate - + &Delete - + &Hapus - + &Rename - + F2 - + F2 - + Organi&ze - + M&erge - + Remove selected plot step(s) - + Hapus langkah alur yang dipilih - + &Format - + &Format - + &Header - + &Header - + &Level 1 (setext) - + Ctrl+Alt+1 - + Ctrl+Alt+1 - + Level &2 - + Ctrl+Alt+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 + + + + + &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. + + + + + F3 + F3 + + + + Shift+F3 + + + + + Situation + + + + + Status + Status + + + + Search + + + No results found + + Settings Settings - + Pengaturan General - + Umum - + Revisions @@ -1435,17 +1243,17 @@ Use that if you get YAML related error. - + Labels - + Label - + Status - + Status - + Fullscreen @@ -1460,665 +1268,721 @@ 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 quit + + Save on project close - - <html><head/><body><p>If you check this option, your project will be save as one single file. Easier to copy or backup, but does not allow collaborative editing, or versionning.<br/>If this is unchecked, your project will be save as a folder containing many small files.</p></body></html> + + <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 - + Pohon - + Colors - + Icon color: - + Nothing - + POV - + Sudut Pandang - + Label - + Label - + Progress - + Kemajuan - + Compile - + Text color: - + Background color: - + Folders - + Show ite&m count - + Show summary - + &Nothing - + Text - + Teks - + Outline - + Garis besar - + Visible columns - + Goal - + Tujuan - + Word count - + Percentage - + Title - + Judul - + Index cards - + Kartu indeks - + Item colors - + Border color: - + Corner color: - + Background - + Latar belakang - + Color: - + Ctrl+S - + Ctrl+S - + Image: - + Text editor - + Font - + Family: - + Size: - + Misspelled: - + Background: - + Paragraphs - + Line spacing: - + Jarak spasi: - + 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: + Ukuran font: + + + + Restarting Manuskript ensures all settings take effect. - - You might need to restart manuskript in order for those settings to take effect properly and entirely. - - - - + 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 About Manuskript - + Tentang Manuskript Manuskript - + Manuskript @@ -2137,52 +2001,39 @@ Use that if you get YAML related error. abstractModel - + Title - + Judul - + POV - + Sudut Pandang - + Label - + Label - + Status - + Status - + Compile - + Word count - + Goal - - - - - app - - - Loaded translation: {}. - - - - - Note: No translator found or loaded for locale {}. - + Tujuan @@ -2221,35 +2072,40 @@ Use that if you get YAML related error. characterModel - + + Name + Nama + + + + Value + + + + New character - - Name - - - - - Value - + + Description + Deskripsi characterTreeView - + Main - + Secondary - + Minor @@ -2284,7 +2140,7 @@ Use that if you get YAML related error. Characters - + Karakter @@ -2294,12 +2150,12 @@ Use that if you get YAML related error. Plots - + Alur World - + Dunia @@ -2365,14 +2221,14 @@ Use that if you get YAML related error. corkDelegate - + One line summary - + Full summary - + Ringkasan penuh @@ -2408,7 +2264,7 @@ Use that if you get YAML related error. Settings - + Pengaturan @@ -2444,12 +2300,12 @@ Use that if you get YAML related error. Title - + Judul Text - + Teks @@ -2479,12 +2335,12 @@ Use that if you get YAML related error. Labels - + Label Status - + Status @@ -2594,7 +2450,7 @@ Use that if you get YAML related error. Font size: - + Ukuran font: @@ -2611,12 +2467,12 @@ Use that if you get YAML related error. {}Level {} text - + Replace ... with … - + Replace --- with — @@ -2681,27 +2537,82 @@ Use that if you get YAML related error. fullScreenEditor - + Theme: - + {} words / {} - + {} words + + + Spellcheck + + + + + Navigation + + + + + New Text + + + + + Title + Judul + + + + Title: Show Full Path + + + + + Theme selector + + + + + Word count + + + + + Progress + Kemajuan + + + + Progress: Auto Show/Hide + + + + + Clock + + + + + Clock: Show Seconds + + generalSettings General - + Umum @@ -2751,7 +2662,7 @@ Use that if you get YAML related error. - Chose file + Choose file @@ -2767,13 +2678,13 @@ Use that if you get YAML related error. Settings - + Pengaturan lineEditView - + Various @@ -2856,17 +2767,17 @@ Use that if you get YAML related error. Text - + Teks Index cards - + Kartu indeks Outline - + Garis besar @@ -2884,25 +2795,40 @@ Use that if you get YAML related error. - + Root - - {} words / {} + + {} words - - {} words + + ({} chars) {} words / {} + + + + + {} words / {} + + + + + {} chars + + + + + {} chars markdownSettings - + Markdown @@ -2922,7 +2848,7 @@ Use that if you get YAML related error. Summary - + Ringkasan @@ -2932,7 +2858,7 @@ Use that if you get YAML related error. Full summary - + Ringkasan penuh @@ -2948,134 +2874,11 @@ Use that if you get YAML related error. myPanel - + Auto-hide - - outlineBasics - - - Set POV - - - - - None - - - - - Set Status - - - - - Set Label - - - - - New - - - - - Main - - - - - Secondary - - - - - Minor - - - - - Set Custom Icon - - - - - Restore to default - - - - - Root - - - - - Open {} items in new tabs - - - - - Open {} in a new tab - - - - - 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). - - - - - New &Folder - - - - - New &Text - - - - - &Copy - - - - - C&ut - - - - - &Paste - - - - - &Rename - - - - - &Delete - - - outlineCharacterDelegate @@ -3099,33 +2902,20 @@ Use that if you get YAML related error. - - outlineItem - - - {} words / {} ({}) - - - - - {} words - - - pandocSettings - + General - + Umum - + Table of Content - + Custom settings for {} @@ -3153,7 +2943,7 @@ Use that if you get YAML related error. General - + Umum @@ -3168,7 +2958,7 @@ Use that if you get YAML related error. Progress - + Kemajuan @@ -3329,60 +3119,60 @@ Use that if you get YAML related error. plotModel - - New plot - - - - + Name - + Nama - + Meta - + New step - + Main - + Secondary - + Minor + + + New plot + + plotTreeView - + Main - + Secondary - + Minor - + **Plot:** {} @@ -3415,17 +3205,17 @@ Use that if you get YAML related error. POV - + Sudut Pandang Status - + Status Label - + Label @@ -3435,7 +3225,7 @@ Use that if you get YAML related error. Goal - + Tujuan @@ -3443,169 +3233,6 @@ Use that if you get YAML related error. - - references - - - Not a reference: {}. - - - - - Unknown reference: {}. - - - - - Path: - - - - - Stats: - - - - - POV: - - - - - Status: - - - - - Label: - - - - - Short summary: - - - - - Long summary: - - - - - Notes: - - - - - Basic info - - - - - Detailed info - - - - - POV of: - - - - - 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: - - - - - Motivation - - - - - Goal - - - - - Epiphany - - - - - Short summary - - - - - Longer summary - - - revisions @@ -3619,12 +3246,12 @@ Use that if you get YAML related error. - + Restore - + Delete @@ -3684,12 +3311,12 @@ Use that if you get YAML related error. - + Line {}: - + Clear all @@ -3706,89 +3333,60 @@ 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: +{} + + sldImportance @@ -3871,22 +3469,22 @@ Use that if you get YAML related error. tabSplitter - + Open selected items in that view. - + Split horizontally - + Close split - + Split vertically @@ -3993,27 +3591,27 @@ Use that if you get YAML related error. - + Novel - + Novella - + Short Story - + Research paper - + Demo projects @@ -4048,147 +3646,147 @@ Use that if you get YAML related error. - + 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 - + Teks - + Something - + <b>Total:</b> {} words (~ {} pages) - + Fiction - + Non-fiction - + Idea - + Note - + Research - + TODO - + First draft - + Second draft - + Final @@ -4196,212 +3794,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.qm b/i18n/manuskript_it.qm index b61e902..7ffdd50 100644 Binary files a/i18n/manuskript_it.qm and b/i18n/manuskript_it.qm differ diff --git a/i18n/manuskript_it.ts b/i18n/manuskript_it.ts index f6ea30b..4c1e707 100644 --- a/i18n/manuskript_it.ts +++ b/i18n/manuskript_it.ts @@ -1,225 +1,12 @@ - - - Export - - - Basic HTML output using the Python module 'markdown'. - Output HTML di base utilizzando il modulo python 'markdown'. - - - - Python module 'markdown'. - modulo python 'markdown'. - - - - Markdown source - Sorgente Markdown - - - - HTML Source - Sorgente HTML - - - - HTML Output - Output HTML - - - - Default exporter, provides basic formats used by other exporters. - Exporter predefinito, fornisce formati di base usati da altri exporter. - - - - Preview with highlighter. - Anteprima con evidenziatore. - - - - Plain text - Testo normale - - - - Chose output file... - Scegli il file di output... - - - - A little known format modestly used. You know, web sites for example. - Un formato poco conosciuto usato raramente. Ad esempio, da siti web. - - - - Needs LaTeX to be installed. - C'è bisogno di 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: - - - - - 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 - - - - - Use <q> tags for quotes in HTML - - - - - LaTeX engine used to produce the PDF. - - - - - Paper size: - - - - - Font size: - - - - - Class: - - - - - Line spacing: - - - - - Books that don't kill trees. - - - - - OpenDocument format. Used by LibreOffice for example. - - - - - Microsoft Office (.docx) document. - - - - - reStructuredText is a lightweight markup language. - - - - - Just like plain text, excepts adds markdown titles. - Presupposes that texts are formatted 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>. - - - - - <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> - - - - - - 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. - - - - - Export to markdown, using pandoc. Allows more formatting options - than the basic manuskript exporter. - - - - - LaTeX is a word processor and document markup language used to create - beautiful documents. - - - - - The purpose of this format is to provide a way to exchange information - between outliners and Internet services that can be browsed or controlled - through an outliner. - - - - - Disable YAML metadata block. -Use that if you get YAML related error. - - - - - Convert to ePUB3 - - - - - Self-contained HTML files, with no dependencies - - - + + ExportersManager Manage Exporters - + Gestisci gli esportatori @@ -229,32 +16,32 @@ Use that if you get YAML related error. Description - + Descrizione Offers export to - + Offre esportazione verso Status - + Stato Status: - + Stato: Version: - + Versione: Path: - + Percorso: @@ -264,7 +51,7 @@ Use that if you get YAML related error. {HelpText} - + {Testo guida} @@ -272,1144 +59,1165 @@ Use that if you get YAML related error. Frequency Analyzer - + Analizzatore di frequenza Word frequency - + Frequenza della parola Settings - + Impostazioni Minimum size: - + Dimensione minima: Exclude words (comma separated): - + Escludi parole (separate da una virgola): Analyze - + Analizza Phrase frequency - + Frequenza della frase Number of words: from - + Numero di parole: da to - - - - - 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) - are added as scene.</p> - <p>Only text files are supported (not images, binary or others).</p> - - - - - 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 - then it will be imported in manuskript. One or the other - might give better result depending on your document. - <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> - <b>none</b>: no line wrap.<br> - <b>preserve</b>: tries to preserves line wrap from the - original document.</p> - - - - - Mind Map Import - - - - - This does not appear to be a valid Mind Map file. - - - - - Mind Map import - - - - - Import tip as: - - - - - Untitled - + a MDEditCompleter - + Insert reference - + Inserisci riferimento MainWindow - + General - + Generale - + Title - + Titolo - + Subtitle - + Sottotitolo - + Series - + Serie - + Volume - + Genre - + Genere - + License - + Licenza - + Author - + Autore - + Name - + Nome - + Email - + E-mail - + Summary - + Riassunto - + Situation: - + Situazione: - + Summary: - + Riassunto: - + One sentence - + Una frase - + One paragraph - + Un paragrafo - + One page - + Una pagina - + Full - + Completo - + One sentence summary - + Riassunto in una frase - + One paragraph summary - + Riassunto in un paragrafo - + Expand each sentence of your one paragraph summary to a paragraph - + Espandi ogni frase del riassunto in un paragrafo in un nuovo paragrafo - + One page summary - + Riassunto in una pagina - + Full summary - + Riassunto completo - + Next - - - - - What if...? - + Avanti + What if...? + Cosa succede se...? + + + Characters - + Personaggi - + Names - + 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 - - - - - Sea&rch - + &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 - + Book information - + 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: - - - - - * {} wasn't found in project file. - - - - + 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 - - Install PyEnchant to use spellcheck - - - - + 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 - - - - - &Import… - + 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) - - - - - Ctrl+Alt+1 - - - - - Level &2 - - - - - Ctrl+Alt+2 - - - - - Level &1 (atx) - - - - - Ctrl+1 - - - - - L&evel 2 - - - - - Ctrl+2 - - - - - Level &3 - - - - - Ctrl+3 - + &Livello 1 (setext) - Level &4 - + Ctrl+Alt+1 + Ctrl+Alt+1 - - Ctrl+4 - + + Level &2 + Livello &2 - Level &5 - + Ctrl+Alt+2 + Ctrl+Alt+2 - - Ctrl+5 - + + Level &1 (atx) + Livello &1 (atx) - Level &6 - + Ctrl+1 + Ctrl+1 - - Ctrl+6 - + + L&evel 2 + L&ivello 2 - - &Bold - + + Ctrl+2 + Ctrl+2 - - Ctrl+B - + + Level &3 + Livello &3 + + + + Ctrl+3 + Ctrl+3 + + + + Level &4 + Livello &4 - &Italic - + Ctrl+4 + Ctrl+4 - - Ctrl+I - + + Level &5 + Livello &5 - - &Strike - + + Ctrl+5 + Ctrl+5 - - &Verbatim - + + Level &6 + Livello &6 - - Su&perscript - + + 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+- - - - - - Co&mment block - - - - - Ctrl+Shift+C - - - - - Clear &formats - - - - - Ctrl+0 - - - - - &Comment line(s) - - - - - &Ordered list - + 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 + Procedere con l'importazione a proprio rischio + + + + Allow POV + Consenti POV (Punto di Vista) + + + + Search + Cerca + + + + Ctrl+F + Ctrl+F + + + + &Technical Support + &Supporto Tecnico + + + + How to obtain technical support for Manuskript. + Come ottenere il support tecnico per Manuskript. + + + + F1 + F1 + + + + &Locate log file... + &Localizza il file log... + + + + Locate log file + Localizza il file log + + + + Locate the diagnostic log file used for this session. + Ricerca il file log della diagnostica usato per questa sessione. + + + + Shift+F1 + Shift+F1 + + + + Sorry! + Spiacente! + + + + This session is not being logged. + Questa sessione non è stata registrata. + + + + A log file is a Work in Progress! + Un file di registro è un lavoro in corso! + + + + The log file "{}" will continue to be written to until Manuskript is closed. + Il file di log "{}" continuerà ad essere scritto finché Manuskript non sarà chiuso. + + + + It will now be displayed in your file manager, but is of limited use until you close Manuskript. + Ora sarà visualizzato nel vostro file manager, ma è di uso limitato finché non chiudete Manuskript. + + + + Error! + Errore! + + + + An error was encountered while trying to show the log file below in your file manager. + Si è verificato un errore durante il tentativo di mostrare il file di log sottostante nel tuo gestore di file. + + + + F3 + F3 + + + + Shift+F3 + Shift+F3 + + + + Situation + Situazione + + + + Status + Stato + + + + Search + + + No results found + Nessun risultato trovato @@ -1417,695 +1225,752 @@ Use that if you get YAML related error. Settings - + Impostazioni General - + Generale - + Revisions - + Revisioni Views - + Visualizzazioni - + Labels - + Etichette - + Status - + Stato - + Fullscreen - + Schermo intero General settings - + Impostazioni generali Application settings - + 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 quit - + + Save on project close + Salva all'uscita - - <html><head/><body><p>If you check this option, your project will be save as one single file. Easier to copy or backup, but does not allow collaborative editing, or versionning.<br/>If this is unchecked, your project will be save as a folder containing many small files.</p></body></html> - + + <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 - - - - - Centered - - - - - Stretched - - - - - Scaled - - - - - Zoomed - - - - - Opacity: - - - - - Position: - - - - - Left - - - - - Center - - - - - Right - - - - - Width: - + 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 - - - - - 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: - - - - - You might need to restart manuskript in order for those settings to take effect properly and entirely. - + 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 + Mostra il progresso in caratteri accanto + alle parole + + + + Char/Word Counter + Contatore di caratteri/parola + + + + Count spaces as chars + Conta gli spazi come caratteri + + + + Show char c&ount + Mostra numero di caratteri + + + + Sho&w char count + Mostra il conteggio dei caratteri SpellAction - + Spelling Suggestions - + Suggerimenti ortografici - + &Add to dictionary - + &Aggiungi al dizionario - + &Remove from custom dictionary - + &Rimuovi dal dizionario personale + + + + &New Character + &Nuovo personaggio + + + + &New Plot Item + &Nuovo elemento della trama + + + + &New World Item + &Nuovo elemento mondo + + + + &Correction Suggestions + &Suggerimenti correzione + + + + &Correction Suggestion + &Suggerimenti correzione @@ -2113,7 +1978,7 @@ Use that if you get YAML related error. About Manuskript - + A proposito di Manuskript @@ -2126,63 +1991,50 @@ Use that if you get YAML related error. Version - + Versione Software Versions in Use: - + Versione del software in uso: abstractModel - + Title - + Titolo - + POV - + Label - + Etichetta - + Status - + Stato - + Compile - + Compila - + Word count - + Conteggio parole - + Goal - - - - - app - - - Loaded translation: {}. - - - - - Note: No translator found or loaded for locale {}. - + Obiettivo @@ -2190,7 +2042,7 @@ Use that if you get YAML related error. Form - + Modulo @@ -2200,58 +2052,63 @@ Use that if you get YAML related error. Goal: - + Obiettivo: Word count - + Conteggio parole One line summary - + Riassunto in una riga Few sentences summary: - + Riassunto un poche frasi: characterModel - - New character - - - - + Name - + Nome - + Value - + Valore + + + + New character + + + + + Description + Descrizione characterTreeView - + Main - + Principale - + Secondary - + Secondario - + Minor - + Minore @@ -2259,47 +2116,47 @@ Use that if you get YAML related error. Form - + Modulo Filter (type the name of anything in your project) - + Filtro (digita il nome di qualsiasi cosa nel tuo progetto) Minor - + Minore Secondary - + Secondario Main - + Principale Characters - + Personaggi Texts - + Testi Plots - + Trame World - + Ambientazione @@ -2307,27 +2164,27 @@ Use that if you get YAML related error. None - + Nessuno Main - + Principale Secondary - + Secondario Minor - + Minore Various - + Vari @@ -2335,7 +2192,7 @@ Use that if you get YAML related error. Various - + Vari @@ -2343,7 +2200,7 @@ Use that if you get YAML related error. Various - + Vari @@ -2351,7 +2208,7 @@ Use that if you get YAML related error. Dock Widgets Toolbar - + Barra degli strumenti Dock Widgets @@ -2359,20 +2216,20 @@ Use that if you get YAML related error. Form - + Modulo corkDelegate - + One line summary - + Riassunto in una riga - + Full summary - + Riassunto completo @@ -2380,7 +2237,7 @@ Use that if you get YAML related error. Form - + Modulo @@ -2388,27 +2245,27 @@ Use that if you get YAML related error. Export - + Esporta Export to: - + Esporta come: Manage exporters - + Gestisci gli esportatori Preview - + Anteprima Settings - + Impostazioni @@ -2416,7 +2273,7 @@ Use that if you get YAML related error. {} (not implemented yet) - + {} (non ancora implementato) @@ -2424,147 +2281,147 @@ Use that if you get YAML related error. Form - + Modulo Content - + Contenuto Decide here what will be included in the final export. - + Decidi qui cosa verrà incluso nell'esportazione finale. Type - + Tipo Title - + Titolo Text - + Testo I need more granularity - + Ho bisogno di maggiore dettaglio Fi&lters - + Fi&ltri <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>Filtra gli elementi da includere nell'esportazione finale.<br/><span style=" color:#773333;">(Non ancora implementato completamente.)</span></p></body></html> Ignore compile status (include all items) - + Ignora la spunta su 'compilato' (includi tutti gli elementi) Subitems of: - + Sottoelemento di: Labels - + Etichette Status - + Stato Separations - + Separazioni Between folders: - + Tra cartelle: Empty line - + Riga vuota Custom - + Personalizzato Between texts: - + Tra i testi: Between folder and text: - + Tra cartella e testo: Between text and folder: - + Tra testo e cartella: Transformations - + Trasformazioni Typographic replacements: - + Sostituzioni tipografiche: Replace double quotes (") with: - + Sostituisci le doppie virgolette (") con: Replace single quotes (') with: - + Sostituisci le singole virgolette (') con: Remove multiple spaces - + Rimuovi gli spazi multipli Custom replacements: - + Sostituzioni personalizzate: Enabled - + Abilitato Replace - + Sostituisci With - + Con @@ -2574,12 +2431,12 @@ Use that if you get YAML related error. If checked, uses regular expression for replacement. If unchecked, replaced as plain text. - + Se selezionato, usa l'espressione regolare per la sostituzione. Se deselezionato, sostituito come testo piano. Preview - + Anteprima @@ -2594,32 +2451,32 @@ Use that if you get YAML related error. Font size: - + Dimensione del font: Folder - + Cartella {}Level {} folder - + {}Livello {} cartella {}Level {} text - + {}Livello {} testo - + Replace ... with … - + Sostituisci ... con … - + Replace --- with — - + Sostituisci --- con — @@ -2627,37 +2484,37 @@ Use that if you get YAML related error. Installed - + Installato Custom - + Personalizzato Not found - + Non trovato {} not found. Install it, or set path manually. - + {} non trovato. Installalo, o imposta il percorso manualmente. <b>Status:</b> uninstalled. - + <b>Stato:</b> non installato. <b>Requires:</b> - + <b>Richiede:</b> Set {} executable path. - + Imposta {} il percorso dell'eseguibile. @@ -2665,35 +2522,90 @@ Use that if you get YAML related error. Phrases - + Frasi Frequency - + Frequenza Word - + Parola 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 @@ -2701,12 +2613,12 @@ Use that if you get YAML related error. General - + Generale Split scenes at: - + Dividi le scene in: @@ -2716,17 +2628,17 @@ Use that if you get YAML related error. Trim long titles (> 32 chars) - + Taglia i titoli lunghi (> 32 caratteri) Import under: - + Importa sotto: Import in a top-level folder - + Importa in una cartella di livello superiore @@ -2734,7 +2646,7 @@ Use that if you get YAML related error. If you don't wanna see me, you can hide me in Help menu. - + Se non vuoi vedermi, puoi nascondermi nel menu Guida. @@ -2742,40 +2654,40 @@ Use that if you get YAML related error. Import - + Importa Format: - + Formato: - Chose file - + Choose file + Scegli file Clear file - + Cancella file Preview - + Anteprima Settings - + Impostazioni lineEditView - + Various - + Vari @@ -2783,37 +2695,37 @@ Use that if you get YAML related error. Form - + Modulo Lock screen: - + Blocca schermo: Word target - + Obiettivo di parole Time target - + Obiettivo di tempo words - + parole minutes - + minuti Lock ! - + Blocca ! @@ -2823,7 +2735,7 @@ Use that if you get YAML related error. ~{} mn. - + ~{} min. @@ -2833,17 +2745,17 @@ Use that if you get YAML related error. {} s. - + {} sec. {} remaining - + {} rimanenti {} words remaining - + {} parole rimanenti @@ -2851,22 +2763,22 @@ Use that if you get YAML related error. Form - + Modulo Text - + Testo Index cards - + Schede Outline - + Quadro d'insieme @@ -2876,7 +2788,7 @@ Use that if you get YAML related error. Go to parent item - + Vai all'elemento padre @@ -2884,25 +2796,40 @@ Use that if you get YAML related error. - + Root - + Radice - - {} words / {} - - - - + {} words - + {} parole + + + + ({} chars) {} words / {} + ({} caratteri) {} parole / {} + + + + {} words / {} + {} parole / {} + + + + {} chars + {} caratteri + + + + {} chars + {} caratteri markdownSettings - + Markdown @@ -2912,168 +2839,45 @@ Use that if you get YAML related error. Form - + Modulo Properties - + Proprietà Summary - + Riassunto One line summary - + Riassunto in una riga Full summary - + Riassunto completo Notes / References - + Note / Riferimenti Revisions - + Revisioni myPanel - + Auto-hide - - - - - outlineBasics - - - Set POV - - - - - None - - - - - Set Status - - - - - Set Label - - - - - New - - - - - Main - - - - - Secondary - - - - - Minor - - - - - Set Custom Icon - - - - - Restore to default - - - - - Root - - - - - Open {} items in new tabs - - - - - Open {} in a new tab - - - - - 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). - - - - - New &Folder - - - - - New &Text - - - - - &Copy - - - - - C&ut - - - - - &Paste - - - - - &Rename - - - - - &Delete - + Nascondi automaticamente @@ -3081,53 +2885,40 @@ Use that if you get YAML related error. None - + Nessuno Main - + Principale Secondary - + Secondario Minor - - - - - outlineItem - - - {} words / {} ({}) - - - - - {} words - + Minore pandocSettings - + General - + Generale - + Table of Content - + Tavola dei contenuti - + Custom settings for {} - + Impostazioni personali per {} @@ -3135,17 +2926,17 @@ Use that if you get YAML related error. Main - + Principale Secondary - + Secondario Minors - + Minori @@ -3153,238 +2944,238 @@ Use that if you get YAML related error. General - + Generale Promise - + Promessa Problem - + Problema Progress - + Progressione Resolution - + Risoluzione Try / Fail - + Tentativo / Fallimento No and - + No e Yes but - + Sì ma Freytag's pyramid - + Piramide di Freytag Exposition - + Esposizione Rising action - + Azione in aumento Climax - + Culmine dell'azione Falling action - + Caduta dell'azione Three acts - + Tre atti 1. Setup - + 1. Impostazione 1. Inciting event - + 1. Evento scatenante 1. Turning point - + 1. Punto di svolta 2. Choice - + 2. La scelta 2. Reversal - + 2. Rovesciamento 2. Disaster - + 2. Disastro 3. Stand up - + 3. Risollevamento 3. Climax - + 3. Culmine 3. Ending - + 3. Finale Hero's journey - + Il viaggio dell'eroe Ordinary world - + Mondo ordinario Call to adventure - + Chiamata all'avventura Refusal of the call - + Rifiuto della chiamata Meeting with mentor - + Incontro con il mentore Tests - + Le prove Approach - + Avvicinamento Abyss - + Abisso Reward / Revelation - + Ricompensa / Rivelazione Transformation - + Trasformazione Atonement - + Espiazione Return - + Ritorno plotModel - - New plot - - - - + Name - + Nome - + Meta - + New step - + Nuovo passaggio - + Main - + Principale - + Secondary - + Secondario - + Minor - + Minore + + + + New plot + plotTreeView - + Main - + Principale - + Secondary - + Secondario - + Minor - + Minore - + **Plot:** {} - + **Trama:** {} @@ -3392,17 +3183,17 @@ Use that if you get YAML related error. Main - + Principale Secondary - + Secondario Minors - + Minori @@ -3410,7 +3201,7 @@ Use that if you get YAML related error. Form - + Modulo @@ -3420,190 +3211,27 @@ Use that if you get YAML related error. Status - + Stato Label - + Etichetta Compile - + Compilato Goal - + Obiettivo Word count - - - - - references - - - Not a reference: {}. - - - - - Unknown reference: {}. - - - - - Path: - - - - - Stats: - - - - - POV: - - - - - Status: - - - - - Label: - - - - - Short summary: - - - - - Long summary: - - - - - Notes: - - - - - Basic info - - - - - Detailed info - - - - - POV of: - - - - - 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: - - - - - Motivation - - - - - Goal - - - - - Epiphany - - - - - Short summary - - - - - Longer summary - + Conteggio parole @@ -3611,87 +3239,87 @@ Use that if you get YAML related error. Form - + Modulo Options - + Opzioni - + Restore - + Ripristina - + Delete - + Cancella Show modifications - + Mostra modifiche Show ancient version - + Mostra la vecchia versione Show spaces - + Mostra spazi Show modifications only - + Mostra solo le modifiche {} years ago - + {} anni fa {} months ago - + {} mesi fa {} days ago - + {} giorni fa 1 day ago - + 1 giorno fa {} hours ago - + {} ore fa {} minutes ago - + {} minuti fa {} seconds ago - + {} secondi fa - + Line {}: - + Riga {}: - + Clear all - + Cancella tutto @@ -3699,95 +3327,67 @@ Use that if you get YAML related error. Form - + Modulo Search for... - - - - - Search in: - - - - - All - - - - - Title - - - - - Text - - - - - Summary - - - - - Notes - - - - - POV - - - - - Status - - - - - Label - - - - - Options: - - - - - Case sensitive - + Cerca... 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: +{} @@ -3795,27 +3395,27 @@ Use that if you get YAML related error. Form - + Modulo TextLabel - + Etichetta di testo Minor - + Minore Secondary - + Secondario Main - + Principale @@ -3837,17 +3437,31 @@ Use that if you get YAML related error. <p><b>Mark:</b></p> - + + <p>Dividi l'elemento(i) selezionato nel punto indicato.</p> + + <p>Se uno degli oggetti selezionati è una cartella, sarà applicato + ricorsivamente a <i>tutti</i> gli elementi figli.</p> + + <p>Il punto di divisione può contenere le seguenti sequenze di fuga: + <ul> + <li><b><code>\n</code></b>: interruzione di linea</li> + <li><b><code>\t</code></b>: tab</li> + </ul> + </p> + + <p><b>Mark:</b></p> + Split '{}' - + Dividi '{}' Split items - + Dividi elementi @@ -3855,40 +3469,40 @@ Use that if you get YAML related error. Form - + Modulo Show Plots - + Mostra le trame Show Characters - + Mostra i personaggi 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 @@ -3896,7 +3510,7 @@ Use that if you get YAML related error. Various - + Vari @@ -3904,7 +3518,7 @@ Use that if you get YAML related error. Form - + Modulo @@ -3952,22 +3566,22 @@ Use that if you get YAML related error. Expand {} - + Espandi {} Collapse {} - + Collassa {} Expand All - + Espandi tutto Collapse All - + Collassa tutto @@ -3975,7 +3589,7 @@ Use that if you get YAML related error. Form - + Modulo @@ -3985,425 +3599,425 @@ Use that if you get YAML related error. Templates - + Modelli Empty - - - - - Novel - - - - - Novella - - - - - Short Story - + Vuoto - Research paper - + Novel + Romanzo - + + Novella + Romanzo breve + + + + Short Story + Racconto + + + + Research paper + Documento di ricerca + + + Demo projects - + Progetto dimostrativo Add level - + Aggiungi livello Add word count - + Aggiungi conteggio parole Next time, automatically open last project - + La prossima volta, apri automaticamente l'ultimo progetto Open... - + Apri... Recent - + Recente Create - + 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 {} ? - - - - - Empty fiction - - - - - Chapter - - - - - Scene - - - - - Trilogy - - - - - Book - - - - - Section - + 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 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.qm b/i18n/manuskript_ja.qm new file mode 100644 index 0000000..b21501a Binary files /dev/null and b/i18n/manuskript_ja.qm differ diff --git a/i18n/manuskript_ja.ts b/i18n/manuskript_ja.ts new file mode 100644 index 0000000..ff031dc --- /dev/null +++ b/i18n/manuskript_ja.ts @@ -0,0 +1,4008 @@ + + + + + ExportersManager + + + Manage Exporters + 出力機能の管理 + + + + Manuskript + Manuskript + + + + Description + 説明 + + + + Offers export to + へのエクスポートを提供 + + + + Status + 状態 + + + + Status: + 状態: + + + + Version: + バージョン: + + + + Path: + パス: + + + + ... + ... + + + + {HelpText} + {ヘルプテキスト} + + + + FrequencyAnalyzer + + + Frequency Analyzer + 頻度数アナライザ + + + + Word frequency + 単語の頻度 + + + + Settings + 設定 + + + + Minimum size: + 最小サイズ: + + + + Exclude words (comma separated): + カンマ区切りの単語を除外: + + + + Analyze + 解析 + + + + Phrase frequency + フレーズの頻度 + + + + Number of words: from + 字数:from + + + + to + + + + + MDEditCompleter + + + Insert reference + 参照を挿入 + + + + MainWindow + + + General + 全般 + + + + Title + タイトル + + + + Subtitle + サブタイトル + + + + Series + シリーズ + + + + Volume + + + + + 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 + 1ページの要約 + + + + Full summary + 全体の要約 + + + + Next + 次へ + + + + What if...? + もし……? + + + + Characters + 登場人物 + + + + Names + 名前 + + + + 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 + 単語の頻度数解析 + + + + Book information + 本の情報 + + + + &About + About (&A) + + + + About Manuskript + Manuskriptについて + + + + Manuskript + Manuskript + + + + Project {} saved. + プロジェクト {} が保存されました。 + + + + WARNING: Project {} not saved. + 警告:プロジェクト {} は保存されていません。 + + + + Project {} loaded. + プロジェクト {} が読み込まれました。 + + + + 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) + &レベル1 (setext) + + + + 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 + 太字(&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 / Qtバージョン5.11および5.12は、データの損失につながる可能性のあるクラッシュを引き起こすことがわかっています。 + + + + PyQt {} and Qt {} are in use. + PyQt {} と Qt {} が使用されています。 + + + + Proceed with import at your own risk + 自己責任でインポートを続行 + + + + Allow POV + POVを許可 + + + + Search + 検索 + + + + Ctrl+F + Ctrl+F + + + + &Technical Support + 技術的サポート(&T) + + + + 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 + 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. + + + + + F3 + F3 + + + + Shift+F3 + Shift+F3 + + + + Situation + + + + + Status + 状態 + + + + Search + + + No results found + 見つかりませんでした + + + + Settings + + + Settings + 設定 + + + + General + 全般 + + + + Revisions + 改訂 + + + + Views + 外観 + + + + Labels + ラベル + + + + Status + 状態 + + + + Fullscreen + 全画面表示 + + + + General settings + 全般の設定 + + + + Application settings + アプリケーションの設定 + + + + 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 + 項目数を表示(&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 + 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 + 透過 + + + + 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> + <p><b>改訂機能は、多数報告された問題の原因となっています。このバージョンのManuskriptでは、最高のエクスペリエンスを提供するために、新規プロジェクトの既定でオフになっています。</b></p><p>なぜ問題はまだ修正されていないのですか?<a href="https://www.theologeek.ch/manuskript/contribute/">Manuskriptをより良くするために、あなたの助けが必要です!</a></p> + + + + Show progress in chars next + to words + + + + + Char/Word Counter + 文字/単語カウンター + + + + Count spaces as chars + 空白を文字として数える + + + + Show char c&ount + 文字数を表示(&O) + + + + Sho&w char count + 文字数を表示(&W) + + + + 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 + + + About Manuskript + Manuskriptについて + + + + Manuskript + Manuskript + + + + aboutDialog + + + Version + バージョン + + + + Software Versions in Use: + 使用中のソフトウェアバージョン: + + + + abstractModel + + + Title + 表題 + + + + POV + POV + + + + Label + ラベル + + + + Status + 状態 + + + + Compile + 編纂 + + + + Word count + 単語数 + + + + Goal + 目標 + + + + basicItemView + + + Form + フォーム + + + + POV: + POV: + + + + Goal: + 目的: + + + + Word count + 単語数 + + + + One line summary + 一行の要約 + + + + Few sentences summary: + 文章の要約: + + + + characterModel + + + Name + 名前 + + + + Value + + + + + New character + + + + + Description + 説明 + + + + characterTreeView + + + Main + メイン + + + + Secondary + セカンダリ + + + + Minor + マイナー + + + + cheatSheet + + + Form + フォーム + + + + Filter (type the name of anything in your project) + 絞り込み(プロジェクト内の任意の名前を入力) + + + + Minor + マイナー + + + + Secondary + セカンダリ + + + + Main + メイン + + + + Characters + 登場人物 + + + + Texts + テキスト + + + + Plots + プロット + + + + World + 世界 + + + + cmbOutlineCharacterChoser + + + None + なし + + + + Main + メイン + + + + Secondary + セカンダリ + + + + Minor + マイナー + + + + Various + 雑多 + + + + cmbOutlineLabelChoser + + + Various + 雑多 + + + + cmbOutlineStatusChoser + + + Various + 雑多 + + + + collapsibleDockWidgets + + + Dock Widgets Toolbar + ウィジェットをツールバーと結合 + + + + completer + + + Form + フォーム + + + + corkDelegate + + + One line summary + 一行の要約 + + + + Full summary + すべての要約 + + + + editorWidget_ui + + + Form + フォーム + + + + exporter + + + Export + 出力 + + + + Export to: + 出力先: + + + + Manage exporters + 出力機能の管理 + + + + Preview + 事前確認 (プレビュー) + + + + Settings + 設定 + + + + exporterDialog + + + {} (not implemented yet) + {} (まだ実装されていません) + + + + exporterSettings + + + Form + フォーム + + + + Content + コンテンツ + + + + Decide here what will be included in the final export. + 最終的に出力する物を決定します。 + + + + Type + + + + + Title + 表題 + + + + Text + テキスト + + + + I need more granularity + もっと細かくする必要があります + + + + Fi&lters + 絞り込み (&L) + + + + <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>最終の出力に含める項目を絞り込みます。<br/><span style=" color:#773333;">(注意:この機能は、まだ完全ではなく、実験的な実装です)</span></p></body></html> + + + + Ignore compile status (include all items) + 編纂の状態を無視する (すべての項目を含める) + + + + Subitems of: + 子項目: + + + + Labels + ラベル + + + + Status + 状態 + + + + Separations + 分離 + + + + Between folders: + フォルダ間: + + + + Empty line + 空行 + + + + Custom + カスタム + + + + Between texts: + 文章間: + + + + Between folder and text: + フォルダとテキストの間: + + + + Between text and folder: + テキストとフォルダの間: + + + + Transformations + 変換 + + + + Typographic replacements: + 構文の置換: + + + + Replace double quotes (") with: + 二重引用符 (") を、次に置き換える: + + + + Replace single quotes (') with: + 一重引用符 (') を、次に置き換える: + + + + Remove multiple spaces + 重複した空白を削除 + + + + Custom replacements: + カスタム置換: + + + + Enabled + 有効 + + + + Replace + 置換 + + + + With + + + + + RegExp + 正規表現 + + + + If checked, uses regular expression for replacement. If unchecked, replaced as plain text. + チェックすると、置換には正規表現を使用します。チェックしない場合は、通常のテキストとして置換します。 + + + + Preview + 事前確認 (プレビュー) + + + + Font + フォント + + + + Font: + フォント: + + + + Font size: + フォントサイズ: + + + + Folder + フォルダ + + + + {}Level {} folder + {}レベル {} フォルダ + + + + {}Level {} text + {}レベル {} テキスト + + + + Replace ... with … + … を … に置き換える + + + + Replace --- with — + --- を — に置き換える + + + + exportersManager + + + Installed + インストール済 + + + + Custom + カスタム + + + + Not found + 見つかりません + + + + {} not found. Install it, or set path manually. + {} は、見つかりません。インストールするか、もしくは、実行ファイルを手動でパスに指定してください。 + + + + <b>Status:</b> uninstalled. + <b>状態:</b> uninstalled. + + + + <b>Requires:</b> + <b>必要:</b> + + + + Set {} executable path. + 実行パスを {} に設定します。 + + + + frequencyAnalyzer + + + Phrases + 成句 + + + + Frequency + 頻度 + + + + Word + 単語 + + + + 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 + 時計: 秒を表示 + + + + generalSettings + + + General + 全般 + + + + Split scenes at: + シーンの分割: + + + + \n---\n + \n---\n + + + + Trim long titles (> 32 chars) + 長い表題を削る (表題は32文字まで) + + + + Import under: + インポート元: + + + + Import in a top-level folder + 最上位フォルダにインポート + + + + helpLabel + + + If you don't wanna see me, you can hide me in Help menu. + これを見たくない場合、ヘルプメニューで非表示にできます。 + + + + importer + + + Import + 読み込み + + + + Format: + フォーマット: + + + + Choose file + ファイルを選択 + + + + Clear file + ファイルを消去 + + + + Preview + プレビュー + + + + Settings + 設定 + + + + lineEditView + + + Various + 雑多 + + + + locker + + + Form + フォーム + + + + Lock screen: + 画面ロック: + + + + Word target + 対象単語 + + + + Time target + 時間目標 + + + + words + 単語 + + + + minutes + + + + + Lock ! + ロック! + + + + ~{} h. + ~{} 時. + + + + ~{} mn. + ~{} 分. + + + + {}:{} + {}:{} + + + + {} s. + {} 秒. + + + + {} remaining + 残り {} + + + + {} words remaining + {} 余剰単語 + + + + mainEditor + + + Form + フォーム + + + + Text + テキスト + + + + Index cards + 索引目録 + + + + Outline + 概要 + + + + F11 + F11 + + + + Go to parent item + 親の項目に移動 + + + + Alt+Up + Alt+Up + + + + Root + ルート + + + + {} words + {} 単語 + + + + ({} chars) {} words / {} + + + + + {} words / {} + + + + + {} chars + + + + + {} chars + + + + + markdownSettings + + + Markdown + Markdown + + + + metadataView + + + Form + フォーム + + + + Properties + 属性 + + + + Summary + 要約 + + + + One line summary + 一行の要約 + + + + Full summary + すべての要約 + + + + Notes / References + 備考/参照 + + + + Revisions + 改訂 + + + + myPanel + + + Auto-hide + 自動的に隠す + + + + outlineCharacterDelegate + + + None + いいえ + + + + Main + メイン + + + + Secondary + セカンダリ + + + + Minor + マイナー + + + + pandocSettings + + + General + 全般 + + + + Table of Content + 目次 + + + + Custom settings for {} + {}のカスタム設定 + + + + persosProxyModel + + + Main + メイン + + + + Secondary + セカンダリ + + + + Minors + マイナー + + + + plotDelegate + + + General + 全般 + + + + Promise + 約束 + + + + Problem + 問題 + + + + Progress + 進捗 + + + + Resolution + 解決 + + + + Try / Fail + 試み / 失敗 + + + + No and + いいえ、それで + + + + Yes but + はい、でも + + + + Freytag's pyramid + フライタークの三角形 + + + + Exposition + 主題の提示 + + + + Rising action + 緊張の高まり + + + + Climax + クライマックス + + + + Falling action + 悲劇的な働き + + + + Three acts + 三幕 + + + + 1. Setup + 1. 設定 + + + + 1. Inciting event + 1. 誘発イベント + + + + 1. Turning point + 1. 転換点 + + + + 2. Choice + 2. 選択 + + + + 2. Reversal + 2. 逆転 + + + + 2. Disaster + 2. 災害 + + + + 3. Stand up + 3. 立ち上がる + + + + 3. Climax + 3. クライマックス + + + + 3. Ending + 3. 結末 + + + + Hero's journey + 主人公の旅 + + + + Ordinary world + 普段の世界 + + + + Call to adventure + 冒険への呼び掛け + + + + Refusal of the call + 呼び掛けの拒否 + + + + Meeting with mentor + 導き手との出会い + + + + Tests + テスト + + + + Approach + アプローチ + + + + Abyss + 深淵 + + + + Reward / Revelation + 報酬 / 発覚 + + + + Transformation + 変容 + + + + Atonement + 償い + + + + Return + + + + + plotModel + + + Name + 名前 + + + + Meta + + + + + New step + + + + + Main + メイン + + + + Secondary + セカンダリ + + + + Minor + マイナー + + + + New plot + + + + + plotTreeView + + + Main + メイン + + + + Secondary + セカンダリ + + + + Minor + マイナー + + + + **Plot:** {} + **プロット:** {} + + + + plotsProxyModel + + + Main + メイン + + + + Secondary + セカンダリ + + + + Minors + マイナー + + + + propertiesView + + + Form + フォーム + + + + POV + POV + + + + Status + 状態 + + + + Label + ラベル + + + + Compile + 編纂 + + + + Goal + 目標 + + + + Word count + 単語数 + + + + revisions + + + Form + フォーム + + + + Options + + + + + Restore + + + + + Delete + 削除 + + + + Show modifications + + + + + Show ancient version + + + + + Show spaces + 空白を表示 + + + + Show modifications only + 変更のみを表示 + + + + {} years ago + {} 年前 + + + + {} months ago + {} ヶ月前 + + + + {} days ago + {} 日前 + + + + 1 day ago + 1 日前 + + + + {} hours ago + {} 時間前 + + + + {} minutes ago + {} 分前 + + + + {} seconds ago + {} 秒前 + + + + Line {}: + 行 {}: + + + + Clear all + すべて消去 + + + + search + + + Form + フォーム + + + + Search for... + 検索する... + + + + 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: +{} + 選択した画像を追加できません: +{} + + + + sldImportance + + + Form + フォーム + + + + TextLabel + テキストラベル + + + + Minor + マイナー + + + + Secondary + セカンダリ + + + + Main + メイン + + + + splitDialog + + + + <p>Split selected item(s) at the given mark.</p> + + <p>If one of the selected item is a folder, it will be applied + recursively to <i>all</i> of it's children items.</p> + + <p>The split mark can contain following escape sequences: + <ul> + <li><b><code>\n</code></b>: line break</li> + <li><b><code>\t</code></b>: tab</li> + </ul> + </p> + + <p><b>Mark:</b></p> + + + + + + Split '{}' + 分割 '{}' + + + + Split items + 選択した項目を分割する + + + + storylineView + + + Form + フォーム + + + + Show Plots + プロットを表示 + + + + Show Characters + 登場人物を表示 + + + + tabSplitter + + + Open selected items in that view. + この画面で選択した項目を開きます。 + + + + Split horizontally + 画面を水平方向に分割する + + + + Close split + 画面の分割を閉じる + + + + Split vertically + 縦に分割 + + + + textEditView + + + Various + 雑多 + + + + textFormat + + + Form + フォーム + + + + CTRL+B + CTRL+B + + + + 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 + + + + treeView + + + Expand {} + 展開 {} + + + + Collapse {} + 折り畳む {} + + + + Expand All + すべて展開 + + + + Collapse All + すべて折り畳む + + + + welcome + + + Form + フォーム + + + + 1 + 1 + + + + Templates + テンプレート + + + + Empty + + + + + Novel + 小説 + + + + Novella + 中編小説 + + + + Short Story + 短編小説 + + + + Research paper + 研究論文 + + + + Demo projects + デモプロジェクト + + + + Add level + レベルを追加 + + + + Add word count + 増加した単語数 + + + + Next time, automatically open last project + 次回起動時は、前回終了時に開いていたプロジェクトを自動的に開く + + + + Open... + 開く... + + + + Recent + 最近使った + + + + Create + 作成 + + + + 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 + 決定稿 + + + + 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.qm b/i18n/manuskript_ko.qm new file mode 100644 index 0000000..4250a5a Binary files /dev/null and b/i18n/manuskript_ko.qm differ diff --git a/i18n/manuskript_ko.ts b/i18n/manuskript_ko.ts new file mode 100644 index 0000000..a1de4f3 --- /dev/null +++ b/i18n/manuskript_ko.ts @@ -0,0 +1,4008 @@ + + + + + ExportersManager + + + Manage Exporters + 내보내기 관리 + + + + Manuskript + Manuskript + + + + Description + 설명 + + + + Offers export to + 제공하는 변환 양식: + + + + Status + 상태 + + + + Status: + 상태: + + + + Version: + 버전: + + + + Path: + 경로: + + + + ... + ... + + + + {HelpText} + {도움말} + + + + FrequencyAnalyzer + + + Frequency Analyzer + 빈도 분석기 + + + + Word frequency + 단어 빈도 + + + + Settings + 설정 + + + + Minimum size: + 최소 크기: + + + + Exclude words (comma separated): + 제외할 단어(쉼표로 구분): + + + + Analyze + 분석 + + + + Phrase frequency + 구절 빈도 + + + + Number of words: from + 어절 수: + + + + to + 내지 + + + + MDEditCompleter + + + Insert reference + 주석 달기 + + + + MainWindow + + + General + 일반 + + + + Title + 제목 + + + + Subtitle + 부제 + + + + Series + 연속물 + + + + Volume + 권수 + + + + 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 + 기본 정보 + + + + 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) + + + + Book information + 책 정보 + + + + &About + 정보(&A) + + + + About Manuskript + Manuskript란 + + + + Manuskript + Manuskript + + + + Project {} saved. + * {}을(를) 프로젝트 파일에서 찾지 못했습니다. + + + + WARNING: Project {} not saved. + 경고: 프로젝트 {}을(를) 갈무리하지 않았습니다. + + + + Project {} loaded. + 프로젝트 {}을(를) 불러왔습니다. + + + + 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 + 축약(&V) + + + + 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 + + + + + &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. + + + + + F3 + F3 + + + + Shift+F3 + + + + + Situation + + + + + Status + 상태 + + + + Search + + + No results found + + + + + Settings + + + Settings + 설정 + + + + General + 일반 + + + + Revisions + 수정본 + + + + Views + 보기 + + + + Labels + 라벨 + + + + Status + 상태 + + + + Fullscreen + 전체 화면 + + + + General settings + 일반 설정 + + + + Application settings + 애플리케이션 설정 + + + + 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 + 개 수정본(10분 전 것은 1분마다) + + + + 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 + 항목 수 보기(&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> + <p><b>수정본 기능은 많은 문제의 원인으로 보고되어 왔습니다. 이번 판의 Manuskript는 최상의 경험을 제공하고자 이 기능을 새 프로젝트에서는 기본적으로 꺼 놓았습니다.</b></p><p>이 문제에 대한 해결책이 있으신가요? <a href="https://www.theologeek.ch/manuskript/contribute/">저희는 여러분의 도움이 필요합니다!</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 + + + About Manuskript + Manuskript란 + + + + Manuskript + Manuskript + + + + aboutDialog + + + Version + 버전 + + + + Software Versions in Use: + 사용 중인 소프트웨어 버전: + + + + abstractModel + + + Title + 제목 + + + + POV + 시점 + + + + Label + 라벨 + + + + Status + 상태 + + + + Compile + 엮기 + + + + Word count + 낱말 수 + + + + Goal + 목표 + + + + basicItemView + + + Form + 형식 + + + + POV: + 시점: + + + + Goal: + 목표: + + + + Word count + 낱말 수 + + + + One line summary + 한 줄 요약 + + + + Few sentences summary: + 몇 마디 요약: + + + + characterModel + + + Name + 이름 + + + + Value + 비중 + + + + New character + + + + + Description + 설명 + + + + characterTreeView + + + Main + 주연 + + + + Secondary + 조연 + + + + Minor + 단역 + + + + cheatSheet + + + Form + 형식 + + + + Filter (type the name of anything in your project) + (프로젝트 내 아무 이름이나) 훑기 + + + + Minor + 단역 + + + + Secondary + 조연 + + + + Main + 주연 + + + + Characters + 등장인물 + + + + Texts + + + + + Plots + 플롯 + + + + World + 세계 + + + + cmbOutlineCharacterChoser + + + None + + + + + Main + 주연 + + + + Secondary + 조연 + + + + Minor + 단역 + + + + Various + 여럿 + + + + cmbOutlineLabelChoser + + + Various + 여럿 + + + + cmbOutlineStatusChoser + + + Various + 여럿 + + + + collapsibleDockWidgets + + + Dock Widgets Toolbar + 위젯을 도구 모음과 결합하기 + + + + completer + + + Form + 형식 + + + + corkDelegate + + + One line summary + 한 줄 요약 + + + + Full summary + 전체 요약 + + + + editorWidget_ui + + + Form + 형식 + + + + exporter + + + Export + 내보내기 + + + + Export to: + 내보낼 형식: + + + + Manage exporters + 내보내는 프로그램 관리 + + + + Preview + 미리 보기 + + + + Settings + 설정 + + + + exporterDialog + + + {} (not implemented yet) + {} (미구현) + + + + exporterSettings + + + Form + 형식 + + + + Content + 내용 + + + + Decide here what will be included in the final export. + 최종적으로 내보낼 것들을 결정하세요. + + + + Type + 형태 + + + + Title + 제목 + + + + Text + + + + + I need more granularity + 세밀하게 고르고 싶습니다 + + + + Fi&lters + 추리기(&l) + + + + <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>마지막으로 내보낼 때 들어갈 항목을 추려냅니다.<br/><span style=" color:#773333;">(아직 완전히 구현되지 않았습니다.)</span></p></body></html> + + + + Ignore compile status (include all items) + 엮은 상태 무시하기 (모든 항목 포함하기) + + + + Subitems of: + 다음의 하위 항목: + + + + Labels + 라벨 + + + + Status + 상태 + + + + Separations + 분리 + + + + Between folders: + 폴더 사이: + + + + Empty line + 공행 + + + + Custom + 임의 설정 + + + + Between texts: + 글 사이: + + + + Between folder and text: + 폴더와 글 사이: + + + + Between text and folder: + 글과 폴더 사이: + + + + Transformations + 변환 + + + + Typographic replacements: + 활자 바꾸기: + + + + Replace double quotes (") with: + 큰따옴표(")를 대신할 것: + + + + Replace single quotes (') with: + 작은따옴표(')를 대신할 것: + + + + Remove multiple spaces + 이중 공백 제거 + + + + Custom replacements: + 임의 변환: + + + + Enabled + 활성화 + + + + Replace + 찾을 것 + + + + With + 바꿀 것 + + + + RegExp + 정규식 + + + + If checked, uses regular expression for replacement. If unchecked, replaced as plain text. + 체크하면 바꿀 때 정규표현식을 사용하고, 체크를 해제하면 일반 텍스트로서 바꿉니다. + + + + Preview + 미리 보기 + + + + Font + 글꼴 + + + + Font: + 글꼴: + + + + Font size: + 글자 크기: + + + + Folder + 폴더 + + + + {}Level {} folder + + + + + {}Level {} text + + + + + Replace ... with … + ...을 …로 바꾸기 + + + + Replace --- with — + ---을 —로 바꾸기 + + + + exportersManager + + + Installed + 깔림 + + + + Custom + 임의 설정 + + + + Not found + 찾지 못함 + + + + {} not found. Install it, or set path manually. + {}을(를) 찾지 못했습니다. 설치하시거나 수동으로 경로를 지정하세요. + + + + <b>Status:</b> uninstalled. + <b>상태:</b> 미설치. + + + + <b>Requires:</b> + <b>필요:</b> + + + + Set {} executable path. + {}을(를) 실행 경로로 지정합니다. + + + + frequencyAnalyzer + + + Phrases + 구절 + + + + Frequency + 빈도 + + + + Word + 단어 + + + + 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 + + + + + generalSettings + + + General + 일반 + + + + Split scenes at: + + + + + \n---\n + + + + + Trim long titles (> 32 chars) + + + + + Import under: + + + + + Import in a top-level folder + + + + + helpLabel + + + If you don't wanna see me, you can hide me in Help menu. + + + + + importer + + + Import + 가져오기 + + + + Format: + 형식: + + + + Choose file + 파일 선택 + + + + Clear file + + + + + Preview + 미리 보기 + + + + Settings + 설정 + + + + lineEditView + + + Various + 여럿 + + + + locker + + + Form + 형식 + + + + Lock screen: + 화면 잠금: + + + + Word target + + + + + Time target + + + + + words + 단어 + + + + minutes + + + + + Lock ! + 잠가 ! + + + + ~{} h. + ~{} 시간. + + + + ~{} mn. + ~{} 분. + + + + {}:{} + {}:{} + + + + {} s. + {} 초. + + + + {} remaining + {} 남음 + + + + {} words remaining + {} 단어 남음 + + + + mainEditor + + + Form + 형식 + + + + Text + + + + + Index cards + 색인 카드 + + + + Outline + 개요 + + + + F11 + F11 + + + + Go to parent item + + + + + Alt+Up + Alt+Up + + + + Root + + + + + {} words + {} 단어 + + + + ({} chars) {} words / {} + + + + + {} words / {} + + + + + {} chars + + + + + {} chars + + + + + markdownSettings + + + Markdown + 마크다운 + + + + metadataView + + + Form + 형식 + + + + Properties + 속성 + + + + Summary + 요약 + + + + One line summary + 한 줄 요약 + + + + Full summary + 전체 요약 + + + + Notes / References + + + + + Revisions + 수정본 + + + + myPanel + + + Auto-hide + + + + + outlineCharacterDelegate + + + None + + + + + Main + 주연 + + + + Secondary + 조연 + + + + Minor + 단역 + + + + pandocSettings + + + General + 일반 + + + + Table of Content + 목차 + + + + Custom settings for {} + + + + + persosProxyModel + + + Main + 주연 + + + + Secondary + 조연 + + + + Minors + + + + + plotDelegate + + + General + 일반 + + + + Promise + + + + + Problem + + + + + Progress + 진척 + + + + Resolution + + + + + Try / Fail + + + + + No and + + + + + Yes but + + + + + 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 + + + + + Tests + + + + + Approach + + + + + Abyss + + + + + Reward / Revelation + + + + + Transformation + + + + + Atonement + + + + + Return + + + + + plotModel + + + Name + 이름 + + + + Meta + + + + + New step + + + + + Main + 주연 + + + + Secondary + 조연 + + + + Minor + 단역 + + + + New plot + + + + + plotTreeView + + + Main + 주연 + + + + Secondary + 조연 + + + + Minor + 단역 + + + + **Plot:** {} + + + + + plotsProxyModel + + + Main + 주연 + + + + Secondary + 조연 + + + + Minors + + + + + propertiesView + + + Form + 형식 + + + + POV + 시점 + + + + Status + 상태 + + + + Label + 라벨 + + + + Compile + 엮기 + + + + Goal + 목표 + + + + Word count + 낱말 수 + + + + revisions + + + Form + 형식 + + + + Options + + + + + Restore + + + + + Delete + 제거 + + + + Show modifications + + + + + Show ancient version + + + + + Show spaces + + + + + Show modifications only + + + + + {} years ago + {} 년 전 + + + + {} months ago + {} 개월 전 + + + + {} days ago + {} 일 전 + + + + 1 day ago + 하루 전 + + + + {} hours ago + {} 시간 전 + + + + {} minutes ago + {} 분 전 + + + + {} seconds ago + {} 초 전 + + + + Line {}: + + + + + Clear all + + + + + search + + + Form + 형식 + + + + Search for... + + + + + 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: +{} + 선택한 그림을 추가할 수 없습니다: +{} + + + + sldImportance + + + Form + 형식 + + + + TextLabel + 텍스트라벨 + + + + Minor + 단역 + + + + Secondary + 조연 + + + + Main + 주연 + + + + splitDialog + + + + <p>Split selected item(s) at the given mark.</p> + + <p>If one of the selected item is a folder, it will be applied + recursively to <i>all</i> of it's children items.</p> + + <p>The split mark can contain following escape sequences: + <ul> + <li><b><code>\n</code></b>: line break</li> + <li><b><code>\t</code></b>: tab</li> + </ul> + </p> + + <p><b>Mark:</b></p> + + + + + + Split '{}' + + + + + Split items + + + + + storylineView + + + Form + 형식 + + + + Show Plots + + + + + Show Characters + + + + + tabSplitter + + + Open selected items in that view. + + + + + Split horizontally + + + + + Close split + + + + + Split vertically + + + + + textEditView + + + Various + 여럿 + + + + textFormat + + + Form + 형식 + + + + CTRL+B + CTRL+B + + + + 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 + + + + treeView + + + Expand {} + + + + + Collapse {} + + + + + Expand All + + + + + Collapse All + + + + + welcome + + + Form + 형식 + + + + 1 + 1 + + + + Templates + + + + + Empty + + + + + Novel + + + + + Novella + + + + + Short Story + + + + + Research paper + + + + + Demo projects + + + + + Add level + + + + + Add word count + + + + + Next time, automatically open last project + + + + + Open... + 열기... + + + + Recent + + + + + Create + 만들기 + + + + 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 + + + + + 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_mr.qm b/i18n/manuskript_mr.qm new file mode 100644 index 0000000..c93fd5b Binary files /dev/null and b/i18n/manuskript_mr.qm differ diff --git a/i18n/manuskript_mr.ts b/i18n/manuskript_mr.ts new file mode 100644 index 0000000..6990c73 --- /dev/null +++ b/i18n/manuskript_mr.ts @@ -0,0 +1,4638 @@ + + + + + Export + + + Basic HTML output using the Python module 'markdown'. + + + + + Python module 'markdown'. + + + + + Markdown source + + + + + HTML Source + + + + + HTML Output + + + + + Default exporter, provides basic formats used by other exporters. + + + + + Preview with highlighter. + + + + + Plain text + साधं मजकूर + + + + A little known format modestly used. You know, web sites for example. + + + + + Needs LaTeX to be installed. + + + + + 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: + ओळींमधले अंतर: + + + + Books that don't kill trees. + + + + + OpenDocument format. Used by LibreOffice for example. + + + + + Microsoft Office (.docx) document. + + + + + reStructuredText is a lightweight markup language. + + + + + Just like plain text, excepts adds markdown titles. + Presupposes that texts are formatted 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>. + + + + + <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> + + + + + + 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. + + + + + Export to markdown, using pandoc. Allows more formatting options + than the basic manuskript exporter. + + + + + LaTeX is a word processor and document markup language used to create + beautiful documents. + + + + + The purpose of this format is to provide a way to exchange information + between outliners and Internet services that can be browsed or controlled + through an outliner. + + + + + Disable YAML metadata block. +Use that if you get YAML related error. + + + + + Convert to ePUB3 + + + + + Could not process regular expression: +{} + + + + + Choose output file… + + + + + ExportersManager + + + Manage Exporters + निर्यातदारांची व्यवस्था करा + + + + Manuskript + मॅन्यूस्क्रिप्ट + + + + Description + वर्णन + + + + Offers export to + + + + + Status + स्थिती + + + + Status: + स्थिती: + + + + Version: + आवृत्ती: + + + + Path: + मार्ग: + + + + ... + ... + + + + {HelpText} + + + + + FrequencyAnalyzer + + + Frequency Analyzer + वारंवारता विश्लेषक + + + + Word frequency + शब्दांची वारंवारता + + + + Settings + पर्याय + + + + Minimum size: + किमान आकार: + + + + Exclude words (comma separated): + हे शब्द वगळा (स्वल्पविरामाने वेगळे केलेले): + + + + Analyze + विश्लेषण + + + + Phrase frequency + वाक्यांशाची वारंवारता + + + + Number of words: from + शब्दांची संख्या: यापासून + + + + to + यापर्यंत + + + + 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) + are added as scene.</p> + <p>Only text files are supported (not images, binary or others).</p> + + + + + 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 + then it will be imported in manuskript. One or the other + might give better result depending on your document. + <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> + <b>none</b>: no line wrap.<br> + <b>preserve</b>: tries to preserves line wrap from the + original document.</p> + + + + + Mind Map Import + + + + + This does not appear to be a valid Mind Map file. + + + + + Mind Map import + + + + + Import tip as: + + + + + Untitled + अशीर्षकांकित + + + + MDEditCompleter + + + Insert reference + उल्लेख समाविष्ट करा + + + + MainWindow + + + General + साधारण + + + + Title + शीर्षक + + + + Subtitle + उपशीर्षक + + + + Series + मालिका + + + + Volume + ग्रंथ + + + + 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 + मूलभूत माहिती + + + + 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 + + + + + Book information + पुस्तकाविषयी माहिती + + + + &About + + + + + About Manuskript + मॅन्यूस्क्रिप्टविषयी माहिती + + + + Manuskript + + + + + Project {} saved. + + + + + WARNING: Project {} not saved. + + + + + Project {} loaded. + + + + + 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 + + + + + &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. + + + + + F3 + + + + + Shift+F3 + + + + + Situation + + + + + Status + + + + + Search + + + No results found + + + + + Settings + + + Settings + + + + + General + + + + + Revisions + + + + + Views + + + + + Labels + + + + + Status + + + + + Fullscreen + + + + + General settings + साधारण पर्याय + + + + Application settings + अ‍ॅप्लिकेशन पर्याय + + + + 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 + + + About Manuskript + मॅन्यूस्क्रिप्टविषयी माहिती + + + + Manuskript + + + + + aboutDialog + + + Version + + + + + Software Versions in Use: + + + + + abstractModel + + + Title + + + + + POV + + + + + Label + + + + + Status + + + + + Compile + + + + + Word count + शब्द गणना + + + + Goal + + + + + basicItemView + + + Form + + + + + POV: + + + + + Goal: + + + + + Word count + शब्द गणना + + + + One line summary + + + + + Few sentences summary: + + + + + characterModel + + + Name + + + + + Value + + + + + characterTreeView + + + Main + + + + + Secondary + + + + + Minor + + + + + cheatSheet + + + Form + + + + + Filter (type the name of anything in your project) + + + + + Minor + + + + + Secondary + + + + + Main + + + + + Characters + + + + + Texts + + + + + Plots + + + + + World + + + + + cmbOutlineCharacterChoser + + + None + + + + + Main + + + + + Secondary + + + + + Minor + + + + + Various + + + + + cmbOutlineLabelChoser + + + Various + + + + + cmbOutlineStatusChoser + + + Various + + + + + collapsibleDockWidgets + + + Dock Widgets Toolbar + + + + + completer + + + Form + + + + + corkDelegate + + + One line summary + + + + + Full summary + पूर्ण सारांश + + + + editorWidget_ui + + + Form + + + + + exporter + + + Export + + + + + Export to: + यात निर्यात करा: + + + + Manage exporters + निर्यातदार सांभाळा + + + + Preview + + + + + Settings + + + + + exporterDialog + + + {} (not implemented yet) + + + + + exporterSettings + + + Form + + + + + Content + + + + + Decide here what will be included in the final export. + + + + + Type + + + + + Title + + + + + Text + + + + + I need more granularity + + + + + Fi&lters + + + + + <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> + + + + + Ignore compile status (include all items) + + + + + Subitems of: + + + + + Labels + + + + + Status + + + + + Separations + + + + + Between folders: + फोल्डरांमध्ये: + + + + Empty line + रिकामी ओळ + + + + Custom + + + + + Between texts: + मजकुरांमध्ये: + + + + Between folder and text: + + + + + Between text and folder: + + + + + Transformations + + + + + Typographic replacements: + + + + + Replace double quotes (") with: + + + + + Replace single quotes (') with: + + + + + Remove multiple spaces + + + + + Custom replacements: + + + + + Enabled + + + + + Replace + + + + + With + + + + + RegExp + + + + + If checked, uses regular expression for replacement. If unchecked, replaced as plain text. + + + + + Preview + + + + + Font + + + + + Font: + + + + + Font size: + फाँट आकार: + + + + Folder + + + + + {}Level {} folder + + + + + {}Level {} text + + + + + Replace ... with … + + + + + Replace --- with — + + + + + exportersManager + + + Installed + + + + + Custom + + + + + Not found + सापडले नाही + + + + {} not found. Install it, or set path manually. + + + + + <b>Status:</b> uninstalled. + <b>स्थिती:</b> विस्थापित. + + + + <b>Requires:</b> + + + + + Set {} executable path. + + + + + frequencyAnalyzer + + + Phrases + + + + + Frequency + + + + + Word + + + + + 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 + + + + + generalSettings + + + General + + + + + Split scenes at: + + + + + \n---\n + + + + + Trim long titles (> 32 chars) + + + + + Import under: + + + + + Import in a top-level folder + + + + + helpLabel + + + If you don't wanna see me, you can hide me in Help menu. + + + + + importer + + + Import + + + + + Format: + + + + + Choose file + फाइल निवडा + + + + Clear file + + + + + Preview + + + + + Settings + + + + + lineEditView + + + Various + + + + + locker + + + Form + + + + + Lock screen: + स्क्रीन लॉक करा: + + + + Word target + शब्दांचे लक्ष्य + + + + Time target + वेळेचे लक्ष्य + + + + words + + + + + minutes + + + + + Lock ! + लॉक! + + + + ~{} h. + ~{} ता. + + + + ~{} mn. + ~{} मि. + + + + {}:{} + + + + + {} s. + {} से. + + + + {} remaining + {} उरले आहेत + + + + {} words remaining + + + + + mainEditor + + + Form + + + + + Text + + + + + Index cards + + + + + Outline + + + + + F11 + + + + + Go to parent item + + + + + Alt+Up + + + + + Root + + + + + {} words + {} शब्द + + + + ({} chars) {} words / {} + + + + + {} words / {} + + + + + {} chars + {} वर्ण + + + + {} chars + {} वर्ण + + + + markdownSettings + + + Markdown + + + + + metadataView + + + Form + + + + + Properties + + + + + Summary + + + + + One line summary + + + + + Full summary + पूर्ण सारांश + + + + Notes / References + + + + + Revisions + + + + + myPanel + + + Auto-hide + + + + + outlineBasics + + + Set POV + दृष्टीकोन सेट करा + + + + None + + + + + Set Status + स्थिती सेट करा + + + + Set Label + खूणचिट्ठी सेट करा + + + + New + + + + + Main + + + + + Secondary + + + + + Minor + + + + + Set Custom Icon + + + + + Restore to default + + + + + Root + + + + + Open {} items in new tabs + + + + + Open {} in a new tab + + + + + About to remove + + + + + Select at least two items. Folders are ignored. + + + + + All items must be on the same level (share the same parent). + + + + + New &Folder + + + + + New &Text + + + + + &Copy + + + + + C&ut + + + + + &Paste + + + + + &Rename + + + + + &Delete + + + + + You're about to delete {} item(s). + + + + + Are you sure? + + + + + outlineCharacterDelegate + + + None + + + + + Main + + + + + Secondary + + + + + Minor + + + + + outlineItem + + + {} words / {} ({}) + + + + + {} words + {} शब्द + + + + pandocSettings + + + General + + + + + Table of Content + + + + + Custom settings for {} + + + + + persosProxyModel + + + Main + + + + + Secondary + + + + + Minors + + + + + plotDelegate + + + General + + + + + Promise + + + + + Problem + + + + + Progress + + + + + Resolution + + + + + Try / Fail + + + + + No and + नाही आणि + + + + Yes but + हो पण + + + + 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 + + + + + Tests + + + + + Approach + + + + + Abyss + + + + + Reward / Revelation + + + + + Transformation + + + + + Atonement + + + + + Return + + + + + plotModel + + + Name + + + + + Meta + + + + + New step + नवीन पाऊल + + + + Main + + + + + Secondary + + + + + Minor + + + + + plotTreeView + + + Main + + + + + Secondary + + + + + Minor + + + + + **Plot:** {} + + + + + plotsProxyModel + + + Main + + + + + Secondary + + + + + Minors + + + + + propertiesView + + + Form + + + + + POV + + + + + Status + + + + + Label + + + + + Compile + + + + + Goal + + + + + Word count + शब्द गणना + + + + references + + + Not a reference: {}. + + + + + Unknown reference: {}. + + + + + Path: + + + + + Stats: + + + + + POV: + + + + + Status: + + + + + Label: + + + + + Short summary: + छोटा सारांश: + + + + Long summary: + मोठा सारांश: + + + + Notes: + + + + + Basic info + मूळ माहिती + + + + Detailed info + तपशीलवार माहिती + + + + POV of: + यांचे दृष्टिकोण: + + + + 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> + + + + + World: <b>{name}</b>{path} + जग: <b>{name}</b>{path} + + + + Referenced in: + यात संदर्भित: + + + + Motivation + + + + + Goal + + + + + Epiphany + + + + + Short summary + छोटा सारांश + + + + Longer summary + मोठा सारांश + + + + revisions + + + Form + + + + + Options + + + + + Restore + + + + + Delete + + + + + Show modifications + बदल दाखवा + + + + Show ancient version + + + + + Show spaces + स्पेस दाखवा + + + + Show modifications only + + + + + {} years ago + + + + + {} months ago + + + + + {} days ago + + + + + 1 day ago + + + + + {} hours ago + + + + + {} minutes ago + + + + + {} seconds ago + + + + + Line {}: + ओळ {}: + + + + Clear all + + + + + search + + + Form + + + + + Search for... + याचा शोध घ्या... + + + + 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: +{} + + + + + sldImportance + + + Form + + + + + TextLabel + + + + + Minor + + + + + Secondary + + + + + Main + + + + + splitDialog + + + + <p>Split selected item(s) at the given mark.</p> + + <p>If one of the selected item is a folder, it will be applied + recursively to <i>all</i> of it's children items.</p> + + <p>The split mark can contain following escape sequences: + <ul> + <li><b><code>\n</code></b>: line break</li> + <li><b><code>\t</code></b>: tab</li> + </ul> + </p> + + <p><b>Mark:</b></p> + + + + + + Split '{}' + '{}' विभाजित करा + + + + Split items + वस्तू विभाजित करा + + + + storylineView + + + Form + + + + + Show Plots + + + + + Show Characters + पात्र दाखवा + + + + tabSplitter + + + Open selected items in that view. + + + + + Split horizontally + क्षैतिज रूपात विभाजन करा + + + + Close split + विभाजन बंद करा + + + + Split vertically + अनुलंब रूपात विभाजन करा + + + + textEditView + + + Various + + + + + textFormat + + + Form + + + + + CTRL+B + + + + + CTRL+I + + + + + CTRL+U + + + + + CTRL+P + + + + + CTRL+L + + + + + CTRL+E + + + + + CTRL+R + + + + + CTRL+J + + + + + treeView + + + Expand {} + विस्तार करा {} + + + + Collapse {} + + + + + Expand All + सर्वाचा विस्तार करा + + + + Collapse All + + + + + welcome + + + Form + + + + + 1 + + + + + Templates + + + + + Empty + + + + + Novel + + + + + Novella + + + + + Short Story + + + + + Research paper + संशोधन पत्र + + + + Demo projects + + + + + Add level + स्तर जोडा + + + + Add word count + + + + + Next time, automatically open last project + + + + + Open... + + + + + Recent + + + + + Create + + + + + 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 + + + + + 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.qm b/i18n/manuskript_nb_NO.qm index bb7a3b6..491db48 100644 Binary files a/i18n/manuskript_nb_NO.qm and b/i18n/manuskript_nb_NO.qm differ diff --git a/i18n/manuskript_nb_NO.ts b/i18n/manuskript_nb_NO.ts index 29270d5..4ad8260 100644 --- a/i18n/manuskript_nb_NO.ts +++ b/i18n/manuskript_nb_NO.ts @@ -1,219 +1,6 @@ - - - Export - - - Basic HTML output using the Python module 'markdown'. - Grunnleggende HTML-eksport via Python-modulen 'markdown'. - - - - Python module 'markdown'. - - - - - Markdown source - - - - - HTML Source - - - - - HTML Output - - - - - Default exporter, provides basic formats used by other exporters. - Forvalgt eksportør, tilbyr grunnleggende format brukt av andre eksportører. - - - - Preview with highlighter. - Forhåndsvis med framhever. - - - - Plain text - Klartekst - - - - Chose output file... - Velg utdatafil… - - - - A little known format modestly used. You know, web sites for example. - Et lite kjent format i moderat bruk. Du vet, nettsider for eksempel. - - - - Needs LaTeX to be installed. - 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: - - - - Books that don't kill trees. - Bøker som ikke dreper trær. - - - - OpenDocument format. Used by LibreOffice for example. - OpenDocument-format. Brukt av for eksempel LibreOffice. - - - - Microsoft Office (.docx) document. - Microsoft Office (.docx) -dokument. - - - - reStructuredText is a lightweight markup language. - reStructuredText er et lett oppmerkingsspråk… - - - - Just like plain text, excepts adds markdown titles. - Presupposes that texts are formatted 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>. - - - - - <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> - - - - - - 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. - - - - - Export to markdown, using pandoc. Allows more formatting options - than the basic manuskript exporter. - - - - - LaTeX is a word processor and document markup language used to create - beautiful documents. - - - - - The purpose of this format is to provide a way to exchange information - between outliners and Internet services that can be browsed or controlled - through an outliner. - - - - - Disable YAML metadata block. -Use that if you get YAML related error. - - - - - Convert to ePUB3 - Konverter til ePUB3 - - + + ExportersManager @@ -315,134 +102,10 @@ 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) - are added as scene.</p> - <p>Only text files are supported (not images, binary or others).</p> - - - - - 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 - then it will be imported in manuskript. One or the other - might give better result depending on your document. - <br/>&nbsp; - - - - - 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> - <b>none</b>: no line wrap.<br> - <b>preserve</b>: tries to preserves line wrap from the - original document.</p> - - - - - Mind Map Import - - - - - This does not appear to be a valid Mind Map file. - - - - - Mind Map import - - - - - Import tip as: - - - - - Untitled - Uten tittel - - MDEditCompleter - + Insert reference Sett inn referanse @@ -450,965 +113,1108 @@ Use that if you get YAML related error. MainWindow - + General - + Title Tittel - + Subtitle Undertittel - + Series - + Volume Lydstyrke - + Genre - + License Lisens - + Author - + Name - + Email - + E-post - + Summary Sammendrag - + Situation: Situasjon: - + Summary: Sammendrag: - + One sentence Ei setning - + One paragraph Ett avsnitt - + One page Ei side - + Full - + One sentence summary Sammendrag i ei setning - + One paragraph summary Sammendrag i ett avsnitt - + Expand each sentence of your one paragraph summary to a paragraph Utvid hver setning fra din enkle avsnittsammendrag til et avsnitt - + One page summary Énsiderssammendrag - + Full summary Helhetlig sammendrag - + Next Neste - + What if...? Hva om…? - + Characters - + Names 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 - + Book information Bokinformasjon - + &About &Om - + About Manuskript Om Manuskript - + Manuskript - + Project {} saved. - Prosjekt {} lagret. + * {} ble ikke funnet i prosjektfila. - + 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 - - Install PyEnchant to use spellcheck - - - - + 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 - - - - - &Import… - + 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) - - - - - Ctrl+Alt+1 - - - - - Level &2 - - - - - Ctrl+Alt+2 - - - - - Level &1 (atx) - - - - - Ctrl+1 - - - - - L&evel 2 - - - - - Ctrl+2 - - - - - Level &3 - - - - - Ctrl+3 - + &Nivå 1 (setext) - Level &4 - + Ctrl+Alt+1 + Ctrl+Alt+1 - - Ctrl+4 - + + Level &2 + Nivå &2 - Level &5 - + Ctrl+Alt+2 + Ctrl+Alt+2 - - Ctrl+5 - + + Level &1 (atx) + Nivå %2 (atx) - Level &6 - + Ctrl+1 + Ctrl+1 - - Ctrl+6 - + + L&evel 2 + N&ivå 2 - - &Bold - + + Ctrl+2 + Ctrl+2 - - Ctrl+B - + + Level &3 + Nivå &3 + + + + Ctrl+3 + Ctrl+3 + + + + Level &4 + Nivå &4 - &Italic - + Ctrl+4 + Ctrl+4 - - Ctrl+I - + + Level &5 + Nivå &5 - - &Strike - + + Ctrl+5 + Ctrl+5 - - &Verbatim - + + Level &6 + Nivå &6 - - Su&perscript - + + 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+- - - - - - Co&mment block - - - - - Ctrl+Shift+C - - - - - Clear &formats - - - - - Ctrl+0 - - - - - &Comment line(s) - - - - - &Ordered list - + 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 krasj 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 krasj og datatap + + + + Allow POV - - The file {} does not exist. Has it been moved or deleted? + + Search + + + + + 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 + + + + + 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. + + + + + F3 + + + + + Shift+F3 + + + + + Situation + + + + + Status + + + + + Search + + + No results found @@ -1425,7 +1231,7 @@ Use that if you get YAML related error. - + Revisions @@ -1435,17 +1241,17 @@ Use that if you get YAML related error. - + Labels - + Status - + Fullscreen Fullskjermsvisning @@ -1457,655 +1263,711 @@ Use that if you get YAML related error. Application settings - Programstil + 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 quit - Lagre ved avslutning + + Save on project close + Lagre ved avslutning - - <html><head/><body><p>If you check this option, your project will be save as one single file. Easier to copy or backup, but does not allow collaborative editing, or versionning.<br/>If this is unchecked, your project will be save as a folder containing many small files.</p></body></html> - + + <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: - - You might need to restart manuskript in order for those settings to take effect properly and entirely. - + + 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 - - Paragraph + + 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 - - &Remove from custom dictionary - + + &New Character + + + + + &New Plot Item + + + + + &New World Item + + + + + &Correction Suggestions + + + + + &Correction Suggestion + @@ -2113,7 +1975,7 @@ Use that if you get YAML related error. About Manuskript - + Om Manuskript @@ -2131,58 +1993,45 @@ Use that if you get YAML related error. Software Versions in Use: - + Programvareversjoner i bruk: abstractModel - + Title - + Tittel - + POV - + Label - + Status - + Compile - + Kompiler - + Word count - + Antall ord - + Goal - - - - - app - - - Loaded translation: {}. - - - - - Note: No translator found or loaded for locale {}. - + Mål @@ -2190,7 +2039,7 @@ Use that if you get YAML related error. Form - + Skjema @@ -2200,56 +2049,61 @@ Use that if you get YAML related error. Goal: - + Mål: Word count - + Antall ord One line summary - + Énlinjessammendrag Few sentences summary: - + Sammendrag bestående av noen setninger: characterModel - - New character - - - - + Name - + Value - + Verdi + + + + New character + + + + + Description + characterTreeView - + Main - + Hoved - + Secondary - + Sekundær - + Minor @@ -2259,12 +2113,12 @@ Use that if you get YAML related error. Form - + Skjema Filter (type the name of anything in your project) - + Filtrer (skriv inn navnet på noe i prosjektet ditt) @@ -2274,27 +2128,27 @@ Use that if you get YAML related error. Secondary - + Sekundær Main - + Hoved Characters - + Tegn Texts - + Tekster Plots - + Plott @@ -2312,12 +2166,12 @@ Use that if you get YAML related error. Main - + Hoved Secondary - + Sekundær @@ -2327,7 +2181,7 @@ Use that if you get YAML related error. Various - + Ymse @@ -2335,7 +2189,7 @@ Use that if you get YAML related error. Various - + Ymse @@ -2343,7 +2197,7 @@ Use that if you get YAML related error. Various - + Ymse @@ -2359,20 +2213,20 @@ Use that if you get YAML related error. Form - + Skjema corkDelegate - + One line summary - + Énlinjessammendrag - + Full summary - + Fullstendig sammendrag @@ -2380,7 +2234,7 @@ Use that if you get YAML related error. Form - + Skjema @@ -2398,17 +2252,17 @@ Use that if you get YAML related error. Manage exporters - + Håndter eksportører Preview - + Forhåndsvis Settings - + Innstillinger @@ -2444,7 +2298,7 @@ Use that if you get YAML related error. Title - + Tittel @@ -2489,27 +2343,27 @@ Use that if you get YAML related error. Separations - + Inndelinger Between folders: - + Mellom mapper: Empty line - + Tom linje Custom - + Egendefinert Between texts: - + Mellom tekster: @@ -2554,12 +2408,12 @@ Use that if you get YAML related error. Enabled - + Påskrudd Replace - + Erstatt @@ -2594,32 +2448,32 @@ Use that if you get YAML related error. Font size: - + Skriftstørrelse: Folder - + Mappe {}Level {} folder - + {}Nivå {} mappe {}Level {} text - + Replace ... with … - + Erstatt ... med … - + Replace --- with — - + Erstatt --- med — @@ -2627,17 +2481,17 @@ Use that if you get YAML related error. Installed - + Installert Custom - + Egendefinert Not found - + Ikke funnet @@ -2652,7 +2506,7 @@ Use that if you get YAML related error. <b>Requires:</b> - + <b>Krever:</b> @@ -2681,19 +2535,74 @@ 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 @@ -2751,8 +2660,8 @@ Use that if you get YAML related error. - Chose file - + Choose file + Velg fil @@ -2773,7 +2682,7 @@ Use that if you get YAML related error. lineEditView - + Various @@ -2838,12 +2747,12 @@ Use that if you get YAML related error. {} remaining - + {} gjenstår {} words remaining - + {} ord gjenstår @@ -2851,7 +2760,7 @@ Use that if you get YAML related error. Form - + Skjema @@ -2861,7 +2770,7 @@ Use that if you get YAML related error. Index cards - + Indekskort @@ -2884,25 +2793,40 @@ Use that if you get YAML related error. - + Root - - {} words / {} - + + {} words + {} ord - - {} words - + + ({} chars) {} words / {} + + + + + {} words / {} + + + + + {} chars + + + + + {} chars + markdownSettings - + Markdown @@ -2912,7 +2836,7 @@ Use that if you get YAML related error. Form - + Skjema @@ -2922,17 +2846,17 @@ Use that if you get YAML related error. Summary - + Sammendrag One line summary - + Énlinjessammendrag Full summary - + Fullstendig sammendrag @@ -2942,140 +2866,17 @@ Use that if you get YAML related error. Revisions - + Revisjoner myPanel - + Auto-hide - - outlineBasics - - - Set POV - - - - - None - - - - - Set Status - - - - - Set Label - - - - - New - - - - - Main - - - - - Secondary - - - - - Minor - - - - - Set Custom Icon - - - - - Restore to default - - - - - Root - - - - - Open {} items in new tabs - - - - - Open {} in a new tab - - - - - 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). - - - - - New &Folder - - - - - New &Text - - - - - &Copy - - - - - C&ut - - - - - &Paste - - - - - &Rename - - - - - &Delete - - - outlineCharacterDelegate @@ -3086,12 +2887,12 @@ Use that if you get YAML related error. Main - + Hoved Secondary - + Sekundær @@ -3099,35 +2900,22 @@ Use that if you get YAML related error. - - outlineItem - - - {} words / {} ({}) - - - - - {} words - - - pandocSettings - + General - + Table of Content - + Custom settings for {} - + Egendefinerte innstillinger for {} @@ -3135,12 +2923,12 @@ Use that if you get YAML related error. Main - + Hoved Secondary - + Sekundær @@ -3158,7 +2946,7 @@ Use that if you get YAML related error. Promise - + Løfte @@ -3168,27 +2956,27 @@ Use that if you get YAML related error. Progress - + Framdrift Resolution - + Løsning Try / Fail - + Prøv / feil No and - + Nei, og Yes but - + Ja, men @@ -3223,22 +3011,22 @@ Use that if you get YAML related error. 1. Setup - + 1. Oppsett 1. Inciting event - + 1. Igangsettende hendelse 1. Turning point - + 1. Vendepunkt 2. Choice - + 2. Valg @@ -3248,7 +3036,7 @@ Use that if you get YAML related error. 2. Disaster - + 2. Katastrofe @@ -3263,7 +3051,7 @@ Use that if you get YAML related error. 3. Ending - + 3. Slutt @@ -3293,7 +3081,7 @@ Use that if you get YAML related error. Tests - + Tester @@ -3329,60 +3117,60 @@ Use that if you get YAML related error. plotModel - - New plot - - - - + Name - + Meta - + New step - + Main - + Secondary - + Minor + + + New plot + + plotTreeView - + Main - + Secondary - + Minor - + **Plot:** {} @@ -3397,7 +3185,7 @@ Use that if you get YAML related error. Secondary - + Sekundær @@ -3443,169 +3231,6 @@ Use that if you get YAML related error. - - references - - - Not a reference: {}. - - - - - Unknown reference: {}. - - - - - Path: - - - - - Stats: - - - - - POV: - - - - - Status: - - - - - Label: - - - - - Short summary: - - - - - Long summary: - - - - - Notes: - - - - - Basic info - - - - - Detailed info - - - - - POV of: - - - - - 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: - - - - - Motivation - - - - - Goal - - - - - Epiphany - - - - - Short summary - - - - - Longer summary - - - revisions @@ -3619,19 +3244,19 @@ Use that if you get YAML related error. - + Restore - + Delete Show modifications - + Vis endringer @@ -3661,37 +3286,37 @@ Use that if you get YAML related error. {} days ago - + {} dager siden 1 day ago - + i går {} hours ago - + {} timer siden {} minutes ago - + {} minutter siden {} seconds ago - + {} sekunder siden - + Line {}: - + Clear all - + Tøm alt @@ -3699,96 +3324,68 @@ Use that if you get YAML related error. Form - + Skjema Search for... - - - - - Search in: - - - - - All - - - - - Title - - - - - Text - - - - - Summary - - - - - Notes - - - - - POV - - - - - Status - - - - - Label - - - - - Options: - - - - - Case sensitive - + Søk etter… 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: +{} + sldImportance @@ -3815,7 +3412,7 @@ Use that if you get YAML related error. Main - + Hoved @@ -3837,12 +3434,26 @@ Use that if you get YAML related error. <p><b>Mark:</b></p> - + + <p>Del valgte element(er) ved gitt merke.</p> + + <p>Hvis ett av de valgte elementene er en mappe, vil det bli utført + rekursivt for <i>alle</i> dens underelementer.</p> + + <p>Delingsmerket kan inneholde følgende skiftesekvenser: + <ul> + <li><b><code>\n</code></b>: Linjeskift</li> + <li><b><code>\t</code></b>: Tab</li> + </ul> + </p> + + <p><b>Merke:</b></p> + Split '{}' - + Del '{}' @@ -3871,24 +3482,24 @@ 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 @@ -3896,7 +3507,7 @@ Use that if you get YAML related error. Various - + Ymse @@ -3952,22 +3563,22 @@ Use that if you get YAML related error. Expand {} - + Utvid {} Collapse {} - + Fold sammen {} Expand All - + Utvid alle Collapse All - + Fold sammen alle @@ -3975,7 +3586,7 @@ Use that if you get YAML related error. Form - + Skjema @@ -3985,47 +3596,47 @@ Use that if you get YAML related error. Templates - + Maler Empty - + Tom - + Novel - + Roman - + Novella - + Novelle - + Short Story - + Research paper - + Demo projects - + Demoprosjekter Add level - + Legg til nivå Add word count - + Legg til ordantall @@ -4045,365 +3656,365 @@ Use that if you get YAML related error. Create - + 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 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.qm b/i18n/manuskript_nl.qm index 1ae9a45..a3f0e3c 100644 Binary files a/i18n/manuskript_nl.qm and b/i18n/manuskript_nl.qm differ diff --git a/i18n/manuskript_nl.ts b/i18n/manuskript_nl.ts index 6d4083d..3bf550d 100644 --- a/i18n/manuskript_nl.ts +++ b/i18n/manuskript_nl.ts @@ -1,226 +1,12 @@ - - - Export - - - Basic HTML output using the Python module 'markdown'. - Basis HTML uitvoer met de 'markdown' python module. - - - - Python module 'markdown'. - python 'markdown' module. - - - - Markdown source - Markdown code - - - - HTML Source - HTML code - - - - HTML Output - HTML uitvoer - - - - Default exporter, provides basic formats used by other exporters. - Standaard exporter, biedt basis formaten aan die door andere exporters gebruikt wordt. - - - - Preview with highlighter. - Vooruitblik met markeringen - - - - Plain text - Tekst zonder opmaak - - - - Chose output file... - Kies uitvoerbestand... - - - - A little known format modestly used. You know, web sites for example. - Een weinig bekende en weinig gebruikte indeling. Voor websites bijvoorbeeld. - - - - Needs LaTeX to be installed. - 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: - - - - Books that don't kill trees. - Boeken die bomen niet doden. - - - - OpenDocument format. Used by LibreOffice for example. - OpenDocument-indeling. Bijvoorbeeld gebruikt door LibreOffice. - - - - Microsoft Office (.docx) document. - - - - - reStructuredText is a lightweight markup language. - reStructuredText is een lichtgewicht opmaaktaal... - - - - Just like plain text, excepts adds markdown titles. - Presupposes that texts are formatted in markdown. - Net als tekst zonder opmaak, met de uitzondering dat het markdown titels toevoegt. - 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>. - - - - - <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> - - - - - - 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. - - - - - Export to markdown, using pandoc. Allows more formatting options - than the basic manuskript exporter. - - - - - LaTeX is a word processor and document markup language used to create - beautiful documents. - - - - - The purpose of this format is to provide a way to exchange information - between outliners and Internet services that can be browsed or controlled - through an outliner. - - - - - Disable YAML metadata block. -Use that if you get YAML related error. - - - - - Convert to ePUB3 - - - + + ExportersManager Manage Exporters - + Beheer Exporters @@ -230,12 +16,12 @@ Use that if you get YAML related error. Description - + Omschrijving Offers export to - + Biedt export aan naar @@ -250,12 +36,12 @@ Use that if you get YAML related error. Version: - + Versie: Path: - + Pad: @@ -265,7 +51,7 @@ Use that if you get YAML related error. {HelpText} - + {Helptekst} @@ -273,1144 +59,1165 @@ Use that if you get YAML related error. Frequency Analyzer - + Frequentie Analyse Word frequency - + Woord frequentie Settings - + Instellingen Minimum size: - + Minimum grootte: Exclude words (comma separated): - + Woorden uitsluiten (komma gescheiden): Analyze - + Analyseer Phrase frequency - + Frequentie van uitdrukkingen Number of words: from - + Aantal woorden: van to - - - - - 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) - are added as scene.</p> - <p>Only text files are supported (not images, binary or others).</p> - - - - - 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 - then it will be imported in manuskript. One or the other - might give better result depending on your document. - <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> - <b>none</b>: no line wrap.<br> - <b>preserve</b>: tries to preserves line wrap from the - original document.</p> - - - - - Mind Map Import - - - - - This does not appear to be a valid Mind Map file. - - - - - Mind Map import - - - - - Import tip as: - - - - - Untitled - + tot MDEditCompleter - + Insert reference - + Voeg referentie in MainWindow - + General - + Algemeen - + Title - + Titel - + Subtitle - + Ondertitel - + Series - + Serie - + Volume - + Genre - + License - + Licentie - + Author - + Auteur - + Name - + Naam - + Email - + E-mail - + Summary - + Samenvatting - + Situation: - + Situatie: - + Summary: - + Samenvatting: - + One sentence - + Een zin - + One paragraph - + Een alinea - + One page - + Een bladzij - + Full - + Vol - + One sentence summary - + Eenregel-samenvatting - + One paragraph summary - + Een-alinea-samenvatting - + Expand each sentence of your one paragraph summary to a paragraph - + Breid elke zin in elke een-alinea-samenvatting uit tot een alinea - + One page summary - + Samenvatting van een pagina - + Full summary - + Volledige samenvatting - + Next - - - - - What if...? - + Volgende + What if...? + Wat als...? + + + Characters - + Personages - + Names - + Namen - + Filter - + Basic info - + Basisinformatie - + Importance - + Belangrijkheid - + Motivation - + Motivatie - + Goal - + Doel - + Conflict - + Epiphany - + Openbaring - + <html><head/><body><p align="right">One sentence<br/>summary</p></body></html> - + <html><head/><body><p align="right">Een-regel<br/>samenvatting</p></body></html> - + <html><head/><body><p align="right">One paragraph<br/>summary</p></body></html> - + <html><head/><body><p align="right">Een-alinea<br/>samenvatting</p></body></html> - + Notes - + Detailed info - + Gedetailleerde informatie - + Plots - + Verhaallijn - + Plot - + Verhaallijn - + Character(s) - + Personage(s) - + Description - + Result - + Resultaat - + Resolution steps - + Oplosstappen - + World - + Populates with empty data - + Wordt gevuld met lege gegevens - + More - + Meer - + Source of passion - + Bron van passie - + Source of conflict - + Bron van conflict - + Outline - + Structuur - + Editor - + Debug - + FlatData - + Projectgegevens - + Persos - + Personages - + Labels - + &File - + &Recent - + &Help - + &Tools - + &Gereedschappen - + &Edit - + &Wijzig - + &View - + &Mode - + &Cheat sheet - - - - - Sea&rch - + &Spiekblad + Sea&rch + Z&oek + + + &Navigation - + &Open - + Ctrl+O - + &Save - + &Opslaan - + Ctrl+S - + Sa&ve as... - + Ctrl+Shift+S - + &Quit - + &Afsluiten - + Ctrl+Q - + &Show help texts - + &Toon helpteksten - + Ctrl+Shift+B - + &Spellcheck - + &Spellingscontrole - + F9 - + &Labels... - + &Status... - + Tree - + Boom - + &Simple - + &Simpel - + &Fiction - + &Fictie - + Index cards - + Indexkaarten - + S&ettings - + Inst&ellingen - + F8 - + &Close project - + Sl&uit project - + Co&mpile - + Co&mpileer - + F6 - + &Frequency Analyzer - + &Frequentie-analyse - + Book information - + Boek-informatie - + &About - + &Over - + About Manuskript - + Over Manuskript - + Manuskript - + Project {} saved. - + Project {} opgeslagen. - + WARNING: Project {} not saved. - + LET OP: Project {} niet opgeslagen. - + Project {} loaded. - + Project {} geladen. - - Project {} loaded with some errors: - - - - - * {} wasn't found in project file. - - - - + Project {} loaded with some errors. - + Project {} geladen met enkele fouten. - + (~{} pages) - + (~{} pagina's) - + Words: {}{} - + Woorden: {}{} - + Book summary - + Boeksamenvatting - + Project tree - + Projectboom - + Metadata - + Metagegevens - + Story line - + Verhaallijn - + Enter information about your book, and yourself. - + Voer informatie in over het boek en jezelf. - + 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) - + De basissituatie, in de vorm van een 'Wat als...?' vraag. B.v.: 'Wat als de gevaarlijkste, slechtste tovenaar + niet in staat zou zijn een baby te doden?' (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. - + Neem de tijd om over een korte zin (~50 woorden) na te denken die je boek samenvat. Breid die daarna uit naar + een alinea, dan een bladzijde, dan naar een volledige samenvatting. - + Create your characters. - + Creëer je personages. - + Develop plots. - + Ontwikkel verhaallijnen. - + Build worlds. Create hierarchy of broad categories down to specific details. - + Bouw werelden. Maak hiërarchie van brede categoriën tot specifieke details. - + Create the outline of your masterpiece. - + Creëer de structuur van je meesterwerk. - + Write. - + Schrijf. - + Debug info. Sometimes useful. - + Debug-informatie. Some nuttig. - + Dictionary - + Woordenboek - - Install PyEnchant to use spellcheck - - - - + Nothing - + Niets - + POV - + Perspectief - + Label - + Progress - + Voortgang - + Compile - + Compileer - + Icon color - + Icoonkleur - + Text color - + Tekstkleur - + Background color - + Achtergrondkleur - + Icon - + Icoon - + Text - + Tekst - + Background - + Achtergrond - + Border - + Rand - + Corner - + Hoek - + Add plot step - - - - - &Import… - + Plotstap toevoegen - + + &Import… + &Importeer… + + + F7 - + &Copy - + &Kopieer - + Ctrl+C - + C&ut - + Kn&ip - + Ctrl+X - + &Paste - + &Plak - + Ctrl+V - - + + &Split… - + &Splits… - + Ctrl+Shift+K - + Sp&lit at cursor - + Sp&lits bij cursor - + Ctrl+K - + Ctrl+M - + Ctrl+D - + Del - + Verwijder - + &Move Up - + O&mhoog - + Ctrl+Shift+Up - + M&ove Down - + &Omlaag - + Ctrl+Shift+Down - + Ctrl+Shift+Neer - + Dupl&icate - + Dupl&iceer - + &Delete - + Verwij&der - + &Rename - + He&rnoem - + F2 - + Organi&ze - + Organi&seer - + M&erge - + Sam&envoegen - + &Format - + &Opmaken - + &Header - + &Kop - + &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 - + &Niveau 1 (setext) - Level &4 - + Ctrl+Alt+1 + Ctrl+Alt+1 - - Ctrl+4 - + + Level &2 + Niveau &2 - Level &5 - + Ctrl+Alt+2 + Ctrl+Alt+2 - - Ctrl+5 - + + Level &1 (atx) + Niveau &1 (atx) - Level &6 - + Ctrl+1 + Ctrl+1 - - Ctrl+6 - + + L&evel 2 + L&level 2 - - &Bold - + + Ctrl+2 + Ctrl+2 - - Ctrl+B - + + Level &3 + Niveau &3 + + + + Ctrl+3 + Ctrl+3 + + + + Level &4 + Niveau &4 - &Italic - + Ctrl+4 + Ctrl+4 - - Ctrl+I - + + Level &5 + Niveau &5 - - &Strike - + + Ctrl+5 + Ctrl+5 - - &Verbatim - + + Level &6 + Niveau &6 - - Su&perscript - + + Ctrl+6 + Ctrl+6 + &Bold + &Dikgedrukt + + + + Ctrl+B + Ctrl+B + + + + &Italic + &Schuingedrukt + + + + Ctrl+I + Ctrl+I + + + + &Strike + &Doorgestreept + + + + &Verbatim + &Letterlijk + + + + Su&perscript + Su&perscript + + + Ctrl++ - + Ctrl++ - + Subsc&ript - + Subsc&ript - + Ctrl+- - - - - - Co&mment block - - - - - Ctrl+Shift+C - - - - - Clear &formats - - - - - Ctrl+0 - - - - - &Comment line(s) - - - - - &Ordered list - + Ctrl+- + Co&mment block + Commentaarblok + + + + Ctrl+Shift+C + Ctrl+Shift+C + + + + Clear &formats + Verwijder formattering + + + + Ctrl+0 + Ctrl+0 + + + + &Comment line(s) + &Commentaarregel(s) + + + + &Ordered list + Ge&ordende lijst + + + &Unordered list - + O&ngeordende lijst - + B&lockquote - + Inspringblok - + Remove selected plot step(s) - + Verwijder geselecteerde structuurstap(pen) - + The file {} does not exist. Has it been moved or deleted? - + Het bestand{} bestaat niet. Is het verplaatst of verwijderd? + + + + Install {}{} to use spellcheck + Installeer {}{} om spellingscontrole te gebruiken + + + + {} has no installed dictionaries + {} heeft geen geïnstalleerde woordenboeken + + + + {}{} is not installed + {}{} is niet geïnstalleerd + + + + Save project? + Project opslaan? + + + + Save changes to project "{}" before closing? + Wijzigingen aan project "{}" opslaan voor afsluiten? + + + + Your changes will be lost if you don't save them. + Wijzigingen gaan verloren als je ze niet opslaat. + + + + PyQt / Qt versions 5.11 and 5.12 are known to cause a crash which might result in a loss of data. + PyQt / Qt versies 5.11 en 5.12 kunnen een crash veroorzaken, waardoor gegevens verloren kunnen gaan. + + + + PyQt {} and Qt {} are in use. + Je gebruikt PyQt {} en Qt {}. + + + + Proceed with import at your own risk + Doorgaan met importeren op eigen risico + + + + Allow POV + Sta perspectief toe + + + + Search + Zoek + + + + Ctrl+F + Ctrl+F + + + + &Technical Support + &Technische ondersteuning + + + + How to obtain technical support for Manuskript. + Hoe technische ondersteuning te verkrijgen voor Manuskript. + + + + F1 + F1 + + + + &Locate log file... + Zoek &logbestand... + + + + Locate log file + Toon logbestand + + + + Locate the diagnostic log file used for this session. + Zoek het diagnosebestand voor deze sessie. + + + + Shift+F1 + Shift+F1 + + + + Sorry! + Sorry! + + + + This session is not being logged. + Deze sessie wordt niet vastgelegd. + + + + A log file is a Work in Progress! + Een logbestand is in gebruik! + + + + The log file "{}" will continue to be written to until Manuskript is closed. + Logbestand "{}" wordt aangevuld tot Manuskript wordt afgesloten. + + + + It will now be displayed in your file manager, but is of limited use until you close Manuskript. + Het wordt nu getoond in de bestandsverkenner, maar is van weinig nut totdat Manuskript wordt afgesloten. + + + + Error! + Fout! + + + + An error was encountered while trying to show the log file below in your file manager. + Er trad een fout op bij het tonen van het ondergenoemde logbestand in de bestandsverkenner. + + + + F3 + F3 + + + + Shift+F3 + Shift+F3 + + + + Situation + Situatie + + + + Status + Status + + + + Search + + + No results found + Geen resultaten gevonden @@ -1418,695 +1225,752 @@ Use that if you get YAML related error. Settings - + Instellingen General - + Algemeen - + Revisions - + Revisies Views - + Indelingen - + Labels - + Status - + Fullscreen - + Volledig scherm General settings - + Algemene instellingen Application settings - + Programma-instellingen - + Loading - + Laden - + Automatically load last project on startup - + Automatisch het laatste project laden bij start - + Saving - + Opslaan - + Automatically save every - + Automatisch opslaan elke - + minutes. - + minuten. - + If no changes during - + Als niets gewijzigd gedurende - + seconds. - + seconden. - - Save on quit - + + Save on project close + Sla project op bij sluiten - - <html><head/><body><p>If you check this option, your project will be save as one single file. Easier to copy or backup, but does not allow collaborative editing, or versionning.<br/>If this is unchecked, your project will be save as a folder containing many small files.</p></body></html> - + + <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>Als dit is aangevinkt, wordt het project als één bestand opgeslagen. Eenvoudiger om te kopiëren of te backuppen, maar het staat geen samenwerking of versiebeheer toe.<br />Is dit niet aangevinkt dan wordt het project opgeslagen als een map met vele kleine bestanden.</p></body></html> - + Save to one single file - + Opslaan als één bestand - + 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. - + Revisies zijn een manier om versies te beheren. Voor elk tekstonderdeel worden alle wijzigingen, die aangebracht worden aan de hoofdtekst, opgeslagen, waardoor het mogelijk is eerdere versies te bekijken en terug te zetten. - + Keep revisions - + Revisies bewaren - + S&mart remove - + S&lim verwijderen - + Keep: - + Behoud: - + 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. - + Slim verwijderen staat toe om enkel een bepaald aantal revisies te behouden. Het is aan te raden om dit te gebruiken, tenzij het bestand volloopt met duizenden onbetekenende wijzigingen. - + revisions per day for the last month - + revisies per dag over de laatste maand - + revisions per minute for the last 10 minutes - + revisies per minuut over de laatste 10 minuten - + revisions per hour for the last day - + revisies per uur over de afgelopen dag - + revisions per 10 minutes for the last hour - + revisies per 10 minuten over het laatste uur - + revisions per week till the end of time - + revisies per week - + Views settings - + Indelingsinstellingen - + Tree - + Boom - + Colors - + Kleuren - + Icon color: - + Icoonkleur: - + Nothing - + Niets - + POV - + Perspectief - + Label - + Progress - + Voortgang - + Compile - + Compileer - + Text color: - + Tekstkleur: - + Background color: - + Achtergrondkleur: - + Folders - + Mappen - + Show ite&m count - + Toon aa&ntal - + Show summary - + Toon samenvatting - + &Nothing - + &Niets - + Text - + Tekst - + Outline - + Structuur - + Visible columns - + Zichtbare kolommen - + Goal - + Doel - + Word count - + Aantal woorden - + Percentage - + Title - + Titel - + Index cards - + Indexkaarten - + Item colors - + Kleuren - + Border color: - + Randkleur: - + Corner color: - + Hoekkleur: - + Background - + Achtergrond - + Color: - + Kleur: - + Ctrl+S - + Image: - + Afbeelding: - + Text editor - + Tekst editor - + Font - + Lettertype - + Family: - + Familie: - + Size: - + Grootte: - + Misspelled: - + Fout geschreven: - + Background: - + Achtergrond: - + Paragraphs - + Alinea's - + Line spacing: - + Regelafstand: - + Single - + Enkel - + 1.5 lines - + 1,5 regels - + Double - + Dubbel - + Proportional - + Proportioneel - + % - + Tab width: - + Tab-breedte: - + px - + pt - + Indent 1st line - + Eerste regel inspringen - + Spacing: - + Afstand: - + New - + Nieuw - + Edit - + Wijzigen - + Delete - + Verwijderen - + Theme name: - + Themanaam: - + Apply - + Toepassen - + Cancel - + Afbreken - + Window Background - + Vensterachtergrond - + Text Background - + Tekstachtergrond - + Text Options - + Tekstopties - + Paragraph Options - + Alinea-opties - + Type: - + Soort: - + No Image - + Geen afbeelding - + Tiled - - - - - Centered - - - - - Stretched - - - - - Scaled - - - - - Zoomed - - - - - Opacity: - - - - - Position: - - - - - Left - - - - - Center - - - - - Right - - - - - Width: - + Getegeld + Centered + Gecentreerd + + + + Stretched + Uitgerekt + + + + Scaled + Geschaald + + + + Zoomed + Ingezoomd + + + + Opacity: + Doorzichtigheid: + + + + Position: + Positie: + + + + Left + Links + + + + Center + Midden + + + + Right + Rechts + + + + Width: + Breedte: + + + Corner radius: - + Hoekafronding: - + Margins: - + Marges: - + Padding: - + Opvulling: - + Font: - + Lettertype: - + Style - + Stijl - + Cursor - + Use block insertion of - + Gebruik blokinspringen van - + Alignment: - + Uitlijning: - + Justify - + Uitlijning - + 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: - - - - - You might need to restart manuskript in order for those settings to take effect properly and entirely. - + Uitlijning + Icon Size + Icoongrootte + + + + TextLabel + Tekstlabel + + + + Disable blinking + Knipperen uit + + + + Text area + Tekstveld + + + + Max width + Max. breedte + + + + Left/Right margins: + Linker/rechtermarge: + + + + Top/Bottom margins: + Boven/ondermarge: + + + + S&how progress + T&oon voortgang + + + + Show summar&y + Toon samen&vatting + + + + Show p&rogress + Toon &voortgang + + + + Old st&yle + Oude st&ijl + + + + Transparent + Transparant + + + + Restore defaults + Herstel standaardwaarden + + + + Style: + Stijl: + + + + Language: + Taal: + + + + Font size: + Grootte lettertype: + + + + Restarting Manuskript ensures all settings take effect. + Herstart Manuskript om alle instellingen toe te passen. + + + Show &word count - + Toon aantal &woorden - + &Show word count - + &Toon aantal woorden - + &New style - + &Nieuwe stijl - + Typewriter mode - + Schrijfmachinemodus - + Focus mode - + Focusmodus - + None - + Geen - + Sentence - + Zin - + Line - + Regel - + Paragraph - + Alinea + + + + <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>De optie 'Revisies' heeft tot veel meldingen van problemen geleid. In deze versie van Manuskript is deze optie standaard uitgeschakeld voor nieuwe projecten, om de beste ervaring te leveren.</b></p><p>Waarom zijn deze problemen nog niet opgelost?<a href="https://www.theologeek.ch/manuskript/contribute/">We hebben jouw hulp nodig om Manuskript te maken!</a></p> + + + + Show progress in chars next + to words + Toon voortgang in tekens + naast woorden + + + + Char/Word Counter + Teken/Woordteller + + + + Count spaces as chars + Tel spaties als tekens + + + + Show char c&ount + T&oon aantal tekens + + + + Sho&w char count + Too&n aantal tekens SpellAction - + Spelling Suggestions - + Spellingsvoorstellen - + &Add to dictionary - + Voeg &aan woordenboek toe - + &Remove from custom dictionary - + Ve&rwijder uit persoonlijk woordenboek + + + + &New Character + &Nieuw personage + + + + &New Plot Item + &Nieuw structuurelement + + + + &New World Item + &Nieuw wereldelement + + + + &Correction Suggestions + &Correctievoorstellen + + + + &Correction Suggestion + &Correctievoorstel @@ -2114,7 +1978,7 @@ Use that if you get YAML related error. About Manuskript - + Over Manuskript @@ -2127,63 +1991,50 @@ Use that if you get YAML related error. Version - + Versie Software Versions in Use: - + Softwareversies in gebruik: abstractModel - + Title - + Titel - + POV - + Perspectief - + Label - + Status - + Compile - + Compileer - + Word count - + Aantal woorden - + Goal - - - - - app - - - Loaded translation: {}. - - - - - Note: No translator found or loaded for locale {}. - + Doel @@ -2191,68 +2042,73 @@ Use that if you get YAML related error. Form - + Formulier POV: - + Perspectief: Goal: - + Doel: Word count - + Aantal woorden One line summary - + Eenregel-samenvatting Few sentences summary: - + Samenvatting in een paar regels: characterModel - - New character - - - - + Name - + Naam - + Value - + Waarde + + + + New character + Nieuw personage + + + + Description + Beschrijving characterTreeView - + Main - + Primair - + Secondary - + Secundair - + Minor - + Ondergeschikt @@ -2260,37 +2116,37 @@ Use that if you get YAML related error. Form - + Formulier Filter (type the name of anything in your project) - + Filter (type de naam in van eender wat in het project) Minor - + Ondergeschikt Secondary - + Secundair Main - + Primair Characters - + Personages Texts - + Teksten @@ -2300,7 +2156,7 @@ Use that if you get YAML related error. World - + Wereld @@ -2308,27 +2164,27 @@ Use that if you get YAML related error. None - + Geen Main - + Primair Secondary - + Secundair Minor - + Ondergeschikt Various - + Verschillende @@ -2336,7 +2192,7 @@ Use that if you get YAML related error. Various - + Verschillende @@ -2344,7 +2200,7 @@ Use that if you get YAML related error. Various - + Verschillende @@ -2352,7 +2208,7 @@ Use that if you get YAML related error. Dock Widgets Toolbar - + Dock Widgets knoppenbalk @@ -2360,20 +2216,20 @@ Use that if you get YAML related error. Form - + Formulier corkDelegate - + One line summary - + Eenregel-samenvatting - + Full summary - + Volledige samenvatting @@ -2399,17 +2255,17 @@ Use that if you get YAML related error. Manage exporters - + Beheer uitvoeropties Preview - + Voorbeeld Settings - + Instellingen @@ -2417,7 +2273,7 @@ Use that if you get YAML related error. {} (not implemented yet) - + {} (nog niet geïmplementeerd) @@ -2435,7 +2291,7 @@ Use that if you get YAML related error. Decide here what will be included in the final export. - + Bepaal hier wat in de uiteindelijke export wordt meegenomen. @@ -2445,7 +2301,7 @@ Use that if you get YAML related error. Title - + Titel @@ -2455,7 +2311,7 @@ Use that if you get YAML related error. I need more granularity - + Ik heb fijnere granulariteit nodig @@ -2465,17 +2321,17 @@ Use that if you get YAML related error. <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>Filtert welke onderdelen worden meegenomen in de uiteindelijke export.<br/><span style=" color:#773333;">(Nog niet helemaal geïmplementeerd.)</span></p></body></html> Ignore compile status (include all items) - + Negeer compilatiestatus (neem alle onderdelen mee) Subitems of: - + Alle onderdelen van: @@ -2490,37 +2346,37 @@ Use that if you get YAML related error. Separations - + Scheidingstekens Between folders: - + Tussen mappen: Empty line - + Lege regel Custom - + Zelf bepaald Between texts: - + Tussen teksten: Between folder and text: - + Tussen map en tekst: Between text and folder: - + Tussen tekst en map: @@ -2530,37 +2386,37 @@ Use that if you get YAML related error. Typographic replacements: - + Typografische wijzigingen: Replace double quotes (") with: - + Vervang dubbele aanhalingstekens (") met: Replace single quotes (') with: - + Vervang enkele aanhalingstekens (') met: Remove multiple spaces - + Verwijder dubbele spaties Custom replacements: - + Zelfgedefinieerde vervangingen: Enabled - + Actief Replace - + Vervang @@ -2575,12 +2431,12 @@ Use that if you get YAML related error. If checked, uses regular expression for replacement. If unchecked, replaced as plain text. - + Als aangevinkt: gebruik reguliere expressie voor vervangen. Als niet aangevinkt: vervang als platte tekst. Preview - + Voorbeeld @@ -2595,32 +2451,32 @@ Use that if you get YAML related error. Font size: - + Grootte lettertype: Folder - + Map {}Level {} folder - + {}Niveau {} map {}Level {} text - + Replace ... with … - + Vervang ... door … - + Replace --- with — - + Vervang --- door — @@ -2628,37 +2484,37 @@ Use that if you get YAML related error. Installed - + Geïnstalleerd Custom - + Zelfgedefinieerd Not found - + Niet gevonden {} not found. Install it, or set path manually. - + {} niet gevonden. Installeer het, of geef het pad met de hand in. <b>Status:</b> uninstalled. - + <b>Status:</b> niet geïnstalleerd. <b>Requires:</b> - + <b>Vereist:</b> Set {} executable path. - + Zet {} uitvoerbaar pad. @@ -2666,7 +2522,7 @@ Use that if you get YAML related error. Phrases - + Uitdrukkingen @@ -2682,19 +2538,74 @@ Use that if you get YAML related error. fullScreenEditor - + Theme: - + {} words / {} - + {} woorden / {} - + {} words - + {} woorden + + + + Spellcheck + Spellingscontrole + + + + Navigation + Navigatie + + + + New Text + Nieuwe tekst + + + + Title + Titel + + + + Title: Show Full Path + Titel: toon volledig pad + + + + Theme selector + Themaselectie + + + + Word count + Aantal woorden + + + + Progress + Voortgang + + + + Progress: Auto Show/Hide + Voortgang: auto tonen/verbergen + + + + Clock + Klok + + + + Clock: Show Seconds + Klok: toon seconden @@ -2707,7 +2618,7 @@ Use that if you get YAML related error. Split scenes at: - + Splits scenes bij: @@ -2717,7 +2628,7 @@ Use that if you get YAML related error. Trim long titles (> 32 chars) - + Kap lange titels af (> 32 tekens) @@ -2727,7 +2638,7 @@ Use that if you get YAML related error. Import in a top-level folder - + Importeer in een bovenliggende folder @@ -2735,7 +2646,7 @@ Use that if you get YAML related error. If you don't wanna see me, you can hide me in Help menu. - + Als je mij niet wilt zien kun je me verbergen in het Help-menu. @@ -2752,31 +2663,31 @@ Use that if you get YAML related error. - Chose file - + Choose file + Kies bestand Clear file - + Maak bestand leeg Preview - + Voorbeeld Settings - + Instellingen lineEditView - + Various - + Diversen @@ -2794,17 +2705,17 @@ Use that if you get YAML related error. Word target - + Woord-doel Time target - + Tijd-doel words - + woorden @@ -2839,12 +2750,12 @@ Use that if you get YAML related error. {} remaining - + {} resterend {} words remaining - + {} woorden resterend @@ -2862,12 +2773,12 @@ Use that if you get YAML related error. Index cards - + Indexkaarten Outline - + Structuur @@ -2877,7 +2788,7 @@ Use that if you get YAML related error. Go to parent item - + Ga naar bovenliggend item @@ -2885,25 +2796,40 @@ Use that if you get YAML related error. - + Root - - {} words / {} - + + {} words + {} woorden - - {} words - + + ({} chars) {} words / {} + {} tekens {} woorden / {} + + + + {} words / {} + {} woorden / {} + + + + {} chars + {} tekens + + + + {} chars + {} tekens markdownSettings - + Markdown @@ -2923,158 +2849,35 @@ Use that if you get YAML related error. Summary - + Samenvatting One line summary - + Een-regel-samenvatting Full summary - + Volledige samenvatting Notes / References - + Notities / Referenties Revisions - + Revisies myPanel - + Auto-hide - - - - - outlineBasics - - - Set POV - - - - - None - - - - - Set Status - - - - - Set Label - - - - - New - - - - - Main - - - - - Secondary - - - - - Minor - - - - - Set Custom Icon - - - - - Restore to default - - - - - Root - - - - - Open {} items in new tabs - - - - - Open {} in a new tab - - - - - 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). - - - - - New &Folder - - - - - New &Text - - - - - &Copy - - - - - C&ut - - - - - &Paste - - - - - &Rename - - - - - &Delete - + Automatisch verbergen @@ -3087,12 +2890,12 @@ Use that if you get YAML related error. Main - + Primair Secondary - + Secundair @@ -3100,35 +2903,22 @@ Use that if you get YAML related error. - - outlineItem - - - {} words / {} ({}) - - - - - {} words - - - pandocSettings - + General - + Table of Content - + Custom settings for {} - + Aangepaste instellingen voor {} @@ -3136,17 +2926,17 @@ Use that if you get YAML related error. Main - + Primair Secondary - + Secundair Minors - + Ondergeschikt @@ -3159,12 +2949,12 @@ Use that if you get YAML related error. Promise - + Belofte Problem - + Probleem @@ -3174,37 +2964,37 @@ Use that if you get YAML related error. Resolution - + Oplossing Try / Fail - + Probeer / Faal No and - + Nee en Yes but - + Ja maar Freytag's pyramid - + Freytags pyramide Exposition - + Expositie Rising action - + Stijgende actie @@ -3214,47 +3004,47 @@ Use that if you get YAML related error. Falling action - + Verminderde action Three acts - + Drie akten 1. Setup - + 1. Opbouw 1. Inciting event - + 1. Aansporende gebeurtenis 1. Turning point - + 1. Kantelpunt 2. Choice - + 2. Keus 2. Reversal - + 2. Ommekeer 2. Disaster - + 2. Ramp 3. Stand up - + 3. Verweer @@ -3264,32 +3054,32 @@ Use that if you get YAML related error. 3. Ending - + 3. Einde Hero's journey - + Reis van de held Ordinary world - + Gewone wereld Call to adventure - + Roep van het avontuur Refusal of the call - + Weigeren van de roep Meeting with mentor - + Ontmoeting met de mentor @@ -3299,17 +3089,17 @@ Use that if you get YAML related error. Approach - + Benadering Abyss - + Afgrond Reward / Revelation - + Belonging / Openbaring @@ -3319,7 +3109,7 @@ Use that if you get YAML related error. Atonement - + Boetedoening @@ -3330,62 +3120,62 @@ Use that if you get YAML related error. plotModel - - New plot - - - - + Name - + Meta - + New step - + Nieuwe stap - + Main - + Primair - + Secondary - + Secundair - + Minor + + + New plot + Nieuw plot + plotTreeView - + Main - + Primair - + Secondary - + Secundair - + Minor - + **Plot:** {} - + **Verhaallijn:** {} @@ -3393,17 +3183,17 @@ Use that if you get YAML related error. Main - + Primair Secondary - + Secundair Minors - + Ondergeschikt @@ -3431,180 +3221,17 @@ Use that if you get YAML related error. Compile - + Compileer Goal - + Doel Word count - - - - - references - - - Not a reference: {}. - - - - - Unknown reference: {}. - - - - - Path: - - - - - Stats: - - - - - POV: - - - - - Status: - - - - - Label: - - - - - Short summary: - - - - - Long summary: - - - - - Notes: - - - - - Basic info - - - - - Detailed info - - - - - POV of: - - - - - 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: - - - - - Motivation - - - - - Goal - - - - - Epiphany - - - - - Short summary - - - - - Longer summary - + Aantal woorden @@ -3620,79 +3247,79 @@ Use that if you get YAML related error. - + Restore - + Terughalen - + Delete Show modifications - + Toon wijzigingen Show ancient version - + Toon oude versie Show spaces - + Toon spaties Show modifications only - + Toon alleen wijzigingen {} years ago - + {} jaar geleden {} months ago - + {} maanden geleden {} days ago - + {} dagen geleden 1 day ago - + 1 dag geleden {} hours ago - + {} uren geleden {} minutes ago - + {} minuten geleden {} seconds ago - + {} seconden geleden - + Line {}: - + Clear all - + Alles legen @@ -3705,90 +3332,62 @@ Use that if you get YAML related error. Search for... - - - - - Search in: - - - - - All - - - - - Title - - - - - Text - - - - - Summary - - - - - Notes - - - - - POV - - - - - Status - - - - - Label - - - - - Options: - - - - - Case sensitive - + Zoek naar... settingsWindow - + New status - + Nieuwe status - + New label - + Nieuw label - + newtheme - + Nieuw thema - + New theme - + Nieuw thema - + (read-only) - + (alleen-lezen) + + + + Open Image + Open afbeelding + + + + Image files (*.jpg; *.jpeg; *.png) + Afbeeldingsbestanden + + + + Error + Fout + + + + Unable to load selected file + Gekozen bestand kan niet worden geladen + + + + Unable to add selected image: +{} + Toevoegen van gekozen afbeelding mislukt: +{} @@ -3801,7 +3400,7 @@ Use that if you get YAML related error. TextLabel - + TekstLabel @@ -3811,12 +3410,12 @@ Use that if you get YAML related error. Secondary - + Secundair Main - + Primair @@ -3838,17 +3437,31 @@ Use that if you get YAML related error. <p><b>Mark:</b></p> - + + <p>Splits gekozen onderdeel/onderdelen op aangegeven markering.</p> + + <p>Als een van de gekozen onderdelen een map is, dan wordt het ook + uitgevoerd op <i>alle</i> onderliggende items.</p> + + <p>De splitsmarkering kan de volgende escapevolgordes bevatten: + <ul> + <li><b><code>\n</code></b>: nieuwe regel</li> + <li><b><code>\t</code></b>: tab</li> + </ul> + </p> + + <p><b>Markering:</b></p> + Split '{}' - + Splits '{}' Split items - + Splits onderdelen @@ -3861,35 +3474,35 @@ Use that if you get YAML related error. Show Plots - + Toon verhaallijnen Show Characters - + Toon personages tabSplitter - + Open selected items in that view. - + Open geselecteerde onderdelen in deze weergave. - + Split horizontally - + Splits horizontaal - + Close split - + Sluit deelweergave - + Split vertically - + Splits verticaal @@ -3897,7 +3510,7 @@ Use that if you get YAML related error. Various - + Diversen @@ -3953,22 +3566,22 @@ Use that if you get YAML related error. Expand {} - + Vouw {} uit Collapse {} - + Klap {} in Expand All - + Alles uitvouwen Collapse All - + Alles inklappen @@ -3986,37 +3599,37 @@ Use that if you get YAML related error. Templates - + Sjablonen Empty - + Leeg - + Novel - + Roman - + Novella - + Short Story - + Kort verhaal - + Research paper - + Onderzoeksdocument - + Demo projects - + Voorbeeldprojecten @@ -4026,12 +3639,12 @@ Use that if you get YAML related error. Add word count - + Voeg aantal woorden toe Next time, automatically open last project - + Open het laatst gebruikte project bij de volgende start @@ -4046,365 +3659,365 @@ Use that if you get YAML related error. Create - + Creëer - + Open project - + Manuskript project (*.msk);;All files (*) - + Manuskript project (*.msk);;Alle bestanden (*) - + Save project as... - + Sla project op als... - + Manuskript project (*.msk) - + Manuskript - + Create New Project - + Maak nieuw project - + Warning - + Waarschuwing - + Overwrite existing project {} ? - + Bestaand project {} overschrijven? - + Empty fiction - + Leeg fictieverhaal - + Chapter - + Hoofdstuk - + Scene - + Scène - + Trilogy - + Trilogie - + Book - + Section - + Sectie - + Empty non-fiction - + Leeg - non-fictie - + words each. - + woorden elk. - + of - + Text - + Something - + Iets - + <b>Total:</b> {} words (~ {} pages) - + <b>Totaal:</b> {} woorden (~ {} pagina's) - + Fiction - + Fictie - + Non-fiction - + Non-fictie - + Idea - + Note - + Research - + Onderzoek - + TODO - + First draft - + Eerste kladversie - + Second draft - + Tweede kladversie - + Final - + Eindversie worldModel - + New item - + Nieuw item - + Fantasy world building - + Fantasie wereldbouwen - + Physical - + Fysiek - + Climate - + Klimaat - + Topography - + Topografie - + Astronomy - + Astronomie - + Wild life - + Fauna - + Flora - + History - + Geschiedenis - + Races - + Rassen - + Diseases - + Ziekten - + Cultural - + Cultuur - + Customs - + Gebruiken - + Food - + Voeding - + Languages - + Education - + Opleiding - + Dresses - + Kleding - + Science - + Wetenschap - + Calendar - + Kalendar - + Bodily language - + Lichaamstaal - + Ethics - + Ethiek - + Religion - + Religie - + Government - + Regering - + Politics - + Politiek - + Gender roles - + Geslachtsrollen - + Music and arts - + Muziek en kunst - + Architecture - + Architectuur - + Military - + Militair - + Technology - + Courtship - + Hofmaken - + Demography - + Demografie - + Transportation - + Transport - + Medicine - + Medisch - + Magic system - + Magisch systeem - + Rules - + Regels - + Organization - + Organisatie - + Magical objects - + Magische objecten - + Magical places - + Magische plaatsen - + Magical races - + Magische rassen - + Important places - + Belangrijke plaatsen - + Important objects Belangrijke objecten - + Natural resources - + Natuurlijke bronnen diff --git a/i18n/manuskript_pl.qm b/i18n/manuskript_pl.qm index 57a68e9..004ddaf 100644 Binary files a/i18n/manuskript_pl.qm and b/i18n/manuskript_pl.qm differ diff --git a/i18n/manuskript_pl.ts b/i18n/manuskript_pl.ts index 6d86c32..8abe44c 100644 --- a/i18n/manuskript_pl.ts +++ b/i18n/manuskript_pl.ts @@ -1,226 +1,6 @@ - - - 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 - - - - - 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 kroju tekstu: - - - - Class: - Klasa: - - - - Line spacing: - Rozmiar interlinii: - - - - Just like plain text, excepts adds markdown titles. - Presupposes that texts are formatted in markdown. - Tak jak zwykły tekst, z wyjątkiem dodawania znaczników tytułów. -Zakłada, że teksty są sformatowane za pomocą znaczników. - - - - Preview with highlighter. - Podgląd z zaznaczeniem. - - - - A little known format modestly used. You know, web sites for example. - Format mało znany, rzadko używany. No wiesz, na przykład do stron internetowych. - - - - Books that don't kill trees. - Książki, które nie zabijają drzew. - - - - OpenDocument format. Used by LibreOffice for example. - Format OpenDocument. Używany przez np. LibreOffice. - - - - Microsoft Office (.docx) document. - Dokument Microsoft Office (.docx). - - - - Export to markdown, using pandoc. Allows more formatting options - than the basic manuskript exporter. - Eksport do formatu markdown, za pomocą programu pandoc. Pozwala na więcej opcji formatowania niż podstawowy eksporter Manuskript. - - - - reStructuredText is a lightweight markup language. - reStructuredText to lekki język znaczników... - - - - LaTeX is a word processor and document markup language used to create - beautiful documents. - LaTeX to procesor tekstu i język znaczników dokumentu używany do tworzenia -pięknych dokumentów. - - - - The purpose of this format is to provide a way to exchange information - between outliners and Internet services that can be browsed or controlled - through an outliner. - Celem tego formatu jest zapewnienie sposobu wymiany informacji -pomiędzy outlinerem a serwisami internetowymi, które mogą być przeglądane lub kontrolowane -przez outliner. - - - - Needs LaTeX to be installed. - Potrzebuje zainstalowanego latex. - - - - 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. - 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> - - <p>Uniwersalny konwerter dokumentów. Może być używany do konwersji języka markdown do szerokiej gamy innych formatów.</p> -<p>Strona internetowa: <a href="http://www.pandoc.org">http://pandoc.org/</a></p> - - - - - Error - Błąd - - - - Basic HTML output using the Python module 'markdown'. - Podstawowe wyjście HTML używające moduł python 'markdown'. - - - - Python module 'markdown'. - moduł python 'markdown'. - - - - Markdown source - Źródło markdown - - - - HTML Source - Źródło HTML - - - - HTML Output - 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>. - - - - Chose output file... - Wybierz plik wyjściowy... - - - - Default exporter, provides basic formats used by other exporters. - Domyślny eksporter, zapewnia podstawowe formaty używane przez inne eksportery. - - + + ExportersManager @@ -299,7 +79,7 @@ przez outliner. Exclude words (comma separated): - Wyklucz słowa (oddzielone przecinkiem): + Wyklucz słowa (oddzielone przecinkiem): @@ -322,140 +102,10 @@ przez outliner. do - - 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; - <b>Informacja:</b> Bardzo prosty -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) - are added as scene.</p> - <p>Only text files are supported (not images, binary or others).</p> - <p><b>Informacja:</b>Importuje strukturę całego katalogu. Foldery są dodawane jako foldery a pliki tekstowe wewnątrz folderów (ty wybierasz które poprzez rozszerzenie) jako sceny.</p> -<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 - then it will be imported in manuskript. One or the other - might give better result depending on your document. - <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> - <b>none</b>: no line wrap.<br> - <b>preserve</b>: tries to preserves line wrap from the - original document.</p> - <p>Czy pandoc powinien stworzyć kosmetyczne/niesemantyczne przerywanie wierszy?</p> -<p><b>automatycznie</b>: zawija do 72 znaków.<br> -<b>brak</b>: nie zawija wierszy.<br> -<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 - - MDEditCompleter - + Insert reference Wprowadź odnośnik @@ -463,967 +113,1110 @@ i stworzy pozycje dla każdego tytułu.<br/>&nbsp; MainWindow - + General Ogólne - + Book information Informacje o książce - + Title Tytuł - + Subtitle Podtytuł - + Series Cykl - + Volume Tom - + Genre Gatunek - + License Licencja - + Author Autor - + Name Imię i nazwisko - + Email E-mail - + Summary Podsumowanie - + Situation: Sytuacja: - + Summary: Podsumowanie: - + One sentence W jednym zdaniu - + One paragraph W jednym akapicie - + One page W jednej stronie - + Full Pełne - + One sentence summary Podsumowanie jednozdaniowe - + One paragraph summary Podsumowanie jednoakapitowe - + Expand each sentence of your one paragraph summary to a paragraph Rozwiń każde zdanie podsumowania jednego akapitu do całego akapitu - + One page summary Podsumowanie jednostronicowe - + Full summary Pełne podsumowanie - + Next Dalej - + What if...? Co jeśli...? - + Characters Postaci - + Names Imiona - + Filter Filtruj - + Basic info Podstawowe informacje - + Motivation Umotywowanie - + Goal Cel - + Conflict Konflikt - + Epiphany - Epifania (olśnienie) + 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 krok wątku (Ctrl+Enter) + 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 + 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 + 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) + &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 + &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 + 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 - - Install PyEnchant to use spellcheck - Zainstaluj PyEnchant aby korzystać ze sprawdzania pisowni - - - + Nothing Nic - + POV - Punkt widzenia + Punkt widzenia - + Label Etykieta - + Progress Postęp - + Compile - Kompiluj + 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… - + &Import… - - + + &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. + Wersje Qt 5.11 i 5.12 mogą spowodować błąd skutkujący utratą danych. + + + + PyQt {} and Qt {} are in use. + PyQt i Qt są używane. + + + + Proceed with import at your own risk + Kontynuujesz import na własne ryzyko + + + + Allow POV + Pozwól na punkt widzenia + + + + Search + Szukaj + + + + Ctrl+F + Ctrl+F + + + + &Technical Support + &Pomoc techniczna + + + + How to obtain technical support for Manuskript. + Jak uzyskać pomoc techniczną dla Manuskriptu. + + + + F1 + F1 + + + + &Locate log file... + &Lokalizuj plik logu... + + + + Locate log file + Lokalizuj plik logu + + + + Locate the diagnostic log file used for this session. + Lokalizuj diagnostyczny plik logu użyty dla tej sesji. + + + + Shift+F1 + Shift+F1 + + + + Sorry! + Przepraszam! + + + + This session is not being logged. + Ta sesja nie jest logowana. + + + + A log file is a Work in Progress! + Plik logu jest opracowywany! + + + + The log file "{}" will continue to be written to until Manuskript is closed. + Plik logu "{}" będzie tworzony do czasu zamknięcia Manuskriptu. + + + + It will now be displayed in your file manager, but is of limited use until you close Manuskript. + Będzie teraz wyświetlany w eksploratorze plików, ale będzie ograniczony dopóki nie zamkniesz Manuskriptu. + + + + Error! + Błąd! + + + + An error was encountered while trying to show the log file below in your file manager. + Podczas próby pokazania pliku logu w eksploratorze plików pojawił się błąd. + + + + F3 + F3 + + + + Shift+F3 + Shift+F3 + + + + Situation + Sytuacja + + + + Status + Status + + + + Search + + + No results found + Nie znaleziono wyników @@ -1439,27 +1232,27 @@ akapitu, następnie do strony, a następnie do pełnego podsumowania.Ogólne - + Revisions Korekty Views - Widoki + Widoki - + Labels Etykiety - + Status Status - + Fullscreen Pełny ekran @@ -1474,652 +1267,709 @@ akapitu, następnie do strony, a następnie do pełnego podsumowania.Ustawienia aplikacji - + Style: Styl: - + Language: Język: - + Font size: Rozmiar tekstu: - - You might need to restart manuskript in order for those settings to take effect properly and entirely. + + 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 quit - Zapisz przy zamknięciu + + Save on project close + Zapisz przy zamykaniu projektu - - <html><head/><body><p>If you check this option, your project will be save as one single file. Easier to copy or backup, but does not allow collaborative editing, or versionning.<br/>If this is unchecked, your project will be save 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> + + <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. Będzie ł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ń od początku całego okresu + korekty co tydzień do końca świata - + Views settings - Ustawienia widoku + 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 + 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 + 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 indeksu + Indeksy - + 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 + Przezroczysty - + Restore defaults Przywróć wartości domyślne - + Font Krój tekstu - + Family: Rodzina: - + Size: Rozmiar: - + Misspelled: Błędnie napisane: - + Text area - Obszar tekstowy + 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: + Marginesy: - + Padding: - Marginesy wewnętrzne: + 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> + <p><b>Opcja Poprawek była źródłem zgłaszania wielu błędów. W tej wersji Manuskripta jest ona domyślnie wyłączona przy tworzeniu nowych projektów dla zapewnienia najwyższej stabilności</b></p><p>Dlaczego problemy nie zostały jeszcze rozwiązane? <a href="https://www.theologeek.ch/manuskript/contribute/">Potrzebujemy twojej pomocy by uczynić Manuskript jeszcze lepszym! </a></p> + + + + Show progress in chars next + to words + Pokaż postęp znaków obok +słów + + + + Char/Word Counter + Licznik Znaków/Słów + + + + Count spaces as chars + Licz spacje jako znaki + + + + Show char c&ount + Pokaż liczbę znaków + + + + Sho&w char count + Pokaż liczbę znaków + SpellAction - + Spelling Suggestions Sugestie pisowni - + &Add to dictionary Dod&aj do słownika - + &Remove from custom dictionary - &Usuń ze słownika użytkownika + &Usuń ze słownika użytkownika + + + + &New Character + &Nowy bohater + + + + &New Plot Item + &Nowy przedmiot + + + + &New World Item + &Nowy element Świata + + + + &Correction Suggestions + &Sugestie poprawek + + + + &Correction Suggestion + &Sugestia poprawki @@ -2132,7 +1982,7 @@ akapitu, następnie do strony, a następnie do pełnego podsumowania. Manuskript - Manuskript + Manuskript @@ -2151,54 +2001,41 @@ 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 - - app - - - Loaded translation: {}. - Wczytane tłumaczenie {}. - - - - Note: No translator found or loaded for locale {}. - Nota: Nie znaleziono tłumacza lub nie wczytano lokalizacji {}. - - basicItemView @@ -2235,35 +2072,40 @@ akapitu, następnie do strony, a następnie do pełnego podsumowania. characterModel - - New character - Nowa postać - - - + Name - Nazwa + Imię - + Value Wartość + + + New character + + + + + Description + Opis + characterTreeView - + Main Główny - + Secondary Poboczny - + Minor Epizodyczny @@ -2379,12 +2221,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 @@ -2468,7 +2310,7 @@ akapitu, następnie do strony, a następnie do pełnego podsumowania. I need more granularity - Potrzebuję większej ziarnistości + Potrzebuję większej ziarnistości @@ -2548,7 +2390,7 @@ akapitu, następnie do strony, a następnie do pełnego podsumowania. Replace ... with … - Zastąp ... znakiem … + Zastąp ... znakiem … @@ -2563,7 +2405,7 @@ akapitu, następnie do strony, a następnie do pełnego podsumowania. Replace single quotes (') with: - Zastąp pojedyncze cudzysłowy (') znakiem: + Zastąp pojedyncze cudzysłowy (') znakiem: @@ -2598,7 +2440,7 @@ akapitu, następnie do strony, a następnie do pełnego podsumowania. If checked, uses regular expression for replacement. If unchecked, replaced as plain text. - Jeśli zaznaczone, używaj regularnych wyrażeń dla zastępowania. Jeśli odznaczone, zastępuje jako zwykły tekst. + Jeśli zaznaczone, używaj regularnych wyrażeń do zastępowania. Jeśli odznaczone, zastępuje jako zwykły tekst. @@ -2623,7 +2465,7 @@ akapitu, następnie do strony, a następnie do pełnego podsumowania. Folder - Folder + Folder @@ -2695,20 +2537,75 @@ 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 motywu + + + + 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 + generalSettings @@ -2765,7 +2662,7 @@ akapitu, następnie do strony, a następnie do pełnego podsumowania. - Chose file + Choose file Wybierz plik @@ -2787,7 +2684,7 @@ akapitu, następnie do strony, a następnie do pełnego podsumowania. lineEditView - + Various Różne @@ -2898,25 +2795,40 @@ akapitu, następnie do strony, a następnie do pełnego podsumowania.F11 - + Root Katalog główny - - {} words / {} - {} słów / {} - - - + {} words {} słów + + + ({} chars) {} words / {} + ({} znaki) {} słowa / {} + + + + {} words / {} + {} słowa / {} + + + + {} chars + {} znaki + + + + {} chars + {} znaki + markdownSettings - + Markdown Markdown @@ -2962,134 +2874,11 @@ akapitu, następnie do strony, a następnie do pełnego podsumowania. myPanel - + Auto-hide Auto-ukrywanie - - outlineBasics - - - Root - Katalog główny - - - - Open {} items in new tabs - Otwórz {} elementy w nowych kartach - - - - Open {} in a new tab - Otwórz {} w nowej karcie - - - - New &Folder - Nowy &Folder - - - - New &Text - Nowy &Tekst - - - - C&ut - Wy&tnij - - - - &Copy - &Kopiuj - - - - &Paste - &Wklej - - - - &Delete - &Usuń - - - - &Rename - &Zmień nazwę - - - - Set POV - Ustaw punkt widzenia - - - - None - Brak - - - - Main - Główny - - - - Secondary - Poboczny - - - - Minor - Epizodyczny - - - - Set Status - Ustaw status - - - - Set Label - Ustaw etykietę - - - - Set Custom Icon - Ustaw własną ikonę - - - - Restore to default - Przywróć domyślne - - - - New - Nowy - - - - About to remove - Zaraz usunę - - - - <p><b>You're about to delete {} item(s).</b></p><p>Are you sure?</p> - <p><b>Za chwilę usuniesz {} plik(i).</b></p><p>Czy jesteś tego pewien?</p> - - - - Select at least two items. Folders are ignored. - Wybierz co najmniej dwa elementy. Foldery są ignorowane. - - - - All items must be on the same level (share the same parent). - Wszystkie elementy muszą znajdować się w tym samym katalogu (muszą mieć tego samego rodzica). - - outlineCharacterDelegate @@ -3113,33 +2902,20 @@ akapitu, następnie do strony, a następnie do pełnego podsumowania.Epizodyczny - - outlineItem - - - {} words / {} ({}) - {} słów / {} ({}) - - - - {} words - {} słów - - pandocSettings - + General Ogólne - + Table of Content Spis treści - + Custom settings for {} Własne ustawienia dla {} @@ -3154,7 +2930,7 @@ akapitu, następnie do strony, a następnie do pełnego podsumowania. Secondary - Poboczny + Poboczny @@ -3242,7 +3018,7 @@ akapitu, następnie do strony, a następnie do pełnego podsumowania. 1. Inciting event - Przekraczanie progu + 1. Podżeganie do działania @@ -3262,7 +3038,7 @@ akapitu, następnie do strony, a następnie do pełnego podsumowania. 2. Disaster - 2. Katastrofa + 2. Katastrofa @@ -3292,7 +3068,7 @@ akapitu, następnie do strony, a następnie do pełnego podsumowania. Call to adventure - Wezwanie do przygody + Zew przygody @@ -3343,60 +3119,60 @@ 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 + + + New plot + + plotTreeView - + Main Główny - + Secondary Poboczny - + Minor Epizodyczny - + **Plot:** {} **Wątek:** {} @@ -3411,7 +3187,7 @@ akapitu, następnie do strony, a następnie do pełnego podsumowania. Secondary - Poboczni + Poboczne @@ -3457,169 +3233,6 @@ akapitu, następnie do strony, a następnie do pełnego podsumowania.Licznik wyrazów - - 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: - - - - Basic info - Podstawowe informacje - - - - Detailed info - Szczegółowe informacje - - - - POV of: - Punkt widzenia: - - - - Go to {}. - Idź do {}. - - - - Motivation - Umotywowanie - - - - Goal - Cel - - - - Conflict - Konflikt - - - - Epiphany - Epifania (olśnienie) - - - - Short summary - Krótkie podsumowanie - - - - Longer summary - 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>{}</b> - - - - 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: - - revisions @@ -3633,12 +3246,12 @@ akapitu, następnie do strony, a następnie do pełnego podsumowania.Opcje - + Restore Przywróć - + Delete Usuń @@ -3698,12 +3311,12 @@ akapitu, następnie do strony, a następnie do pełnego podsumowania.{} sekund temu - + Line {}: Linia {}: - + Clear all Wyczyść wszystko @@ -3720,89 +3333,61 @@ 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 - - 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: +{} + sldImportance @@ -3851,17 +3436,31 @@ akapitu, następnie do strony, a następnie do pełnego podsumowania. - + + <p>Podziel zaznaczone elementy na danym symbolu.</p> + + <p>Jeśli jeden z zaznaczonych elementów jest w folderze będzie ono zastosowane + rekursywnie dla <i>wszystkich</i> elementów dzieci.</p> + + <p>Znak podziału może zawierać następujące sekwencje: + <ul> + <li><b><code>\n</code></b>: koniec wiersza</li> + <li><b><code>\t</code></b>: tabulator</li> + </ul> + </p> + + <p><b>Znak:</b></p> + Split '{}' - + Rozdziel '{}' Split items - + Obiekty do rozdzielenia @@ -3869,40 +3468,40 @@ akapitu, następnie do strony, a następnie do pełnego podsumowania. Form - Formularz + Formularz Show Plots - + Pokaż wątki narracyjne Show Characters - + Pokaż Postacie 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 @@ -3910,7 +3509,7 @@ akapitu, następnie do strony, a następnie do pełnego podsumowania. Various - Różne + Różne @@ -3918,47 +3517,47 @@ akapitu, następnie do strony, a następnie do pełnego podsumowania. Form - Formularz + Formularz CTRL+B - + CTRL+B 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 @@ -3966,22 +3565,22 @@ akapitu, następnie do strony, a następnie do pełnego podsumowania. Expand {} - + Powiększ {} Collapse {} - + Minimalizuj Expand All - + Maksymalizuj Wszystko Collapse All - + Minimalizuj Wszystko @@ -3989,435 +3588,435 @@ akapitu, następnie do strony, a następnie do pełnego podsumowania. Form - Formularz + Formularz 1 - + 1 Templates - + Szablony Empty - - - - - Novel - - - - - Novella - - - - - Short Story - + Pusty - Research paper - + Novel + Powieść - + + Novella + Krótka powieść + + + + Short Story + Opowiadanie + + + + Research paper + Artykuł naukowy + + + Demo projects - + Projekt demonstracyjny Add level - + Dodaj poziom Add word count - + Dodaj licznik słów Next time, automatically open last project - + Następnym razem automatycznie otwórz ostatni projekt Open... - + Otwórz... Recent - + Ostatnie Create - + 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 + Manuskript - + Create New Project - + Nowy Projekt - + Warning - + Ostrzeżenie - + Overwrite existing project {} ? - - - - - Empty fiction - - - - - Chapter - - - - - Scene - - - - - Trilogy - - - - - Book - - - - - Section - + 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 + 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 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 - + Władza (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.qm b/i18n/manuskript_pt.qm new file mode 100644 index 0000000..8477704 Binary files /dev/null and b/i18n/manuskript_pt.qm differ diff --git a/i18n/manuskript_pt.ts b/i18n/manuskript_pt.ts new file mode 100644 index 0000000..85f9b1a --- /dev/null +++ b/i18n/manuskript_pt.ts @@ -0,0 +1,4582 @@ + + + + + Export + + + Basic HTML output using the Python module 'markdown'. + Saída HTML básica utilizando o módulo Markdown do Python. + + + + Python module 'markdown'. + Módulo Markdown do Python. + + + + Markdown source + Origem Markdown + + + + HTML Source + Origem HTML + + + + HTML Output + Saída HTML + + + + Default exporter, provides basic formats used by other exporters. + Exportador predefinido, oferece formatos básicos utilizados por outros exportadores. + + + + Preview with highlighter. + Antevisão com realce. + + + + Plain text + Texto simples + + + + A little known format modestly used. You know, web sites for example. + Um formato mal conhecido e pouco utilizado. Como em sítios web, por exemplo. + + + + Needs LaTeX to be installed. + Necessita do LaTeX instalado. + + + + Error + Erro + + + + Standalone document (not just a fragment) + Documento independente (não só um fragmento) + + + + Include a table of contents. + Incluir um índice. + + + + Number of sections level to include in TOC: + Quantidade 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: + + + + 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. + + + + Paper size: + Tamanho do papel: + + + + Font size: + Tamanho da letra: + + + + Class: + Classe: + + + + Line spacing: + Espaçamento de linhas: + + + + Books that don't kill trees. + Livros que não matam árvores. + + + + OpenDocument format. Used by LibreOffice for example. + Formato OpenDocument. Usado pelo LibreOffice por exemplo. + + + + Microsoft Office (.docx) document. + Documento Microsoft Office (.docx). + + + + reStructuredText is a lightweight markup language. + reStructuredText é uma linguagem de marcação leve. + + + + Just like plain text, excepts adds markdown titles. + Presupposes that texts are formatted in markdown. + Tal como texto simples, excepto adição de títulos Markdown. + Pressupõe que os textos estã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. Permite utilizar a sua própria marcação não compreendida + 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> + + <p>Um conversor de documentos universal. Pode ser utilizado para converter Markdown para uma vasta quantidade + de outros formatos.</p> + <p>Página web: <a href="http://www.pandoc.org">http://pandoc.org/</a></p> + + + + + 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. + uma instalação LaTeX válida. Pode encontrar as recomendações Pandoc em: + <a href="https://pandoc.org/installing.html">1pandoc.org/installing.html</a>2. Se desejar suporte Unicode, precisará do XeLaTeX. + + + + Export to markdown, using pandoc. Allows more formatting options + than the basic manuskript exporter. + exportar para Markdown, utilizando o pandoc. Permite mais opções + de formatação que o exportador do Manuskript. + + + + LaTeX is a word processor and document markup language used to create + beautiful documents. + LaTeX é um processador de texto e uma linguagem marcação de documento + usada para criar documentos bonitos. + + + + The purpose of this format is to provide a way to exchange information + between outliners and Internet services that can be browsed or controlled + through an outliner. + O objectivo deste formato é oferecer uma forma de trocar informação + entre organizadores e serviços Internet que podem ser explorados ou + controlados via organizador. + + + + Disable YAML metadata block. +Use that if you get YAML related error. + Desactivar bloco de meta-dados YAML. +Use se receber um erro YAML. + + + + Convert to ePUB3 + Converter para ePUB3 + + + + Could not process regular expression: +{} + Impossível processar a expressão regular: +{} + + + + Choose output file… + Escolha o ficheiro de saída + + + + ExportersManager + + + Manage Exporters + Gerir exportadores + + + + Manuskript + Manuskript + + + + Description + Descrição + + + + Offers export to + Oferece exportação para + + + + Status + Estado + + + + Status: + Estado: + + + + Version: + Versão: + + + + Path: + Caminho: + + + + ... + Procurar... + + + + {HelpText} + {HelpText} + + + + FrequencyAnalyzer + + + Frequency Analyzer + Analisador de frequência + + + + Word frequency + Frequência de palavras + + + + Settings + Definições + + + + Minimum size: + Tamanho mínimo: + + + + Exclude words (comma separated): + Palavras a excluir (entre vírgulas): + + + + Analyze + Analisar + + + + Phrase frequency + Frequência de frases + + + + Number of words: from + Quantidade de palavras: de + + + + to + até + + + + 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; + <b>Informação:</b> um analisador + muito simples que percorre um documento Markdown + 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) + are added as scene.</p> + <p>Only text files are supported (not images, binary or others).</p> + <p><b>Informação:</b> importa uma estrutura + de pastas completa. As pastas são adicionadas como + pastas e os documentos de texto (escolha sua por extensão) + são adicionados como cenas.</p> + <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 + then it will be imported in manuskript. One or the other + might give better result depending on your document. + <br/>&nbsp; + <b>Informação:</b> o Manuskript pode + importar de <b>Markdown</b> ou <b>OPML</b>. O Pandoc vai + converter o seu documento para um deles (veja a opção abaixo) e + será depois importado para o Manuskript. Um ou outro + poderão dar um melhor resultado, dependendo do documento. + <br/>&nbsp; + + + + Import using: + Importar utilizando: + + + + Wrap lines: + Quebra de linhas: + + + + <p>Should pandoc create + cosmetic / non-semantic line-breaks?</p><p> + <b>auto</b>: wraps at 72 characters.<br> + <b>none</b>: no line wrap.<br> + <b>preserve</b>: tries to preserves line wrap from the + original document.</p> + <p>Deve o Pandoc criar + quebras de linha cosméticas/não-semânticas?</p><p> + <b>automática</b>: quebra aos 72 caracteres?<br> + <b>nenhuma</b>: sem quebra de linhas?<br> + <b>preservar</b>: tenta preservar a quebra de linhas + do documento original?</p> + + + + Mind Map Import + Importar 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 + Importar mapa mental + + + + Import tip as: + Importar dica como: + + + + Untitled + Sem título + + + + MDEditCompleter + + + Insert reference + Inserir referência + + + + MainWindow + + + General + Geral + + + + Title + Título + + + + Subtitle + Subtítulo + + + + Series + Série + + + + Volume + Volume + + + + Genre + Género + + + + License + Licença + + + + Author + Autor + + + + Name + Nome + + + + Email + Correio eletrónico + + + + Summary + Sinopse + + + + Situation: + Situação: + + + + Summary: + Sinopse: + + + + One sentence + Uma frase + + + + One paragraph + Um parágrafo + + + + One page + Uma página + + + + Full + Completa + + + + One sentence summary + Sinopse numa frase + + + + One paragraph summary + Sinopse num parágrafo + + + + Expand each sentence of your one paragraph summary to a paragraph + Expanda cada frase da sua sinopse num parágrafo para um parágrafo + + + + One page summary + Sinopse numa página + + + + Full summary + Sinopse completa + + + + Next + Seguinte + + + + What if...? + E se...? + + + + Characters + Personagens + + + + Names + Nomes + + + + Filter + Filtro + + + + Basic info + Informação básica + + + + Importance + Importância + + + + 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> + + + + 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 + + + + 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 + + + + &View + &Ver + + + + &Mode + &Modo + + + + &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 + + + + Book information + Informação do livro + + + + &About + &Acerca de + + + + About Manuskript + Acerca do Manuskript + + + + 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 + + + + Add plot step + Adicionar passo do enredo + + + + &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 + + + + Ctrl+M + Ctrl+U + + + + Ctrl+D + Ctrl+H + + + + Del + Del + + + + &Move Up + &Mover acima + + + + Ctrl+Shift+Up + Ctrl+Shift+↑ + + + + M&ove Down + M&over abaixo + + + + Ctrl+Shift+Down + Ctrl+Shift+↓ + + + + Dupl&icate + Dupl&icar + + + + &Delete + &Eliminar + + + + &Rename + &Renomear + + + + F2 + F2 + + + + Organi&ze + Organi&zar + + + + M&erge + &Unir + + + + &Format + &Formatar + + + + &Header + Cabeçal&ho + + + + &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 + + + + &Ordered list + Lista &ordenada + + + + &Unordered list + Lista &desordenada + + + + B&lockquote + Citação em b&loco + + + + Remove selected plot step(s) + Remover passos do enredo seleccionados + + + + The file {} does not exist. Has it been moved or deleted? + O ficheiro {} não existe. Terá sido movido ou eliminado? + + + + 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 com a importação por sua conta + + + + Settings + + + Settings + Definições + + + + General + Geral + + + + Revisions + Revisões + + + + Views + Vistas + + + + Labels + Etiquetas + + + + Status + Estado + + + + Fullscreen + Ecrã completo + + + + General settings + Definições gerais + + + + Application settings + Definições da aplicação + + + + 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, que permite 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ó uma certa quantidade 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 no ú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 no último dia + + + + revisions per 10 minutes for the last hour + revisões por 10 minutos na ú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: + + + + Folders + Pastas + + + + Show ite&m count + &Mostrar total de itens + + + + Show summary + Mostrar sinopse + + + + &Nothing + &Nada + + + + Text + Texto + + + + Outline + Esquema + + + + Visible columns + Colunas visíveis + + + + Goal + Objectivo + + + + Word count + Total de palavras + + + + Percentage + Percentagem + + + + Title + Título + + + + Index cards + Fichas indexadas + + + + Item colors + Cor dos itens + + + + Border color: + Cor do contorno: + + + + Corner color: + Cor do canto: + + + + Background + Fundo + + + + Color: + Cor: + + + + Ctrl+S + Ctrl+S + + + + Image: + Imagem: + + + + Text editor + Editor de texto + + + + Font + Letra + + + + Family: + Família: + + + + Size: + Tamanho: + + + + Misspelled: + Erros: + + + + Background: + Fundo: + + + + Paragraphs + Parágrafos + + + + Line spacing: + Espaçamento de linhas: + + + + Single + Simples + + + + 1.5 lines + 1,5 linhas + + + + Double + Duplo + + + + Proportional + Proporcional + + + + % + % + + + + Tab width: + Largura da tabulação: + + + + px + px + + + + Indent 1st line + Indentar 1ª linha + + + + Spacing: + Espaçamento: + + + + 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: + + + + Left + Esquerda + + + + Center + Centro + + + + Right + Direita + + + + Width: + Largura: + + + + Corner radius: + Raio do canto: + + + + Margins: + Margens: + + + + Padding: + Espaço: + + + + Font: + Letra: + + + + Style + Estilo + + + + Cursor + Cursor + + + + Use block insertion of + Usar inserção de bloco de + + + + Alignment: + Alinhamento: + + + + Justify + Justificado + + + + Alignment + Alinhamento + + + + Icon Size + Tamanho do ícone + + + + TextLabel + Rótulo + + + + Disable blinking + Desactivar piscar + + + + Text area + Área de texto + + + + Max width + Largura máxima + + + + Left/Right margins: + Margens esquerda/direita: + + + + Top/Bottom margins: + Margens superior/inferior: + + + + S&how progress + Mostrar &progresso + + + + Show summar&y + Mostrar s&inopse + + + + Show p&rogress + Mostrar p&rogresso + + + + Old st&yle + Est&ilo antigo + + + + Transparent + Transparente + + + + Restore defaults + Repor predefinições + + + + 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. + + + + Show &word count + Mostrar total de pala&vras + + + + &Show word count + Mo&strar total de palavras + + + + &New style + &Novo estilo + + + + Typewriter mode + Modo Dactilografia + + + + Focus mode + Modo Foco + + + + None + Nenhum + + + + Sentence + Frase + + + + 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>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 a melhor 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> + + + + SpellAction + + + Spelling Suggestions + Sugestões ortográficas + + + + &Add to dictionary + &Adicionar ao dicionário + + + + &Remove from custom dictionary + &Remover do dicionário pessoal + + + + about + + + About Manuskript + Acerca do Manuskript + + + + Manuskript + Manuskript + + + + aboutDialog + + + Version + Versão + + + + Software Versions in Use: + Versões dos programas em uso: + + + + abstractModel + + + Title + Título + + + + POV + PDV + + + + Label + Etiqueta + + + + Status + Estado + + + + Compile + Compilar + + + + Word count + Total de palavras + + + + Goal + Objectivo + + + + basicItemView + + + Form + Formulário + + + + POV: + PDV: + + + + Goal: + Objectivo: + + + + Word count + Total de palavras + + + + One line summary + Sinopse numa linha + + + + Few sentences summary: + Sinopse em poucas frases: + + + + characterModel + + + New character + Novo personagem + + + + Name + Nome + + + + Value + Valor + + + + characterTreeView + + + Main + Principal + + + + Secondary + Secundário + + + + Minor + Menor + + + + cheatSheet + + + Form + Formulário + + + + Filter (type the name of anything in your project) + Filtro (escreva o nome de qualquer coisa do seu projecto) + + + + Minor + Menor + + + + Secondary + Secundário + + + + Main + Principal + + + + Characters + Personagens + + + + Texts + Textos + + + + Plots + Enredos + + + + World + Mundo + + + + cmbOutlineCharacterChoser + + + None + Nenhum + + + + Main + Principal + + + + Secondary + Secundário + + + + Minor + Menor + + + + Various + Vários + + + + cmbOutlineLabelChoser + + + Various + Vários + + + + cmbOutlineStatusChoser + + + Various + Vários + + + + collapsibleDockWidgets + + + Dock Widgets Toolbar + Ancorar barra de painéis + + + + completer + + + Form + Formulário + + + + corkDelegate + + + One line summary + Sinopse numa linha + + + + Full summary + Sinopse completa + + + + editorWidget_ui + + + Form + Formulário + + + + exporter + + + Export + Exportar + + + + Export to: + Exportar para: + + + + Manage exporters + Gerir exportadores + + + + Preview + Antever + + + + Settings + Definições + + + + exporterDialog + + + {} (not implemented yet) + {} (ainda não implementado) + + + + exporterSettings + + + Form + Formulário + + + + Content + Conteúdo + + + + Decide here what will be included in the final export. + Decida aqui o que será incluído na exportação final. + + + + Type + Tipo + + + + Title + Título + + + + Text + Texto + + + + I need more granularity + Preciso de mais escolhas + + + + Fi&lters + Fi&ltros + + + + <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>Filtra que itens serão incluídos na exportação final.<br/><span style=" color:#773333;">(ainda não está completamente implementado)</span></p></body></html> + + + + Ignore compile status (include all items) + Ignorar estado de compilação (incluir todos os itens) + + + + Subitems of: + Sub-itens de: + + + + Labels + Etiquetas + + + + Status + Estado + + + + Separations + Separações + + + + Between folders: + Entre pastas: + + + + Empty line + Linha vazia + + + + Custom + Personalizado + + + + Between texts: + Entre textos: + + + + Between folder and text: + Entre pasta e texto: + + + + Between text and folder: + Entre texto e pasta: + + + + Transformations + Transformações + + + + Typographic replacements: + Substituições tipográficas: + + + + Replace double quotes (") with: + Substituir aspas duplas (") por: + + + + Replace single quotes (') with: + Substituir aspas simples (') por: + + + + Remove multiple spaces + Remover espaços múltiplos + + + + Custom replacements: + Substituições personalizadas: + + + + Enabled + Activa + + + + Replace + Substituir + + + + With + Por + + + + RegExp + ExpReg + + + + If checked, uses regular expression for replacement. If unchecked, replaced as plain text. + Se marcada, usa expressões regulares para a substituição. Se não, substitui como texto simples. + + + + Preview + Antever + + + + Font + Letra + + + + Font: + Letra: + + + + Font size: + Tamanho da letra: + + + + Folder + Pasta + + + + {}Level {} folder + {}nível {} pasta + + + + {}Level {} text + {}nível {} texto + + + + Replace ... with … + Substituir ... por … + + + + Replace --- with — + Substituir --- por … + + + + exportersManager + + + Installed + Instalado + + + + Custom + Personalizado + + + + Not found + Não encontrado + + + + {} not found. Install it, or set path manually. + {} não encontrado. Instale-o ou defina o caminho manualmente. + + + + <b>Status:</b> uninstalled. + <b>Estado:</b> não instalado. + + + + <b>Requires:</b> + <b>Requer:</b> + + + + Set {} executable path. + Definir caminho executável de {}. + + + + frequencyAnalyzer + + + Phrases + Frases + + + + Frequency + Frequência + + + + Word + Palavra + + + + 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 + + + + generalSettings + + + General + Geral + + + + Split scenes at: + Dividir cenas em: + + + + \n---\n + \n---\n + + + + Trim long titles (> 32 chars) + Aparar títulos longos (>32 caracteres) + + + + Import under: + Importar sob: + + + + Import in a top-level folder + Importar numa pasta de nível superior + + + + helpLabel + + + If you don't wanna see me, you can hide me in Help menu. + Se não me deseja ver, pode ocultar-me no menu Ajuda. + + + + importer + + + Import + Importar + + + + Format: + Formato: + + + + Choose file + Escolha o ficheiro + + + + Clear file + Limpar ficheiro + + + + Preview + Antever + + + + Settings + Definições + + + + lastAccessedDirectoryInfo + + + Last accessed directory "{}" loaded. + Carregada a última pasta acedida «{}». + + + + lineEditView + + + Various + Vários + + + + locker + + + Form + Formulário + + + + Lock screen: + Bloquear ecrã: + + + + Word target + Quantidade de palavras + + + + Time target + Tempo limite + + + + words + palavras + + + + minutes + minutos + + + + Lock ! + Bloquear! + + + + ~{} h. + ~{} h. + + + + ~{} mn. + ~{} m. + + + + {}:{} + {}:{} + + + + {} s. + {} s. + + + + {} remaining + {} restante + + + + {} words remaining + {} palavras restantes + + + + mainEditor + + + Form + Formulário + + + + Text + Texto + + + + Index cards + Fichas indexadas + + + + Outline + Esquema + + + + F11 + F11 + + + + Go to parent item + Ir à item-mãe + + + + Alt+Up + Alt+↑ + + + + Root + Raiz + + + + {} words / {} + {} palavras/{} + + + + {} words + {} palavras + + + + markdownSettings + + + Markdown + Markdown + + + + metadataView + + + Form + Formulário + + + + Properties + Propriedades + + + + Summary + Sinopse + + + + One line summary + Sinopse numa linha + + + + Full summary + Sinopse completa + + + + Notes / References + Notas/Referências + + + + Revisions + Revisões + + + + myPanel + + + Auto-hide + Ocultar automaticamente + + + + outlineBasics + + + Set POV + Definir PVD + + + + None + Nenhum + + + + Set Status + Definir estado + + + + Set Label + Definir etiqueta + + + + New + Novo + + + + Main + Principal + + + + Secondary + Secundário + + + + Minor + Menor + + + + Set Custom Icon + Definir ícone personalizado + + + + Restore to default + Repor predefinição + + + + Root + Raiz + + + + Open {} items in new tabs + Abrir itens {} em novos separadores + + + + Open {} in a new tab + Abrir {} em novo separador + + + + About to remove + Prestes a remover + + + + <p><b>You're about to delete {} item(s).</b></p><p>Are you sure?</p> + <p><b>Está prestes a eliminar {} item(ns).</b></p><p>Tem a certeza?</p> + + + + Select at least two items. Folders are ignored. + Seleccione pelo menos dois itens. As pastas são ignoradas. + + + + All items must be on the same level (share the same parent). + Todos os itens têm de estar no mesmo nível (partilhar a mesma mãe). + + + + New &Folder + Nova &pasta + + + + New &Text + Novo &texto + + + + &Copy + &Copiar + + + + C&ut + Cor&tar + + + + &Paste + Co&lar + + + + &Rename + &Renomear + + + + &Delete + &Eliminar + + + + outlineCharacterDelegate + + + None + Nenhum + + + + Main + Principal + + + + Secondary + Secundário + + + + Minor + Menor + + + + outlineItem + + + {} words / {} ({}) + {} palavras/{} ({}) + + + + {} words + {} palavras + + + + pandocSettings + + + General + Geral + + + + Table of Content + Índice + + + + Custom settings for {} + Definições personalizadas para {} + + + + persosProxyModel + + + Main + Principal + + + + Secondary + Secundário + + + + Minors + Menores + + + + plotDelegate + + + General + Geral + + + + Promise + Promessa + + + + Problem + Problema + + + + Progress + Progresso + + + + Resolution + Resolução + + + + Try / Fail + Tentar/Falhar + + + + No and + Não e + + + + Yes but + Sim mas + + + + Freytag's pyramid + Pirâmide de Freitag + + + + Exposition + Exposição + + + + Rising action + Acção a crescer + + + + Climax + Clímax + + + + Falling action + Queda da acção + + + + Three acts + Três actos + + + + 1. Setup + 1. Configuração + + + + 1. Inciting event + 1. Evento incitador + + + + 1. Turning point + 1. Ponto de viragem + + + + 2. Choice + 2. Escolha + + + + 2. Reversal + 2. Reversão + + + + 2. Disaster + 2. Desastre + + + + 3. Stand up + 3. Enfrentamento + + + + 3. Climax + 3. Clímax + + + + 3. Ending + 3. Final + + + + Hero's journey + Jornada do herói + + + + Ordinary world + Mundo normal + + + + Call to adventure + Chamada à aventura + + + + Refusal of the call + Recusa da chamada + + + + Meeting with mentor + Reunião com o mentor + + + + Tests + Testes + + + + Approach + Abordagem + + + + Abyss + Abismo + + + + Reward / Revelation + Recompensa/Revelação + + + + Transformation + Transformação + + + + Atonement + Expiação + + + + Return + Regresso + + + + plotModel + + + New plot + Novo enredo + + + + Name + Nome + + + + Meta + Meta + + + + New step + Novo passo + + + + Main + Principal + + + + Secondary + Secundário + + + + Minor + Menor + + + + plotTreeView + + + Main + Principal + + + + Secondary + Secundário + + + + Minor + Menor + + + + **Plot:** {} + **Enredo:** {} + + + + plotsProxyModel + + + Main + Principal + + + + Secondary + Secundário + + + + Minors + Menores + + + + propertiesView + + + Form + Formulário + + + + POV + PDV + + + + Status + Estado + + + + Label + Etiqueta + + + + Compile + Compilar + + + + Goal + Objectivo + + + + Word count + Total de palavras + + + + 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: + + + + Basic info + Informação básica + + + + Detailed info + Informação detalhada + + + + POV of: + PDV de: + + + + Go to {}. + Ir para {}. + + + + Description + Descrição + + + + Result + Resultado + + + + Characters + Personagens + + + + Resolution steps + Passos da 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> + 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: + + + + Motivation + Motivação + + + + Goal + Objectivo + + + + Epiphany + Epifania + + + + Short summary + Sinopse curta + + + + Longer summary + Sinopse mais longa + + + + revisions + + + Form + Formulário + + + + Options + Opções + + + + Restore + Restaurar + + + + Delete + Eliminar + + + + Show modifications + Mostrar modificações + + + + Show ancient version + Mostrar versão anterior + + + + Show spaces + Mostrar espaços + + + + Show modifications only + Mostrar só modificações + + + + {} years ago + {} anos atrás + + + + {} months ago + {} meses atrás + + + + {} days ago + {} dias atrás + + + + 1 day ago + um dia atrás + + + + {} hours ago + {} horas atrás + + + + {} minutes ago + {} minutos atrás + + + + {} seconds ago + {} segundos atrás + + + + Line {}: + Linha {}: + + + + Clear all + Limpar tudo + + + + search + + + Form + Formulário + + + + 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: +{} + + + + sldImportance + + + Form + Formulário + + + + TextLabel + Rótulo + + + + Minor + Menor + + + + Secondary + Secundário + + + + Main + Principal + + + + splitDialog + + + + <p>Split selected item(s) at the given mark.</p> + + <p>If one of the selected item is a folder, it will be applied + recursively to <i>all</i> of it's children items.</p> + + <p>The split mark can contain following escape sequences: + <ul> + <li><b><code>\n</code></b>: line break</li> + <li><b><code>\t</code></b>: tab</li> + </ul> + </p> + + <p><b>Mark:</b></p> + + + <p>Divide os itens seleccionados na marca indicada.</p> + + <p>Se um dos itens for uma pasta, será aplicado + recursivamente a <i>todos</i> os itens-filho.</p> + + <p>A marca de divisão pode conter as seguintes sequências: + <ul> + <li><b><code>\n</code></b>: quebra de linha</li> + <li><b><code>\t</code></b>: tabulação</li> + </ul> + </p> + + <p><b>Marca:</b></p> + + + + + Split '{}' + Dividir «{}» + + + + Split items + Dividir itens + + + + storylineView + + + Form + Formulário + + + + Show Plots + Mostrar enredos + + + + Show Characters + Mostrar personagens + + + + 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 + + + + textEditView + + + Various + Vários + + + + textFormat + + + Form + Formulário + + + + CTRL+B + CTRL+B + + + + 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 + + + + treeView + + + Expand {} + Expandir {} + + + + Collapse {} + Colapsar {} + + + + Expand All + Expandir tudo + + + + Collapse All + Colapsar tudo + + + + welcome + + + Form + Formulário + + + + 1 + 1 + + + + Templates + Modelos + + + + Empty + Vazio + + + + Novel + Romance + + + + Novella + Novela + + + + Short Story + História curta + + + + Research paper + Investigação + + + + Demo projects + Projectos de demonstração + + + + Add level + Adicionar nível + + + + Add word count + Adicionar total de palavras + + + + Next time, automatically open last project + No próximo arranque, abrir o último projecto + + + + Open... + Abrir... + + + + Recent + Recentes + + + + Create + 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ítulo + + + + Scene + Cena + + + + Trilogy + Trilogia + + + + Book + Livro + + + + Section + Secção + + + + 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 + + + + worldModel + + + New item + Novo item + + + + Fantasy world building + Construção de um mundo de fantasia + + + + Physical + Físico + + + + Climate + Clima + + + + Topography + Topografia + + + + Astronomy + Astronomia + + + + 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 + + + + Natural resources + Recursos naturais + + + diff --git a/i18n/manuskript_pt_BR.qm b/i18n/manuskript_pt_BR.qm index 62f0362..368bfc2 100644 Binary files a/i18n/manuskript_pt_BR.qm and b/i18n/manuskript_pt_BR.qm differ diff --git a/i18n/manuskript_pt_BR.ts b/i18n/manuskript_pt_BR.ts index 3e322d6..6cc1d04 100644 --- a/i18n/manuskript_pt_BR.ts +++ b/i18n/manuskript_pt_BR.ts @@ -1,228 +1,6 @@ - - - Export - - - Basic HTML output using the Python module 'markdown'. - Saída HTML básica usando o módulo Python 'markdown'. - - - - Python module 'markdown'. - módulo Python 'markdown'. - - - - Markdown source - Fonte de Markdown - - - - HTML Source - Fonte HTML - - - - HTML Output - Destino HTML - - - - Default exporter, provides basic formats used by other exporters. - Exportador padrão, fornece formatos básicos usados por outros exportadores. - - - - Preview with highlighter. - Visualizar com marcador. - - - - Plain text - Texto simples - - - - Chose output file... - Escolha o arquivo de destino... - - - - A little known format modestly used. You know, web sites for example. - Um formato pouco conhecido usado modestamente. Você sabe, sites, por exemplo. - - - - Needs LaTeX to be installed. - Precisa de látex 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: - - - - Books that don't kill trees. - Livros que não matam árvores. - - - - OpenDocument format. Used by LibreOffice for example. - Formato OpenDocument. Usado pelo LibreOffice por exemplo. - - - - Microsoft Office (.docx) document. - Documento do Microsoft Office (.docx). - - - - reStructuredText is a lightweight markup language. - reStructuredText é uma linguagem de marcação leve ... - - - - Just like plain text, excepts adds markdown titles. - Presupposes that texts are formatted in markdown. - Assim como o texto simples, as exceções adicionam títulos de marcação. - 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> - - <p>Um conversor de documentos universal. Pode ser usado para converter markdown em uma gama de outros formatos.</p> - <p>Site: <a href="http://www.pandoc.org">http://pandoc.org/</a></p> - - - - - 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. - uma instalação de látex válida. Veja as recomendações sobre pandoc em: - <a href="http://pandoc.org/installing.html">http://pandoc.org/installing.html</a>. Se você quiser suporte unicode, você precisa do xelatex. - - - - Export to markdown, using pandoc. Allows more formatting options - than the basic manuskript exporter. - Exportar para markdown, usando pandoc. Permite mais opções de formatação - do que o exportador básico do manuskript. - - - - LaTeX is a word processor and document markup language used to create - beautiful documents. - O LaTeX é um processador de texto e uma linguagem de marcação de documentos usada para criar documentos. - - - - The purpose of this format is to provide a way to exchange information - between outliners and Internet services that can be browsed or controlled - through an outliner. - O objetivo deste formato é fornecer uma maneira de trocar informações -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 - - + + ExportersManager @@ -301,7 +79,7 @@ Use isso se você receber um erro relacionado ao YAML. Exclude words (comma separated): - Excluir palavras (separadas por vírgula): + Excluir palavras (separadas por vírgula): @@ -324,150 +102,10 @@ Use isso se você receber um erro relacionado ao YAML. para - - 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; - <b>Info:</b> Um analisador muito simples - que irá processa o documento markdown e - 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) - are added as scene.</p> - <p>Only text files are supported (not images, binary or others).</p> - <p><b>Info:</b> Importa toda - estrutura do diretório. Pastas são adicionadas as pastas, e - e os documentos de textos dentro (você escolhe quais, por extensão) - são adicionados como cenas.</p> - <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 - 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 pode - importar de <b>markdown</b> ou <b>OPML</b>. Pandoc pode - converter seu documento para qualquer (veja opções abaixo), e - então pode ser importado no manuskript. Um ou o outro - pode-se trazer melhores resultados dependendo do seu documento. - <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> - <b>none</b>: no line wrap.<br> - <b>preserve</b>: tries to preserves line wrap from the - original document.</p> - <p>O pandoc pode criar - cosmética/ linhas de quebra não semântica?</p><p> - <b>auto</b>: quebra de 72 caracteres.<br> - <b>nenhum</b>: sem quebra de linha<br> - <b>preservar</b>: tenta preservar a quebra de linha do - 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 - - MDEditCompleter - + Insert reference Inserir referência @@ -475,968 +113,1111 @@ Use isso se você receber um erro relacionado ao YAML. MainWindow - + General Geral - + Title Título - + Subtitle Legenda - + Series - + Volume - + Genre Gênero - + License Licença - + Author Autor - + Name Nome - + Email - + E-mail - + Summary Sumário - + Situation: Situação: - + Summary: Sumário: - + One sentence Uma frase - + One paragraph Um parágrafo - + One page Uma página - + Full Cheio - + One sentence summary Sumário de uma frase - + One paragraph summary Sumário de um parágrafo - + Expand each sentence of your one paragraph summary to a paragraph Expandir cada frase do sumário de um parágrafo para um parágrafo - + One page summary Sumário de uma página - + Full summary Sumário completo - + Next Próximo - + What if...? E se...? - + Characters Personagens - + Names 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 - + Book information 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) + 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 - - Install PyEnchant to use spellcheck - Instale o PyEnchant para usar a verificação ortográfica - - - + 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 (CTRL+Enter) + 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) - - - - - Ctrl+Alt+1 - - - - - Level &2 - - - - - Ctrl+Alt+2 - - - - - Level &1 (atx) - - - - - Ctrl+1 - - - - - L&evel 2 - - - - - Ctrl+2 - - - - - Level &3 - - - - - Ctrl+3 - + &Nível 1 (setext) - Level &4 - + Ctrl+Alt+1 + Ctrl+Alt+1 - - Ctrl+4 - + + Level &2 + Nível &2 - Level &5 - + Ctrl+Alt+2 + Ctrl+Alt+2 - - Ctrl+5 - + + Level &1 (atx) + Nível &1 (atx) - Level &6 - + Ctrl+1 + Ctrl+1 - - Ctrl+6 - + + L&evel 2 + N&ível 2 - - &Bold - + + Ctrl+2 + Ctrl+2 - - Ctrl+B - + + Level &3 + Nível &3 + + + + Ctrl+3 + Ctrl+3 + + + + Level &4 + Nível &4 - &Italic - + Ctrl+4 + Ctrl+4 - - Ctrl+I - + + Level &5 + Nível &5 - - &Strike - + + Ctrl+5 + Ctrl+5 - - &Verbatim - + + Level &6 + Nível &6 - - Su&perscript - + + 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+- - - - - - Co&mment block - - - - - Ctrl+Shift+C - - - - - Clear &formats - - - - - Ctrl+0 - - - - - &Comment line(s) - - - - - &Ordered list - + 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 + Proceder com a importação por sua conta e risco + + + + Allow POV + Permitir Ponto de Vista + + + + Search + Pesquisar + + + + Ctrl+F + Ctrl+F + + + + &Technical Support + &Suporte Técnico + + + + How to obtain technical support for Manuskript. + Como obter suporte técnico para o Manuskript. + + + + F1 + F1 + + + + &Locate log file... + &Encontrar arquivo de log... + + + + Locate log file + Encontrar arquivo de log + + + + Locate the diagnostic log file used for this session. + Encontre o arquivo de log de diagnóstico dessa sessão. + + + + Shift+F1 + Shift+F1 + + + + Sorry! + Desculpe! + + + + This session is not being logged. + Essa sessão não está sendo logada. + + + + A log file is a Work in Progress! + O arquivo de log está em desenvolvimento! + + + + The log file "{}" will continue to be written to until Manuskript is closed. + O log "{}" continuará a ser escrito até que o Manuskript seja fechado. + + + + It will now be displayed in your file manager, but is of limited use until you close Manuskript. + Será exibido no seu gerenciador de arquivos, mas é restrito até você fechar o Manuskript. + + + + Error! + Erro! + + + + An error was encountered while trying to show the log file below in your file manager. + Um erro foi encontrado ao tentar exibir o log de erros abaixo no seu gerenciador de arquivos. + + + + F3 + F3 + + + + Shift+F3 + Shift+F3 + + + + Situation + Situação + + + + Status + Status + + + + Search + + + No results found + Nenhum resultado encontrado @@ -1452,7 +1233,7 @@ Então expanda isso para um parágrafo, depois para uma página e, em seguida, p Geral - + Revisions Revisões @@ -1462,17 +1243,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 @@ -1484,656 +1265,713 @@ Então expanda isso para um parágrafo, depois para uma página e, em seguida, p Application settings - Estilo da aplicação + 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 quit + + Save on project close Salvar ao sair - - <html><head/><body><p>If you check this option, your project will be save as one single file. Easier to copy or backup, but does not allow collaborative editing, or versionning.<br/>If this is unchecked, your project will be save 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 isso não for verificado, seu projeto será salvo como uma pasta contendo muitos arquivos pequenos.</p></body></html> + + <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: - - You might need to restart manuskript in order for those settings to take effect properly and entirely. - + + 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 + Exibir progresso em caract. +próx. às palavras + + + + Char/Word Counter + Contagem de carac./palav. + + + + Count spaces as chars + Contar espaços como caracteres + + + + Show char c&ount + Exibir c&ontagem de caracteres + + + + 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 @@ -2164,54 +2002,41 @@ 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 - - app - - - Loaded translation: {}. - Tradução carregada: {}. - - - - Note: No translator found or loaded for locale {}. - Nota: Nenhum tradutor encontrado ou carregado para localidade {}. - - basicItemView @@ -2248,35 +2073,40 @@ 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 + + + New character + + + + + Description + Descrição + characterTreeView - + Main Principal - + Secondary Secundário - + Minor @@ -2392,12 +2222,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 @@ -2566,7 +2396,7 @@ Então expanda isso para um parágrafo, depois para uma página e, em seguida, p Replace single quotes (') with: - Substitua as aspas simples(') por: + Substitua as aspas simples(') por: @@ -2638,12 +2468,12 @@ Então expanda isso para um parágrafo, depois para uma página e, em seguida, p {}Level {} text - + Replace ... with … Substituir... com … - + Replace --- with — Substituir--- com — @@ -2708,20 +2538,75 @@ 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 + generalSettings @@ -2778,7 +2663,7 @@ Então expanda isso para um parágrafo, depois para uma página e, em seguida, p - Chose file + Choose file Escolha o arquivo @@ -2800,7 +2685,7 @@ Então expanda isso para um parágrafo, depois para uma página e, em seguida, p lineEditView - + Various Vários @@ -2911,25 +2796,40 @@ Então expanda isso para um parágrafo, depois para uma página e, em seguida, p - + Root - - {} words / {} - {} palavras / {} - - - + {} words {} palavras + + + ({} chars) {} words / {} + + + + + {} words / {} + + + + + {} chars + + + + + {} chars + + markdownSettings - + Markdown @@ -2975,134 +2875,11 @@ Então expanda isso para um parágrafo, depois para uma página e, em seguida, p myPanel - + Auto-hide Ocultar automaticamente - - outlineBasics - - - Set POV - Setar o ponto de vista - - - - None - - - - - Set Status - - - - - Set Label - - - - - New - - - - - Main - Principal - - - - Secondary - Secundário - - - - Minor - - - - - Set Custom Icon - Definir ícone personalizado - - - - Restore to default - Restaurar para o padrão - - - - Root - - - - - Open {} items in new tabs - - - - - Open {} in a new tab - - - - - About to remove - Prestes a remover - - - - <p><b>You're about to delete {} item(s).</b></p><p>Are you sure?</p> - <p><b>Você está prestes a excluir {} iten(s).</b></p><p>Você tem certeza?</p> - - - - Select at least two items. Folders are ignored. - Selecione pelo menos dois itens. Pastas são ignoradas. - - - - All items must be on the same level (share the same parent). - Todos os itens devem estar no mesmo nível (estar no mesmo local). - - - - New &Folder - Nova &Pasta - - - - New &Text - - - - - &Copy - &Copiar - - - - C&ut - - - - - &Paste - &Colar - - - - &Rename - &Renomear - - - - &Delete - - - outlineCharacterDelegate @@ -3126,33 +2903,20 @@ Então expanda isso para um parágrafo, depois para uma página e, em seguida, p - - outlineItem - - - {} words / {} ({}) - {} palavras / {} ({}) - - - - {} words - {} palavras - - pandocSettings - + General - + Table of Content - + Custom settings for {} Configurações personalizadas para {} @@ -3167,7 +2931,7 @@ Então expanda isso para um parágrafo, depois para uma página e, em seguida, p Secondary - Secundário + Secundário @@ -3255,7 +3019,7 @@ Então expanda isso para um parágrafo, depois para uma página e, em seguida, p 1. Inciting event - Cruzando o Limiar + 1. Evento inical @@ -3356,60 +3120,60 @@ 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 + + + New plot + + plotTreeView - + Main Principal - + Secondary Secundário - + Minor - + **Plot:** {} **Enredo:** {} @@ -3424,7 +3188,7 @@ Então expanda isso para um parágrafo, depois para uma página e, em seguida, p Secondary - Secundário + Secundário @@ -3470,169 +3234,6 @@ Então expanda isso para um parágrafo, depois para uma página e, em seguida, p Contagem de palavras - - 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: - - - - - Basic info - Informação básica - - - - Detailed info - Informação detalhada - - - - POV of: - 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: - - - - Motivation - Motivação - - - - Goal - Objetivo - - - - Epiphany - Epifania - - - - Short summary - Sumário curto - - - - Longer summary - Sumário longo - - revisions @@ -3646,12 +3247,12 @@ Então expanda isso para um parágrafo, depois para uma página e, em seguida, p - + Restore Restaurar - + Delete @@ -3711,12 +3312,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 @@ -3733,89 +3334,61 @@ 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: +{} + sldImportance @@ -3864,7 +3437,7 @@ Então expanda isso para um parágrafo, depois para uma página e, em seguida, p <p><b>Mark:</b></p> - + <p>Dividir o(s) item(ns) selecionado(s) na marca indicada.</p> <p>Se um dos itens selecionados for uma pasta, ele será aplicado recursivamente para <i>todos</i> seus itens filhos.</p> @@ -3882,7 +3455,7 @@ Então expanda isso para um parágrafo, depois para uma página e, em seguida, p Split '{}' - Separar '{}' + Separar '{}' @@ -3911,22 +3484,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 @@ -4033,27 +3606,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 @@ -4065,7 +3638,7 @@ Então expanda isso para um parágrafo, depois para uma página e, em seguida, p Add word count - Adicionar contagem de palavras + Adicionar contagem de palavras @@ -4088,147 +3661,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 @@ -4236,214 +3809,214 @@ 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.qm b/i18n/manuskript_pt_PT.qm index 95279d2..91a6aa1 100644 Binary files a/i18n/manuskript_pt_PT.qm and b/i18n/manuskript_pt_PT.qm differ diff --git a/i18n/manuskript_pt_PT.ts b/i18n/manuskript_pt_PT.ts index c2c0953..f0f3741 100644 --- a/i18n/manuskript_pt_PT.ts +++ b/i18n/manuskript_pt_PT.ts @@ -1,277 +1,57 @@ - - - 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 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 meta-bloco 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 - - - - - 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: - - - - Just like plain text, excepts adds markdown titles. - Presupposes that texts are formatted in markdown. - Tal como texto simples, excepto adição de títulos markdown. - Pressupõe que os textos estão formatados em markdown. - - - - Preview with highlighter. - Antevisão com realce. - - - - A little known format modestly used. You know, web sites for example. - um formato pouco conhecido. Sabe, em websites, por exemplo. - - - - Books that don't kill trees. - livros que não matam árvores. - - - - OpenDocument format. Used by LibreOffice for example. - formato OpenDocument. Usado pelo LibreOffice por exemplo. - - - - Microsoft Office (.docx) document. - documento Microsoft Office (.docx). - - - - Export to markdown, using pandoc. Allows more formatting options - than the basic manuskript exporter. - exportar para markdown, usando pandoc. Permite mais opções - de formatação que o exportador do Manuskript. - - - - reStructuredText is a lightweight markup language. - - - - - LaTeX is a word processor and document markup language used to create - beautiful documents. - LaTeX é um processador de texto e uma linguagem markup de documento - usada para criar documentos bonitos. - - - - The purpose of this format is to provide a way to exchange information - between outliners and Internet services that can be browsed or controlled - through an outliner. - O objectivo deste formato é oferecer uma forma de trocar informação - entre organizadores e serviços Internet que podem ser explorados ou - controlados via organizador. - - - - Needs LaTeX to be installed. - - - - - 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. - - - - - <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> - - - - - - Error - Erro - - - - Basic HTML output using the Python module 'markdown'. - - - - - Python module 'markdown'. - - - - - Markdown source - Fonte markdown - - - - HTML Source - Fonte HTML - - - - HTML Output - 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 para texto simples. Permite utilizar o seu próprio markup não compreendido - pelo Manuskript, por exemplo <a href='www.fountain.io'>Fountain</a>. - - - - Chose output file... - Escolha o ficheiro de saída... - - - - Default exporter, provides basic formats used by other exporters. - Exportador predefinido, oferece formatos básicos usados por outros exportadores. - - + + ExportersManager Manage Exporters - Gerir exportadores + Gerir exportadores Manuskript - Manuskript + Manuskript Description - Descrição + Descrição Offers export to - Oferece exportação para + Oferece exportação para Status - + Estado Status: - Estado: + Estado: Version: - Versão: + Versão: Path: - Caminho: + Caminho: ... - Procurar... + Procurar... {HelpText} - {HelpText} + {HelpText} @@ -279,1162 +59,1165 @@ Use se receber um erro YAML. Frequency Analyzer - Analisador de frequência + Analisador de frequência Word frequency - Frequência de palavras + Frequência de palavras Settings - Definições + Definições Minimum size: - Tamanho mínimo: + Tamanho mínimo: Exclude words (comma separated): - + Palavras a excluir (entre vírgulas): Analyze - Analisar + Analisar Phrase frequency - Frequência de frases + Frequência de frases Number of words: from - Número de palavras: de + Número de palavras: de to - até - - - - 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; - <b>Informação:</b> um analisador - muito simples que percorre um documento markdown - 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) - are added as scene.</p> - <p>Only text files are supported (not images, binary or others).</p> - <p><b>Informação:</b> importa uma estrutura - de pastas completa. As pastas são adicionadas como - pastas e os documentos de texto (escolha por extensão) - são adicionados como cenas.</p> - <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 - - - - - 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 - then it will be imported in manuskript. One or the other - might give better result depending on your document. - <br/>&nbsp; - <b>Informação:</b> o Manuskript pode - importar de <b>markdown</b> ou <b>OPML</b>. O Pandoc vai - converter o seu documento para um deles (veja a opção abaixo) e - será depois importado para o Manuskript. Um ou outro - poderão dar um melhor resultado, dependendo do documento. - <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> - <b>none</b>: no line wrap.<br> - <b>preserve</b>: tries to preserves line wrap from the - original document.</p> - <p>Deve o Pandoc criar - quebras de linha cosméticas/não-semânticas?</p><p> - <b>automática</b>: quebra aos 72 caracteres.<br> - <b>nenhuma</b>: sem quebra de linhas.<br> - <b>preservar</b>: tenta preservar a quebra de linhas - 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 + até MDEditCompleter - + Insert reference - Inserir referência + Inserir referência MainWindow - + General - Geral + Geral - + Book information - Informação do livro + Informação do livro - + Title - Título + Título - + Subtitle - Subtítulo + Subtítulo - + Series - Série + Série - + Volume - Volume + Volume - + Genre - Género + Género - + License - Licença + Licença - + Author - Autor + Autor - + Name - Nome + Nome - + Email - Email + Email - + Summary - Sinopse + Sinopse - + Situation: - Situação: + Situação: - + Summary: - Sinopse: + Sinopse: - + One sentence - Uma frase + Uma frase - + One paragraph - Um parágrafo + Um parágrafo - + One page - Uma página + Uma página - + Full - Completa + Completa - + One sentence summary - Sinopse numa página + Sinopse numa frase - + One paragraph summary - Sinopse num parágrafo + Sinopse num parágrafo - + Expand each sentence of your one paragraph summary to a paragraph - Expanda cada frase da sua sinopse num parágrafo para um parágrafo + Expanda cada frase da sua sinopse num parágrafo para um parágrafo - + One page summary - Sinopse numa página + Sinopse numa página - + Full summary - Sinopse completa + Sinopse completa - + Next - Seguinte - - - - What if...? - E se...? + Seguinte + What if...? + E se...? + + + Characters - Personagens + Personagens - + Names - Nomes + Nomes - + Filter - Filtro + Filtro - + Basic info - Informação básica + Informação básica - + Motivation - Motivação + Motivação - + Goal - Objectivo + Objectivo - + Conflict - Conflito + Conflito - + Epiphany - Epifania + 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">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> + <html><head/><body><p align="right">Sinopse<br/>num parágrafo</p></body></html> - + Importance - Importância + Importância - + Notes - Notas + Notas - + Detailed info - Informação detalhada + Informação detalhada - + Plots - Enredos + Enredos - + Plot - Enredo + Enredo - + Character(s) - Personagens + Personagens - + Description - Descrição + Descrição - + Result - Resultado + Resultado - + Resolution steps - Passos da resolução + Passos da resolução - + Add plot step - + Adicionar passo do enredo - + Remove selected plot step(s) - + Remover passos do enredo seleccionados - + World - Mundo + Mundo - + Populates with empty data - Povoa com categorias vazias + Povoa com categorias vazias - + More - Mais + Mais - + Source of passion - Fonte da paixão + Fonte da paixão - + Source of conflict - Fonte do conflito + Fonte do conflito - + Outline - + Esquema - + Editor - Editor + Editor - + Debug - Depuração + Depuração - + FlatData - Dados simples + Dados simples - + Persos - Personagens + Personagens - + Labels - Etiquetas + Etiquetas - + &File - &Ficheiro + &Ficheiro - + &Recent - &Recentes + &Recentes - + &Help - A&juda + A&juda - + &Tools - Ferramen&tas + Ferramen&tas - + &Edit - &Editar + &Editar - + &Format - + &Formatar - + &Header - + Cabeçal&ho - + &View - &Ver + &Ver - + &Mode - &Modo + &Modo - + Organi&ze - Organi&zar + Organi&zar - + &Cheat sheet - &Cábula - - - - Sea&rch - P&rocurar + &Cábula + Sea&rch + P&rocurar + + + &Navigation - &Navegação + &Navegação - + &Open - A&brir + A&brir - + Ctrl+O - Ctrl+B + Ctrl+B - + &Save - &Gravar + &Gravar - + Ctrl+S - + Ctrl+G - + Sa&ve as... - Gra&var como... + Gra&var como... - + Ctrl+Shift+S - Ctrl+Shift+V + Ctrl+Shift+V - + &Quit - &Sair + &Sair - + Ctrl+Q - Ctrl+S + Ctrl+S - + &Show help texts - &Mostrar textos de ajuda + &Mostrar textos de ajuda - + Ctrl+Shift+B - Ctrl+Shift+M - - - - &Spellcheck - &Ortografia - - - - F9 - F9 - - - - &Labels... - Eti&quetas... - - - - &Status... - E&stado... - - - - Tree - Árvore + Ctrl+Shift+M + &Spellcheck + &Ortografia + + + + F9 + F9 + + + + &Labels... + Eti&quetas... + + + + &Status... + E&stado... + + + + Tree + Árvore + + + &Simple - &Simples + &Simples - + &Fiction - &Ficção + &Ficção - + Index cards - Fichas indexadas + Fichas indexadas - + S&ettings - &Definições + &Definições - + F8 - F8 + F8 - + &Close project - Fe&char projecto + Fe&char projecto - + Co&mpile - Co&mpilar + Co&mpilar - + F6 - F6 + F6 - + &Frequency Analyzer - Analisador de &frequência + Analisador de &frequência - + &About - &Acerca de + &Acerca de - + About Manuskript - Acerca do Manuskript + Acerca do Manuskript - - + + &Import… - + &Importar… - + F7 - F7 + F7 - + &Copy - &Copiar + &Copiar - + Ctrl+C - Ctrl+C + Ctrl+C - + C&ut - Cor&tar + Cor&tar - + Ctrl+X - Ctrl+X + Ctrl+X - + &Paste - Co&lar + Co&lar - + Ctrl+V - Ctrl+V + Ctrl+V - - + + &Split… - + Di&vidir… - + Ctrl+Shift+K - Ctrl+Shift+D + Ctrl+Shift+V - + Sp&lit at cursor - D&ividir no cursor + D&ividir no cursor - + Ctrl+K - Ctrl+I + Ctrl+I - + M&erge - &Unir + &Unir - + Ctrl+M - Ctrl+U + Ctrl+U - + Dupl&icate - Dupl&icar + Dupl&icar - + &Delete - &Eliminar + &Eliminar - + Del - 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) - - - - - Ctrl+Alt+1 - + &Mover acima - Level &2 - + Ctrl+Shift+Up + Ctrl+Shift+↑ - - Ctrl+Alt+2 - + + M&ove Down + M&over abaixo - - Level &1 (atx) - + + Ctrl+Shift+Down + Ctrl+Shift+↓ - - Ctrl+1 - - - - - L&evel 2 - - - - - Ctrl+2 - + + &Rename + &Renomear - Level &3 - + F2 + F2 - - Ctrl+3 - + + &Level 1 (setext) + Níve&l 1 (defext) - Level &4 - + Ctrl+Alt+1 + Ctrl+Alt+1 - - Ctrl+4 - + + Level &2 + Nível &2 - Level &5 - + Ctrl+Alt+2 + Ctrl+Alt+2 - - Ctrl+5 - + + Level &1 (atx) + Nível &1 (atx) - Level &6 - + Ctrl+1 + Ctrl+1 - - Ctrl+6 - + + L&evel 2 + Nív&el 2 - - &Bold - + + Ctrl+2 + Ctrl+2 - - Ctrl+B - + + Level &3 + Nível &3 + + + + Ctrl+3 + Ctrl+3 + + + + Level &4 + Nível &4 - &Italic - + Ctrl+4 + Ctrl+4 - - Ctrl+I - + + Level &5 + Nível &5 - - &Strike - + + Ctrl+5 + Ctrl+5 - - &Verbatim - + + Level &6 + Nível &6 - - Su&perscript - + + 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+- - - - - - Co&mment block - - - - - Ctrl+Shift+C - - - - - Clear &formats - - - - - Ctrl+0 - - - - - &Comment line(s) - - - - - Ctrl+D - Ctrl+I - - - - &Ordered list - + 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 + Manuskript - + Project {} saved. - Projecto {} gravado. + Projecto {} gravado. - + WARNING: Project {} not saved. - AVISO: projecto {} não gravado. + AVISO: projecto {} não gravado. - + Project {} loaded. - Projecto {} carregado. + 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. + Projecto {} carregado com alguns erros. - + (~{} pages) - (~{} páginas) + (~{} páginas) - + Words: {}{} - Palavras: {}{} + Palavras: {}{} - + Book summary - Sinopse do livro + Sinopse do livro - + Project tree - Árvore do projecto + Árvore do projecto - + Metadata - Meta-dados + Meta-dados - + Story line - Fio da história + Fio da história - + Enter information about your book, and yourself. - Insira informação sobre o livro e sobre si. + 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 - - - - Install PyEnchant to use spellcheck - Instale o PyEnchant para usar verificação ortográfica - - - - Nothing - Nada - - - - POV - POV - - - - Label - - - - - 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 + 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) - Border - Contorno + 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 - Cantos + 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 com a importação por sua conta + + + + Allow POV + Permitir PDV + + + + Search + Procurar + + + + Ctrl+F + Ctrl+F + + + + &Technical Support + Apoio &técnico + + + + How to obtain technical support for Manuskript. + Como obter apoio técnico para o Manuskript. + + + + F1 + F1 + + + + &Locate log file... + &Localizar diário... + + + + Locate log file + Localizar diário + + + + Locate the diagnostic log file used for this session. + Localizar o ficheiro de diagnóstico desta sessão. + + + + Shift+F1 + Shift+F1 + + + + Sorry! + Desculpe! + + + + This session is not being logged. + Esta sessão não está a ser monitorizada. + + + + A log file is a Work in Progress! + Um diário é um trabalho em curso! + + + + The log file "{}" will continue to be written to until Manuskript is closed. + O diário "{}" continuará a ser escrito até fechar o Manuskript. + + + + It will now be displayed in your file manager, but is of limited use until you close Manuskript. + Aparecerá agora no seu gestor de ficheiros, mas tem uma utilização limitada até que feche o Manuskript. + + + + Error! + Erro! + + + + An error was encountered while trying to show the log file below in your file manager. + Foi encontrado um erro ao tentar mostrar o diário abaixo no seu gestor de ficheiros. + + + + F3 + F3 + + + + Shift+F3 + Shift+F3 + + + + Situation + Situação + + + + Status + Estado + + + + Search + + + No results found + Sem resultados @@ -1442,695 +1225,752 @@ Use se receber um erro YAML. Settings - Definições + Definições General - Geral + Geral - + Revisions - Revisões + Revisões Views - Vistas + Vistas - + Labels - Etiquetas + Etiquetas - + Status - + Estado - + Fullscreen - Ecrã completo + Ecrã completo General settings - Definições gerais + Definições gerais Application settings - + Definições da aplicação - + Style: - + Estilo: - + Language: - + Idioma: - + Font size: - Tamanho da letra: + Tamanho da letra: - - You might need to restart manuskript in order for those settings to take effect properly and entirely. - + + Restarting Manuskript ensures all settings take effect. + Reiniciar o Manuskript garante que as definições tenham efeito. - + Loading - Carregar + Carregamento - + Automatically load last project on startup - Carregar automaticamente o último projecto ao iniciar + Carregar automaticamente o último projecto ao iniciar - + Saving - Gravar + Gravação - + Automatically save every - Gravar automaticamente a cada + Gravar automaticamente a cada - + minutes. - minutos. + minutos. - + If no changes during - Se não houver alterações durante + Se não houver alterações durante - + seconds. - segundos. + segundos. - - Save on quit - Gravar ao sair + + Save on project close + Gravar ao fechar o projecto - - <html><head/><body><p>If you check this option, your project will be save as one single file. Easier to copy or backup, but does not allow collaborative editing, or versionning.<br/>If this is unchecked, your project will be save 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.</p><p>É mais fácil de copiar, mas não permite edição colaborativa ou controlo de versões.</p><p>Se não estiver marcada, o seu projecto será gravado como uma pasta com muitos ficheiros pequenos.</p></body></html> + + <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 + 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. + As revisões são uma forma de manter um registo das modificações. Para cada item de texto, armazenam as alterações ao texto principal, o que permite ver e restaurar versões anteriores. - + Keep revisions - Manter revisões + Manter revisões - + S&mart remove - Re&moção inteligente + Re&moção inteligente - + Keep: - Manter: + 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. + 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 + revisões por dia no último mês - + revisions per minute for the last 10 minutes - Revisões por minuto para os últimos 10 minutos + revisões por minuto nos últimos 10 minutos - + revisions per hour for the last day - revisões por hora para o último dia + revisões por hora no último dia - + revisions per 10 minutes for the last hour - revisões por 10 minutos para a última hora + revisões por 10 minutos na última hora - + revisions per week till the end of time - revisões por semana até ao fim dos tempos + revisões por semana até ao fim dos tempos - + Views settings - Definições de vistas + Aparência - + Tree - Árvore + Árvore - + Colors - Cores + Cores - + Icon color: - Cor do ícone: + Cor do ícone: + + + + Nothing + Nada + + + + POV + PDV + + + + Label + Etiqueta + + + + Progress + Progresso + + + + Compile + Compilar - Nothing - Nada - - - - POV - POV - - - - Label - - - - - Progress - Progresso - - - - Compile - Compilar - - - Text color: - Cor do texto: + 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 + 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 + Mostrar &progresso - + Show summar&y - Mostrar s&inopse + Mostrar s&inopse - + &Nothing - &Nada + &Nada - + Text - Texto + Texto - + &Show word count - + Mo&strar total de palavras - + Show p&rogress - Mostrar p&rogresso + Mostrar p&rogresso - + Show summary - Mostrar sinopse + Mostrar sinopse - + Outline - + Esquema - + Visible columns - Colunas visíveis + Colunas visíveis - + Goal - Objectivo + Objectivo - + Word count - Total de palavras + Total de palavras - + Percentage - Percentagem + Percentagem - + Title - Título + Título - + Index cards - Fichas indexadas + Fichas indexadas - + Background - Fundo + Fundo - + Color: - Cor: + Cor: - + Ctrl+S - + Ctrl+S - + Image: - Imagem: + Imagem: - + Style - Estilo + Estilo - + Old st&yle - Est&ilo antigo + Est&ilo antigo - + &New style - + &Novo estilo - + Item colors - Cor dos itens + Cor dos itens - + Border color: - Cor do contorno: + Cor do contorno: - + Corner color: - Cor do canto: + Cor do canto: - + Text editor - Editor de texto + Editor de texto - + Background: - Fundo: + Fundo: - + Transparent - Transparente + Transparente - + Restore defaults - Repor predefinições - - - - Font - Letra - - - - Family: - Família: - - - - Size: - Tamanho: - - - - Misspelled: - Erro ortográfico: - - - - Text area - Área de texto - - - - Max width - Largura máxima - - - - px - px + 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: + Margens esquerda/direita: - + Top/Bottom margins: - Margens superior/inferior: + Margens superior/inferior: - + Paragraphs - Parágrafos + Parágrafos - + Alignment: - Alinhamento: + Alinhamento: - + Left - Esquerda + Esquerda - + Center - Centro + Centro - + Right - Direita + Direita - + Justify - Justificado + Justificado - + Line spacing: - Espaçamento de linhas: + Espaçamento de linhas: - + Single - Simples + Simples - + 1.5 lines - 1,5 linhas + 1,5 linhas - + Double - Duplo + Duplo - + Proportional - Proporcional + Proporcional - + % - % + % - + Tab width: - Largura da tabulação: + Largura da tabulação: - + Indent 1st line - Indentar 1ª linha + Indentar 1ª linha - + Spacing: - Espaçamento: + Espaçamento: - + Cursor - Cursor + Cursor - + Use block insertion of - Usar inserção de bloco de + Usar inserção de bloco de - + Disable blinking - Desactivar piscar + Desactivar piscar - + Typewriter mode - + Modo Dactilografia - + Focus mode - + Modo Foco - + None - Nenhum + Nenhum - + Sentence - + Frase - + Line - + Linha - + Paragraph - + Parágrafo - + New - Novo + Novo - + Edit - Editar + Editar - + Delete - Eliminar + Eliminar - + Theme name: - Nome do tema: + Nome do tema: - + Apply - Aplicar + Aplicar - + Cancel - Cancelar + Cancelar - + Window Background - Fundo da janela + Fundo da janela - + Text Background - Fundo do texto + Fundo do texto - + Text Options - Opções do texto + Opções do texto - + Paragraph Options - Opções do parágrafo + Opções do parágrafo - + Type: - Tipo: + Tipo: - + No Image - Sem imagem + Sem imagem - + Tiled - Mosaico - - - - Centered - Centrada - - - - Stretched - Esticada - - - - Scaled - Escalada - - - - Zoomed - Ampliada - - - - Opacity: - Opacidade: - - - - Position: - Posição: - - - - Width: - Largura: + Mosaico + Centered + Centrada + + + + Stretched + Esticada + + + + Scaled + Escalada + + + + Zoomed + Ampliada + + + + Opacity: + Opacidade: + + + + Position: + Posição: + + + + Width: + Largura: + + + Corner radius: - Raio do canto: + Raio do canto: - + Margins: - Margens: + Margens: - + Padding: - Espaço: + Espaço: - + Font: - Letra: + Letra: - + Alignment - Alinhamento + 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 a melhor 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 + Mostrar progresso em caracteres +junto a palavras + + + + Char/Word Counter + Total de caracteres/palavras + + + + Count spaces as chars + Contar espaços como caracteres + + + + Show char c&ount + M&ostrar total de caracteres + + + + Sho&w char count + &Mostrar total de caracteres SpellAction - + Spelling Suggestions - Sugestões ortográficas + Sugestões ortográficas - + &Add to dictionary - &Adicionar ao dicionário + &Adicionar ao dicionário - + &Remove from custom dictionary - &Remover do dicionário pessoal + &Remover do dicionário pessoal + + + + &New Character + &Novo carácter + + + + &New Plot Item + &Novo item de enredo + + + + &New World Item + &Novo item do mundo + + + + &Correction Suggestions + Sugestões de &correcção + + + + &Correction Suggestion + Sugestão de &correcção @@ -2138,12 +1978,12 @@ Use se receber um erro YAML. About Manuskript - Acerca do Manuskript + Acerca do Manuskript Manuskript - Manuskript + Manuskript @@ -2151,63 +1991,50 @@ Use se receber um erro YAML. Version - Versão + Versão Software Versions in Use: - Versões dos programas em uso: + Versões dos programas em uso: abstractModel - + Title - Título + Título - + POV - POV + PDV - + Label - + Etiqueta - + Status - + Estado - + Compile - Compilar + Compilar - + Word count - Total de palavras + Total de palavras - + Goal - Objectivo - - - - app - - - Loaded translation: {}. - Tradução carregada: {}. - - - - Note: No translator found or loaded for locale {}. - Nota: sem tradução para a configuração regional {}. + Objectivo @@ -2215,68 +2042,73 @@ Use se receber um erro YAML. Form - Formulário + Formulário POV: - POV: + PDV: Goal: - Objectivo: + Objectivo: Word count - Total de palavras + Total de palavras One line summary - Sinopse numa linha + Sinopse numa linha Few sentences summary: - Sinopse em poucas frases: + Sinopse em poucas frases: characterModel - - New character - Novo personagem - - - + Name - Nome + Nome - + Value - Valor + Valor + + + + New character + Novo personagem + + + + Description + Descrição characterTreeView - + Main - + Principal - + Secondary - Secundário + Secundário - + Minor - Menor + Menor @@ -2284,47 +2116,47 @@ Use se receber um erro YAML. Form - Formulário + Formulário Filter (type the name of anything in your project) - Filtro (escreva qualquer coisa do seu projecto) + Filtro (escreva o nome de qualquer coisa do seu projecto) Minor - Menor + Menor Secondary - Secundário + Secundário Main - + Principal Characters - Personagens + Personagens Texts - Textos + Textos Plots - Enredos + Enredos World - Mundo + Mundo @@ -2332,27 +2164,27 @@ Use se receber um erro YAML. None - Nenhum + Nenhum Main - + Principal Secondary - Secundário + Secundário Minor - Menor + Menor Various - Vários + Vários @@ -2360,7 +2192,7 @@ Use se receber um erro YAML. Various - Vários + Vários @@ -2368,7 +2200,7 @@ Use se receber um erro YAML. Various - Vários + Vários @@ -2376,7 +2208,7 @@ Use se receber um erro YAML. Dock Widgets Toolbar - Ancorar barra de painéis + Ancorar barra de painéis @@ -2384,20 +2216,20 @@ Use se receber um erro YAML. Form - Formulário + Formulário corkDelegate - + One line summary - Sinopse numa linha + Sinopse numa linha - + Full summary - Sinopse completa + Sinopse completa @@ -2405,7 +2237,7 @@ Use se receber um erro YAML. Form - Formulário + Formulário @@ -2413,27 +2245,27 @@ Use se receber um erro YAML. Export - Exportar + Exportar Export to: - Exportar para: + Exportar para: Manage exporters - Gerir exportadores + Gerir exportadores Preview - Antever + Antever Settings - Definições + Definições @@ -2441,7 +2273,7 @@ Use se receber um erro YAML. {} (not implemented yet) - {} (ainda não implementado) + {} (ainda não implementado) @@ -2449,202 +2281,202 @@ Use se receber um erro YAML. Form - Formulário + Formulário Content - Conteúdo + Conteúdo Decide here what will be included in the final export. - Decida aqui o que será incluído na exportação final. + Decida aqui o que será incluído na exportação final. Type - Tipo + Tipo Title - Título + Título Text - Texto + Texto I need more granularity - Preciso de mais escolhas + Preciso de mais escolhas Fi&lters - Fi&ltros + Fi&ltros <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>Filtra que itens serão incluídos na exportação final.</p><p align="center"><span style=" color:#FF0000;">Ainda não está completamente implementado.</span></p></body></html> + <html><head/><body><p>Filtra que itens serão incluídos na exportação final..<br/><span style=" color:#773333;">(ainda não está completamente implementado)</span></p></body></html> Ignore compile status (include all items) - Ignorar estado de compilação (incluir todos os itens) + Ignorar estado de compilação (incluir todos os itens) Subitems of: - Sub-itens de: + Sub-itens de: Labels - Etiquetas + Etiquetas Status - + Estado Separations - Separações + Separações Between folders: - Entre pastas: + Entre pastas: Empty line - Linha vazia + Linha vazia Custom - + Personalizado Between texts: - Entre textos: + Entre textos: Between folder and text: - Entre pasta e texto: + Entre pasta e texto: Between text and folder: - Entre texto e pasta: + Entre texto e pasta: Transformations - Transformações + Transformações Typographic replacements: - Substituições tipográficas: + Substituições tipográficas: - + Replace ... with … - + Substituir ... por … - + Replace --- with — - + Substituir --- por — Replace double quotes (") with: - Substituir aspas duplas (") por: + Substituir aspas duplas (") por: Replace single quotes (') with: - Substituir aspas simples (') por: + Substituir aspas simples (') por: Remove multiple spaces - Remover espaços múltiplos + Remover espaços múltiplos Custom replacements: - Substituições personalizadas: + Substituições personalizadas: Enabled - Activa + Activa Replace - Substituir + Substituir With - Por + Por RegExp - ExpReg + ExpReg If checked, uses regular expression for replacement. If unchecked, replaced as plain text. - Se marcada, usa expressões regulares para a substituição. Se não, substitui como texto simples. + Se marcada, usa expressões regulares para a substituição. Se não, substitui como texto simples. Preview - Antever + Antever Font - Letra + Letra Font: - Letra: + Letra: Font size: - Tamanho da letra: + Tamanho da letra: Folder - Pasta + Pasta {}Level {} folder - {}nível {} pasta + {}nível {} pasta {}Level {} text - {}nível {} texto + {}nível {} texto @@ -2652,37 +2484,37 @@ Use se receber um erro YAML. Installed - Instalado + Instalado Custom - + Personalizado Not found - Não encontrado + Não encontrado {} not found. Install it, or set path manually. - {} não encontrado. Instale-o ou defina o caminho manualmente. + {} não encontrado. Instale-o ou defina o caminho manualmente. <b>Status:</b> uninstalled. - <b>Estado:</b> não instalado. + <b>Estado:</b> não instalado. <b>Requires:</b> - <b>Requer:</b> + <b>Requer:</b> Set {} executable path. - Definir caminho executável de {}. + Definir caminho executável de {}. @@ -2690,35 +2522,90 @@ Use se receber um erro YAML. Phrases - Frases + Frases Frequency - Frequência + Frequência Word - Palavra + Palavra fullScreenEditor - + Theme: - Tema: + Tema: - + {} words / {} - {} palavras/{} + {} palavras/{} - + {} words - {} palavras + {} 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 @@ -2726,32 +2613,32 @@ Use se receber um erro YAML. General - Geral + Geral Split scenes at: - Dividir cenas em: + Dividir cenas em: \n---\n - \n---\n + \n---\n Trim long titles (> 32 chars) - Aparar títulos longos (>32 caracteres) + Aparar títulos longos (>32 caracteres) Import under: - Importar sob: + Importar sob: Import in a top-level folder - Importar numa pasta de nível superior + Importar numa pasta de nível superior @@ -2759,7 +2646,7 @@ Use se receber um erro YAML. If you don't wanna see me, you can hide me in Help menu. - Se não me deseja ver, pode ocultar-me no menu Ajuda. + Se não me deseja ver, pode ocultar-me no menu Ajuda. @@ -2767,40 +2654,40 @@ Use se receber um erro YAML. Import - Importar + Importar Format: - Formato: + Formato: - Chose file - Escolha o ficheiro + Choose file + Escolha o ficheiro Clear file - Limpe o ficheiro + Limpar ficheiro Preview - Antever + Antever Settings - Definições + Definições lineEditView - + Various - Vários + Vários @@ -2808,67 +2695,67 @@ Use se receber um erro YAML. Form - Formulário + Formulário Lock screen: - Bloquear ecrã: + Bloquear ecrã: Word target - Palavras alvo + Objectivo de palavras Time target - Tempo alvo + Tempo limite words - palavras + palavras minutes - minutos + minutos Lock ! - Bloquear! + Bloquear! ~{} h. - ~{} h. + ~{} h. ~{} mn. - ~{} m. + ~{} m. {}:{} - {}:{} + {}:{} {} s. - {} s. + {} s. {} remaining - {} restante + {} restante {} words remaining - {} palavras restantes + {} palavras restantes @@ -2876,60 +2763,75 @@ Use se receber um erro YAML. Form - Formulário + Formulário Go to parent item - Ir para o item-mãe + Ir ao item-mãe Alt+Up - Alt+↑ + Alt+↑ Text - Texto + Texto Index cards - Fichas indexadas + Fichas indexadas Outline - + Esquema F11 - F11 + F11 - + Root - Raiz + Raiz - - {} words / {} - {} palavras/{} - - - + {} words - {} palavras + {} palavras + + + + ({} chars) {} words / {} + ({} caracteres) {} palavras / {} + + + + {} words / {} + {} palavras / {} + + + + {} chars + {} caracteres + + + + {} chars + {} caracteres markdownSettings - + Markdown - Markdown + Markdown @@ -2937,168 +2839,45 @@ Use se receber um erro YAML. Form - Formulário + Formulário Properties - Propriedades + Propriedades Summary - Sinopse + Sinopse One line summary - Sinopse numa linha + Sinopse numa linha Full summary - Sinopse completa + Sinopse completa Notes / References - Notas/Referências + Notas/Referências Revisions - Revisões + Revisões myPanel - + Auto-hide - Ocultar automaticamente - - - - outlineBasics - - - Root - Raiz - - - - Open {} items in new tabs - Abrir itens {} em novos separadores - - - - Open {} in a new tab - Abrir {} em novo separador - - - - New &Folder - Novo &separador - - - - New &Text - Novo &texto - - - - C&ut - Cor&tar - - - - &Copy - &Copiar - - - - &Paste - Co&lar - - - - &Delete - &Eliminar - - - - &Rename - &Renomear - - - - Set POV - Definir POV - - - - None - Nenhum - - - - Main - - - - - Secondary - Secundário - - - - Minor - Menor - - - - Set Status - Definir estado - - - - Set Label - Definir etiqueta - - - - Set Custom Icon - Definir ícone personalizado - - - - Restore to default - Repor predefinição - - - - New - Novo - - - - About to remove - Prestes a remover - - - - <p><b>You're about to delete {} item(s).</b></p><p>Are you sure?</p> - <p><b>Está prestes a eliminar {} item(ns).</b></p><p>Tem a certeza?</p> - - - - Select at least two items. Folders are ignored. - Seleccione pelo menos dois itens. As pastas são ignoradas. - - - - All items must be on the same level (share the same parent). - Todos os itens têm de estar no mesmo nível (partilhar a mesma mãe). + Ocultar automaticamente @@ -3106,53 +2885,40 @@ Use se receber um erro YAML. None - Nenhum + Nenhum Main - + Principal Secondary - Secundário + Secundário Minor - Menor - - - - outlineItem - - - {} words / {} ({}) - {} palavras/{} ({}) - - - - {} words - {} palavras + Menor pandocSettings - + General - Geral + Geral - + Table of Content - Índice + Índice - + Custom settings for {} - Definições personalizadas para {} + Definições personalizadas para {} @@ -3160,17 +2926,17 @@ Use se receber um erro YAML. Main - + Principal Secondary - Secundário + Secundário Minors - Menores + Menores @@ -3178,243 +2944,243 @@ Use se receber um erro YAML. General - Geral + Geral Promise - Promessa + Promessa Problem - Problema + Problema Progress - Progresso + Progresso Resolution - Resolução + Resolução Try / Fail - Tentar/Falhar + Tentar/Falhar No and - Não e + Não e Yes but - Sim mas + Sim mas Freytag's pyramid - Pirâmide de Freitag + Pirâmide de Freitag Exposition - Exposição + Exposição Rising action - Crescendo da acção + Acção a crescer Climax - Clímax + Clímax Falling action - Queda da acção + Queda da acção Three acts - Três actos + Três actos 1. Setup - 1. Configuração + 1. Configuração 1. Inciting event - 1. Evento incitador + 1. Evento incitador 1. Turning point - 1. Ponto de viragem + 1. Ponto de viragem 2. Choice - 2. Escolha + 2. Escolha 2. Reversal - 2. Reversão + 2. Reversão 2. Disaster - 2. Desastre + 2. Desastre 3. Stand up - 3. Enfrentamento + 3. Enfrentamento 3. Climax - 3. Clímax + 3. Clímax 3. Ending - 3. Final + 3. Final Hero's journey - Jornada do herói + Jornada do herói Ordinary world - Mundo normal + Mundo normal Call to adventure - Chamada para a aventura + Chamada à aventura Refusal of the call - Recusa da chamada + Recusa da chamada Meeting with mentor - Reunião com o mentor + Reunião com o mentor Crossing the Threshold - + Passar o limite Tests - Testes + Testes Approach - Abordagem + Abordagem Abyss - Abismo + Abismo Reward / Revelation - Recompensa/Revelação + Recompensa/Revelação Transformation - Transformação + Transformação Atonement - Expiação + Expiação Return - Regresso + Regresso plotModel - - New plot - Novo enredo - - - + Name - Nome + Nome - + Meta - Meta + Meta - + New step - Novo passo + Novo passo - + Main - + Principal - + Secondary - Secundário + Secundário - + Minor - Menor + Menor + + + + New plot + Novo enredo plotTreeView - + Main - + Principal - + Secondary - Secundário + Secundário - + Minor - Menor + Menor - + **Plot:** {} - **Enredo:** {} + **Enredo:** {} @@ -3422,17 +3188,17 @@ Use se receber um erro YAML. Main - + Principal Secondary - Secundário + Secundário Minors - Menores + Menores @@ -3440,200 +3206,37 @@ Use se receber um erro YAML. Form - Formulário + Formulário POV - POV + PDV Status - + Estado Label - + Etiqueta Compile - Compilar + Compilar Goal - Objectivo + Objectivo Word count - Total de palavras - - - - references - - - Not a reference: {}. - Não é referência: {}. - - - - Unknown reference: {}. - Referência desconhecida: {}. - - - - Path: - Caminho: - - - - Stats: - Estatísticas: - - - - POV: - POV: - - - - Status: - Estado: - - - - Label: - Etiqueta: - - - - Short summary: - Sinopse curta: - - - - Long summary: - Sinopse longa: - - - - Notes: - Notas: - - - - Basic info - Informação básica - - - - Detailed info - Informação detalhada - - - - POV of: - POV de: - - - - Go to {}. - Ir para {}. - - - - Motivation - Motivação - - - - Goal - Objectivo - - - - Conflict - Conflito - - - - Epiphany - Epifania - - - - Short summary - Sinopse curta - - - - Longer summary - 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: + Total de palavras @@ -3641,87 +3244,87 @@ Use se receber um erro YAML. Form - Formulário + Formulário Options - Opções + Opções - + Restore - Restaurar + Restaurar - + Delete - Eliminar + Eliminar Show modifications - Mostrar modificações + Mostrar modificações Show ancient version - Mostrar versão anterior + Mostrar versão anterior Show spaces - Mostrar espaços + Mostrar espaços Show modifications only - Mostrar só modificações + Mostrar só modificações {} years ago - {} anos atrás + {} anos atrás {} months ago - {} meses atrás + {} meses atrás {} days ago - {} dias atrás + {} dias atrás 1 day ago - um dia atrás + um dia atrás {} hours ago - {} horas atrás + {} horas atrás {} minutes ago - {} minutos atrás + {} minutos atrás {} seconds ago - {} segundos atrás + {} segundos atrás - + Line {}: - Linha {}: + Linha {}: - + Clear all - Limpar tudo + Limpar tudo @@ -3729,95 +3332,67 @@ Use se receber um erro YAML. Form - Formulário + Formulário Search for... - Procurar por... - - - - Search in: - Procurar em: - - - - All - Tudo - - - - Title - Título - - - - Text - Texto - - - - Summary - Sinopse - - - - Notes - Notas - - - - POV - POV - - - - Status - - - - - Label - - - - - Options: - Opções: - - - - Case sensitive - Sensível a maiúsculas + Procurar por... settingsWindow - + New status - Novo estado + Novo estado - + New label - Nova etiqueta + Nova etiqueta - + newtheme - novotema + novotema - + New theme - Novo tema + Novo tema - + (read-only) - (só de leitura) + (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: +{} @@ -3825,27 +3400,27 @@ Use se receber um erro YAML. Form - Formulário + Formulário TextLabel - Rótulo + Rótulo Minor - Menor + Menor Secondary - Secundário + Secundário Main - + Principal @@ -3867,17 +3442,31 @@ Use se receber um erro YAML. <p><b>Mark:</b></p> - + + <p>Divide os itens seleccionados na marca indicada.</p> + + <p>Se um dos itens for uma pasta, será aplicado + recursivamente a <i>todos</i> os itens-filho.</p> + + <p>A marca de divisão pode conter as seguintes sequências: + <ul> + <li><b><code>\n</code></b>: quebra de linha</li> + <li><b><code>\t</code></b>: tabulação</li> + </ul> + </p> + + <p><b>Marca:</b></p> + Split '{}' - Dividir "{}" + Dividir «{}» Split items - Dividir itens + Dividir itens @@ -3885,40 +3474,40 @@ Use se receber um erro YAML. Form - Formulário + Formulário Show Plots - Mostrar enredos + Mostrar enredos Show Characters - Mostrar personagens + Mostrar personagens tabSplitter - + Open selected items in that view. - Abrir itens seleccionados na vista. + Abrir itens seleccionados na vista. - + Split horizontally - Dividir na horizontal + Dividir na horizontal - + Close split - Fechar divisão + Fechar divisão - + Split vertically - Dividir na vertical + Dividir na vertical @@ -3926,7 +3515,7 @@ Use se receber um erro YAML. Various - Vários + Vários @@ -3934,47 +3523,47 @@ Use se receber um erro YAML. Form - Formulário + Formulário CTRL+B - CTRL+B + CTRL+B CTRL+I - CTRL+I + CTRL+I CTRL+U - CTRL+U + CTRL+U CTRL+P - CTRL+P + CTRL+P CTRL+L - CTRL+L + CTRL+L CTRL+E - CTRL+E + CTRL+E CTRL+R - CTRL+R + CTRL+R CTRL+J - CTRL+J + CTRL+J @@ -3982,22 +3571,22 @@ Use se receber um erro YAML. Expand {} - Expandir {} + Expandir {} Collapse {} - Colapsar {} + Colapsar {} Expand All - Expandir tudo + Expandir tudo Collapse All - Colapsar tudo + Colapsar tudo @@ -4005,435 +3594,435 @@ Use se receber um erro YAML. Form - Formulário + Formulário 1 - 1 + 1 Templates - Modelos + Modelos Empty - Vazio - - - - Novel - Romance - - - - Novella - Novela - - - - Short Story - História curta + Vazio - Research paper - Investigação + Novel + Romance - + + Novella + Novela + + + + Short Story + História curta + + + + Research paper + Investigação + + + Demo projects - Projectos de demonstração + Projectos de demonstração Add level - Adicionar nível + Adicionar nível Add word count - + Adicionar total de palavras Next time, automatically open last project - No próximo arranque, abrir o último projecto + No próximo arranque, abrir o último projecto Open... - Abrir... + Abrir... Recent - Recentes + Recentes Create - Criar + Criar - + Open project - Abrir projecto + Abrir projecto - + Manuskript project (*.msk);;All files (*) - Projecto do Manuskript (*.msk);;Todos os ficheiros (*) + Projecto do Manuskript (*.msk);;Todos os ficheiros (*) - + Save project as... - Gravar projecto como... + Gravar projecto como... - + Manuskript project (*.msk) - Projecto do Manuskript (*.msk) + Projecto do Manuskript (*.msk) - + Manuskript - Manuskript + Manuskript - + Create New Project - Criar novo projecto + Criar novo projecto - + Warning - Aviso + Aviso - + Overwrite existing project {} ? - Sobrescrever projecto {} existente? - - - - Empty fiction - Ficção vazia - - - - Chapter - capítulos - - - - Scene - cenas - - - - Trilogy - Trilogia - - - - Book - Livro - - - - Section - Secção + Sobrescrever projecto {} existente? + Empty fiction + Ficção vazia + + + + Chapter + capítulos + + + + Scene + Cena + + + + Trilogy + Trilogia + + + + Book + livros + + + + Section + secções + + + Empty non-fiction - Não-ficção vazia + Não-ficção vazia - + words each. - palavras cada. + palavras cada. - + of - de + de - + Text - Texto + Texto - + Something - Algo + Algo - + <b>Total:</b> {} words (~ {} pages) - <b>Total:</b> {} palavras (~ {} páginas) + <b>Total:</b> {} palavras (~ {} páginas) - + Fiction - Ficção + Ficção - + Non-fiction - Não-ficção + Não-ficção - + Idea - Ideia + Ideia - + Note - Nota + Nota - + Research - Investigação + Investigação - + TODO - A FAZER + A FAZER - + First draft - 1º esboço + 1º rascunho - + Second draft - 2º esboço + 2º rascunho - + Final - Final + Final worldModel - + New item - Novo item + Novo item - + Fantasy world building - Construção de um mundo de fantasia + Construção de um mundo de fantasia - + Physical - Físico + Físico - + Climate - Clima + Clima - + Topography - Topografia + Topografia - + Astronomy - Astronomia + Astronomia - + Natural resources - + Recursos naturais - + Wild life - Vida selvagem + Fauna - + Flora - Flora + Flora - + History - História + História - + Races - Raças + Raças - + Diseases - Doenças + Doenças - + Cultural - Cultura + Cultura - + Customs - Tradições + Tradições - + Food - Comida + Comida - + Languages - Idiomas + Idiomas - + Education - Educação + Educação - + Dresses - Roupas + Roupas - + Science - Ciência + Ciência - + Calendar - Calendário + Calendário - + Bodily language - Expressão corporal + Expressão corporal - + Ethics - Ética + Ética - + Religion - Religião + Religião - + Government - Governo + Governo - + Politics - Política + Política - + Gender roles - Papéis dos sexos + Papéis dos sexos - + Music and arts - Música e artes + Música e artes - + Architecture - Arquitectura + Arquitectura - + Military - Forças armadas + Forças armadas - + Technology - Tecnologia + Tecnologia - + Courtship - Namoro + Namoro - + Demography - Demografia + Demografia - + Transportation - Transportes + Transportes - + Medicine - Medicina + Medicina - + Magic system - Sistema mágico + Sistema mágico - + Rules - Regras + Regras - + Organization - Organização + Organização - + Magical objects - Objectos mágicos + Objectos mágicos - + Magical places - Locais mágicos + Locais mágicos - + Magical races - Raças mágicas + Raças mágicas - + Important places - Locais importantes + Locais importantes - + Important objects - Objectos importantes + Objectos importantes diff --git a/i18n/manuskript_ro.qm b/i18n/manuskript_ro.qm new file mode 100644 index 0000000..c247d6a Binary files /dev/null and b/i18n/manuskript_ro.qm differ diff --git a/i18n/manuskript_ro.ts b/i18n/manuskript_ro.ts new file mode 100644 index 0000000..355bf42 --- /dev/null +++ b/i18n/manuskript_ro.ts @@ -0,0 +1,4005 @@ + + + + + ExportersManager + + + Manage Exporters + + + + + Manuskript + + + + + Description + + + + + Offers export to + + + + + Status + + + + + Status: + + + + + Version: + + + + + Path: + + + + + ... + + + + + {HelpText} + + + + + FrequencyAnalyzer + + + Frequency Analyzer + + + + + Word frequency + + + + + Settings + + + + + Minimum size: + + + + + Exclude words (comma separated): + + + + + Analyze + + + + + Phrase frequency + + + + + Number of words: from + + + + + to + + + + + MDEditCompleter + + + Insert reference + + + + + MainWindow + + + General + + + + + Title + + + + + Subtitle + + + + + Series + + + + + Volume + + + + + 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 + + + + + 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 + + + + + Book information + + + + + &About + + + + + About Manuskript + + + + + Manuskript + + + + + Project {} saved. + + + + + WARNING: Project {} not saved. + + + + + Project {} loaded. + + + + + 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 + + + + + &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 + + + No results found + + + + + Settings + + + Settings + + + + + General + + + + + Revisions + + + + + Views + + + + + Labels + + + + + Status + + + + + Fullscreen + + + + + General settings + + + + + Application settings + + + + + 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 + + + About Manuskript + + + + + Manuskript + + + + + aboutDialog + + + Version + + + + + Software Versions in Use: + + + + + abstractModel + + + Title + + + + + POV + + + + + Label + + + + + Status + + + + + Compile + + + + + Word count + + + + + Goal + + + + + basicItemView + + + Form + + + + + POV: + + + + + Goal: + + + + + Word count + + + + + One line summary + + + + + Few sentences summary: + + + + + characterModel + + + Name + + + + + Value + + + + + New character + + + + + Description + + + + + characterTreeView + + + Main + + + + + Secondary + + + + + Minor + + + + + cheatSheet + + + Form + + + + + Filter (type the name of anything in your project) + + + + + Minor + + + + + Secondary + + + + + Main + + + + + Characters + + + + + Texts + + + + + Plots + + + + + World + + + + + cmbOutlineCharacterChoser + + + None + + + + + Main + + + + + Secondary + + + + + Minor + + + + + Various + + + + + cmbOutlineLabelChoser + + + Various + + + + + cmbOutlineStatusChoser + + + Various + + + + + collapsibleDockWidgets + + + Dock Widgets Toolbar + + + + + completer + + + Form + + + + + corkDelegate + + + One line summary + + + + + Full summary + + + + + editorWidget_ui + + + Form + + + + + exporter + + + Export + + + + + Export to: + + + + + Manage exporters + + + + + Preview + + + + + Settings + + + + + exporterDialog + + + {} (not implemented yet) + + + + + exporterSettings + + + Form + + + + + Content + + + + + Decide here what will be included in the final export. + + + + + Type + + + + + Title + + + + + Text + + + + + I need more granularity + + + + + Fi&lters + + + + + <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> + + + + + Ignore compile status (include all items) + + + + + Subitems of: + + + + + Labels + + + + + Status + + + + + Separations + + + + + Between folders: + + + + + Empty line + + + + + Custom + + + + + Between texts: + + + + + Between folder and text: + + + + + Between text and folder: + + + + + Transformations + + + + + Typographic replacements: + + + + + Replace double quotes (") with: + + + + + Replace single quotes (') with: + + + + + Remove multiple spaces + + + + + Custom replacements: + + + + + Enabled + + + + + Replace + + + + + With + + + + + RegExp + + + + + If checked, uses regular expression for replacement. If unchecked, replaced as plain text. + + + + + Preview + + + + + Font + + + + + Font: + + + + + Font size: + + + + + Folder + + + + + {}Level {} folder + + + + + {}Level {} text + + + + + Replace ... with … + + + + + Replace --- with — + + + + + exportersManager + + + Installed + + + + + Custom + + + + + Not found + + + + + {} not found. Install it, or set path manually. + + + + + <b>Status:</b> uninstalled. + + + + + <b>Requires:</b> + + + + + Set {} executable path. + + + + + frequencyAnalyzer + + + Phrases + + + + + Frequency + + + + + Word + + + + + 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 + + + + + generalSettings + + + General + + + + + Split scenes at: + + + + + \n---\n + + + + + Trim long titles (> 32 chars) + + + + + Import under: + + + + + Import in a top-level folder + + + + + helpLabel + + + If you don't wanna see me, you can hide me in Help menu. + + + + + importer + + + Import + + + + + Format: + + + + + Choose file + + + + + Clear file + + + + + Preview + + + + + Settings + + + + + lineEditView + + + Various + + + + + locker + + + Form + + + + + Lock screen: + + + + + Word target + + + + + Time target + + + + + words + + + + + minutes + + + + + Lock ! + + + + + ~{} h. + + + + + ~{} mn. + + + + + {}:{} + + + + + {} s. + + + + + {} remaining + + + + + {} words remaining + + + + + mainEditor + + + Form + + + + + Text + + + + + Index cards + + + + + Outline + + + + + F11 + + + + + Go to parent item + + + + + Alt+Up + + + + + Root + + + + + {} words + + + + + ({} chars) {} words / {} + + + + + {} words / {} + + + + + {} chars + + + + + {} chars + + + + + markdownSettings + + + Markdown + + + + + metadataView + + + Form + + + + + Properties + + + + + Summary + + + + + One line summary + + + + + Full summary + + + + + Notes / References + + + + + Revisions + + + + + myPanel + + + Auto-hide + + + + + outlineCharacterDelegate + + + None + + + + + Main + + + + + Secondary + + + + + Minor + + + + + pandocSettings + + + General + + + + + Table of Content + + + + + Custom settings for {} + + + + + persosProxyModel + + + Main + + + + + Secondary + + + + + Minors + + + + + plotDelegate + + + General + + + + + Promise + + + + + Problem + + + + + Progress + + + + + Resolution + + + + + Try / Fail + + + + + No and + + + + + Yes but + + + + + 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 + + + + + Tests + + + + + Approach + + + + + Abyss + + + + + Reward / Revelation + + + + + Transformation + + + + + Atonement + + + + + Return + + + + + plotModel + + + Name + + + + + Meta + + + + + New step + + + + + Main + + + + + Secondary + + + + + Minor + + + + + New plot + + + + + plotTreeView + + + Main + + + + + Secondary + + + + + Minor + + + + + **Plot:** {} + + + + + plotsProxyModel + + + Main + + + + + Secondary + + + + + Minors + + + + + propertiesView + + + Form + + + + + POV + + + + + Status + + + + + Label + + + + + Compile + + + + + Goal + + + + + Word count + + + + + revisions + + + Form + + + + + Options + + + + + Restore + + + + + Delete + + + + + Show modifications + + + + + Show ancient version + + + + + Show spaces + + + + + Show modifications only + + + + + {} years ago + + + + + {} months ago + + + + + {} days ago + + + + + 1 day ago + + + + + {} hours ago + + + + + {} minutes ago + + + + + {} seconds ago + + + + + Line {}: + + + + + Clear all + + + + + search + + + Form + + + + + Search for... + + + + + 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: +{} + + + + + sldImportance + + + Form + + + + + TextLabel + + + + + Minor + + + + + Secondary + + + + + Main + + + + + splitDialog + + + + <p>Split selected item(s) at the given mark.</p> + + <p>If one of the selected item is a folder, it will be applied + recursively to <i>all</i> of it's children items.</p> + + <p>The split mark can contain following escape sequences: + <ul> + <li><b><code>\n</code></b>: line break</li> + <li><b><code>\t</code></b>: tab</li> + </ul> + </p> + + <p><b>Mark:</b></p> + + + + + + Split '{}' + + + + + Split items + + + + + storylineView + + + Form + + + + + Show Plots + + + + + Show Characters + + + + + tabSplitter + + + Open selected items in that view. + + + + + Split horizontally + + + + + Close split + + + + + Split vertically + + + + + textEditView + + + Various + + + + + textFormat + + + Form + + + + + CTRL+B + + + + + CTRL+I + + + + + CTRL+U + + + + + CTRL+P + + + + + CTRL+L + + + + + CTRL+E + + + + + CTRL+R + + + + + CTRL+J + + + + + treeView + + + Expand {} + + + + + Collapse {} + + + + + Expand All + + + + + Collapse All + + + + + welcome + + + Form + + + + + 1 + + + + + Templates + + + + + Empty + + + + + Novel + + + + + Novella + + + + + Short Story + + + + + Research paper + + + + + Demo projects + + + + + Add level + + + + + Add word count + + + + + Next time, automatically open last project + + + + + Open... + + + + + Recent + + + + + Create + + + + + 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 + + + + + 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.qm b/i18n/manuskript_ru.qm index 954cde8..1e024f8 100644 Binary files a/i18n/manuskript_ru.qm and b/i18n/manuskript_ru.qm differ diff --git a/i18n/manuskript_ru.ts b/i18n/manuskript_ru.ts index 4b1cd48..78fa9af 100644 --- a/i18n/manuskript_ru.ts +++ b/i18n/manuskript_ru.ts @@ -1,241 +1,17 @@ - - - Export - - - Basic HTML output using the Python module 'markdown'. - Простая HTML разметка с использованием python модуля 'markdown'. - - - - Python module 'markdown'. - python модуль 'markdown'. - - - - Markdown source - Markdown исходный код - - - - HTML Source - HTML исходный текст - - - - HTML Output - HTML результат - - - - Default exporter, provides basic formats used by other exporters. - Экспортер по умолчанию, предоставляет основные форматы, используемые другими экспортерами. - - - - Preview with highlighter. - Предварительный просмотр с highlighter. - - - - Plain text - Обычный текст - - - - Chose output file... - Выбрать файл на выход... - - - - A little known format modestly used. You know, web sites for example. - Мало известный формат, практически не используется. Вы знаете, для веб-сайтов на пример. - - - - Needs LaTeX to be installed. - Необходим установленный редактор 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: - Междустрочный интервал: - - - - Books that don't kill trees. - Книги, которые не убивают деревья. - - - - OpenDocument format. Used by LibreOffice for example. - Это Формат OpenDocument. Открывается с помощью LibreOffice. - - - - Microsoft Office (.docx) document. - Документ Microsoft Office (.docx). - - - - reStructuredText is a lightweight markup language. - reStructuredText — это легкий язык разметки... - - - - Just like plain text, excepts adds markdown titles. - Presupposes that texts are formatted in markdown. - Как обычный текст, за исключением markdown заголовков. - Предполагается, что тексты форматируются в 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> - - <p>Универсальный конвертер документов. Может использоваться для преобразования markdown в широкий - диапазон других форматов.</p> - <p>Вебсайт: <a href="http://www.pandoc.org">http://pandoc.org/</a></p> - - - - - 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. - действующая установка latex. См. рекомендации pandoc на: - <a href="http://pandoc.org/installing.html">http://pandoc.org/installing.html</a>. Если вам нужна поддержка юникода, вам необходим xelatex. - - - - Export to markdown, using pandoc. Allows more formatting options - than the basic manuskript exporter. - Экспорт в markdown, используя pandoc. Имеет больше настроек форматирования, - чем экспортер manuskript. - - - - LaTeX is a word processor and document markup language used to create - beautiful documents. - Latex это текстовый процессор и язык разметки документов, используемый для создания - красивых документов. - - - - The purpose of this format is to provide a way to exchange information - between outliners and Internet services that can be browsed or controlled - through an outliner. - Цель этого формата-обеспечить возможность обмена информацией - между планировщиком и интернет-сервисами, которые можно просматривать - или контролировать через планировщик. - - - - Disable YAML metadata block. -Use that if you get YAML related error. - Отключить блок метаданных YAML. -Используйте это, если получаете ошибки связанные с YAML. - - - - Convert to ePUB3 - Преобразовать в формат ePUB3 - - + + ExportersManager Manage Exporters - Управление экспортерами + Выбор формата Manuskript - Манускрипт + Manuskript @@ -283,12 +59,12 @@ Use that if you get YAML related error. Frequency Analyzer - Анализатор частых повторений + Подсчет повторов Word frequency - Частота слов + Повторы слов @@ -298,22 +74,22 @@ Use that if you get YAML related error. Minimum size: - Минимальный размер: + Минимальное количество: Exclude words (comma separated): - Исключить слова (через запятую): + Не учитывать слова (через запятую): Analyze - Анализировать + Подсчитать Phrase frequency - Частота фраз + Повторы словосочетаний @@ -326,150 +102,10 @@ 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; - <b>Информация:</b> Очень простой - парсер, который пройдет по документу markdown и - создаст элементы для каждого заголовка.<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) - are added as scene.</p> - <p>Only text files are supported (not images, binary or others).</p> - <p><b>Информация:</b> Импортирует всю структуру каталогов. - Папки добавляются в виде папок, и текстовые документы в них - (вы решили, какие из них по расширению) - добавляются в качестве сцены.</p> - <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 - then it will be imported in manuskript. One or the other - might give better result depending on your document. - <br/>&nbsp; - <b>Информация:</b> Manuskript может - импортировать из <b>markdown</b> или <b>OPML</b>. Pandoc - может преобразовать ваш документ в любой из них (см. ниже), - и тогда он будет импортирован в manuskript. Один или другой - могут дать лучший результат, в зависимости от вашего документа. - <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> - <b>none</b>: no line wrap.<br> - <b>preserve</b>: tries to preserves line wrap from the - original document.</p> - <p>Следует ли pandoc создать - косметические / не семантической разрывы?</p><p> - <b>авто</b>: разрывает на 72 символе.<br> - <b>нет</b>: без переноса строки.<br> - <b>сохранить</b>: старается сохранить разрывы строк из - исходного документа.</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 - Без имени - - MDEditCompleter - + Insert reference Вставить ссылку @@ -477,968 +113,1111 @@ Use that if you get YAML related error. MainWindow - + General - Основные + Основное - + Title - Заголовок + Название - + Subtitle Подзаголовок - + Series - + Серия - + Volume - Объем + Том - + Genre Жанр - + License Лицензия - + Author Автор - + Name Имя - + Email - адрес 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...? - Что если...? + Далее + What if...? + Что, если?.. + + + Characters - Персонаж + Персонажи - + Names - Имя + Имена - + 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">Описание на<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> + <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 - Пои&ск + Пам&ятка + 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 - &Анализатор частоты повторений + П&одсчет повторов - + Book information - Информация о книге + Сведения о книге - + &About &О программе - + 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 - Словарь + Ор&фография - - Install PyEnchant to use spellcheck - Установите PyEnchant для проверки орфографии - - - + Nothing - Ничего + Нет - + POV - Точка зрения + От лица - + Label Метка - + Progress Прогресс - + Compile - Собрать + Экспорт - + Icon color - Цвет иконки + Цвет значка - + Text color Цвет текста - + Background color Цвет фона - + Icon - Иконка + Значок - + Text Текст - + Background Фон - + Border Граница - + Corner Угол - + Add plot step - Добавить шаги сюжета (CTRL+Enter) - - - - &Import… - + Добавить шаг - + + &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 - + &Уровень 1 (setext) - Level &4 - + Ctrl+Alt+1 + Ctrl+Alt+1 - - Ctrl+4 - + + Level &2 + Уровень &2 - Level &5 - + Ctrl+Alt+2 + Ctrl+Alt+2 - - Ctrl+5 - + + Level &1 (atx) + Уровень &1 (#) - Level &6 - + Ctrl+1 + Ctrl+1 - - Ctrl+6 - + + L&evel 2 + У&ровень 2 - - &Bold - + + Ctrl+2 + Ctrl+2 - - Ctrl+B - + + Level &3 + Уровень &3 + + + + Ctrl+3 + Ctrl+3 + + + + Level &4 + Уровень &4 - &Italic - + Ctrl+4 + Ctrl+4 - - Ctrl+I - + + Level &5 + Уровень &5 - - &Strike - + + Ctrl+5 + Ctrl+5 - - &Verbatim - + + Level &6 + Уровень &6 - - Su&perscript - + + Ctrl+6 + Ctrl+6 + &Bold + &Жирный + + + + Ctrl+B + Ctrl+B + + + + &Italic + &Курсив + + + + Ctrl+I + Ctrl+I + + + + &Strike + &Зачеркнутый + + + + &Verbatim + &Цитата + + + + Su&perscript + Надст&рочный + + + Ctrl++ - + Ctrl++ - + Subsc&ript - + По&дстрочный - + Ctrl+- - - - - - Co&mment block - - - - - Ctrl+Shift+C - - - - - Clear &formats - - - - - Ctrl+0 - - - - - &Comment line(s) - - - - - &Ordered list - + 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 / 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 + Ctrl+F + + + + &Technical Support + &Поддержка + + + + How to obtain technical support for Manuskript. + Как получить техническую поддержку для Manuskript. + + + + F1 + F1 + + + + &Locate log file... + &Найти лог-файл... + + + + Locate log file + Найти лог-файл + + + + Locate the diagnostic log file used for this session. + Найти лог-файл для текущей сессии. + + + + Shift+F1 + 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. + Запись лог-файла "{}" будет продолжена до выхода из Manuskript. + + + + It will now be displayed in your file manager, but is of limited use until you close Manuskript. + Он будет показан в файловом менеджере, но работа с ним будет ограничена, пока вы не выйдете из Manuskript. + + + + Error! + Ошибка! + + + + An error was encountered while trying to show the log file below in your file manager. + Возникла ошибка при показе лог-файла, показанного ниже, в файловом менеджере. + + + + F3 + F3 + + + + Shift+F3 + Shift+F3 + + + + Situation + Ситуация + + + + Status + Статус + + + + Search + + + No results found + Ничего не найдено @@ -1454,27 +1233,27 @@ Use that if you get YAML related error. Основные - + Revisions - Вариант + Версии Views - Просмотры + Отображение - + Labels - Меток + Пометки - + Status Статус - + Fullscreen Полный экран @@ -1486,655 +1265,712 @@ Use that if you get YAML related error. Application settings - Вид программы + Настройки приложения - + Loading Загрузка - + Automatically load last project on startup - Автоматическая загрузка последнего проекта при старте + Загружать последний проект при запуске - + Saving Сохранение - + Automatically save every - Автоматически всё сохраняет + Автосохранение каждые - + minutes. - минуты. + минут(ы). - + If no changes during - Если никаких изменений в течении + При отсутствии изменений в течение - + seconds. - секунды. + секунд. - - Save on quit - Записать и выйти + + Save on project close + Сохранять проект при закрытии - - <html><head/><body><p>If you check this option, your project will be save as one single file. Easier to copy or backup, but does not allow collaborative editing, or versionning.<br/>If this is unchecked, your project will be save as a folder containing many small files.</p></body></html> - <html><head/><body><p>Если вы включите эту опцию, ваш проект будет сохранён в один единый файл. Проще для копирования или резервного сохранения, но не допускает совместного редактирования или управления версиями.<br/>если эта опция отключена, ваш проект будет сохранён как папка, содержащая несколько файлов.</p></body></html> + + <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 минут + изменений в минуту за последние 10 минут - + revisions per hour for the last day - Варианты за час за последний день + изменений в час за последний день - + revisions per 10 minutes for the last hour - Варианты за 10 минут за последний час + изменений в 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 линии + 1.5 пункта - + Double Двойной - + Proportional Пропорциональный - + % - + Tab width: - Ширина вкладок: + Ширина вкладки: - + px - пиксель + пикселей - + Indent 1st line - Отступ 1-й линии + Отступ 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: - Размер шрифта: + Размер шрифта: - - You might need to restart manuskript in order for those settings to take effect properly and entirely. - + + 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> + <p><b>Функция записи изменений вызывала много проблем. В этой версии Manuskript она была отключена по умолчанию для новых проектов, чтобы обеспечить лучший функционал.</b></p><p>Почему эти проблемы еще не устранены? <a href="https://www.theologeek.ch/manuskript/contribute/">Нам нужна ваша помощь, чтобы сделать программу лучше!</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 + &Вариант исправления @@ -2142,12 +1978,12 @@ Use that if you get YAML related error. About Manuskript - О Манускрипт + О программе Manuskript - Манускрипт + Manuskript @@ -2160,60 +1996,47 @@ Use that if you get YAML related error. Software Versions in Use: - Используемые версии программного обеспечения: + Используемые версии программ: abstractModel - + Title Заголовок - + POV - Точка зрения + От лица - + Label Метка - + Status Статус - + Compile - Сборка + Экспорт - + Word count Количество слов - + Goal Цель - - app - - - Loaded translation: {}. - Загружен перевод: {}. - - - - Note: No translator found or loaded for locale {}. - Примечание: переводчик не найден или не загружен для языка {}. - - basicItemView @@ -2224,7 +2047,7 @@ Use that if you get YAML related error. POV: - Точка зрения: + От лица: @@ -2244,43 +2067,48 @@ Use that if you get YAML related error. Few sentences summary: - Описание в несколько предложений: + Описание из нескольких предложений: characterModel - - New character - Новый персонаж - - - + Name Имя - + Value Значение + + + New character + + + + + Description + Описание + characterTreeView - + Main - Главная + Главные - + Secondary - Вторичный + Второго плана - + Minor - Незначительный + Эпизодические @@ -2293,12 +2121,12 @@ Use that if you get YAML related error. Filter (type the name of anything in your project) - Фильтр (введите название чего-либо в вашем проекте) + Фильтр (введите название чего-либо в проекте) Minor - Незначительный + Эпизодический @@ -2308,7 +2136,7 @@ Use that if you get YAML related error. Main - Главная + Главный @@ -2323,12 +2151,12 @@ Use that if you get YAML related error. Plots - Сюжеты + Сюжетные линии World - Мир + Вселенная @@ -2336,22 +2164,22 @@ Use that if you get YAML related error. None - + Нет Main - Главная + Главный Secondary - Вторичный + Второго плана Minor - Незначительный + Эпизодический @@ -2380,7 +2208,7 @@ Use that if you get YAML related error. Dock Widgets Toolbar - Панель инструментов Dock Widgets + Панель Dock Widgets @@ -2394,14 +2222,14 @@ Use that if you get YAML related error. corkDelegate - + One line summary Описание одной строкой - + Full summary - Полное резюме + Полное описание @@ -2427,12 +2255,12 @@ Use that if you get YAML related error. Manage exporters - Управление экспортерами + Выбор формата Preview - Предварительный просмотр + Просмотр @@ -2463,7 +2291,7 @@ Use that if you get YAML related error. Decide here what will be included in the final export. - Решите здесь, что будет включено в окончательный экспорт. + Определите, что будет включено в окончательный файл. @@ -2483,32 +2311,32 @@ Use that if you get YAML related error. I need more granularity - Мне нужно более детализации + Нужно больше детализации Fi&lters - Фи&льтры + Фи&льтр <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>Фильтры, какие элементы будут включены в окончательный экспорт.<br/><span style=" color:#773333;">(не полностью реализована.)</span></p></body></html> + <html><head/><body><p>Определяет, какие элементы будут включены в окончательный экспорт.<br/><span style=" color:#773333;">(Реализовано не полностью.)</span></p></body></html> Ignore compile status (include all items) - Игнорировать статус сборки (включая все элементы) + Игнорировать статус экспорта (для всех элементов) Subitems of: - Подэлементы: + Дочерние элементы: Labels - Метки + Пометки @@ -2518,7 +2346,7 @@ Use that if you get YAML related error. Separations - Цветоделение + Разделители @@ -2533,7 +2361,7 @@ Use that if you get YAML related error. Custom - Пользовательские + Указать @@ -2543,12 +2371,12 @@ Use that if you get YAML related error. Between folder and text: - Между папками и текстом: + Между папкой и текстом: Between text and folder: - Между текстом и папками: + Между текстом и папкой: @@ -2558,32 +2386,32 @@ Use that if you get YAML related error. Typographic replacements: - Типографические замены: + Замены знаков препинания: Replace double quotes (") with: - Заменить двойные кавычки (") с: + Заменить двойные кавычки (") на: Replace single quotes (') with: - Заменить одинарные кавычки (') с: + Заменить одинарные кавычки (') на: Remove multiple spaces - Удалить повторяющиеся пробелы + Удалить двойные пробелы Custom replacements: - Пользовательские замены: + Заменить также: Enabled - Включено + Вкл. @@ -2593,17 +2421,17 @@ Use that if you get YAML related error. With - С + ...на RegExp - Регулярное выражение + Шаблон If checked, uses regular expression for replacement. If unchecked, replaced as plain text. - Если этот флажок установлен, использует регулярное выражение для замены. Если флажок снят, будет заменен как обычный текст. + Если выбрано, для замены используется регулярное выражение. Если не выбрано, будет заменено как обычный текст. @@ -2633,19 +2461,19 @@ Use that if you get YAML related error. {}Level {} folder - {}Уровень {} папка + {}Уровень {} папки {}Level {} text - {}Уровень {} текст + {}Уровень {} текста - + Replace ... with … Заменить ... на … - + Replace --- with — Заменить --- на — @@ -2671,12 +2499,12 @@ Use that if you get YAML related error. {} not found. Install it, or set path manually. - {} не найден. Установить его, или задать путь вручную. + {} не найден. Установите его или укажите путь вручную. <b>Status:</b> uninstalled. - <b>Статус:</b> удалены. + <b>Статус:</b> удален. @@ -2686,7 +2514,7 @@ Use that if you get YAML related error. Set {} executable path. - Установить {} путь к исполняемому файлу. + Указать {} путь к исполняемому файлу. @@ -2694,12 +2522,12 @@ Use that if you get YAML related error. Phrases - Фразы + Словосочетание Frequency - Частота + Количество @@ -2710,19 +2538,74 @@ 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 + Часы: показать секунды @@ -2735,7 +2618,7 @@ Use that if you get YAML related error. Split scenes at: - Разделение сцены на: + Разделять действия по: @@ -2750,7 +2633,7 @@ Use that if you get YAML related error. Import under: - Импорт по: + Импортировать до: @@ -2763,7 +2646,7 @@ Use that if you get YAML related error. If you don't wanna see me, you can hide me in Help menu. - Если Вы не хотите меня видеть, вы можете меня спрятать в меню Помощь. + Если вы не хотите меня видеть, то можете отключить в меню Помощь. @@ -2780,8 +2663,8 @@ Use that if you get YAML related error. - Chose file - Выберите файл + Choose file + Выбрать файл @@ -2791,7 +2674,7 @@ Use that if you get YAML related error. Preview - Предварительный просмотр + Просмотр @@ -2802,9 +2685,9 @@ Use that if you get YAML related error. lineEditView - + Various - Различные + Разное @@ -2822,27 +2705,27 @@ Use that if you get YAML related error. Word target - Целевые слова + Цель, слов Time target - Целевые слова + Цель, время words - слова + слов minutes - минуты + минут Lock ! - Заблокировано ! + Заблокировано! @@ -2867,12 +2750,12 @@ Use that if you get YAML related error. {} remaining - {} оставшиеся + {} осталось {} words remaining - {} слова оставшиеся + {} слов осталось @@ -2890,12 +2773,12 @@ Use that if you get YAML related error. Index cards - Карточки индекса + Карточки Outline - Контур + Схема @@ -2913,25 +2796,40 @@ Use that if you get YAML related error. - + Root - Корневой + Верхний уровень - - {} words / {} - {} слова / {} - - - + {} words - {} слова + {} слов + + + + ({} chars) {} words / {} + ({} символов) {} слов / {} + + + + {} words / {} + {} слов / {} + + + + {} chars + {} символов + + + + {} chars + {} символов markdownSettings - + Markdown @@ -2951,7 +2849,7 @@ Use that if you get YAML related error. Summary - Сводка + Описание @@ -2961,7 +2859,7 @@ Use that if you get YAML related error. Full summary - Полное резюме + Полное описание @@ -2977,184 +2875,48 @@ Use that if you get YAML related error. myPanel - + Auto-hide Автоматически скрывать - - outlineBasics - - - Set POV - Установить точку зрения - - - - None - Пусто - - - - Set Status - Установить статус - - - - Set Label - Установить метку - - - - New - Новый - - - - Main - Главная - - - - Secondary - Вторичный - - - - Minor - Незначительный - - - - Set Custom Icon - Установить Пользовательскую Иконку - - - - Restore to default - Восстановить значения по умолчанию - - - - Root - Корневой - - - - Open {} items in new tabs - Открыть {} элементы в новых вкладках - - - - Open {} in a new tab - Открыть {} в новой вкладке - - - - About to remove - Удаление - - - - <p><b>You're about to delete {} item(s).</b></p><p>Are you sure?</p> - <p><b>Вы собираетесь удалить {} элемент(ы).</b></p><p>Вы уверены?</p> - - - - Select at least two items. Folders are ignored. - Выберите по крайней мере два элемента. Папки игнорируются. - - - - All items must be on the same level (share the same parent). - Все предметы должны быть на том же уровне (иметь одного родителя). - - - - New &Folder - Новые &Папки - - - - New &Text - Новый &Текст - - - - &Copy - &Копировать - - - - C&ut - В&ырезать - - - - &Paste - &Вставить - - - - &Rename - &Переименовать - - - - &Delete - &Удалить - - outlineCharacterDelegate None - Пусто + Нет Main - Главная + Главный Secondary - Вторичный + Второго плана Minor - Незначительный - - - - outlineItem - - - {} words / {} ({}) - {} слова / {} ({}) - - - - {} words - {} слова + Эпизодический pandocSettings - + General - Основные + Основной - + Table of Content Содержание - + Custom settings for {} Пользовательские настройки для {} @@ -3164,17 +2926,17 @@ Use that if you get YAML related error. Main - Главная + Главный Secondary - Вторичная + Второстепенный Minors - Второстепенный + Эпизодические @@ -3182,12 +2944,12 @@ Use that if you get YAML related error. General - Основные + Основной Promise - Обещание + Назначение @@ -3207,22 +2969,22 @@ Use that if you get YAML related error. Try / Fail - Попытка / Неудача + Попытка/неудача No and - Нет и + "Нет, и" Yes but - Да, но + "Да, но" Freytag's pyramid - Freytag's пирамида + Пятиактная структура @@ -3232,7 +2994,7 @@ Use that if you get YAML related error. Rising action - Набирающее популярность + Развитие @@ -3242,22 +3004,22 @@ Use that if you get YAML related error. Falling action - Падение + Спад действия Three acts - Три акта + Трехактная структура 1. Setup - 1. Установки + 1. Завязка 1. Inciting event - Пересечение порога + 1. Пробуждающее событие @@ -3272,7 +3034,7 @@ Use that if you get YAML related error. 2. Reversal - 2. Разворот + 2. Центральный поворот @@ -3282,7 +3044,7 @@ Use that if you get YAML related error. 3. Stand up - 3. Вставать + 3. Преодоление @@ -3292,7 +3054,7 @@ Use that if you get YAML related error. 3. Ending - 3. Концовка + 3. Развязка @@ -3322,17 +3084,17 @@ Use that if you get YAML related error. Tests - Тесты + Испытания Approach - Подход + Приближение Abyss - Бездна + Падение @@ -3352,66 +3114,66 @@ Use that if you get YAML related error. Return - Возврат + Возвращение plotModel - - New plot - Новый сюжет - - - + Name Имя - + Meta - + Мета - + New step Новый шаг - + Main Главная - + Secondary - Вторичный + Вторичная - + Minor - Незначительный + Эпизод + + + + New plot + plotTreeView - + Main - Главная + Главные - + Secondary - Вторичный + Вторичные - + Minor - Незначительный + Эпизоды - + **Plot:** {} **Сюжет:** {} @@ -3426,12 +3188,12 @@ Use that if you get YAML related error. Secondary - Вторичный + Вторичная Minors - Второстепенный + Эпизоды @@ -3444,7 +3206,7 @@ Use that if you get YAML related error. POV - Точка зрения + От лица @@ -3459,7 +3221,7 @@ Use that if you get YAML related error. Compile - Сборка + Экспорт @@ -3472,169 +3234,6 @@ Use that if you get YAML related error. Количество слов - - references - - - Not a reference: {}. - Не является ссылкой: {}. - - - - Unknown reference: {}. - Неизвестная ссылка: {}. - - - - Path: - Путь: - - - - Stats: - Статистика: - - - - POV: - Точка зрения: - - - - Status: - Статус: - - - - Label: - Метка: - - - - Short summary: - Короткое резюме: - - - - Long summary: - Длинное резюме: - - - - Notes: - Примечания: - - - - Basic info - Основная информация - - - - Detailed info - Подробная информация - - - - POV of: - Точки зрения: - - - - 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: - Ссылка в: - - - - Motivation - Мотивация - - - - Goal - Цель - - - - Epiphany - Прозрение - - - - Short summary - Короткое резюме - - - - Longer summary - Большое резюме - - revisions @@ -3648,12 +3247,12 @@ Use that if you get YAML related error. Параметры - + Restore Востановить - + Delete Удалить @@ -3665,7 +3264,7 @@ Use that if you get YAML related error. Show ancient version - Показать древнюю версию + Показать старую версию @@ -3713,12 +3312,12 @@ Use that if you get YAML related error. {} секунд назад - + Line {}: Строка {}: - + Clear all Очистить все @@ -3733,90 +3332,62 @@ 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: +{} + Невозможно добавить изображение: +{} @@ -3829,22 +3400,22 @@ Use that if you get YAML related error. TextLabel - Текстовая Метка + Текстовая метка Minor - Незначительный + Эпизодический Secondary - Вторичный + Второго плана Main - Главная + Главный @@ -3866,25 +3437,26 @@ Use that if you get YAML related error. <p><b>Mark:</b></p> - - <p>разделить выбранный элемент(ы) по данной метке.</p> + + <p>Разделить выбранные элементы по указанной отметке.</p> - <p>Если один из выбранных элементов папка, она будет применяться последовательно <i>все</i> у дочерних элементов.</p> + <p>Если выбрана также папка, изменения будет применены + последовательно <i>ко всем</i> ее дочерним элементам.</p> - <p>Знак разделения может содержать следующие управляющие последовательности: + <p>Отметка может содержать следующие управляющие последовательности: <ul> - <li><b><code>\n</code></b>: линия разрыва</li> + <li><b><code>\n</code></b>: разрыв строки</li> <li><b><code>\t</code></b>: табуляция</li> </ul> </p> - <p><b>Знак:</b></p> + <p><b>Отметка:</b></p> Split '{}' - Разделить '{}' + Разделить '{}' @@ -3902,33 +3474,33 @@ Use that if you get YAML related error. Show Plots - Показать Сюжеты + Показать сюжетные линии Show Characters - Показать Персонажи + Показать персонажей tabSplitter - + Open selected items in that view. - Открыть выбранные элементы в этом виде. + Открыть выбранные элементы в этом отображении. - + Split horizontally - Отразить по горизонтали + Разделить по горизонтали - + Close split - Закрыть разделение + Объединить - + Split vertically Разделить по вертикали @@ -4032,32 +3604,32 @@ Use that if you get YAML related error. Empty - Пустые + Пустой - + Novel Роман - + Novella Повесть - + Short Story - Короткий рассказ + Рассказ - + Research paper Научная статья - + Demo projects - Демонстрационные проекты + Демо-проекты @@ -4067,12 +3639,12 @@ Use that if you get YAML related error. Add word count - Добавить счетчик слов + Добавить количество слов Next time, automatically open last project - В следующий раз, автоматически открывать последний проект + При запуске открывать последний проект @@ -4090,147 +3662,147 @@ Use that if you get YAML related error. Создать - + Open project Открыть проект - + Manuskript project (*.msk);;All files (*) - Манускрипт проект (*.msk);;Все файлы (*) + Проект Manuskript (*.msk);;Все файлы (*) - + Save project as... Сохранить проект как... - + Manuskript project (*.msk) - Манускрипт проект (*.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> {} слова (~ {} страниц) + <b>Всего:</b> {} слов (~ {} страниц) - + Fiction - Художественная литература + Художественный - + Non-fiction - Научно-популярные + Обычный - + Idea Идея - + Note Заметка - + Research - Исследования + Исследование - + TODO Список дел - + First draft Первый черновик - + Second draft Второй черновик - + Final Окончательный @@ -4238,214 +3810,214 @@ 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.qm b/i18n/manuskript_sv.qm index 5beeb52..dbebf19 100644 Binary files a/i18n/manuskript_sv.qm and b/i18n/manuskript_sv.qm differ diff --git a/i18n/manuskript_sv.ts b/i18n/manuskript_sv.ts index c88c597..339e1cb 100644 --- a/i18n/manuskript_sv.ts +++ b/i18n/manuskript_sv.ts @@ -1,229 +1,6 @@ - - - Export - - - Default exporter, provides basic formats used by other exporters. - Standardexportör. Erbjuder grundläggande format som andra exportörer använder. - - - - Basic HTML output using the Python module 'markdown'. - Grundläggande HTML-export via python-modulen 'markdown'. - - - - Python module 'markdown'. - python-modulen 'markdown'. - - - - Markdown source - Markdown-källkod - - - - HTML Source - HTML-källkod - - - - HTML Output - HTML-utdata - - - - Just like plain text, excepts adds markdown titles. - Presupposes that texts are formatted in markdown. - Ren text med markdown-titlar - Förutsätter att texterna har formaterats i markdown. - - - - Preview with highlighter. - 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 - inte förstås av Manuskript, t.ex. <a href='www.fountain.io'>Fountain</a>. - - - - Chose output file... - Välj utdata-fil... - - - - A little known format modestly used. You know, web sites for example. - 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> - - <p>Universellt konverteringsverktyg för dokument. Kan användas för att konvertera markdown till många olika - format.</p> - <p>Websida: <a href="http://www.pandoc.org">http://pandoc.org/</a></p> - - - - - Error - Fel - - - - Books that don't kill trees. - Böcker som inte mördar träd. - - - - OpenDocument format. Used by LibreOffice for example. - OpenDocument-format. Används t.ex. av LibreOffice. - - - - Microsoft Office (.docx) document. - Microsoft Office (.docx)-dokument. - - - - Needs LaTeX to be installed. - Kräver att LaTex är installerat. - - - - 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. - en giltig LaTex-installation. Se vad pandoc rekommenderar på: - <a href="http://pandoc.org/installing.html">http://pandoc.org/installing.html</a>. Vill du ha stöd för unicode behöver du xelatex. - - - - Export to markdown, using pandoc. Allows more formatting options - than the basic manuskript exporter. - Exportera till markdown via pandoc. Ger stöd för fler formateringsmöjligheter - jämfört med den grundläggande Manuskript-exportören. - - - - reStructuredText is a lightweight markup language. - reStructuredText är ett lättvikts-markupspråk... - - - - LaTeX is a word processor and document markup language used to create - beautiful documents. - LaTeX är ett markupspråk för ordbehandlare och dokument som används för att skapa - vackra dokument. - - - - The purpose of this format is to provide a way to exchange information - between outliners and Internet services that can be browsed or controlled - through an outliner. - Detta format erbjuder en metod för informationsutbyte mellan outliners och internettjänster som - 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 - - + + ExportersManager @@ -325,150 +102,10 @@ Använd detta om du får ett felmeddelande angående YAML. till - - 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; - <b>Info:</b> En väldigt enkel - tolk som kommer att gå genom ett Markdown-dokument - 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) - are added as scene.</p> - <p>Only text files are supported (not images, binary or others).</p> - <p><b>Info:</b> Importerar en hel - katalogstruktur. Mappar läggs till som mappar, och - vanliga textdokument inuti (du väljer vilka efter filändelse) - läggs till som scener.</p> - <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 - 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 kan - importera från <b>markdown</b> eller <b>OPML</b>. Pandoc kommer att - konvertera ditt dokument till endera (se alterntiv nedan), och - sedan kommer det att importeras i manuskript. Endera kan ge - bättre resultat beroende på ditt dokument. - <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> - <b>none</b>: no line wrap.<br> - <b>preserve</b>: tries to preserves line wrap from the - original document.</p> - <p>Ska pandoc skapa - kosmetiska / icke-semantiska radbrytningar?</p><p> - <b>auto</b>: radbryter efter 72 tecken.<br> - <b>none</b>: inga radbrytningar.<br> - <b>preserve</b>: försöker att bevara radbrytningar från - 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 - - MDEditCompleter - + Insert reference Infoga referens @@ -476,969 +113,1112 @@ Använd detta om du får ett felmeddelande angående YAML. MainWindow - + General Allmänt - + Book information Information om boken - + Title Titel - + Subtitle Undertitel - + Series Serie - + Volume Volym - + Genre Genre - + License Licens - + Author Författare - + Name Namn - + Email - E-mail + E-post - + Summary Sammanfattning - + Situation: Situation: - + Summary: Sammanfattning: - + One sentence En mening - + One paragraph Ett stycke - + One page En sida - + Full Full - + One sentence summary Sammanfattning i en mening - + One paragraph summary Sammanfattning i ett stycke - + Expand each sentence of your one paragraph summary to a paragraph Utvidga varje mening till ett stycke - + One page summary Sammanfattning på en sida - + Full summary Full sammanfattning - + Next Nästa - + What if...? Tänk om...? - + Characters Karaktärer - + Names 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. + * {} hittades inte i projektfilen. - + 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) + 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 - - Install PyEnchant to use spellcheck - Installera PyEnchant för stavningskontroll - - - + 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 - + &Formatera - + &Header - + &Huvud - + &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 - + &Nivå 1 (setext) - Level &4 - + Ctrl+Alt+1 + Ctrl+Alt+1 - - Ctrl+4 - + + Level &2 + Nivå &2 - Level &5 - + Ctrl+Alt+2 + Ctrl+Alt+2 - - Ctrl+5 - + + Level &1 (atx) + Nivå &1 (atx) - Level &6 - + Ctrl+1 + Ctrl+1 - - Ctrl+6 - + + L&evel 2 + N&ivå 2 - - &Bold - + + Ctrl+2 + Ctrl+2 - - Ctrl+B - + + Level &3 + Nivå &3 + + + + Ctrl+3 + Ctrl+3 + + + + Level &4 + Nivå &4 - &Italic - + Ctrl+4 + Ctrl+4 - - Ctrl+I - + + Level &5 + Nivå &5 - - &Strike - + + Ctrl+5 + Ctrl+5 - - &Verbatim - + + Level &6 + Nivå &6 - - Su&perscript - + + Ctrl+6 + Ctrl+6 + &Bold + &Fet + + + + Ctrl+B + Ctrl+B + + + + &Italic + &Kursiv + + + + Ctrl+I + Ctrl+I + + + + &Strike + &Genomstruken + + + + &Verbatim + &Ordagrann + + + + Su&perscript + Su&perskript + + + Ctrl++ - + Ctrl++ - + Subsc&ript - + Undersk&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 + + + + + &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. + + + + + F3 + F3 + + + + Shift+F3 + + + + + Situation + + + + + Status + Status + + + + Search + + + No results found + + Settings @@ -1453,7 +1233,7 @@ Använd detta om du får ett felmeddelande angående YAML. Allmänt - + Revisions Ändringshistorik @@ -1463,17 +1243,17 @@ Använd detta om du får ett felmeddelande angående YAML. Visningar - + Labels Etiketter - + Status Status - + Fullscreen Fullskärm @@ -1488,653 +1268,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 quit - Spara vid avslut + + Save on project close + Spara vid avslut - - <html><head/><body><p>If you check this option, your project will be save as one single file. Easier to copy or backup, but does not allow collaborative editing, or versionning.<br/>If this is unchecked, your project will be save 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> + + <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: - - You might need to restart manuskript in order for those settings to take effect properly and entirely. + + 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 @@ -2165,54 +2001,41 @@ 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 - - app - - - Loaded translation: {}. - Laddade översättning: {}. - - - - Note: No translator found or loaded for locale {}. - OBS: Ingen översättning hittades eller laddades för språk {}. - - basicItemView @@ -2249,35 +2072,40 @@ Använd detta om du får ett felmeddelande angående YAML. characterModel - - New character - Ny karaktär - - - + Name Namn - + Value Värde + + + New character + + + + + Description + Beskrivning + characterTreeView - + Main Huvudkaraktär - + Secondary Bikaraktär - + Minor Statist @@ -2393,12 +2221,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 @@ -2562,12 +2390,12 @@ Använd detta om du får ett felmeddelande angående YAML. Replace ... with … - Ersätt ... med … + Ersätt ... med … Replace --- with — - Ersätt --- med — + Ersätt --- med — @@ -2577,7 +2405,7 @@ Använd detta om du får ett felmeddelande angående YAML. Replace single quotes (') with: - Ersätt enkla citattecken (') med: + Ersätt enkla citattecken (') med: @@ -2709,20 +2537,75 @@ 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 + + generalSettings @@ -2779,8 +2662,8 @@ Använd detta om du får ett felmeddelande angående YAML. - Chose file - Välj fil + Choose file + Välj fil @@ -2801,7 +2684,7 @@ Använd detta om du får ett felmeddelande angående YAML. lineEditView - + Various Diverse @@ -2912,25 +2795,40 @@ Använd detta om du får ett felmeddelande angående YAML. F11 - + Root Rot - - {} words / {} - {} ord / {} - - - + {} words {} ord + + + ({} chars) {} words / {} + + + + + {} words / {} + + + + + {} chars + + + + + {} chars + + markdownSettings - + Markdown Markdown @@ -2976,134 +2874,11 @@ Använd detta om du får ett felmeddelande angående YAML. myPanel - + Auto-hide Göm automatiskt - - outlineBasics - - - Set POV - Ange Synvinkel - - - - None - Ingen - - - - Main - Huvudkaraktär - - - - Secondary - Bikaraktär - - - - Minor - Statist - - - - Set Status - Ange Status - - - - Set Label - Ange Etikett - - - - New - Ny - - - - Set Custom Icon - Välj Anpassad Ikon - - - - Restore to default - Återställ till standard - - - - Root - Rot - - - - Open {} items in new tabs - Öppna {} objekt i nya flikar - - - - Open {} in a new tab - Öppna {} i en ny flik - - - - About to remove - Håller på att ta bort - - - - <p><b>You're about to delete {} item(s).</b></p><p>Are you sure?</p> - <p><b>Du håller på att ta bort {} objekt.</b></p><p>Är du säker?</p> - - - - Select at least two items. Folders are ignored. - Välj åtminstone två objekt. Mappar hoppas över. - - - - All items must be on the same level (share the same parent). - Alla objekt måste vara på samma nivå (dela samma förälder). - - - - New &Folder - Ny &mapp - - - - New &Text - Ny &text - - - - &Copy - &Kopiera - - - - C&ut - Klipp &ut - - - - &Paste - &Klistra in - - - - &Rename - &Byt namn - - - - &Delete - &Ta bort - - outlineCharacterDelegate @@ -3127,33 +2902,20 @@ Använd detta om du får ett felmeddelande angående YAML. Statist - - outlineItem - - - {} words / {} ({}) - {} ord / {} ({}) - - - - {} words - {} ord - - pandocSettings - + General Allmänt - + Table of Content Innehållsförteckning - + Custom settings for {} Anpassade inställningar för {} @@ -3357,60 +3119,60 @@ 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 + + + New plot + + plotTreeView - + Main Huvudkaraktär - + Secondary Bikaraktär - + Minor Statist - + **Plot:** {} **Handling:** {} @@ -3471,169 +3233,6 @@ Använd detta om du får ett felmeddelande angående YAML. Antal ord - - 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: - - - - Basic info - Grundläggande info - - - - Detailed info - Detaljerad info - - - - POV of: - Synvinkel: - - - - Go to {}. - Gå till {}. - - - - Motivation - Motivering - - - - Goal - Mål - - - - Conflict - Konflikt - - - - Epiphany - Uppenbarelse - - - - Short summary - Kort sammanfattning - - - - Longer summary - 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: - - revisions @@ -3647,12 +3246,12 @@ Använd detta om du får ett felmeddelande angående YAML. Alternativ - + Restore Återskapa - + Delete Ta bort @@ -3712,12 +3311,12 @@ Använd detta om du får ett felmeddelande angående YAML. {} sekunder sedan - + Line {}: Rad {}: - + Clear all Rensa @@ -3734,89 +3333,60 @@ 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: +{} + + sldImportance @@ -3884,7 +3454,7 @@ Använd detta om du får ett felmeddelande angående YAML. Split '{}' - Dela '{}' + Dela '{}' @@ -3913,22 +3483,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 @@ -4035,27 +3605,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 @@ -4090,147 +3660,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 @@ -4238,212 +3808,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_ta.qm b/i18n/manuskript_ta.qm new file mode 100644 index 0000000..8142904 Binary files /dev/null and b/i18n/manuskript_ta.qm differ diff --git a/i18n/manuskript_ta.ts b/i18n/manuskript_ta.ts new file mode 100644 index 0000000..ef4f195 --- /dev/null +++ b/i18n/manuskript_ta.ts @@ -0,0 +1,4633 @@ + + + + + Export + + + Basic HTML output using the Python module 'markdown'. + + + + + Python module 'markdown'. + + + + + Markdown source + + + + + HTML Source + + + + + HTML Output + + + + + Default exporter, provides basic formats used by other exporters. + + + + + Preview with highlighter. + + + + + Plain text + + + + + A little known format modestly used. You know, web sites for example. + + + + + Needs LaTeX to be installed. + + + + + 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: + + + + + Books that don't kill trees. + + + + + OpenDocument format. Used by LibreOffice for example. + + + + + Microsoft Office (.docx) document. + + + + + reStructuredText is a lightweight markup language. + + + + + Just like plain text, excepts adds markdown titles. + Presupposes that texts are formatted 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>. + + + + + <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> + + + + + + 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. + + + + + Export to markdown, using pandoc. Allows more formatting options + than the basic manuskript exporter. + + + + + LaTeX is a word processor and document markup language used to create + beautiful documents. + + + + + The purpose of this format is to provide a way to exchange information + between outliners and Internet services that can be browsed or controlled + through an outliner. + + + + + Disable YAML metadata block. +Use that if you get YAML related error. + + + + + Convert to ePUB3 + + + + + Could not process regular expression: +{} + + + + + Choose output file… + + + + + ExportersManager + + + Manage Exporters + + + + + Manuskript + + + + + Description + + + + + Offers export to + + + + + Status + + + + + Status: + + + + + Version: + + + + + Path: + + + + + ... + + + + + {HelpText} + + + + + FrequencyAnalyzer + + + Frequency Analyzer + + + + + Word frequency + + + + + Settings + + + + + Minimum size: + + + + + Exclude words (comma separated): + + + + + Analyze + + + + + Phrase frequency + + + + + Number of words: from + + + + + to + + + + + 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) + are added as scene.</p> + <p>Only text files are supported (not images, binary or others).</p> + + + + + 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 + then it will be imported in manuskript. One or the other + might give better result depending on your document. + <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> + <b>none</b>: no line wrap.<br> + <b>preserve</b>: tries to preserves line wrap from the + original document.</p> + + + + + Mind Map Import + + + + + This does not appear to be a valid Mind Map file. + + + + + Mind Map import + + + + + Import tip as: + + + + + Untitled + + + + + MDEditCompleter + + + Insert reference + + + + + MainWindow + + + General + + + + + Title + + + + + Subtitle + + + + + Series + + + + + Volume + + + + + 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 + + + + + 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 + + + + + Book information + + + + + &About + + + + + About Manuskript + + + + + Manuskript + + + + + Project {} saved. + + + + + WARNING: Project {} not saved. + + + + + Project {} loaded. + + + + + 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 + + + + + &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. + + + + + F3 + + + + + Shift+F3 + + + + + Situation + + + + + Status + + + + + Search + + + No results found + + + + + Settings + + + Settings + + + + + General + + + + + Revisions + + + + + Views + + + + + Labels + + + + + Status + + + + + Fullscreen + + + + + General settings + + + + + Application settings + + + + + 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 + + + About Manuskript + + + + + Manuskript + + + + + aboutDialog + + + Version + + + + + Software Versions in Use: + + + + + abstractModel + + + Title + + + + + POV + + + + + Label + + + + + Status + + + + + Compile + + + + + Word count + + + + + Goal + + + + + basicItemView + + + Form + + + + + POV: + + + + + Goal: + + + + + Word count + + + + + One line summary + + + + + Few sentences summary: + + + + + characterModel + + + Name + + + + + Value + + + + + characterTreeView + + + Main + + + + + Secondary + + + + + Minor + + + + + cheatSheet + + + Form + + + + + Filter (type the name of anything in your project) + + + + + Minor + + + + + Secondary + + + + + Main + + + + + Characters + + + + + Texts + + + + + Plots + + + + + World + + + + + cmbOutlineCharacterChoser + + + None + + + + + Main + + + + + Secondary + + + + + Minor + + + + + Various + + + + + cmbOutlineLabelChoser + + + Various + + + + + cmbOutlineStatusChoser + + + Various + + + + + collapsibleDockWidgets + + + Dock Widgets Toolbar + + + + + completer + + + Form + + + + + corkDelegate + + + One line summary + + + + + Full summary + + + + + editorWidget_ui + + + Form + + + + + exporter + + + Export + + + + + Export to: + + + + + Manage exporters + + + + + Preview + + + + + Settings + + + + + exporterDialog + + + {} (not implemented yet) + + + + + exporterSettings + + + Form + + + + + Content + + + + + Decide here what will be included in the final export. + + + + + Type + + + + + Title + + + + + Text + + + + + I need more granularity + + + + + Fi&lters + + + + + <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> + + + + + Ignore compile status (include all items) + + + + + Subitems of: + + + + + Labels + + + + + Status + + + + + Separations + + + + + Between folders: + + + + + Empty line + + + + + Custom + + + + + Between texts: + + + + + Between folder and text: + + + + + Between text and folder: + + + + + Transformations + + + + + Typographic replacements: + + + + + Replace double quotes (") with: + + + + + Replace single quotes (') with: + + + + + Remove multiple spaces + + + + + Custom replacements: + + + + + Enabled + + + + + Replace + + + + + With + + + + + RegExp + + + + + If checked, uses regular expression for replacement. If unchecked, replaced as plain text. + + + + + Preview + + + + + Font + + + + + Font: + + + + + Font size: + + + + + Folder + + + + + {}Level {} folder + + + + + {}Level {} text + + + + + Replace ... with … + + + + + Replace --- with — + + + + + exportersManager + + + Installed + + + + + Custom + + + + + Not found + + + + + {} not found. Install it, or set path manually. + + + + + <b>Status:</b> uninstalled. + + + + + <b>Requires:</b> + + + + + Set {} executable path. + + + + + frequencyAnalyzer + + + Phrases + + + + + Frequency + + + + + Word + + + + + 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 + + + + + generalSettings + + + General + + + + + Split scenes at: + + + + + \n---\n + + + + + Trim long titles (> 32 chars) + + + + + Import under: + + + + + Import in a top-level folder + + + + + helpLabel + + + If you don't wanna see me, you can hide me in Help menu. + + + + + importer + + + Import + + + + + Format: + + + + + Choose file + + + + + Clear file + + + + + Preview + + + + + Settings + + + + + lineEditView + + + Various + + + + + locker + + + Form + + + + + Lock screen: + + + + + Word target + + + + + Time target + + + + + words + + + + + minutes + + + + + Lock ! + + + + + ~{} h. + + + + + ~{} mn. + + + + + {}:{} + + + + + {} s. + + + + + {} remaining + + + + + {} words remaining + + + + + mainEditor + + + Form + + + + + Text + + + + + Index cards + + + + + Outline + + + + + F11 + + + + + Go to parent item + + + + + Alt+Up + + + + + Root + + + + + {} words + + + + + ({} chars) {} words / {} + + + + + {} words / {} + + + + + {} chars + + + + + {} chars + + + + + markdownSettings + + + Markdown + + + + + metadataView + + + Form + + + + + Properties + + + + + Summary + + + + + One line summary + + + + + Full summary + + + + + Notes / References + + + + + Revisions + + + + + myPanel + + + Auto-hide + + + + + outlineBasics + + + Set POV + + + + + None + + + + + Set Status + + + + + Set Label + + + + + New + + + + + Main + + + + + Secondary + + + + + Minor + + + + + Set Custom Icon + + + + + Restore to default + + + + + Root + + + + + Open {} items in new tabs + + + + + Open {} in a new tab + + + + + 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). + + + + + New &Folder + + + + + New &Text + + + + + &Copy + + + + + C&ut + + + + + &Paste + + + + + &Rename + + + + + &Delete + + + + + outlineCharacterDelegate + + + None + + + + + Main + + + + + Secondary + + + + + Minor + + + + + outlineItem + + + {} words / {} ({}) + + + + + {} words + + + + + pandocSettings + + + General + + + + + Table of Content + + + + + Custom settings for {} + + + + + persosProxyModel + + + Main + + + + + Secondary + + + + + Minors + + + + + plotDelegate + + + General + + + + + Promise + + + + + Problem + + + + + Progress + + + + + Resolution + + + + + Try / Fail + + + + + No and + + + + + Yes but + + + + + 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 + + + + + Tests + + + + + Approach + + + + + Abyss + + + + + Reward / Revelation + + + + + Transformation + + + + + Atonement + + + + + Return + + + + + plotModel + + + Name + + + + + Meta + + + + + New step + + + + + Main + + + + + Secondary + + + + + Minor + + + + + plotTreeView + + + Main + + + + + Secondary + + + + + Minor + + + + + **Plot:** {} + + + + + plotsProxyModel + + + Main + + + + + Secondary + + + + + Minors + + + + + propertiesView + + + Form + + + + + POV + + + + + Status + + + + + Label + + + + + Compile + + + + + Goal + + + + + Word count + + + + + references + + + Not a reference: {}. + + + + + Unknown reference: {}. + + + + + Path: + + + + + Stats: + + + + + POV: + + + + + Status: + + + + + Label: + + + + + Short summary: + + + + + Long summary: + + + + + Notes: + + + + + Basic info + + + + + Detailed info + + + + + POV of: + + + + + 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: + + + + + Motivation + + + + + Goal + + + + + Epiphany + + + + + Short summary + + + + + Longer summary + + + + + revisions + + + Form + + + + + Options + + + + + Restore + + + + + Delete + + + + + Show modifications + + + + + Show ancient version + + + + + Show spaces + + + + + Show modifications only + + + + + {} years ago + + + + + {} months ago + + + + + {} days ago + + + + + 1 day ago + + + + + {} hours ago + + + + + {} minutes ago + + + + + {} seconds ago + + + + + Line {}: + + + + + Clear all + + + + + search + + + Form + + + + + Search for... + + + + + 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: +{} + + + + + sldImportance + + + Form + + + + + TextLabel + + + + + Minor + + + + + Secondary + + + + + Main + + + + + splitDialog + + + + <p>Split selected item(s) at the given mark.</p> + + <p>If one of the selected item is a folder, it will be applied + recursively to <i>all</i> of it's children items.</p> + + <p>The split mark can contain following escape sequences: + <ul> + <li><b><code>\n</code></b>: line break</li> + <li><b><code>\t</code></b>: tab</li> + </ul> + </p> + + <p><b>Mark:</b></p> + + + + + + Split '{}' + + + + + Split items + + + + + storylineView + + + Form + + + + + Show Plots + + + + + Show Characters + + + + + tabSplitter + + + Open selected items in that view. + + + + + Split horizontally + + + + + Close split + + + + + Split vertically + + + + + textEditView + + + Various + + + + + textFormat + + + Form + + + + + CTRL+B + + + + + CTRL+I + + + + + CTRL+U + + + + + CTRL+P + + + + + CTRL+L + + + + + CTRL+E + + + + + CTRL+R + + + + + CTRL+J + + + + + treeView + + + Expand {} + + + + + Collapse {} + + + + + Expand All + + + + + Collapse All + + + + + welcome + + + Form + + + + + 1 + + + + + Templates + + + + + Empty + + + + + Novel + + + + + Novella + + + + + Short Story + + + + + Research paper + + + + + Demo projects + + + + + Add level + + + + + Add word count + + + + + Next time, automatically open last project + + + + + Open... + + + + + Recent + + + + + Create + + + + + 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 + + + + + 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_tr.qm b/i18n/manuskript_tr.qm new file mode 100644 index 0000000..b1d61f9 Binary files /dev/null and b/i18n/manuskript_tr.qm differ diff --git a/i18n/manuskript_tr.ts b/i18n/manuskript_tr.ts new file mode 100644 index 0000000..dfb3d3a --- /dev/null +++ b/i18n/manuskript_tr.ts @@ -0,0 +1,4005 @@ + + + + + ExportersManager + + + Manage Exporters + + + + + Manuskript + + + + + Description + Tanım + + + + Offers export to + + + + + Status + Durum + + + + Status: + Durum: + + + + Version: + Versiyon: + + + + Path: + + + + + ... + + + + + {HelpText} + + + + + FrequencyAnalyzer + + + Frequency Analyzer + + + + + Word frequency + Kelime sıklığı + + + + Settings + Ayarlar + + + + Minimum size: + Minimum boyut: + + + + Exclude words (comma separated): + + + + + Analyze + Analiz et + + + + Phrase frequency + Sözcük grubu sıklığı + + + + Number of words: from + Kelime sayısı: 'den + + + + to + 'e + + + + MDEditCompleter + + + Insert reference + Referans ekle + + + + MainWindow + + + General + Genel + + + + Title + Başlık + + + + Subtitle + Alt başlık + + + + Series + Seri + + + + Volume + Cilt + + + + Genre + Tarz + + + + License + Lisans + + + + Author + Yazar + + + + Name + İsim + + + + Email + E-posta + + + + Summary + Özet + + + + Situation: + Durum: + + + + Summary: + Özet: + + + + One sentence + Bir cümle + + + + One paragraph + Bir paragraf + + + + One page + Bir sayfa + + + + Full + + + + + One sentence summary + Bir cümlelik özet + + + + One paragraph summary + Bir paragraflık özet + + + + Expand each sentence of your one paragraph summary to a paragraph + Bir paragraflık özetinizin her cümlesini bir paragraf olarak genişletin + + + + One page summary + Bir sayfalık özet + + + + Full summary + Tam özet + + + + Next + İleri + + + + What if...? + Ya ... olursa? + + + + Characters + Karakterler + + + + Names + İ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 + + + + + Book information + + + + + &About + + + + + About Manuskript + + + + + Manuskript + + + + + Project {} saved. + + + + + WARNING: Project {} not saved. + + + + + Project {} loaded. + + + + + 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 + + + + &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 + + + No results found + + + + + Settings + + + Settings + Ayarlar + + + + General + Genel + + + + Revisions + + + + + Views + + + + + Labels + Etiketler + + + + Status + Durum + + + + Fullscreen + + + + + General settings + + + + + Application settings + + + + + 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 + + + About Manuskript + + + + + Manuskript + + + + + aboutDialog + + + Version + + + + + Software Versions in Use: + + + + + abstractModel + + + Title + Başlık + + + + POV + + + + + Label + + + + + Status + Durum + + + + Compile + + + + + Word count + + + + + Goal + Amaç + + + + basicItemView + + + Form + + + + + POV: + + + + + Goal: + + + + + Word count + + + + + One line summary + + + + + Few sentences summary: + + + + + characterModel + + + Name + İsim + + + + Value + + + + + New character + + + + + Description + Tanım + + + + characterTreeView + + + Main + + + + + Secondary + + + + + Minor + + + + + cheatSheet + + + Form + + + + + Filter (type the name of anything in your project) + + + + + Minor + + + + + Secondary + + + + + Main + + + + + Characters + Karakterler + + + + Texts + + + + + Plots + + + + + World + Evren + + + + cmbOutlineCharacterChoser + + + None + + + + + Main + + + + + Secondary + + + + + Minor + + + + + Various + + + + + cmbOutlineLabelChoser + + + Various + + + + + cmbOutlineStatusChoser + + + Various + + + + + collapsibleDockWidgets + + + Dock Widgets Toolbar + + + + + completer + + + Form + + + + + corkDelegate + + + One line summary + + + + + Full summary + Tam özet + + + + editorWidget_ui + + + Form + + + + + exporter + + + Export + + + + + Export to: + + + + + Manage exporters + + + + + Preview + + + + + Settings + Ayarlar + + + + exporterDialog + + + {} (not implemented yet) + + + + + exporterSettings + + + Form + + + + + Content + + + + + Decide here what will be included in the final export. + + + + + Type + + + + + Title + Başlık + + + + Text + + + + + I need more granularity + + + + + Fi&lters + + + + + <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> + + + + + Ignore compile status (include all items) + + + + + Subitems of: + + + + + Labels + Etiketler + + + + Status + Durum + + + + Separations + + + + + Between folders: + + + + + Empty line + + + + + Custom + + + + + Between texts: + + + + + Between folder and text: + + + + + Between text and folder: + + + + + Transformations + + + + + Typographic replacements: + + + + + Replace double quotes (") with: + + + + + Replace single quotes (') with: + + + + + Remove multiple spaces + + + + + Custom replacements: + + + + + Enabled + + + + + Replace + + + + + With + + + + + RegExp + + + + + If checked, uses regular expression for replacement. If unchecked, replaced as plain text. + + + + + Preview + + + + + Font + + + + + Font: + + + + + Font size: + Yazı tipi boyutu: + + + + Folder + + + + + {}Level {} folder + + + + + {}Level {} text + + + + + Replace ... with … + + + + + Replace --- with — + + + + + exportersManager + + + Installed + + + + + Custom + + + + + Not found + + + + + {} not found. Install it, or set path manually. + + + + + <b>Status:</b> uninstalled. + + + + + <b>Requires:</b> + + + + + Set {} executable path. + + + + + frequencyAnalyzer + + + Phrases + + + + + Frequency + + + + + Word + + + + + 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 + + + + + generalSettings + + + General + Genel + + + + Split scenes at: + + + + + \n---\n + + + + + Trim long titles (> 32 chars) + + + + + Import under: + + + + + Import in a top-level folder + + + + + helpLabel + + + If you don't wanna see me, you can hide me in Help menu. + + + + + importer + + + Import + + + + + Format: + + + + + Choose file + + + + + Clear file + + + + + Preview + + + + + Settings + Ayarlar + + + + lineEditView + + + Various + + + + + locker + + + Form + + + + + Lock screen: + + + + + Word target + + + + + Time target + + + + + words + + + + + minutes + + + + + Lock ! + + + + + ~{} h. + + + + + ~{} mn. + + + + + {}:{} + + + + + {} s. + + + + + {} remaining + + + + + {} words remaining + + + + + mainEditor + + + Form + + + + + Text + + + + + Index cards + + + + + Outline + Taslak + + + + F11 + + + + + Go to parent item + + + + + Alt+Up + + + + + Root + + + + + {} words + + + + + ({} chars) {} words / {} + + + + + {} words / {} + + + + + {} chars + + + + + {} chars + + + + + markdownSettings + + + Markdown + + + + + metadataView + + + Form + + + + + Properties + + + + + Summary + Özet + + + + One line summary + + + + + Full summary + Tam özet + + + + Notes / References + + + + + Revisions + + + + + myPanel + + + Auto-hide + + + + + outlineCharacterDelegate + + + None + + + + + Main + + + + + Secondary + + + + + Minor + + + + + pandocSettings + + + General + Genel + + + + Table of Content + + + + + Custom settings for {} + + + + + persosProxyModel + + + Main + + + + + Secondary + + + + + Minors + + + + + plotDelegate + + + General + Genel + + + + Promise + + + + + Problem + + + + + Progress + + + + + Resolution + + + + + Try / Fail + + + + + No and + + + + + Yes but + + + + + 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 + + + + + Tests + + + + + Approach + + + + + Abyss + + + + + Reward / Revelation + + + + + Transformation + + + + + Atonement + + + + + Return + + + + + plotModel + + + Name + İsim + + + + Meta + + + + + New step + + + + + Main + + + + + Secondary + + + + + Minor + + + + + New plot + + + + + plotTreeView + + + Main + + + + + Secondary + + + + + Minor + + + + + **Plot:** {} + + + + + plotsProxyModel + + + Main + + + + + Secondary + + + + + Minors + + + + + propertiesView + + + Form + + + + + POV + + + + + Status + Durum + + + + Label + + + + + Compile + + + + + Goal + Amaç + + + + Word count + + + + + revisions + + + Form + + + + + Options + + + + + Restore + + + + + Delete + + + + + Show modifications + + + + + Show ancient version + + + + + Show spaces + + + + + Show modifications only + + + + + {} years ago + + + + + {} months ago + + + + + {} days ago + + + + + 1 day ago + + + + + {} hours ago + + + + + {} minutes ago + + + + + {} seconds ago + + + + + Line {}: + + + + + Clear all + + + + + search + + + Form + + + + + Search for... + + + + + 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: +{} + + + + + sldImportance + + + Form + + + + + TextLabel + + + + + Minor + + + + + Secondary + + + + + Main + + + + + splitDialog + + + + <p>Split selected item(s) at the given mark.</p> + + <p>If one of the selected item is a folder, it will be applied + recursively to <i>all</i> of it's children items.</p> + + <p>The split mark can contain following escape sequences: + <ul> + <li><b><code>\n</code></b>: line break</li> + <li><b><code>\t</code></b>: tab</li> + </ul> + </p> + + <p><b>Mark:</b></p> + + + + + + Split '{}' + + + + + Split items + + + + + storylineView + + + Form + + + + + Show Plots + + + + + Show Characters + + + + + tabSplitter + + + Open selected items in that view. + + + + + Split horizontally + + + + + Close split + + + + + Split vertically + + + + + textEditView + + + Various + + + + + textFormat + + + Form + + + + + CTRL+B + + + + + CTRL+I + + + + + CTRL+U + + + + + CTRL+P + + + + + CTRL+L + + + + + CTRL+E + + + + + CTRL+R + + + + + CTRL+J + + + + + treeView + + + Expand {} + + + + + Collapse {} + + + + + Expand All + + + + + Collapse All + + + + + welcome + + + Form + + + + + 1 + + + + + Templates + + + + + Empty + + + + + Novel + + + + + Novella + + + + + Short Story + + + + + Research paper + + + + + Demo projects + + + + + Add level + + + + + Add word count + + + + + Next time, automatically open last project + + + + + Open... + + + + + Recent + + + + + Create + + + + + 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 + + + + + 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.qm b/i18n/manuskript_uk.qm new file mode 100644 index 0000000..abbc5b5 Binary files /dev/null and b/i18n/manuskript_uk.qm differ diff --git a/i18n/manuskript_uk.ts b/i18n/manuskript_uk.ts index e5ff1e1..5af547b 100644 --- a/i18n/manuskript_uk.ts +++ b/i18n/manuskript_uk.ts @@ -1,271 +1,57 @@ - - - Export - - - Basic HTML output using python module 'markdown'. - - - - - python module 'markdown'. - - - - - Markdown source - - - - - HTML Source - - - - - HTML Output - - - - - Default exporter, provides basic formats used by other exporters. - - - - - Preview with highlighter. - - - - - Plain text - - - - - Chose output file... - - - - - A little known format modestly used. You know, web sites for example. - - - - - Needs latex to be installed. - - - - - 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: - - - - - Books that don't kill trees. - - - - - OpenDocument format. Used by LibreOffice for example. - - - - - Microsoft Office (.docx) document. - - - - - reStructuredText is a lightweight markup language... - - - - - Just like plain text, excepts adds markdown titles. - Presupposes that texts are formatted 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>. - - - - - <p>A universal document convertor. 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> - - - - - - a valid latex installation. See pandoc recommendations on: - <a href="http://pandoc.org/installing.html">http://pandoc.org/installing.html</a>. If you want unicode support, you need xelatex. - - - - - Export to markdown, using pandoc. Allows more formatting options - than the basic manuskript exporter. - - - - - LaTeX is a word processor and document markup language used to create - beautiful documents. - - - - - The purpose of this format is to provide a way to exchange information - between outliners and Internet services that can be browsed or controlled - through an outliner. - - - - - Disable YAML metadata block. -Use that if you get YAML related error. - - - - - Convert to ePUB3 - - - + ExportersManager Manage Exporters - + Керувати експортерами Manuskript - + Манускрипт Description - + Опис Offers export to - + Може експортувати у Status - + Стан Status: - + Стан: Version: - + Версія: Path: - + Шлях: ... - + ... {HelpText} - + {HelpText} @@ -273,12 +59,12 @@ Use that if you get YAML related error. Frequency Analyzer - + Частотний аналіз Word frequency - + Частота слів @@ -288,964 +74,1150 @@ Use that if you get YAML related error. Minimum size: - + Мінімальний розмір: - Exclude words (coma seperated): - + Exclude words (comma separated): + Не враховувати слова (розділені комою): Analyze - + Аналізувати Phrase frequency - + Частота висловів Number of words: from - + Кількість слів: від to - - - - - 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) - are added as scene.</p> - <p>Only text files are supported (not images, binary or others).</p> - - - - - Include only those extensions: - - - - - Coma 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 - then it will be imported in manuskript. One or the other - might give better result depending on your document. - <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> - <b>none</b>: no line wrap.<br> - <b>preserve</b>: tries to preserves line wrap from the - original document.</p> - - - - - Mind Map Import - Імпорт мапи думок - - - - This does not appear to be a valid Mind Map file. - - - - - Mind Map import - - - - - Import tip as: - - - - - Untitled - Без назви + до MDEditCompleter - + Insert reference - + Вставити посилання MainWindow - + General - + Загальне - + Title - + Назва - + Subtitle - + Підзаголовок - + Series - + Серія - + Volume Том - + 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...? - + Далі + What if...? + Що як...? + + + Characters - + Персонажі - + Names - + Імена - + 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 - + FlatData - + Persos - + 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 - - - - - S&nowflake - - - - - Index cards - - - - - S&ettings - - - - - F8 - - - - - &Close project - - - - - Co&mpile - - - - - F6 - + П&означки... + &Status... + &Стан... + + + + Tree + Дерево + + + + &Simple + &Простий + + + + &Fiction + &Художня література + + + + Index cards + Картки + + + + S&ettings + Н&алаштування + + + + F8 + F8 + + + + &Close project + &Закрити проєкт + + + + Co&mpile + &Експортувати + + + + F6 + F6 + + + &Frequency Analyzer - + &Частотний аналізатор - + Book information - + Інформація про книжку - + &About - + &Про програму - + About Manuskript - - - - - The file {} does not exist. Try again. - - - - - Manuskript - - - - - Project {} saved. - - - - - WARNING: Project {} not saved. - - - - - Project {} loaded. - - - - - Project {} loaded with some errors: - - - - - * {} wasn't found in project file. - + Про Манускрипт + Manuskript + Манускрипт + + + + Project {} saved. + Проєкт {} збережено. + + + + WARNING: Project {} not saved. + УВАГА: Проєкт {} не збережено. + + + + Project {} loaded. + Проєкт {} завантажено. + + + 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 PyEnchant to use spellcheck - + Опис книги - Nothing - + Project tree + Дерево проєкту - POV - З погляду + 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 (CTRL+Enter) - + + Add plot step + Додати крок сюжету - - Ctrl+Return - - - - - Remove selected plot step(s) (CTRL+Backspace) - - - - - Ctrl+Backspace - - - - + &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 - + F7 + F7 - Dupl&icate - + &Copy + &Копіювати + + + + Ctrl+C + Ctrl+C - &Delete - &Вилучити + 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 + Видалити + + + + &Move Up + Пересунути в&гору + + + + Ctrl+Shift+Up + Ctrl+Shift+Вгору + + + + M&ove Down + Пересунути в&низ + + + + Ctrl+Shift+Down + Ctrl+Shift+Вниз + + + + Dupl&icate + &Дублювати + + + + &Delete + &Видалити + + + &Rename &Перейменувати - + F2 - + F2 - + Organi&ze - + &Упорядкувати - + M&erge - + Об’&єднати + + + + Remove selected plot step(s) + Видалити вибрані кроки сюжету + + + + &Format + &Формат + + + + &Header + &Заголовок + + + + &Level 1 (setext) + Р&івень 1 (setext) + + + + 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 + &Цитата + + + + 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 + Ctrl+F + + + + F3 + F3 + + + + Shift+F3 + Shift+F3 + + + + Situation + Ситуація + + + + 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 + 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 + + + No results found + Нічого не знайдено @@ -1253,660 +1225,752 @@ Use that if you get YAML related error. Settings - + Налаштування General - + Загальне - + Revisions - + Ревізії Views - + Відображення - + Labels - + Позначки - + Status - + Стан - + Fullscreen - + Повноекранний General settings - + Загальні налаштування - Application style - + Application settings + Налаштування програми - - You might need to restart manuskript in order to avoid some visual issues. - - - - - Application language - - - - - You will need to restart manuskript for the translation to take effect. - - - - + Loading - + Завантаження - + Automatically load last project on startup - + Завантажувати останній проєкт при запуску - + Saving - + Збереження - + Automatically save every - + Автоматично зберігати кожні - + minutes. - + хвилин. - + If no changes during - + Якщо нема змін протягом - + seconds. - + секунд. - - Save on quit - + + Save on project close + Зберігати при закритті проєкту - - <html><head/><body><p>If you check this option, your project will be save as one single file. Easier to copy or backup, but does not allow collaborative editing, or versionning.<br/>If this is unchecked, your project will be save as a folder containing many small files.</p></body></html> - + + <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 - + 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 - + 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: - + Text Background + Тло тексту - - Padding: - + + 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: - + Верхнє/нижнє поля: - - Show &wordcount - - - - + S&how progress - + Показати п&рогрес - + Show summar&y - + Показати &опис - - &Show wordcount - - - - + Show p&rogress - + По&казати прогрес - + Old st&yle - + Старий &стиль - - Ne&w style - - - - + 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> + <p><b>Функція «Ревізії» є джерелом багатьох повідомлень про проблеми. У цій версії Манускрипта її за замовчуванням вимкнено для нових проєктів, щоб забезпечити найкращий досвід.</b></p><p>Чому ці проблеми ще не вирішено? <a href="https://www.theologeek.ch/manuskript/contribute/">Нам потрібна ваша допомога, щоб покращити Манускрипт!</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 + Пропозиція щодо к&орекції @@ -1914,12 +1978,12 @@ Use that if you get YAML related error. About Manuskript - + Про Манускрипт Manuskript - + Манускрипт @@ -1927,63 +1991,50 @@ Use that if you get YAML related error. Version - + Версія Software Versions in Use: - + Версії програмного забезпечення: abstractModel - + Title - + Назва - + POV - + Оповідає - + Label - + Позначка - + Status - + Стан - + Compile - + Зібрати - + Word count - + Кількість слів - + Goal - - - - - app - - - Loaded translation: {}. - - - - - Note: No translator found or loaded for locale {}. - + Мета @@ -1991,68 +2042,73 @@ Use that if you get YAML related error. Form - + Форма POV: - + Оповідає: Goal: - + Мета: Word count - + Кількість слів One line summary - + Опис в один рядок Few sentences summary: - + Опис у декілька речень: characterModel - - New character - - - - + Name - + Ім’я - + Value - + Значення + + + + New character + Новий персонаж + + + + Description + Опис characterTreeView - + Main - + Головні - + Secondary - + Другорядні - + Minor - + Незначні @@ -2060,47 +2116,47 @@ Use that if you get YAML related error. Form - + Форма Filter (type the name of anything in your project) - + Фільтр (введіть назву будь-чого у вашому проєкті) - + Minor - + Незначні - + Secondary - + Другорядні - + Main - + Головні - + Characters - + Персонажі - + Texts - + Тексти - + Plots - + Сюжети - + World - + Світ @@ -2108,27 +2164,27 @@ Use that if you get YAML related error. None - + Жоден Main - + Головні Secondary - + Другорядні Minor - + Незначні Various - + Різноманітні @@ -2136,7 +2192,7 @@ Use that if you get YAML related error. Various - + Різноманітні @@ -2144,7 +2200,7 @@ Use that if you get YAML related error. Various - + Різноманітні @@ -2152,7 +2208,7 @@ Use that if you get YAML related error. Dock Widgets Toolbar - + Панель віджетів @@ -2160,20 +2216,20 @@ Use that if you get YAML related error. Form - + Форма corkDelegate - + One line summary - + Опис в один рядок - + Full summary - + Повний опис @@ -2181,7 +2237,7 @@ Use that if you get YAML related error. Form - + Форма @@ -2189,27 +2245,27 @@ Use that if you get YAML related error. Export - + Експорт Export to: - + Експортувати у: Manage exporters - + Керування експортерами Preview - + Попередній перегляд Settings - + Налаштування @@ -2217,7 +2273,7 @@ Use that if you get YAML related error. {} (not implemented yet) - + {} (ще не реалізовано) @@ -2225,132 +2281,132 @@ Use that if you get YAML related error. Form - + Форма Content - + Зміст Decide here what will be included in the final export. - + Вирішіть, що буде включено в кінцевий експорт. Type - + Тип Title - + Назва Text - + Текст I need more granularity - + Мені потрібна більша деталізація Fi&lters - + Фі&льтри <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>Фільтрує, які елементи буде включено в остаточний експорт.<br/><span style=" color:#773333;">(Ще не повністю реалізовано.)</span ></p></body></html> Ignore compile status (include all items) - + Ігнорувати стан компіляції (включити всі елементи) Subitems of: - + Піделементи: Labels - + Позначки Status - + Стан Separations - + Роздільники Between folders: - + Між теками: Empty line - + Пустий рядок Custom - + Користувацькі Between texts: - + Між текстами: Between folder and text: - + Між текою та текстом: Between text and folder: - + Між текстом і текою: Transformations - + Заміни Typographic replacements: - + Типографічні заміни: Replace double quotes (") with: - + Замінювати подвійні лапки (") на: Replace single quotes (') with: - + Замінювати одинарні лапки (') на: Remove multiple spaces - + Видалити повторні пробіли Custom replacements: - + Користувацькі заміни: @@ -2360,22 +2416,22 @@ Use that if you get YAML related error. Replace - + Замінити With - + На RegExp - + Регулярний вираз If checked, uses regular expression for replacement. If unchecked, replaced as plain text. - + Якщо ввімкнено, для заміни використовується регулярний вираз. Якщо вимкнено, замінюється як простий текст. @@ -2385,42 +2441,42 @@ Use that if you get YAML related error. Font - + Шрифт Font: - + Шрифт: Font size: - + Розмір шрифту: Folder - + Тека {}Level {} folder - + {} Рівень {} теки {}Level {} text - + {} Рівень {} тексту - + Replace ... with … - + Замінити ... на … - + Replace --- with — - + Замінити --- на — @@ -2428,37 +2484,37 @@ Use that if you get YAML related error. Installed - + Встановлено Custom - + Користувацьке Not found - + Не знайдено {} not found. Install it, or set path manually. - + {} не знайдено. Встановіть або оберіть шлях до нього вручну. <b>Status:</b> uninstalled. - + <b>Стан:</b> видалено. <b>Requires:</b> - + <b>Потребує:</b> Set {} executable path. - + Установити шлях до виконуваного файлу {}. @@ -2466,35 +2522,90 @@ Use that if you get YAML related error. Phrases - + Фрази Frequency - + Частота Word - + Слово 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 + Годинник: показати секунди @@ -2502,32 +2613,32 @@ Use that if you get YAML related error. General - + Загальне Split scenes at: - + Розділяти сцени по: \n---\n - + \n---\n Trim long titles (> 32 chars) - + Обрізати довгі заголовки (> 32 знаків) Import under: - + Імпортувати під: Import in a top-level folder - + Імпортувати в теку верхнього рівня @@ -2535,7 +2646,7 @@ Use that if you get YAML related error. If you don't wanna see me, you can hide me in Help menu. - + Якщо не хочете мене бачити, можете сховати мене в меню «Довідка». @@ -2543,40 +2654,40 @@ Use that if you get YAML related error. Import - + Імпортувати Format: - + Формат: - Chose file - + Choose file + Обрати файл Clear file - + Очистити файл Preview - + Попередній перегляд Settings - + Налаштування lineEditView - + Various - + Різноманітні @@ -2584,12 +2695,12 @@ Use that if you get YAML related error. Form - + Форма Lock screen: - + Екран блокування: @@ -2599,12 +2710,12 @@ Use that if you get YAML related error. Time target - + Цільовий час words - + слів @@ -2614,7 +2725,7 @@ Use that if you get YAML related error. Lock ! - + Заблокувати ! @@ -2629,22 +2740,22 @@ Use that if you get YAML related error. {}:{} - + {}:{} {} s. - + {} сек. {} remaining - + {} залишилося {} words remaining - + {} слів залишилося @@ -2652,60 +2763,75 @@ Use that if you get YAML related error. Form - + Форма Text - + Текст Index cards - + Картки Outline - + План F11 - + F11 Go to parent item - + Перейти до батьківського елемента Alt+Up - + Alt+Вгору - + Root - + Корінь - - {} words / {} - - - - + {} words {} слів + + + ({} chars) {} words / {} + ({} знаків) {} слів / {} + + + + {} words / {} + {} слів / {} + + + + {} chars + {} знаків + + + + {} chars + {} знаків + markdownSettings - + Markdown - + Markdown @@ -2713,173 +2839,45 @@ Use that if you get YAML related error. Form - + Форма Properties - + Властивості Summary - + Опис One line summary - + Опис у один рядок Full summary - + Повний опис Notes / References - + Примітки / Виноски Revisions - + Ревізії myPanel - + Auto-hide - - - - - outlineBasics - - - Set POV - - - - - None - - - - - Set Status - - - - - Set Label - - - - - New - - - - - Main - - - - - Secondary - - - - - Minor - - - - - Set Custom Icon - - - - - Restore to default - - - - - Root - - - - - Open {} items in new tabs - - - - - Open {} in a new tab - - - - - 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). - - - - - New &Folder - - - - - New &Text - - - - - &Copy - - - - - C&ut - - - - - &Paste - - - - - &Rename - - - - - Dup&licate - - - - - &Delete - + Автоматично ховати @@ -2887,53 +2885,40 @@ Use that if you get YAML related error. None - + Жоден Main - + Головні Secondary - + Другорядні Minor - - - - - outlineItem - - - {} words / {} ({}) - - - - - {} words - + Незначні pandocSettings - + General - + Загальне - + Table of Content - + Зміст - + Custom settings for {} - + Користувальницькі налаштування для {} @@ -2941,17 +2926,17 @@ Use that if you get YAML related error. Main - + Головні - Secundary - + Secondary + Другорядні Minors - + Незначні @@ -2959,243 +2944,238 @@ Use that if you get YAML related error. General - + Загальне Promise - + Зобов’язання Problem - + Проблема Progress - + Прогрес Resolution - + Розв’язка Try / Fail - + Спроба/Невдача No and - + Ні, та Yes but - + Так, але Freytag's pyramid - + Піраміда Фрейтага Exposition - + Експозиція Rising action - + Розвиток дії Climax - + Кульмінація Falling action - + Спадання дії Three acts - + Три акти 1. Setup - + 1. Зав’язка 1. Inciting event - + 1. Спонукальна подія 1. Turning point - + 1. Поворотний момент 2. Choice - + 2. Вибір 2. Reversal - + 2. Розворот 2. Disaster - + 2. Катастрофа 3. Stand up - + 3. Подолання 3. Climax - + 3. Кульмінація 3. Ending - + 3. Закінчення Hero's journey - + Шлях героя Ordinary world - + Звичайний світ Call to adventure - + Поклик до мандрів Refusal of the call - + Відмова від поклику Meeting with mentor - - - - - Corssing the Threshold - + Зустріч з наставником Tests - + Випробування Approach - + Наближення Abyss - + Безодня Reward / Revelation - + Нагорода / Одкровення Transformation - + Перетворення Atonement - + Спокута Return - + Повернення plotModel - - New plot - - - - + Name - + Назва - + Meta - + Метаопис - + New step - + Новий крок - + Main - + Головні - + Secondary - + Другорядні - + Minor - + Незначні + + + + New plot + Новий сюжет plotTreeView - + Main - + Головні - + Secondary - + Другорядні - + Minor - + Незначні - + **Plot:** {} - + **Сюжет:** {} @@ -3203,17 +3183,17 @@ Use that if you get YAML related error. Main - + Головні - Secundary - + Secondary + Другорядні Minors - + Незначні @@ -3221,200 +3201,37 @@ Use that if you get YAML related error. Form - + Форма POV - + Оповідає Status - + Стан Label - + Позначка Compile - + Зібрати Goal - + Мета Word count - - - - - references - - - Not a reference: {}. - - - - - Unknown reference: {}. - - - - - Path: - - - - - Stats: - - - - - POV: - - - - - Status: - - - - - Label: - - - - - Short summary: - - - - - Long summary: - - - - - Notes: - - - - - Basic info - - - - - Detailed info - - - - - POV of: - - - - - 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: - - - - - Motivation - - - - - Goal - - - - - Epiphany - - - - - Short summary - - - - - Longer summary - + Кількість слів @@ -3422,87 +3239,87 @@ Use that if you get YAML related error. Form - + Форма Options - + Опції - + Restore - + Відновити - + Delete - + Видалити Show modifications - + Показати зміни Show ancient version - + Показати давню версію Show spaces - + Показати пробіли Show modifications only - + Показати тільки зміни {} years ago - + {} років тому {} months ago - + {} місяців тому {} days ago - + {} днів тому 1 day ago - + 1 день тому {} hours ago - + {} годин тому {} minutes ago - + {} хвилин тому {} seconds ago - + {} секунд тому - + Line {}: - + Рядок {}: - + Clear all - + Очистити все @@ -3510,95 +3327,67 @@ Use that if you get YAML related error. Form - + Форма 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: +{} + Не вдалося додати вибране зображення: +{} @@ -3606,27 +3395,27 @@ Use that if you get YAML related error. Form - + Форма TextLabel - + Текстова позначка Minor - + Незначні Secondary - + Другорядні Main - + Головні @@ -3639,7 +3428,7 @@ Use that if you get YAML related error. <p>If one of the selected item is a folder, it will be applied recursively to <i>all</i> of it's children items.</p> - <p>The split mark can contain folling escape sequences: + <p>The split mark can contain following escape sequences: <ul> <li><b><code>\n</code></b>: line break</li> <li><b><code>\t</code></b>: tab</li> @@ -3648,17 +3437,31 @@ Use that if you get YAML related error. <p><b>Mark:</b></p> - + + <p>Розділити вибрані елементи за вказаною позначкою.</p> + + <p>Якщо один із вибраних елементів є текою, його буде + застосовано рекурсивно до <i>всіх</i> його дочірніх елементів.</p> + + <p>Позначка розділення може містити такі керуючі послідовності: + <ul> + <li><b><code>\n</code></b>: розрив рядка</li> + <li><b><code>\t</code></b>: табуляція</li> + </ul> + </p> + + <p><b>Позначка:</b></p> + Split '{}' - + Розділити «{}» Split items - + Розділити елементи @@ -3666,48 +3469,48 @@ Use that if you get YAML related error. Form - + Форма Show Plots - + Показати сюжети Show Characters - + Показати персонажів tabSplitter - + Open selected items in that view. - + Відкривати вибраний елемент в цій вкладці. - + Split horizontally - + Розділити горизонтально - + Close split - + Закрити розділення - + Split vertically - + Розділити вертикально textEditView - + Various - + Різноманітні @@ -3715,47 +3518,47 @@ Use that if you get YAML related error. Form - + Форма CTRL+B - + Ctrl+B 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 @@ -3763,22 +3566,22 @@ Use that if you get YAML related error. Expand {} - + Розгорнути {} Collapse {} - + Згорнути {} Expand All - + Розгорнути все Collapse All - + Згорнути все @@ -3786,435 +3589,435 @@ Use that if you get YAML related error. Form - + Форма 1 - + 1 Templates - + Шаблони Empty - + Пустий - + Novel - + Роман - + Novella - + Новела - + Short Story - + Оповідання - + Research paper - + Наукова робота - + Demo projects - + Демо проєкти Add level - + Додати рівень - Add wordcount - + Add word count + Додати кількість слів Next time, automatically open last project - + Наступного разу автоматично відкрити останній проєкт Open... - + Відкрити... Recent - + Останні Create - + Створити - + 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 - + Пустий нон-фікшн + words each. + слів кожна. + + + + of + з + + + + Text + Текст + + + Something - + Щось - + <b>Total:</b> {} words (~ {} pages) - + <b>Усього:</b> {} слів (~ {} сторінок) - + Fiction - + Художній твір - + Non-fiction - + Нон-фікшн - + Idea - + Ідея - + Note - + Примітка - + Research - + Дослідження - + TODO - + ЗРОБИТИ - + First draft - + Перша чернетка - + Second draft - + Друга чернетка - + Final - + Остаточна worldModel - + New item - + Новий елемент - + Fantasy world building - + Побудова світу для фентезі - + Physical - + Фізичне - + Climate - + Клімат - + Topography - + Топографія - + Astronomy - + Астрономія - - Natural ressources - - - - + 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.qm b/i18n/manuskript_zh_CN.qm index b9265f7..60c2298 100644 Binary files a/i18n/manuskript_zh_CN.qm and b/i18n/manuskript_zh_CN.qm differ diff --git a/i18n/manuskript_zh_CN.ts b/i18n/manuskript_zh_CN.ts index 2e618a7..80bf8e5 100644 --- a/i18n/manuskript_zh_CN.ts +++ b/i18n/manuskript_zh_CN.ts @@ -1,226 +1,6 @@ - - Export - - - Basic HTML output using the Python module 'markdown'. - 使用Python的'markdown'模块输出HTML。 - - - - Python module 'markdown'. - Python模块'markdown'。 - - - - Markdown source - Markdown 源文件 - - - - HTML Source - HTML 源文件 - - - - HTML Output - HTML 输出 - - - - Default exporter, provides basic formats used by other exporters. - 默认的导出工具提供了一些其他导出工具使用的基本格式。 - - - - Preview with highlighter. - 带高亮的预览。 - - - - Plain text - 纯文本 - - - - Chose output file... - 选择输出文件... - - - - A little known format modestly used. You know, web sites for example. - - - - - Needs LaTeX to be installed. - 需要安装 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: - 行间距: - - - - Books that don't kill trees. - - - - - OpenDocument format. Used by LibreOffice for example. - OpenDocument 格式,LibreOffice 等软件使用。 - - - - Microsoft Office (.docx) document. - Microsoft Office (.docx) 文档。 - - - - reStructuredText is a lightweight markup language. - reStructuredText 是一个轻量级的标记语言。 - - - - Just like plain text, excepts adds markdown titles. - Presupposes that texts are formatted in markdown. - 除了添加 markdown 标题外与纯文本一致。 - 假设文本是 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> - - <p>一个通用的转换器,可以把 markdown 转为很多种其他的格式</p> - <p>官网:<a href="http://www.pandoc.org">http://pandoc.org/</a></p> - - - - - 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. - - - - - Export to markdown, using pandoc. Allows more formatting options - than the basic manuskript exporter. - 使用 pandoc 来导出到 markdown 允许比默认的 manuskript 导出器更多 - 的格式化选项。 - - - - LaTeX is a word processor and document markup language used to create - beautiful documents. - LaTeX 是一种文字处理器和文档标记语言,用于创建漂亮的文档。 - - - - The purpose of this format is to provide a way to exchange information - between outliners and Internet services that can be browsed or controlled - through an outliner. - 它的目标是提供一种可以通过大纲来浏览或控制的在大纲和网络服务间交换信息的 - 方式。 - - - - Disable YAML metadata block. -Use that if you get YAML related error. - 关闭 YAML 元数据块。 -如果你遇到了 YAML 有关的问题,可以尝试使用它。 - - - - Convert to ePUB3 - 导出为 ePUB3 - - ExportersManager @@ -231,7 +11,7 @@ Use that if you get YAML related error. Manuskript - + Manuskript @@ -241,7 +21,7 @@ Use that if you get YAML related error. Offers export to - + 提供导出到 @@ -251,7 +31,7 @@ Use that if you get YAML related error. Status: - 状态: + 状态: @@ -322,134 +102,10 @@ 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) - are added as scene.</p> - <p>Only text files are supported (not images, binary or others).</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 - then it will be imported in manuskript. One or the other - might give better result depending on your document. - <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> - <b>none</b>: no line wrap.<br> - <b>preserve</b>: tries to preserves line wrap from the - original document.</p> - - - - - Mind Map Import - 导入思维导图 - - - - This does not appear to be a valid Mind Map file. - 这不是一个合法的思维导图文件。 - - - - Mind Map import - 导入思维导图 - - - - Import tip as: - 导入 tip 为: - - - - Untitled - 无标题 - - MDEditCompleter - + Insert reference 导入参考 @@ -457,967 +113,1111 @@ Use that if you get YAML related error. MainWindow - + General 通用 - + Title 标题 - + Subtitle 子标题 - + Series 系列 - + Volume - + Genre 类型 - + License 证书 - + Author 作者 - + Name 名字 - + Email - 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 基本信息 - + 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 Debug - + FlatData - + FlatData - + Persos - + 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) + 导出(&M) - + F6 F6 - + &Frequency Analyzer 频率分析(&F) - + Book information 书籍信息 - + &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 字典 - - Install PyEnchant to use spellcheck - 安装 PyEnchant 以使用拼写检查。 - - - + 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) + 标题(&H) - + &Level 1 (setext) - + 一级标题 (setext风格) - + Ctrl+Alt+1 Ctrl+Alt+1 - + Level &2 - + 二级标题 - + Ctrl+Alt+2 Ctrl+Alt+2 - + Level &1 (atx) - + 一级标题 (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 / 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 + + + + + &Technical Support + &技术支持 + + + + How to obtain technical support for Manuskript. + 如何获取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. + 直到 Manuskript 关闭以前,将继续写入日志文件“{}”。 + + + + It will now be displayed in your file manager, but is of limited use until you close Manuskript. + 现在,它将显示在您的文件管理器中,但在您关闭 Manuskript 之前,您对此文件能进行的操作将受限。 + + + + Error! + 出错! + + + + An error was encountered while trying to show the log file below in your file manager. + 尝试在文件管理器中显示以下日志文件时出错了。 + + + + F3 + F3 + + + + Shift+F3 + + + + + Situation + + + + + Status + 状态 + + + + &Import… + + + + + &Split… + + + + + Search + + + No results found + 查不到 + Settings @@ -1432,7 +1232,7 @@ Use that if you get YAML related error. 通用 - + Revisions 副本 @@ -1442,17 +1242,17 @@ Use that if you get YAML related error. 查看 - + Labels 标签 - + Status 状态 - + Fullscreen 全屏 @@ -1467,653 +1267,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 quit + + Save on project close 退出时保存 - - <html><head/><body><p>If you check this option, your project will be save as one single file. Easier to copy or backup, but does not allow collaborative editing, or versionning.<br/>If this is unchecked, your project will be save as a folder containing many small files.</p></body></html> - <html><head/><body><p>如果你勾选了这个选项,你的项目会被保存到单个文件中。更易于复制与备份,但不允许协作编辑或者版本控制。<br/>如果不勾选,你的项目会被保存为一个包含许多小文件的文件夹。</p></body></html> + + <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 - + 份版本(每分钟)——在过去的 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 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: 字体大小: - - You might need to restart manuskript in order for those settings to take effect properly and entirely. - 你需要重启 manuskript 以使得设置正确生效。 + + 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> + <p><b>历史版本功能被报告存在许多问题。在这个版本的 Manuskript 中,当创建新项目时,它被默认关闭以提供最佳体验。</b></p><p>为什么这些问题还没有被修复?<a href="https://www.theologeek.ch/manuskript/contribute/">我们需要你的帮助来改善 Manuskript !</a></p> + + + + Show progress in chars next + to words + + + + + Char/Word Counter + 字符 / 单词计数器 + + + + Count spaces as chars + 将空格算作字符 + + + + Show char c&ount + 显示字符数(&O) + + + + Sho&w char count + 显示字符数(&W) + SpellAction - + Spelling Suggestions 拼写建议 - + &Add to dictionary 加入字典(&A) - + &Remove from custom dictionary 从个人字典中删除(&R) + + + &New Character + 新角色(&N) + + + + &New Plot Item + 新情节(&N) + + + + &New World Item + 新世界(&N) + + + + &Correction Suggestions + 更正意见(&A) + + + + &Correction Suggestion + 更正意见(&C) + about @@ -2144,54 +2000,41 @@ Use that if you get YAML related error. abstractModel - + Title 标题 - + POV POV - + Label 标签 - + Status 状态 - + Compile - 编译 + 导出 - + Word count 字数统计 - + Goal 目标 - - app - - - Loaded translation: {}. - - - - - Note: No translator found or loaded for locale {}. - - - basicItemView @@ -2228,37 +2071,42 @@ Use that if you get YAML related error. characterModel - - New character - 新角色 - - - + Name 名字 - + Value + + + New character + + + + + Description + 描述 + characterTreeView - + Main 主要 - + Secondary 次要 - + Minor - 不重要的 + 不重要 @@ -2276,7 +2124,7 @@ Use that if you get YAML related error. Minor - 不重要的 + 不重要 @@ -2329,7 +2177,7 @@ Use that if you get YAML related error. Minor - 不重要的 + 不重要 @@ -2372,12 +2220,12 @@ Use that if you get YAML related error. corkDelegate - + One line summary 一句话摘要 - + Full summary 完整摘要 @@ -2471,12 +2319,12 @@ Use that if you get YAML related error. <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>项目过滤器会被包括在最终导出中<br/><span style=" color:#773333;">(尚未完全应用。)</span></p></body></html> Ignore compile status (include all items) - 忽略编译状态(包括所有条目) + 忽略导出状态(包括所有条目) @@ -2546,7 +2394,7 @@ Use that if you get YAML related error. Replace single quotes (') with: - 将单引号(')替换为: + 将单引号(')替换为: @@ -2571,7 +2419,7 @@ Use that if you get YAML related error. With - + @@ -2611,7 +2459,7 @@ Use that if you get YAML related error. {}Level {} folder - + 级别{} {} 文件夹 @@ -2620,13 +2468,13 @@ Use that if you get YAML related error. - Replace ... with … - 将 ... 替换为 … + Replace ... with … + 将 ... 替换为 … - Replace --- with — - 将 --- 替换为 — + Replace --- with — + 将 --- 替换为 — @@ -2688,20 +2536,75 @@ 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 + 时钟:显示秒数 + generalSettings @@ -2713,7 +2616,7 @@ Use that if you get YAML related error. Split scenes at: - + 拆分场景: @@ -2723,7 +2626,7 @@ Use that if you get YAML related error. Trim long titles (> 32 chars) - + 修短长标题(超过 32 个字符的部分) @@ -2741,7 +2644,7 @@ Use that if you get YAML related error. If you don't wanna see me, you can hide me in Help menu. - + 如果不想见我,您可以在帮助菜单中隐藏。 @@ -2758,8 +2661,8 @@ Use that if you get YAML related error. - Chose file - 选择文件 + Choose file + 选择文件 @@ -2780,7 +2683,7 @@ Use that if you get YAML related error. lineEditView - + Various 可变 @@ -2891,25 +2794,40 @@ Use that if you get YAML related error. Alt+Up - + Root - - {} words / {} - {} 字 / {} - - - + {} words {} 字 + + + ({} chars) {} words / {} + + + + + {} words / {} + + + + + {} chars + + + + + {} chars + + markdownSettings - + Markdown Markdown @@ -2955,134 +2873,11 @@ Use that if you get YAML related error. myPanel - + Auto-hide 自动隐藏 - - outlineBasics - - - Set POV - 设置 POV - - - - None - - - - - Set Status - 设置状态 - - - - Set Label - 设置标签 - - - - New - 新建 - - - - Main - 主要 - - - - Secondary - 次要 - - - - Minor - 不重要的 - - - - Set Custom Icon - 设置自定义图标 - - - - Restore to default - 恢复默认值 - - - - Root - - - - - Open {} items in new tabs - 在新标签页打开 {} 条目 - - - - Open {} in a new tab - 在新标签页打开 {} - - - - About to remove - 关于删除 - - - - <p><b>You're about to delete {} item(s).</b></p><p>Are you sure?</p> - <p><b>你即将删除 {} 。</b></p><p>是否确认?</p> - - - - Select at least two items. Folders are ignored. - 选择最后两项条目。忽略文件夹。 - - - - All items must be on the same level (share the same parent). - 所有条目都需要同级(具有相同的父项)。 - - - - New &Folder - 新建文件夹(&F) - - - - New &Text - 新建文本(&T) - - - - &Copy - 复制(&C) - - - - C&ut - 剪切(&U) - - - - &Paste - 粘贴(&P) - - - - &Rename - 重命名(&R) - - - - &Delete - 删除(&D) - - outlineCharacterDelegate @@ -3103,36 +2898,23 @@ Use that if you get YAML related error. Minor - 不重要的 - - - - outlineItem - - - {} words / {} ({}) - {} 字 / {} ({}) - - - - {} words - {} 字 + 不重要 pandocSettings - + General 通用 - + Table of Content 内容表格(TOC) - + Custom settings for {} {} 的自定义设置 @@ -3152,7 +2934,7 @@ Use that if you get YAML related error. Minors - 不重要的 + 不重要 @@ -3336,60 +3118,60 @@ Use that if you get YAML related error. plotModel - - New plot - 新情节 - - - + Name 名字 - + Meta 元(Meta) - + New step 新一步 - + Main 主要 - + Secondary 次要 - + Minor - 不重要的 + 不重要 + + + + New plot + plotTreeView - + Main 主要 - + Secondary 次要 - + Minor - 不重要的 + 不重要 - + **Plot:** {} **情节:** {} @@ -3409,7 +3191,7 @@ Use that if you get YAML related error. Minors - 不重要的 + 不重要 @@ -3437,7 +3219,7 @@ Use that if you get YAML related error. Compile - 编译 + 导出 @@ -3450,255 +3232,92 @@ 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: - 笔记: - - - - Basic info - 基本信息 - - - - Detailed info - 详细信息 - - - - POV of: - 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: - 引用于: - - - - Motivation - 激励 - - - - Goal - 目标 - - - - Epiphany - 顿悟 - - - - Short summary - 短摘要 - - - - Longer summary - 长摘要 - - revisions Form - + 表格 Options - + 选项 - + Restore - + 恢复 - + Delete - + 删除 Show modifications - + 显示各项修改 Show ancient version - + 显示很老的版本 Show spaces - + 展示空格 Show modifications only - + 只显示各项修改 {} years ago - + {} 年前 {} months ago - + {} 月前 {} days ago - + {} 天前 1 day ago - + 1 天前 {} hours ago - + {} 小时前 {} minutes ago - + {} 分钟前 {} seconds ago - + {} 秒钟前 - + Line {}: - + 第 {} 行: - + Clear all - + 全部清除 @@ -3706,123 +3325,95 @@ Use that if you get YAML related error. Form - + 表格 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: +{} + 无法添加所选图像: +{} + sldImportance Form - + 表格 TextLabel - + 文本标签 Minor - + 不重要 Secondary - + 次要的 Main - + 主要的 @@ -3862,40 +3453,40 @@ Use that if you get YAML related error. Form - + 表格 Show Plots - + 显示情节 Show Characters - + 显示人物 tabSplitter - + Open selected items in that view. - + 在该视图中打开所选项目。 - + Split horizontally - + 水平分割 - + Close split - + Split vertically - + 纵向分割 @@ -4000,27 +3591,27 @@ Use that if you get YAML related error. - + Novel 长篇小说 - + Novella 中篇小说 - + Short Story 短篇小说 - + Research paper 研究论文 - + Demo projects 示例项目 @@ -4055,147 +3646,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 完成稿 @@ -4203,214 +3794,214 @@ 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.qm b/i18n/manuskript_zh_HANT.qm new file mode 100644 index 0000000..a9cfc16 Binary files /dev/null and b/i18n/manuskript_zh_HANT.qm differ diff --git a/i18n/manuskript_zh_HANT.ts b/i18n/manuskript_zh_HANT.ts new file mode 100644 index 0000000..c6e00c3 --- /dev/null +++ b/i18n/manuskript_zh_HANT.ts @@ -0,0 +1,4005 @@ + + + + + ExportersManager + + + Manage Exporters + + + + + Manuskript + + + + + Description + + + + + Offers export to + + + + + Status + + + + + Status: + + + + + Version: + + + + + Path: + + + + + ... + + + + + {HelpText} + + + + + FrequencyAnalyzer + + + Frequency Analyzer + + + + + Word frequency + + + + + Settings + + + + + Minimum size: + + + + + Exclude words (comma separated): + + + + + Analyze + + + + + Phrase frequency + + + + + Number of words: from + + + + + to + + + + + MDEditCompleter + + + Insert reference + + + + + MainWindow + + + General + + + + + Title + + + + + Subtitle + + + + + Series + + + + + Volume + + + + + 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 + + + + + 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 + + + + + Book information + + + + + &About + + + + + About Manuskript + + + + + Manuskript + + + + + Project {} saved. + + + + + WARNING: Project {} not saved. + + + + + Project {} loaded. + + + + + 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 + + + + + &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 + + + No results found + + + + + Settings + + + Settings + + + + + General + + + + + Revisions + + + + + Views + + + + + Labels + + + + + Status + + + + + Fullscreen + + + + + General settings + + + + + Application settings + + + + + 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 + + + About Manuskript + + + + + Manuskript + + + + + aboutDialog + + + Version + + + + + Software Versions in Use: + + + + + abstractModel + + + Title + + + + + POV + + + + + Label + + + + + Status + + + + + Compile + + + + + Word count + + + + + Goal + + + + + basicItemView + + + Form + + + + + POV: + + + + + Goal: + + + + + Word count + + + + + One line summary + + + + + Few sentences summary: + + + + + characterModel + + + Name + + + + + Value + + + + + New character + + + + + Description + + + + + characterTreeView + + + Main + + + + + Secondary + + + + + Minor + + + + + cheatSheet + + + Form + + + + + Filter (type the name of anything in your project) + + + + + Minor + + + + + Secondary + + + + + Main + + + + + Characters + + + + + Texts + + + + + Plots + + + + + World + + + + + cmbOutlineCharacterChoser + + + None + + + + + Main + + + + + Secondary + + + + + Minor + + + + + Various + + + + + cmbOutlineLabelChoser + + + Various + + + + + cmbOutlineStatusChoser + + + Various + + + + + collapsibleDockWidgets + + + Dock Widgets Toolbar + + + + + completer + + + Form + + + + + corkDelegate + + + One line summary + + + + + Full summary + + + + + editorWidget_ui + + + Form + + + + + exporter + + + Export + + + + + Export to: + + + + + Manage exporters + + + + + Preview + + + + + Settings + + + + + exporterDialog + + + {} (not implemented yet) + + + + + exporterSettings + + + Form + + + + + Content + + + + + Decide here what will be included in the final export. + + + + + Type + + + + + Title + + + + + Text + + + + + I need more granularity + + + + + Fi&lters + + + + + <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> + + + + + Ignore compile status (include all items) + + + + + Subitems of: + + + + + Labels + + + + + Status + + + + + Separations + + + + + Between folders: + + + + + Empty line + + + + + Custom + + + + + Between texts: + + + + + Between folder and text: + + + + + Between text and folder: + + + + + Transformations + + + + + Typographic replacements: + + + + + Replace double quotes (") with: + + + + + Replace single quotes (') with: + + + + + Remove multiple spaces + + + + + Custom replacements: + + + + + Enabled + + + + + Replace + + + + + With + + + + + RegExp + + + + + If checked, uses regular expression for replacement. If unchecked, replaced as plain text. + + + + + Preview + + + + + Font + + + + + Font: + + + + + Font size: + 字體大小: + + + + Folder + + + + + {}Level {} folder + + + + + {}Level {} text + + + + + Replace ... with … + + + + + Replace --- with — + + + + + exportersManager + + + Installed + + + + + Custom + + + + + Not found + + + + + {} not found. Install it, or set path manually. + + + + + <b>Status:</b> uninstalled. + + + + + <b>Requires:</b> + + + + + Set {} executable path. + + + + + frequencyAnalyzer + + + Phrases + + + + + Frequency + + + + + Word + + + + + 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 + + + + + generalSettings + + + General + + + + + Split scenes at: + + + + + \n---\n + + + + + Trim long titles (> 32 chars) + + + + + Import under: + + + + + Import in a top-level folder + + + + + helpLabel + + + If you don't wanna see me, you can hide me in Help menu. + + + + + importer + + + Import + + + + + Format: + + + + + Choose file + + + + + Clear file + + + + + Preview + + + + + Settings + + + + + lineEditView + + + Various + + + + + locker + + + Form + + + + + Lock screen: + + + + + Word target + + + + + Time target + + + + + words + + + + + minutes + + + + + Lock ! + + + + + ~{} h. + + + + + ~{} mn. + + + + + {}:{} + + + + + {} s. + + + + + {} remaining + + + + + {} words remaining + + + + + mainEditor + + + Form + + + + + Text + + + + + Index cards + + + + + Outline + + + + + F11 + + + + + Go to parent item + + + + + Alt+Up + + + + + Root + + + + + {} words + + + + + ({} chars) {} words / {} + + + + + {} words / {} + + + + + {} chars + + + + + {} chars + + + + + markdownSettings + + + Markdown + + + + + metadataView + + + Form + + + + + Properties + + + + + Summary + + + + + One line summary + + + + + Full summary + + + + + Notes / References + + + + + Revisions + + + + + myPanel + + + Auto-hide + + + + + outlineCharacterDelegate + + + None + + + + + Main + + + + + Secondary + + + + + Minor + + + + + pandocSettings + + + General + + + + + Table of Content + + + + + Custom settings for {} + + + + + persosProxyModel + + + Main + + + + + Secondary + + + + + Minors + + + + + plotDelegate + + + General + + + + + Promise + + + + + Problem + + + + + Progress + + + + + Resolution + + + + + Try / Fail + + + + + No and + + + + + Yes but + + + + + 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 + + + + + Tests + + + + + Approach + + + + + Abyss + + + + + Reward / Revelation + + + + + Transformation + + + + + Atonement + + + + + Return + + + + + plotModel + + + Name + + + + + Meta + + + + + New step + + + + + Main + + + + + Secondary + + + + + Minor + + + + + New plot + + + + + plotTreeView + + + Main + + + + + Secondary + + + + + Minor + + + + + **Plot:** {} + + + + + plotsProxyModel + + + Main + + + + + Secondary + + + + + Minors + + + + + propertiesView + + + Form + + + + + POV + + + + + Status + + + + + Label + + + + + Compile + + + + + Goal + + + + + Word count + + + + + revisions + + + Form + + + + + Options + + + + + Restore + + + + + Delete + + + + + Show modifications + + + + + Show ancient version + + + + + Show spaces + + + + + Show modifications only + + + + + {} years ago + + + + + {} months ago + + + + + {} days ago + + + + + 1 day ago + + + + + {} hours ago + + + + + {} minutes ago + + + + + {} seconds ago + + + + + Line {}: + + + + + Clear all + + + + + search + + + Form + + + + + Search for... + + + + + 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: +{} + + + + + sldImportance + + + Form + + + + + TextLabel + + + + + Minor + + + + + Secondary + + + + + Main + + + + + splitDialog + + + + <p>Split selected item(s) at the given mark.</p> + + <p>If one of the selected item is a folder, it will be applied + recursively to <i>all</i> of it's children items.</p> + + <p>The split mark can contain following escape sequences: + <ul> + <li><b><code>\n</code></b>: line break</li> + <li><b><code>\t</code></b>: tab</li> + </ul> + </p> + + <p><b>Mark:</b></p> + + + + + + Split '{}' + + + + + Split items + + + + + storylineView + + + Form + + + + + Show Plots + + + + + Show Characters + + + + + tabSplitter + + + Open selected items in that view. + + + + + Split horizontally + + + + + Close split + + + + + Split vertically + + + + + textEditView + + + Various + + + + + textFormat + + + Form + + + + + CTRL+B + + + + + CTRL+I + + + + + CTRL+U + + + + + CTRL+P + + + + + CTRL+L + + + + + CTRL+E + + + + + CTRL+R + + + + + CTRL+J + + + + + treeView + + + Expand {} + + + + + Collapse {} + + + + + Expand All + + + + + Collapse All + + + + + welcome + + + Form + + + + + 1 + + + + + Templates + + + + + Empty + + + + + Novel + + + + + Novella + + + + + Short Story + + + + + Research paper + + + + + Demo projects + + + + + Add level + + + + + Add word count + + + + + Next time, automatically open last project + + + + + Open... + + + + + Recent + + + + + Create + + + + + 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 + + + + + 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/icons/Manuskript/Manuskript.icns b/icons/Manuskript/Manuskript.icns new file mode 100644 index 0000000..22a6da2 Binary files /dev/null and b/icons/Manuskript/Manuskript.icns differ diff --git a/icons/Manuskript/manuskript.ico b/icons/Manuskript/manuskript.ico new file mode 100644 index 0000000..8e7b42f Binary files /dev/null and b/icons/Manuskript/manuskript.ico differ 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"] +} diff --git a/makefile b/makefile index 0ab2ec5..1c619d7 100644 --- a/makefile +++ b/makefile @@ -20,32 +20,35 @@ profile: compile: cd manuskript && python3 setup.py build_ext --inplace - + callgraph: cd manuskript; pycallgraph myoutput -- main.py translation: pylupdate5 -noobsolete i18n/manuskript.pro - + linguist: linguist i18n/manuskript_fr.ts lrelease i18n/manuskript_fr.ts - + i18n: $(QMs) pyinstaller: python3 /usr/local/bin/pyinstaller manuskript.spec +snappkg: + snapcraft snap + stats: python3 libs/gh-release-stats.py olivierkes manuskript -d %_rc.py : %.qrc - pyrcc5 "$<" -o "$@" + pyrcc5 "$<" -o "$@" %.py : %.ui -# pyuic4 "$<" > "$@" - pyuic5 "$<" > "$@" - +# pyuic4 "$<" > "$@" + pyuic5 "$<" > "$@" + %.qm: %.ts lrelease "$<" diff --git a/manuskript.spec b/manuskript.spec index d375f65..fa119ef 100644 --- a/manuskript.spec +++ b/manuskript.spec @@ -2,7 +2,6 @@ block_cipher = None - a = Analysis(['bin/manuskript'], pathex=['.'], binaries=None, @@ -20,8 +19,10 @@ a = Analysis(['bin/manuskript'], win_no_prefer_redirects=False, win_private_assemblies=False, cipher=block_cipher) + pyz = PYZ(a.pure, a.zipped_data, cipher=block_cipher) + exe = EXE(pyz, a.scripts, exclude_binaries=True, @@ -29,11 +30,52 @@ exe = EXE(pyz, debug=False, strip=False, upx=True, - console=True ) + console=True, + icon=os.path.join(SPECPATH, 'icons/Manuskript/manuskript.ico') ) + +wexe = EXE(pyz, + a.scripts, + exclude_binaries=True, + name='manuskriptw', + debug=False, + strip=False, + upx=True, + console=False, + icon=os.path.join(SPECPATH, 'icons/Manuskript/manuskript.ico') ) + coll = COLLECT(exe, + wexe, a.binaries, a.zipfiles, a.datas, strip=False, upx=True, name='manuskript') + +version=os.environ['manuskript_version'] + +app = BUNDLE(coll, + name='manuskript.app', + icon=os.path.join(SPECPATH, 'icons/Manuskript/Manuskript.icns'), + bundle_identifier='ch.theologeek.manuskript', + version=version, + info_plist={ + 'NSPrincipalClass': 'NSApplication', + 'NSAppleScriptEnabled': False, + 'NSHighResolutionCapable': True, + 'CFBundleURLTypes': [{ + 'CFBundleURLName': 'MSK', + 'CFBundleTypeRole': 'Editor', + 'CFBundleURLSchemes': ['msk'], + }], + 'CFBundleDocumentTypes': [ + { + 'CFBundleTypeName': 'MSK', + 'CFBundleTypeIconFile': 'icons/Manuscript/manuskript', + 'CFBundleTypeExtensions': ['msk'], + 'CFBundleTypeRole': 'Editor', + 'LSHandlerRank': 'Owner' + } + ] + }, + ) \ No newline at end of file diff --git a/manuskript/converters/markdownConverter.py b/manuskript/converters/markdownConverter.py index f0e577b..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: @@ -26,12 +29,12 @@ class markdownConverter(abstractConverter): @classmethod def isValid(self): - return MD is not None + return MD != None @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..1a49aef 100644 --- a/manuskript/converters/pandocConverter.py +++ b/manuskript/converters/pandocConverter.py @@ -9,8 +9,10 @@ from PyQt5.QtWidgets import qApp, QMessageBox from PyQt5.QtGui import QCursor from manuskript.converters import abstractConverter -from manuskript.functions import mainWindow +from manuskript.functions import mainWindow, safeTranslate +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,9 +72,9 @@ class pandocConverter(abstractConverter): if stderr: err = stderr.decode("utf-8") - print(err) + LOGGER.error(err) QMessageBox.critical(mainWindow().dialog, - qApp.translate("Export", "Error"), err) + safeTranslate(qApp, "Export", "Error"), err) return None return stdout.decode("utf-8") diff --git a/manuskript/enums.py b/manuskript/enums.py index 4e94d0b..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 @@ -16,6 +16,8 @@ class Character(IntEnum): summaryPara = 8 summaryFull = 9 notes = 10 + pov = 11 + infos = 12 class Plot(IntEnum): name = 0 @@ -60,8 +62,24 @@ class Outline(IntEnum): textFormat = 15 revisions = 16 customIcon = 17 + charCount = 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/exporter/basic.py b/manuskript/exporter/basic.py index 22affbd..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,8 +60,8 @@ class basicExporter: elif self.isValid() == 1: run = self.customPath else: - print("Error: no command for", self.name) - return + 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/HTML.py b/manuskript/exporter/manuskript/HTML.py index 02cd6f2..ab18747 100644 --- a/manuskript/exporter/manuskript/HTML.py +++ b/manuskript/exporter/manuskript/HTML.py @@ -6,6 +6,8 @@ from PyQt5.QtWidgets import QPlainTextEdit, qApp, QTabWidget, QFrame, QTextEdit from manuskript.exporter.manuskript.markdown import markdown, markdownSettings from manuskript.ui.views.webView import webView from manuskript.ui.exporters.manuskript.plainTextSettings import exporterSettings +from manuskript.functions import safeTranslate + import os try: @@ -15,15 +17,16 @@ except ImportError: class HTML(markdown): name = "HTML" - description = qApp.translate("Export", "Basic HTML output using the Python module 'markdown'.") - InvalidBecause = qApp.translate("Export", "Python module 'markdown'.") + description = safeTranslate(qApp, "Export", "Basic HTML output using the Python module 'markdown'.") + InvalidBecause = safeTranslate(qApp, "Export", "Python module 'markdown'.") icon = "text-html" exportVarName = "lastManuskriptHTML" exportFilter = "HTML files (*.html);; Any files (*)" + exportDefaultSuffix = ".html" def isValid(self): - return MD is not None + return MD != None def settingsWidget(self): w = markdownSettings(self) @@ -50,12 +53,12 @@ class HTML(markdown): w1 = QPlainTextEdit() w1.setFrameShape(QFrame.NoFrame) w1.setReadOnly(True) - t.addTab(w0, qApp.translate("Export", "Markdown source")) - t.addTab(w1, qApp.translate("Export", "HTML Source")) + t.addTab(w0, safeTranslate(qApp, "Export", "Markdown source")) + t.addTab(w1, safeTranslate(qApp, "Export", "HTML Source")) if webView: w2 = webView() - t.addTab(w2, qApp.translate("Export", "HTML Output")) + t.addTab(w2, safeTranslate(qApp, "Export", "HTML Output")) t.setCurrentIndex(2) return t diff --git a/manuskript/exporter/manuskript/__init__.py b/manuskript/exporter/manuskript/__init__.py index f6337c6..7fa799b 100644 --- a/manuskript/exporter/manuskript/__init__.py +++ b/manuskript/exporter/manuskript/__init__.py @@ -6,13 +6,13 @@ from manuskript.exporter.basic import basicExporter, basicFormat from manuskript.exporter.manuskript.HTML import HTML from manuskript.exporter.manuskript.markdown import markdown from manuskript.exporter.manuskript.plainText import plainText -from manuskript.functions import appPath +from manuskript.functions import appPath, safeTranslate class manuskriptExporter(basicExporter): name = "Manuskript" - description = qApp.translate("Export", "Default exporter, provides basic formats used by other exporters.") + description = safeTranslate(qApp, "Export", "Default exporter, provides basic formats used by other exporters.") exportTo = [ plainText(), markdown(), diff --git a/manuskript/exporter/manuskript/markdown.py b/manuskript/exporter/manuskript/markdown.py index f338cb2..fb24e77 100644 --- a/manuskript/exporter/manuskript/markdown.py +++ b/manuskript/exporter/manuskript/markdown.py @@ -4,18 +4,19 @@ from PyQt5.QtGui import QTextCharFormat, QFont from PyQt5.QtWidgets import QPlainTextEdit, QGroupBox, qApp, QVBoxLayout, QCheckBox from manuskript.exporter.manuskript.plainText import plainText -from manuskript.functions import mainWindow +from manuskript.functions import mainWindow, safeTranslate from manuskript.ui.highlighters import MMDHighlighter from manuskript.ui.exporters.manuskript.plainTextSettings import exporterSettings class markdown(plainText): name = "Markdown" - description = qApp.translate("Export", """Just like plain text, excepts adds markdown titles. + description = safeTranslate(qApp, "Export", """Just like plain text, excepts adds markdown titles. Presupposes that texts are formatted in markdown.""") exportVarName = "lastManuskriptMarkdown" exportFilter = "Markdown files (*.md);; Any files (*)" + exportDefaultSuffix = ".md" icon = "text-x-markdown" def settingsWidget(self): @@ -56,7 +57,7 @@ class markdownSettings(exporterSettings): w = self.toolBox.widget(self.toolBox.count() - 1) self.grpMarkdown = QGroupBox(self.tr("Markdown")) self.grpMarkdown.setLayout(QVBoxLayout()) - self.chkMarkdownHighlighter = QCheckBox(qApp.translate("Export", "Preview with highlighter.")) + self.chkMarkdownHighlighter = QCheckBox(safeTranslate(qApp, "Export", "Preview with highlighter.")) self.grpMarkdown.layout().addWidget(self.chkMarkdownHighlighter) w.layout().insertWidget(w.layout().count() - 1, self.grpMarkdown) diff --git a/manuskript/exporter/manuskript/plainText.py b/manuskript/exporter/manuskript/plainText.py index 5bcb254..c809a85 100644 --- a/manuskript/exporter/manuskript/plainText.py +++ b/manuskript/exporter/manuskript/plainText.py @@ -2,18 +2,21 @@ # --!-- coding: utf8 --!-- import re from PyQt5.QtGui import QFont, QTextCharFormat -from PyQt5.QtWidgets import QPlainTextEdit, qApp, QFrame, QFileDialog +from PyQt5.QtWidgets import QPlainTextEdit, qApp, QFrame, QFileDialog, QMessageBox from manuskript.exporter.basic import basicFormat -from manuskript.functions import mainWindow +from manuskript.functions import mainWindow, getSaveFileNameWithSuffix, safeTranslate 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 - by manuskript, for example Fountain.""") + name = safeTranslate(qApp, "Export", "Plain text") + description = safeTranslate(qApp, "Export", """Simplest export to plain text. Allows you to use your own markup not understood + by Manuskript, for example Fountain.""") implemented = True requires = { "Settings": True, @@ -24,6 +27,7 @@ class plainText(basicFormat): # Default settings used in self.getExportFilename. For easy subclassing when exporting plaintext. exportVarName = "lastPlainText" exportFilter = "Text files (*.txt);; Any files (*)" + exportDefaultSuffix = ".txt" # qt ignores the period, but it is clearer in our code to have it def __init__(self): pass @@ -41,14 +45,19 @@ class plainText(basicFormat): def output(self, settingsWidget): settings = settingsWidget.getSettings() - return self.concatenate(mainWindow().mdlOutline.rootItem, settings) + try: + return self.concatenate(mainWindow().mdlOutline.rootItem, settings) + except re.error as e: + QMessageBox.warning(mainWindow().dialog, safeTranslate(qApp, "Export", "Error"), + safeTranslate(qApp, "Export", "Could not process regular expression: \n{}").format(str(e))) + return "" 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() @@ -59,30 +68,18 @@ class plainText(basicFormat): else: filename = "" - filename, filter = QFileDialog.getSaveFileName(settingsWidget.parent(), - caption=qApp.translate("Export", "Chose output file..."), - filter=filter, - directory=filename) + filename, filter = getSaveFileNameWithSuffix(settingsWidget.parent(), + caption=safeTranslate(qApp, "Export", "Choose output file…"), + filter=filter, + directory=filename, + defaultSuffix=self.exportDefaultSuffix) if filename: s[varName] = filename settingsWidget.settings["Output"] = s - # Auto adds extension if necessary - try: - # Extract the extension from "Some name (*.ext)" - ext = filter.split("(")[1].split(")")[0] - ext = ext.split(".")[1] - if " " in ext: # In case there are multiple extensions: "Images (*.png *.jpg)" - ext = ext.split(" ")[0] - except: - ext = "" - - if ext and filename[-len(ext)-1:] != ".{}".format(ext): - filename += "." + ext - - # Save settings - settingsWidget.writeSettings() + # Save settings + settingsWidget.writeSettings() return filename @@ -90,14 +87,15 @@ class plainText(basicFormat): settings = settingsWidget.getSettings() filename = self.getExportFilename(settingsWidget) - settingsWidget.writeSettings() - content = self.output(settingsWidget) - - if not content: - print("Error: content is empty. Nothing saved.") - return if filename: + settingsWidget.writeSettings() + content = self.output(settingsWidget) + + if not content: + LOGGER.error("No content. Nothing saved.") + return + with open(filename, "w", encoding='utf8') as f: f.write(content) diff --git a/manuskript/exporter/pandoc/HTML.py b/manuskript/exporter/pandoc/HTML.py index 2ad4c84..3a2c5af 100644 --- a/manuskript/exporter/pandoc/HTML.py +++ b/manuskript/exporter/pandoc/HTML.py @@ -1,21 +1,24 @@ #!/usr/bin/env python # --!-- coding: utf8 --!-- -from PyQt5.QtWidgets import qApp +from PyQt5.QtWidgets import qApp, QTextEdit from PyQt5.QtCore import QUrl from manuskript.exporter.manuskript import HTML as MskHTML from manuskript.exporter.pandoc.abstractPlainText import abstractPlainText +from manuskript.functions import safeTranslate + import os class HTML(abstractPlainText): name = "HTML" - description = qApp.translate("Export", """A little known format modestly used. You know, web sites for example.""") + description = safeTranslate(qApp, "Export", """A little known format modestly used. You know, web sites for example.""") icon = "text-html" exportVarName = "lastPandocHTML" toFormat = "html" exportFilter = "HTML files (*.html);; Any files (*)" + exportDefaultSuffix = ".html" requires = { "Settings": True, "Preview": True, @@ -40,4 +43,8 @@ class HTML(abstractPlainText): previewWidget.widget(0).setPlainText(src) self.preparesTextEditView(previewWidget.widget(1), settings["Preview"]["PreviewFont"]) previewWidget.widget(1).setPlainText(html) - previewWidget.widget(2).setHtml(html, QUrl.fromLocalFile(path)) + w2 = previewWidget.widget(2) + if isinstance(w2, QTextEdit): + w2.setHtml(html) + else: + w2.setHtml(html, QUrl.fromLocalFile(path)) diff --git a/manuskript/exporter/pandoc/PDF.py b/manuskript/exporter/pandoc/PDF.py index cbb135c..1bef6b7 100644 --- a/manuskript/exporter/pandoc/PDF.py +++ b/manuskript/exporter/pandoc/PDF.py @@ -7,7 +7,7 @@ from PyQt5.QtCore import QUrl from PyQt5.QtWidgets import qApp from manuskript.exporter.pandoc.abstractOutput import abstractOutput -from manuskript.functions import tempFile +from manuskript.functions import tempFile, safeTranslate from manuskript.ui.views.PDFViewer import PDFViewer @@ -15,14 +15,15 @@ class PDF(abstractOutput): """PDF Viewer using PDF.js. Cf. https://github.com/mozilla/pdf.js/wiki/Setup-PDF.js-in-a-website""" name = "PDF" - description = qApp.translate("Export", "Needs LaTeX to be installed.") - InvalidBecause = qApp.translate("Export", """a valid LaTeX installation. Pandoc recommendations can be found on: + description = safeTranslate(qApp, "Export", "Needs LaTeX to be installed.") + InvalidBecause = safeTranslate(qApp, "Export", """a valid LaTeX installation. Pandoc recommendations can be found on: pandoc.org/installing.html. If you want Unicode support, you need XeLaTeX.""") icon = "application-pdf" exportVarName = "lastPandocPDF" toFormat = "pdf" exportFilter = "PDF files (*.pdf);; Any files (*)" + exportDefaultSuffix = ".pdf" requires = { "Settings": True, "Preview": True, @@ -30,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/__init__.py b/manuskript/exporter/pandoc/__init__.py index cce3fed..5d67f94 100644 --- a/manuskript/exporter/pandoc/__init__.py +++ b/manuskript/exporter/pandoc/__init__.py @@ -11,13 +11,15 @@ from manuskript.exporter.pandoc.HTML import HTML from manuskript.exporter.pandoc.PDF import PDF from manuskript.exporter.pandoc.outputFormats import ePub, OpenDocument, DocX from manuskript.exporter.pandoc.plainText import reST, markdown, latex, OPML -from manuskript.functions import mainWindow +from manuskript.functions import mainWindow, safeTranslate +import logging +LOGGER = logging.getLogger(__name__) class pandocExporter(basicExporter): name = "Pandoc" - description = qApp.translate("Export", """

A universal document converter. Can be used to convert markdown to a wide range of other + description = safeTranslate(qApp, "Export", """

A universal document converter. Can be used to convert Markdown to a wide range of other formats.

Website: http://pandoc.org/

""") @@ -48,7 +50,14 @@ class pandocExporter(basicExporter): return "" def convert(self, src, args, outputfile=None): - args = [self.cmd] + args + if self.isValid() == 2: + run = self.cmd + elif self.isValid() == 1: + run = self.customPath + else: + LOGGER.error("No command for pandoc.") + return None + args = [run] + args if outputfile: args.append("--output={}".format(outputfile)) @@ -67,8 +76,11 @@ class pandocExporter(basicExporter): if var and item and item.text().strip(): args.append("--variable={}:{}".format(var, item.text().strip())) - # Add title metatadata required for pandoc >= 2.x - args.append("--metadata=title:{}".format(mainWindow().mdlFlatData.item(0, 0).text().strip())) + # Add title metadata required for pandoc >= 2.x + title = "Untitled" + if mainWindow().mdlFlatData.item(0, 0): + title = mainWindow().mdlFlatData.item(0, 0).text().strip() + args.append("--metadata=title:{}".format(title)) qApp.setOverrideCursor(QCursor(Qt.WaitCursor)) @@ -87,12 +99,16 @@ class pandocExporter(basicExporter): qApp.restoreOverrideCursor() if stderr or p.returncode != 0: - err = "ERROR on export" + "\n" \ - + "Return code" + ": %d\n" % (p.returncode) \ - + "Command and parameters" + ":\n%s\n" % (p.args) \ - + "Stderr content" + ":\n" + stderr.decode("utf-8") - print(err) - QMessageBox.critical(mainWindow().dialog, qApp.translate("Export", "Error"), err) + err_type = "ERROR" if p.returncode != 0 else "WARNING" + err = "%s on export\n" % err_type \ + + "Return code: %d\n" % p.returncode \ + + "Command and parameters:\n%s\n" % p.args \ + + "Stderr content:\n" + stderr.decode("utf-8") + if p.returncode != 0: + LOGGER.error(err) + QMessageBox.critical(mainWindow().dialog, safeTranslate(qApp, "Export", "Error"), err) + else: + LOGGER.warning(err) return None return stdout.decode("utf-8") diff --git a/manuskript/exporter/pandoc/abstractOutput.py b/manuskript/exporter/pandoc/abstractOutput.py index 880d319..506b0fa 100644 --- a/manuskript/exporter/pandoc/abstractOutput.py +++ b/manuskript/exporter/pandoc/abstractOutput.py @@ -10,6 +10,7 @@ class abstractOutput(abstractPlainText): toFormat = "SUBCLASSME" icon = "SUBCLASSME" exportFilter = "SUBCLASSME" + exportDefaultSuffix = ".SUBCLASSME" requires = { "Settings": True, "Preview": False, diff --git a/manuskript/exporter/pandoc/abstractPlainText.py b/manuskript/exporter/pandoc/abstractPlainText.py index 1fd277e..719d651 100644 --- a/manuskript/exporter/pandoc/abstractPlainText.py +++ b/manuskript/exporter/pandoc/abstractPlainText.py @@ -7,6 +7,10 @@ from PyQt5.QtWidgets import qApp, QVBoxLayout, QCheckBox, QWidget, QHBoxLayout, from manuskript.exporter.manuskript.markdown import markdown, markdownSettings from manuskript.ui.collapsibleGroupBox2 import collapsibleGroupBox2 +from manuskript.functions import safeTranslate + +import logging +LOGGER = logging.getLogger(__name__) class abstractPlainText(markdown): @@ -16,19 +20,22 @@ class abstractPlainText(markdown): toFormat = "SUBCLASSME" icon = "SUBCLASSME" exportFilter = "SUBCLASSME" + exportDefaultSuffix = ".SUBCLASSME" def __init__(self, exporter): self.exporter = exporter def settingsWidget(self): # Get pandoc major version to determine valid command line options - p = re.compile(r'pandoc (\d+)\..*') + p = re.compile(r'pandoc (\d+)\.(\d+).*') m = p.match(self.exporter.version()) if m: majorVersion = m.group(1) + minorVersion = m.group(2) else: majorVersion = "" - w = pandocSettings(self, majorVersion, toFormat=self.toFormat) + minorVersion = "" + w = pandocSettings(self, majorVersion, minorVersion, toFormat=self.toFormat) w.loadSettings() return w @@ -55,8 +62,35 @@ class abstractPlainText(markdown): previewWidget.setPlainText(r) +def versionAsInt(version): + if version is None: + return 0 + + try: + return int(version) + except ValueError: + return 0 + + +def versionToIntArray(version): + if version is None: + return [0, 0] + + p = re.compile(r'(\d+)\.(\d+).*') + m = p.match(version) + if m: + majorVersion = m.group(1) + minorVersion = m.group(2) + else: + majorVersion = "" + minorVersion = "" + + return [ versionAsInt(majorVersion), versionAsInt(minorVersion) ] + + class pandocSetting: - def __init__(self, arg, type, format, label, widget=None, default=None, min=None, max=None, vals=None, suffix=""): + def __init__(self, arg, type, format, label, widget=None, default=None, min=None, max=None, vals=None, suffix="", + minVersion=None, maxVersion=None, specific=False, toc=False): self.arg = arg # start with EXT for extensions self.type = type self.label = label @@ -69,12 +103,16 @@ class pandocSetting: self.max = max self.vals = vals.split("|") if vals else [] self.suffix = suffix + self.minVersion = versionToIntArray(minVersion) + self.maxVersion = versionToIntArray(maxVersion) + self.specific = specific + self.toc = toc def isValid(self, format): """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" @@ -87,120 +125,143 @@ class pandocSetting: return False + def isCompatible(self, majorVersion, minorVersion): + majorNumber = versionAsInt(majorVersion) + minorNumber = versionAsInt(minorVersion) + + if (majorNumber < self.minVersion[0]) or ((majorNumber == self.minVersion[0]) and + (minorNumber < self.minVersion[1])): + return False + + if (self.maxVersion[0] == 0) and (self.maxVersion[1] == 0): + return True + + return (majorNumber < self.maxVersion[0]) or ((majorNumber == self.maxVersion[0]) and + (minorNumber <= self.maxVersion[1])) + + def isSpecific(self): + return self.specific + + def isTOC(self): + return self.toc + class pandocSettings(markdownSettings): settingsList = { # General "standalone": pandocSetting("--standalone", "checkbox", "", - qApp.translate("Export", "Standalone document (not just a fragment)"), + safeTranslate(qApp, "Export", "Standalone document (not just a fragment)"), default=True), "TOC": pandocSetting("--toc", "checkbox", "", - qApp.translate("Export", "Include a table of contents.")), + safeTranslate(qApp, "Export", "Include a table of contents."), toc=True), "TOC-depth": pandocSetting("--toc-depth=", "number", "", - qApp.translate("Export", "Number of sections level to include in TOC: "), - default=3, min=1, max=6), + safeTranslate(qApp, "Export", "Number of sections level to include in TOC: "), + default=3, min=1, max=6, toc=True, minVersion="1.10"), # pandoc v1 only "smart": pandocSetting("--smart", "checkbox", "", - qApp.translate("Export", "Typographically correct output")), + safeTranslate(qApp, "Export", "Typographically correct output"), + maxVersion="1.19.2.4"), # pandoc v1 only "normalize": pandocSetting("--normalize", "checkbox", "", - qApp.translate("Export", "Normalize the document (cleaner)")), - "base-header": pandocSetting("--base-header-level=", "number", "", - qApp.translate("Export", "Specify the base level for headers: "), - default=1, min=1), + safeTranslate(qApp, "Export", "Normalize the document (cleaner)"), + minVersion="1.8", maxVersion="1.19.2.4"), + # pandoc v1.5 to 2.7.3 + "base-header": pandocSetting("--base-header-level=", "number", "", + safeTranslate(qApp, "Export", "Specify the base level for headers: "), + default=1, min=1, minVersion="1.5", maxVersion="2.7.3"), + # pandoc v2.8+ + "shift-heading": pandocSetting("--shift-heading-level-by=", "number", "", + safeTranslate(qApp, "Export", "Specify the base level for headers: "), + default=0, min=0, minVersion="2.8"), "disable-YAML": pandocSetting("EXT-yaml_metadata_block", "checkbox", "", - qApp.translate("Export", "Disable YAML metadata block.\nUse that if you get YAML related error.")), + safeTranslate(qApp, "Export", "Disable YAML metadata block.\nUse that if you get YAML related error."), + minVersion="1.12"), + "hard-line-breaks": pandocSetting("EXT-hard_line_block", "checkbox", "", + safeTranslate(qApp, "Export", "Enable the support on markdown for line break on new line."), + minVersion="1.16"), # Specific "ref-link": pandocSetting("--reference-links", "checkbox", "markdown rst", - qApp.translate("Export", "Use reference-style links instead of inline links")), + safeTranslate(qApp, "Export", "Use reference-style links instead of inline links"), + specific=True), + # pandoc v1.9 to v2.11.1 "atx": pandocSetting("--atx-headers", "checkbox", "markdown asciidoc", - qApp.translate("Export", "Use ATX-style headers")), + safeTranslate(qApp, "Export", "Use ATX-style headers"), specific=True, + minVersion="1.9", maxVersion="2.11.1"), + # pandoc v2.11.2+ + "atx-heading": pandocSetting("--markdown-headings=atx|setext", "checkbox", "markdown asciidoc", + safeTranslate(qApp, "Export", "Use ATX-style headers"), specific=True, + minVersion="2.11.2"), "self-contained": pandocSetting("--self-contained", "checkbox", "html", - qApp.translate("Export", "Self-contained HTML files, with no dependencies")), + safeTranslate(qApp, "Export", "Self-contained HTML files, with no dependencies"), + specific=True, minVersion="1.9"), "q-tags": pandocSetting("--html-q-tags", "checkbox", "html", - qApp.translate("Export", "Use tags for quotes in HTML")), + safeTranslate(qApp, "Export", "Use tags for quotes in HTML"), specific=True, + minVersion="1.10"), # pandoc v1 only "latex-engine": pandocSetting("--latex-engine=", "combo", "pdf", - qApp.translate("Export", "LaTeX engine used to produce the PDF."), - vals="pdflatex|lualatex|xelatex"), + safeTranslate(qApp, "Export", "LaTeX engine used to produce the PDF."), + vals="pdflatex|lualatex|xelatex", specific=True, + minVersion="1.9", maxVersion="1.19.2.4"), # pandoc v2 "pdf-engine": pandocSetting("--pdf-engine=", "combo", "pdf", - qApp.translate("Export", "LaTeX engine used to produce the PDF."), - vals="pdflatex|lualatex|xelatex"), + safeTranslate(qApp, "Export", "LaTeX engine used to produce the PDF."), + vals="pdflatex|lualatex|xelatex", minVersion="2.0", specific=True), "epub3": pandocSetting("EXTepub3", "checkbox", "epub", - qApp.translate("Export", "Convert to ePUB3")), - } - - pdfSettings = { + safeTranslate(qApp, "Export", "Convert to ePUB3"), specific=True, + minVersion="1.10"), # PDF "latex-ps": pandocSetting("--variable=papersize:", "combo", "pdf latex", # FIXME: does not work with default template - qApp.translate("Export", "Paper size:"), - vals="letter|A4|A5"), + safeTranslate(qApp, "Export", "Paper size:"), + vals="letter|A4|A5", specific=True, minVersion="1.4"), "latex-fs": pandocSetting("--variable=fontsize:", "number", "pdf latex", # FIXME: does not work with default template - qApp.translate("Export", "Font size:"), - min=8, max=88, default=12, suffix="pt"), + safeTranslate(qApp, "Export", "Font size:"), + min=8, max=88, default=12, suffix="pt", specific=True, minVersion="1.4"), "latex-class": pandocSetting("--variable=documentclass:", "combo", "pdf latex", - qApp.translate("Export", "Class:"), - vals="article|report|book|memoir"), + safeTranslate(qApp, "Export", "Class:"), + vals="article|report|book|memoir", specific=True, minVersion="1.4"), "latex-ls": pandocSetting("--variable=linestretch:", "combo", "pdf latex", - qApp.translate("Export", "Line spacing:"), - vals="1|1.25|1.5|2"), + safeTranslate(qApp, "Export", "Line spacing:"), + vals="1|1.25|1.5|2", specific=True, minVersion="1.4"), # FIXME: complete with http://pandoc.org/README.html#variables-for-latex } - def __init__(self, _format, majorVersion="", toFormat=None, parent=None): + def __init__(self, _format, majorVersion="", minorVersion="", toFormat=None, parent=None): markdownSettings.__init__(self, _format, parent) self.format = toFormat self.majorVersion = majorVersion + self.minorVersion = minorVersion + + dropSettings = [] + + for key, setting in self.settingsList.items(): + if not setting.isCompatible(self.majorVersion, self.minorVersion): + dropSettings.append(key) + + LOGGER.info(f'Using pandoc settings: {self.majorVersion}.{self.minorVersion}, dropping: {dropSettings}') + + for key in dropSettings: + self.settingsList.pop(key, None) w = QWidget(self) w.setLayout(QVBoxLayout()) self.grpPandocGeneral = self.collapsibleGroupBox(self.tr("General"), w) - - if majorVersion == "1": - # pandoc v1 only - self.addSettingsWidget("smart", self.grpPandocGeneral) - self.addSettingsWidget("normalize", self.grpPandocGeneral) - else: - # pandoc v2 - self.settingsList.pop("smart", None) - self.settingsList.pop("normalize", None) - self.addSettingsWidget("base-header", self.grpPandocGeneral) - self.addSettingsWidget("standalone", self.grpPandocGeneral) - self.addSettingsWidget("disable-YAML", self.grpPandocGeneral) - + self.grpPandocSpecific = self.collapsibleGroupBox(self.tr("Custom settings for {}").format(self.format), w) self.grpPandocTOC = self.collapsibleGroupBox(self.tr("Table of Content"), w) - self.addSettingsWidget("TOC", self.grpPandocTOC) - self.addSettingsWidget("TOC-depth", self.grpPandocTOC) - - self.grpPandocSpecific = self.collapsibleGroupBox(self.tr("Custom settings for {}").format(self.format), w) - - self.addSettingsWidget("ref-link", self.grpPandocSpecific) - self.addSettingsWidget("atx", self.grpPandocSpecific) - self.addSettingsWidget("self-contained", self.grpPandocSpecific) - self.addSettingsWidget("q-tags", self.grpPandocSpecific) - if majorVersion == "1": - # pandoc v1 only - self.addSettingsWidget("latex-engine", self.grpPandocSpecific) - self.settingsList.pop("pdf-engine", None) - else: - # pandoc v2 - self.settingsList.pop("latex-engine", None) - self.addSettingsWidget("pdf-engine", self.grpPandocSpecific) - self.addSettingsWidget("epub3", self.grpPandocSpecific) - - # PDF settings - self.settingsList.update(self.pdfSettings) - for i in self.pdfSettings: - self.addSettingsWidget(i, self.grpPandocSpecific) + for key, setting in self.settingsList.items(): + if setting.isTOC(): + self.addSettingsWidget(key, self.grpPandocTOC) + elif setting.isSpecific(): + self.addSettingsWidget(key, self.grpPandocSpecific) + else: + self.addSettingsWidget(key, self.grpPandocGeneral) self.toolBox.insertItem(self.toolBox.count() - 1, w, "Pandoc") self.toolBox.layout().setSpacing(0) # Not sure why this is needed, but hey... @@ -310,6 +371,8 @@ class pandocSettings(markdownSettings): extensions += "-yaml_metadata_block" if name == "epub3" and s.widget.isChecked(): toFormat = "epub3" + if name == "hard-line-breaks" and s.widget.isChecked(): + extensions += "+hard_line_breaks" r = ["--from=markdown" + extensions, "--to={}".format(toFormat)] diff --git a/manuskript/exporter/pandoc/outputFormats.py b/manuskript/exporter/pandoc/outputFormats.py index fb59401..c9997b7 100644 --- a/manuskript/exporter/pandoc/outputFormats.py +++ b/manuskript/exporter/pandoc/outputFormats.py @@ -3,34 +3,38 @@ from PyQt5.QtWidgets import qApp from manuskript.exporter.pandoc.abstractOutput import abstractOutput +from manuskript.functions import safeTranslate class ePub(abstractOutput): name = "ePub" - description = qApp.translate("Export", """Books that don't kill trees.""") + description = safeTranslate(qApp, "Export", """Books that don't kill trees.""") icon = "application-epub+zip" exportVarName = "lastPandocePub" toFormat = "epub" exportFilter = "ePub files (*.epub);; Any files (*)" + exportDefaultSuffix = ".epub" class OpenDocument(abstractOutput): name = "OpenDocument" - description = qApp.translate("Export", "OpenDocument format. Used by LibreOffice for example.") + description = safeTranslate(qApp, "Export", "OpenDocument format. Used by LibreOffice for example.") exportVarName = "lastPandocODT" toFormat = "odt" icon = "application-vnd.oasis.opendocument.text" exportFilter = "OpenDocument files (*.odt);; Any files (*)" + exportDefaultSuffix = ".odt" class DocX(abstractOutput): name = "DocX" - description = qApp.translate("Export", "Microsoft Office (.docx) document.") + description = safeTranslate(qApp, "Export", "Microsoft Office (.docx) document.") exportVarName = "lastPandocDocX" toFormat = "docx" icon = "application-vnd.openxmlformats-officedocument.wordprocessingml.document" exportFilter = "DocX files (*.docx);; Any files (*)" + exportDefaultSuffix = ".docx" diff --git a/manuskript/exporter/pandoc/plainText.py b/manuskript/exporter/pandoc/plainText.py index 501789b..cc06a4d 100644 --- a/manuskript/exporter/pandoc/plainText.py +++ b/manuskript/exporter/pandoc/plainText.py @@ -3,43 +3,47 @@ from PyQt5.QtWidgets import qApp from manuskript.exporter.pandoc.abstractPlainText import abstractPlainText +from manuskript.functions import safeTranslate class markdown(abstractPlainText): name = "Markdown" - description = qApp.translate("Export", """Export to markdown, using pandoc. Allows more formatting options + description = safeTranslate(qApp, "Export", """Export to markdown, using pandoc. Allows more formatting options than the basic manuskript exporter.""") icon = "text-x-markdown" exportVarName = "lastPandocMarkdown" toFormat = "markdown" exportFilter = "Markdown files (*.md);; Any files (*)" + exportDefaultSuffix = ".md" class reST(abstractPlainText): name = "reST" - description = qApp.translate("Export", """reStructuredText is a lightweight markup language.""") + description = safeTranslate(qApp, "Export", """reStructuredText is a lightweight markup language.""") exportVarName = "lastPandocreST" toFormat = "rst" icon = "text-plain" exportFilter = "reST files (*.rst);; Any files (*)" + exportDefaultSuffix = ".rst" class latex(abstractPlainText): name = "LaTeX" - description = qApp.translate("Export", """LaTeX is a word processor and document markup language used to create + description = safeTranslate(qApp, "Export", """LaTeX is a word processor and document markup language used to create beautiful documents.""") exportVarName = "lastPandocLatex" toFormat = "latex" icon = "text-x-tex" exportFilter = "Tex files (*.tex);; Any files (*)" + exportDefaultSuffix = ".tex" class OPML(abstractPlainText): name = "OPML" - description = qApp.translate("Export", """The purpose of this format is to provide a way to exchange information + description = safeTranslate(qApp, "Export", """The purpose of this format is to provide a way to exchange information between outliners and Internet services that can be browsed or controlled through an outliner.""") @@ -47,5 +51,5 @@ class OPML(abstractPlainText): toFormat = "opml" icon = "text-x-opml+xml" exportFilter = "OPML files (*.opml);; Any files (*)" - + exportDefaultSuffix = ".opml" diff --git a/manuskript/functions/__init__.py b/manuskript/functions/__init__.py index 9a1ea87..0d15af6 100644 --- a/manuskript/functions/__init__.py +++ b/manuskript/functions/__init__.py @@ -3,25 +3,62 @@ import os import re +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, QTextEdit +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 +def safeTranslate(qApp, group, text): + try: + return qApp.translate(group, text) + except: + return text + def wordCount(text): - t = text.strip().replace(" ", "\n").split("\n") - t = [l for l in t if l] - return len(t) + return len(re.findall(r"\S+", text)) + + +def charCount(text, use_spaces = True): + if use_spaces: + return len(re.findall(r"[\S ]", text)) + else: + return len(re.findall(r"\S", text)) + +validate_ok = lambda *args, **kwargs: True +def uiParse(input, default, converter, validator=validate_ok): + """ + uiParse is a utility function that intends to make it easy to convert + user input to data that falls in the range of expected values the + program is expecting to handle. + + It swallows all exceptions that happen during conversion. + The validator should return True to permit the converted value. + """ + result = default + try: + result = converter(input) + except: + pass # failed to convert + + # Whitelist default value in case default type differs from converter output. + if (result != default) and not validator(result): + result = default + return result def toInt(text): @@ -50,6 +87,7 @@ def toString(text): def drawProgress(painter, rect, progress, radius=0): from manuskript.ui import style as S + progress = toFloat(progress) # handle invalid input (issue #561) painter.setPen(Qt.NoPen) painter.setBrush(QColor(S.base)) # "#dddddd" painter.drawRoundedRect(rect, radius, radius) @@ -57,7 +95,7 @@ def drawProgress(painter, rect, progress, radius=0): painter.setBrush(QBrush(colorFromProgress(progress))) r2 = QRect(rect) - r2.setWidth(r2.width() * min(progress, 1)) + r2.setWidth(int(r2.width() * min(progress, 1))) painter.drawRoundedRect(r2, radius, radius) @@ -140,24 +178,25 @@ def randomColor(mix=None): b = randint(0, 255) if mix: - r = (r + mix.red()) / 2 - g = (g + mix.green()) / 2 - b = (b + mix.blue()) / 2 + r = int((r + mix.red()) / 2) + g = int((g + mix.green()) / 2) + b = int((b + mix.blue()) / 2) return QColor(r, g, b) -def mixColors(col1, col2, f=.5): +def mixColors(col1, col2, f=0.5): fromString = False if type(col1) == str: fromString = True col1 = QColor(col1) if type(col2) == str: col2 = QColor(col2) - f2 = 1-f - r = col1.red() * f + col2.red() * f2 - g = col1.green() * f + col2.green() * f2 - b = col1.blue() * f + col2.blue() * f2 + + f2 = 1.0 - f + r = int(col1.red() * f + col2.red() * f2) + g = int(col1.green() * f + col2.green() * f2) + b = int(col1.blue() * f + col2.blue() * f2) return QColor(r, g, b) if not fromString else QColor(r, g, b).name() @@ -372,7 +411,7 @@ def statusMessage(message, duration=5000, importance=1): MW.statusLabel.adjustSize() g = MW.statusLabel.geometry() # g.moveCenter(MW.mapFromGlobal(MW.geometry().center())) - s = MW.layout().spacing() / 2 + s = int(MW.layout().spacing() / 2) g.setLeft(s) g.moveBottom(MW.mapFromGlobal(MW.geometry().bottomLeft()).y() - s) MW.statusLabel.setGeometry(g) @@ -385,6 +424,28 @@ def openURL(url): """ QDesktopServices.openUrl(QUrl(url)) +def getSaveFileNameWithSuffix(parent, caption, directory, filter, options=None, selectedFilter=None, defaultSuffix=None): + """ + A reimplemented version of QFileDialog.getSaveFileName() because we would like to make use + of the QFileDialog.defaultSuffix property that getSaveFileName() does not let us adjust. + + Note: knowing the selected filter is not an invitation to change the chosen filename later. + """ + dialog = QFileDialog(parent=parent, caption=caption, directory=directory, filter=filter) + if options: + dialog.setOptions(options) + if defaultSuffix: + dialog.setDefaultSuffix(defaultSuffix) + dialog.setFileMode(QFileDialog.AnyFile) + if hasattr(dialog, 'setSupportedSchemes'): # Pre-Qt5.6 lacks this. + dialog.setSupportedSchemes(("file",)) + dialog.setAcceptMode(QFileDialog.AcceptSave) + if selectedFilter: + dialog.selectNameFilter(selectedFilter) + if (dialog.exec() == QFileDialog.Accepted): + return dialog.selectedFiles()[0], dialog.selectedNameFilter() + return None, None + def inspect(): """ Debugging tool. Call it to see a stack of calls up to that point. @@ -397,3 +458,127 @@ def inspect(): s.lineno, 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 + + +# 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" + +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/functions/spellchecker.py b/manuskript/functions/spellchecker.py new file mode 100644 index 0000000..b4ae0d2 --- /dev/null +++ b/manuskript/functions/spellchecker.py @@ -0,0 +1,677 @@ +#!/usr/bin/env python +# --!-- coding: utf8 --!-- + +import os, gzip, json, glob, re +from PyQt5.QtCore import QLocale +from collections import OrderedDict +from manuskript.functions import writablePath + +try: + import enchant +except ImportError: + enchant = None + +try: + import spellchecker as pyspellchecker +except ImportError: + pyspellchecker = None + +SYMSPELLPY_MIN_VERSION = "6.3.8" +try: + import symspellpy + import distutils.version + + if distutils.version.LooseVersion(symspellpy.__version__) < SYMSPELLPY_MIN_VERSION: + symspellpy = None + +except ImportError: + symspellpy = None + + +use_language_check = False + +try: + try: + import language_tool_python as languagetool + except: + import language_check as languagetool + use_language_check = True +except: + languagetool = None + +class Spellchecker: + dictionaries = {} + # In order of priority + implementations = [] + + def __init__(self): + pass + + @staticmethod + def registerImplementation(impl): + Spellchecker.implementations.append(impl) + + @staticmethod + def isInstalled(): + for impl in Spellchecker.implementations: + if impl.isInstalled(): + return True + return False + + @staticmethod + def supportedLibraries(): + libs = OrderedDict() + for impl in Spellchecker.implementations: + libs[impl.getLibraryName()] = impl.getLibraryRequirement() + return libs + + @staticmethod + def availableLibraries(): + ret = [] + for impl in Spellchecker.implementations: + if impl.isInstalled(): + ret.append(impl.getLibraryName()) + return ret + + @staticmethod + def availableDictionaries(): + dictionaries = OrderedDict() + for impl in Spellchecker.implementations: + if impl.isInstalled(): + dictionaries[impl.getLibraryName()] = impl.availableDictionaries() + return dictionaries + + @staticmethod + def normalizeDictName(lib, dictionary): + return "{}:{}".format(lib, dictionary) + + @staticmethod + def getDefaultDictionary(): + for impl in Spellchecker.implementations: + default = impl.getDefaultDictionary() + if default: + return Spellchecker.normalizeDictName(impl.getLibraryName(), default) + return None + + @staticmethod + def getLibraryURL(lib=None): + urls = {} + for impl in Spellchecker.implementations: + urls[impl.getLibraryName()] = impl.getLibraryURL() + if lib: + return urls.get(lib, None) + return urls + + @staticmethod + def getDictionary(dictionary): + if not dictionary: + dictionary = Spellchecker.getDefaultDictionary() + if not dictionary: + return None + + values = dictionary.split(":", 1) + if len(values) == 1: + (lib, name) = (Spellchecker.implementations[0].getLibraryName(), dictionary) + dictionary = Spellchecker.normalizeDictName(lib, name) + else: + (lib, name) = values + try: + d = Spellchecker.dictionaries.get(dictionary, None) + if d == None: + for impl in Spellchecker.implementations: + if impl.isInstalled() and lib == impl.getLibraryName(): + d = impl(name) + Spellchecker.dictionaries[dictionary] = d + break + return d + except Exception as e: + 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 + if not self._lang: + self._lang = self.getDefaultDictionary() + + self._customDict = set() + customPath = self.getCustomDictionaryPath() + try: + with gzip.open(customPath, "rt", encoding='utf-8') as f: + self._customDict = set(json.loads(f.read())) + for word in self._customDict: + self._dict.create_dictionary_entry(word, self.CUSTOM_COUNT) + except: + # If error loading the file, overwrite with empty dictionary + self._saveCustomDict() + + @property + def name(self): + return self._lang + + @staticmethod + def getLibraryName(): + raise NotImplemented + + @staticmethod + def getLibraryRequirement(): + return None + + @staticmethod + def getLibraryURL(): + raise NotImplemented + + @staticmethod + def isInstalled(): + raise NotImplemented + + @staticmethod + def getDefaultDictionary(): + raise NotImplemented + + @staticmethod + 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 + + def addWord(self, word): + word = word.lower() + if not word in self._customDict: + self._customDict.add(word) + self._saveCustomDict() + + def removeWord(self, word): + word = word.lower() + if word in self._customDict: + self._customDict.remove(word) + self._saveCustomDict() + + @classmethod + def getResourcesPath(cls): + path = os.path.join(writablePath(), "resources", "dictionaries", cls.getLibraryName()) + if not os.path.exists(path): + os.makedirs(path) + return path + + def getCustomDictionaryPath(self): + return os.path.join(self.getResourcesPath(), "{}.json.gz".format(self._lang)) + + def _saveCustomDict(self): + customPath = self.getCustomDictionaryPath() + with gzip.open(customPath, "wt") as f: + f.write(json.dumps(list(self._customDict))) + + +class EnchantDictionary(BasicDictionary): + + def __init__(self, name): + self._lang = name + if not (self._lang and enchant.dict_exists(self._lang)): + self._lang = self.getDefaultDictionary() + + self._dict = enchant.DictWithPWL(self._lang, self.getCustomDictionaryPath()) + + @staticmethod + def getLibraryName(): + return "PyEnchant" + + @staticmethod + def getLibraryURL(): + return "https://pypi.org/project/pyenchant/" + + @staticmethod + def isInstalled(): + return enchant != None + + @staticmethod + def availableDictionaries(): + if EnchantDictionary.isInstalled(): + return list(map(lambda i: str(i[0]), enchant.list_dicts())) + return [] + + @staticmethod + def getDefaultDictionary(): + if not EnchantDictionary.isInstalled(): + return None + + default_locale = enchant.get_default_language() + if default_locale and not enchant.dict_exists(default_locale): + default_locale = None + + if default_locale == None: + default_locale = QLocale.system().name() + if default_locale == None: + default_locale = self.availableDictionaries()[0] + + return default_locale + + def isMisspelled(self, word): + return not self._dict.check(word) + + def getSuggestions(self, word): + return self._dict.suggest(word) + + def isCustomWord(self, word): + return self._dict.is_added(word) + + def addWord(self, word): + self._dict.add(word) + + def removeWord(self, word): + self._dict.remove(word) + + def getCustomDictionaryPath(self): + return os.path.join(self.getResourcesPath(), "{}.txt".format(self.name)) + +class PySpellcheckerDictionary(BasicDictionary): + + def __init__(self, name): + BasicDictionary.__init__(self, name) + + self._dict = pyspellchecker.SpellChecker(self.name) + self._dict.word_frequency.load_words(self._customDict) + + @staticmethod + def getLibraryName(): + return "pyspellchecker" + + @staticmethod + def getLibraryURL(): + return "https://pyspellchecker.readthedocs.io/en/latest/" + + @staticmethod + def isInstalled(): + return pyspellchecker != None + + @staticmethod + def availableDictionaries(): + if PySpellcheckerDictionary.isInstalled(): + dictionaries = [] + files = glob.glob(os.path.join(pyspellchecker.__path__[0], "resources", "*.json.gz")) + for file in files: + dictionaries.append(os.path.basename(file)[:-8]) + return dictionaries + return [] + + @staticmethod + def getDefaultDictionary(): + if not PySpellcheckerDictionary.isInstalled(): + return None + + default_locale = QLocale.system().name() + if default_locale: + default_locale = default_locale[0:2] + if default_locale == None: + default_locale = "en" + + return default_locale + + def isMisspelled(self, word): + return len(self._dict.unknown([word])) > 0 + + def getSuggestions(self, word): + candidates = self._dict.candidates(word) + if word in candidates: + candidates.remove(word) + return candidates + + def addWord(self, word): + BasicDictionary.addWord(self, word) + self._dict.word_frequency.add(word.lower()) + + def removeWord(self, word): + BasicDictionary.removeWord(self, word) + self._dict.word_frequency.remove(word.lower()) + +class SymSpellDictionary(BasicDictionary): + CUSTOM_COUNT = 1 + DISTANCE = 2 + + def __init__(self, name): + BasicDictionary.__init__(self, name) + + self._dict = symspellpy.SymSpell(self.DISTANCE) + + cachePath = self.getCachedDictionaryPath() + try: + if not self._dict.load_pickle(cachePath, False): + raise Exception("Can't load cached dictionary. " + + "File might be corrupted or incompatible with installed symspellpy version") + except: + if pyspellchecker: + path = os.path.join(pyspellchecker.__path__[0], "resources", "{}.json.gz".format(self.name)) + if os.path.exists(path): + with gzip.open(path, "rt", encoding='utf-8') as f: + data = json.loads(f.read()) + for key in data: + self._dict.create_dictionary_entry(key, data[key]) + self._dict.save_pickle(cachePath, False) + for word in self._customDict: + self._dict.create_dictionary_entry(word, self.CUSTOM_COUNT) + + def getCachedDictionaryPath(self): + return os.path.join(self.getResourcesPath(), "{}.sym".format(self.name)) + + @staticmethod + def getLibraryName(): + return "symspellpy" + + @staticmethod + def getLibraryRequirement(): + return ">= " + SYMSPELLPY_MIN_VERSION + + @staticmethod + def getLibraryURL(): + return "https://github.com/mammothb/symspellpy" + + @staticmethod + def isInstalled(): + return symspellpy != None + + @classmethod + def availableDictionaries(cls): + if SymSpellDictionary.isInstalled(): + files = glob.glob(os.path.join(cls.getResourcesPath(), "*.sym")) + dictionaries = [] + for file in files: + dictionaries.append(os.path.basename(file)[:-4]) + for sp_dict in PySpellcheckerDictionary.availableDictionaries(): + if not sp_dict in dictionaries: + dictionaries.append(sp_dict) + return dictionaries + return [] + + @staticmethod + def getDefaultDictionary(): + if not SymSpellDictionary.isInstalled(): + return None + + return PySpellcheckerDictionary.getDefaultDictionary() + + def isMisspelled(self, word): + suggestions = self._dict.lookup(word.lower(), symspellpy.Verbosity.TOP) + if len(suggestions) > 0 and suggestions[0].distance == 0: + return False + # Try the word as is, since a dictionary might have uppercase letter as part + # of it's spelling ("I'm" or "January" for example) + suggestions = self._dict.lookup(word, symspellpy.Verbosity.TOP) + if len(suggestions) > 0 and suggestions[0].distance == 0: + return False + return True + + def getSuggestions(self, word): + upper = word.isupper() + upper1 = word[0].isupper() + suggestions = self._dict.lookup_compound(word, 2) + suggestions.extend(self._dict.lookup(word, symspellpy.Verbosity.CLOSEST)) + candidates = [] + for sug in suggestions: + if upper: + term = sug.term.upper() + elif upper1: + term = sug.term[0].upper() + sug.term[1:] + else: + term = sug.term + if sug.distance > 0 and not term in candidates: + candidates.append(term) + return candidates + + def addWord(self, word): + BasicDictionary.addWord(self, word) + self._dict.create_dictionary_entry(word.lower(), self.CUSTOM_COUNT) + + def removeWord(self, word): + BasicDictionary.removeWord(self, word) + # 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): + 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 + get_languagetool_match_errorLength(match) + + basic_match = BasicMatch(start, end) + basic_match.locqualityissuetype = get_languagetool_match_ruleIssueType(match) + basic_match.replacements = match.replacements + basic_match.msg = get_languagetool_match_message(match) + + matches.append(basic_match) + + return matches + + def update(self, tool, text): + if len(text) != self._length: + self._matches = self._buildMatches(tool, text) + +def get_languagetool_languages(tool): + if use_language_check: + return languagetool.get_languages() + else: + return tool._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): + + _tool = None + + def __init__(self, name): + BasicDictionary.__init__(self, name) + + if not (self._lang and self._lang in get_languagetool_languages(self.getTool())): + self._lang = self.getDefaultDictionary() + + self.tool = languagetool.LanguageTool(self._lang) + self._cache = {} + + @staticmethod + def getTool(): + if LanguageToolDictionary._tool == None: + try: + LanguageToolDictionary._tool = languagetool.LanguageTool() + except: + return None + + return LanguageToolDictionary._tool + + @staticmethod + def getLibraryName(): + return "LanguageTool" + + @staticmethod + def getLibraryURL(): + if use_language_check: + return "https://pypi.org/project/language-check/" + else: + return "https://pypi.org/project/language-tool-python/" + + @staticmethod + def isInstalled(): + if (languagetool != None) and (LanguageToolDictionary.getTool() != 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(): + tool = LanguageToolDictionary.getTool() + languages = list(get_languagetool_languages(tool)) + languages.sort() + return languages + + return [] + + @staticmethod + def getDefaultDictionary(): + if not LanguageToolDictionary.isInstalled(): + return None + + default_locale = get_languagetool_locale_language() + tool = LanguageToolDictionary.getTool() + + if default_locale and not default_locale in get_languagetool_languages(tool): + default_locale = None + + if default_locale == None: + default_locale = QLocale.system().name() + if default_locale == 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.registerImplementation(EnchantDictionary) +Spellchecker.registerImplementation(SymSpellDictionary) +Spellchecker.registerImplementation(PySpellcheckerDictionary) +Spellchecker.registerImplementation(LanguageToolDictionary) diff --git a/manuskript/importer/folderImporter.py b/manuskript/importer/folderImporter.py index 506a9b3..b6aa6c9 100644 --- a/manuskript/importer/folderImporter.py +++ b/manuskript/importer/folderImporter.py @@ -5,6 +5,8 @@ import os from manuskript.importer.abstractImporter import abstractImporter from manuskript.models import outlineItem from manuskript.enums import Outline +from manuskript.functions import safeTranslate + from PyQt5.QtWidgets import qApp @@ -44,7 +46,7 @@ class folderImporter(abstractImporter): fName, fExt = os.path.splitext(f) if fExt.lower() in ext: try: - with open(os.path.join(dirpath, f), "r") as fr: + with open(os.path.join(dirpath, f), "r", encoding="utf-8") as fr: content = fr.read() child = outlineItem(title=fName, _type="md", parent=item) child._data[Outline.text] = content @@ -94,27 +96,27 @@ class folderImporter(abstractImporter): # Add group group = self.addGroup(widget.toolBox.widget(0), - qApp.translate("Import", "Folder import")) + safeTranslate(qApp, "Import", "Folder import")) #group = cls.addPage(widget, "Folder import") self.addSetting("info", "label", - qApp.translate("Import", """

Info: Imports a whole + safeTranslate(qApp, "Import", """

Info: Imports a whole directory structure. Folders are added as folders, and plaintext documents within (you chose which ones by extension) are added as scene.

Only text files are supported (not images, binary or others).

""")) self.addSetting("ext", "text", - qApp.translate("Import", "Include only those extensions:"), + safeTranslate(qApp, "Import", "Include only those extensions:"), default="*.txt, *.md", - tooltip=qApp.translate("Import", "Comma separated values")), + tooltip=safeTranslate(qApp, "Import", "Comma separated values")), self.addSetting("sortItems", "checkbox", - qApp.translate("Import", "Sort items by name"), + safeTranslate(qApp, "Import", "Sort items by name"), default=True), self.addSetting("separateFolderFiles", "checkbox", - qApp.translate("Import", "Import folder then files"), + safeTranslate(qApp, "Import", "Import folder then files"), default=True), self.addSettingsTo(group) diff --git a/manuskript/importer/markdownImporter.py b/manuskript/importer/markdownImporter.py index 107931e..b0d0d7e 100644 --- a/manuskript/importer/markdownImporter.py +++ b/manuskript/importer/markdownImporter.py @@ -4,6 +4,8 @@ from manuskript.importer.abstractImporter import abstractImporter from manuskript.models import outlineItem from manuskript.enums import Outline +from manuskript.functions import safeTranslate + from PyQt5.QtWidgets import qApp import re, os @@ -63,7 +65,7 @@ class markdownImporter(abstractImporter): if not fromString: # Read file - with open(filePath, "r") as f: + with open(filePath, "r", encoding="utf-8") as f: txt = f.read() else: txt = fromString @@ -173,11 +175,11 @@ class markdownImporter(abstractImporter): # Add group group = self.addGroup(widget.toolBox.widget(0), - qApp.translate("Import", "Markdown import")) + safeTranslate(qApp, "Import", "Markdown import")) #group = cls.addPage(widget, "Folder import") self.addSetting("info", "label", - qApp.translate("Import", """Info: A very simple + safeTranslate(qApp, "Import", """Info: A very simple parser that will go through a markdown document and create items for each titles.
 """)) diff --git a/manuskript/importer/mindMapImporter.py b/manuskript/importer/mindMapImporter.py index 31155c9..03a7cc4 100644 --- a/manuskript/importer/mindMapImporter.py +++ b/manuskript/importer/mindMapImporter.py @@ -5,10 +5,11 @@ from PyQt5.QtWidgets import qApp, QMessageBox from manuskript.models import outlineItem from manuskript.enums import Outline from lxml import etree as ET -from manuskript.functions import mainWindow +from manuskript.functions import mainWindow, safeTranslate from manuskript.importer.abstractImporter import abstractImporter from manuskript.converters import HTML2MD, HTML2PlainText + class mindMapImporter(abstractImporter): name = "Mind Map" @@ -47,15 +48,15 @@ class mindMapImporter(abstractImporter): node = root.find("node") items = [] - if node is not None: + if node != None: items.extend(self.parseItems(node, parentItem)) ret = True if not ret: QMessageBox.critical( settingsWidget, - qApp.translate("Import", "Mind Map Import"), - qApp.translate("Import", "This does not appear to be a valid Mind Map file.")) + safeTranslate(qApp, "Import", "Mind Map Import"), + safeTranslate(qApp, "Import", "This does not appear to be a valid Mind Map file.")) return None @@ -68,10 +69,10 @@ class mindMapImporter(abstractImporter): # Add group group = self.addGroup(widget.toolBox.widget(0), - qApp.translate("Import", "Mind Map import")) + safeTranslate(qApp, "Import", "Mind Map import")) self.addSetting("importTipAs", "combo", - qApp.translate("Import", "Import tip as:"), + safeTranslate(qApp, "Import", "Import tip as:"), vals="Text|Folder", ) @@ -86,7 +87,7 @@ class mindMapImporter(abstractImporter): # Title title = underElement.get('TEXT', "").replace("\n", " ") if not title: - title = qApp.translate("Import", "Untitled") + title = safeTranslate(qApp, "Import", "Untitled") item = outlineItem(parent=parentItem, title=title) items.append(item) @@ -97,7 +98,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 +131,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..4cc537d 100644 --- a/manuskript/importer/opmlImporter.py +++ b/manuskript/importer/opmlImporter.py @@ -5,9 +5,10 @@ from PyQt5.QtWidgets import qApp, QMessageBox from manuskript.models import outlineItem from manuskript.enums import Outline from lxml import etree as ET -from manuskript.functions import mainWindow +from manuskript.functions import mainWindow, safeTranslate from manuskript.importer.abstractImporter import abstractImporter + class opmlImporter(abstractImporter): name = "OPML" @@ -34,8 +35,8 @@ class opmlImporter(abstractImporter): opmlContent = opmlFile.read() except: QMessageBox.critical(settingsWidget, - qApp.translate("Import", "OPML Import"), - qApp.translate("Import", "File open failed.")) + safeTranslate(qApp, "Import", "OPML Import"), + safeTranslate(qApp, "Import", "File open failed.")) return None elif fromString == "": @@ -52,10 +53,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 @@ -63,8 +64,8 @@ class opmlImporter(abstractImporter): if not ret: QMessageBox.critical( settingsWidget, - qApp.translate("Import", "OPML Import"), - qApp.translate("Import", "This does not appear to be a valid OPML file.")) + safeTranslate(qApp, "Import", "OPML Import"), + safeTranslate(qApp, "Import", "This does not appear to be a valid OPML file.")) return None @@ -74,19 +75,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 +123,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 023a4b0..e2f9267 100644 --- a/manuskript/importer/pandocImporters.py +++ b/manuskript/importer/pandocImporters.py @@ -5,6 +5,8 @@ from manuskript.importer.abstractImporter import abstractImporter from manuskript.exporter.pandoc import pandocExporter from manuskript.importer.opmlImporter import opmlImporter from manuskript.importer.markdownImporter import markdownImporter +from manuskript.functions import safeTranslate + from PyQt5.QtWidgets import qApp @@ -38,6 +40,9 @@ class pandocImporter(abstractImporter): r = pandocExporter().run(args) + if r == None: + return None + if formatTo == "opml": return self.opmlImporter.startImport("", parentItem, settingsWidget, fromString=r) @@ -52,10 +57,10 @@ class pandocImporter(abstractImporter): # Add group group = self.addGroup(widget.toolBox.widget(0), - qApp.translate("Import", "Pandoc import")) + safeTranslate(qApp, "Import", "Pandoc import")) self.addSetting("info", "label", - qApp.translate("Import", """Info: Manuskript can + safeTranslate(qApp, "Import", """Info: Manuskript can import from markdown or OPML. Pandoc will convert your document to either (see option below), and then it will be imported in manuskript. One or the other @@ -63,14 +68,14 @@ class pandocImporter(abstractImporter):
 """)) self.addSetting("formatTo", "combo", - qApp.translate("Import", "Import using:"), + safeTranslate(qApp, "Import", "Import using:"), vals="markdown|OPML") self.addSetting("wrap", "combo", - qApp.translate("Import", "Wrap lines:"), + safeTranslate(qApp, "Import", "Wrap lines:"), vals="auto|none|preserve", default="none", - tooltip=qApp.translate("Import", """

Should pandoc create + tooltip=safeTranslate(qApp, "Import", """

Should pandoc create cosmetic / non-semantic line-breaks?

auto: wraps at 72 characters.
none: no line wrap.
diff --git a/manuskript/loadSave.py b/manuskript/loadSave.py index e603a85..1adfe4c 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): @@ -54,13 +56,13 @@ def loadProject(project): # Not a zip else: - with open(project, "r") as f: + 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) + return v0.loadProject(project) else: - v1.loadProject(project, zip=isZip) + return v1.loadProject(project, zip=isZip) diff --git a/manuskript/load_save/version_0.py b/manuskript/load_save/version_0.py index 2e31150..e6ca5fc 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: @@ -165,10 +168,13 @@ def loadProject(project): else: errors.append("outline.xml") - if "settings.pickle" in files: - settings.load(files["settings.pickle"], fromString=True) + if "settings.txt" in files: + settings.load(files["settings.txt"], fromString=True, protocol=0) else: - errors.append("settings.pickle") + errors.append("settings.txt") + + if "settings.pickle" in files: + LOGGER.info("Pickle settings files are no longer supported for security reasons. You can delete it from your data.") return errors @@ -178,7 +184,10 @@ def loadFilesFromZip(zipname): zf = zipfile.ZipFile(zipname) files = {} for f in zf.namelist(): - files[os.path.normpath(f)] = zf.read(f) + # Some archiving programs (e.g. 7-Zip) also store entries for the directories when + # creating an archive. We have no use for these entries; skip them entirely. + if f[-1:] != '/': + files[os.path.normpath(f)] = zf.read(f) return files @@ -186,13 +195,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) @@ -207,7 +216,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 048ae26..b2ad66c 100644 --- a/manuskript/load_save/version_1.py +++ b/manuskript/load_save/version_1.py @@ -15,6 +15,7 @@ from collections import OrderedDict from PyQt5.QtCore import Qt, QModelIndex from PyQt5.QtGui import QColor, QStandardItem +from PyQt5.QtWidgets import QListWidgetItem from manuskript import settings from manuskript.enums import Character, World, Plot, PlotStep, Outline @@ -25,6 +26,10 @@ from lxml import etree as ET from manuskript.load_save.version_0 import loadFilesFromZip from manuskript.models.characterModel import CharacterInfo from manuskript.models import outlineItem +from manuskript.ui.listDialog import ListDialog + +import logging +LOGGER = logging.getLogger(__name__) try: import zlib # Used with zipfile for compression @@ -40,6 +45,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,11 +53,9 @@ 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. -LOG = False def formatMetaData(name, value, tabLength=10): @@ -91,11 +95,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 @@ -106,10 +105,10 @@ 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") + LOGGER.info("Saving to: %s", "zip" if zip else "folder") # List of files to be written files = [] @@ -118,7 +117,14 @@ def saveProject(zip=None): # List of files to be moved moves = [] + # MainWindow interaction things. mw = mainWindow() + project = mw.currentProject + + # Sanity check (see PR-583): make sure we actually have a current project. + if project == None: + LOGGER.error("Cannot save project because there is no current project in the UI.") + return False # File format version files.append(("MANUSKRIPT", "1")) @@ -190,7 +196,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" @@ -295,13 +301,11 @@ def saveProject(zip=None): files.append(("settings.txt", settings.save(protocol=0))) - project = mw.currentProject - # We check if the file exist and we have write access. If the file does - # not exists, we check the parent folder, because it might be a new project. + # 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 #################################################################################################################### @@ -325,8 +329,8 @@ def saveProject(zip=None): # Save to plain text else: - global cache + filesWithPermissionErrors = list() # Project path dir = os.path.dirname(project) @@ -335,7 +339,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: @@ -352,7 +356,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 @@ -362,7 +366,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 @@ -373,21 +377,29 @@ 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: - f.write(content) + try: + with open(filename, "wb") as f: + f.write(content) + except PermissionError as e: + LOGGER.error("Cannot open file " + filename + " for writing: " + e.strerror) + filesWithPermissionErrors.append(filename) else: - with open(filename, "w", encoding='utf8') as f: - f.write(content) + try: + with open(filename, "w", encoding='utf8') as f: + f.write(content) + except PermissionError as e: + LOGGER.error("Cannot open file " + filename + " for writing: " + e.strerror) + filesWithPermissionErrors.append(filename) cache[path] = content # 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) @@ -404,15 +416,30 @@ 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 # Write the project file's content - with open(project, "w", encoding='utf8') as f: - f.write("1") # Format number + try: + with open(project, "w", encoding='utf8') as f: + f.write("1") # Format number + except PermissionError as e: + LOGGER.error("Cannot open file " + project + " for writing: " + e.strerror) + filesWithPermissionErrors.append(project) + if len(filesWithPermissionErrors) > 0: + dlg = ListDialog(mw) + dlg.setModal(True) + dlg.setWindowTitle(dlg.tr("Files not saved")) + dlg.label.setText(dlg.tr("The following files were not saved and appear to be open in another program")) + for f in filesWithPermissionErrors: + QListWidgetItem(f, dlg.listWidget) + dlg.open() + + if project in filesWithPermissionErrors: + return False return True @@ -530,8 +557,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 @@ -547,7 +574,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 @@ -620,12 +647,13 @@ def loadProject(project, zip=None): """ mw = mainWindow() - errors = [] + errors = list() + filesWithPermissionErrors = list() #################################################################################################################### # 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) @@ -659,8 +687,14 @@ def loadProject(project, zip=None): with open(os.path.join(dirpath, f), "rb") as fo: files[os.path.join(p, f)] = fo.read() else: - with open(os.path.join(dirpath, f), "r", encoding="utf8") as fo: - files[os.path.join(p, f)] = fo.read() + try: + filename = os.path.join(dirpath, f) + with open(filename, "r", encoding="utf8") as fo: + files[os.path.join(p, f)] = fo.read() + except PermissionError as e: + LOGGER.error("Cannot open file " + filename + ": " + e.strerror) + errors.append(fo) + filesWithPermissionErrors.append(filename) # Saves to cache (only if we loaded from disk and not zip) global cache @@ -689,7 +723,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 @@ -697,7 +731,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)) @@ -710,11 +744,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") @@ -756,7 +790,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"]) @@ -765,7 +799,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(): @@ -792,7 +826,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") @@ -808,7 +842,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() @@ -834,7 +868,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 @@ -842,14 +876,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 @@ -885,6 +919,15 @@ def loadProject(project, zip=None): # Check IDS mdl.rootItem.checkIDs() + if len(filesWithPermissionErrors) > 0: + dlg = ListDialog(mw) + dlg.setModal(True) + dlg.setWindowTitle(dlg.tr("Files not loaded")) + dlg.label.setText(dlg.tr("The following files were not loaded and appear to be open in another program")) + for f in filesWithPermissionErrors: + QListWidgetItem(f, dlg.listWidget) + dlg.open() + return errors @@ -901,24 +944,29 @@ def addTextItems(mdl, odict, parent=None): for k in odict: # In case k is a folder: - if type(odict[k]) == OrderedDict and "folder.txt" in odict[k]: + 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"] # Read content addTextItems(mdl, odict[k], parent=item) - # 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())) - item = outlineFromMMD(odict[k], parent=parent) - item._lastPath = odict[k + ":lastPath"] + if (":lastPath" in k) or (k == "folder.txt"): + continue - elif not ":lastPath" in k and k != "folder.txt": - print("* Strange things in file {}".format(k)) + # k is not a folder + if type(odict[k]) == str: + try: + LOGGER.debug("{}* Adds {} to {} (file)".format(" " * parent.level(), k, parent.title())) + item = outlineFromMMD(odict[k], parent=parent) + item._lastPath = odict[k + ":lastPath"] + except KeyError: + LOGGER.error("Failed to add file " + str(k)) + else: + LOGGER.debug("Strange things in file %s".format(k)) def outlineFromMMD(text, parent): @@ -929,9 +977,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__: @@ -968,17 +1018,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"]) @@ -990,7 +1042,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) diff --git a/manuskript/logging.py b/manuskript/logging.py new file mode 100644 index 0000000..5555e73 --- /dev/null +++ b/manuskript/logging.py @@ -0,0 +1,379 @@ +# -*- 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. + +import os +import sys +import time +import logging +import pathlib + +from manuskript.functions import writablePath +from importlib import import_module +from pprint import pformat + +LOGGER = logging.getLogger(__name__) + +LOGFORMAT_CONSOLE = "%(levelname)s> %(message)s" +LOGFORMAT_FILE = "%(asctime)s - %(name)s - %(levelname)s - %(message)s" + +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) + + # Any exceptions we did not account for need to be logged. + logFutureExceptions() + + 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. + + 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 = 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 + # 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', encoding='utf-8') + 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) + + +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 +# 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 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 + msg_type_index = int(msg_type) + log_levels = [logging.DEBUG, logging.INFO, logging.WARNING, logging.ERROR, logging.FATAL] + if (msg_type_index >= 0) and (msg_type_index < len(log_levels)): + log_level = log_levels[msg_type_index] + else: + log_level = log_levels[-1] + 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) + + +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 logRuntimeInformation(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()) + + # 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 + logger.info("Manuskript %s%s (Python %s)", getVersion(), + getGitRevisionAsString(getManuskriptPath(), short=True), + 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 294ba98..3f36d55 100644 --- a/manuskript/main.py +++ b/manuskript/main.py @@ -2,26 +2,47 @@ import faulthandler import os +import platform import sys +import signal -import manuskript.ui.views.webView -from PyQt5.QtCore import QLocale, QTranslator, QSettings -from PyQt5.QtGui import QIcon -from PyQt5.QtWidgets import QApplication, qApp +import manuskript.logging +from PyQt5.QtCore import QLocale, QTranslator, QSettings, Qt +from PyQt5.QtGui import QIcon, QColor, QPalette +from PyQt5.QtWidgets import QApplication, qApp, QStyleFactory from manuskript.functions import appPath, writablePath from manuskript.version import getVersion -faulthandler.enable() +try: + faulthandler.enable() +except AttributeError: + print("Faulthandler failed") -def prepare(tests=False): +import logging +LOGGER = logging.getLogger(__name__) + +def prepare(arguments, tests=False): + # Qt WebEngine demands this attribute be set _before_ we create our QApplication object. + QApplication.setAttribute(Qt.AA_ShareOpenGLContexts, True) + + # Create the foundation that provides our Qt application with its event loop. 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())) + # 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() + + # Log all the versions for less headaches. + manuskript.logging.logRuntimeInformation() + icon = QIcon() for i in [16, 32, 64, 128, 256, 512]: icon.addFile(appPath("icons/Manuskript/icon-{}px.png".format(i))) @@ -36,40 +57,117 @@ def prepare(tests=False): app.setStyle(style) # Translation process - locale = QLocale.system().name() - appTranslator = QTranslator(app) + # By default: locale - def extractLocale(filename): - # len("manuskript_") = 13, len(".qm") = 3 - return filename[11:-3] if len(filename) >= 16 else "" - def tryLoadTranslation(translation, source): - if appTranslator.load(appPath(os.path.join("i18n", translation))): + """Tries to load and activate a given translation for use.""" + if appTranslator.load(translation, appPath("i18n")): app.installTranslator(appTranslator) - print(app.tr("Loaded translation from {}: {}.").format(source, 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: + # * i18n/manuskript_en_US.qm.qm + # * i18n/manuskript_en_US.qm + # * i18n/manuskript_en_US + # * i18n/manuskript_en.qm + # * i18n/manuskript_en + # * i18n/manuskript.qm + # * i18n/manuskript + # We have no way to determining what it eventually went with, so mind your + # filenames when you observe strange behaviour with the loaded translations. return True else: - print(app.tr("Note: No translator found or loaded from {} for locale {}."). - format(source, extractLocale(translation))) + LOGGER.info("No translation found or loaded. ({})".format(translation)) return False - # Load translation from settings - translation = "" - if settings.contains("applicationTranslation"): - translation = settings.value("applicationTranslation") - print("Found translation in settings:", translation) + def activateTranslation(translation, source): + """Loads the most suitable translation based on the available information.""" + using_builtin_translation = True - if (translation != "" and not tryLoadTranslation(translation, "settings")) or translation == "": - # load from settings failed or not set, fallback - translation = "manuskript_{}.qm".format(locale) - tryLoadTranslation(translation, "system locale") + if (translation != ""): # empty string == 'no translation, use builtin' + if isinstance(translation, str): + if tryLoadTranslation(translation, source): + using_builtin_translation = False + else: # A list of language codes to try. Once something works, we're done. + # This logic is loosely based on the working of QTranslator.load(QLocale, ...); + # it allows us to more accurately detect the language used for the user interface. + for language_code in translation: + lc = language_code.replace('-', '_') + if lc.lower() == 'en_US'.lower(): + break + if tryLoadTranslation("manuskript_{}.qm".format(lc), source): + using_builtin_translation = False + break + + if using_builtin_translation: + LOGGER.info("Using the builtin translation. (U.S. English)") + + # Load application translation + translation = "" + source = "default" + if settings.contains("applicationTranslation"): + # Use the language configured by the user. + translation = settings.value("applicationTranslation") + source = "user setting" + else: + # Auto-detect based on system locale. + translation = QLocale().uiLanguages() + source = "available ui languages" + + LOGGER.info("Preferred translation: {} (based on {})".format(("builtin" if translation == "" else translation), source)) + activateTranslation(translation, source) + + def respectSystemDarkThemeSetting(): + """Adjusts the Qt theme to match the OS 'dark theme' setting configured by the user.""" + if platform.system() != 'Windows': + return + + # 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) + if themeSettings.value("AppsUseLightTheme") == 0: + darkPalette = QPalette() + 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.AlternateBase, darkColor) + darkPalette.setColor(QPalette.ToolTipBase, Qt.white) + darkPalette.setColor(QPalette.ToolTipText, Qt.white) + darkPalette.setColor(QPalette.Text, Qt.white) + darkPalette.setColor(QPalette.Disabled, QPalette.Text, disabledColor) + darkPalette.setColor(QPalette.Button, darkColor) + darkPalette.setColor(QPalette.ButtonText, Qt.white) + darkPalette.setColor(QPalette.Disabled, QPalette.ButtonText, disabledColor) + darkPalette.setColor(QPalette.BrightText, Qt.red) + darkPalette.setColor(QPalette.Link, QColor(42, 130, 218)) + + darkPalette.setColor(QPalette.Highlight, QColor(42, 130, 218)) + darkPalette.setColor(QPalette.HighlightedText, Qt.black) + darkPalette.setColor(QPalette.Disabled, QPalette.HighlightedText, disabledColor) + + # Fixes ugly (not to mention hard to read) disabled menu items. + # Source: https://bugreports.qt.io/browse/QTBUG-10322?focusedCommentId=371060#comment-371060 + darkPalette.setColor(QPalette.Disabled, QPalette.Light, Qt.transparent) + + app.setPalette(darkPalette) + + # 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; }") + + respectSystemDarkThemeSetting() QIcon.setThemeSearchPaths(QIcon.themeSearchPaths() + [appPath("icons")]) QIcon.setThemeName("NumixMsk") - # Font siue + # Font size if settings.contains("appFontSize"): f = qApp.font() f.setPointSize(settings.value("appFontSize", type=int)) @@ -84,34 +182,135 @@ def prepare(tests=False): MW._defaultCursorFlashTime = qApp.cursorFlashTime() # Command line project - if len(sys.argv) > 1 and sys.argv[1][-4:] == ".msk": - if os.path.exists(sys.argv[1]): - path = os.path.abspath(sys.argv[1]) - MW._autoLoadProject = path + if arguments.filename is not None and arguments.filename[-4:] == ".msk": + # The file is verified to already exist during argument parsing. + # Our ".msk" check has been moved there too for better feedback, + # but leaving it here to err on the side of caution. + path = os.path.abspath(arguments.filename) + MW._autoLoadProject = path return app, MW -def launch(MW = None): - if MW is None: +def launch(arguments, app, MW = None): + if MW == None: from manuskript.functions import mainWindow MW = mainWindow() MW.show() - qApp.exec_() + # Support for IPython Jupyter QT Console as a debugging aid. + # Last argument must be --console to enable it + # 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 arguments.console: + try: + from IPython.lib.kernel import connect_qtconsole + from ipykernel.kernelapp import IPKernelApp + # Only to ensure matplotlib QT mainloop integration is available + import matplotlib + + # 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']) + + # Create the console in a new process and connect + console = connect_qtconsole(kernel.abs_connection_file, profile=kernel.profile) + + # Export MW and app variable to the console's namespace + kernel.shell.user_ns['MW'] = MW + kernel.shell.user_ns['app'] = app + kernel.shell.user_ns['kernel'] = kernel + kernel.shell.user_ns['console'] = console + + # When we close manuskript, make sure we close the console process and stop the + # IPython kernel's mainloop, otherwise the app will never finish. + def console_cleanup(): + app.quit() + console.kill() + kernel.io_loop.stop() + + app.lastWindowClosed.connect(console_cleanup) + + # Very important, IPython-specific step: this gets GUI event loop + # integration going, and it replaces calling app.exec_() + kernel.start() + except Exception as e: + print("Console mode requested but error initializing IPython : %s" % str(e)) + print("To make use of the Interactive IPython QT Console, make sure you install : ") + print("$ pip3 install ipython qtconsole matplotlib") + qApp.exec_() + else: + qApp.exec_() qApp.deleteLater() + +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.') + + return handler + + +def setup_signal_handlers(MW): + signal.signal(signal.SIGINT, sigint_handler("SIGINT", MW)) + signal.signal(signal.SIGTERM, sigint_handler("SIGTERM", MW)) + + +def is_valid_project(parser, arg): + if arg[-4:] != ".msk": + parser.error("only manuskript projects (.msk) are supported!") + if not os.path.isfile(arg): + parser.error("the project %s does not exist!" % arg) + else: + return arg + + +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", + type=lambda x: is_valid_project(parser, x)) + + 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[1:]) + # 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(MW) + launch(arguments, app, MW) + if __name__ == "__main__": run() diff --git a/manuskript/mainWindow.py b/manuskript/mainWindow.py index 8dae33d..5a02fbc 100644 --- a/manuskript/mainWindow.py +++ b/manuskript/mainWindow.py @@ -1,19 +1,22 @@ #!/usr/bin/env python # --!-- coding: utf8 --!-- -import imp +import importlib import os +import re -from PyQt5.QtCore import (pyqtSignal, QSignalMapper, QTimer, QSettings, Qt, +from PyQt5.Qt import qVersion, PYQT_VERSION_STR +from PyQt5.QtCore import (pyqtSignal, QSignalMapper, QTimer, QSettings, Qt, QPoint, 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 + QLabel, QDockWidget, QWidget, QMessageBox, QLineEdit 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 @@ -35,15 +38,13 @@ from manuskript.ui.statusLabel import statusLabel # Spellcheck support from manuskript.ui.views.textEditView import textEditView +from manuskript.functions import Spellchecker -try: - import enchant -except ImportError: - enchant = None - +import logging +LOGGER = logging.getLogger(__name__) class MainWindow(QMainWindow, Ui_MainWindow): - dictChanged = pyqtSignal(str) + # dictChanged = pyqtSignal(str) # Tab indexes TabInfos = 0 @@ -63,9 +64,10 @@ class MainWindow(QMainWindow, Ui_MainWindow): # Var self.currentProject = None + self.projectDirty = None # has the user made any unsaved changes ? self._lastFocus = None self._lastMDEditView = None - self._defaultCursorFlashTime = 1000 # Overriden at startup with system + self._defaultCursorFlashTime = 1000 # Overridden at startup with system # value. In manuskript.main. self._autoLoadProject = None # Used to load a command line project self.sessionStartWordCount = 0 # Used to track session targets @@ -94,22 +96,6 @@ class MainWindow(QMainWindow, Ui_MainWindow): self.mprWordCount.setMapping(t, i) self.mprWordCount.mapped.connect(self.wordCount) - # Snowflake Method Cycle - self.mapperCycle = QSignalMapper(self) - for t, i in [ - (self.btnStepTwo, 0), - (self.btnStepThree, 1), - (self.btnStepFour, 2), - (self.btnStepFive, 3), - (self.btnStepSix, 4), - (self.btnStepSeven, 5), - (self.btnStepEight, 6) - ]: - t.clicked.connect(self.mapperCycle.map) - self.mapperCycle.setMapping(t, i) - - self.mapperCycle.mapped.connect(self.clickCycle) - self.cmbSummary.currentIndexChanged.connect(self.summaryPageChanged) self.cmbSummary.setCurrentIndex(0) self.cmbSummary.currentIndexChanged.emit(0) @@ -133,6 +119,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) @@ -180,6 +167,8 @@ class MainWindow(QMainWindow, Ui_MainWindow): # Main Menu:: Tool self.actToolFrequency.triggered.connect(self.frequencyAnalyzer) self.actToolTargets.triggered.connect(self.sessionTargets) + self.actSupport.triggered.connect(self.support) + self.actLocateLog.triggered.connect(self.locateLogFile) self.actAbout.triggered.connect(self.about) self.makeUIConnections() @@ -279,25 +268,20 @@ class MainWindow(QMainWindow, Ui_MainWindow): self.mainEditor ] - while new is not None: + while new != None: if new in targets: self._lastFocus = new break new = new.parent() - ############################################################################### - # SUMMARY - ############################################################################### - - def summaryPageChanged(self, index): - fractalButtons = [ - self.btnStepTwo, - self.btnStepThree, - self.btnStepFive, - self.btnStepSeven, - ] - for b in fractalButtons: - b.setVisible(fractalButtons.index(b) == index) + def projectName(self): + """ + Returns a user-friendly name for the loaded project. + """ + pName = os.path.split(self.currentProject)[1] + if pName.endswith('.msk'): + pName=pName[:-4] + return pName ############################################################################### # OUTLINE @@ -346,6 +330,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 +353,31 @@ 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) + + 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 + + def deleteCharacter(self): + ID = self.lstCharacters.removeCharacter() + if ID is None: + return + for itemID in self.mdlOutline.findItemsByPOV(ID): + item = self.mdlOutline.getItemByID(itemID) + if item: + item.resetPOV() + ############################################################################### # PLOTS ############################################################################### @@ -480,6 +492,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() @@ -557,14 +576,14 @@ 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 if loadFromFile: # Load empty settings - imp.reload(settings) + importlib.reload(settings) settings.initDefaultValues() # Load data @@ -612,7 +631,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) @@ -630,42 +648,76 @@ class MainWindow(QMainWindow, Ui_MainWindow): # We force to emit even if it opens on the current tab self.tabMain.currentChanged.emit(settings.lastTab) - # Add project name to Window's name - pName = os.path.split(project)[1] - if pName.endswith('.msk'): - pName=pName[:-4] - self.setWindowTitle(pName + " - " + self.tr("Manuskript")) - - # Stuff - # self.checkPersosID() # Shouldn't be necessary any longer - + # Make sure we can update the window title later. self.currentProject = project + self.projectDirty = False QSettings().setValue("lastProject", project) item = self.mdlOutline.rootItem wc = item.data(Outline.wordCount) self.sessionStartWordCount = wc + # Add project name to Window's name + self.setWindowTitle(self.projectName() + " - " + self.tr("Manuskript")) # Show main Window self.switchToProject() + def handleUnsavedChanges(self): + """ + There may be some currently unsaved changes, but the action the user triggered + will result in the project or application being closed. To save, or not to save? + + Or just bail out entirely? + + Sometimes it is best to just ask. + """ + + if not self.projectDirty: + return True # no unsaved changes, all is good + + msg = QMessageBox(QMessageBox.Question, + self.tr("Save project?"), + "

" + + self.tr("Save changes to project \"{}\" before closing?").format(self.projectName()) + + "

" + + "

" + + self.tr("Your changes will be lost if you don't save them.") + + "

", + QMessageBox.Save | QMessageBox.Discard | QMessageBox.Cancel) + + ret = msg.exec() + + if ret == QMessageBox.Cancel: + return False # the situation has not been handled, cancel action + + if ret == QMessageBox.Save: + self.saveDatas() + + return True # the situation has been handled + + def closeProject(self): if not self.currentProject: return + # Make sure data is saved. + if (self.projectDirty and settings.saveOnQuit == True): + self.saveDatas() + elif not self.handleUnsavedChanges(): + return # user cancelled action + # Close open tabs in editor self.mainEditor.closeAllTabs() - # Save datas - self.saveDatas() - self.currentProject = None + self.projectDirty = None QSettings().setValue("lastProject", "") # Clear datas self.loadEmptyDatas() self.saveTimer.stop() + self.saveTimerNoChanges.stop() loadSave.clearSaveCache() self.breakConnections() @@ -727,23 +779,6 @@ class MainWindow(QMainWindow, Ui_MainWindow): self._toolbarState = "" def closeEvent(self, event): - # Save State and geometry and other things - sttgns = QSettings(qApp.organizationName(), qApp.applicationName()) - sttgns.setValue("geometry", self.saveGeometry()) - sttgns.setValue("windowState", self.saveState()) - sttgns.setValue("metadataState", self.redacMetadata.saveState()) - sttgns.setValue("revisionsState", self.redacMetadata.revisions.saveState()) - sttgns.setValue("splitterRedacH", self.splitterRedacH.saveState()) - sttgns.setValue("splitterRedacV", self.splitterRedacV.saveState()) - sttgns.setValue("toolbar", self.toolbar.saveState()) - - # If we are not in the welcome window, we update the visibility - # of the docks widgets - if self.stack.currentIndex() == 1: - self.updateDockVisibility() - # Storing the visibility of docks to restore it on restart - sttgns.setValue("docks", self._dckVisibility) - # Specific settings to save before quitting settings.lastTab = self.tabMain.currentIndex() @@ -751,9 +786,15 @@ class MainWindow(QMainWindow, Ui_MainWindow): # Remembering the current items (stores outlineItem's ID) settings.openIndexes = self.mainEditor.tabSplitter.openIndexes() - # Save data from models - if self.currentProject and settings.saveOnQuit: - self.saveDatas() + # 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() + elif not self.handleUnsavedChanges(): + event.ignore() # user opted to cancel the close action # closeEvent # QMainWindow.closeEvent(self, event) # Causing segfaults? @@ -764,7 +805,33 @@ class MainWindow(QMainWindow, Ui_MainWindow): if self.fw: self.fw.close() + # User may have canceled close event, so make sure we indeed want to close. + # This is necessary because self.updateDockVisibility() hides UI elements. + if event.isAccepted(): + # Save State and geometry and other things + appSettings = QSettings(qApp.organizationName(), qApp.applicationName()) + appSettings.setValue("geometry", self.saveGeometry()) + appSettings.setValue("windowState", self.saveState()) + appSettings.setValue("metadataState", self.redacMetadata.saveState()) + appSettings.setValue("revisionsState", self.redacMetadata.revisions.saveState()) + appSettings.setValue("splitterRedacH", self.splitterRedacH.saveState()) + appSettings.setValue("splitterRedacV", self.splitterRedacV.saveState()) + appSettings.setValue("toolbar", self.toolbar.saveState()) + + # If we are not in the welcome window, we update the visibility + # of the docks widgets + if self.stack.currentIndex() == 1: + self.updateDockVisibility() + + # Storing the visibility of docks to restore it on restart + appSettings.setValue("docks", self._dckVisibility) + def startTimerNoChanges(self): + """ + Something changed in the project that requires auto-saving. + """ + self.projectDirty = True + if settings.autoSaveNoChanges: self.saveTimerNoChanges.start() @@ -779,25 +846,35 @@ class MainWindow(QMainWindow, Ui_MainWindow): self.currentProject = projectName QSettings().setValue("lastProject", projectName) - r = loadSave.saveProject() # version=0 + # Stop the timer before saving: if auto-saving fails (bugs out?) we don't want it + # to keep trying and continuously hitting the failure condition. Nor do we want to + # risk a scenario where the timer somehow triggers a new save while saving. self.saveTimerNoChanges.stop() + 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. + LOGGER.error("There is no current project to save.") + return + + r = loadSave.saveProject() # version=0 + projectName = os.path.basename(self.currentProject) if r: + self.projectDirty = False # successful save, clear dirty flag + 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) self.mdlCharacter = characterModel(self) - # self.mdlPersosProxy = persosProxyModel(self) - # self.mdlPersosInfos = QStandardItemModel(self) self.mdlLabels = QStandardItemModel(self) self.mdlStatus = QStandardItemModel(self) self.mdlPlots = plotModel(self) @@ -810,13 +887,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) @@ -881,11 +958,13 @@ 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) try: - self.btnRmPerso.clicked.connect(self.lstCharacters.removeCharacter, F.AUC) + self.btnAddPerso.clicked.connect(self.lstCharacters.addCharacter, F.AUC) + self.btnRmPerso.clicked.connect(self.deleteCharacter, 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: @@ -1026,7 +1105,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() @@ -1037,9 +1116,12 @@ 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.btnRmPerso.clicked, self.lstCharacters.removeCharacter) + self.disconnectAll(self.btnAddPerso.clicked, self.lstCharacters.addCharacter) + self.disconnectAll(self.btnRmPerso.clicked, self.deleteCharacter) + 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) @@ -1090,41 +1172,66 @@ class MainWindow(QMainWindow, Ui_MainWindow): # HELP ############################################################################### + def centerChildWindow(self, win): + r = win.geometry() + r2 = self.geometry() + win.move(r2.center() - QPoint(int(r.width()/2), int(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()) self.dialog.show() # Center about dialog - r = self.dialog.geometry() - r2 = self.geometry() - self.dialog.move(r2.center() - r.center()) + self.centerChildWindow(self.dialog) ############################################################################### # GENERAL AKA UNSORTED ############################################################################### - def clickCycle(self, i): - if i == 0: # step 2 - paragraph summary - self.tabMain.setCurrentIndex(self.TabSummary) - self.tabSummary.setCurrentIndex(1) - if i == 1: # step 3 - characters summary - self.tabMain.setCurrentIndex(self.TabPersos) - self.tabPersos.setCurrentIndex(0) - if i == 2: # step 4 - page summary - self.tabMain.setCurrentIndex(self.TabSummary) - self.tabSummary.setCurrentIndex(2) - if i == 3: # step 5 - characters description - self.tabMain.setCurrentIndex(self.TabPersos) - self.tabPersos.setCurrentIndex(1) - if i == 4: # step 6 - four page synopsis - self.tabMain.setCurrentIndex(self.TabSummary) - self.tabSummary.setCurrentIndex(3) - if i == 5: # step 7 - full character charts - self.tabMain.setCurrentIndex(self.TabPersos) - self.tabPersos.setCurrentIndex(2) - if i == 6: # step 8 - scene list - self.tabMain.setCurrentIndex(self.TabPlots) - def wordCount(self, i): src = { @@ -1263,24 +1370,29 @@ class MainWindow(QMainWindow, Ui_MainWindow): self.actShowHelp.setChecked(False) # Spellcheck - if enchant: + if Spellchecker.isInstalled(): self.menuDict = QMenu(self.tr("Dictionary")) self.menuDictGroup = QActionGroup(self) self.updateMenuDict() self.menuTools.addMenu(self.menuDict) self.actSpellcheck.toggled.connect(self.toggleSpellcheck, F.AUC) - self.dictChanged.connect(self.mainEditor.setDict, F.AUC) - self.dictChanged.connect(self.redacMetadata.setDict, F.AUC) - self.dictChanged.connect(self.outlineItemEditor.setDict, F.AUC) + # self.dictChanged.connect(self.mainEditor.setDict, F.AUC) + # self.dictChanged.connect(self.redacMetadata.setDict, F.AUC) + # self.dictChanged.connect(self.outlineItemEditor.setDict, F.AUC) else: # No Spell check support self.actSpellcheck.setVisible(False) - a = QAction(self.tr("Install PyEnchant to use spellcheck"), self) - a.setIcon(self.style().standardIcon(QStyle.SP_MessageBoxWarning)) - a.triggered.connect(self.openPyEnchantWebPage, F.AUC) - self.menuTools.addAction(a) + for lib, requirement in Spellchecker.supportedLibraries().items(): + a = QAction(self.tr("Install {}{} to use spellcheck").format(lib, requirement or ""), self) + a.setIcon(self.style().standardIcon(QStyle.SP_MessageBoxWarning)) + # Need to bound the lib argument otherwise the lambda uses the same lib value across all calls + def gen_slot_cb(l): + return lambda: self.openSpellcheckWebPage(l) + a.triggered.connect(gen_slot_cb(lib), F.AUC) + self.menuTools.addAction(a) + ############################################################################### # SPELLCHECK @@ -1288,37 +1400,75 @@ class MainWindow(QMainWindow, Ui_MainWindow): def updateMenuDict(self): - if not enchant: + if not Spellchecker.isInstalled(): return self.menuDict.clear() - for i in enchant.list_dicts(): - a = QAction(str(i[0]), self) - a.setCheckable(True) - if settings.dict is None: - settings.dict = enchant.get_default_language() - if str(i[0]) == settings.dict: - a.setChecked(True) - a.triggered.connect(self.setDictionary, F.AUC) - self.menuDictGroup.addAction(a) + dictionaries = Spellchecker.availableDictionaries() + + # Set first run dictionary + if settings.dict == None: + settings.dict = Spellchecker.getDefaultDictionary() + + # Check if project dict is unavailable on this machine + dict_available = False + for lib, dicts in dictionaries.items(): + if dict_available: + break + for i in dicts: + if Spellchecker.normalizeDictName(lib, i) == settings.dict: + dict_available = True + break + # Reset dict to default one if it's unavailable + if not dict_available: + settings.dict = Spellchecker.getDefaultDictionary() + + for lib, dicts in dictionaries.items(): + if len(dicts) > 0: + a = QAction(lib, self) + else: + a = QAction(self.tr("{} has no installed dictionaries").format(lib), self) + a.setEnabled(False) self.menuDict.addAction(a) + for i in dicts: + a = QAction(i, self) + a.data = lib + a.setCheckable(True) + if Spellchecker.normalizeDictName(lib, i) == settings.dict: + a.setChecked(True) + a.triggered.connect(self.setDictionary, F.AUC) + self.menuDictGroup.addAction(a) + self.menuDict.addAction(a) + self.menuDict.addSeparator() + + # If a new dictionary was chosen, apply the change and re-enable spellcheck if it was enabled. + if not dict_available: + self.setDictionary() + self.toggleSpellcheck(settings.spellcheck) + + for lib, requirement in Spellchecker.supportedLibraries().items(): + if lib not in dictionaries: + a = QAction(self.tr("{}{} is not installed").format(lib, requirement or ""), self) + a.setEnabled(False) + self.menuDict.addAction(a) + self.menuDict.addSeparator() def setDictionary(self): - if not enchant: + if not Spellchecker.isInstalled(): return for i in self.menuDictGroup.actions(): if i.isChecked(): # self.dictChanged.emit(i.text().replace("&", "")) - settings.dict = i.text().replace("&", "") + settings.dict = Spellchecker.normalizeDictName(i.data, i.text().replace("&", "")) # Find all textEditView from self, and toggle spellcheck for w in self.findChildren(textEditView, QRegExp(".*"), Qt.FindChildrenRecursively): w.setDict(settings.dict) - def openPyEnchantWebPage(self): - F.openURL("http://pythonhosted.org/pyenchant/") + def openSpellcheckWebPage(self, lib): + F.openURL(Spellchecker.getLibraryURL(lib)) def toggleSpellcheck(self, val): settings.spellcheck = val @@ -1343,9 +1493,7 @@ class MainWindow(QMainWindow, Ui_MainWindow): self.sw.hide() self.sw.setWindowModality(Qt.ApplicationModal) self.sw.setWindowFlags(Qt.Dialog) - r = self.sw.geometry() - r2 = self.geometry() - self.sw.move(r2.center() - r.center()) + self.centerChildWindow(self.sw) if tab: self.sw.setTab(tab) self.sw.show() @@ -1357,6 +1505,7 @@ class MainWindow(QMainWindow, Ui_MainWindow): def frequencyAnalyzer(self): self.fw = frequencyAnalyzer(self) self.fw.show() + self.centerChildWindow(self.fw) def sessionTargets(self): self.td = targetsDialog(self) @@ -1406,7 +1555,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) @@ -1473,7 +1622,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 @@ -1489,17 +1638,42 @@ class MainWindow(QMainWindow, Ui_MainWindow): ############################################################################### def doImport(self): + # Warn about buggy Qt versions and import crash + # + # (Py)Qt 5.11 and 5.12 have a bug that can cause crashes when simply + # setting up various UI elements. + # This has been reported and verified to happen with File -> Import. + # See PR #611. + if re.match("^5\\.1[12](\\.?|$)", qVersion()): + warning1 = self.tr("PyQt / Qt versions 5.11 and 5.12 are known to cause a crash which might result in a loss of data.") + warning2 = self.tr("PyQt {} and Qt {} are in use.").format(qVersion(), PYQT_VERSION_STR) + + # Don't translate for debug log. + LOGGER.warning(warning1) + LOGGER.warning(warning2) + + msg = QMessageBox(QMessageBox.Warning, + self.tr("Proceed with import at your own risk"), + "

" + + warning1 + + "

" + + "

" + + warning2 + + "

", + QMessageBox.Abort | QMessageBox.Ignore) + msg.setDefaultButton(QMessageBox.Abort) + + # Return because user heeds warning + if msg.exec() == QMessageBox.Abort: + return + + # Proceed with Import self.dialog = importerDialog(mw=self) self.dialog.show() + self.centerChildWindow(self.dialog) - r = self.dialog.geometry() - r2 = self.geometry() - self.dialog.move(r2.center() - r.center()) def doCompile(self): self.dialog = exporterDialog(mw=self) self.dialog.show() - - r = self.dialog.geometry() - r2 = self.geometry() - self.dialog.move(r2.center() - r.center()) + self.centerChildWindow(self.dialog) diff --git a/manuskript/models/abstractItem.py b/manuskript/models/abstractItem.py index 1bef848..333172d 100644 --- a/manuskript/models/abstractItem.py +++ b/manuskript/models/abstractItem.py @@ -9,18 +9,24 @@ from PyQt5.QtCore import Qt from PyQt5.QtGui import QIcon, QFont from PyQt5.QtWidgets import QTextEdit, qApp from lxml import etree as ET +import re from manuskript import enums +import logging +LOGGER = logging.getLogger(__name__) class abstractItem(): - # Enum kept on the class for easier acces + # Enum kept on the class for easier access enum = enums.Abstract # Used for XML export name = "abstractItem" + # Regexp from https://stackoverflow.com/questions/8733233/filtering-out-certain-bytes-in-python + valid_xml_re = re.compile(u'[^\u0020-\uD7FF\u0009\u000A\u000D\uE000-\uFFFD\U00010000-\U0010FFFF]+') + def __init__(self, model=None, title="", _type="abstract", xml=None, parent=None, ID=None): self._data = {} @@ -35,14 +41,19 @@ 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 parent: + # add this as a child to the parent, and link to the outlineModel of the parent + parent.appendChild(self) + if ID: self._data[self.enum.ID] = ID - if parent: - parent.appendChild(self) + if self._model: + self._model.updateAvailableIDs(ID) + ####################################################################### # Model @@ -50,6 +61,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) @@ -101,7 +117,7 @@ class abstractItem(): return self._data[self.enum.type] ####################################################################### - # Parent / Children managment + # Parent / Children management ####################################################################### def child(self, row): @@ -122,6 +138,7 @@ class abstractItem(): def row(self): if self.parent(): return self.parent().childItems.index(self) + return None def appendChild(self, child): self.insertChild(self.childCount(), child) @@ -130,8 +147,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): """ @@ -140,6 +155,9 @@ class abstractItem(): @return: the removed abstractItem """ r = self.childItems.pop(row) + # Disassociate the child from its parent and the model. + r._parent = None + r.setModel(None) return r def parent(self): @@ -177,12 +195,20 @@ class abstractItem(): item.setData(self.enum.ID, None) return item + def siblings(self): + if self.parent(): + return self.parent().children() + return [] + ############################################################################### # IDS ############################################################################### def getUniqueID(self, recursive=False): - self.setData(self.enum.ID, self._model.rootItem.findUniqueID()) + if not self._model: + return + + self.setData(self.enum.ID, self._model.requestNewID()) if recursive: for c in self.children(): @@ -196,31 +222,31 @@ 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]) + _IDs = [self.ID()] def checkChildren(item): + "Check recursively every children and give them unique, non-empty, non-zero IDs." for c in item.children(): _id = c.ID() - if not _id or _id == "0": + if not _id or _id == "0" or _id in _IDs: c.getUniqueID() + LOGGER.warning("* Item {} '{}' is given new unique ID: '{}'".format(_id, c.title(), c.ID())) + _IDs.append(_id) checkChildren(c) checkChildren(self) + # Not sure if self.IDs is still useful (it was used in the old unique ID generating system at least). + # It might be deleted everywhere. But just in the meantime, it should at least be up to date. + self.IDs = self.listAllIDs() + def listAllIDs(self): IDs = [self.ID()] for c in self.children(): 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 ####################################################################### @@ -237,6 +263,10 @@ class abstractItem(): # Setting data self._data[column] = data + # The _model will be none during splitting + if self._model and column == self.enum.ID: + self._model.updateAvailableIDs(data) + # Emit signal self.emitDataChanged(cols=[column]) # new in 0.5.0 @@ -249,6 +279,9 @@ class abstractItem(): # We want to force some data even if they're empty XMLForce = [] + def cleanTextForXML(self, text): + return self.valid_xml_re.sub('', text) + def toXML(self): """ Returns a string containing the item (and children) in XML. @@ -263,7 +296,7 @@ class abstractItem(): continue val = self.data(attrib) if val or attrib in self.XMLForce: - item.set(attrib.name, str(val)) + item.set(attrib.name, self.cleanTextForXML(str(val))) # Saving lastPath item.set("lastPath", self._lastPath) diff --git a/manuskript/models/abstractModel.py b/manuskript/models/abstractModel.py index 4240a18..16de33c 100644 --- a/manuskript/models/abstractModel.py +++ b/manuskript/models/abstractModel.py @@ -26,6 +26,9 @@ except: pass import time, os +import logging +LOGGER = logging.getLogger(__name__) + class abstractModel(QAbstractItemModel): """ @@ -37,18 +40,30 @@ class abstractModel(QAbstractItemModel): - 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): QAbstractItemModel.__init__(self, parent) - - self.rootItem = outlineItem(self, title="Root", ID="0") + self.rootItem = None + 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 index(self, row, column, parent): + 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): return QModelIndex() @@ -57,6 +72,9 @@ class abstractModel(QAbstractItemModel): else: parentItem = parent.internalPointer() + if not parentItem: + return QModelIndex() + childItem = parentItem.child(row) if childItem: return self.createIndex(row, column, childItem) @@ -71,11 +89,9 @@ class abstractModel(QAbstractItemModel): if not parent: parent = self.rootItem - if len(parent.children()) == 0: + if (not parent) or (len(parent.children()) == 0): return None - # print(item.title(), [i.title() for i in parent.children()]) - row = parent.children().index(item) col = column return self.createIndex(row, col, item) @@ -90,23 +106,38 @@ class abstractModel(QAbstractItemModel): Returns a list of IDs of all items containing `text` in columns `columns` (being a list of int). """ + if not self.rootItem: + return list() + return self.rootItem.findItemsContaining(text, columns, mainWindow(), caseSensitive) - def getItemByID(self, ID): + def getItemByID(self, ID, ignore=None): + """Returns the item whose ID is `ID`, unless this item matches `ignore`.""" + def search(item): if item.ID() == ID: + if item == ignore: + # The item we really want won't be found in the children of this + # particular item anymore; stop searching this branch entirely. + return None return item for c in item.children(): r = search(c) if r: return r + if not self.rootItem: + return None + item = search(self.rootItem) return item - def getIndexByID(self, ID, column=0): - "Returns the index of item whose ID is `ID`. If none, returns QModelIndex()." - item = self.getItemByID(ID) + def getIndexByID(self, ID, column=0, ignore=None): + """Returns the index of item whose ID is `ID`. If none, returns QModelIndex(). + + If `ignore` is set, it will not return that item if found as valid match for the ID""" + + item = self.getItemByID(ID, ignore=ignore) if not item: return QModelIndex() else: @@ -119,7 +150,10 @@ class abstractModel(QAbstractItemModel): childItem = index.internalPointer() parentItem = childItem.parent() - if parentItem == self.rootItem: + # 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 \ + (not parentItem) or (not parentItem.parent()): return QModelIndex() return self.createIndex(parentItem.row(), 0, parentItem) @@ -133,13 +167,21 @@ class abstractModel(QAbstractItemModel): else: parentItem = parent.internalPointer() + if not parentItem: + return 0 + return parentItem.childCount() def columnCount(self, parent=QModelIndex()): if parent.isValid(): - return parent.internalPointer().columnCount() + parentItem = parent.internalPointer() else: - return self.rootItem.columnCount() + parentItem = self.rootItem + + if not parentItem: + return 0 + + return parentItem.columnCount() def data(self, index, role=Qt.DisplayRole): if not index.isValid(): @@ -156,7 +198,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: @@ -198,8 +240,6 @@ class abstractModel(QAbstractItemModel): else: return QVariant() - return True - def maxLevel(self): """Returns the max depth of the model.""" def depth(item, d=-1): @@ -209,6 +249,9 @@ class abstractModel(QAbstractItemModel): r = max(r, depth(c, d)) return r + if not self.rootItem: + return 0 + d = depth(self.rootItem) return d @@ -271,7 +314,7 @@ class abstractModel(QAbstractItemModel): # # Gets encoded mime data to retrieve the item items = self.decodeMimeData(data) - if items is None: + if not items: return False # We check if parent is not a child of one of the items @@ -293,6 +336,9 @@ class abstractModel(QAbstractItemModel): else: parentItem = parent.internalPointer() + if not parentItem: + return False + for item in items: # Get parentItem's parents IDs in a list path = parentItem.pathID() # path to item in the form [(ID, title), ...] @@ -309,7 +355,7 @@ class abstractModel(QAbstractItemModel): return None encodedData = bytes(data.data("application/xml")).decode() root = ET.XML(encodedData) - if root is None: + if not root: return None if root.tag != "outlineItems": @@ -369,7 +415,7 @@ class abstractModel(QAbstractItemModel): items = self.decodeMimeData(data) - if items is None: + if items == None: return False if column > 0: @@ -403,21 +449,29 @@ 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) + # Items don't get new IDs, because they are not part of a model yet, + # so the following call does nothing: + # item.getUniqueID(recursive=True) - stripID(item) + # Instead we need to remove IDs (recursively) in all copied items, so that they + # will receive new ones when inserted within the model. + def removeIDs(i): + i.setData(item.enum.ID, None) + for c in i.children(): + removeIDs(c) + + removeIDs(item) r = self.insertItems(items, beginRow, parent) - return r ################# ADDING AND REMOVING ################# @@ -431,12 +485,15 @@ class abstractModel(QAbstractItemModel): else: parentItem = parent.internalPointer() + if not parentItem: + return False + if parent.isValid() and parent.column() != 0: parent = parentItem.index() # 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) @@ -454,6 +511,9 @@ class abstractModel(QAbstractItemModel): else: parentItem = parent.internalPointer() + if not parentItem: + return + if parent.isValid() and parent.column() != 0: parent = parentItem.index() @@ -495,8 +555,12 @@ class abstractModel(QAbstractItemModel): else: parentItem = parent.internalPointer() - self._removingRows = True # Views that are updating can easily know - # if this is due to row removal. + if not parentItem: + return False + + 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) @@ -521,10 +585,15 @@ class abstractModel(QAbstractItemModel): ################# XML / saving / loading ################# def saveToXML(self, xml=None): + if not self.rootItem: + return str() + "If xml (filename) is given, saves the items to xml. Otherwise returns as string." root = ET.XML(self.rootItem.toXML()) + if xml: ET.ElementTree(root).write(xml, encoding="UTF-8", xml_declaration=True, pretty_print=True) + return str() else: return ET.tostring(root, encoding="UTF-8", xml_declaration=True, pretty_print=True) @@ -541,6 +610,10 @@ class abstractModel(QAbstractItemModel): def indexFromPath(self, path): path = path.split(",") item = self.rootItem + + if not item: + return None + for p in path: if p != "" and int(p) < item.childCount(): item = item.child(int(p)) diff --git a/manuskript/models/characterModel.py b/manuskript/models/characterModel.py index a42f8f0..feaa72d 100644 --- a/manuskript/models/characterModel.py +++ b/manuskript/models/characterModel.py @@ -3,11 +3,15 @@ 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) @@ -132,6 +136,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,28 +150,35 @@ 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): - if ID is not None: + if ID != None: ID = str(ID) for c in self.characters: if c.ID() == ID: return c + return None ############################################################################### # ADDING / REMOVING ############################################################################### - def addCharacter(self): + def addCharacter(self, importance=0, name=None): """ Creates a new character + @param importance: the importance level of the character @return: the character """ - c = Character(model=self, name=self.tr("New character")) + if not name: + name = self.tr("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() @@ -177,7 +191,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() @@ -197,7 +212,11 @@ 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=self.tr("Description"), + value=self.tr("Value") + )) self.endInsertRows() mainWindow().updatePersoInfoView() @@ -217,26 +236,39 @@ class characterModel(QAbstractItemModel): c.infos.pop(r) self.endRemoveRows() + def searchableItems(self): + return self.characters + ############################################################################### # CHARACTER ############################################################################### -class Character(): - def __init__(self, model, name="No name"): + +class Character(searchableItem): + + def __init__(self, model, name=None, importance=0): self._model = model self.lastPath = "" - self._data = {} - self._data[C.name.value] = name + if not name: + name = self.translate("Unknown") + + 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 = [] + super().__init__(CharacterSearchLabels) + 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] @@ -246,6 +278,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. @@ -274,6 +312,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 = [] @@ -292,6 +346,42 @@ 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=""): self.description = description diff --git a/manuskript/models/characterPOVModel.py b/manuskript/models/characterPOVModel.py new file mode 100644 index 0000000..03309a7 --- /dev/null +++ b/manuskript/models/characterPOVModel.py @@ -0,0 +1,51 @@ +#!/usr/bin/env python +# --!-- coding: utf8 --!-- +from PyQt5.QtCore import QModelIndex, QSortFilterProxyModel +from manuskript.enums import Character as C + +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): + # Although I would prefer to reuse the existing characterModel.pov() method, + # this is simpler to do, actually works and also more ideomatic Qt code. + index = self.sourceModel().index(sourceRow, C.pov.value, sourceParent) + value = self.sourceModel().data(index) + return bool(value) + + 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/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 9c6b436..99f0010 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, '') @@ -20,8 +23,10 @@ except: # number formatting pass +import logging +LOGGER = logging.getLogger(__name__) -class outlineItem(abstractItem): +class outlineItem(abstractItem, searchableItem): enum = enums.Outline @@ -30,6 +35,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): @@ -65,6 +71,9 @@ class outlineItem(abstractItem): def POV(self): return self.data(self.enum.POV) + def resetPOV(self): + self.setData(self.enum.POV, None) + def status(self): return self.data(self.enum.status) @@ -80,6 +89,22 @@ 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) + + def __str__(self): + return "{id}: {folder}{title}{children}".format( + id=self.ID(), + folder="*" if self.isFolder() else "", + title=self.data(self.enum.title), + children="" if self.isText() else "({})".format(self.childCount()) + ) + + __repr__ = __str__ + + def charCount(self): + return self._data.get(self.enum.charCount, 0) + ####################################################################### # Data ####################################################################### @@ -94,6 +119,9 @@ class outlineItem(abstractItem): return [] else: + # Used to verify nbsp characters not getting clobbered. + #if column == E.text: + # print("GET", str(role), "-->", str([hex(ord(x)) for x in data])) return data elif role == Qt.DecorationRole and column == E.title: @@ -109,7 +137,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) @@ -130,12 +158,14 @@ 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 if column == E.text: self.addRevision() + # Used to verify nbsp characters not getting clobbered. + #print("SET", str(role), "-->", str([hex(ord(x)) for x in data])) # Calling base class implementation abstractItem.setData(self, column, data, role) @@ -143,7 +173,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, cc) if column == E.compile: # Title changes when compile changes @@ -168,13 +200,11 @@ class outlineItem(abstractItem): def removeChild(self, row): r = abstractItem.removeChild(self, row) - # Might be causing segfault when updateWordCount emits dataChanged - self.updateWordCount(emit=False) + self.updateWordCount() return r - def updateWordCount(self, emit=True): - """Update word count for item and parents. - If emit is False, no signal is emitted (sometimes cause segfault)""" + def updateWordCount(self): + """Update word count for item and parents.""" if not self.isFolder(): setGoal = F.toInt(self.data(self.enum.setGoal)) goal = F.toInt(self.data(self.enum.goal)) @@ -187,9 +217,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)) @@ -209,12 +242,12 @@ class outlineItem(abstractItem): else: self.setData(self.enum.goalPercentage, "") - if emit: - self.emitDataChanged([self.enum.goal, self.enum.setGoal, - self.enum.wordCount, self.enum.goalPercentage]) + self.emitDataChanged([self.enum.goal, self.enum.setGoal, + self.enum.wordCount, self.enum.charCount, + self.enum.goalPercentage]) if self.parent(): - self.parent().updateWordCount(emit) + self.parent().updateWordCount() def stats(self): wc = self.data(enums.Outline.wordCount) @@ -223,12 +256,12 @@ class outlineItem(abstractItem): if not wc: wc = 0 if goal: - return qApp.translate("outlineItem", "{} words / {} ({})").format( + return F.safeTranslate(qApp, "outlineItem", "{} words / {} ({})").format( locale.format_string("%d", wc, grouping=True), locale.format_string("%d", goal, grouping=True), "{}%".format(str(int(progress * 100)))) else: - return qApp.translate("outlineItem", "{} words").format( + return F.safeTranslate(qApp, "outlineItem", "{} words").format( locale.format_string("%d", wc, grouping=True)) ####################################################################### @@ -336,8 +369,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). @@ -350,19 +382,17 @@ 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()) + LOGGER.error("Character POV not found: %s", self.POV()) elif c == self.enum.status: searchIn = mainWindow.mdlStatus.item(F.toInt(self.status()), 0).text() @@ -374,7 +404,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()) @@ -460,6 +489,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] @@ -473,7 +503,7 @@ class outlineItem(abstractItem): for r in rev: revItem = ET.Element("revision") revItem.set("timestamp", str(r[0])) - revItem.set("text", r[1]) + revItem.set("text", self.cleanTextForXML(r[1])) item.append(revItem) return item @@ -495,3 +525,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..162ce80 100644 --- a/manuskript/models/outlineModel.py +++ b/manuskript/models/outlineModel.py @@ -2,12 +2,31 @@ # --!-- coding: utf8 --!-- from manuskript.models.abstractModel import abstractModel +from manuskript.models.searchableModel import searchableModel +from manuskript.models.outlineItem import outlineItem - -class outlineModel(abstractModel): +class outlineModel(abstractModel, searchableModel): 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``." 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 fe01bd0..36f4b56 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]) @@ -73,7 +76,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 +105,16 @@ class plotModel(QStandardItemModel): # ADDING / REMOVING ############################################################################### - def addPlot(self): - p = QStandardItem(self.tr("New plot")) + def addPlot(self, name=None): + if not name: + name = self.tr("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 +154,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 +193,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): """ @@ -262,3 +270,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/references.py b/manuskript/models/references.py index 17696c8..ea882a9 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 ############################################################################### @@ -16,7 +19,7 @@ from manuskript.enums import Outline from manuskript.enums import Character from manuskript.enums import Plot from manuskript.enums import PlotStep -from manuskript.functions import mainWindow, mixColors +from manuskript.functions import mainWindow, mixColors, safeTranslate from manuskript.ui import style as S @@ -84,7 +87,7 @@ def infos(ref): """ match = re.fullmatch(RegEx, ref) if not match: - return qApp.translate("references", "Not a reference: {}.").format(ref) + return safeTranslate(qApp, "references", "Not a reference: {}.").format(ref) _type = match.group(1) _ref = match.group(2) @@ -95,19 +98,19 @@ def infos(ref): idx = m.getIndexByID(_ref) if not idx.isValid(): - return qApp.translate("references", "Unknown reference: {}.").format(ref) + return safeTranslate(qApp, "references", "Unknown reference: {}.").format(ref) item = idx.internalPointer() # Titles - pathTitle = qApp.translate("references", "Path:") - statsTitle = qApp.translate("references", "Stats:") - POVTitle = qApp.translate("references", "POV:") - statusTitle = qApp.translate("references", "Status:") - labelTitle = qApp.translate("references", "Label:") - ssTitle = qApp.translate("references", "Short summary:") - lsTitle = qApp.translate("references", "Long summary:") - notesTitle = qApp.translate("references", "Notes:") + pathTitle = safeTranslate(qApp, "references", "Path:") + statsTitle = safeTranslate(qApp, "references", "Stats:") + POVTitle = safeTranslate(qApp, "references", "POV:") + statusTitle = safeTranslate(qApp, "references", "Status:") + labelTitle = safeTranslate(qApp, "references", "Label:") + ssTitle = safeTranslate(qApp, "references", "Short summary:") + lsTitle = safeTranslate(qApp, "references", "Long summary:") + notesTitle = safeTranslate(qApp, "references", "Notes:") # The POV of the scene POV = "" @@ -187,31 +190,31 @@ def infos(ref): elif _type == CharacterLetter: m = mainWindow().mdlCharacter c = m.getCharacterByID(int(_ref)) - if c is None: - return qApp.translate("references", "Unknown reference: {}.").format(ref) + if c == None: + return safeTranslate(qApp, "references", "Unknown reference: {}.").format(ref) index = c.index() name = c.name() # Titles - basicTitle = qApp.translate("references", "Basic info") - detailedTitle = qApp.translate("references", "Detailed info") - POVof = qApp.translate("references", "POV of:") + basicTitle = safeTranslate(qApp, "references", "Basic info") + detailedTitle = safeTranslate(qApp, "references", "Detailed info") + POVof = safeTranslate(qApp, "references", "POV of:") # Goto (link) - goto = qApp.translate("references", "Go to {}.") + goto = safeTranslate(qApp, "references", "Go to {}.") goto = goto.format(refToLink(ref)) # basic infos basic = [] for i in [ - (Character.motivation, qApp.translate("references", "Motivation"), False), - (Character.goal, qApp.translate("references", "Goal"), False), - (Character.conflict, qApp.translate("references", "Conflict"), False), - (Character.epiphany, qApp.translate("references", "Epiphany"), False), - (Character.summarySentence, qApp.translate("references", "Short summary"), True), - (Character.summaryPara, qApp.translate("references", "Longer summary"), True), + (Character.motivation, safeTranslate(qApp, "references", "Motivation"), False), + (Character.goal, safeTranslate(qApp, "references", "Goal"), False), + (Character.conflict, safeTranslate(qApp, "references", "Conflict"), False), + (Character.epiphany, safeTranslate(qApp, "references", "Epiphany"), False), + (Character.summarySentence, safeTranslate(qApp, "references", "Short summary"), True), + (Character.summaryPara, safeTranslate(qApp, "references", "Longer summary"), True), ]: val = m.data(index.sibling(index.row(), i[0].value)) @@ -271,16 +274,16 @@ def infos(ref): name = m.getPlotNameByID(_ref) if not index.isValid(): - return qApp.translate("references", "Unknown reference: {}.").format(ref) + return safeTranslate(qApp, "references", "Unknown reference: {}.").format(ref) # Titles - descriptionTitle = qApp.translate("references", "Description") - resultTitle = qApp.translate("references", "Result") - charactersTitle = qApp.translate("references", "Characters") - stepsTitle = qApp.translate("references", "Resolution steps") + descriptionTitle = safeTranslate(qApp, "references", "Description") + resultTitle = safeTranslate(qApp, "references", "Result") + charactersTitle = safeTranslate(qApp, "references", "Characters") + stepsTitle = safeTranslate(qApp, "references", "Resolution steps") # Goto (link) - goto = qApp.translate("references", "Go to {}.") + goto = safeTranslate(qApp, "references", "Go to {}.") goto = goto.format(refToLink(ref)) # Description @@ -350,15 +353,15 @@ def infos(ref): name = m.name(index) if not index.isValid(): - return qApp.translate("references", "Unknown reference: {}.").format(ref) + return safeTranslate(qApp, "references", "Unknown reference: {}.").format(ref) # Titles - descriptionTitle = qApp.translate("references", "Description") - passionTitle = qApp.translate("references", "Passion") - conflictTitle = qApp.translate("references", "Conflict") + descriptionTitle = safeTranslate(qApp, "references", "Description") + passionTitle = safeTranslate(qApp, "references", "Passion") + conflictTitle = safeTranslate(qApp, "references", "Conflict") # Goto (link) - goto = qApp.translate("references", "Go to {}.") + goto = safeTranslate(qApp, "references", "Go to {}.") goto = goto.format(refToLink(ref)) # Description @@ -393,7 +396,7 @@ def infos(ref): return text else: - return qApp.translate("references", "Unknown reference: {}.").format(ref) + return safeTranslate(qApp, "references", "Unknown reference: {}.").format(ref) def shortInfos(ref): @@ -492,28 +495,28 @@ def tooltip(ref): infos = shortInfos(ref) if not infos: - return qApp.translate("references", "Unknown reference: {}.").format(ref) + return safeTranslate(qApp, "references", "Unknown reference: {}.").format(ref) if infos == -1: - return qApp.translate("references", "Not a reference: {}.").format(ref) + return safeTranslate(qApp, "references", "Not a reference: {}.").format(ref) if infos["type"] == TextLetter: if infos["text_type"] == "folder": - tt = qApp.translate("references", "Folder: {}").format(infos["title"]) + tt = safeTranslate(qApp, "references", "Folder: {}").format(infos["title"]) else: - tt = qApp.translate("references", "Text: {}").format(infos["title"]) + tt = safeTranslate(qApp, "references", "Text: {}").format(infos["title"]) tt += "
{}".format(infos["path"]) return tt elif infos["type"] == CharacterLetter: - return qApp.translate("references", "Character: {}").format(infos["title"]) + return safeTranslate(qApp, "references", "Character: {}").format(infos["title"]) elif infos["type"] == PlotLetter: - return qApp.translate("references", "Plot: {}").format(infos["title"]) + return safeTranslate(qApp, "references", "Plot: {}").format(infos["title"]) elif infos["type"] == WorldLetter: - return qApp.translate("references", "World: {name}{path}").format( + return safeTranslate(qApp, "references", "World: {name}{path}").format( name=infos["title"], path=" ({})".format(infos["path"]) if infos["path"] else "") @@ -586,7 +589,7 @@ def findReferencesTo(ref, parent=None, recursive=True): return lst -def listReferences(ref, title=qApp.translate("references", "Referenced in:")): +def listReferences(ref, title=safeTranslate(qApp, "references", "Referenced in:")): oM = mainWindow().mdlOutline listRefs = "" @@ -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/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..deaa687 --- /dev/null +++ b/manuskript/models/searchableItem.py @@ -0,0 +1,40 @@ +#!/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 61254cd..a166e2e 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() @@ -136,6 +138,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): @@ -186,7 +191,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())) @@ -312,7 +317,7 @@ class worldModel(QStandardItemModel): i = self.addItem(d[0], parent) addItems(d[1], i) - addItems(data, None) + addItems(data, self.invisibleRootItem()) self.mw.treeWorld.expandAll() ############################################################################### @@ -353,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/settings.py b/manuskript/settings.py index 985a35d..483d9ce 100644 --- a/manuskript/settings.py +++ b/manuskript/settings.py @@ -2,12 +2,14 @@ import collections import json -import pickle 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 @@ -34,6 +36,12 @@ viewSettings = { }, } +fullscreenSettings = { + "autohide-top": True, + "autohide-bottom": True, + "autohide-left": True, + } + # Application spellcheck = False dict = None @@ -41,6 +49,8 @@ corkSizeFactor = 100 folderView = "cork" lastTab = 0 openIndexes = [""] +progressChars = False +countSpaces = True autoSave = False autoSaveDelay = 5 autoSaveNoChanges = True @@ -79,7 +89,7 @@ textEditor = { } revisions = { - "keep": True, + "keep": False, "smartremove": True, "rules": collections.OrderedDict({ 10 * 60: 60, # One per minute for the last 10mn @@ -98,7 +108,7 @@ frequencyAnalyzer = { } viewMode = "fiction" # simple, fiction -saveToZip = True +saveToZip = False dontShowDeleteWarning = False def initDefaultValues(): @@ -117,20 +127,24 @@ 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 + saveToZip, dontShowDeleteWarning, fullscreenSettings allSettings = { "viewSettings": viewSettings, + "fullscreenSettings": fullscreenSettings, "dict": dict, "spellcheck": spellcheck, "corkSizeFactor": corkSizeFactor, "folderView": folderView, "lastTab": lastTab, "openIndexes": openIndexes, + "progressChars": progressChars, + "countSpaces": countSpaces, "autoSave":autoSave, "autoSaveDelay":autoSaveDelay, + # TODO: Settings Cleanup Task -- Rename saveOnQuit to saveOnProjectClose -- see PR #615 "saveOnQuit":saveOnQuit, "autoSaveNoChanges":autoSaveNoChanges, "autoSaveNoChangesDelay":autoSaveNoChangesDelay, @@ -151,37 +165,21 @@ def save(filename=None, protocol=None): #print("Saving:") #pp.pprint(allSettings) - if filename: - f = open(filename, "wb") - pickle.dump(allSettings, f) - else: - if protocol == 0: - # This looks stupid - # But a simple json.dumps with sort_keys will throw a TypeError - # because of unorderable types. - return json.dumps(json.loads(json.dumps(allSettings)), indent=4, sort_keys=True) - else: - return pickle.dumps(allSettings) + # This looks stupid + # But a simple json.dumps with sort_keys will throw a TypeError + # because of unorderable types. + return json.dumps(json.loads(json.dumps(allSettings)), indent=4, sort_keys=True) def load(string, fromString=False, protocol=None): - """Load settings from 'string'. 'string' is the filename of the pickle dump. - If fromString=True, string is the data of the pickle dumps.""" + """fromString=True is deprecated, it shouldn't be used.""" global allSettings - if not fromString: - try: - f = open(string, "rb") - allSettings = pickle.load(f) + if not string: + LOGGER.error("Cannot load settings.") + return - except: - print("{} doesn't exist, cannot load settings.".format(string)) - return - else: - if protocol == 0: - allSettings = json.loads(string) - else: - allSettings = pickle.loads(string) + allSettings = json.loads(string) #pp=pprint.PrettyPrinter(indent=4, compact=False) #print("Loading:") @@ -199,6 +197,10 @@ def load(string, fromString=False, protocol=None): if not name in viewSettings[cat]: viewSettings[cat][name] = default + if "fullscreenSettings" in allSettings: + global fullscreenSettings + fullscreenSettings = allSettings["fullscreenSettings"] + if "dict" in allSettings: global dict dict = allSettings["dict"] @@ -223,6 +225,14 @@ def load(string, fromString=False, protocol=None): global openIndexes openIndexes = allSettings["openIndexes"] + if "progressChars" in allSettings: + 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 a8a13a4..3e3311d 100644 --- a/manuskript/settingsWindow.py +++ b/manuskript/settingsWindow.py @@ -1,6 +1,7 @@ #!/usr/bin/env python # --!-- coding: utf8 --!-- import os +import shutil from collections import OrderedDict from PyQt5.QtCore import QSize, QSettings, QRegExp, QTranslator, QObject @@ -8,7 +9,7 @@ from PyQt5.QtCore import Qt, QTimer from PyQt5.QtGui import QIntValidator, QIcon, QFont, QColor, QPixmap, QStandardItem, QPainter from PyQt5.QtGui import QStyleHints from PyQt5.QtWidgets import QStyleFactory, QWidget, QStyle, QColorDialog, QListWidgetItem, QMessageBox -from PyQt5.QtWidgets import qApp +from PyQt5.QtWidgets import qApp, QFileDialog # Spell checker support from manuskript import settings @@ -25,11 +26,6 @@ from manuskript.ui.views.textEditView import textEditView from manuskript.ui.welcome import welcome from manuskript.ui import style as S -try: - import enchant -except ImportError: - enchant = None - class settingsWindow(QWidget, Ui_Settings): def __init__(self, mainWindow): @@ -63,30 +59,44 @@ 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() tr = OrderedDict() tr["English"] = "" - tr["Deutsch"] = "manuskript_de.qm" - tr["Español"] = "manuskript_es.qm" - tr["Français"] = "manuskript_fr.qm" + tr["Arabic (Saudi Arabia)"] = "manuskript_ar_SA.qm" + tr["German"] = "manuskript_de.qm" + tr["English (Great Britain)"] = "manuskript_en_GB.qm" + tr["Spanish"] = "manuskript_es.qm" + tr["Persian"] = "manuskript_fa.qm" + tr["French"] = "manuskript_fr.qm" tr["Hungarian"] = "manuskript_hu.qm" tr["Indonesian"] = "manuskript_id.qm" tr["Italian"] = "manuskript_it.qm" + tr["Japanese"] = "manuskript_ja.qm" + tr["Korean"] = "manuskript_ko.qm" tr["Norwegian Bokmål"] = "manuskript_nb_NO.qm" tr["Dutch"] = "manuskript_nl.qm" tr["Polish"] = "manuskript_pl.qm" tr["Portuguese (Brazil)"] = "manuskript_pt_BR.qm" tr["Portuguese (Portugal)"] = "manuskript_pt_PT.qm" + tr["Romanian"] = "manuskript_ro.qm" tr["Russian"] = "manuskript_ru.qm" tr["Svenska"] = "manuskript_sv.qm" + tr["Turkish"] = "manuskript_tr.qm" + tr["Ukrainian"] = "manuskript_uk.qm" tr["Chinese (Simplified)"] = "manuskript_zh_CN.qm" + tr["Chinese (Traditional)"] = "manuskript_zh_HANT.qm" self.translations = tr for name in tr: @@ -106,6 +116,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) @@ -130,15 +143,15 @@ class settingsWindow(QWidget, Ui_Settings): self.chkRevisionsKeep.stateChanged.connect(self.revisionsSettingsChanged) self.chkRevisionRemove.setChecked(opt["smartremove"]) self.chkRevisionRemove.toggled.connect(self.revisionsSettingsChanged) - self.spnRevisions10Mn.setValue(60 / opt["rules"][10 * 60]) + self.spnRevisions10Mn.setValue(int(60 / opt["rules"][10 * 60])) self.spnRevisions10Mn.valueChanged.connect(self.revisionsSettingsChanged) - self.spnRevisionsHour.setValue(60 * 10 / opt["rules"][60 * 60]) + self.spnRevisionsHour.setValue(int(60 * 10 / opt["rules"][60 * 60])) self.spnRevisionsHour.valueChanged.connect(self.revisionsSettingsChanged) - self.spnRevisionsDay.setValue(60 * 60 / opt["rules"][60 * 60 * 24]) + self.spnRevisionsDay.setValue(int(60 * 60 / opt["rules"][60 * 60 * 24])) self.spnRevisionsDay.valueChanged.connect(self.revisionsSettingsChanged) - self.spnRevisionsMonth.setValue(60 * 60 * 24 / opt["rules"][60 * 60 * 24 * 30]) + self.spnRevisionsMonth.setValue(int(60 * 60 * 24 / opt["rules"][60 * 60 * 24 * 30])) self.spnRevisionsMonth.valueChanged.connect(self.revisionsSettingsChanged) - self.spnRevisionsEternity.setValue(60 * 60 * 24 * 7 / opt["rules"][None]) + self.spnRevisionsEternity.setValue(int(60 * 60 * 24 * 7 / opt["rules"][None])) self.spnRevisionsEternity.valueChanged.connect(self.revisionsSettingsChanged) # Views @@ -159,10 +172,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"), @@ -175,6 +190,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) @@ -333,6 +351,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") @@ -422,10 +445,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"), @@ -440,6 +465,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) @@ -458,12 +488,24 @@ class settingsWindow(QWidget, Ui_Settings): self.btnCorkColor.setStyleSheet("background:{};".format(settings.corkBackground["color"])) def setCorkBackground(self, i): + # Check if combobox was reset + if i == -1: + return + img = self.cmbCorkImage.itemData(i) img = os.path.basename(img) if img: settings.corkBackground["image"] = img else: - settings.corkBackground["image"] = "" + txt = self.cmbCorkImage.itemText(i) + if txt == "": + settings.corkBackground["image"] = "" + else: + img = self.addBackgroundImage() + if img: + self.populatesCmbBackgrounds(self.cmbCorkImage) + settings.corkBackground["image"] = img + self.setCorkImageDefault() # Update Cork view self.mw.mainEditor.updateCorkBackground() @@ -482,8 +524,34 @@ class settingsWindow(QWidget, Ui_Settings): px = QPixmap(os.path.join(p, l)).scaled(128, 64, Qt.KeepAspectRatio) cmb.addItem(QIcon(px), "", os.path.join(p, l)) + cmb.addItem(QIcon.fromTheme("list-add"), " ", "") cmb.setIconSize(QSize(128, 64)) + def addBackgroundImage(self): + lastDirectory = self.mw.welcome.getLastAccessedDirectory() + + """File dialog that request an existing file. For opening an image.""" + filename = QFileDialog.getOpenFileName(self, + self.tr("Open Image"), + lastDirectory, + self.tr("Image files (*.jpg; *.jpeg; *.png)"))[0] + if filename: + try: + px = QPixmap() + valid = px.load(filename) + del px + if valid: + shutil.copy(filename, writablePath("resources/backgrounds")) + return os.path.basename(filename) + else: + QMessageBox.warning(self, self.tr("Error"), + self.tr("Unable to load selected file")) + except Exception as e: + QMessageBox.warning(self, self.tr("Error"), + self.tr("Unable to add selected image:\n{}").format(str(e))) + return None + + def setCorkImageDefault(self): if settings.corkBackground["image"] != "": i = self.cmbCorkImage.findData(findBackground(settings.corkBackground["image"])) @@ -868,12 +936,26 @@ class settingsWindow(QWidget, Ui_Settings): self.timerUpdateFSPreview.start() def updateThemeBackground(self, i): - img = self.cmbCorkImage.itemData(i) + # Check if combobox was reset + if i == -1: + return + + img = self.cmbThemeBackgroundImage.itemData(i) if img: self._themeData["Background/ImageFile"] = os.path.split(img)[1] else: - self._themeData["Background/ImageFile"] = "" + txt = self.cmbThemeBackgroundImage.itemText(i) + if txt == "": + self._themeData["Background/ImageFile"] = "" + else: + img = self.addBackgroundImage() + if img: + self.populatesCmbBackgrounds(self.cmbThemeBackgroundImage) + self._themeData["Background/ImageFile"] = img + i = self.cmbThemeBackgroundImage.findData(self._themeData["Background/ImageFile"], flags=Qt.MatchContains) + if i != -1: + self.cmbThemeBackgroundImage.setCurrentIndex(i) self.updatePreview() def getThemeColor(self, key): diff --git a/manuskript/tests/__init__.py b/manuskript/tests/__init__.py index e31443c..54a0fe1 100644 --- a/manuskript/tests/__init__.py +++ b/manuskript/tests/__init__.py @@ -13,15 +13,16 @@ 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: # self.btnAddSubPlot.clicked.connect(self.updateSubPlotView, F.AUC) # Yet the disconnectAll() function has been called. # Workaround: we remove the necessity for connection to be unique. This -# works for now, but could create issues later one when we want to tests -# those specific functionnality. Maybe it will be called several times. +# works for now, but could create issues later on when we want to test +# this specific functionality. Maybe it will be called several times? # At that moment, we will need to catch the exception in the MainWindow, # or better: understand why it happens at all, and only on some signals. from manuskript import functions as F 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/load_save/__init__.py b/manuskript/tests/load_save/__init__.py new file mode 100644 index 0000000..eb4e6c0 --- /dev/null +++ b/manuskript/tests/load_save/__init__.py @@ -0,0 +1,4 @@ +#!/usr/bin/env python +# --!-- coding: utf8 --!-- + +"""Tests for load_save module.""" diff --git a/manuskript/tests/load_save/test_ParseMMDFile.py b/manuskript/tests/load_save/test_ParseMMDFile.py new file mode 100644 index 0000000..0b9c7f3 --- /dev/null +++ b/manuskript/tests/load_save/test_ParseMMDFile.py @@ -0,0 +1,81 @@ +#!/usr/bin/env python +# --!-- coding: utf8 --!-- + +"""Test ParseMMDFile function.""" + +from collections import OrderedDict +from manuskript.load_save.version_1 import parseMMDFile + + +BASE = "title: TheExampleNovel\n" +BASE += "ID: 42\n" +BASE += "type: folder\n" +TEXT = BASE + '\n' +TEXT_WITH_NONE_AT_START = "None: hello\n" + TEXT +TEXT_WITH_NONE_AT_END = BASE + "None: hello\n\n" +TEXT_WITH_HANGING_SPACE = BASE + " " +CONTENT = "Once upon a time, there was a dog" +TEXT_WITH_CONTENT = TEXT + CONTENT + + +def test_empty_string(): + """An empty string given to parseMMDFile.""" + result = parseMMDFile("") + assert result == ([], '') + + +def test_text(): + """A result as a list of tuples""" + result = parseMMDFile(TEXT) + assert result == ([ + ('title', 'TheExampleNovel'), + ('ID', '42'), + ('type', 'folder') + ], '') + + +def test_text_asdict(): + """A result as an OrderedDict.""" + result = parseMMDFile(TEXT, True) + assert result == (OrderedDict([ + ('title', 'TheExampleNovel'), + ('ID', '42'), + ('type', 'folder')] + ), '') + + +def test_text_with_none_at_start(): + """If the description is None, replace with an empty string.""" + result = parseMMDFile(TEXT_WITH_NONE_AT_START) + assert result == ([ + ('', 'hello'), + ('title', 'TheExampleNovel'), + ('ID', '42'), + ('type', 'folder') + ], '') + + +def test_text_wth_none_at_end(): + """If the last description is None, replace with an empty string.""" + result = parseMMDFile(TEXT_WITH_NONE_AT_END) + assert result == ([ + ('title', 'TheExampleNovel'), + ('ID', '42'), + ('type', 'folder'), + ('', 'hello') + ], '') + + +def test_text_hanging_space(): + """Hanging space invalidates the line.""" + result = parseMMDFile(TEXT_WITH_HANGING_SPACE) + assert result == ([ + ('title', 'TheExampleNovel'), + ('ID', '42') + ], '') + + +def test_text_with_content(): + """The scene has text.""" + result = parseMMDFile(TEXT_WITH_CONTENT) + assert result[1] == CONTENT diff --git a/manuskript/tests/models/test_outlineItem.py b/manuskript/tests/models/test_outlineItem.py index 05a22a7..e217309 100644 --- a/manuskript/tests/models/test_outlineItem.py +++ b/manuskript/tests/models/test_outlineItem.py @@ -59,9 +59,6 @@ def test_outlineItemsProperties(outlineItemFolder, outlineItemText): text.setData(text.enum.goal, 4) assert text.data(text.enum.goalPercentage) == .5 - # revisions - assert text.data(text.enum.revisions) == [] - def test_modelStuff(outlineModelBasic): """ Tests with children items. @@ -126,26 +123,16 @@ def test_modelStuff(outlineModelBasic): assert folder.findItemsContaining("VALUE", cols, MW, True) == [] assert folder.findItemsContaining("VALUE", cols, MW, False) == [text2.ID()] - # Revisions - text2.clearAllRevisions() - assert text2.revisions() == [] - text2.setData(text2.enum.text, "Some value.") - assert len(text2.revisions()) == 1 - text2.setData(text2.enum.text, "Some new value.") - assert len(text2.revisions()) == 1 # Auto clean - text2.deleteRevision(text2.revisions()[0][0]) - assert len(text2.revisions()) == 0 - - # 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() - 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/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 fbea5ab..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(): @@ -46,8 +47,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 +76,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,10 +88,59 @@ 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() 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/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/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/about.py b/manuskript/ui/about.py index a0b17f0..d7102ae 100644 --- a/manuskript/ui/about.py +++ b/manuskript/ui/about.py @@ -30,7 +30,7 @@ class aboutDialog(QWidget, Ui_about): + " "*5 + """ http://www.theologeek.ch/manuskript/
""" - + " "*5 + "Copyright © 2015-2018 Olivier Keshavjee
" + + " "*5 + "Copyright © 2015-2020 Olivier Keshavjee
" + " "*5 + """ GNU General Public License Version 3
""" diff --git a/manuskript/ui/about_ui.py b/manuskript/ui/about_ui.py index e9b46e9..72abe34 100644 --- a/manuskript/ui/about_ui.py +++ b/manuskript/ui/about_ui.py @@ -2,20 +2,22 @@ # Form implementation generated from reading ui file 'manuskript/ui/about_ui.ui' # -# Created: Wed Oct 11 08:28:24 2017 -# by: PyQt5 UI code generator 5.2.1 +# Created by: PyQt5 UI code generator 5.15.6 # -# 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 + class Ui_about(object): def setupUi(self, about): about.setObjectName("about") about.setWindowModality(QtCore.Qt.ApplicationModal) about.resize(445, 370) icon = QtGui.QIcon() - icon.addPixmap(QtGui.QPixmap("../../icons/Manuskript/icon-64px.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off) + icon.addPixmap(QtGui.QPixmap("manuskript/ui/../../icons/Manuskript/icon-64px.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off) about.setWindowIcon(icon) self.gridLayout = QtWidgets.QGridLayout(about) self.gridLayout.setObjectName("gridLayout") @@ -28,7 +30,7 @@ class Ui_about(object): self.gridLayout.addItem(spacerItem, 5, 0, 1, 1) self.labelLogo = QtWidgets.QLabel(about) self.labelLogo.setText("") - self.labelLogo.setPixmap(QtGui.QPixmap("../../icons/Manuskript/logo-400x104.png")) + self.labelLogo.setPixmap(QtGui.QPixmap("manuskript/ui/../../icons/Manuskript/logo-400x104.png")) self.labelLogo.setObjectName("labelLogo") self.gridLayout.addWidget(self.labelLogo, 0, 0, 1, 2) self.labelSoftwareVersion = QtWidgets.QLabel(about) @@ -44,11 +46,10 @@ class Ui_about(object): self.gridLayout.addWidget(self.buttonBox, 7, 0, 1, 1) self.retranslateUi(about) - self.buttonBox.accepted.connect(about.accept) + self.buttonBox.accepted.connect(about.accept) # type: ignore QtCore.QMetaObject.connectSlotsByName(about) def retranslateUi(self, about): _translate = QtCore.QCoreApplication.translate about.setWindowTitle(_translate("about", "About Manuskript")) self.labelLogo.setToolTip(_translate("about", "Manuskript")) - 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/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/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/completer.py b/manuskript/ui/editors/completer.py index 0840b9e..ca7168c 100644 --- a/manuskript/ui/editors/completer.py +++ b/manuskript/ui/editors/completer.py @@ -55,8 +55,11 @@ class completer(QWidget, Ui_completer): self.text.setFocus(Qt.PopupFocusReason) def submit(self): - i = self.list.currentItem() - self.activated.emit(i.data(Qt.UserRole)) + item = self.list.currentItem() + + if item: + self.activated.emit(item.data(Qt.UserRole)) + self.hide() def keyPressEvent(self, event): diff --git a/manuskript/ui/editors/completer_ui.py b/manuskript/ui/editors/completer_ui.py index 093ec83..3e5c962 100644 --- a/manuskript/ui/editors/completer_ui.py +++ b/manuskript/ui/editors/completer_ui.py @@ -2,19 +2,22 @@ # Form implementation generated from reading ui file 'manuskript/ui/editors/completer_ui.ui' # -# Created by: PyQt5 UI code generator 5.4.1 +# Created by: PyQt5 UI code generator 5.15.6 # -# 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 -from PyQt5 import QtCore, QtWidgets class Ui_completer(object): def setupUi(self, completer): completer.setObjectName("completer") completer.resize(163, 143) self.verticalLayout = QtWidgets.QVBoxLayout(completer) - self.verticalLayout.setSpacing(0) self.verticalLayout.setContentsMargins(0, 0, 0, 0) + self.verticalLayout.setSpacing(0) self.verticalLayout.setObjectName("verticalLayout") self.text = QtWidgets.QLineEdit(completer) self.text.setObjectName("text") @@ -29,4 +32,3 @@ class Ui_completer(object): def retranslateUi(self, completer): _translate = QtCore.QCoreApplication.translate completer.setWindowTitle(_translate("completer", "Form")) - diff --git a/manuskript/ui/editors/editorWidget.py b/manuskript/ui/editors/editorWidget.py index bd5a165..ed2cf75 100644 --- a/manuskript/ui/editors/editorWidget.py +++ b/manuskript/ui/editors/editorWidget.py @@ -54,7 +54,7 @@ class editorWidget(QWidget, Ui_editorWidget_ui): self.dictChanged.connect(self.txtRedacText.setDict, AUC) self.txtRedacText.setHighlighting(True) self.currentDict = "" - self.spellcheck = True + self.spellcheck = settings.spellcheck self.folderView = "cork" self.mw = mainWindow() self._tabWidget = None # set by mainEditor on creation @@ -73,7 +73,7 @@ class editorWidget(QWidget, Ui_editorWidget_ui): def resizeEvent(self, event): """ textEdit's scrollBar has been reparented to self. So we need to - update it's geomtry when self is resized, and put it where we want it + update it's geometry when self is resized, and put it where we want it to be. """ # Update scrollbar geometry @@ -293,16 +293,14 @@ class editorWidget(QWidget, Ui_editorWidget_ui): try: self._model.dataChanged.connect(self.modelDataChanged, AUC) - self._model.rowsInserted.connect(self.updateIndexFromID, AUC) - self._model.rowsRemoved.connect(self.updateIndexFromID, AUC) - #self.mw.mdlOutline.rowsAboutToBeRemoved.connect(self.rowsAboutToBeRemoved, AUC) + self._model.rowsAboutToBeRemoved.connect(self.rowsAboutToBeRemoved, AUC) except TypeError: pass self.updateStatusBar() def setCurrentModelIndex(self, index=None): - if index.isValid(): + if index and index.isValid(): self.currentIndex = index self._model = index.model() self.currentID = self._model.ID(index) @@ -313,17 +311,26 @@ class editorWidget(QWidget, Ui_editorWidget_ui): if self._model: self.setView() - def updateIndexFromID(self): + def updateIndexFromID(self, fallback=None, ignore=None): """ Index might have changed (through drag an drop), so we keep current item's ID and update index. Item might have been deleted too. - """ - idx = self._model.getIndexByID(self.currentID) - # If we have an ID but the ID does not exist, it has been deleted + It will ignore the passed model item to avoid ambiguity during times + of inconsistent state. + """ + idx = self._model.getIndexByID(self.currentID, ignore=ignore) + + # If we have an ID but the ID does not exist, it has been deleted. if self.currentID and idx == QModelIndex(): - # Item has been deleted, we open the parent instead - self.setCurrentModelIndex(self.currentIndex.parent()) + # If we are given a fallback item to display, do so. + if fallback: + self.setCurrentModelIndex(fallback) + else: + # After tab closing is implemented, any calls to `updateIndexFromID` + # should be re-evaluated to match the desired behaviour. + raise NotImplementedError("implement tab closing") + # FIXME: selection in self.mw.treeRedacOutline is not updated # but we cannot simply setCurrentIndex through treeRedacOutline # because this might be a tab in the background / out of focus @@ -337,19 +344,39 @@ class editorWidget(QWidget, Ui_editorWidget_ui): self.setView() def modelDataChanged(self, topLeft, bottomRight): - # if self.currentID: - # self.updateIndexFromID() - if not self.currentIndex: - return + if not self.currentIndex.isValid(): + return # Just to be safe. + + # We are only concerned with minor changes to the current index, + # so there is no need to call updateIndexFromID() nor setView(). if topLeft.row() <= self.currentIndex.row() <= bottomRight.row(): + self.updateTabTitle() self.updateStatusBar() - #def rowsAboutToBeRemoved(self, parent, first, last): - #if self.currentIndex: - #if self.currentIndex.parent() == parent and \ - #first <= self.currentIndex.row() <= last: - ## Item deleted, close tab - #self.mw.mainEditor.tab.removeTab(self.mw.mainEditor.tab.indexOf(self)) + def rowsAboutToBeRemoved(self, parent, first, last): + if not self.currentIndex.isValid(): + return # Just to be safe. + + # Look for a common ancestor to verify whether the deleted rows include our index in their hierarchy. + childItem = self.currentIndex + ancestorCandidate = childItem.parent() # start at folder above current item + while (ancestorCandidate != parent): + childItem = ancestorCandidate + ancestorCandidate = childItem.parent() + + if not ancestorCandidate.isValid(): + return # we ran out of ancestors without finding the matching QModelIndex + + # My sanity advocates a healthy dose of paranoia. (Just to be safe.) + if ancestorCandidate != parent: + return # we did not find our shared ancestor + + # Verify our origins come from the relevant first..last range. + if first <= childItem.row() <= last: + # If the row in question was actually moved, there is a duplicate item + # already inserted elsewhere in the tree. Try to update this tab view, + # but make sure we exclude ourselves from the search for a replacement. + self.updateIndexFromID(fallback=parent, ignore=self.currentIndex.internalPointer()) def updateStatusBar(self): # Update progress @@ -359,7 +386,7 @@ class editorWidget(QWidget, Ui_editorWidget_ui): if not mw: return - mw.mainEditor.updateStats() + mw.mainEditor.tabChanged() def toggleSpellcheck(self, v): self.spellcheck = v diff --git a/manuskript/ui/editors/fullScreenEditor.py b/manuskript/ui/editors/fullScreenEditor.py index b9c8b45..ee9e06d 100644 --- a/manuskript/ui/editors/fullScreenEditor.py +++ b/manuskript/ui/editors/fullScreenEditor.py @@ -2,30 +2,32 @@ # --!-- coding: utf8 --!-- import os -from PyQt5.QtCore import Qt, QSize, QPoint, QRect, QEvent, QTimer -from PyQt5.QtGui import QFontMetrics, QColor, QBrush, QPalette, QPainter, QPixmap +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, \ - QStyleOptionSlider, QHBoxLayout, QVBoxLayout, QMenu, QAction + QStyleOptionSlider, QHBoxLayout, QVBoxLayout, QMenu, QAction, QDesktopWidget # Spell checker support from manuskript import settings from manuskript.enums import Outline -from manuskript.functions import allPaths, drawProgress +from manuskript.models import outlineItem +from manuskript.functions import allPaths, drawProgress, safeTranslate from manuskript.ui.editors.locker import locker from manuskript.ui.editors.themes import findThemePath, generateTheme, setThemeEditorDatas from manuskript.ui.editors.themes import loadThemeDatas from manuskript.ui.views.MDEditView import MDEditView +from manuskript.functions import Spellchecker -try: - import enchant -except ImportError: - enchant = None - +import logging +LOGGER = logging.getLogger(__name__) class fullScreenEditor(QWidget): - def __init__(self, index, parent=None): + exited = pyqtSignal() + + def __init__(self, index, parent=None, screenNumber=None): QWidget.__init__(self, parent) + self.setAttribute(Qt.WA_DeleteOnClose, True) self._background = None self._index = index self._theme = findThemePath(settings.fullScreenTheme) @@ -53,23 +55,53 @@ class fullScreenEditor(QWidget): # self.topPanel.layout().addStretch(1) # Spell checking - if enchant: + if Spellchecker.isInstalled(): self.btnSpellCheck = QPushButton(self) self.btnSpellCheck.setFlat(True) self.btnSpellCheck.setIcon(QIcon.fromTheme("tools-check-spelling")) self.btnSpellCheck.setCheckable(True) self.btnSpellCheck.setChecked(self.editor.spellcheck) self.btnSpellCheck.toggled.connect(self.editor.toggleSpellcheck) - self.topPanel.layout().addWidget(self.btnSpellCheck) + else: + self.btnSpellCheck = None - self.topPanel.layout().addStretch(1) + # Navigation Buttons + self.btnPrevious = QPushButton(self) + self.btnPrevious.setFlat(True) + self.btnPrevious.setIcon(QIcon.fromTheme("arrow-left")) + self.btnPrevious.clicked.connect(self.switchPreviousItem) + self.btnNext = QPushButton(self) + self.btnNext.setFlat(True) + self.btnNext.setIcon(QIcon.fromTheme("arrow-right")) + self.btnNext.clicked.connect(self.switchNextItem) + self.btnNew = QPushButton(self) + self.btnNew.setFlat(True) + self.btnNew.setIcon(QIcon.fromTheme("document-new")) + self.btnNew.clicked.connect(self.createNewText) + + # Path and New Text Buttons + self.wPath = myPath(self) # Close self.btnClose = QPushButton(self) self.btnClose.setIcon(qApp.style().standardIcon(QStyle.SP_DialogCloseButton)) - self.btnClose.clicked.connect(self.close) + self.btnClose.clicked.connect(self.leaveFullscreen) self.btnClose.setFlat(True) + + # Top panel Layout + if self.btnSpellCheck: + self.topPanel.layout().addWidget(self.btnSpellCheck) + self.topPanel.layout().addSpacing(15) + self.topPanel.layout().addWidget(self.btnPrevious) + self.topPanel.layout().addWidget(self.btnNext) + self.topPanel.layout().addWidget(self.btnNew) + + self.topPanel.layout().addStretch(1) + self.topPanel.layout().addWidget(self.wPath) + self.topPanel.layout().addStretch(1) + self.topPanel.layout().addWidget(self.btnClose) + self.updateTopBar() # Left Panel self._locked = False @@ -98,7 +130,8 @@ class fullScreenEditor(QWidget): # self.lstThemes.setCurrentText(settings.fullScreenTheme) self.lstThemes.currentTextChanged.connect(self.setTheme) self.lstThemes.setMaximumSize(QSize(300, QFontMetrics(qApp.font()).height())) - self.bottomPanel.layout().addWidget(QLabel(self.tr("Theme:"), self)) + themeLabel = QLabel(self.tr("Theme:"), self) + self.bottomPanel.layout().addWidget(themeLabel) self.bottomPanel.layout().addWidget(self.lstThemes) self.bottomPanel.layout().addStretch(1) @@ -106,12 +139,39 @@ class fullScreenEditor(QWidget): self.lblProgress.setMaximumSize(QSize(200, 14)) self.lblProgress.setMinimumSize(QSize(100, 14)) self.lblWC = QLabel(self) + self.lblClock = myClockLabel(self) self.bottomPanel.layout().addWidget(self.lblWC) self.bottomPanel.layout().addWidget(self.lblProgress) + self.bottomPanel.layout().addSpacing(15) + self.bottomPanel.layout().addWidget(self.lblClock) self.updateStatusBar() self.bottomPanel.layout().addSpacing(24) + # Add Widget Settings + if self.btnSpellCheck: + self.topPanel.addWidgetSetting(self.tr("Spellcheck"), 'top-spellcheck', (self.btnSpellCheck, )) + self.topPanel.addWidgetSetting(self.tr("Navigation"), 'top-navigation', (self.btnPrevious, self.btnNext)) + self.topPanel.addWidgetSetting(self.tr("New Text"), 'top-new-doc', (self.btnNew, )) + self.topPanel.addWidgetSetting(self.tr("Title"), 'top-title', (self.wPath, )) + self.topPanel.addSetting(self.tr("Title: Show Full Path"), 'title-show-full-path', True) + self.topPanel.setSettingCallback('title-show-full-path', lambda var, val: self.updateTopBar()) + self.bottomPanel.addWidgetSetting(self.tr("Theme selector"), 'bottom-theme', (self.lstThemes, themeLabel)) + self.bottomPanel.addWidgetSetting(self.tr("Word count"), 'bottom-wc', (self.lblWC, )) + self.bottomPanel.addWidgetSetting(self.tr("Progress"), 'bottom-progress', (self.lblProgress, )) + self.bottomPanel.addSetting(self.tr("Progress: Auto Show/Hide"), 'progress-auto-show', True) + self.bottomPanel.addWidgetSetting(self.tr("Clock"), 'bottom-clock', (self.lblClock, )) + self.bottomPanel.addSetting(self.tr("Clock: Show Seconds"), 'clock-show-seconds', True) + self.bottomPanel.setAutoHideVariable('autohide-bottom') + 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) @@ -120,6 +180,15 @@ class fullScreenEditor(QWidget): # self.showMaximized() # self.show() + 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): self._locked = val self.btnClose.setVisible(not val) @@ -142,11 +211,11 @@ class fullScreenEditor(QWidget): # Colors if self._themeDatas["Foreground/Color"] == self._themeDatas["Background/Color"] or \ self._themeDatas["Foreground/Opacity"] < 5: - self._bgcolor = QColor(self._themeDatas["Text/Color"]) - self._fgcolor = QColor(self._themeDatas["Background/Color"]) + self._fgcolor = QColor(self._themeDatas["Text/Color"]) + self._bgcolor = QColor(self._themeDatas["Background/Color"]) else: self._bgcolor = QColor(self._themeDatas["Foreground/Color"]) - self._bgcolor.setAlpha(self._themeDatas["Foreground/Opacity"] * 255 / 100) + self._bgcolor.setAlpha(int(self._themeDatas["Foreground/Opacity"] * 255 / 100)) self._fgcolor = QColor(self._themeDatas["Text/Color"]) if self._themeDatas["Text/Color"] == self._themeDatas["Foreground/Color"]: self._fgcolor = QColor(self._themeDatas["Background/Color"]) @@ -170,7 +239,7 @@ class fullScreenEditor(QWidget): r = self.locker.geometry() r.moveTopLeft(QPoint( 0, - self.geometry().height() / 2 - r.height() / 2 + int(self.geometry().height() / 2 - r.height() / 2) )) self.leftPanel.setGeometry(r) self.hideWidget(self.leftPanel) @@ -197,7 +266,7 @@ class fullScreenEditor(QWidget): p.setBrush(QPalette.ButtonText, self._fgcolor) p.setBrush(QPalette.WindowText, self._fgcolor) - for panel in (self.bottomPanel, self.topPanel): + for panel in (self.bottomPanel, self.topPanel, self.leftPanel): for i in range(panel.layout().count()): item = panel.layout().itemAt(i) if item.widget(): @@ -221,7 +290,15 @@ class fullScreenEditor(QWidget): def keyPressEvent(self, event): if event.key() in [Qt.Key_Escape, Qt.Key_F11] and \ not self._locked: - 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]: + success = self.switchPreviousItem() + if event.key() in [Qt.Key_PageDown, Qt.Key_Right]: + success = self.switchNextItem() + if not success: + QWidget.keyPressEvent(self, event) else: QWidget.keyPressEvent(self, event) @@ -265,6 +342,14 @@ class fullScreenEditor(QWidget): if topLeft.row() <= self._index.row() <= bottomRight.row(): self.updateStatusBar() + def updateTopBar(self): + item = self._index.internalPointer() + previousItem = self.previousTextItem(item) + nextItem = self.nextTextItem(item) + self.btnPrevious.setEnabled(previousItem != None) + self.btnNext.setEnabled(nextItem != None) + self.wPath.setItem(item) + def updateStatusBar(self): if self._index: item = self._index.internalPointer() @@ -274,18 +359,22 @@ class fullScreenEditor(QWidget): pg = item.data(Outline.goalPercentage) if goal: - rect = self.lblProgress.geometry() - rect = QRect(QPoint(0, 0), rect.size()) - self.px = QPixmap(rect.size()) - self.px.fill(Qt.transparent) - p = QPainter(self.px) - drawProgress(p, rect, pg, 2) - p.end() - self.lblProgress.setPixmap(self.px) + if settings.fullscreenSettings.get("progress-auto-show", True): + self.lblProgress.show() self.lblWC.setText(self.tr("{} words / {}").format(wc, goal)) else: - self.lblProgress.hide() + if settings.fullscreenSettings.get("progress-auto-show", True): + self.lblProgress.hide() self.lblWC.setText(self.tr("{} words").format(wc)) + pg = 0 + rect = self.lblProgress.geometry() + rect = QRect(QPoint(0, 0), rect.size()) + self.px = QPixmap(rect.size()) + self.px.fill(Qt.transparent) + p = QPainter(self.px) + drawProgress(p, rect, pg, 2) + p.end() + self.lblProgress.setPixmap(self.px) self.locker.setWordCount(wc) # If there's a goal, then we update the locker target's number of word accordingly @@ -296,6 +385,102 @@ class fullScreenEditor(QWidget): elif not wc: self.locker.spnWordTarget.setValue(goal) + def setCurrentModelIndex(self, index): + self._index = index + self.editor.setCurrentModelIndex(index) + self.updateTopBar() + self.updateStatusBar() + + def switchPreviousItem(self): + item = self._index.internalPointer() + previousItem = self.previousTextItem(item) + if previousItem: + self.setCurrentModelIndex(previousItem.index()) + return True + return False + + def switchNextItem(self): + item = self._index.internalPointer() + nextItem = self.nextTextItem(item) + if nextItem: + self.setCurrentModelIndex(nextItem.index()) + return True + return False + + def switchToItem(self, item): + item = self.firstTextItem(item) + if item: + self.setCurrentModelIndex(item.index()) + + def createNewText(self): + item = self._index.internalPointer() + newItem = outlineItem(title=safeTranslate(qApp, "outlineBasics", "New"), _type=settings.defaultTextType) + self._index.model().insertItem(newItem, item.row() + 1, item.parent().index()) + self.setCurrentModelIndex(newItem.index()) + + def previousModelItem(self, item): + parent = item.parent() + if not parent: + # Root has no sibling + return None + + row = parent.childItems.index(item) + if row > 0: + return parent.child(row - 1) + return self.previousModelItem(parent) + + def nextModelItem(self, item): + parent = item.parent() + if not parent: + # Root has no sibling + return None + + row = parent.childItems.index(item) + if row + 1 < parent.childCount(): + return parent.child(row + 1) + return self.nextModelItem(parent) + + def previousTextItem(self, item): + previous = self.previousModelItem(item) + + while previous: + last = self.lastTextItem(previous) + if last: + return last + previous = self.previousModelItem(previous) + return None + + def nextTextItem(self, item): + if item.isFolder() and item.childCount() > 0: + next = item.child(0) + else: + next = self.nextModelItem(item) + + while next: + first = self.firstTextItem(next) + if first: + return first + next = self.nextModelItem(next) + return None + + def firstTextItem(self, item): + if item.isText(): + return item + for child in item.children(): + first = self.firstTextItem(child) + if first: + return first + return None + + def lastTextItem(self, item): + if item.isText(): + return item + for child in reversed(item.children()): + last = self.lastTextItem(child) + if last: + return last + return None + class myScrollBar(QScrollBar): def __init__(self, color=Qt.white, parent=None): @@ -305,11 +490,14 @@ class myScrollBar(QScrollBar): self.timer = QTimer() self.timer.setInterval(500) self.timer.setSingleShot(True) - self.timer.timeout.connect(lambda: self.parent().hideWidget(self)) + self.timer.timeout.connect(self.hide) self.valueChanged.connect(lambda v: self.timer.start()) self.valueChanged.connect(lambda: self.parent().showWidget(self)) self.rangeChanged.connect(self.rangeHasChanged) + def hide(self): + self.parent().hideWidget(self) + def setColor(self, color): self._color = color @@ -349,6 +537,10 @@ class myPanel(QWidget): self.show() self.setAttribute(Qt.WA_TranslucentBackground) self._autoHide = True + self._m = None + self._autoHideVar = None + self._settings = [] + self._callbacks = {} if not vertical: self.setLayout(QHBoxLayout()) @@ -364,16 +556,144 @@ class myPanel(QWidget): painter = QPainter(self) painter.fillRect(r, self._color) + def _setConfig(self, config_name, value): + settings.fullscreenSettings[config_name] = value + if config_name in self._callbacks: + self._callbacks[config_name](config_name, value) + + def _setSettingValue(self, setting, value): + if setting[2]: + for w in setting[2]: + w.show() if value else w.hide() + self._setConfig(setting[1], value) + def setAutoHide(self, value): self._autoHide = value + if self._autoHideVar: + self._setConfig(self._autoHideVar, value) + + def setAutoHideVariable(self, name): + if name: + self.setAutoHide(settings.fullscreenSettings[name]) + self._autoHideVar = name + + def addWidgetSetting(self, label, config_name, widgets): + setting = (label, config_name, widgets) + self._settings.append(setting) + 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) == None: + self._setConfig(config_name, default) + self.addWidgetSetting(label, config_name, None) + + def setSettingCallback(self, config_name, callback): + self._callbacks[config_name] = callback def mouseReleaseEvent(self, event): if event.button() == Qt.RightButton: + if self._m: + self._m.deleteLater() m = QMenu() a = QAction(self.tr("Auto-hide"), m) a.setCheckable(True) a.setChecked(self._autoHide) a.toggled.connect(self.setAutoHide) m.addAction(a) + for item in self._settings: + a = QAction(item[0], m) + a.setCheckable(True) + if item[2]: + a.setChecked(item[2][0].isVisible()) + else: + a.setChecked(settings.fullscreenSettings[item[1]]) + def gen_cb(setting): + return lambda v: self._setSettingValue(setting, v) + a.toggled.connect(gen_cb(item)) + m.addAction(a) m.popup(self.mapToGlobal(event.pos())) self._m = m + +class myPath(QWidget): + def __init__(self, parent=None): + QWidget.__init__(self, parent) + self.editor = parent + self.setAttribute(Qt.WA_TranslucentBackground) + self.setLayout(QHBoxLayout()) + self.layout().setContentsMargins(0, 0, 0, 0) + + def setItem(self, item): + self._item = item + path = self.getItemPath(item) + layout = self.layout() + while layout.count() > 0: + li = layout.takeAt(0) + w = li.widget() + w.deleteLater() + + def gen_cb(i): + return lambda: self.popupPath(i) + # Skip Root + for i in path[1:]: + if not settings.fullscreenSettings.get("title-show-full-path", True) and \ + i.isFolder(): + continue + btn = QPushButton(i.title(), self) + btn.setFlat(True) + btn.clicked.connect(gen_cb(i)) + self.layout().addWidget(btn) + if i.isFolder(): + lblSeparator = QLabel(" > ", self) + #lblSeparator = QLabel(self) + #lblSeparator.setPixmap(QIcon.fromTheme("view-list-tree").pixmap(24,24)) + self.layout().addWidget(lblSeparator) + + def popupPath(self, item): + m = QMenu() + def gen_cb(i): + return lambda: self.editor.switchToItem(i) + + for i in item.siblings(): + a = QAction(i.title(), m) + if i == item: + a.setIcon(QIcon.fromTheme("stock_yes")) + a.setEnabled(False) + elif self.editor.firstTextItem(i) == None: + a.setEnabled(False) + else: + a.triggered.connect(gen_cb(i)) + m.addAction(a) + m.popup(QCursor.pos()) + self._m = m + + def getItemPath(self, item): + path = [item] + parent = item.parent() + while parent: + path.insert(0, parent) + parent = parent.parent() + return path + + +class myClockLabel(QLabel): + + + def __init__(self, parent=None): + QLabel.__init__(self, parent) + + self.updateClock() + self.timer = QTimer() + self.timer.setInterval(1000) + self.timer.timeout.connect(self.updateClock) + self.timer.start() + + + def updateClock(self): + time = QTime.currentTime() + if settings.fullscreenSettings.get("clock-show-seconds", True): + timeStr = time.toString("hh:mm:ss") + else: + timeStr = time.toString("hh:mm") + + self.setText(timeStr) 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 35a9274..7ee4300 100644 --- a/manuskript/ui/editors/mainEditor.py +++ b/manuskript/ui/editors/mainEditor.py @@ -5,11 +5,11 @@ 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 -from manuskript.functions import AUC, mainWindow, drawProgress, appPath +from manuskript.functions import AUC, mainWindow, drawProgress, appPath, uiParse from manuskript.ui import style from manuskript.ui.editors.editorWidget import editorWidget from manuskript.ui.editors.fullScreenEditor import fullScreenEditor @@ -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 @@ -64,6 +67,7 @@ class mainEditor(QWidget, Ui_mainEditor): QWidget.__init__(self, parent) self.setupUi(self) self._updating = False + self._fullScreen = None self.mw = mainWindow() @@ -120,7 +124,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() @@ -151,9 +155,13 @@ 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 is None: + if tabWidget == None: tabWidget = self.currentTabWidget() return [tabWidget.widget(i) for i in range(tabWidget.count())] @@ -205,7 +213,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 @@ -292,6 +300,7 @@ class mainEditor(QWidget, Ui_mainEditor): return index = self.currentEditor().currentIndex + if index.isValid(): item = index.internalPointer() else: @@ -300,13 +309,21 @@ 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) + chars = item.data(Outline.charCount) # len(item.data(Outline.text)) progress = item.data(Outline.goalPercentage) - # mw = qApp.activeWindow() + 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() @@ -317,13 +334,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 @@ -352,14 +387,21 @@ 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) + # 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 ############################################################################### 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 13adfaf..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) @@ -145,8 +147,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 +157,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 +214,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/editors/themes.py b/manuskript/ui/editors/themes.py index 7ba8715..1561b71 100644 --- a/manuskript/ui/editors/themes.py +++ b/manuskript/ui/editors/themes.py @@ -83,7 +83,7 @@ def themeTextRect(themeDatas, screenRect): elif themeDatas["Foreground/Position"] == 3: # Stretched x = margin width = screenRect.width() - 2 * margin - return QRect(x, y, width, height) + return QRect(int(x), int(y), int(width), int(height)) def createThemePreview(theme, screenRect, size=QSize(200, 120)): @@ -116,13 +116,13 @@ def createThemePreview(theme, screenRect, size=QSize(200, 120)): px = QPixmap(pixmap).scaled(size, Qt.KeepAspectRatio) - w = px.width() / 10 - h = px.height() / 10 + w = int(px.width() / 10) + h = int(px.height() / 10) r = themeTextRect(themeDatas, screenRect) painter = QPainter(px) painter.drawPixmap(QRect(w, h, w * 4, h * 5), pixmap, - QRect(r.topLeft() - QPoint(w / 3, h / 3), QSize(w * 4, h * 5))) + QRect(r.topLeft() - QPoint(int(w / 3), int(h / 3)), QSize(w * 4, h * 5))) painter.setPen(Qt.white) painter.drawRect(QRect(w, h, w * 4, h * 5)) painter.end() @@ -164,15 +164,15 @@ def generateTheme(themeDatas, screenRect): elif _type == 5: # Zoomed scaled.scale(screenRect.size(), Qt.KeepAspectRatioByExpanding) - painter.drawImage((screenRect.width() - scaled.width()) / 2, - (screenRect.height() - scaled.height()) / 2, img.scaled(scaled)) + painter.drawImage(int((screenRect.width() - scaled.width()) / 2), + int((screenRect.height() - scaled.height()) / 2), img.scaled(scaled)) # Text Background textRect = themeTextRect(themeDatas, screenRect) painter.save() color = QColor(themeDatas["Foreground/Color"]) - color.setAlpha(themeDatas["Foreground/Opacity"] * 255 / 100) + color.setAlpha(int(themeDatas["Foreground/Opacity"] * 255 / 100)) painter.setBrush(color) painter.setPen(Qt.NoPen) r = themeDatas["Foreground/Rounding"] @@ -249,12 +249,14 @@ def setThemeEditorDatas(editor, themeDatas, pixmap, screenRect): # editor.setFont(f) editor.setStyleSheet(""" - background: transparent; - color: {foreground}; - font-family: {ff}; - font-size: {fs}; - selection-color: {sc}; - selection-background-color: {sbc}; + QTextEdit {{ + background: transparent; + color: {foreground}; + font-family: {ff}; + font-size: {fs}; + selection-color: {sc}; + selection-background-color: {sbc}; + }} """.format( foreground=themeDatas["Text/Color"], ff=f.family(), diff --git a/manuskript/ui/exporters/exporter.py b/manuskript/ui/exporters/exporter.py index 7a954bc..68920c4 100644 --- a/manuskript/ui/exporters/exporter.py +++ b/manuskript/ui/exporters/exporter.py @@ -3,7 +3,7 @@ import json import os -from PyQt5.QtCore import Qt +from PyQt5.QtCore import Qt, QPoint from PyQt5.QtGui import QBrush, QColor, QIcon from PyQt5.QtWidgets import QWidget, QStyle @@ -138,7 +138,7 @@ class exporterDialog(QWidget, Ui_exporter): r = self.dialog.geometry() r2 = self.geometry() - self.dialog.move(r2.center() - r.center()) + self.dialog.move(r2.center() - QPoint(int(r.width()/2), int(r.height()/2))) self.dialog.exportersMightHaveChanged.connect(self.populateExportList) @@ -153,4 +153,4 @@ class exporterDialog(QWidget, Ui_exporter): item.widget().deleteLater() l.addWidget(widget) - widget.setParent(group) \ No newline at end of file + widget.setParent(group) diff --git a/manuskript/ui/exporters/manuskript/plainTextSettings.py b/manuskript/ui/exporters/manuskript/plainTextSettings.py index 78fd001..bfa4e2a 100644 --- a/manuskript/ui/exporters/manuskript/plainTextSettings.py +++ b/manuskript/ui/exporters/manuskript/plainTextSettings.py @@ -128,7 +128,7 @@ class exporterSettings(QWidget, Ui_exporterSettings): def loadSettings(self): filename = self.getSettingsPath() if os.path.exists(filename): - with open(filename) as f: + with open(filename, "r", encoding="utf-8") as f: self.settings = json.load(f) self.updateFromSettings() @@ -138,7 +138,7 @@ class exporterSettings(QWidget, Ui_exporterSettings): def writeSettings(self): self.getSettings() - with open(self.getSettingsPath(), 'w') as f: + with open(self.getSettingsPath(), 'w', encoding="utf-8") as f: # json.dumps(json.loads(json.dumps(allSettings)), indent=4, sort_keys=True) json.dump(self.settings, f, indent=4, sort_keys=True) diff --git a/manuskript/ui/exporters/manuskript/plainTextSettings_ui.py b/manuskript/ui/exporters/manuskript/plainTextSettings_ui.py index e8f36c7..971746a 100644 --- a/manuskript/ui/exporters/manuskript/plainTextSettings_ui.py +++ b/manuskript/ui/exporters/manuskript/plainTextSettings_ui.py @@ -2,12 +2,15 @@ # Form implementation generated from reading ui file 'manuskript/ui/exporters/manuskript/plainTextSettings_ui.ui' # -# Created by: PyQt5 UI code generator 5.9 +# 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 + class Ui_exporterSettings(object): def setupUi(self, exporterSettings): exporterSettings.setObjectName("exporterSettings") @@ -22,7 +25,6 @@ class Ui_exporterSettings(object): self.content.setGeometry(QtCore.QRect(0, 0, 349, 842)) self.content.setObjectName("content") self.verticalLayout_5 = QtWidgets.QVBoxLayout(self.content) - self.verticalLayout_5.setContentsMargins(0, 0, 0, 0) self.verticalLayout_5.setObjectName("verticalLayout_5") self.label = QtWidgets.QLabel(self.content) self.label.setObjectName("label") @@ -106,7 +108,6 @@ class Ui_exporterSettings(object): self.separations.setGeometry(QtCore.QRect(0, 0, 173, 336)) self.separations.setObjectName("separations") self.verticalLayout_8 = QtWidgets.QVBoxLayout(self.separations) - self.verticalLayout_8.setContentsMargins(0, 0, 0, 0) self.verticalLayout_8.setObjectName("verticalLayout_8") self.label_3 = QtWidgets.QLabel(self.separations) font = QtGui.QFont() @@ -316,7 +317,6 @@ class Ui_exporterSettings(object): self.transformations.setStyleSheet("QGroupBox{font-weight:bold;}") self.transformations.setObjectName("transformations") self.verticalLayout_6 = QtWidgets.QVBoxLayout(self.transformations) - self.verticalLayout_6.setContentsMargins(0, 0, 0, 0) self.verticalLayout_6.setObjectName("verticalLayout_6") self.grpTransTypo = collapsibleGroupBox2(self.transformations) self.grpTransTypo.setStyleSheet("") @@ -479,7 +479,6 @@ class Ui_exporterSettings(object): self.preview.setStyleSheet("QGroupBox{font-weight:bold;}") self.preview.setObjectName("preview") self.verticalLayout_11 = QtWidgets.QVBoxLayout(self.preview) - self.verticalLayout_11.setContentsMargins(0, 0, 0, 0) self.verticalLayout_11.setObjectName("verticalLayout_11") self.groupBox = QtWidgets.QGroupBox(self.preview) self.groupBox.setObjectName("groupBox") @@ -560,5 +559,4 @@ class Ui_exporterSettings(object): self.label_7.setText(_translate("exporterSettings", "Font:")) self.label_8.setText(_translate("exporterSettings", "Font size:")) self.toolBox.setItemText(self.toolBox.indexOf(self.preview), _translate("exporterSettings", "Preview")) - from manuskript.ui.collapsibleGroupBox2 import collapsibleGroupBox2 diff --git a/manuskript/ui/highlighters/basicHighlighter.py b/manuskript/ui/highlighters/basicHighlighter.py index 6e45eba..2e7358e 100644 --- a/manuskript/ui/highlighters/basicHighlighter.py +++ b/manuskript/ui/highlighters/basicHighlighter.py @@ -1,5 +1,5 @@ #!/usr/bin/python -# -*- coding: utf8 -*- +# -*- coding: utf-8 -*- import re @@ -12,13 +12,14 @@ 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): 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 +28,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 +71,7 @@ class BasicHighlighter(QSyntaxHighlighter): self.rehighlight() def setMisspelledColor(self, color): - self._misspelledColor = color + self._errorColors['misspelled'] = color def updateColorScheme(self, rehighlight=True): """ @@ -86,7 +121,7 @@ class BasicHighlighter(QSyntaxHighlighter): def doHighlightBlock(self, text): """ - Virtual funtion to subclass. + Virtual function to subclass. """ pass @@ -97,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) @@ -134,29 +169,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\'])+)' - # (?iu) means case insensitive and Unicode - # (?!_) means perform negative lookahead to exclude "_" from pattern match. See issue #283 - if hasattr(self.editor, "spellcheck") and self.editor.spellcheck: - for word_object in re.finditer(WORDS, textedText): - if (self.editor._dict - and not self.editor._dict.check(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/highlighters/markdownHighlighter.py b/manuskript/ui/highlighters/markdownHighlighter.py index 786cae8..3a1564e 100644 --- a/manuskript/ui/highlighters/markdownHighlighter.py +++ b/manuskript/ui/highlighters/markdownHighlighter.py @@ -85,7 +85,7 @@ class MarkdownHighlighter(BasicHighlighter): def unfocusConditions(self): """ Returns: - - True if the text is suposed to be unfocused + - True if the text is supposed to be unfocused - (start, end) if block is supposed to be unfocused except for that part. """ @@ -283,7 +283,7 @@ class MarkdownHighlighter(BasicHighlighter): theme = { "markup": markup} - #Exemple: + #Example: #"color": Qt.red, #"deltaSize": 10, #"background": Qt.yellow, @@ -477,7 +477,7 @@ class MarkdownHighlighter(BasicHighlighter): self.transparentFormat(fmt) self.transparentFormat(markupFormat) - # Format openning Markup + # Format opening Markup self.setFormat(token.position, token.openingMarkupLength, markupFormat) @@ -676,7 +676,7 @@ class MarkdownHighlighter(BasicHighlighter): spellingErrorFormat = self.format(startIndex) spellingErrorFormat.setUnderlineColor(self.spellingErrorColor) spellingErrorFormat.setUnderlineStyle( - qApp.stlye().styleHint(QStyle.SH_SpellCheckUnderlineStyle)) + qApp.style().styleHint(QStyle.SH_SpellCheckUnderlineStyle)) self.setFormat(startIndex, length, spellingErrorFormat) @@ -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/highlighters/markdownTokenizer.py b/manuskript/ui/highlighters/markdownTokenizer.py index 0b8aece..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 @@ -279,7 +282,9 @@ class MarkdownTokenizer(HighlightTokenizer): if level > 0 and level < len(text): # Count how many pound signs are at the end of the text. - while escapedText[-trailingPoundCount -1] == "#": + # Ignore starting pound signs when calculating trailing signs + while level + trailingPoundCount < len(text) and \ + escapedText[-trailingPoundCount -1] == "#": trailingPoundCount += 1 token = Token() @@ -363,7 +368,7 @@ class MarkdownTokenizer(HighlightTokenizer): spaceCount += 1 # If this list item is the first in the list, ensure the - # number of spaces preceeding the bullet point does not + # number of spaces preceding the bullet point does not # exceed three, as that would indicate a code block rather # than a bullet point list. @@ -830,15 +835,15 @@ class MarkdownTokenizer(HighlightTokenizer): markupStartCount=0, markupEndCount=0, replaceMarkupChars=False, replaceAllChars=False): """ - Tokenizes a block of text, searching for all occurrances of regex. - Occurrances are set to the given token type and added to the list of + Tokenizes a block of text, searching for all occurrences of regex. + Occurrences are set to the given token type and added to the list of tokens. The markupStartCount and markupEndCount values are used to - indicate how many markup special characters preceed and follow the + indicate how many markup special characters precede and follow the main text, respectively. For example, if the matched string is "**bold**", and markupStartCount = 2 and markupEndCount = 2, then the asterisks - preceeding and following the word "bold" will be set as opening and + preceding and following the word "bold" will be set as opening and closing markup in the token. If replaceMarkupChars is true, then the markupStartCount and 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/importers/importer.py b/manuskript/ui/importers/importer.py index 287ea70..194c2cd 100644 --- a/manuskript/ui/importers/importer.py +++ b/manuskript/ui/importers/importer.py @@ -122,9 +122,8 @@ class importerDialog(QWidget, Ui_importer): F = self._format options = QFileDialog.Options() - options |= QFileDialog.DontUseNativeDialog if F.fileFormat == "<>": - options = QFileDialog.DontUseNativeDialog | QFileDialog.ShowDirsOnly + options = QFileDialog.ShowDirsOnly fileName = QFileDialog.getExistingDirectory(self, "Select import folder", "", options=options) else: @@ -196,8 +195,8 @@ class importerDialog(QWidget, Ui_importer): self.grpPreview.setEnabled(True) self.settingsWidget = generalSettings() - #TODO: custom format widget - # self.settingsWidget = F.settingsWidget(self.settingsWidget) + #TODO: custom format widget to match exporter visuals? + self.settingsWidget = F.settingsWidget(self.settingsWidget) # Set the settings widget in place self.setGroupWidget(self.grpSettings, self.settingsWidget) diff --git a/manuskript/ui/importers/importer_ui.py b/manuskript/ui/importers/importer_ui.py index d23c8e4..59c8a6b 100644 --- a/manuskript/ui/importers/importer_ui.py +++ b/manuskript/ui/importers/importer_ui.py @@ -97,7 +97,7 @@ class Ui_importer(object): _translate = QtCore.QCoreApplication.translate importer.setWindowTitle(_translate("importer", "Import")) self.label.setText(_translate("importer", "Format:")) - self.btnChoseFile.setText(_translate("importer", "Chose file")) + self.btnChoseFile.setText(_translate("importer", "Choose file")) self.btnClearFileName.setToolTip(_translate("importer", "Clear file")) self.btnPreview.setText(_translate("importer", "Preview")) self.btnImport.setText(_translate("importer", "Import")) diff --git a/manuskript/ui/importers/importer_ui.ui b/manuskript/ui/importers/importer_ui.ui index cbf72b9..98ca1df 100644 --- a/manuskript/ui/importers/importer_ui.ui +++ b/manuskript/ui/importers/importer_ui.ui @@ -42,7 +42,7 @@ - Chose file + Choose file diff --git a/manuskript/ui/listDialog.py b/manuskript/ui/listDialog.py new file mode 100644 index 0000000..e3941da --- /dev/null +++ b/manuskript/ui/listDialog.py @@ -0,0 +1,16 @@ +from PyQt5.QtWidgets import QDialog +from manuskript.ui.listDialog_ui import Ui_GenericListDialog + + +class ListDialog(QDialog, Ui_GenericListDialog): + def __init__(self, parent=None): + QDialog.__init__(self, parent) + self.setupUi(self) + + def accept(self): + self.hide() + self.close() + + def reject(self): + self.hide() + self.close() diff --git a/manuskript/ui/listDialog_ui.py b/manuskript/ui/listDialog_ui.py new file mode 100644 index 0000000..17620be --- /dev/null +++ b/manuskript/ui/listDialog_ui.py @@ -0,0 +1,53 @@ +# -*- coding: utf-8 -*- + +# Form implementation generated from reading ui file 'listDialog_ui.ui' +# +# Created by: PyQt5 UI code generator 5.12.3 +# +# WARNING! All changes made in this file will be lost! + + +from PyQt5 import QtCore, QtGui, QtWidgets + + +class Ui_GenericListDialog(object): + def setupUi(self, GenericListDialog): + GenericListDialog.setObjectName("GenericListDialog") + GenericListDialog.resize(451, 340) + GenericListDialog.setModal(False) + self.verticalLayout_2 = QtWidgets.QVBoxLayout(GenericListDialog) + self.verticalLayout_2.setObjectName("verticalLayout_2") + self.verticalLayout = QtWidgets.QVBoxLayout() + self.verticalLayout.setObjectName("verticalLayout") + self.label = QtWidgets.QLabel(GenericListDialog) + self.label.setObjectName("label") + self.verticalLayout.addWidget(self.label) + self.listWidget = QtWidgets.QListWidget(GenericListDialog) + self.listWidget.setObjectName("listWidget") + self.verticalLayout.addWidget(self.listWidget) + self.verticalLayout_2.addLayout(self.verticalLayout) + self.buttonBox = QtWidgets.QDialogButtonBox(GenericListDialog) + self.buttonBox.setOrientation(QtCore.Qt.Horizontal) + self.buttonBox.setStandardButtons(QtWidgets.QDialogButtonBox.Ok) + self.buttonBox.setObjectName("buttonBox") + self.verticalLayout_2.addWidget(self.buttonBox) + + self.retranslateUi(GenericListDialog) + self.buttonBox.accepted.connect(GenericListDialog.accept) + self.buttonBox.rejected.connect(GenericListDialog.reject) + QtCore.QMetaObject.connectSlotsByName(GenericListDialog) + + def retranslateUi(self, GenericListDialog): + _translate = QtCore.QCoreApplication.translate + GenericListDialog.setWindowTitle(_translate("GenericListDialog", "Title")) + self.label.setText(_translate("GenericListDialog", "Text")) + + +if __name__ == "__main__": + import sys + app = QtWidgets.QApplication(sys.argv) + GenericListDialog = QtWidgets.QDialog() + ui = Ui_GenericListDialog() + ui.setupUi(GenericListDialog) + GenericListDialog.show() + sys.exit(app.exec_()) diff --git a/manuskript/ui/listDialog_ui.ui b/manuskript/ui/listDialog_ui.ui new file mode 100644 index 0000000..b41a257 --- /dev/null +++ b/manuskript/ui/listDialog_ui.ui @@ -0,0 +1,81 @@ + + + GenericListDialog + + + + 0 + 0 + 451 + 340 + + + + Title + + + false + + + + + + + + Text + + + + + + + + + + + + Qt::Horizontal + + + QDialogButtonBox::Ok + + + + + + + + + buttonBox + accepted() + GenericListDialog + accept() + + + 248 + 254 + + + 157 + 274 + + + + + buttonBox + rejected() + GenericListDialog + reject() + + + 316 + 260 + + + 286 + 274 + + + + + diff --git a/manuskript/ui/mainWindow.py b/manuskript/ui/mainWindow.py index d369527..1776d29 100644 --- a/manuskript/ui/mainWindow.py +++ b/manuskript/ui/mainWindow.py @@ -2,12 +2,15 @@ # Form implementation generated from reading ui file 'manuskript/ui/mainWindow.ui' # -# Created by: PyQt5 UI code generator 5.11.3 +# Created by: PyQt5 UI code generator 5.15.7 # -# 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 + class Ui_MainWindow(object): def setupUi(self, MainWindow): MainWindow.setObjectName("MainWindow") @@ -25,17 +28,17 @@ class Ui_MainWindow(object): self.welcomePage.setObjectName("welcomePage") self.gridLayout = QtWidgets.QGridLayout(self.welcomePage) self.gridLayout.setObjectName("gridLayout") - spacerItem = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) + spacerItem = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Minimum) self.gridLayout.addItem(spacerItem, 1, 0, 1, 1) - spacerItem1 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) + spacerItem1 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Minimum) self.gridLayout.addItem(spacerItem1, 1, 2, 1, 1) self.welcome = welcome(self.welcomePage) self.welcome.setMinimumSize(QtCore.QSize(200, 200)) self.welcome.setObjectName("welcome") self.gridLayout.addWidget(self.welcome, 1, 1, 1, 1) - spacerItem2 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding) + spacerItem2 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Minimum) self.gridLayout.addItem(spacerItem2, 0, 1, 1, 1) - spacerItem3 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding) + spacerItem3 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Minimum) self.gridLayout.addItem(spacerItem3, 2, 1, 1, 1) self.stack.addWidget(self.welcomePage) self.page_4 = QtWidgets.QWidget() @@ -134,14 +137,18 @@ class Ui_MainWindow(object): self.label_9 = QtWidgets.QLabel(self.lytTabSummary) font = QtGui.QFont() font.setBold(True) - font.setWeight(75) self.label_9.setFont(font) self.label_9.setObjectName("label_9") self.formLayout_5.setWidget(0, QtWidgets.QFormLayout.LabelRole, self.label_9) + self.lytSituation = QtWidgets.QVBoxLayout() + self.lytSituation.setObjectName("lytSituation") + self.txtSummarySituation = lineEditView(self.lytTabSummary) + self.txtSummarySituation.setObjectName("txtSummarySituation") + self.lytSituation.addWidget(self.txtSummarySituation) + self.formLayout_5.setLayout(0, QtWidgets.QFormLayout.FieldRole, self.lytSituation) self.label_29 = QtWidgets.QLabel(self.lytTabSummary) font = QtGui.QFont() font.setBold(True) - font.setWeight(75) self.label_29.setFont(font) self.label_29.setObjectName("label_29") self.formLayout_5.setWidget(1, QtWidgets.QFormLayout.LabelRole, self.label_29) @@ -290,37 +297,6 @@ class Ui_MainWindow(object): self.horizontalLayout_8.addLayout(self.verticalLayout_4) self.tabSummary.addWidget(self.tabSummaryPage4) self.formLayout_5.setWidget(2, QtWidgets.QFormLayout.FieldRole, self.tabSummary) - self.horizontalLayout_5 = QtWidgets.QHBoxLayout() - self.horizontalLayout_5.setObjectName("horizontalLayout_5") - spacerItem9 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) - self.horizontalLayout_5.addItem(spacerItem9) - self.btnStepThree = QtWidgets.QPushButton(self.lytTabSummary) - icon = QtGui.QIcon.fromTheme("go-next") - self.btnStepThree.setIcon(icon) - self.btnStepThree.setObjectName("btnStepThree") - self.horizontalLayout_5.addWidget(self.btnStepThree) - self.btnStepTwo = QtWidgets.QPushButton(self.lytTabSummary) - icon = QtGui.QIcon.fromTheme("go-next") - self.btnStepTwo.setIcon(icon) - self.btnStepTwo.setObjectName("btnStepTwo") - self.horizontalLayout_5.addWidget(self.btnStepTwo) - self.btnStepFive = QtWidgets.QPushButton(self.lytTabSummary) - icon = QtGui.QIcon.fromTheme("go-next") - self.btnStepFive.setIcon(icon) - self.btnStepFive.setObjectName("btnStepFive") - self.horizontalLayout_5.addWidget(self.btnStepFive) - self.btnStepSeven = QtWidgets.QPushButton(self.lytTabSummary) - icon = QtGui.QIcon.fromTheme("go-next") - self.btnStepSeven.setIcon(icon) - self.btnStepSeven.setObjectName("btnStepSeven") - self.horizontalLayout_5.addWidget(self.btnStepSeven) - self.formLayout_5.setLayout(3, QtWidgets.QFormLayout.FieldRole, self.horizontalLayout_5) - self.lytSituation = QtWidgets.QVBoxLayout() - self.lytSituation.setObjectName("lytSituation") - self.txtSummarySituation = lineEditView(self.lytTabSummary) - self.txtSummarySituation.setObjectName("txtSummarySituation") - self.lytSituation.addWidget(self.txtSummarySituation) - self.formLayout_5.setLayout(0, QtWidgets.QFormLayout.FieldRole, self.lytSituation) self.verticalLayout_24.addLayout(self.formLayout_5) self.tabMain.addTab(self.lytTabSummary, "") self.lytTabPersos = QtWidgets.QWidget() @@ -378,69 +354,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, 252, 664)) + self.scrollAreaPersoInfosWidget.setGeometry(QtCore.QRect(0, 0, 453, 699)) 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 +372,62 @@ 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.label_18 = QtWidgets.QLabel(self.scrollAreaPersoInfosWidget) + self.label_18.setObjectName("label_18") + self.formLayout_8.setWidget(4, QtWidgets.QFormLayout.LabelRole, self.label_18) + 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.scrollAreaPersoInfos.setWidget(self.scrollAreaPersoInfosWidget) self.verticalLayout_20.addWidget(self.scrollAreaPersoInfos) self.tabPersos.addTab(self.info, "") @@ -464,16 +438,6 @@ class Ui_MainWindow(object): self.txtPersoSummaryFull = MDEditCompleter(self.tab_11) self.txtPersoSummaryFull.setObjectName("txtPersoSummaryFull") self.verticalLayout_17.addWidget(self.txtPersoSummaryFull) - self.horizontalLayout_22 = QtWidgets.QHBoxLayout() - self.horizontalLayout_22.setObjectName("horizontalLayout_22") - spacerItem11 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) - self.horizontalLayout_22.addItem(spacerItem11) - self.btnStepSix = QtWidgets.QPushButton(self.tab_11) - icon = QtGui.QIcon.fromTheme("go-next") - self.btnStepSix.setIcon(icon) - self.btnStepSix.setObjectName("btnStepSix") - self.horizontalLayout_22.addWidget(self.btnStepSix) - self.verticalLayout_17.addLayout(self.horizontalLayout_22) self.tabPersos.addTab(self.tab_11, "") self.tab_19 = QtWidgets.QWidget() self.tab_19.setObjectName("tab_19") @@ -510,13 +474,8 @@ class Ui_MainWindow(object): self.lineEdit = QtWidgets.QLineEdit(self.tab_12) self.lineEdit.setObjectName("lineEdit") self.horizontalLayout_9.addWidget(self.lineEdit) - spacerItem12 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) - self.horizontalLayout_9.addItem(spacerItem12) - self.btnStepEight = QtWidgets.QPushButton(self.tab_12) - icon = QtGui.QIcon.fromTheme("go-next") - self.btnStepEight.setIcon(icon) - self.btnStepEight.setObjectName("btnStepEight") - self.horizontalLayout_9.addWidget(self.btnStepEight) + spacerItem9 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) + self.horizontalLayout_9.addItem(spacerItem9) self.verticalLayout_9.addLayout(self.horizontalLayout_9) self.tabPersos.addTab(self.tab_12, "") self.verticalLayout_25.addWidget(self.splitterPersos) @@ -599,8 +558,8 @@ class Ui_MainWindow(object): self.verticalLayout_12.addWidget(self.lstPlotPerso) self.horizontalLayout_16 = QtWidgets.QHBoxLayout() self.horizontalLayout_16.setObjectName("horizontalLayout_16") - spacerItem13 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) - self.horizontalLayout_16.addItem(spacerItem13) + spacerItem10 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) + self.horizontalLayout_16.addItem(spacerItem10) self.btnAddPlotPerso = QtWidgets.QPushButton(self.infos_2) self.btnAddPlotPerso.setText("") icon = QtGui.QIcon.fromTheme("list-add") @@ -668,8 +627,8 @@ class Ui_MainWindow(object): self.btnRmSubPlot.setFlat(True) self.btnRmSubPlot.setObjectName("btnRmSubPlot") self.horizontalLayout_17.addWidget(self.btnRmSubPlot) - spacerItem14 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) - self.horizontalLayout_17.addItem(spacerItem14) + spacerItem11 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) + self.horizontalLayout_17.addItem(spacerItem11) self.btnShowSubPlotSummary = QtWidgets.QPushButton(self.tab_15) self.btnShowSubPlotSummary.setText("") icon = QtGui.QIcon.fromTheme("text-x-generic") @@ -745,7 +704,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(35) self.verticalLayout_32.addWidget(self.treeWorld) self.horizontalLayout_19 = QtWidgets.QHBoxLayout() self.horizontalLayout_19.setObjectName("horizontalLayout_19") @@ -878,8 +837,8 @@ class Ui_MainWindow(object): self.btnOutlineRemoveItem.setFlat(True) self.btnOutlineRemoveItem.setObjectName("btnOutlineRemoveItem") self.horizontalLayout_18.addWidget(self.btnOutlineRemoveItem) - spacerItem15 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) - self.horizontalLayout_18.addItem(spacerItem15) + spacerItem12 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) + self.horizontalLayout_18.addItem(spacerItem12) self.btnPlanShowDetails = QtWidgets.QPushButton(self.layoutWidget) self.btnPlanShowDetails.setText("") icon = QtGui.QIcon.fromTheme("text-x-generic") @@ -940,8 +899,8 @@ class Ui_MainWindow(object): self.btnRedacRemoveItem.setFlat(True) self.btnRedacRemoveItem.setObjectName("btnRedacRemoveItem") self.horizontalLayout_31.addWidget(self.btnRedacRemoveItem) - spacerItem16 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) - self.horizontalLayout_31.addItem(spacerItem16) + spacerItem13 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) + self.horizontalLayout_31.addItem(spacerItem13) self.verticalLayout_30.addLayout(self.horizontalLayout_31) self.mainEditor = mainEditor(self.splitterRedacH) self.mainEditor.setObjectName("mainEditor") @@ -1030,7 +989,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, 25)) + self.menubar.setGeometry(QtCore.QRect(0, 0, 1112, 23)) self.menubar.setObjectName("menubar") self.menuFile = QtWidgets.QMenu(self.menubar) self.menuFile.setObjectName("menuFile") @@ -1070,7 +1029,6 @@ class Ui_MainWindow(object): self.cheatSheet = cheatSheet(self.dockWidgetContents_5) font = QtGui.QFont() font.setBold(False) - font.setWeight(50) self.cheatSheet.setFont(font) self.cheatSheet.setObjectName("cheatSheet") self.verticalLayout_39.addWidget(self.cheatSheet) @@ -1086,7 +1044,6 @@ class Ui_MainWindow(object): self.widget = search(self.dockWidgetContents_6) font = QtGui.QFont() font.setBold(False) - font.setWeight(50) self.widget.setFont(font) self.widget.setObjectName("widget") self.verticalLayout_40.addWidget(self.widget) @@ -1273,6 +1230,14 @@ class Ui_MainWindow(object): self.actFormatBlockquote.setObjectName("actFormatBlockquote") self.actToolTargets = QtWidgets.QAction(MainWindow) self.actToolTargets.setObjectName("actToolTargets") + self.actSearch = QtWidgets.QAction(MainWindow) + 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) @@ -1284,6 +1249,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) @@ -1317,6 +1286,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()) @@ -1343,20 +1313,109 @@ class Ui_MainWindow(object): self.retranslateUi(MainWindow) self.stack.setCurrentIndex(1) - self.tabMain.setCurrentIndex(3) + self.tabMain.setCurrentIndex(2) self.tabSummary.setCurrentIndex(0) - self.tabPersos.setCurrentIndex(2) - self.tabPlot.setCurrentIndex(1) + self.tabPersos.setCurrentIndex(3) + self.tabPlot.setCurrentIndex(0) self.comboBox_2.setCurrentIndex(0) self.stkPlotSummary.setCurrentIndex(0) self.tabWorld.setCurrentIndex(0) - self.tabWidget.setCurrentIndex(2) - self.comboBox_2.currentIndexChanged['int'].connect(self.stkPlotSummary.setCurrentIndex) - self.btnPlanShowDetails.toggled['bool'].connect(self.frame.setVisible) - self.cmbSummary.currentIndexChanged['int'].connect(self.tabSummary.setCurrentIndex) - self.tabSummary.currentChanged['int'].connect(self.cmbSummary.setCurrentIndex) - self.btnShowSubPlotSummary.toggled['bool'].connect(self.grpSubPlotSummary.setVisible) + self.tabWidget.setCurrentIndex(0) + self.comboBox_2.currentIndexChanged['int'].connect(self.stkPlotSummary.setCurrentIndex) # type: ignore + self.btnPlanShowDetails.toggled['bool'].connect(self.frame.setVisible) # type: ignore + self.cmbSummary.currentIndexChanged['int'].connect(self.tabSummary.setCurrentIndex) # type: ignore + self.tabSummary.currentChanged['int'].connect(self.cmbSummary.setCurrentIndex) # type: ignore + self.btnShowSubPlotSummary.toggled['bool'].connect(self.grpSubPlotSummary.setVisible) # type: ignore QtCore.QMetaObject.connectSlotsByName(MainWindow) + MainWindow.setTabOrder(self.tabMain, self.txtGeneralTitle) + MainWindow.setTabOrder(self.txtGeneralTitle, self.txtGeneralSubtitle) + MainWindow.setTabOrder(self.txtGeneralSubtitle, self.txtGeneralSerie) + MainWindow.setTabOrder(self.txtGeneralSerie, self.txtGeneralVolume) + MainWindow.setTabOrder(self.txtGeneralVolume, self.txtGeneralGenre) + MainWindow.setTabOrder(self.txtGeneralGenre, self.txtGeneralLicense) + MainWindow.setTabOrder(self.txtGeneralLicense, self.txtGeneralAuthor) + MainWindow.setTabOrder(self.txtGeneralAuthor, self.txtGeneralEmail) + MainWindow.setTabOrder(self.txtGeneralEmail, self.cmbSummary) + MainWindow.setTabOrder(self.cmbSummary, self.txtSummarySentence) + MainWindow.setTabOrder(self.txtSummarySentence, self.txtSummarySentence_2) + MainWindow.setTabOrder(self.txtSummarySentence_2, self.txtSummaryPara) + MainWindow.setTabOrder(self.txtSummaryPara, self.txtSummaryPara_2) + MainWindow.setTabOrder(self.txtSummaryPara_2, self.txtSummaryPage) + MainWindow.setTabOrder(self.txtSummaryPage, self.txtSummaryPage_2) + MainWindow.setTabOrder(self.txtSummaryPage_2, self.txtSummaryFull) + MainWindow.setTabOrder(self.txtSummaryFull, self.txtSummarySituation) + MainWindow.setTabOrder(self.txtSummarySituation, self.lstCharacters) + MainWindow.setTabOrder(self.lstCharacters, self.btnAddPerso) + MainWindow.setTabOrder(self.btnAddPerso, self.btnRmPerso) + MainWindow.setTabOrder(self.btnRmPerso, self.txtPersosFilter) + MainWindow.setTabOrder(self.txtPersosFilter, self.tabPersos) + MainWindow.setTabOrder(self.tabPersos, self.scrollAreaPersoInfos) + MainWindow.setTabOrder(self.scrollAreaPersoInfos, self.txtPersoName) + MainWindow.setTabOrder(self.txtPersoName, self.btnPersoColor) + MainWindow.setTabOrder(self.btnPersoColor, self.txtPersoMotivation) + MainWindow.setTabOrder(self.txtPersoMotivation, self.txtPersoGoal) + MainWindow.setTabOrder(self.txtPersoGoal, self.txtPersoConflict) + MainWindow.setTabOrder(self.txtPersoConflict, self.txtPersoEpiphany) + MainWindow.setTabOrder(self.txtPersoEpiphany, self.txtPersoSummarySentence) + MainWindow.setTabOrder(self.txtPersoSummarySentence, self.txtPersoSummaryPara) + MainWindow.setTabOrder(self.txtPersoSummaryPara, self.txtPersoSummaryFull) + MainWindow.setTabOrder(self.txtPersoSummaryFull, self.txtPersoNotes) + MainWindow.setTabOrder(self.txtPersoNotes, self.tblPersoInfos) + MainWindow.setTabOrder(self.tblPersoInfos, self.btnPersoAddInfo) + MainWindow.setTabOrder(self.btnPersoAddInfo, self.btnPersoRmInfo) + MainWindow.setTabOrder(self.btnPersoRmInfo, self.lineEdit) + MainWindow.setTabOrder(self.lineEdit, self.lstPlots) + MainWindow.setTabOrder(self.lstPlots, self.btnAddPlot) + MainWindow.setTabOrder(self.btnAddPlot, self.btnRmPlot) + MainWindow.setTabOrder(self.btnRmPlot, self.txtPlotFilter) + MainWindow.setTabOrder(self.txtPlotFilter, self.tabPlot) + MainWindow.setTabOrder(self.tabPlot, self.txtPlotName) + MainWindow.setTabOrder(self.txtPlotName, self.lstPlotPerso) + MainWindow.setTabOrder(self.lstPlotPerso, self.btnAddPlotPerso) + MainWindow.setTabOrder(self.btnAddPlotPerso, self.btnRmPlotPerso) + MainWindow.setTabOrder(self.btnRmPlotPerso, self.txtPlotDescription) + MainWindow.setTabOrder(self.txtPlotDescription, self.txtPlotResult) + MainWindow.setTabOrder(self.txtPlotResult, self.lstSubPlots) + MainWindow.setTabOrder(self.lstSubPlots, self.txtSubPlotSummary) + MainWindow.setTabOrder(self.txtSubPlotSummary, self.btnAddSubPlot) + MainWindow.setTabOrder(self.btnAddSubPlot, self.btnRmSubPlot) + MainWindow.setTabOrder(self.btnRmSubPlot, self.btnShowSubPlotSummary) + MainWindow.setTabOrder(self.btnShowSubPlotSummary, self.comboBox_2) + MainWindow.setTabOrder(self.comboBox_2, self.txtPlotSummaryPara) + MainWindow.setTabOrder(self.txtPlotSummaryPara, self.txtPlotSummaryPage) + MainWindow.setTabOrder(self.txtPlotSummaryPage, self.txtPlotSummaryFull) + MainWindow.setTabOrder(self.txtPlotSummaryFull, self.treeWorld) + MainWindow.setTabOrder(self.treeWorld, self.btnAddWorld) + MainWindow.setTabOrder(self.btnAddWorld, self.btnRmWorld) + MainWindow.setTabOrder(self.btnRmWorld, self.txtWorldFilter) + MainWindow.setTabOrder(self.txtWorldFilter, self.btnWorldEmptyData) + MainWindow.setTabOrder(self.btnWorldEmptyData, self.tabWorld) + MainWindow.setTabOrder(self.tabWorld, self.txtWorldName) + MainWindow.setTabOrder(self.txtWorldName, self.txtWorldDescription) + MainWindow.setTabOrder(self.txtWorldDescription, self.txtWorldPassion) + MainWindow.setTabOrder(self.txtWorldPassion, self.txtWorldConflict) + MainWindow.setTabOrder(self.txtWorldConflict, self.lstOutlinePlots) + MainWindow.setTabOrder(self.lstOutlinePlots, self.treeOutlineOutline) + MainWindow.setTabOrder(self.treeOutlineOutline, self.btnOutlineAddFolder) + MainWindow.setTabOrder(self.btnOutlineAddFolder, self.btnOutlineAddText) + MainWindow.setTabOrder(self.btnOutlineAddText, self.btnOutlineRemoveItem) + MainWindow.setTabOrder(self.btnOutlineRemoveItem, self.btnPlanShowDetails) + MainWindow.setTabOrder(self.btnPlanShowDetails, self.treeRedacOutline) + MainWindow.setTabOrder(self.treeRedacOutline, self.btnRedacAddFolder) + MainWindow.setTabOrder(self.btnRedacAddFolder, self.btnRedacAddText) + MainWindow.setTabOrder(self.btnRedacAddText, self.btnRedacRemoveItem) + MainWindow.setTabOrder(self.btnRedacRemoveItem, self.tabWidget) + MainWindow.setTabOrder(self.tabWidget, self.tblDebugFlatData) + MainWindow.setTabOrder(self.tblDebugFlatData, self.tblDebugPersos) + MainWindow.setTabOrder(self.tblDebugPersos, self.tblDebugPersosInfos) + MainWindow.setTabOrder(self.tblDebugPersosInfos, self.tblDebugPlots) + MainWindow.setTabOrder(self.tblDebugPlots, self.tblDebugPlotsPersos) + MainWindow.setTabOrder(self.tblDebugPlotsPersos, self.tblDebugSubPlots) + MainWindow.setTabOrder(self.tblDebugSubPlots, self.treeDebugWorld) + MainWindow.setTabOrder(self.treeDebugWorld, self.treeDebugOutline) + MainWindow.setTabOrder(self.treeDebugOutline, self.lstDebugLabels) + MainWindow.setTabOrder(self.lstDebugLabels, self.lstDebugStatus) + MainWindow.setTabOrder(self.lstDebugStatus, self.lstTabs) def retranslateUi(self, MainWindow): _translate = QtCore.QCoreApplication.translate @@ -1372,6 +1431,7 @@ class Ui_MainWindow(object): self.label_19.setText(_translate("MainWindow", "Email")) self.tabMain.setTabText(self.tabMain.indexOf(self.lytTabOverview), _translate("MainWindow", "General")) self.label_9.setText(_translate("MainWindow", "Situation:")) + self.txtSummarySituation.setPlaceholderText(_translate("MainWindow", "What if...?")) self.label_29.setText(_translate("MainWindow", "Summary:")) self.cmbSummary.setItemText(0, _translate("MainWindow", "One sentence")) self.cmbSummary.setItemText(1, _translate("MainWindow", "One paragraph")) @@ -1384,29 +1444,22 @@ class Ui_MainWindow(object): self.label_17.setText(_translate("MainWindow", "Expand each sentence of your one paragraph summary to a paragraph")) self.label_23.setText(_translate("MainWindow", "One page summary")) self.label_20.setText(_translate("MainWindow", "Full summary")) - self.btnStepThree.setText(_translate("MainWindow", "Next")) - self.btnStepTwo.setText(_translate("MainWindow", "Next")) - self.btnStepFive.setText(_translate("MainWindow", "Next")) - self.btnStepSeven.setText(_translate("MainWindow", "Next")) - self.txtSummarySituation.setPlaceholderText(_translate("MainWindow", "What if...?")) 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.label_18.setText(_translate("MainWindow", "Importance")) + 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")) self.label_7.setText(_translate("MainWindow", "Epiphany")) self.label_24.setText(_translate("MainWindow", "

One sentence
summary

")) 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")) self.tabPersos.setTabText(self.tabPersos.indexOf(self.tab_19), _translate("MainWindow", "Notes")) self.lineEdit.setPlaceholderText(_translate("MainWindow", "Filter")) - self.btnStepEight.setText(_translate("MainWindow", "Next")) self.tabPersos.setTabText(self.tabPersos.indexOf(self.tab_12), _translate("MainWindow", "Detailed info")) self.tabMain.setTabText(self.tabMain.indexOf(self.lytTabPersos), _translate("MainWindow", "Characters")) self.groupBox_2.setTitle(_translate("MainWindow", "Plots")) @@ -1547,6 +1600,15 @@ class Ui_MainWindow(object): self.actToolTargets.setToolTip(_translate("MainWindow", "Draft and session word count targets")) self.actToolTargets.setShortcut(_translate("MainWindow", "Ctrl+,")) + 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 d0a07d6..330c8d1 100644 --- a/manuskript/ui/mainWindow.ui +++ b/manuskript/ui/mainWindow.ui @@ -42,6 +42,9 @@ Qt::Horizontal + + QSizePolicy::Minimum + 40 @@ -55,6 +58,9 @@ Qt::Horizontal + + QSizePolicy::Minimum + 40 @@ -78,6 +84,9 @@ Qt::Vertical + + QSizePolicy::Minimum + 20 @@ -91,6 +100,9 @@ Qt::Vertical + + QSizePolicy::Minimum + 20 @@ -124,7 +136,7 @@ QTabWidget::Rounded - 3 + 2 true @@ -314,7 +326,6 @@ - 75 true @@ -323,11 +334,21 @@
+ + + + + + What if...? + + + + + - 75 true @@ -607,78 +628,6 @@ - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - Next - - - - .. - - - - - - - Next - - - - .. - - - - - - - Next - - - - .. - - - - - - - Next - - - - .. - - - - - - - - - - - What if...? - - - - - @@ -774,7 +723,7 @@ - 2 + 3 @@ -815,122 +764,14 @@ 0 0 - 252 - 664 + 453 + 699 QFormLayout::AllNonFixedFieldsGrow - - - - 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> - - - - - - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - Next - - - - .. - - - true - - - - - - - - - Importance - - - - - - - - 0 - 0 - - - - @@ -952,6 +793,103 @@ + + + + Importance + + + + + + + + + + 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> + + + + + + @@ -966,34 +904,6 @@ - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - Next - - - - .. - - - - - @@ -1068,17 +978,6 @@ - - - - Next - - - - .. - - - @@ -1173,7 +1072,7 @@ - 1 + 0 true @@ -1547,7 +1446,7 @@ false - 0 + 35 @@ -1991,7 +1890,7 @@ QTabWidget::West - 2 + 0 @@ -2095,7 +1994,7 @@ 0 0 1112 - 25 + 23 @@ -2127,6 +2026,10 @@ &Help + + + + @@ -2184,6 +2087,7 @@ + @@ -2250,7 +2154,6 @@ - 50 false @@ -2284,7 +2187,6 @@ - 50 false @@ -2828,6 +2730,41 @@ Ctrl+, + + + + .. + + + Search + + + 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 @@ -2911,6 +2848,98 @@ 1 + + tabMain + txtGeneralTitle + txtGeneralSubtitle + txtGeneralSerie + txtGeneralVolume + txtGeneralGenre + txtGeneralLicense + txtGeneralAuthor + txtGeneralEmail + cmbSummary + txtSummarySentence + txtSummarySentence_2 + txtSummaryPara + txtSummaryPara_2 + txtSummaryPage + txtSummaryPage_2 + txtSummaryFull + txtSummarySituation + lstCharacters + btnAddPerso + btnRmPerso + txtPersosFilter + tabPersos + scrollAreaPersoInfos + txtPersoName + btnPersoColor + txtPersoMotivation + txtPersoGoal + txtPersoConflict + txtPersoEpiphany + txtPersoSummarySentence + txtPersoSummaryPara + txtPersoSummaryFull + txtPersoNotes + tblPersoInfos + btnPersoAddInfo + btnPersoRmInfo + lineEdit + lstPlots + btnAddPlot + btnRmPlot + txtPlotFilter + tabPlot + txtPlotName + lstPlotPerso + btnAddPlotPerso + btnRmPlotPerso + txtPlotDescription + txtPlotResult + lstSubPlots + txtSubPlotSummary + btnAddSubPlot + btnRmSubPlot + btnShowSubPlotSummary + comboBox_2 + txtPlotSummaryPara + txtPlotSummaryPage + txtPlotSummaryFull + treeWorld + btnAddWorld + btnRmWorld + txtWorldFilter + btnWorldEmptyData + tabWorld + txtWorldName + txtWorldDescription + txtWorldPassion + txtWorldConflict + lstOutlinePlots + treeOutlineOutline + btnOutlineAddFolder + btnOutlineAddText + btnOutlineRemoveItem + btnPlanShowDetails + treeRedacOutline + btnRedacAddFolder + btnRedacAddText + btnRedacRemoveItem + tabWidget + tblDebugFlatData + tblDebugPersos + tblDebugPersosInfos + tblDebugPlots + tblDebugPlotsPersos + tblDebugSubPlots + treeDebugWorld + treeDebugOutline + lstDebugLabels + lstDebugStatus + lstTabs + diff --git a/manuskript/ui/search.py b/manuskript/ui/search.py index 06441ae..b9b9977 100644 --- a/manuskript/ui/search.py +++ b/manuskript/ui/search.py @@ -1,147 +1,186 @@ #!/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 +import re + +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 +import logging +LOGGER = logging.getLogger(__name__) 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.searchTextInput.textChanged.connect(self.updateSearchFeedback) - self.text.returnPressed.connect(self.search) - self.generateOptionMenu() + self.searchMenu = searchMenu() + self.btnOptions.setMenu(self.searchMenu) + self.searchMenu.triggered.connect(self.onSearchMenuChange) 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 onSearchMenuChange(self): + search_string = self.searchTextInput.text() + self.updateSearchFeedback(search_string) + + def updateSearchFeedback(self, search_string): + palette = QPalette() + try: + self.compileRegex(search_string) + except Exception as e: + # From https://stackoverflow.com/questions/27432456/python-qlineedit-text-color + palette.setColor(QPalette.Text, Qt.red) + + self.searchTextInput.setPalette(palette) + + def prepareRegex(self, searchText): + rtn = None + try: + rtn = self.compileRegex(searchText) + except re.error as e: + LOGGER.info("Problem preparing regular expression: " + e.msg) + rtn = None + except Exception as e: + LOGGER.info("Problem preparing regular expression") + rtn = None + return rtn + + def compileRegex(self, searchText): + # Intentionally throws exceptions for use elsewhere + 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: + results = list() + searchRegex = self.prepareRegex(searchText) + if searchRegex is not None: + # 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() + else: + # No results to generate if there is a problem with the regex + self.generateResultsLists(list()) + + 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 +192,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/settings_ui.py b/manuskript/ui/settings_ui.py index d958116..90ec80d 100644 --- a/manuskript/ui/settings_ui.py +++ b/manuskript/ui/settings_ui.py @@ -2,16 +2,19 @@ # Form implementation generated from reading ui file 'manuskript/ui/settings_ui.ui' # -# Created by: PyQt5 UI code generator 5.9 +# Created by: PyQt5 UI code generator 5.15.7 # -# 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 + 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) @@ -53,50 +56,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) @@ -104,7 +66,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() @@ -164,8 +189,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") @@ -200,8 +225,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() @@ -221,8 +246,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") @@ -288,6 +313,7 @@ class Ui_Settings(object): font.setWeight(50) self.spnRevisions10Mn.setFont(font) self.spnRevisions10Mn.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.spnRevisions10Mn.setMinimum(1) self.spnRevisions10Mn.setMaximum(999) self.spnRevisions10Mn.setProperty("value", 1) self.spnRevisions10Mn.setObjectName("spnRevisions10Mn") @@ -324,6 +350,7 @@ class Ui_Settings(object): font.setWeight(50) self.spnRevisionsDay.setFont(font) self.spnRevisionsDay.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.spnRevisionsDay.setMinimum(1) self.spnRevisionsDay.setMaximum(999) self.spnRevisionsDay.setProperty("value", 1) self.spnRevisionsDay.setObjectName("spnRevisionsDay") @@ -339,6 +366,7 @@ class Ui_Settings(object): font.setWeight(50) self.spnRevisionsHour.setFont(font) self.spnRevisionsHour.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.spnRevisionsHour.setMinimum(1) self.spnRevisionsHour.setMaximum(999) self.spnRevisionsHour.setProperty("value", 1) self.spnRevisionsHour.setObjectName("spnRevisionsHour") @@ -354,6 +382,7 @@ class Ui_Settings(object): font.setWeight(50) self.spnRevisionsMonth.setFont(font) self.spnRevisionsMonth.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.spnRevisionsMonth.setMinimum(1) self.spnRevisionsMonth.setMaximum(999) self.spnRevisionsMonth.setProperty("value", 1) self.spnRevisionsMonth.setObjectName("spnRevisionsMonth") @@ -369,6 +398,7 @@ class Ui_Settings(object): font.setWeight(50) self.spnRevisionsEternity.setFont(font) self.spnRevisionsEternity.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.spnRevisionsEternity.setMinimum(1) self.spnRevisionsEternity.setMaximum(999) self.spnRevisionsEternity.setProperty("value", 1) self.spnRevisionsEternity.setObjectName("spnRevisionsEternity") @@ -381,8 +411,13 @@ 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) + self.label_revisionDeprecation.setObjectName("label_revisionDeprecation") + self.verticalLayout.addWidget(self.label_revisionDeprecation) self.stack.addWidget(self.page_3) self.stackedWidgetPage2 = QtWidgets.QWidget() self.stackedWidgetPage2.setObjectName("stackedWidgetPage2") @@ -512,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) @@ -536,6 +590,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) @@ -574,6 +635,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) @@ -595,12 +663,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) + 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_() + 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) + 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() @@ -762,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) - spacerItem6 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding) - self.verticalLayout_11.addItem(spacerItem6) + 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() @@ -809,8 +882,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) + 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() @@ -1368,8 +1441,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) + 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() @@ -1386,8 +1459,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) + 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() @@ -1421,8 +1494,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) + 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() @@ -1470,8 +1543,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) + 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() @@ -1532,7 +1605,6 @@ class Ui_Settings(object): self.stackedWidgetPage1_2.setObjectName("stackedWidgetPage1_2") self.formLayout_4 = QtWidgets.QFormLayout(self.stackedWidgetPage1_2) self.formLayout_4.setFieldGrowthPolicy(QtWidgets.QFormLayout.AllNonFixedFieldsGrow) - self.formLayout_4.setContentsMargins(0, 0, 0, 0) self.formLayout_4.setObjectName("formLayout_4") self.label_17 = QtWidgets.QLabel(self.stackedWidgetPage1_2) self.label_17.setObjectName("label_17") @@ -1564,7 +1636,6 @@ class Ui_Settings(object): self.stackedWidgetPage2_2.setObjectName("stackedWidgetPage2_2") self.formLayout_5 = QtWidgets.QFormLayout(self.stackedWidgetPage2_2) self.formLayout_5.setFieldGrowthPolicy(QtWidgets.QFormLayout.AllNonFixedFieldsGrow) - self.formLayout_5.setContentsMargins(0, 0, 0, 0) self.formLayout_5.setObjectName("formLayout_5") self.label_20 = QtWidgets.QLabel(self.stackedWidgetPage2_2) self.label_20.setObjectName("label_20") @@ -1662,7 +1733,6 @@ class Ui_Settings(object): self.page_2.setObjectName("page_2") self.formLayout_7 = QtWidgets.QFormLayout(self.page_2) self.formLayout_7.setFieldGrowthPolicy(QtWidgets.QFormLayout.AllNonFixedFieldsGrow) - self.formLayout_7.setContentsMargins(0, 0, 0, 0) self.formLayout_7.setObjectName("formLayout_7") self.label_29 = QtWidgets.QLabel(self.page_2) self.label_29.setObjectName("label_29") @@ -1712,7 +1782,6 @@ class Ui_Settings(object): self.stackedWidgetPage3_2.setObjectName("stackedWidgetPage3_2") self.formLayout_6 = QtWidgets.QFormLayout(self.stackedWidgetPage3_2) self.formLayout_6.setFieldGrowthPolicy(QtWidgets.QFormLayout.AllNonFixedFieldsGrow) - self.formLayout_6.setContentsMargins(0, 0, 0, 0) self.formLayout_6.setObjectName("formLayout_6") self.label_26 = QtWidgets.QLabel(self.stackedWidgetPage3_2) self.label_26.setObjectName("label_26") @@ -1815,12 +1884,12 @@ 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) + self.lstMenu.currentRowChanged['int'].connect(self.stack.setCurrentIndex) # type: ignore + self.chkRevisionsKeep.toggled['bool'].connect(self.chkRevisionRemove.setEnabled) # type: ignore QtCore.QMetaObject.connectSlotsByName(Settings) def retranslateUi(self, Settings): @@ -1843,10 +1912,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", "You might need to restart manuskript in order for those settings to take effect properly and entirely.")) + 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")) @@ -1854,8 +1925,8 @@ class Ui_Settings(object): self.label.setText(_translate("Settings", "minutes.")) self.chkAutoSaveNoChanges.setText(_translate("Settings", "If no changes during")) self.label_14.setText(_translate("Settings", "seconds.")) - self.chkSaveOnQuit.setText(_translate("Settings", "Save on quit")) - self.chkSaveToZip.setToolTip(_translate("Settings", "

If you check this option, your project will be save as one single file. Easier to copy or backup, but does not allow collaborative editing, or versionning.
If this is unchecked, your project will be save as a folder containing many small files.

")) + self.chkSaveOnQuit.setText(_translate("Settings", "Save on project close")) + self.chkSaveToZip.setToolTip(_translate("Settings", "

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.
If this is unchecked, your project will be saved as a folder containing many small files.

")) self.chkSaveToZip.setText(_translate("Settings", "Save to one single file")) self.lblTitleGeneral_2.setText(_translate("Settings", "Revisions")) self.label_44.setText(_translate("Settings", "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.")) @@ -1868,6 +1939,7 @@ class Ui_Settings(object): self.label_49.setText(_translate("Settings", "revisions per hour for the last day")) self.label_48.setText(_translate("Settings", "revisions per 10 minutes for the last hour")) self.label_51.setText(_translate("Settings", "revisions per week till the end of time")) + self.label_revisionDeprecation.setText(_translate("Settings", "

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.

Why aren\'t these issues fixed already? We need your help to make Manuskript better!

")) self.lblTitleViews.setText(_translate("Settings", "Views settings")) self.groupBox_3.setTitle(_translate("Settings", "Colors")) self.label_3.setText(_translate("Settings", "Icon color:")) @@ -1890,14 +1962,18 @@ 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")) + 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")) @@ -2075,4 +2151,3 @@ class Ui_Settings(object): self.cmbThemeAlignment.setItemText(2, _translate("Settings", "Right")) self.cmbThemeAlignment.setItemText(3, _translate("Settings", "Justify")) self.label_53.setText(_translate("Settings", "Alignment")) - diff --git a/manuskript/ui/settings_ui.ui b/manuskript/ui/settings_ui.ui index dc745c4..6b1a658 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 - - - - You might need to restart manuskript in order for those settings to take effect properly and entirely. - - - 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 + + + + + + + + + @@ -407,7 +453,7 @@ - Save on quit + Save on project close true @@ -423,7 +469,7 @@ - <html><head/><body><p>If you check this option, your project will be save as one single file. Easier to copy or backup, but does not allow collaborative editing, or versionning.<br/>If this is unchecked, your project will be save as a folder containing many small files.</p></body></html> + <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> @@ -578,6 +624,9 @@ Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + 1 + 999 @@ -642,6 +691,9 @@ Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + 1 + 999 @@ -667,6 +719,9 @@ Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + 1 + 999 @@ -692,6 +747,9 @@ Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + 1 + 999 @@ -717,6 +775,9 @@ Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + 1 + 999 @@ -754,6 +815,19 @@ + + + + <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> + + + true + + + true + + +
@@ -789,7 +863,7 @@ - 3 + 0 @@ -1027,6 +1101,59 @@ + + + + + 75 + true + + + + Char/Word Counter + + + + 9 + + + 9 + + + 9 + + + 9 + + + + + + 50 + false + + + + Count spaces as chars + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + @@ -1067,6 +1194,19 @@
+ + + + + 50 + false + + + + Show char c&ount + + + @@ -1137,6 +1277,19 @@ + + + + + 50 + false + + + + Sho&w char count + + + @@ -1196,6 +1349,11 @@ + rdoTreeTextCC + rdoTreeTextWC + rdoTreeTextProgress + rdoTreeTextSummary + rdoTreeTextNothing
@@ -2946,7 +3104,7 @@ - 1 + 0 diff --git a/manuskript/ui/tools/frequency_ui.py b/manuskript/ui/tools/frequency_ui.py index cf2058e..29d105f 100644 --- a/manuskript/ui/tools/frequency_ui.py +++ b/manuskript/ui/tools/frequency_ui.py @@ -2,8 +2,7 @@ # Form implementation generated from reading ui file 'manuskript/ui/tools/frequency_ui.ui' # -# Created: Mon Feb 8 13:54:01 2016 -# by: PyQt5 UI code generator 5.2.1 +# Created by: PyQt5 UI code generator 5.5.1 # # WARNING! All changes made in this file will be lost! @@ -24,12 +23,11 @@ class Ui_FrequencyAnalyzer(object): self.splitter = QtWidgets.QSplitter(self.tab) self.splitter.setOrientation(QtCore.Qt.Horizontal) self.splitter.setObjectName("splitter") - self.widget = QtWidgets.QWidget(self.splitter) - self.widget.setObjectName("widget") - self.verticalLayout = QtWidgets.QVBoxLayout(self.widget) - self.verticalLayout.setContentsMargins(0, 0, 0, 0) + self.layoutWidget = QtWidgets.QWidget(self.splitter) + self.layoutWidget.setObjectName("layoutWidget") + self.verticalLayout = QtWidgets.QVBoxLayout(self.layoutWidget) self.verticalLayout.setObjectName("verticalLayout") - self.groupBox = QtWidgets.QGroupBox(self.widget) + self.groupBox = QtWidgets.QGroupBox(self.layoutWidget) self.groupBox.setObjectName("groupBox") self.formLayout = QtWidgets.QFormLayout(self.groupBox) self.formLayout.setFieldGrowthPolicy(QtWidgets.QFormLayout.AllNonFixedFieldsGrow) @@ -50,11 +48,11 @@ class Ui_FrequencyAnalyzer(object): self.txtWordExclude.setObjectName("txtWordExclude") self.formLayout.setWidget(1, QtWidgets.QFormLayout.FieldRole, self.txtWordExclude) self.verticalLayout.addWidget(self.groupBox) - self.progressBarWord = QtWidgets.QProgressBar(self.widget) + self.progressBarWord = QtWidgets.QProgressBar(self.layoutWidget) self.progressBarWord.setProperty("value", 0) self.progressBarWord.setObjectName("progressBarWord") self.verticalLayout.addWidget(self.progressBarWord) - self.btnAnalyzeWord = QtWidgets.QPushButton(self.widget) + self.btnAnalyzeWord = QtWidgets.QPushButton(self.layoutWidget) self.btnAnalyzeWord.setObjectName("btnAnalyzeWord") self.verticalLayout.addWidget(self.btnAnalyzeWord) self.tblWord = QtWidgets.QTableView(self.splitter) @@ -97,7 +95,7 @@ class Ui_FrequencyAnalyzer(object): self.horizontalLayout.addWidget(self.tabWidget) self.retranslateUi(FrequencyAnalyzer) - self.tabWidget.setCurrentIndex(1) + self.tabWidget.setCurrentIndex(0) QtCore.QMetaObject.connectSlotsByName(FrequencyAnalyzer) def retranslateUi(self, FrequencyAnalyzer): diff --git a/manuskript/ui/tools/frequency_ui.ui b/manuskript/ui/tools/frequency_ui.ui index 5e34118..64e0b9b 100644 --- a/manuskript/ui/tools/frequency_ui.ui +++ b/manuskript/ui/tools/frequency_ui.ui @@ -17,7 +17,7 @@ - 1 + 0 @@ -29,7 +29,7 @@ Qt::Horizontal - + diff --git a/manuskript/ui/views/MDEditCompleter.py b/manuskript/ui/views/MDEditCompleter.py index 5be00af..0101238 100644 --- a/manuskript/ui/views/MDEditCompleter.py +++ b/manuskript/ui/views/MDEditCompleter.py @@ -10,11 +10,6 @@ from manuskript.ui.editors.completer import completer from manuskript.ui.views.MDEditView import MDEditView from manuskript.models import references as Ref -try: - import enchant -except ImportError: - enchant = None - class MDEditCompleter(MDEditView): def __init__(self, parent=None, index=None, html=None, spellcheck=True, highlighting=False, dict="", @@ -111,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()) @@ -125,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 5ed2bd6..1efbc80 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): @@ -23,7 +25,7 @@ class MDEditView(textEditView): imageRegex = QRegExp("!\\[([^\n]*)\\]\\(([^\n]+)\\)") automaticLinkRegex = QRegExp("(<([a-zA-Z]+\\:[^\n]+)>)|(<([^\n]+@[^\n]+)>)") - def __init__(self, parent=None, index=None, html=None, spellcheck=True, + def __init__(self, parent=None, index=None, html=None, spellcheck=None, highlighting=False, dict="", autoResize=False): textEditView.__init__(self, parent, index, html, spellcheck, highlighting=True, dict=dict, @@ -243,7 +245,7 @@ class MDEditView(textEditView): def comment(self): cursor = self.textCursor() - # Select begining and end of words + # Select beginning and end of words self.selectWord(cursor) if cursor.hasSelection(): @@ -294,7 +296,7 @@ class MDEditView(textEditView): def lineFormattingMarkup(self, markup): """ - Adds `markup` at the begining of block. + Adds `markup` at the beginning of block. """ cursor = self.textCursor() cursor.movePosition(cursor.StartOfBlock) @@ -303,7 +305,7 @@ class MDEditView(textEditView): def insertFormattingMarkup(self, markup): cursor = self.textCursor() - # Select begining and end of words + # Select beginning and end of words self.selectWord(cursor) if cursor.hasSelection(): @@ -498,7 +500,10 @@ class MDEditView(textEditView): r3.setLeft(self.viewport().geometry().left()) r3.setRight(self.viewport().geometry().right()) refs.append(ClickThing(r3, rx, rx.capturedTexts())) - cursor.movePosition(cursor.Down) + if not cursor.movePosition(cursor.Down): + # Super-rare failure. Leaving log message for future investigation. + LOGGER.debug("Failed to move cursor down while calculating clickables. Aborting.") + break self.clickRects = refs @@ -506,13 +511,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] @@ -527,14 +534,14 @@ class MDEditView(textEditView): +"

") tooltip = None pos = event.pos() + QPoint(0, ct.rect.height()) - imageTooltiper.fromUrl(ct.texts[2], pos, self) + ImageTooltip.fromUrl(ct.texts[2], pos, self) elif ct.regex == self.inlineLinkRegex: tooltip = ct.texts[1] or ct.texts[2] 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) @@ -582,53 +589,127 @@ from PyQt5.QtNetwork import QNetworkRequest, QNetworkAccessManager, QNetworkRepl from PyQt5.QtCore import QIODevice, QUrl, QBuffer from PyQt5.QtGui import QPixmap -class imageTooltiper: +class ImageTooltip: + """ + This class handles the retrieving and caching of images in order to display these in tooltips. + """ cache = {} manager = QNetworkAccessManager() - data = {} + processing = {} + + supportedSchemes = ("", "file", "http", "https") def fromUrl(url, pos, editor): - cache = imageTooltiper.cache - imageTooltiper.editor = editor + """ + Shows the image tooltip for the given url if available, or requests it for future use. + """ + ImageTooltip.editor = editor - if url in cache: - if not cache[url][0]: # error, image was not found - imageTooltiper.tooltipError(cache[url][1], pos) - else: - imageTooltiper.tooltip(cache[url][1], pos) - return + if ImageTooltip.showTooltip(url, pos): + return # the url already exists in the cache try: - imageTooltiper.manager.finished.connect(imageTooltiper.finished, F.AUC) + ImageTooltip.manager.finished.connect(ImageTooltip.finished, F.AUC) except: - pass + pass # already connected - request = QNetworkRequest(QUrl(url)) - imageTooltiper.data[QUrl(url)] = (pos, url) - imageTooltiper.manager.get(request) + qurl = QUrl.fromUserInput(url) + if (qurl == QUrl()): + ImageTooltip.cache[url] = (False, ImageTooltip.manager.tr("The image path or URL is incomplete or malformed.")) + ImageTooltip.showTooltip(url, pos) + return # empty QUrl means it failed completely + elif (qurl.scheme() not in ImageTooltip.supportedSchemes): + # QUrl.fromUserInput() can occasionally deduce an incorrect scheme, + # which produces an error message regarding an unknown scheme. (Yay!) + # But it also breaks all possible methods to try and associate the + # reply with the original request in finished(), since reply.request() + # is completely and utterly butchered for all tracking needs. :'( + # (The QNetworkRequest, .url() and .originatingObject() can all change.) + + # Test case (Linux): ![image](C:\test_root.jpg) + ImageTooltip.cache[url] = (False, ImageTooltip.manager.tr("The protocol \"{}\" is not supported.").format(qurl.scheme())) + ImageTooltip.showTooltip(url, pos) + return # no more request/reply chaos, please! + elif (qurl in ImageTooltip.processing): + return # one download is more than enough + + # Request the image for later processing. + request = QNetworkRequest(qurl) + ImageTooltip.processing[qurl] = (pos, url) + reply = ImageTooltip.manager.get(request) + + # On Linux the finished() signal is not triggered when the url resembles + # 'file://X:/...'. But because it completes instantly, we can manually + # trigger the code to keep our processing dictionary neat & clean. + if reply.error() == 302: # QNetworkReply.ProtocolInvalidOperationError + ImageTooltip.finished(reply) def finished(reply): - cache = imageTooltiper.cache - pos, url = imageTooltiper.data[reply.url()] + """ + After retrieving an image, we add it to the cache. + """ + cache = ImageTooltip.cache + url_key = reply.request().url() + pos, url = None, None + + if url_key in ImageTooltip.processing: + # Obtain the information associated with this request. + pos, url = ImageTooltip.processing[url_key] + del ImageTooltip.processing[url_key] + elif len(ImageTooltip.processing) == 0: + # We are not processing anything. Maybe it is a spurious signal, + # or maybe the 'reply.error() == 302' workaround in fromUrl() has + # been fixed in Qt. Whatever the reason, we can assume this request + # has already been handled, and needs no more work from us. + return + else: + # Somehow we lost track. Log what we can to hopefully figure it out. + 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. if reply.error() != QNetworkReply.NoError: cache[url] = (False, reply.errorString()) - imageTooltiper.tooltipError(reply.errorString(), pos) else: px = QPixmap() px.loadFromData(reply.readAll()) px = px.scaled(800, 600, Qt.KeepAspectRatio) cache[url] = (True, px) - imageTooltiper.tooltip(px, pos) + + ImageTooltip.showTooltip(url, pos) + + def showTooltip(url, pos): + """ + Show a tooltip for the given url based on cached information. + """ + cache = ImageTooltip.cache + + if url in cache: + if not cache[url][0]: # error, image was not found + ImageTooltip.tooltipError(cache[url][1], pos) + else: + ImageTooltip.tooltip(cache[url][1], pos) + return True + return False def tooltipError(message, pos): - imageTooltiper.editor.doTooltip(pos, message) + """ + Display a tooltip with an error message at the given position. + """ + ImageTooltip.editor.doTooltip(pos, message) def tooltip(image, pos): + """ + Display a tooltip with an image at the given position. + """ px = image buffer = QBuffer() buffer.open(QIODevice.WriteOnly) px.save(buffer, "PNG", quality=100) image = bytes(buffer.data().toBase64()).decode() tt = "

".format(image) - imageTooltiper.editor.doTooltip(pos, tt) + ImageTooltip.editor.doTooltip(pos, tt) diff --git a/manuskript/ui/views/basicItemView_ui.py b/manuskript/ui/views/basicItemView_ui.py index 91e0912..d292d13 100644 --- a/manuskript/ui/views/basicItemView_ui.py +++ b/manuskript/ui/views/basicItemView_ui.py @@ -2,12 +2,15 @@ # Form implementation generated from reading ui file 'manuskript/ui/views/basicItemView_ui.ui' # -# Created by: PyQt5 UI code generator 5.5.1 +# Created by: PyQt5 UI code generator 5.15.5 # -# 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 + class Ui_basicItemView(object): def setupUi(self, basicItemView): basicItemView.setObjectName("basicItemView") @@ -65,7 +68,6 @@ class Ui_basicItemView(object): self.txtGoal.setPlaceholderText(_translate("basicItemView", "Word count")) self.txtSummarySentence.setPlaceholderText(_translate("basicItemView", "One line summary")) self.label_9.setText(_translate("basicItemView", "Few sentences summary:")) - from manuskript.ui.views.MDEditCompleter import MDEditCompleter from manuskript.ui.views.cmbOutlineCharacterChoser import cmbOutlineCharacterChoser from manuskript.ui.views.lineEditView import lineEditView diff --git a/manuskript/ui/views/characterTreeView.py b/manuskript/ui/views/characterTreeView.py index 6997f90..2bcc9f9 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) @@ -64,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() @@ -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,33 +119,61 @@ 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 != 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) + 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. """ ID = self.currentCharacterID() - if ID: - self._model.removeCharacter(ID) + if ID is None: + return None + self._model.removeCharacter(ID) + return ID 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 @@ -171,6 +199,8 @@ class characterTreeView(QTreeWidget): def mouseDoubleClickEvent(self, event): item = self.currentItem() + if item is None: + return # Catching double clicks to forbid collapsing of toplevel items if item.parent(): QTreeWidget.mouseDoubleClickEvent(self, event) diff --git a/manuskript/ui/views/corkDelegate.py b/manuskript/ui/views/corkDelegate.py index 70ff19e..fc63c28 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) @@ -145,15 +153,15 @@ class corkDelegate(QStyledItemDelegate): self.updateRects_v1(option, index) def updateRects_v2(self, option, index): - margin = self.margin * 2 - iconSize = max(24 * self.factor, 18) + margin = int(self.margin * 2) + iconSize = int(max(24 * self.factor, 18)) item = index.internalPointer() fm = QFontMetrics(option.font) - h = fm.lineSpacing() + h = int(fm.lineSpacing()) self.itemRect = option.rect.adjusted(margin, margin, -margin, -margin) - top = 15 * self.factor + top = int(15 * self.factor) self.topRect = QRect(self.itemRect) self.topRect.setHeight(top) @@ -161,8 +169,8 @@ class corkDelegate(QStyledItemDelegate): self.itemRect.bottomRight()) self.iconRect = QRect(self.cardRect.topLeft() + QPoint(margin, margin), QSize(iconSize, iconSize)) - self.labelRect = QRect(self.cardRect.topRight() - QPoint(margin + self.factor * 18, 1), - self.cardRect.topRight() + QPoint(- margin - self.factor * 4, self.factor * 24)) + self.labelRect = QRect(self.cardRect.topRight() - QPoint(int(margin + self.factor * 18), 1), + self.cardRect.topRight() + QPoint(int(-margin - self.factor * 4), int(self.factor * 24))) self.titleRect = QRect(self.iconRect.topRight() + QPoint(margin, 0), self.labelRect.bottomLeft() - QPoint(margin, margin)) self.titleRect.setBottom(self.iconRect.bottom()) @@ -177,8 +185,8 @@ class corkDelegate(QStyledItemDelegate): self.mainTextRect.setTopLeft(self.mainLineRect.topLeft()) def updateRects_v1(self, option, index): - margin = self.margin - iconSize = max(16 * self.factor, 12) + margin = int(self.margin) + iconSize = int(max(16 * self.factor, 12)) item = index.internalPointer() self.itemRect = option.rect.adjusted(margin, margin, -margin, -margin) self.iconRect = QRect(self.itemRect.topLeft() + QPoint(margin, margin), QSize(iconSize, iconSize)) @@ -262,8 +270,8 @@ class corkDelegate(QStyledItemDelegate): if item.isFolder(): itemPoly = QPolygonF([ self.topRect.topLeft(), - self.topRect.topLeft() + QPoint(self.topRect.width() * .35, 0), - self.cardRect.topLeft() + QPoint(self.topRect.width() * .45, 0), + self.topRect.topLeft() + QPoint(int(self.topRect.width() * .35), 0), + self.cardRect.topLeft() + QPoint(int(self.topRect.width() * .45), 0), self.cardRect.topRight(), self.cardRect.bottomRight(), self.cardRect.bottomLeft() @@ -480,7 +488,7 @@ class corkDelegate(QStyledItemDelegate): fullSummary = item.data(Outline.summaryFull) if lineSummary or not fullSummary: m = self.margin - r = self.mainLineRect.adjusted(-m, -m, m, m / 2) + r = self.mainLineRect.adjusted(-m, -m, m, int(m / 2)) p.save() p.setPen(Qt.NoPen) p.setBrush(QColor("#EEE")) diff --git a/manuskript/ui/views/corkView.py b/manuskript/ui/views/corkView.py index c27c3cb..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 = "" @@ -36,7 +38,7 @@ class corkView(QListView, dndView, outlineBasics): background-attachment: fixed; }}""".format( color=settings.corkBackground["color"], - url=img + url=img.replace("\\", "/") )) def dragMoveEvent(self, event): 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/lineEditView.py b/manuskript/ui/views/lineEditView.py index 1df64c5..b61042f 100644 --- a/manuskript/ui/views/lineEditView.py +++ b/manuskript/ui/views/lineEditView.py @@ -1,5 +1,6 @@ #!/usr/bin/env python # --!-- coding: utf8 --!-- +from PyQt5.QtCore import QMutex from PyQt5.QtWidgets import QLineEdit from manuskript.enums import Outline @@ -13,7 +14,7 @@ class lineEditView(QLineEdit): self._indexes = None self._index = None self._placeholderText = None - self._updating = False + self._updating = QMutex() def setModel(self, model): self._model = model @@ -30,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() @@ -49,38 +50,39 @@ class lineEditView(QLineEdit): self.updateText() def submit(self): + self._updating.lock() + text = self.text() + self._updating.unlock() + if self._index: # item = self._index.internalPointer() - if self.text() != self._model.data(self._index): - self._model.setData(self._index, self.text()) + if text != self._model.data(self._index): + self._model.setData(self._index, text) elif self._indexes: - self._updating = True for i in self._indexes: # item = i.internalPointer() - if self.text() != self._model.data(i): - self._model.setData(i, self.text()) - self._updating = False + if text != self._model.data(i): + self._model.setData(i, text) def update(self, topLeft, bottomRight): - - if self._updating: - # We are currently putting data in the model, so no updates - return + update = False if self._index: if topLeft.row() <= self._index.row() <= bottomRight.row(): - self.updateText() + update = True elif self._indexes: - update = False for i in self._indexes: if topLeft.row() <= i.row() <= bottomRight.row(): update = True - if update: - self.updateText() + + if update: + self.updateText() def updateText(self): + self._updating.lock() + if self._index: # item = self._index.internalPointer() # txt = toString(item.data(self._column)) @@ -110,3 +112,6 @@ class lineEditView(QLineEdit): self._placeholderText = self.placeholderText() self.setPlaceholderText(self.tr("Various")) + + self._updating.unlock() + diff --git a/manuskript/ui/views/outlineBasics.py b/manuskript/ui/views/outlineBasics.py index 2dfa9ff..5f7ea89 100644 --- a/manuskript/ui/views/outlineBasics.py +++ b/manuskript/ui/views/outlineBasics.py @@ -9,7 +9,7 @@ from PyQt5.QtWidgets import QAbstractItemView, qApp, QMenu, QAction, \ from manuskript import settings from manuskript.enums import Outline from manuskript.functions import mainWindow, statusMessage -from manuskript.functions import toInt, customIcons +from manuskript.functions import toInt, customIcons, safeTranslate from manuskript.models import outlineItem from manuskript.ui.tools.splitDialog import splitDialog @@ -58,24 +58,24 @@ class outlineBasics(QAbstractItemView): title = mouseIndex.internalPointer().title() else: - title = qApp.translate("outlineBasics", "Root") + title = safeTranslate(qApp, "outlineBasics", "Root") if len(title) > 25: title = title[:25] + "…" # Open Item action self.actOpen = QAction(QIcon.fromTheme("go-right"), - qApp.translate("outlineBasics", "Open {}".format(title)), + safeTranslate(qApp, "outlineBasics", "Open {}".format(title)), menu) self.actOpen.triggered.connect(self.openItem) menu.addAction(self.actOpen) # Open item(s) in new tab if mouseIndex in sel and len(sel) > 1: - actionTitle = qApp.translate("outlineBasics", "Open {} items in new tabs").format(len(sel)) + actionTitle = safeTranslate(qApp, "outlineBasics", "Open {} items in new tabs").format(len(sel)) self._indexesToOpen = sel else: - actionTitle = qApp.translate("outlineBasics", "Open {} in a new tab").format(title) + actionTitle = safeTranslate(qApp, "outlineBasics", "Open {} in a new tab").format(title) self._indexesToOpen = [mouseIndex] self.actNewTab = QAction(QIcon.fromTheme("go-right"), actionTitle, menu) @@ -86,13 +86,13 @@ class outlineBasics(QAbstractItemView): # Add text / folder self.actAddFolder = QAction(QIcon.fromTheme("folder-new"), - qApp.translate("outlineBasics", "New &Folder"), + safeTranslate(qApp, "outlineBasics", "New &Folder"), menu) self.actAddFolder.triggered.connect(self.addFolder) menu.addAction(self.actAddFolder) self.actAddText = QAction(QIcon.fromTheme("document-new"), - qApp.translate("outlineBasics", "New &Text"), + safeTranslate(qApp, "outlineBasics", "New &Text"), menu) self.actAddText.triggered.connect(self.addText) menu.addAction(self.actAddText) @@ -101,29 +101,29 @@ class outlineBasics(QAbstractItemView): # Copy, cut, paste, duplicate self.actCut = QAction(QIcon.fromTheme("edit-cut"), - qApp.translate("outlineBasics", "C&ut"), menu) + safeTranslate(qApp, "outlineBasics", "C&ut"), menu) self.actCut.triggered.connect(self.cut) menu.addAction(self.actCut) self.actCopy = QAction(QIcon.fromTheme("edit-copy"), - qApp.translate("outlineBasics", "&Copy"), menu) + safeTranslate(qApp, "outlineBasics", "&Copy"), menu) self.actCopy.triggered.connect(self.copy) menu.addAction(self.actCopy) self.actPaste = QAction(QIcon.fromTheme("edit-paste"), - qApp.translate("outlineBasics", "&Paste"), menu) + safeTranslate(qApp, "outlineBasics", "&Paste"), menu) self.actPaste.triggered.connect(self.paste) menu.addAction(self.actPaste) # Rename / duplicate / remove items self.actDelete = QAction(QIcon.fromTheme("edit-delete"), - qApp.translate("outlineBasics", "&Delete"), + safeTranslate(qApp, "outlineBasics", "&Delete"), menu) self.actDelete.triggered.connect(self.delete) menu.addAction(self.actDelete) self.actRename = QAction(QIcon.fromTheme("edit-rename"), - qApp.translate("outlineBasics", "&Rename"), + safeTranslate(qApp, "outlineBasics", "&Rename"), menu) self.actRename.triggered.connect(self.rename) menu.addAction(self.actRename) @@ -131,17 +131,17 @@ class outlineBasics(QAbstractItemView): menu.addSeparator() # POV - self.menuPOV = QMenu(qApp.translate("outlineBasics", "Set POV"), menu) + self.menuPOV = QMenu(safeTranslate(qApp, "outlineBasics", "Set POV"), menu) mw = mainWindow() - a = QAction(QIcon.fromTheme("dialog-no"), qApp.translate("outlineBasics", "None"), self.menuPOV) + a = QAction(QIcon.fromTheme("dialog-no"), safeTranslate(qApp, "outlineBasics", "None"), self.menuPOV) a.triggered.connect(lambda: self.setPOV("")) self.menuPOV.addAction(a) self.menuPOV.addSeparator() menus = [] - for i in [qApp.translate("outlineBasics", "Main"), - qApp.translate("outlineBasics", "Secondary"), - qApp.translate("outlineBasics", "Minor")]: + for i in [safeTranslate(qApp, "outlineBasics", "Main"), + safeTranslate(qApp, "outlineBasics", "Secondary"), + safeTranslate(qApp, "outlineBasics", "Minor")]: m = QMenu(i, self.menuPOV) menus.append(m) self.menuPOV.addMenu(m) @@ -160,8 +160,8 @@ class outlineBasics(QAbstractItemView): menu.addMenu(self.menuPOV) # Status - self.menuStatus = QMenu(qApp.translate("outlineBasics", "Set Status"), menu) - # a = QAction(QIcon.fromTheme("dialog-no"), qApp.translate("outlineBasics", "None"), self.menuStatus) + self.menuStatus = QMenu(safeTranslate(qApp, "outlineBasics", "Set Status"), menu) + # a = QAction(QIcon.fromTheme("dialog-no"), safeTranslate(qApp, "outlineBasics", "None"), self.menuStatus) # a.triggered.connect(lambda: self.setStatus("")) # self.menuStatus.addAction(a) # self.menuStatus.addSeparator() @@ -176,7 +176,7 @@ class outlineBasics(QAbstractItemView): menu.addMenu(self.menuStatus) # Labels - self.menuLabel = QMenu(qApp.translate("outlineBasics", "Set Label"), menu) + self.menuLabel = QMenu(safeTranslate(qApp, "outlineBasics", "Set Label"), menu) mpr = QSignalMapper(self.menuLabel) for i in range(mw.mdlLabels.rowCount()): a = QAction(mw.mdlLabels.item(i, 0).icon(), @@ -194,8 +194,8 @@ class outlineBasics(QAbstractItemView): if self.menuCustomIcons: menu.addMenu(self.menuCustomIcons) else: - self.menuCustomIcons = QMenu(qApp.translate("outlineBasics", "Set Custom Icon"), menu) - a = QAction(qApp.translate("outlineBasics", "Restore to default"), self.menuCustomIcons) + self.menuCustomIcons = QMenu(safeTranslate(qApp, "outlineBasics", "Set Custom Icon"), menu) + a = QAction(safeTranslate(qApp, "outlineBasics", "Restore to default"), self.menuCustomIcons) a.triggered.connect(lambda: self.setCustomIcon("")) self.menuCustomIcons.addAction(a) self.menuCustomIcons.addSeparator() @@ -203,7 +203,7 @@ class outlineBasics(QAbstractItemView): txt = QLineEdit() txt.textChanged.connect(self.filterLstIcons) txt.setPlaceholderText("Filter icons") - txt.setStyleSheet("background: transparent; border: none;") + txt.setStyleSheet("QLineEdit { background: transparent; border: none; }") act = QWidgetAction(self.menuCustomIcons) act.setDefaultWidget(txt) self.menuCustomIcons.addAction(act) @@ -280,7 +280,7 @@ class outlineBasics(QAbstractItemView): if _type == "text": _type = settings.defaultTextType - item = outlineItem(title=qApp.translate("outlineBasics", "New"), _type=_type) + item = outlineItem(title=safeTranslate(qApp, "outlineBasics", "New"), _type=_type) self.model().appendItem(item, parent) def copy(self): @@ -310,11 +310,24 @@ class outlineBasics(QAbstractItemView): Shows a warning, and then deletes currently selected indexes. """ if not settings.dontShowDeleteWarning: + msgInfo = list() + msgInfo.append("

") + msgInfo.append(safeTranslate(qApp, "outlineBasics", "You're about to delete {} item(s).").format( + len(self.getSelection()) + )) + + msgInfo.append("

    ") + for i in self.getSelection(): + title = self.model().data(i.sibling(i.row(), Outline.title)) + msgInfo.append("
  • {}
  • ".format(str(title))) + + msgInfo.append("

") + msgInfo.append(safeTranslate(qApp, "outlineBasics", "Are you sure?")) + msgInfo.append("

") + msg = QMessageBox(QMessageBox.Warning, - qApp.translate("outlineBasics", "About to remove"), - qApp.translate("outlineBasics", - "

You're about to delete {} item(s).

Are you sure?

" - ).format(len(self.getSelection())), + safeTranslate(qApp, "outlineBasics", "About to remove"), + "".join(msgInfo), QMessageBox.Yes | QMessageBox.Cancel) chk = QCheckBox("&Don't show this warning in the future.") @@ -383,7 +396,7 @@ class outlineBasics(QAbstractItemView): parentItem.childItems.insert(index.row() + delta, parentItem.childItems.pop(index.row())) - parentItem.updateWordCount(emit=False) + parentItem.updateWordCount() def moveUp(self): self.move(-1) def moveDown(self): self.move(+1) @@ -418,7 +431,7 @@ class outlineBasics(QAbstractItemView): # Check that we have at least 2 items if len(items) < 2: - statusMessage(qApp.translate("outlineBasics", + statusMessage(safeTranslate(qApp, "outlineBasics", "Select at least two items. Folders are ignored."), importance=2) return @@ -427,7 +440,7 @@ class outlineBasics(QAbstractItemView): p = items[0].parent() for i in items: if i.parent() != p: - statusMessage(qApp.translate("outlineBasics", + statusMessage(safeTranslate(qApp, "outlineBasics", "All items must be on the same level (share the same parent)."), importance=2) return diff --git a/manuskript/ui/views/outlineDelegates.py b/manuskript/ui/views/outlineDelegates.py index 48bba8e..1a9cfa4 100644 --- a/manuskript/ui/views/outlineDelegates.py +++ b/manuskript/ui/views/outlineDelegates.py @@ -237,11 +237,11 @@ class outlineGoalPercentageDelegate(QStyledItemDelegate): rect = option.rect.adjusted(margin, margin, -margin, -margin) # Move - rect.translate(level * rect.width() / 10, 0) - rect.setWidth(rect.width() - level * rect.width() / 10) + rect.translate(int(level * rect.width() / 10), 0) + rect.setWidth(int(rect.width() - level * rect.width() / 10)) - rect.setHeight(height) - rect.setTop(option.rect.top() + (option.rect.height() - height) / 2) + rect.setHeight(int(height)) + rect.setTop(int(option.rect.top() + (option.rect.height() - height) / 2)) drawProgress(painter, rect, p) # from functions @@ -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/plotTreeView.py b/manuskript/ui/views/plotTreeView.py index 9a592d9..97c46fc 100644 --- a/manuskript/ui/views/plotTreeView.py +++ b/manuskript/ui/views/plotTreeView.py @@ -200,6 +200,9 @@ class plotTreeView(QTreeWidget): def mouseDoubleClickEvent(self, event): item = self.currentItem() + if not item: + return + # Catching double clicks to forbid collapsing of toplevel items if item.parent(): QTreeWidget.mouseDoubleClickEvent(self, event) diff --git a/manuskript/ui/views/propertiesView.py b/manuskript/ui/views/propertiesView.py index 861dc74..0c5f95b 100644 --- a/manuskript/ui/views/propertiesView.py +++ b/manuskript/ui/views/propertiesView.py @@ -5,7 +5,10 @@ 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 +import logging +LOGGER = logging.getLogger(__name__) class propertiesView(QWidget, Ui_propertiesView): def __init__(self, parent=None): @@ -14,7 +17,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) @@ -38,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/propertiesView_ui.py b/manuskript/ui/views/propertiesView_ui.py index e4846fa..c003e15 100644 --- a/manuskript/ui/views/propertiesView_ui.py +++ b/manuskript/ui/views/propertiesView_ui.py @@ -2,12 +2,15 @@ # Form implementation generated from reading ui file 'manuskript/ui/views/propertiesView_ui.ui' # -# Created by: PyQt5 UI code generator 5.9 +# Created by: PyQt5 UI code generator 5.15.7 # -# 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 + class Ui_propertiesView(object): def setupUi(self, propertiesView): propertiesView.setObjectName("propertiesView") @@ -20,7 +23,7 @@ class Ui_propertiesView(object): font.setBold(True) font.setWeight(75) self.txtTitle.setFont(font) - self.txtTitle.setStyleSheet("background:transparent;") + self.txtTitle.setStyleSheet("QLineEdit { background:transparent; }") self.txtTitle.setFrame(False) self.txtTitle.setObjectName("txtTitle") self.verticalLayout.addWidget(self.txtTitle) @@ -180,7 +183,6 @@ class Ui_propertiesView(object): self.label_35.setText(_translate("propertiesView", "Compile")) self.label_36.setText(_translate("propertiesView", "Goal")) self.txtGoalMulti.setPlaceholderText(_translate("propertiesView", "Word count")) - from manuskript.ui.views.chkOutlineCompile import chkOutlineCompile from manuskript.ui.views.cmbOutlineCharacterChoser import cmbOutlineCharacterChoser from manuskript.ui.views.cmbOutlineLabelChoser import cmbOutlineLabelChoser diff --git a/manuskript/ui/views/propertiesView_ui.ui b/manuskript/ui/views/propertiesView_ui.ui index 4e1549f..9f7d601 100644 --- a/manuskript/ui/views/propertiesView_ui.ui +++ b/manuskript/ui/views/propertiesView_ui.ui @@ -35,7 +35,7 @@ - background:transparent; + QLineEdit { background:transparent; } false diff --git a/manuskript/ui/views/sldImportance_ui.py b/manuskript/ui/views/sldImportance_ui.py index 639bbdc..b8d3d94 100644 --- a/manuskript/ui/views/sldImportance_ui.py +++ b/manuskript/ui/views/sldImportance_ui.py @@ -2,13 +2,15 @@ # Form implementation generated from reading ui file 'manuskript/ui/views/sldImportance_ui.ui' # -# Created: Thu Mar 3 18:52:22 2016 -# by: PyQt5 UI code generator 5.2.1 +# Created by: PyQt5 UI code generator 5.15.5 # -# 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 + class Ui_sldImportance(object): def setupUi(self, sldImportance): sldImportance.setObjectName("sldImportance") @@ -34,4 +36,3 @@ class Ui_sldImportance(object): _translate = QtCore.QCoreApplication.translate sldImportance.setWindowTitle(_translate("sldImportance", "Form")) self.lbl.setText(_translate("sldImportance", "TextLabel")) - diff --git a/manuskript/ui/views/textEditView.py b/manuskript/ui/views/textEditView.py index 6c0e88e..b26a20c 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 +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 @@ -13,15 +13,19 @@ from manuskript import functions as F 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 -try: - import enchant -except ImportError: - enchant = None +import logging +LOGGER = logging.getLogger(__name__) + +# See implementation of QTextDocument::toPlainText() +PLAIN_TRANSLATION_TABLE = {0x2028: "\n", 0x2029: "\n", 0xfdd0: "\n", 0xfdd1: "\n"} class textEditView(QTextEdit): - def __init__(self, parent=None, index=None, html=None, spellcheck=True, + + def __init__(self, parent=None, index=None, html=None, spellcheck=None, highlighting=False, dict="", autoResize=False): QTextEdit.__init__(self, parent) self._column = Outline.text @@ -29,7 +33,7 @@ class textEditView(QTextEdit): self._indexes = None self._model = None self._placeholderText = self.placeholderText() - self._updating = False + self._updating = QMutex() self._item = None self._highlighting = highlighting self._textFormat = "text" @@ -39,6 +43,9 @@ class textEditView(QTextEdit): self._themeData = None self._highlighterClass = BasicHighlighter + if spellcheck == None: + spellcheck = settings.spellcheck + self.spellcheck = spellcheck self.currentDict = dict if dict else settings.dict self._defaultFontSize = qApp.font().pointSize() @@ -49,6 +56,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 @@ -56,13 +65,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) @@ -74,29 +83,16 @@ class textEditView(QTextEdit): self.setReadOnly(True) # Spellchecking - if enchant and self.spellcheck: - try: - self._dict = enchant.Dict(self.currentDict if self.currentDict - else self.getDefaultLocale()) - except enchant.errors.DictNotFoundError: - self.spellcheck = False + if self.spellcheck: + self._dict = Spellchecker.getDictionary(self.currentDict) - else: + if not self._dict: self.spellcheck = False if self._highlighting and not self.highlighter: self.highlighter = self._highlighterClass(self) self.highlighter.setDefaultBlockFormat(self._defaultBlockFormat) - def getDefaultLocale(self): - default_locale = enchant.get_default_language() - if default_locale is None: - default_locale = QLocale.system().name() - if default_locale is None: - default_locale = enchant.list_dicts()[0][0] - - return default_locale - def setModel(self, model): self._model = model try: @@ -178,9 +174,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 @@ -188,7 +184,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{{ @@ -200,15 +196,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 @@ -220,11 +217,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) @@ -252,15 +249,13 @@ class textEditView(QTextEdit): self.highlighter.setDefaultBlockFormat(self._defaultBlockFormat) def update(self, topLeft, bottomRight): - if self._updating: - return + update = False if self._index and self._index.isValid(): - 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(), @@ -268,15 +263,15 @@ class textEditView(QTextEdit): if topLeft.row() <= self._index.row() <= bottomRight.row(): if topLeft.column() <= self._column <= bottomRight.column(): - self.updateText() + update = True elif self._indexes: - update = False for i in self._indexes: if topLeft.row() <= i.row() <= bottomRight.row(): update = True - if update: - self.updateText() + + if update: + self.updateText() def disconnectDocument(self): try: @@ -287,15 +282,21 @@ class textEditView(QTextEdit): def reconnectDocument(self): self.document().contentsChanged.connect(self.updateTimer.start, F.AUC) + def toIdealText(self): + """QTextDocument::toPlainText() replaces NBSP with spaces, which we don't want. + QTextDocument::toRawText() replaces nothing, but that leaves fancy paragraph and line separators that users would likely complain about. + This reimplements toPlainText(), except without the NBSP destruction.""" + return self.document().toRawText().translate(PLAIN_TRANSLATION_TABLE) + toPlainText = toIdealText + def updateText(self): - if self._updating: - return - # print("Updating", self.objectName()) - self._updating = True + self._updating.lock() + + # LOGGER.debug("Updating %s", self.objectName()) if self._index: self.disconnectDocument() - if self.toPlainText() != F.toString(self._index.data()): - # print(" Updating plaintext") + if self.toIdealText() != F.toString(self._index.data()): + # LOGGER.debug(" Updating plaintext") self.document().setPlainText(F.toString(self._index.data())) self.reconnectDocument() @@ -322,30 +323,29 @@ class textEditView(QTextEdit): self.setPlaceholderText(self.tr("Various")) self.reconnectDocument() - self._updating = False + + self._updating.unlock() def submit(self): self.updateTimer.stop() - if self._updating: - return - # print("Submitting", self.objectName()) + + self._updating.lock() + text = self.toIdealText() + self._updating.unlock() + + # LOGGER.debug("Submitting %s", self.objectName()) if self._index and self._index.isValid(): # item = self._index.internalPointer() - if self.toPlainText() != self._index.data(): - # print(" Submitting plain text") - self._updating = True - self._model.setData(QModelIndex(self._index), - self.toPlainText()) - self._updating = False + if text != self._index.data(): + # LOGGER.debug(" Submitting plain text") + self._model.setData(QModelIndex(self._index), text) elif self._indexes: - self._updating = True for i in self._indexes: item = i.internalPointer() - if self.toPlainText() != F.toString(item.data(self._column)): - print("Submitting many indexes") - self._model.setData(i, self.toPlainText()) - self._updating = False + if text != F.toString(item.data(self._column)): + LOGGER.debug("Submitting many indexes") + self._model.setData(i, text) def keyPressEvent(self, event): if event.key() == Qt.Key_V and event.modifiers() & Qt.ControlModifier: @@ -369,7 +369,7 @@ class textEditView(QTextEdit): opt = settings.textEditor docHeight = self.document().size().height() + 2 * opt["marginsTB"] if self.heightMin <= docHeight <= self.heightMax: - self.setMinimumHeight(docHeight) + self.setMinimumHeight(int(docHeight)) def setAutoResize(self, val): self._autoResize = val @@ -386,20 +386,18 @@ class textEditView(QTextEdit): def setDict(self, d): self.currentDict = d - if d and enchant.dict_exists(d): - self._dict = enchant.Dict(d) + if d: + self._dict = Spellchecker.getDictionary(d) if self.highlighter: self.highlighter.rehighlight() def toggleSpellcheck(self, v): self.spellcheck = v - if enchant and self.spellcheck and not self._dict: - if self.currentDict and enchant.dict_exists(self.currentDict): - self._dict = enchant.Dict(self.currentDict) - elif enchant.get_default_language() and enchant.dict_exists(enchant.get_default_language()): - self._dict = enchant.Dict(enchant.get_default_language()) - else: - self.spellcheck = False + if self.spellcheck and not self._dict: + self._dict = Spellchecker.getDictionary(self.currentDict) + + if not self._dict: + self.spellcheck = False if self.highlighter: self.highlighter.rehighlight() @@ -414,6 +412,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. @@ -448,58 +489,198 @@ 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() + LOGGER.debug(f'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() + LOGGER.debug(f'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() + LOGGER.debug(f'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 appendContextMenuEntriesForWord(self, popup_menu, selectedWord): + # add "new " buttons at end + 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")) + worldAction.triggered.connect(self.newWorldItem) + worldAction.setData(selectedWord) + popup_menu.insertAction(None, worldAction) + + return popup_menu + def createStandardContextMenu(self): popup_menu = QTextEdit.createStandardContextMenu(self) - 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) + selectedWord = cursor.selectedText() if cursor.hasSelection() else None + + if not self.spellcheck: + return self.appendContextMenuEntriesForWord(popup_menu, selectedWord) + + suggestions = [] + + # Check for any suggestions for corrections at the cursors position + 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: + old_position = cursor.position() + + 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: + cursor.clearSelection() + 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 - # Check if the selected word is misspelled and offer spelling - # suggestions if it is. - if cursor.hasSelection(): - text = str(cursor.selectedText()) - valid = self._dict.check(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.suggest(text): - action = self.SpellAction(word, spell_menu) - action.correct.connect(self.correctWord) - spell_menu.addAction(action) - # Only add the spelling suggests to the menu if there are - # suggestions. - if len(spell_menu.actions()) != 0: - popup_menu.insertSeparator(popup_menu.actions()[0]) + # I think it should focus on one type of error at a time. + match = suggestions[0] + + 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 selectedWord == None): + # 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) - # Adds: suggestions - popup_menu.insertMenu(popup_menu.actions()[0], spell_menu) - # popup_menu.insertSeparator(popup_menu.actions()[0]) + + # 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.is_added(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) + rmAction = QAction( + self.tr("&Remove from custom dictionary"), popup_menu) rmAction.setIcon(QIcon.fromTheme("list-remove")) rmAction.triggered.connect(self.rmWordFromDict) rmAction.setData(selectedWord) @@ -521,12 +702,12 @@ class textEditView(QTextEdit): def addWordToDict(self): word = self.sender().data() - self._dict.add(word) + self._dict.addWord(word) self.highlighter.rehighlight() def rmWordFromDict(self): word = self.sender().data() - self._dict.remove(word) + self._dict.removeWord(word) self.highlighter.rehighlight() ############################################################################### diff --git a/manuskript/ui/views/treeDelegates.py b/manuskript/ui/views/treeDelegates.py index fa59702..040b4f5 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) @@ -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: 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/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 diff --git a/manuskript/ui/welcome.py b/manuskript/ui/welcome.py index b022ebc..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 @@ -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): @@ -286,18 +288,19 @@ class welcome(QWidget, Ui_welcome): k = 0 hasWC = False - for d in self.template[1]: + for templateIndex, d in enumerate(self.template[1]): spin = QSpinBox(self) spin.setRange(0, 999999) spin.setValue(d[0]) # Storing the level of the template in that spinbox, so we can use # it to update the template when valueChanged on that spinbox # (we do that in self.updateWordCount for convenience). - spin.setProperty("templateIndex", self.template[1].index(d)) + spin.setProperty("templateIndex", templateIndex) spin.valueChanged.connect(self.updateWordCount) - if d[1] != None: txt = QLineEdit(self) + txt.setProperty("templateIndex", templateIndex) + txt.textEdited.connect(self.updateWordCount) txt.setText(d[1]) else: @@ -360,12 +363,21 @@ class welcome(QWidget, Ui_welcome): Qt.FindChildrenRecursively): total = total * s.value() - # Update self.template to reflect the changed values + # Update self.template to reflect the changed count values templateIndex = s.property("templateIndex") self.template[1][templateIndex] = ( s.value(), self.template[1][templateIndex][1]) + for t in self.findChildren(QLineEdit, QRegExp(".*"), + Qt.FindChildrenRecursively): + # Update self.template to reflect the changed name values + templateIndex = t.property("templateIndex") + if templateIndex != None : + self.template[1][templateIndex] = ( + self.template[1][templateIndex][0], + t.text()) + if total == 1: total = 0 @@ -412,10 +424,12 @@ class welcome(QWidget, Ui_welcome): self.tree.expandAll() def loadDefaultDatas(self): + """Initialize a basic Manuskript project.""" # Empty settings - imp.reload(settings) + importlib.reload(settings) settings.initDefaultValues() + self.mw.loadEmptyDatas() if self.template: t = [i for i in self._templates if i[0] == self.template[0]] @@ -423,20 +437,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")), @@ -448,7 +452,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"), @@ -458,14 +461,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" @@ -499,3 +497,5 @@ class welcome(QWidget, Ui_welcome): if self.template and self.template[1]: addElement(root, self.template[1]) + + # World (nothing special needed) diff --git a/manuskript/version.py b/manuskript/version.py index fcc4392..b333811 100644 --- a/manuskript/version.py +++ b/manuskript/version.py @@ -3,7 +3,7 @@ # Single source the package version # https://packaging.python.org/guides/single-sourcing-package-version/ -__version__ = "0.8.0" +__version__ = "0.14.0" def getVersion(): return __version__ diff --git a/package/build_for_windows.sh b/package/build_for_windows.sh new file mode 100755 index 0000000..2639f06 --- /dev/null +++ b/package/build_for_windows.sh @@ -0,0 +1,123 @@ +#!/bin/sh +EXEC_DIR=$(pwd) + +DIR=$(mktemp -d /tmp/manuskript-windows.XXXXXX) +PREFIX=$DIR/.wine + +BUILD_ARCH="win32" +PY_VERSION="3.8.10" + +PY_NAME="python-$PY_VERSION" + +if [ "$BUILD_ARCH" = "win64" ]; then + PY_NAME="$PY_NAME-amd64" +fi + +# Install Python: +PY_DOWNLOAD="https://www.python.org/ftp/python/$PY_VERSION/$PY_NAME.exe" +PY_SETUP=$(echo $PY_DOWNLOAD | tr '/' ' ' | awk '{ print $(NF) }') + +if [ ! -e $PY_SETUP ]; then + wget $PY_DOWNLOAD +fi + +WINEPREFIX=$PREFIX WINEARCH=$BUILD_ARCH wine $PY_SETUP /quiet InstallAllUsers=1 PrependPath=1 Include_test=0 + +# Install Pandoc: +PAN_DOWNLOAD="https://github.com/jgm/pandoc/releases/download/2.16.1/pandoc-2.16.1-windows-x86_64.msi" +PAN_SETUP=$(echo $PAN_DOWNLOAD | tr '/' ' ' | awk '{ print $(NF) }') + +if [ ! -e $PAN_SETUP ]; then + wget $PAN_DOWNLOAD +fi + +WINEPREFIX=$PREFIX WINEARCH=$BUILD_ARCH wine $PAN_SETUP /qn /norestart + +PY_DIR="Python$(echo $PY_VERSION | sed -e s/\\./\ /g - | awk '{ print $1$2 }')" + +if [ "$BUILD_ARCH" = "win32" ]; then + PY_DIR="$PY_DIR-32" +fi + +# Install most dependencies with pip: +cd $PREFIX/drive_c/Program\ Files/$PY_DIR/ + +pip_install() { + WINEPREFIX=$PREFIX WINEARCH=$BUILD_ARCH wine python.exe Scripts/pip.exe install $@ +} + +# Upgrade pip to mitigate problems: +pip_install --upgrade pip + +# Install required dependencies: + +# Version 4.4 does not cause the issue with lxml (potential fallback) +pip_install https://github.com/pyinstaller/pyinstaller/archive/develop.zip +#pip_install pyinstaller==4.4 + +pip_install lxml +pip_install PyQt5 + +# Install optional dependencies: +pip_install pyenchant +pip_install pyspellchecker +pip_install symspellpy +pip_install language_tool_python +pip_install markdown + +# Clone the repository from Github: +REPOSITORY="https://github.com/olivierkes/manuskript.git" + +cd $DIR +git clone $REPOSITORY +cd manuskript + +PKG_VERSION=$(grep -E "__version__.*\".*\"" "manuskript/version.py" | cut -d\" -f2) + +# Run PyInstaller to create the build: +WINEPREFIX=$PREFIX WINEARCH=$BUILD_ARCH wine pyinstaller manuskript.spec +cat build/manuskript/warn-manuskript.txt + +cd dist/manuskript + +# Remove this library (causing weird bluetooth problems): +### comment: We don't need bluetooth anyway... ^^' +rm Qt5Bluetooth.dll + +# Remove this library (causing a crash on Windows 7): +rm ucrtbase.dll + +# Remove unnecessary libraries: +rm api-ms-win-* + +# Test Manuskript: +### comment: Seems to work fine... +WINEPREFIX=$PREFIX WINEARCH=$BUILD_ARCH wine manuskript.exe & +WINE_TEST_PID=$! + +sleep 5 +cd .. + +tmp_cleanup() { + # Cleanup everything: + ### comment: removing the local git repository + ### requires write permissions... + chmod +w -R $DIR/manuskript + rm -r $DIR +} + +if [ $(ps $WINE_TEST_PID | grep manuskript.exe | wc -l) -gt 0 ]; then + kill $WINE_TEST_PID +else + echo "ERROR: Package has crashed to an critical error!" + tmp_cleanup + exit +fi + +ZIP_NAME=manuskript-$PKG_VERSION-$BUILD_ARCH.zip + +# Package everything together: +zip -r $ZIP_NAME manuskript +mv $ZIP_NAME $EXEC_DIR + +tmp_cleanup diff --git a/package/build_osx.sh b/package/build_osx.sh index 299dbcd..72a4275 100755 --- a/package/build_osx.sh +++ b/package/build_osx.sh @@ -4,7 +4,16 @@ if [ z"$FILENAME" = "z" ]; then echo "Error: Environment variable FILENAME is not set" exit 1 fi -pyinstaller manuskript.spec --clean +filename="${FILENAME%.*}".dmg +export manuskript_version=$TRAVIS_BRANCH +package/osx/rebuild_mac_icon.sh +pyinstaller manuskript.spec --clean --noconfirm +# Fix signing the app - know issue with Qt5 +python3 package/osx/fix_app_qt_folder_names_for_codesign.py dist/manuskript.app +codesign -s - --force --all-architectures --timestamp --deep dist/manuskript.app +# Create the installer +dmgbuild -s package/osx/dmg-settings.py "manuskript" dist/${filename} cd dist && zip $FILENAME -r manuskript && cd .. ls dist cp dist/$FILENAME dist/manuskript-osx-develop.zip +cp dist/$filename dist/manuskript-osx-develop.dmg diff --git a/package/create_deb.sh b/package/create_deb.sh index 444aea4..546e03b 100755 --- a/package/create_deb.sh +++ b/package/create_deb.sh @@ -30,13 +30,19 @@ echo " [✓]" # wget https://github.com/olivierkes/manuskript/archive/$AppVersion.tar.gz # tar -xvf $AppVersion.tar.gz # rm $AppVersion.tar.gz -# mv manuskript-0.5.0 manuskript +# mv manuskript-0.14.0 manuskript # popd # Using the current direction as source echo -n "Copying manuskript content" -rsync -a --exclude=.git --include="*.msk" --exclude-from="$Root/.gitignore" \ +rsync -a --exclude=.git \ + --exclude=dist \ + --exclude=rpmbuild \ + --exclude=snap \ + --exclude=package \ + --include="*.msk" \ + --exclude-from="$Root/.gitignore" \ "$ScriptPath/../" "$Dest/usr/share/manuskript" cp "$ScriptPath/create_deb/manuskript" "$Dest/usr/bin/manuskript" cp "$ScriptPath/create_deb/manuskript.desktop" \ @@ -55,8 +61,9 @@ echo " [✓]" echo "Your root password might now be asked to finish setting permissions:" sudo chown root:root -R "$Dest" +# Use xz compression to make sure Debian can handle it! echo "Creating the package…" -dpkg -b "$Dest" +dpkg-deb -b -Zxz "$Dest" echo -n "Removing build folder" sudo rm -r "$Dest" diff --git a/package/create_deb/control b/package/create_deb/control index a8e3296..8e1853d 100644 --- a/package/create_deb/control +++ b/package/create_deb/control @@ -1,6 +1,6 @@ Package: manuskript Version: {PkgVersion} -Maintainer: Curtis Gedak +Maintainer: Tobias Frisch Description: Manuskript open source tool for writers. Manuskript is an open source tool for writers. It provides a rich environment to help writers create @@ -13,7 +13,7 @@ Architecture: all Origin: Ubuntu 14.04 Bugs: https://github.com/olivierkes/manuskript/issues Homepage: http://www.theologeek.ch/manuskript/ -Source: https://github.com/olivierkes/manuskript/archive/0.5.0.tar.gz +Source: https://github.com/olivierkes/manuskript/archive/0.14.0.tar.gz Depends: python3, python3-pyqt5, python3-pyqt5.qtwebkit, libqt5svg5, python3-lxml, zlib1g, python3-enchant, python3-markdown, pandoc Suggests: texlive-latex-recommended diff --git a/package/create_rpm.sh b/package/create_rpm.sh index 47300b5..9fc31a5 100755 --- a/package/create_rpm.sh +++ b/package/create_rpm.sh @@ -55,9 +55,14 @@ echo "### Creating tarball folder structure" echo_do eval "mkdir -p $Dest/$AppName-$AppVersion/{usr/share/applications,usr/bin/}" echo "### Copying manuskript content" -echo_do eval "rsync -a --exclude=.git --include='*.msk' \ +echo_do eval "rsync -a --exclude=.git \ + --include='*.msk' \ + --exclude=.github \ --exclude-from='$Root/.gitignore' \ --exclude=rpmbuild \ + --exclude=dist \ + --exclude=snap \ + --exclude=package \ --exclude={.codeclimate.yml,.gitignore,.travis.yml} \ $ScriptPath/../ $Dest/$AppName-$AppVersion/usr/share/manuskript" # Note: Files manuskript and manuskript.desktop are same as in Debian diff --git a/package/flatpak/.gitignore b/package/flatpak/.gitignore new file mode 100644 index 0000000..8423336 --- /dev/null +++ b/package/flatpak/.gitignore @@ -0,0 +1,2 @@ +.flatpak-builder +build-dir diff --git a/package/flatpak/manuskript.py b/package/flatpak/manuskript.py new file mode 100644 index 0000000..7e6d122 --- /dev/null +++ b/package/flatpak/manuskript.py @@ -0,0 +1,12 @@ +#! /usr/bin/env python3 + +import sys +sys.path.insert(1, "/app/lib/manuskript") +print(sys.version) + +# for debugging only +import PyQt5.QtWebEngineWidgets as webengine +print(webengine) + +from manuskript import main +main.run() diff --git a/package/osx/dmg-settings.py b/package/osx/dmg-settings.py new file mode 100644 index 0000000..108e668 --- /dev/null +++ b/package/osx/dmg-settings.py @@ -0,0 +1,184 @@ +import os.path + +import plistlib + +# +# Example settings file for dmgbuild +# + +# Use like this: dmgbuild -s settings.py "Test Volume" test.dmg + +# You can actually use this file by doing e.g. +# +# dmgbuild -s settings.py -D app=/path/to/My.app "My Application" MyApp.dmg + +# .. Useful stuff .............................................................. + +application = defines.get('app', 'dist/manuskript.app') # noqa: F821 +appname = os.path.basename(application) + + +def icon_from_app(app_path): + plist_path = os.path.join(app_path, 'Contents', 'Info.plist') + with open(plist_path, 'rb') as f: + plist = plistlib.load(f) + icon_name = plist['CFBundleIconFile'] + icon_root, icon_ext = os.path.splitext(icon_name) + if not icon_ext: + icon_ext = '.icns' + icon_name = icon_root + icon_ext + return os.path.join(app_path, 'Contents', 'Resources', icon_name) + + +# .. Basics .................................................................... + +# Uncomment to override the output filename +# filename = 'test.dmg' + +# Uncomment to override the output volume name +# volume_name = 'Test' + +# Volume format (see hdiutil create -help) +format = defines.get('format', 'UDBZ') # noqa: F821 + +# Compression level (if relevant) +# compression_level = 9 + +# Volume size +size = defines.get('size', None) # noqa: F821 + +# Files to include +files = [application] + +# Symlinks to create +symlinks = {'Applications': '/Applications'} + +# Files to hide +# hide = [ 'Secret.data' ] + +# Files to hide the extension of +# hide_extension = [ 'README.rst' ] + +# Volume icon +# +# You can either define icon, in which case that icon file will be copied to the +# image, *or* you can define badge_icon, in which case the icon file you specify +# will be used to badge the system's Removable Disk icon. Badge icons require +# pyobjc-framework-Quartz. +# +# icon = '/path/to/icon.icns' +badge_icon = icon_from_app(application) + +# Where to put the icons +icon_locations = { + appname: (140, 120), + 'Applications': (500, 120) +} + +# .. Window configuration ...................................................... + +# Background +# +# This is a STRING containing any of the following: +# +# #3344ff - web-style RGB color +# #34f - web-style RGB color, short form (#34f == #3344ff) +# rgb(1,0,0) - RGB color, each value is between 0 and 1 +# hsl(120,1,.5) - HSL (hue saturation lightness) color +# hwb(300,0,0) - HWB (hue whiteness blackness) color +# cmyk(0,1,0,0) - CMYK color +# goldenrod - X11/SVG named color +# builtin-arrow - A simple built-in background with a blue arrow +# /foo/bar/baz.png - The path to an image file +# +# The hue component in hsl() and hwb() may include a unit; it defaults to +# degrees ('deg'), but also supports radians ('rad') and gradians ('grad' +# or 'gon'). +# +# Other color components may be expressed either in the range 0 to 1, or +# as percentages (e.g. 60% is equivalent to 0.6). +background = 'builtin-arrow' + +show_status_bar = False +show_tab_view = False +show_toolbar = False +show_pathbar = False +show_sidebar = False +sidebar_width = 180 + +# Window position in ((x, y), (w, h)) format +window_rect = ((100, 100), (640, 280)) + +# Select the default view; must be one of +# +# 'icon-view' +# 'list-view' +# 'column-view' +# 'coverflow' +# +default_view = 'icon-view' + +# General view configuration +show_icon_preview = False + +# Set these to True to force inclusion of icon/list view settings (otherwise +# we only include settings for the default view) +include_icon_view_settings = 'auto' +include_list_view_settings = 'auto' + +# .. Icon view configuration ................................................... + +arrange_by = None +grid_offset = (0, 0) +grid_spacing = 100 +scroll_position = (0, 0) +label_pos = 'bottom' # or 'right' +text_size = 16 +icon_size = 128 + +# .. List view configuration ................................................... + +# Column names are as follows: +# +# name +# date-modified +# date-created +# date-added +# date-last-opened +# size +# kind +# label +# version +# comments +# +list_icon_size = 16 +list_text_size = 12 +list_scroll_position = (0, 0) +list_sort_by = 'name' +list_use_relative_dates = True +list_calculate_all_sizes = False, +list_columns = ('name', 'date-modified', 'size', 'kind', 'date-added') +list_column_widths = { + 'name': 300, + 'date-modified': 181, + 'date-created': 181, + 'date-added': 181, + 'date-last-opened': 181, + 'size': 97, + 'kind': 115, + 'label': 100, + 'version': 75, + 'comments': 300, + } +list_column_sort_directions = { + 'name': 'ascending', + 'date-modified': 'descending', + 'date-created': 'descending', + 'date-added': 'descending', + 'date-last-opened': 'descending', + 'size': 'descending', + 'kind': 'ascending', + 'label': 'ascending', + 'version': 'ascending', + 'comments': 'ascending', + } \ No newline at end of file diff --git a/package/osx/fix_app_qt_folder_names_for_codesign.py b/package/osx/fix_app_qt_folder_names_for_codesign.py new file mode 100644 index 0000000..14c0ba8 --- /dev/null +++ b/package/osx/fix_app_qt_folder_names_for_codesign.py @@ -0,0 +1,121 @@ +# -*- coding: utf-8 -*- +import os +import shutil +import sys +from pathlib import Path +from typing import Generator, List, Optional + +from macholib.MachO import MachO + +# Source: https://github.com/pyinstaller/pyinstaller/wiki/Recipe-OSX-Code-Signing-Qt + +def create_symlink(folder: Path) -> None: + """Create the appropriate symlink in the MacOS folder + pointing to the Resources folder. + """ + sibbling = Path(str(folder).replace("MacOS", "")) + + # PyQt5/Qt/qml/QtQml/Models.2 + root = str(sibbling).partition("Contents")[2].lstrip("/") + # ../../../../ + backward = "../" * (root.count("/") + 1) + # ../../../../Resources/PyQt5/Qt/qml/QtQml/Models.2 + good_path = f"{backward}Resources/{root}" + + folder.symlink_to(good_path) + + +def fix_dll(dll: Path) -> None: + """Fix the DLL lookup paths to use relative ones for Qt dependencies. + Inspiration: PyInstaller/depend/dylib.py:mac_set_relative_dylib_deps() + Currently one header is pointing to (we are in the Resources folder): + @loader_path/../../../../QtCore (it is referencing to the old MacOS folder) + It will be converted to: + @loader_path/../../../../../../MacOS/QtCore + """ + + def match_func(pth: str) -> Optional[str]: + """Callback function for MachO.rewriteLoadCommands() that is + called on every lookup path setted in the DLL headers. + By returning None for system libraries, it changes nothing. + Else we return a relative path pointing to the good file + in the MacOS folder. + """ + basename = os.path.basename(pth) + if not basename.startswith("Qt"): + return None + return f"@loader_path{good_path}/{basename}" + + # Resources/PyQt5/Qt/qml/QtQuick/Controls.2/Fusion + root = str(dll.parent).partition("Contents")[2][1:] + # /../../../../../../.. + backward = "/.." * (root.count("/") + 1) + # /../../../../../../../MacOS + good_path = f"{backward}/MacOS" + + # Rewrite Mach headers with corrected @loader_path + dll = MachO(dll) + dll.rewriteLoadCommands(match_func) + with open(dll.filename, "rb+") as f: + for header in dll.headers: + f.seek(0) + dll.write(f) + f.seek(0, 2) + f.flush() + + +def find_problematic_folders(folder: Path) -> Generator[Path, None, None]: + """Recursively yields problematic folders (containing a dot in their name).""" + for path in folder.iterdir(): + if not path.is_dir() or path.is_symlink(): + # Skip simlinks as they are allowed (even with a dot) + continue + if "." in path.name: + yield path + else: + yield from find_problematic_folders(path) + + +def move_contents_to_resources(folder: Path) -> Generator[Path, None, None]: + """Recursively move any non symlink file from a problematic folder + to the sibbling one in Resources. + """ + for path in folder.iterdir(): + if path.is_symlink(): + continue + if path.name == "qml": + yield from move_contents_to_resources(path) + else: + sibbling = Path(str(path).replace("MacOS", "Resources")) + sibbling.parent.mkdir(parents=True, exist_ok=True) + shutil.move(path, sibbling) + yield sibbling + + +def main(args: List[str]) -> int: + """ + Fix the application to allow codesign (NXDRIVE-1301). + Take one or more .app as arguments: "Nuxeo Drive.app". + To overall process will: + - move problematic folders from MacOS to Resources + - fix the DLLs lookup paths + - create the appropriate symbolic link + """ + for app in args: + name = os.path.basename(app) + print(f">>> [{name}] Fixing Qt folder names") + path = Path(app) / "Contents" / "MacOS" + for folder in find_problematic_folders(path): + for file in move_contents_to_resources(folder): + try: + fix_dll(file) + except (ValueError, IsADirectoryError): + continue + shutil.rmtree(folder) + create_symlink(folder) + print(f" !! Fixed {folder}") + print(f">>> [{name}] Application fixed.") + + +if __name__ == "__main__": + sys.exit(main(sys.argv[1:])) \ No newline at end of file diff --git a/package/osx/rebuild_mac_icon.sh b/package/osx/rebuild_mac_icon.sh new file mode 100755 index 0000000..9d77a3b --- /dev/null +++ b/package/osx/rebuild_mac_icon.sh @@ -0,0 +1,22 @@ +#!/bin/sh + + +# Build macOS specific icon set + +ICON_FOLDER=icons/Manuskript +FULLSIZE_ICON=$ICON_FOLDER/icon-512px.png +TMP_ICONSET_FOLDER=$ICON_FOLDER/Manuskript.iconset +TARGET_ICONSET=$ICON_FOLDER/Manuskript.icns +mkdir $TMP_ICONSET_FOLDER +sips -z 16 16 $FULLSIZE_ICON --out $TMP_ICONSET_FOLDER/icon_16x16.png +sips -z 32 32 $FULLSIZE_ICON --out $TMP_ICONSET_FOLDER/icon_16x16@2x.png +sips -z 32 32 $FULLSIZE_ICON --out $TMP_ICONSET_FOLDER/icon_32x32.png +sips -z 64 64 $FULLSIZE_ICON --out $TMP_ICONSET_FOLDER/icon_32x32@2x.png +sips -z 128 128 $FULLSIZE_ICON --out $TMP_ICONSET_FOLDER/icon_128x128.png +sips -z 256 256 $FULLSIZE_ICON --out $TMP_ICONSET_FOLDER/icon_128x128@2x.png +sips -z 256 256 $FULLSIZE_ICON --out $TMP_ICONSET_FOLDER/icon_256x256.png +sips -z 512 512 $FULLSIZE_ICON --out $TMP_ICONSET_FOLDER/icon_256x256@2x.png +sips -z 512 512 $FULLSIZE_ICON --out $TMP_ICONSET_FOLDER/icon_512x512.png +sips -z 1024 1024 $FULLSIZE_ICON --out $TMP_ICONSET_FOLDER/icon_512x512@2x.png +iconutil -c icns --output $TARGET_ICONSET $TMP_ICONSET_FOLDER +rm -R $TMP_ICONSET_FOLDER \ No newline at end of file diff --git a/package/prepare_linux.sh b/package/prepare_linux.sh index a1ce26f..be3e648 100755 --- a/package/prepare_linux.sh +++ b/package/prepare_linux.sh @@ -5,7 +5,7 @@ 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 -pyenv local 3.6.3 -python --version -easy_install pip -pip install pyqt5==5.9 lxml pytest pytest-faulthandler +pyenv local 3.6.7 +python3 --version +sudo pip3 install --upgrade pip setuptools wheel +pip3 install pyqt5==5.9 lxml pytest pytest-faulthandler diff --git a/package/prepare_osx.sh b/package/prepare_osx.sh index 8f937a1..ae642fc 100755 --- a/package/prepare_osx.sh +++ b/package/prepare_osx.sh @@ -1,12 +1,18 @@ #!/bin/bash set -ev # display each line executed along with output -brew update + +# seriously the CI needs to stop testing 99% of the time if homebrew has updates or not +export HOMEBREW_NO_AUTO_UPDATE=1 # (please let it go, homebrew!) + +# brew update # (safe the CI some time) + # Upgrade to python 3.x -brew upgrade python +# brew upgrade python # (should be fine) + brew install enchant brew postinstall python # this installs pip sudo -H pip3 install --upgrade pip setuptools wheel -pip3 install pyinstaller PyQt5 lxml pyenchant pytest pytest-faulthandler +pip3 install pyinstaller PyQt5 lxml pyenchant pytest pytest-faulthandler pillow dmgbuild brew install hunspell # Fooling PyEnchant as described in the wiki. # https://github.com/olivierkes/manuskript/wiki/Package-manuskript-for-OS-X diff --git a/resources/ch.theologeek.Manuskript.appdata.xml b/resources/ch.theologeek.Manuskript.appdata.xml new file mode 100644 index 0000000..40c0e8c --- /dev/null +++ b/resources/ch.theologeek.Manuskript.appdata.xml @@ -0,0 +1,63 @@ + + + + ch.theologeek.Manuskript + CC0-1.0 + GPL-3.0 + + + Manuskript + An open-source tool for writers + +

Manuskript provides a rich environment to help writers create their first draft and then further refine and edit their masterpiece.

+

With Manuskript you can:

+
    +
  • Grow your premise from one sentence, to a paragraph, to a full summary
  • +
  • Create characters
  • +
  • Conceive plots
  • +
  • Construct outlines (Outline mode and/or Index cards)
  • +
  • Write with focus (Distraction free mode)
  • +
  • Build worlds
  • +
  • Track items
  • +
  • Edit and re-organize chapters and scenes
  • +
  • View Story line
  • +
  • Compose with fiction or non-fiction templates and writing modes
  • +
  • Import and export document formats such as HTML, ePub, OpenDocument, DocX, and more
  • +
+
+ + + + https://www.theologeek.ch/manuskript/wp-content/uploads/2022/08/screenshot01.png + + + https://www.theologeek.ch/manuskript/wp-content/uploads/2022/08/screenshot02.png + + + https://www.theologeek.ch/manuskript/wp-content/uploads/2022/08/screenshot03.png + + + https://www.theologeek.ch/manuskript/wp-content/uploads/2022/08/screenshot04.png + + + https://www.theologeek.ch/manuskript/wp-content/uploads/2022/08/screenshot05.png + + + + http://www.theologeek.ch/manuskript + https://github.com/olivierkes/manuskript/issues + https://www.theologeek.ch/manuskript/category/features + + https://hosted.weblate.org/projects/manuskript/translations + https://github.com/olivierkes/manuskript + https://github.com/olivierkes/manuskript/wiki#contributing + + thejackimonster_at_gmail.com + + ch.theologeek.Manuskript.desktop + + + + + +
diff --git a/resources/ch.theologeek.Manuskript.desktop b/resources/ch.theologeek.Manuskript.desktop new file mode 100644 index 0000000..afb8347 --- /dev/null +++ b/resources/ch.theologeek.Manuskript.desktop @@ -0,0 +1,10 @@ +[Desktop Entry] +Type=Application +Terminal=false +Name=Manuskript +TryExec=manuskript +Exec=manuskript +Icon=ch.theologeek.Manuskript +Categories=Office;WordProcessor; +Keywords=manuskript;office;write;edit;novel;text;msk +Comment=An open source tool for writers diff --git a/snap/gui/manuskript.desktop b/snap/gui/manuskript.desktop new file mode 100644 index 0000000..776d737 --- /dev/null +++ b/snap/gui/manuskript.desktop @@ -0,0 +1,9 @@ +[Desktop Entry] +Name=Manuskript +Comment=An open source tool for writers +Keywords=manuskript;office;write;edit;novel;text;msk +Exec=manuskript +Terminal=false +Type=Application +Icon=${SNAP}/meta/gui/manuskript.svg +Categories=Office;WordProcessor; diff --git a/snap/gui/manuskript.svg b/snap/gui/manuskript.svg new file mode 100644 index 0000000..596b407 --- /dev/null +++ b/snap/gui/manuskript.svg @@ -0,0 +1,109 @@ + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + diff --git a/snap/snapcraft.yaml b/snap/snapcraft.yaml new file mode 100644 index 0000000..100ad22 --- /dev/null +++ b/snap/snapcraft.yaml @@ -0,0 +1,128 @@ +name: manuskript +title: Manuskript +summary: Manuskript is an open-source tool for writers. +description: | + Manuskript provides a rich environment to help writers create their first draft and then further refine and edit their masterpiece. + With Manuskript you can: + * Grow your premise from one sentence, to a paragraph, to a full summary + * Create characters + * Conceive plots + * Construct outlines (Outline mode and/or Index cards) + * Write with focus (Distraction free mode) + * Build worlds + * Track items + * Edit and re-organize chapters and scenes + * View Story line + * Compose with fiction or non-fiction templates and writing modes + * Export to HTML, ePub, OpenDocument, DocX, PDF, and more + * Additionally Manuskript can help in many more ways with a spell checker, markdown highlighter, frequency analyzer, and automatic save in open and plain text file format. +adopt-info: manuskript +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: + command: bin/desktop-launch $SNAP/bin/manuskript + environment: + # Fallback to XWayland if running in a Wayland session. + DISABLE_WAYLAND: 1 + plugs: + - desktop + - desktop-legacy + - unity7 + - wayland + - x11 + - opengl + - home + - network-manager # (Seems to be necessary on older Ubuntu to open the window) + +parts: + desktop-qt5: + build-packages: + - build-essential + - qtbase5-dev + - dpkg-dev + make-parameters: + - FLAVOR=qt5 + plugin: make + source: https://github.com/ubuntu/snapcraft-desktop-helpers.git + source-subdir: qt + stage-packages: + - libxkbcommon0 + - ttf-ubuntu-font-family + - dmz-cursor-theme + - light-themes + - adwaita-icon-theme + - gnome-themes-standard + - shared-mime-info + - libqt5gui5 + - libgdk-pixbuf2.0-0 + - libqt5svg5 + - try: + - appmenu-qt5 + - locales-all + - xdg-user-dirs + - fcitx-frontend-qt5 + - libxcursor1 + - libgtk2.0-0 + + pip-fix: + plugin: nil + stage-packages: + - python3-distutils + - python3-setuptools + + pyspellchecker: + after: [pip-fix] + plugin: python + python-version: python3 + source: https://github.com/barrust/pyspellchecker.git + + manuskript: + after: [desktop-qt5,pyspellchecker] + plugin: dump + source: https://github.com/olivierkes/manuskript.git + source-type: git + source-branch: 'master' + build-packages: + - python3 + - python3-pyqt5 + - python3-pyqt5.qtwebkit + - libqt5svg5 + - python3-lxml + - zlib1g + - python3-enchant + - python3-markdown + - pandoc + - texlive-latex-recommended + - texlive-fonts-recommended + - texlive-latex-extra + - texlive-luatex + - texlive-xetex + override-pull: | + snapcraftctl pull + + version="$(grep -E '__version__.*\".*\"' 'manuskript/version.py' | cut -d\" -f2)" + snapcraftctl set-version "$version" + stage-packages: + - python3 + - python3-pyqt5 + - python3-pyqt5.qtwebkit + - libqt5svg5 + - python3-lxml + - zlib1g + - libc-bin + - locales + - python3-enchant + - python3-markdown + - pandoc + - texlive-latex-recommended + - texlive-fonts-recommended + - texlive-luatex + override-build: | + snapcraftctl build diff --git a/util/fix_ts.py b/util/fix_ts.py new file mode 100644 index 0000000..388cbcc --- /dev/null +++ b/util/fix_ts.py @@ -0,0 +1,65 @@ +#!/bin/python + +import re +import sys + +from lxml import etree + +def main(argv) -> int: + if len(argv) < 2: + print("You need to specify a .ts file!") + return 1 + + path = argv[1] + + if (len(path) < 3) or (path[-3:] != '.ts'): + print("Please specify a path to a .ts file!") + return 2 + + tree = None + + with open(path, 'rb') as file: + tree = etree.parse(file) + + if tree is None: + print("Parsing failed!") + return 3 + + root = tree.getroot() + if root.tag != 'TS': + print("Wrong type of file!") + return 4 + + for context in root.getchildren(): + if context.tag != 'context': + continue + + for message in context.getchildren(): + if message.tag != 'message': + continue + + source = message.find("source") + translation = message.find("translation") + + if (source is None) or (translation is None): + continue + + sourceText = etree.tostring(source, encoding='unicode').strip() + + if '&' in sourceText: + continue + + translationText = etree.tostring(translation, encoding='unicode').strip() + translationText = re.sub(r'&([a-zA-Z]+);', r'&\g<1>;', translationText) + + translationNode = etree.fromstring(translationText) + translation.text = translationNode.text + + with open(path, 'wb') as file: + tree.write(file, encoding='utf-8', xml_declaration=True, pretty_print=True) + + print("Fixing finished!") + return 0 + +if __name__ == '__main__': + sys.exit(main(sys.argv))