1
0
mirror of https://github.com/laurent22/joplin.git synced 2025-08-24 20:19:10 +02:00

Compare commits

...

239 Commits

Author SHA1 Message Date
Laurent Cozic
23e6e6e69d Android release v1.0.241 2019-03-10 20:35:01 +00:00
Laurent Cozic
ade5af2559 Electron release v1.0.140 2019-03-10 20:32:43 +00:00
Laurent Cozic
0a993dc012 Update translations 2019-03-10 20:32:28 +00:00
xcffl
4baa46507f update zh-CN translation (#1321) 2019-03-10 20:31:39 +00:00
Laurent Cozic
0d8878abd3 Mobile: For now, make notebooks sorted by title 2019-03-10 20:30:31 +00:00
Helmut K. C. Tessarek
f962084591 Merge pull request #1318 from Ouvill/feature/update_jp_translation
update jp translation
2019-03-10 00:48:35 -05:00
Helmut K. C. Tessarek
921b45286b Merge pull request #1316 from tessus/localization-de_DE
Update de_DE.po
2019-03-10 00:48:13 -05:00
Ouvill
301bfed05e update jp translation 2019-03-09 12:56:55 +09:00
Helmut K. C. Tessarek
62e7d6fa86 Update de_DE.po 2019-03-08 13:51:08 -05:00
Laurent Cozic
7e34cd4452 Android release v1.0.240 2019-03-08 17:43:01 +00:00
Laurent Cozic
b35cb9a7ab Electron release v1.0.139 2019-03-08 17:40:11 +00:00
Laurent Cozic
18b836525c Updated translations 2019-03-08 17:39:26 +00:00
Caleb John
e34e49b88d Add joplin.desktop file for xfce and mate desktops (#1304) 2019-03-08 17:33:15 +00:00
Renato Rosa
5bf879c2d9 Update pt_BR.po (#1303)
Minor typo fixed.
2019-03-08 17:33:01 +00:00
Joel Simpson
61d6309c0e Desktop: Adding progress bar and text changes to install script. (#1294) 2019-03-08 17:32:20 +00:00
Helmut K. C. Tessarek
17c9c0f9ef Mobile: version info changes (#1290)
* update the version info string for mobiles to be consistent with the desktop

Joplin vX.Y.Z -> Joplin X.Y.Z
hardcoded the string. Joplin is a product name, no need for translation.

* show version as X.Y.Z in update dialog

* update .po files so that the previous commit won't break translations

* tag -> Schlagwort
2019-03-08 17:31:48 +00:00
Laurent Cozic
9bd62fd3d4 All: Refresh folder order when a new folder is added or modified 2019-03-08 17:25:32 +00:00
Laurent Cozic
de73d4baa7 Minor issue 2019-03-08 17:19:06 +00:00
Laurent Cozic
379ff5163b Merge branch 'master' of github.com:laurent22/joplin 2019-03-08 17:18:31 +00:00
Laurent Cozic
d9538ccb08 No longer using fixed IDs 2019-03-08 17:17:37 +00:00
Laurent Cozic
9289dbdf77 All: Refactor Markdown rendering (#1315)
* Refactoring MdToHtml to avoid manually rendering tokens

* Minor fix

* Fixed loading of resources

* Handle clicking on checkboxes

* Added back Katex support

* Fixed issues with Katex and note rendering

* Added back support for links

* Restored code block highlighting support

* clean up

* Applying update to mobile

* Fixed handling of links and cleaned up to share more code between mobile and desktop

* Restored content caching and improved handling of additional assets

* Clean up and a few fixes

* Applied more updates to mobile and added code highlighting support
2019-03-08 17:14:17 +00:00
Laurent Cozic
5719ae495a Merge branch 'master' of github.com:laurent22/joplin 2019-03-08 17:13:07 +00:00
Helmut K. C. Tessarek
a89e3b7924 fix another minor typo 2019-03-08 03:34:48 -05:00
Helmut K. C. Tessarek
e576d09712 Merge pull request #1310 from lyndonbarrie/master
fix spelling mistake
2019-03-08 03:12:33 -05:00
lyndonbarrie
43600a7824 fix spelling mistake 2019-03-07 09:13:34 +00:00
Laurent Cozic
921f01d9dc Desktop: Fixed regression on external edit 2019-03-06 22:22:37 +00:00
Laurent Cozic
dec5668582 CLI: Added command to decrypt a file 2019-03-05 20:57:15 +00:00
Laurent Cozic
e30bc12354 All: Disabled Mermaid support for now 2019-03-06 07:11:55 +00:00
Laurent Cozic
fca4fa666d Electron release v1.0.138 2019-03-03 17:14:28 +00:00
Laurent Cozic
59478160c8 Added Arabic translation 2019-03-03 17:14:17 +00:00
Laurent Cozic
8110fe89ef Electron release v1.0.137 2019-03-03 00:59:04 +00:00
Laurent Cozic
c7ed1b5eae Trying to fix Windows 32-bit build 2019-03-03 00:58:41 +00:00
Laurent Cozic
25951e7097 Trying to fix Windows 32-bit build 2019-03-03 00:51:54 +00:00
Laurent Cozic
687b9d1bef All: Improve rendering of Mermaid graphs 2019-03-03 00:31:41 +00:00
Laurent Cozic
630e77b9eb Electron release v1.0.136 2019-03-02 23:40:58 +00:00
Laurent Cozic
68ff2e17b3 Trying to fix Windows 32-bit build 2019-03-02 23:35:18 +00:00
Laurent Cozic
945d83608a All: Include injected Mermaid JS only when necessary 2019-03-02 23:22:41 +00:00
Laurent Cozic
833d473268 Desktop: Resolves #206: Added support for sorting notebooks by title or last modified 2019-03-02 17:35:57 +00:00
Laurent Cozic
2256b0c5ec Desktop: Fixes very slow startup since Electron 4 upgrade 2019-02-28 23:24:28 +00:00
Laurent Cozic
677aa7d59b Merge branch 'master' of github.com:laurent22/joplin 2019-02-28 22:32:47 +00:00
Laurent Cozic
4363005e92 All: Resolves #1105: Added support for macro persistence for Katex 2019-02-28 22:32:29 +00:00
Helmut K. C. Tessarek
2e3ef618db Merge pull request #1271 from RenatoXSR/pt_BR-update-20190227
Updated pt_BR locale to correct unicode char escapes.
2019-02-27 21:16:43 -05:00
Laurent Cozic
1adbbd14c6 Fix images 2019-02-28 00:36:44 +00:00
Laurent Cozic
4dfd7db729 Fixing image 2019-02-28 00:28:46 +00:00
Laurent Cozic
e70562a102 Fixing image 2019-02-28 00:27:25 +00:00
Laurent Cozic
a0e5947ba4 All: Resolves #163: Added Mermaid support to desktop and mobile 2019-02-28 00:22:53 +00:00
Laurent Cozic
e841ea8a91 Fixing bad commit 2019-02-27 23:41:32 +00:00
Laurent Cozic
770a435029 Revert "Revert "Update website""
This reverts commit 49b56e84a7.
2019-02-27 23:38:50 +00:00
Laurent Cozic
49b56e84a7 Revert "Update website"
This reverts commit ff1a6fdbbd.
2019-02-27 23:38:21 +00:00
Laurent Cozic
ff1a6fdbbd Update website 2019-02-27 23:37:16 +00:00
Laurent Cozic
2168090b96 Electron release v1.0.135 2019-02-27 22:52:08 +00:00
Laurent Cozic
33f7b680bc Desktop: Fixes #1273: Trying to improve accuracy of sidebar resizing 2019-02-27 22:44:10 +00:00
Laurent Cozic
0957298cb8 Desktop: Fixes #1268: Fix exporting to PDF and printing, which were broken following upgrade to Electron 4 2019-02-27 22:35:26 +00:00
Laurent Cozic
08f2f982cf Update website 2019-02-27 15:04:34 +00:00
RenatoXSR
3376fbfa55 Updated pt_BR locale to correct unicode char escapes. 2019-02-27 10:31:54 -03:00
Laurent Cozic
4a31e5fe73 Electron release v1.0.134 2019-02-27 10:03:07 +00:00
Laurent Cozic
baacec5ba6 Electron release v1.0.133 2019-02-27 00:14:24 +00:00
Laurent Cozic
95188b71b8 Desktop: Fixes #1265: Fixed column resize on Windows. Also increased minimum and maximum sizes of columns. 2019-02-27 00:13:56 +00:00
Laurent Cozic
cf57be6e98 Merge branch 'master' of github.com:laurent22/joplin 2019-02-26 23:40:16 +00:00
Laurent Cozic
b691092d7a iOS v10.0.30 2019-02-26 23:39:52 +00:00
Helmut K. C. Tessarek
03e60fc028 Merge pull request #1262 from cybertramp/patch-1
한국말 -> 한국어
2019-02-26 16:52:16 -05:00
Andros Fenollosa
2e25ec318f Update language es_ES (#1257)
* Update language es_ES

* Add Last-Translator

* Translation fix
2019-02-26 16:51:51 -05:00
cybertramp
7236e5e9ae 한국말 -> 한국어
"한국말" -> "한국어"
Korean translation error update.
2019-02-26 19:36:45 +09:00
Helmut K. C. Tessarek
6f7dd51a98 Merge pull request #1261 from tessus/localization-de_DE
Update de_DE.po
2019-02-25 20:32:09 -05:00
Helmut K. C. Tessarek
db1dab9293 Update de_DE.po 2019-02-25 20:24:59 -05:00
Laurent Cozic
06f1b9e4d7 Electron release v1.0.132 2019-02-24 23:46:17 +00:00
Laurent Cozic
8f958ac931 Desktop: Trying to fix sign server 2019-02-24 23:46:05 +00:00
Laurent Cozic
eae63bfb79 Electron release v1.0.131 2019-02-24 19:30:09 +00:00
Laurent Cozic
8adfc81c30 Trying to fix Windows build 2019-02-24 19:30:04 +00:00
Laurent Cozic
0c516443e3 Android release v1.0.239 2019-02-24 18:08:54 +00:00
Laurent Cozic
ad9bc0bf63 Electron release v1.0.130 2019-02-24 18:06:09 +00:00
Laurent Cozic
b0596670a6 Revert "New tag adding dialogue (#1206)"
This reverts commit 229dd7a6dd.
2019-02-24 18:04:25 +00:00
Laurent Cozic
998011ff43 Mobile: Apply tag duplication fix to mobile too 2019-02-24 18:02:50 +00:00
Laurent Cozic
081e1c5b62 Electron release v1.0.129 2019-02-24 17:27:11 +00:00
Laurent Cozic
edfd2c4d54 Desktop: Updated build process to fix buggy electron-builder https://github.com/electron-userland/electron-builder/issues/3660#issuecomment-465461491 2019-02-24 17:26:46 +00:00
Laurent Cozic
9d65a3a34c Android release v1.0.238 2019-02-24 12:53:00 +00:00
Laurent Cozic
1a86cbdb9d Electron release v1.0.128 2019-02-24 12:48:14 +00:00
Laurent Cozic
849cb4456c Update website 2019-02-24 12:38:20 +00:00
Laurent Cozic
1736717f2e Api: Require token for search end point, fixed a few issues and added doc 2019-02-24 12:37:37 +00:00
Laurent Cozic
50b75e1e63 API: Resolves #1148: Added support for search end-point and improved error handling 2019-02-24 12:24:55 +00:00
Laurent Cozic
179005dd6c All: Resolves #1198: In search results, give more weight to more recent notes and less to completed to-dos 2019-02-24 12:00:06 +00:00
Laurent Cozic
6b3fe6b2cb Update translations 2019-02-24 11:27:47 +00:00
Helmut K. C. Tessarek
c34872bb26 when deleting notebook or tag, display name (#1253)
The delete dialog for notebooks and tags does not display the name of the item to be deleted.
This can lead to an undesired result.

closes #1245
2019-02-24 11:11:34 +00:00
Helmut K. C. Tessarek
4845a21287 change notebook icon in toolbar and search result (#1252)
see f6f0bcf1c3
2019-02-24 11:10:55 +00:00
Laurent Cozic
ddd513fe09 Small tweaks to avoid confusion with enum name 2019-02-24 11:10:22 +00:00
Helmut K. C. Tessarek
4ce118d459 add shortcut to start a sync (#1231)
see https://github.com/laurent22/joplin/issues/1151#issuecomment-463845158
2019-02-24 11:09:15 +00:00
ruuti
99da184ba5 Set theme based background color to note webview to avoid white background on scroll when dark theme is enabled. (#1230) 2019-02-24 11:07:49 +00:00
Polshakov Dmitry
e2e4e62c4f Desktop: Fix alt key using (#1216)
Fix #934

On linux if you try to change the layout with Alt + Shift, the menu
will open instead
2019-02-24 11:07:07 +00:00
Caleb John
229dd7a6dd New tag adding dialogue (#1206)
* Update tag adding dialogue
- use datalist to autocomplete tags
- display tags with TagList

* Move the tagItem highlight color to theme.js
2019-02-24 10:55:19 +00:00
Mats Estensen
1e0c4cc5cd Desktop: Add type 'info' and 'OK' button to update dialog when version up-to-date (#1148)
* Add type 'info' and 'OK' button to update dialogue when current version is up to date

* remove whitespace and fix space to tabs

* remove created newline at end of file
2019-02-24 10:54:50 +00:00
Laurent Cozic
b40ccc7a15 All: Fixes #1251: Handle Show Uncompleted Tasks option when selecting a tag 2019-02-24 10:38:06 +00:00
Laurent Cozic
7d6b7e588c Desktop: use nodeIntegration 2019-02-24 10:17:37 +00:00
Laurent Cozic
22cacd2c5b Update website 2019-02-23 15:54:49 +00:00
Laurent Cozic
6a22e7836a Website: Add prerelease page 2019-02-23 15:54:34 +00:00
Laurent Cozic
32a67b9b33 minor tweaks 2019-02-23 15:53:14 +00:00
Laurent Cozic
b5dff09c28 All: Simplify Welcome notes and folders to avoid sync problems. Duplicate items will have to be manually deleted. 2019-02-23 15:47:29 +00:00
Laurent Cozic
c56d8153e8 Merge branch 'master' of github.com:laurent22/joplin 2019-02-18 18:12:00 +00:00
Laurent Cozic
eb5950d126 Desktop: Adding support for Mermaid 2019-02-18 18:11:53 +00:00
Helmut K. C. Tessarek
4241436e40 Merge pull request #1235 from tessus/localization-de_DE
Update de_DE.po
2019-02-18 12:04:47 -05:00
Helmut K. C. Tessarek
e93af7aed5 Update de_DE.po 2019-02-18 11:55:41 -05:00
Helmut K. C. Tessarek
d2416f850e Merge pull request #1234 from sczhg/master
Fix unclear Chinese translation.
2019-02-18 04:25:27 -05:00
Hao Huang
7af22eb006 Fix unclear Chinese translation. 2019-02-18 17:13:51 +08:00
Laurent Cozic
3f1be5e7e7 Merge branch 'master' of github.com:laurent22/joplin 2019-02-18 00:43:21 +00:00
Laurent Cozic
a4e649c82d Desktop: Clean up adding custom CSS and remove top margin and padding from rendered html 2019-02-18 00:42:52 +00:00
Laurent Cozic
cde1a8f0a8 Clipper: Fixed build error following package upgrade 2019-02-18 00:40:26 +00:00
Caleb John
cda6eb7c2f Fix little white corner between scrollbars (#1229) 2019-02-17 02:16:32 +00:00
Laurent Cozic
3c3e6aeca0 Merge branch 'master' of github.com:laurent22/joplin 2019-02-16 13:13:39 +00:00
Andros Fenollosa
99156311db Less verbose and visually more informative (#1226) 2019-02-16 13:13:33 +00:00
Laurent Cozic
91b2e5e703 Added Russian translation 2019-02-16 13:12:46 +00:00
Andros Fenollosa
573fd816d0 Update es_ES.po (#1227) 2019-02-16 13:10:54 +00:00
Laurent Cozic
e6aa002758 Desktop: Fixes #1215: Updated single instance logic for Electron 4 2019-02-16 13:10:37 +00:00
Laurent Cozic
361d46ac5d Clean up 2019-02-16 01:17:43 +00:00
Laurent Cozic
9bc7c2fd65 Added comments 2019-02-16 01:15:30 +00:00
Laurent Cozic
ce49f5f8b7 Merge branch 'master' of github.com:laurent22/joplin 2019-02-16 01:12:53 +00:00
Laurent Cozic
81e4cd319d Desktop: Allow resizing left panels 2019-02-16 01:12:43 +00:00
Zorbey Doğangüneş
71f905535f Turkish Language Improving (#1218)
* Fix & Improve

* Update tr_TR.po

Added missing " #, fuzzy " lanes.

* Update tr_TR.po

letter correction

* Update tr_TR.po

removed duplicate lanes.

* Update tr_TR.po

unnecessary space removed
2019-02-15 19:11:04 +00:00
0ndrey
d3bff0a9e3 Update ru_RU.po (#1219) 2019-02-15 19:10:37 +00:00
Laurent Cozic
88e6315d09 Security: Updated a few packages to fix CVE-2018-16469 2019-02-15 18:01:04 +00:00
Laurent Cozic
3d933c5244 Desktop: Trying to upgrade to Electron 4.0.4 2019-02-15 00:30:03 +00:00
Laurent Cozic
73af19314d Desktop: Trying to upgrade to Electron 4.0.4 2019-02-15 00:29:48 +00:00
Laurent Cozic
1d71712c8a Security: Updated parse-url to fix CVE-2018-3774 2019-02-14 23:18:17 +00:00
Laurent Cozic
1333c35389 Update website 2019-02-14 23:13:32 +00:00
ruuti
e0f5f47a15 Load background color from theme colours and set it for top and bottom safe area to respect iOS style guide. (#1195) 2019-02-14 23:09:21 +00:00
N Jannasch
34323042d5 Clipper: Feature added for storing urls (#1173)
* Clipper: Feature added for storing urls

* Clipper: Clip URL variable nameing changed
2019-02-14 23:05:28 +00:00
Joybin Chen
aa86fa9986 Clipper: bugfix, joplin icon not show up in Firefox using 32px size. (#1152) 2019-02-14 23:03:01 +00:00
Laurent Cozic
d2d659d5a9 Android release v1.0.237 2019-02-14 22:32:17 +00:00
Laurent Cozic
1595248b52 Electron release v1.0.127 2019-02-14 22:29:19 +00:00
Laurent Cozic
fc94c616b5 All: Updated translations 2019-02-14 22:28:04 +00:00
Laurent Cozic
f6f0bcf1c3 Desktop: Changed Folder icon to a Notebook 2019-02-14 22:27:53 +00:00
Laurent Cozic
6eeeda5dab All: Update welcome assets 2019-02-14 22:22:43 +00:00
Caleb John
58993d2ead Add styling to the scrollbars (#1204) 2019-02-14 22:21:21 +00:00
Caleb John
7c0b608769 Minor update to dark theme (#1181) 2019-02-14 22:18:42 +00:00
Zorbey Doğangüneş
259be84a3e Turkish Language Support (#1211)
* Add files via upload

* Delete tr_TR.po

* Updated translations
2019-02-14 22:17:36 +00:00
0ndrey
57c880cf85 Russian translate (#1179)
* Исправлен и обновлен перевод

* Update ru_RU.po

* Update ru_RU.po
2019-02-14 22:15:33 +00:00
Laurent Cozic
0469fe76d7 Desktop: Do not display tags that are not associated with any note 2019-02-13 23:33:07 +00:00
Laurent Cozic
a3e74320fa Desktop: Allow creating new note when multiple notes are selected 2019-02-13 22:57:43 +00:00
Laurent Cozic
4e0f4397b2 All: Fixed percent translated and added missing strings 2019-02-13 22:52:32 +00:00
Laurent Cozic
b26aab3863 Desktop: Print background images and colors, and improved checkoxes to avoid use of svg 2019-02-13 22:35:57 +00:00
Laurent Cozic
75ec97fe61 Updated Swedish translation 2019-02-13 17:34:26 +00:00
Laurent Cozic
9a356453fc Fix readme 2019-02-12 17:51:13 +00:00
Laurent Cozic
f0020b3393 Desktop: Highlight row backgroung in table 2019-02-10 17:16:11 +00:00
Laurent Cozic
ea9f1dc91d CLI v1.0.123 2019-02-10 16:47:42 +00:00
Laurent Cozic
2ef77dcf1f Revert "CLI: improve e2ee decrypt command"
This reverts commit 6e235605ed.
Fixed #1144: e2ee decrypt cannot be used inside cron. If we need
manually decrypting a file, we'll need to move this command
somewhere else.
2019-02-10 16:44:07 +00:00
Laurent Cozic
29e7ec4cc9 CLI: Fixes #1194: Fixed opening then saving note in text editor 2019-02-10 16:41:14 +00:00
Laurent Cozic
5710e3fad0 CLI v1.0.122 2019-02-10 16:34:41 +00:00
Laurent Cozic
a03aa62d58 Desktop: Moved buttons up on Config screen for consistency with other screens 2019-02-10 16:29:06 +00:00
Laurent Cozic
2203a39917 Desktop: Disable userstyle.css when printing or exporting to PDF 2019-02-10 16:11:41 +00:00
Laurent Cozic
bc58668483 Desktop: Fixes #1200: Note list was hidden when minimizing and
maximizing window
2019-02-10 15:59:28 +00:00
Ladislav Benc
0b4650f355 Suggesting some language improvements for the Welcome page (#1199)
I'm not sure about the "Joplin has three main columns" part. While it would be more correct to put definite articles
2019-02-10 15:44:43 +00:00
Laurent Cozic
aecdec48ad Electron release v1.0.126 2019-02-09 19:32:04 +00:00
Laurent Cozic
e49198a0d4 oops 2019-02-09 19:31:07 +00:00
Laurent Cozic
6aa4553dd3 Updated translations 2019-02-09 19:28:19 +00:00
Laurent Cozic
860e8a8f5a Desktop: Added a few more shortcuts for macOS and other platforms 2019-02-09 19:13:23 +00:00
Laurent Cozic
434037d793 Done Welcome integration on mobile and CLI 2019-02-09 19:04:34 +00:00
Laurent Cozic
214eae27da CLI: Fixed performance issue which was causing CLI to wait up to 10 seconds when closing the app 2019-02-09 19:04:00 +00:00
Laurent Cozic
0567188fa8 Desktop: Select Welcome notebook the first time it is created 2019-02-08 23:38:29 +00:00
Laurent Cozic
4326902683 Desktop: Fixes #1196: Moved webview to separate component to more precisely handle lifecycle events and precent uncessary reloading 2019-02-08 23:07:01 +00:00
Laurent Cozic
da3589149d Desktop: Fixed restored scroll position when only viewer is visible 2019-02-08 08:28:27 +00:00
Laurent Cozic
69b4b4d1f4 Deskop: Integrated Welcome notes to desktop 2019-02-07 23:27:50 +00:00
Laurent Cozic
dd4b46a88b All: Finished Welcome notebook 2019-02-07 23:17:58 +00:00
Laurent Cozic
6f2253b2f4 Updated Chinese translation (Thanks HongSen) 2019-02-07 22:25:50 +00:00
Laurent Cozic
4c00d9512e Desktop: Resolves #1041: Go back to previous note after clicking link 2019-02-07 18:17:09 +00:00
Laurent Cozic
6f511cb1e6 All: Tweaked blockquote CSS to make it fit more with styling update 2019-02-07 08:23:44 +00:00
Caleb John
029e84f538 Add new styling to tables and blockquote (#1185)
* Add new styling to tables and blockquote

* Update styling to tables
2019-02-07 08:01:38 +00:00
Laurent Cozic
42b1db1d08 Desktop: Use Arial for note viewer in Windows 2019-02-07 00:00:08 +00:00
Laurent Cozic
9d4b34cad7 All: Applied styles to mobile too 2019-02-06 23:52:29 +00:00
Laurent Cozic
cd9aff0f59 Desktop: Make default editor font a bit bigger 2019-02-06 23:06:37 +00:00
Laurent Cozic
032816fffc All: Made note font slightly smaller 2019-02-06 22:48:02 +00:00
Laurent Cozic
1408f06c8d All: darker text 2019-02-06 22:39:03 +00:00
Laurent Cozic
49f8d0c6d8 API: Allow specifying item ID for any item 2019-02-06 22:36:39 +00:00
Laurent Cozic
0d6443c30a All: Improve styling and layout of notes in note viewer 2019-02-05 23:55:09 +00:00
Laurent Cozic
e62d91dda8 Desktop: Allow using macOS App bundle as external editor, and improved error handling 2019-02-05 22:00:25 +00:00
Laurent Cozic
0e122c9dc5 Merge branch 'welcome' 2019-02-05 21:14:43 +00:00
Laurent Cozic
c2bd453e8c Updated welcome notes 2019-02-05 21:14:32 +00:00
Laurent Cozic
949ea7afb7 Merge branch 'welcome' of github.com:laurent22/joplin into welcome 2019-02-05 18:46:41 +00:00
Laurent Cozic
9f575101d2 Updated doc 2019-02-05 18:46:32 +00:00
Laurent Cozic
2b4470054e Merge branch 'welcome' of github.com:laurent22/joplin into welcome 2019-02-05 18:45:24 +00:00
Laurent Cozic
b220613e54 Remove logo 2019-02-05 18:45:16 +00:00
Laurent Cozic
11328babe8 Add NC logo 2019-02-05 18:26:49 +00:00
Laurent Cozic
735bc92bc4 Mobile: Added shim.createResourceFromPath to support Welcome assets 2019-02-05 18:11:03 +00:00
Laurent Cozic
6894b9b1b7 All: Added tests for Welcome asset handling 2019-02-05 17:39:10 +00:00
Laurent Cozic
4de7815f31 doc 2019-02-05 17:08:25 +00:00
Laurent Cozic
4ce7b48468 Merge branch 'master' of github.com:laurent22/joplin 2019-02-05 17:07:41 +00:00
Laurent Cozic
77e4cb87ad iOS v29 2019-02-05 17:06:36 +00:00
Laurent Cozic
dd6b43035e Link between notes on Welcome notes 2019-02-03 20:30:59 +00:00
Laurent Cozic
e76094c546 Also set tags on Welcome notes 2019-02-03 20:19:17 +00:00
Laurent Cozic
9c00dc4cab All: Added script to build welcome assets and to import them on startup 2019-02-03 18:58:44 +00:00
Laurent Cozic
fc416de348 Doc: Removed note 'tags' property from doc as not fully supported (only used in Web Clipper) 2019-02-03 17:01:49 +00:00
Laurent Cozic
a2156be4ec Mobile: Fixed search screen 2019-02-03 16:57:29 +00:00
Laurent Cozic
cf427eba0f Mobile: Fixed sidebar error 2019-02-03 16:15:07 +00:00
Laurent Cozic
0050c90678 Update translations 2019-02-03 15:57:10 +00:00
Laurent Cozic
5eeff02dbe Revert "Исправлен и обновлен перевод (#1175)"
This reverts commit eb283efc20.
2019-02-03 15:56:20 +00:00
0ndrey
eb283efc20 Исправлен и обновлен перевод (#1175) 2019-02-03 15:50:30 +00:00
Laurent Cozic
87121c9c21 All: Fixed importing ENEX file when note incorrectly contains a reminder tag 2019-02-02 13:04:42 +00:00
Laurent Cozic
a2dbbbf832 Merge branch 'master' of github.com:laurent22/joplin 2019-02-02 10:54:07 +00:00
Laurent Cozic
fd251cd9a9 Desktop: started writing welcome notes 2019-02-02 10:53:57 +00:00
Laurent Cozic
8ced2d288e Desktop: Note reloading issue 2019-02-02 10:47:26 +00:00
Laurent Cozic
242926d381 Fixed regressions in test units 2019-01-31 09:48:48 +00:00
Laurent Cozic
8c9a148e71 All: Better handle search queries that include dashes 2019-01-31 08:35:41 +00:00
Laurent Cozic
9e165fc7dc Desktop: Fixes #1161: Display highlighted text and other background colours and images when exporting to PDF or printing 2019-01-31 08:23:47 +00:00
Laurent Cozic
f46e4e0cec Desktop: Fixes #1142: Disallow dropping notes on sidebar Notebook header 2019-01-31 08:02:12 +00:00
Laurent Cozic
efcf5ecef4 Desktop: When deleting note, display title or number of notes 2019-01-31 07:55:51 +00:00
Laurent Cozic
b6ba843d09 Desktop: Added 'Insert date time' option to menu 2019-01-30 22:45:49 +00:00
Laurent Cozic
915112e274 Desktop: Restore scroll position when switching notes 2019-01-30 22:45:28 +00:00
Laurent Cozic
cc8f8fcd2c Desktop: Allow selecting editor path with dialog window 2019-01-30 19:19:06 +00:00
Laurent Cozic
bda3ea9a35 Desktop: Improve how new notes are created to make it more reliable 2019-01-30 18:06:47 +00:00
Laurent Cozic
a7aed1f93a Desktop: Fixed scrolling issue 2019-01-30 17:35:41 +00:00
Laurent Cozic
a33f602f3b Desktop: Record last selected note IDs and restore it when opening notebook 2019-01-29 18:32:52 +00:00
Laurent Cozic
4d08b49578 Desktop: Added Usage link next to search box 2019-01-29 18:11:31 +00:00
Laurent Cozic
21e049ab45 Desktop: When selecting multiple notes, display possible actions as buttons 2019-01-29 18:02:34 +00:00
Helmut K. C. Tessarek
1d4234caea Merge pull request #1155 from chenlhlinux/patch-1
Update zh_CN.po
2019-01-29 01:10:48 -05:00
Laurent Cozic
d1269de3a7 Desktop: Made confirmation buttons sticky on Config screen 2019-01-27 23:44:16 +00:00
Laurent Cozic
8c19fcf8fc Merge branch 'master' of github.com:laurent22/joplin 2019-01-27 23:16:37 +00:00
Laurent Cozic
beaba2be55 Desktop: Group config options into sections 2019-01-27 23:15:56 +00:00
chenlhlinux
32c9ad1d59 Update zh_CN.po 2019-01-27 19:35:10 +08:00
Helmut K. C. Tessarek
a194513252 de_DE.po: remove the last 2 occurences of fuzzy
Both 2 translations are accurate, thus I'm removing the fuzzy flag.
2019-01-26 22:22:09 -05:00
Helmut K. C. Tessarek
cd93a1d1e1 Merge pull request #1157 from xissy/patch-2
All: Update Korean translations
2019-01-26 21:53:36 -05:00
Taeho Kim
2867728996 Update ko.po
Added proper Korean translations into empty messages and fuzzy translations.
2019-01-26 17:34:57 -08:00
Laurent Cozic
394cc78851 Desktop: Use ENTER and ESCAPE to go to next search result or to close search bar 2019-01-26 18:40:43 +00:00
Laurent Cozic
76f0a26322 Desktop: Keep synchronise button and status at bottom of side bar 2019-01-26 18:36:20 +00:00
Laurent Cozic
92d7a577a0 Desktop: Use SPACE to collapse or expand a folder in sidebar 2019-01-26 18:09:09 +00:00
Laurent Cozic
9c1219b188 Desktop: Use arrow to move between items, and added shortcuts to focus different elements 2019-01-26 18:04:32 +00:00
Laurent Cozic
f62bbfe286 Desktop: Toggle todo checkbox using SPACE key 2019-01-26 15:33:45 +00:00
Laurent Cozic
fef176eb96 Merge branch 'master' of github.com:laurent22/joplin 2019-01-26 15:15:35 +00:00
Laurent Cozic
ed541dac3b Desktop: Delete note using keyboard 2019-01-26 15:15:16 +00:00
chenlhlinux
4a175b2158 Update zh_CN.po 2019-01-26 20:06:08 +08:00
Helmut K. C. Tessarek
4076899e11 Merge pull request #1149 from matsest/update-norwegian-190125
All: Update norwegian translations
2019-01-26 02:43:15 -05:00
Laurent Cozic
998bdf3b56 Desktop: Move up and down in note list using arrow keys 2019-01-25 19:59:36 +00:00
Laurent Cozic
76b211eb6d Electron release v1.0.125 2019-01-25 18:03:43 +00:00
Laurent Cozic
f781cb3922 Android release v1.0.236 2019-01-25 18:00:24 +00:00
Laurent Cozic
ced3e5d623 Android: Trying to remove Firebase libraries 2019-01-25 17:54:43 +00:00
Mats Estensen
2a4812cb87 update norwegian translations 2019-01-25 18:35:08 +01:00
Laurent Cozic
1f384c7ae4 Merge branch 'master' of github.com:laurent22/joplin 2019-01-25 17:14:26 +00:00
Laurent Cozic
01a3285636 Updated doc 2019-01-25 17:14:17 +00:00
Laurent Cozic
53166cb3f5 All: Fixes #1137: Fixed regression on SeaFile sync 2019-01-21 17:34:41 +00:00
Laurent Cozic
893462ae87 Check that resource could be loaded 2019-01-20 16:28:10 +00:00
Laurent Cozic
949dbf45f1 Desktop: Resolves #1099: Show Markdown images in external editor 2019-01-20 16:27:33 +00:00
Laurent Cozic
d7dc625042 Clipper: Fixes #1058: Import images at correct size 2019-01-20 15:26:43 +00:00
Laurent Cozic
cc91c77f9e Mobile: Prevent search box from being cleared when updated from somewhere else 2019-01-19 18:40:21 +00:00
216 changed files with 28164 additions and 14955 deletions

1
.gitignore vendored
View File

@@ -39,6 +39,7 @@ node_modules
Tools/github_oauth_token.txt
_releases
ReactNativeClient/lib/csstojs/
ReactNativeClient/lib/rnInjectedJs/
ElectronClient/app/gui/note-viewer/fonts/
ElectronClient/app/gui/note-viewer/lib.js
Tools/commit_hook.txt

View File

@@ -16,14 +16,16 @@ If possible, **please provide a screenshot**. A screenshot showing the problem i
Again, please check that it has not already been requested. If it has, simply **up-vote the issue** - the ones with the most up-votes are likely to be implemented. "+1" comments are not tracked.
# Adding new features
# Creating a pull request
If you want to add a new feature, consider asking about it before implementing it or checking existing discussions to make sure it is within the scope of the project. Of course you are free to create the pull request directly but it is not guaranteed it is going to be accepted.
- If you want to add a new feature, consider asking about it before implementing it or checking existing discussions to make sure it is within the scope of the project. That scope, due to limited resources, might be narrower than you think. As a rule of thumb **if your change is likely to involve more than 50 lines of code, you should discuss it in the forum**, just so that you don't waste your time implementing something that might not be accepted.
- Bug fixes have a very high chance of being accepted.
- A pull request that is relevant to the current roadmap has a very high chance of being accepted.
Building the apps is relatively easy - please [see the build instructions](https://github.com/laurent22/joplin/blob/master/BUILD.md) for more details.
Pull requests that automatically change many files tend to be rejected (for example changes that automatically update the code styling, or to add new lines to many files, or to automatically convert images to a different format) so if you have such a pull request in mind, please discuss it first in the forum.
# Coding style
There are only two rules, but not following them means the pull request will not be accepted (it can be accepted once the issues are fixed):

View File

@@ -22,6 +22,7 @@ const os = require('os');
const fs = require('fs-extra');
const { cliUtils } = require('./cli-utils.js');
const Cache = require('lib/Cache');
const WelcomeUtils = require('lib/WelcomeUtils');
class Application extends BaseApplication {
@@ -376,6 +377,8 @@ class Application extends BaseApplication {
return this.stdout(object);
});
await WelcomeUtils.install(this.dispatch.bind(this));
// If we have some arguments left at this point, it's a command
// so execute it.
if (argv.length) {
@@ -393,6 +396,12 @@ class Application extends BaseApplication {
}
process.exit(1);
}
await Setting.saveAll();
// Need to call exit() explicitely, otherwise Node wait for any timeout to complete
// https://stackoverflow.com/questions/18050095
process.exit(0);
} else { // Otherwise open the GUI
this.initRedux();

View File

@@ -113,6 +113,11 @@ class Command extends BaseCommand {
lines.push('\tcurl http://localhost:41184/tags?fields=id');
lines.push('');
lines.push('# Error handling');
lines.push('');
lines.push('In case of an error, an HTTP status code >= 400 will be returned along with a JSON object that provides more info about the error. The JSON object is in the format `{ "error": "description of error" }`.');
lines.push('');
lines.push('# About the property types');
lines.push('');
lines.push('* Text is UTF-8.');
@@ -125,6 +130,11 @@ class Command extends BaseCommand {
lines.push('Call **GET /ping** to check if the service is available. It should return "JoplinClipperServer" if it works.');
lines.push('');
lines.push('# Searching');
lines.push('');
lines.push('Call **GET /search?query=YOUR_QUERY** to search for notes. This end-point supports the `field` parameter which is recommended to use so that you only get the data that you need. The query syntax is as described in the main documentation: https://joplin.cozic.net/#searching');
lines.push('');
for (let i = 0; i < models.length; i++) {
const model = models[i];
const ModelClass = BaseItem.getClassByItemType(model.type);
@@ -154,11 +164,11 @@ class Command extends BaseCommand {
type: Database.enumId('fieldType', 'text'),
description: 'If an image is provided, you can also specify an optional rectangle that will be used to crop the image. In format `{ x: x, y: y, width: width, height: height }`',
});
tableFields.push({
name: 'tags',
type: Database.enumId('fieldType', 'text'),
description: 'Comma-separated list of tags. eg. `tag1,tag2`.',
});
// tableFields.push({
// name: 'tags',
// type: Database.enumId('fieldType', 'text'),
// description: 'Comma-separated list of tags. eg. `tag1,tag2`.',
// });
}
lines.push('# ' + toTitleCase(tableName));

View File

@@ -6,6 +6,10 @@ const DecryptionWorker = require('lib/services/DecryptionWorker');
const MasterKey = require('lib/models/MasterKey');
const BaseItem = require('lib/models/BaseItem');
const Setting = require('lib/models/Setting.js');
const { shim } = require('lib/shim');
const pathUtils = require('lib/path-utils.js');
const imageType = require('image-type');
const readChunk = require('read-chunk');
class Command extends BaseCommand {
@@ -14,7 +18,7 @@ class Command extends BaseCommand {
}
description() {
return _('Manages E2EE configuration. Commands are `enable`, `disable`, `decrypt`, `status` and `target-status`.');
return _('Manages E2EE configuration. Commands are `enable`, `disable`, `decrypt`, `status`, `decrypt-file` and `target-status`.');
}
options() {
@@ -22,6 +26,7 @@ class Command extends BaseCommand {
// This is here mostly for testing - shouldn't be used
['-p, --password <password>', 'Use this password as master password (For security reasons, it is not recommended to use this option).'],
['-v, --verbose', 'More verbose output for the `target-status` command'],
['-o, --output <directory>', 'Output directory'],
];
}
@@ -30,6 +35,18 @@ class Command extends BaseCommand {
const options = args.options;
const askForMasterKey = async (error) => {
const masterKeyId = error.masterKeyId;
const password = await this.prompt(_('Enter master password:'), { type: 'string', secure: true });
if (!password) {
this.stdout(_('Operation cancelled'));
return false;
}
Setting.setObjectKey('encryption.passwordCache', masterKeyId, password);
await EncryptionService.instance().loadMasterKeysFromSettings();
return true;
}
if (args.command === 'enable') {
const password = options.password ? options.password.toString() : await this.prompt(_('Enter master password:'), { type: 'string', secure: true });
if (!password) {
@@ -47,63 +64,28 @@ class Command extends BaseCommand {
}
if (args.command === 'decrypt') {
while (true) {
try {
if (args.path) {
const plainText = await EncryptionService.instance().decryptString(args.path);
this.stdout(plainText);
return;
} else {
if (process.stdin.isTTY) {
this.stdout(_('Starting decryption... Please wait as it may take several minutes depending on how much there is to decrypt.'));
await DecryptionWorker.instance().start();
this.stdout(_('Completed decryption.'));
return;
} else {
// var repl = require("repl");
// var r = repl.start("node> ");
if (args.path) {
const plainText = await EncryptionService.instance().decryptString(args.path);
this.stdout(plainText);
} else {
this.stdout(_('Starting decryption... Please wait as it may take several minutes depending on how much there is to decrypt.'));
const text = await new Promise((accept, reject) => {
var buffer = '';
process.stdin.setEncoding('utf8');
process.stdin.on('data', function(chunk) {
buffer += chunk;
// process.stdout.write(chunk);
});
process.stdin.on('end', function() {
accept(buffer.trim());
});
});
if (text.length > 0) {
var cipherText = text;
try {
var item = await BaseItem.unserialize(text);
cipherText = item.encryption_cipher_text;
} catch (error) {
// we already got the pure cipher text
}
const plainText = await EncryptionService.instance().decryptString(cipherText);
this.stdout(plainText);
}
return;
while (true) {
try {
await DecryptionWorker.instance().start();
break;
} catch (error) {
if (error.code === 'masterKeyNotLoaded') {
const ok = await askForMasterKey(error);
if (!ok) return;
continue;
}
}
} catch (error) {
if (error.code === 'masterKeyNotLoaded') {
const masterKeyId = error.masterKeyId;
const password = await this.prompt(_('Enter master password:'), { type: 'string', secure: true });
if (!password) {
this.stdout(_('Operation cancelled'));
return;
}
Setting.setObjectKey('encryption.passwordCache', masterKeyId, password);
await EncryptionService.instance().loadMasterKeysFromSettings();
continue;
}
throw error;
throw error;
}
}
this.stdout(_('Completed decryption.'));
}
return;
@@ -114,6 +96,36 @@ class Command extends BaseCommand {
return;
}
if (args.command === 'decrypt-file') {
while (true) {
try {
const outputDir = options.output ? options.output : require('os').tmpdir();
let outFile = outputDir + '/' + pathUtils.filename(args.path) + '.' + Date.now() + '.bin';
await EncryptionService.instance().decryptFile(args.path, outFile);
const buffer = await readChunk(outFile, 0, 64);
const detectedType = imageType(buffer);
if (detectedType) {
const newOutFile = outFile + '.' + detectedType.ext;
await shim.fsDriver().move(outFile, newOutFile);
outFile = newOutFile;
}
this.stdout(outFile);
break;
} catch (error) {
if (error.code === 'masterKeyNotLoaded') {
const ok = await askForMasterKey(error);
if (!ok) return;
continue;
}
throw error;
}
}
return;
}
if (args.command === 'target-status') {
const fs = require('fs-extra');
const pathUtils = require('lib/path-utils.js');
@@ -215,4 +227,4 @@ class Command extends BaseCommand {
}
module.exports = Command;
module.exports = Command;

View File

@@ -1,5 +1,8 @@
#!/usr/bin/env node
// Use njstrace to find out what Node.js might be spending time on
// var njstrace = require('njstrace').inject();
// Make it possible to require("/lib/...") without specifying full path
require('app-module-path').addPath(__dirname);

1793
CliClient/locales/ar.po Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -125,9 +125,10 @@ msgstr "Marca un llistat de tasques pendents com a fet."
msgid "Note is not a to-do: \"%s\""
msgstr "La nota no és un llistat de tasques pendents: «%s»"
#, fuzzy
msgid ""
"Manages E2EE configuration. Commands are `enable`, `disable`, `decrypt`, "
"`status` and `target-status`."
"`status`, `decrypt-file` and `target-status`."
msgstr ""
"Gestiona la configuració E2EE. Les ordres són «enable», «disable», "
"«decrypt», «status» i «target-status»"
@@ -589,6 +590,20 @@ msgstr ""
msgid "Exporting to \"%s\" as \"%s\" format. Please wait..."
msgstr "S'està exportant a «%s» com a format «%s». Espereu..."
msgid "Sidebar"
msgstr ""
msgid "Note list"
msgstr ""
#, fuzzy
msgid "Note title"
msgstr "Títol del bloc de notes:"
#, fuzzy
msgid "Note body"
msgstr "Blocs de notes"
#, javascript-format
msgid "Importing from \"%s\" as \"%s\" format. Please wait..."
msgstr "S'està important des de «%s» com a format «%s». Espereu..."
@@ -596,7 +611,8 @@ msgstr "S'està important des de «%s» com a format «%s». Espereu..."
msgid "PDF File"
msgstr "Fitxer PDF"
msgid "File"
#, fuzzy
msgid "&File"
msgstr "Fitxer"
msgid "New note"
@@ -614,6 +630,9 @@ msgstr "Importació"
msgid "Export"
msgstr "Exportació"
msgid "Synchronise"
msgstr "Sincronitza"
msgid "Print"
msgstr "Imprimeix"
@@ -624,7 +643,8 @@ msgstr "Amaga %s"
msgid "Quit"
msgstr "Surt"
msgid "Edit"
#, fuzzy
msgid "&Edit"
msgstr "Edita"
msgid "Copy"
@@ -646,6 +666,9 @@ msgstr ""
msgid "Italic"
msgstr ""
msgid "Link"
msgstr ""
msgid "Insert Date Time"
msgstr ""
@@ -659,7 +682,8 @@ msgstr "Cerca a totes les notes"
msgid "Search in current note"
msgstr "Cerca a totes les notes"
msgid "View"
#, fuzzy
msgid "&View"
msgstr "Visualització"
msgid "Toggle sidebar"
@@ -668,7 +692,12 @@ msgstr "Mostra o amaga la barra lateral"
msgid "Toggle editor layout"
msgstr "Canvia el disseny de l'editor"
msgid "Tools"
#, fuzzy
msgid "Focus"
msgstr "Vés al cos"
#, fuzzy
msgid "&Tools"
msgstr "Eines"
msgid "Synchronisation status"
@@ -683,7 +712,8 @@ msgstr "Opcions del xifratge"
msgid "General Options"
msgstr "Opcions generals"
msgid "Help"
#, fuzzy
msgid "&Help"
msgstr "Ajuda"
msgid "Website and documentation"
@@ -726,11 +756,11 @@ msgid "An update is available, do you want to download it now?"
msgstr "Hi ha disponible una actualització. Voleu baixar-la ara?"
#, javascript-format
msgid "Your version: v%s"
msgid "Your version: %s"
msgstr ""
#, javascript-format
msgid "New version: v%s"
msgid "New version: %s"
msgstr ""
msgid "Yes"
@@ -807,13 +837,16 @@ msgid ""
"access Joplin."
msgstr ""
msgid "Check synchronisation configuration"
msgstr "Comprova la configuració de la sincronització"
#, javascript-format
msgid "Notes and settings are stored in: %s"
msgstr "Les notes i la configuració es desen a: %s"
msgid "Browse..."
msgstr ""
msgid "Check synchronisation configuration"
msgstr "Comprova la configuració de la sincronització"
msgid "Apply"
msgstr ""
@@ -908,6 +941,10 @@ msgstr "Estat"
msgid "Encryption is:"
msgstr "El xifratge és:"
#, fuzzy
msgid "Usage"
msgstr "Ús: %s"
msgid "Back"
msgstr "Enrere"
@@ -958,36 +995,6 @@ msgstr "Alguns elements no s'han pogut desxifrar."
msgid "Set the password"
msgstr "Establiu la contrasenya"
msgid "Add or remove tags"
msgstr "Afegeix o suprimeix etiquetes"
msgid "Duplicate"
msgstr ""
#, fuzzy, javascript-format
msgid "%s - Copy"
msgstr "Copia"
msgid "Switch between note and to-do type"
msgstr "Alterna entre el tipus nota i tasques pendents"
#, fuzzy
msgid "Switch to note type"
msgstr "Alterna entre el tipus nota i tasques pendents"
#, fuzzy
msgid "Switch to to-do type"
msgstr "Alterna entre el tipus nota i tasques pendents"
msgid "Copy Markdown link"
msgstr "Copia l'enllaç Markdown"
msgid "Delete"
msgstr "Suprimeix"
msgid "Delete notes?"
msgstr "Voleu suprimir les notes?"
msgid "No notes in here. Create one by clicking on \"New note\"."
msgstr "No hi ha cap nota aquí. Creeu-ne una fent clic a «Nota nova»."
@@ -1127,18 +1134,28 @@ msgstr "Opcions de xifratge"
msgid "Clipper Options"
msgstr "Opcions del desa-retalls"
msgid "Remove this tag from all the notes?"
#, fuzzy, javascript-format
msgid ""
"Delete notebook \"%s\"?\n"
"\n"
"All notes and sub-notebooks within this notebook will also be deleted."
msgstr ""
"Voleu suprimir el bloc de notes? També se suprimiran tots els sub-blocs "
"d'aquest bloc de notes."
#, fuzzy, javascript-format
msgid "Remove tag \"%s\" from all notes?"
msgstr "Voleu suprimir aquesta etiqueta de totes les notes?"
msgid "Remove this search from the sidebar?"
msgstr "Voleu suprimir aquesta cerca de la barra laterla?"
msgid "Delete"
msgstr "Suprimeix"
msgid "Rename"
msgstr "Canvia el nom"
msgid "Synchronise"
msgstr "Sincronitza"
msgid "Notebooks"
msgstr "Blocs de notes"
@@ -1153,6 +1170,42 @@ msgstr "Recursos: %d."
msgid "Please select where the sync status should be exported to"
msgstr "Seleccioneu on s'hauria d'exportar l'estat de la sincronització"
msgid "Table of contents"
msgstr ""
msgid "Add or remove tags"
msgstr "Afegeix o suprimeix etiquetes"
#, fuzzy
msgid "Duplicate"
msgstr "Surt de l'aplicació"
#, fuzzy, javascript-format
msgid "%s - Copy"
msgstr "Copia"
msgid "Switch between note and to-do type"
msgstr "Alterna entre el tipus nota i tasques pendents"
#, fuzzy
msgid "Switch to note type"
msgstr "Alterna entre el tipus nota i tasques pendents"
#, fuzzy
msgid "Switch to to-do type"
msgstr "Alterna entre el tipus nota i tasques pendents"
msgid "Copy Markdown link"
msgstr "Copia l'enllaç Markdown"
#, fuzzy, javascript-format
msgid "Delete note \"%s\"?"
msgstr "Voleu suprimir les notes?"
#, fuzzy, javascript-format
msgid "Delete these %d notes?"
msgstr "Voleu suprimir aquestes notes?"
#, javascript-format
msgid "Usage: %s"
msgstr "Ús: %s"
@@ -1271,6 +1324,12 @@ msgstr "Xifrat"
msgid "Encrypted items cannot be modified"
msgstr "Els elements xifrats no es poden modificar"
msgid "title"
msgstr "títol"
msgid "updated date"
msgstr "data d'actualització"
msgid "Conflicts"
msgstr "Conflictes"
@@ -1281,12 +1340,6 @@ msgstr "No es pot moure el bloc de notes a aquesta ubicació"
msgid "Notebooks cannot be named \"%s\", which is a reserved title."
msgstr "Els blocs de notes no poden tenir el nom «%s», és un títol reservat."
msgid "title"
msgstr "títol"
msgid "updated date"
msgstr "data d'actualització"
msgid "created date"
msgstr "data de creació"
@@ -1331,6 +1384,10 @@ msgstr "Ordena les notes per"
msgid "Reverse sort order"
msgstr "Ordre invers"
#, fuzzy
msgid "Sort notebooks by"
msgstr "Ordena les notes per"
msgid "Save geo-location with notes"
msgstr "Desa la geolocalització a les notes"
@@ -1481,6 +1538,25 @@ msgstr ""
msgid "Invalid option value: \"%s\". Possible values are: %s."
msgstr "El valor de l'opció no és vàlid: «%s». Els valors possibles són: %s."
#, fuzzy
msgid "General"
msgstr "Opcions generals"
#, fuzzy
msgid "Synchronisation"
msgstr "Estat de la sincronització"
msgid "Appearance"
msgstr ""
#, fuzzy
msgid "Note"
msgstr "Blocs de notes"
#, fuzzy
msgid "Application"
msgstr "Surt de l'aplicació"
#, javascript-format
msgid "The tag \"%s\" already exists. Please choose a different name."
msgstr ""
@@ -1501,6 +1577,9 @@ msgstr "Fitxer d'exportació de l'Evernote"
msgid "Json Export Directory"
msgstr "Directori d'exportació del Joplin"
msgid "File"
msgstr "Fitxer"
msgid "Directory"
msgstr "Directori"
@@ -1687,10 +1766,6 @@ msgstr ""
msgid "Joplin website"
msgstr "Lloc web del Joplin"
#, fuzzy, javascript-format
msgid "Joplin v%s"
msgstr "Lloc web del Joplin"
#, javascript-format
msgid "Database v%s"
msgstr ""
@@ -1788,6 +1863,9 @@ msgstr "Mostra-ho al mapa"
msgid "Go to source URL"
msgstr ""
msgid "Edit"
msgstr "Edita"
msgid "Delete notebook"
msgstr "Suprimeix el bloc de notes"
@@ -1811,6 +1889,10 @@ msgstr ""
msgid "Welcome"
msgstr "Benvingut"
#, fuzzy
#~ msgid "Joplin v%s"
#~ msgstr "Lloc web del Joplin"
#~ msgid "State: %s."
#~ msgstr "Estat: %s"

View File

@@ -124,9 +124,10 @@ msgstr "Označí to-do jako hotové."
msgid "Note is not a to-do: \"%s\""
msgstr "Poznámka není to-do: \"%s\""
#, fuzzy
msgid ""
"Manages E2EE configuration. Commands are `enable`, `disable`, `decrypt`, "
"`status` and `target-status`."
"`status`, `decrypt-file` and `target-status`."
msgstr ""
"Nastavuje šifrování. Příkazy jsou `enable` (zapnout), `disable` (vypnout), "
"`decrypt` (dešifrovat), `status` (stav) a `target-status` (stav v cíli "
@@ -571,6 +572,20 @@ msgstr ""
msgid "Exporting to \"%s\" as \"%s\" format. Please wait..."
msgstr "Exportuji do \"%s\" jako formát \"%s\". Chvíli strpení..."
msgid "Sidebar"
msgstr ""
msgid "Note list"
msgstr ""
#, fuzzy
msgid "Note title"
msgstr "Název zápisníku:"
#, fuzzy
msgid "Note body"
msgstr "Zápisníky"
#, javascript-format
msgid "Importing from \"%s\" as \"%s\" format. Please wait..."
msgstr "Importuji z \"%s\" jako formát \"%s\". Chvíli strpení..."
@@ -578,7 +593,8 @@ msgstr "Importuji z \"%s\" jako formát \"%s\". Chvíli strpení..."
msgid "PDF File"
msgstr "PDF soubor"
msgid "File"
#, fuzzy
msgid "&File"
msgstr "Soubor"
msgid "New note"
@@ -596,6 +612,9 @@ msgstr "Import"
msgid "Export"
msgstr "Export"
msgid "Synchronise"
msgstr "Synchronizovat"
msgid "Print"
msgstr "Tisk"
@@ -606,7 +625,8 @@ msgstr "Schovat %s"
msgid "Quit"
msgstr "Ukončit"
msgid "Edit"
#, fuzzy
msgid "&Edit"
msgstr "Upravit"
msgid "Copy"
@@ -628,6 +648,9 @@ msgstr ""
msgid "Italic"
msgstr ""
msgid "Link"
msgstr ""
msgid "Insert Date Time"
msgstr ""
@@ -641,7 +664,8 @@ msgstr "Hledat ve všech poznámkách"
msgid "Search in current note"
msgstr "Hledat ve všech poznámkách"
msgid "View"
#, fuzzy
msgid "&View"
msgstr "Zobrazit"
msgid "Toggle sidebar"
@@ -650,7 +674,12 @@ msgstr ""
msgid "Toggle editor layout"
msgstr "Změňit layout editoru"
msgid "Tools"
#, fuzzy
msgid "Focus"
msgstr "Vybrat text poznámky"
#, fuzzy
msgid "&Tools"
msgstr "Nástroje"
msgid "Synchronisation status"
@@ -665,7 +694,8 @@ msgstr "Nastavení šifrování"
msgid "General Options"
msgstr "Obecná nastavení"
msgid "Help"
#, fuzzy
msgid "&Help"
msgstr "Nápověda"
msgid "Website and documentation"
@@ -708,11 +738,11 @@ msgid "An update is available, do you want to download it now?"
msgstr "Je k dispozici update, chcete jej stáhnout?"
#, javascript-format
msgid "Your version: v%s"
msgid "Your version: %s"
msgstr ""
#, javascript-format
msgid "New version: v%s"
msgid "New version: %s"
msgstr ""
msgid "Yes"
@@ -782,13 +812,16 @@ msgid ""
"access Joplin."
msgstr ""
msgid "Check synchronisation configuration"
msgstr "Zkontrolujte nastavení synchronizace"
#, javascript-format
msgid "Notes and settings are stored in: %s"
msgstr "Poznámky a nastavení uloženo v: %s"
msgid "Browse..."
msgstr ""
msgid "Check synchronisation configuration"
msgstr "Zkontrolujte nastavení synchronizace"
msgid "Apply"
msgstr ""
@@ -878,6 +911,10 @@ msgstr "Status"
msgid "Encryption is:"
msgstr "Šifrování je:"
#, fuzzy
msgid "Usage"
msgstr "Použití: %s"
msgid "Back"
msgstr "Zpět"
@@ -930,37 +967,6 @@ msgstr "Některé položky nelze rozšifrovat."
msgid "Set the password"
msgstr "Nastavit heslo"
msgid "Add or remove tags"
msgstr "Přidat či odebrat tagy"
msgid "Duplicate"
msgstr ""
#, fuzzy, javascript-format
msgid "%s - Copy"
msgstr "Kopírovat"
msgid "Switch between note and to-do type"
msgstr "Přepnout mezi poznámkou a to-do"
#, fuzzy
msgid "Switch to note type"
msgstr "Přepnout mezi poznámkou a to-do"
#, fuzzy
msgid "Switch to to-do type"
msgstr "Přepnout mezi poznámkou a to-do"
#, fuzzy
msgid "Copy Markdown link"
msgstr "Markdown"
msgid "Delete"
msgstr "Smazat"
msgid "Delete notes?"
msgstr "Smazat poznámky?"
msgid "No notes in here. Create one by clicking on \"New note\"."
msgstr "Žádné poznámky. Vytvořte jednu kliknutím na \"Nová poznámka\"."
@@ -1097,18 +1103,26 @@ msgstr "Nastavení šifrování"
msgid "Clipper Options"
msgstr "Obecná nastavení"
msgid "Remove this tag from all the notes?"
#, fuzzy, javascript-format
msgid ""
"Delete notebook \"%s\"?\n"
"\n"
"All notes and sub-notebooks within this notebook will also be deleted."
msgstr "Smazat zápisník? Budou smazány i všechny poznámky v něm obsažené."
#, fuzzy, javascript-format
msgid "Remove tag \"%s\" from all notes?"
msgstr "Odebrat tento tag ze všech poznámek?"
msgid "Remove this search from the sidebar?"
msgstr "Smazat tento hledaný výraz z panelu?"
msgid "Delete"
msgstr "Smazat"
msgid "Rename"
msgstr "Přejmenovat"
msgid "Synchronise"
msgstr "Synchronizovat"
msgid "Notebooks"
msgstr "Zápisníky"
@@ -1123,6 +1137,43 @@ msgstr "Zdroje: %d."
msgid "Please select where the sync status should be exported to"
msgstr "Prosím vyberte, kam má být stav synchronizace exportován"
msgid "Table of contents"
msgstr ""
msgid "Add or remove tags"
msgstr "Přidat či odebrat tagy"
#, fuzzy
msgid "Duplicate"
msgstr "Ukončí aplikaci."
#, fuzzy, javascript-format
msgid "%s - Copy"
msgstr "Kopírovat"
msgid "Switch between note and to-do type"
msgstr "Přepnout mezi poznámkou a to-do"
#, fuzzy
msgid "Switch to note type"
msgstr "Přepnout mezi poznámkou a to-do"
#, fuzzy
msgid "Switch to to-do type"
msgstr "Přepnout mezi poznámkou a to-do"
#, fuzzy
msgid "Copy Markdown link"
msgstr "Markdown"
#, fuzzy, javascript-format
msgid "Delete note \"%s\"?"
msgstr "Smazat poznámky?"
#, fuzzy, javascript-format
msgid "Delete these %d notes?"
msgstr "Smazat tyto poznámky?"
#, javascript-format
msgid "Usage: %s"
msgstr "Použití: %s"
@@ -1241,6 +1292,14 @@ msgstr "Zašifrováno"
msgid "Encrypted items cannot be modified"
msgstr "Nelze editovat zašifrovanou položku"
#, fuzzy
msgid "title"
msgstr "Bez názvu"
#, fuzzy
msgid "updated date"
msgstr "Upraveno: %d."
msgid "Conflicts"
msgstr "Konflikty"
@@ -1252,14 +1311,6 @@ msgstr "Poznámku nelze přesunout do zápisníku \"%s\""
msgid "Notebooks cannot be named \"%s\", which is a reserved title."
msgstr "Zápisník se nemůže jmenovat \"%s\", tento název je rezervován."
#, fuzzy
msgid "title"
msgstr "Bez názvu"
#, fuzzy
msgid "updated date"
msgstr "Upraveno: %d."
#, fuzzy
msgid "created date"
msgstr "Vytvořeno: %d."
@@ -1306,6 +1357,10 @@ msgstr "Řadit poznámky podle"
msgid "Reverse sort order"
msgstr "Řadit od konce"
#, fuzzy
msgid "Sort notebooks by"
msgstr "Řadit poznámky podle"
msgid "Save geo-location with notes"
msgstr "Ukládat k poznámkám informace o poloze (geolokaci)"
@@ -1456,6 +1511,25 @@ msgstr ""
msgid "Invalid option value: \"%s\". Possible values are: %s."
msgstr "Neplatná hodnota: \"%s\". Přípustné hodnoty jsou: %s."
#, fuzzy
msgid "General"
msgstr "Obecná nastavení"
#, fuzzy
msgid "Synchronisation"
msgstr "Stav synchronizace"
msgid "Appearance"
msgstr ""
#, fuzzy
msgid "Note"
msgstr "Zápisníky"
#, fuzzy
msgid "Application"
msgstr "Ukončí aplikaci."
#, javascript-format
msgid "The tag \"%s\" already exists. Please choose a different name."
msgstr ""
@@ -1476,6 +1550,9 @@ msgstr "Soubor Evernote Exportu"
msgid "Json Export Directory"
msgstr "Složka pro export"
msgid "File"
msgstr "Soubor"
msgid "Directory"
msgstr "Adresář"
@@ -1656,10 +1733,6 @@ msgstr ""
msgid "Joplin website"
msgstr "Web Joplinu"
#, fuzzy, javascript-format
msgid "Joplin v%s"
msgstr "Web Joplinu"
#, javascript-format
msgid "Database v%s"
msgstr ""
@@ -1757,6 +1830,9 @@ msgstr "Zobrazit na map+"
msgid "Go to source URL"
msgstr ""
msgid "Edit"
msgstr "Upravit"
msgid "Delete notebook"
msgstr "Smazat zápisník"
@@ -1779,6 +1855,10 @@ msgstr "Nemáte žádný zápisník. Vytvořte jeden kliknutím na tlačítko (+
msgid "Welcome"
msgstr "Vítejte"
#, fuzzy
#~ msgid "Joplin v%s"
#~ msgstr "Web Joplinu"
#~ msgid "State: %s."
#~ msgstr "Stav: %s."

View File

@@ -123,9 +123,10 @@ msgstr "Markerer en opgave som udført."
msgid "Note is not a to-do: \"%s\""
msgstr "Noten er ikke en opgave: \"%s\""
#, fuzzy
msgid ""
"Manages E2EE configuration. Commands are `enable`, `disable`, `decrypt`, "
"`status` and `target-status`."
"`status`, `decrypt-file` and `target-status`."
msgstr ""
"Udfører E2EE konfiguration. Kommandoer er `enable`(aktiver), "
"`disable`(sluk), `decrypt`(dekrypter), `status` og `target-status` (modtager-"
@@ -576,6 +577,20 @@ msgstr ""
msgid "Exporting to \"%s\" as \"%s\" format. Please wait..."
msgstr "Eksporterer til \"%s\" som \"%s\"-format. Vent venligst..."
msgid "Sidebar"
msgstr ""
msgid "Note list"
msgstr ""
#, fuzzy
msgid "Note title"
msgstr "Notesbogs titel:"
#, fuzzy
msgid "Note body"
msgstr "Notesbøger"
#, javascript-format
msgid "Importing from \"%s\" as \"%s\" format. Please wait..."
msgstr "Importerer fra \"%s\" som \"%s\"-format. Vent venligst..."
@@ -583,7 +598,8 @@ msgstr "Importerer fra \"%s\" som \"%s\"-format. Vent venligst..."
msgid "PDF File"
msgstr "PDF fil"
msgid "File"
#, fuzzy
msgid "&File"
msgstr "Fil"
msgid "New note"
@@ -601,6 +617,9 @@ msgstr "Importer"
msgid "Export"
msgstr "Eksporter"
msgid "Synchronise"
msgstr "Synkroniser"
msgid "Print"
msgstr "Udskriv"
@@ -611,7 +630,8 @@ msgstr "Skjul %s"
msgid "Quit"
msgstr "Afslut"
msgid "Edit"
#, fuzzy
msgid "&Edit"
msgstr "Ret"
msgid "Copy"
@@ -633,6 +653,9 @@ msgstr ""
msgid "Italic"
msgstr ""
msgid "Link"
msgstr ""
msgid "Insert Date Time"
msgstr ""
@@ -646,7 +669,8 @@ msgstr "Søg i alle noter"
msgid "Search in current note"
msgstr "Søg i alle noter"
msgid "View"
#, fuzzy
msgid "&View"
msgstr "Vis"
msgid "Toggle sidebar"
@@ -655,7 +679,12 @@ msgstr ""
msgid "Toggle editor layout"
msgstr "Skift editor layout"
msgid "Tools"
#, fuzzy
msgid "Focus"
msgstr "Fokuser på brødtekst"
#, fuzzy
msgid "&Tools"
msgstr "Værktøjer"
msgid "Synchronisation status"
@@ -670,7 +699,8 @@ msgstr "Krypterings muligheder"
msgid "General Options"
msgstr "Generelle indstillinger"
msgid "Help"
#, fuzzy
msgid "&Help"
msgstr "Hjælp"
msgid "Website and documentation"
@@ -713,11 +743,11 @@ msgid "An update is available, do you want to download it now?"
msgstr "Opdatering er til rådighed, vil du hente den nu?"
#, javascript-format
msgid "Your version: v%s"
msgid "Your version: %s"
msgstr ""
#, javascript-format
msgid "New version: v%s"
msgid "New version: %s"
msgstr ""
msgid "Yes"
@@ -787,13 +817,16 @@ msgid ""
"access Joplin."
msgstr ""
msgid "Check synchronisation configuration"
msgstr "Check synkroniserings Indstillinger"
#, javascript-format
msgid "Notes and settings are stored in: %s"
msgstr "Noter og indstillinger er gemt i: %s"
msgid "Browse..."
msgstr ""
msgid "Check synchronisation configuration"
msgstr "Check synkroniserings Indstillinger"
msgid "Apply"
msgstr ""
@@ -887,6 +920,10 @@ msgstr "Status"
msgid "Encryption is:"
msgstr "Kryptering er:"
#, fuzzy
msgid "Usage"
msgstr "Forbrug: %s"
msgid "Back"
msgstr "Tilbage"
@@ -939,37 +976,6 @@ msgstr "Nogle emner kan ikke krypteres."
msgid "Set the password"
msgstr "Indstil kodeord"
msgid "Add or remove tags"
msgstr "Tilføj eller slet mærker"
msgid "Duplicate"
msgstr ""
#, fuzzy, javascript-format
msgid "%s - Copy"
msgstr "Kopier"
msgid "Switch between note and to-do type"
msgstr "Skift mellem note- og opgave type"
#, fuzzy
msgid "Switch to note type"
msgstr "Skift mellem note- og opgave type"
#, fuzzy
msgid "Switch to to-do type"
msgstr "Skift mellem note- og opgave type"
#, fuzzy
msgid "Copy Markdown link"
msgstr "Markdown"
msgid "Delete"
msgstr "Slet"
msgid "Delete notes?"
msgstr "Slet noter?"
msgid "No notes in here. Create one by clicking on \"New note\"."
msgstr "Der er ingen noter her. Opret en ved at klikke på \"Ny note\"."
@@ -1106,18 +1112,26 @@ msgstr "Krypterings indstillinger"
msgid "Clipper Options"
msgstr "Generelle indstillinger"
msgid "Remove this tag from all the notes?"
#, fuzzy, javascript-format
msgid ""
"Delete notebook \"%s\"?\n"
"\n"
"All notes and sub-notebooks within this notebook will also be deleted."
msgstr "Slet notesbog? Alle noter i notesbogen bliver også slettet."
#, fuzzy, javascript-format
msgid "Remove tag \"%s\" from all notes?"
msgstr "Slet denne markering fra alle noter?"
msgid "Remove this search from the sidebar?"
msgstr "Slet denne søgning fra sidebjælke?"
msgid "Delete"
msgstr "Slet"
msgid "Rename"
msgstr "Omdøb"
msgid "Synchronise"
msgstr "Synkroniser"
msgid "Notebooks"
msgstr "Notesbøger"
@@ -1132,6 +1146,43 @@ msgstr "Ressourcer: %d."
msgid "Please select where the sync status should be exported to"
msgstr "Vælg hvor sync status skal eksporteres til"
msgid "Table of contents"
msgstr ""
msgid "Add or remove tags"
msgstr "Tilføj eller slet mærker"
#, fuzzy
msgid "Duplicate"
msgstr "Forlad/luk program."
#, fuzzy, javascript-format
msgid "%s - Copy"
msgstr "Kopier"
msgid "Switch between note and to-do type"
msgstr "Skift mellem note- og opgave type"
#, fuzzy
msgid "Switch to note type"
msgstr "Skift mellem note- og opgave type"
#, fuzzy
msgid "Switch to to-do type"
msgstr "Skift mellem note- og opgave type"
#, fuzzy
msgid "Copy Markdown link"
msgstr "Markdown"
#, fuzzy, javascript-format
msgid "Delete note \"%s\"?"
msgstr "Slet noter?"
#, fuzzy, javascript-format
msgid "Delete these %d notes?"
msgstr "Slet disse noter?"
#, javascript-format
msgid "Usage: %s"
msgstr "Forbrug: %s"
@@ -1250,6 +1301,14 @@ msgstr "Krypteret"
msgid "Encrypted items cannot be modified"
msgstr "Krypteret emner kan ikke rettes"
#, fuzzy
msgid "title"
msgstr "Samlet"
#, fuzzy
msgid "updated date"
msgstr "Opdateret %d."
msgid "Conflicts"
msgstr "Konflikter"
@@ -1261,14 +1320,6 @@ msgstr "Kan ikke flytte note til \"%s\" notesbog"
msgid "Notebooks cannot be named \"%s\", which is a reserved title."
msgstr "Notesbøger kan ikke få navnet \"%s\", da det er en beskyttet titel."
#, fuzzy
msgid "title"
msgstr "Samlet"
#, fuzzy
msgid "updated date"
msgstr "Opdateret %d."
#, fuzzy
msgid "created date"
msgstr "Oprettet: %d."
@@ -1315,6 +1366,10 @@ msgstr "Sorter noter efter"
msgid "Reverse sort order"
msgstr "Modsat sorterings orden"
#, fuzzy
msgid "Sort notebooks by"
msgstr "Sorter noter efter"
msgid "Save geo-location with notes"
msgstr "Gem geo-lokation i noter"
@@ -1465,6 +1520,25 @@ msgstr ""
msgid "Invalid option value: \"%s\". Possible values are: %s."
msgstr "Ulovlig værdi: \"%s\". Mulige valg er: %s."
#, fuzzy
msgid "General"
msgstr "Generelle indstillinger"
#, fuzzy
msgid "Synchronisation"
msgstr "Synkroniserings status"
msgid "Appearance"
msgstr ""
#, fuzzy
msgid "Note"
msgstr "Notesbøger"
#, fuzzy
msgid "Application"
msgstr "Forlad/luk program."
#, javascript-format
msgid "The tag \"%s\" already exists. Please choose a different name."
msgstr ""
@@ -1485,6 +1559,9 @@ msgstr "Evernote eksport fil"
msgid "Json Export Directory"
msgstr "Joplin eksport mappe"
msgid "File"
msgstr "Fil"
msgid "Directory"
msgstr "Indeks"
@@ -1665,10 +1742,6 @@ msgstr ""
msgid "Joplin website"
msgstr "Joplin hjemmeside"
#, fuzzy, javascript-format
msgid "Joplin v%s"
msgstr "Joplin hjemmeside"
#, javascript-format
msgid "Database v%s"
msgstr ""
@@ -1766,6 +1839,9 @@ msgstr "Vis på kort"
msgid "Go to source URL"
msgstr ""
msgid "Edit"
msgstr "Ret"
msgid "Delete notebook"
msgstr "Slet notesbog"
@@ -1788,6 +1864,10 @@ msgstr "Du har ingen notesbøger. Opret en ved at klikke på (+) knappen."
msgid "Welcome"
msgstr "Velkommen"
#, fuzzy
#~ msgid "Joplin v%s"
#~ msgstr "Joplin hjemmeside"
#~ msgid "State: %s."
#~ msgstr "Tilstand: %s."

View File

@@ -13,12 +13,13 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: Poedit 2.1.1\n"
"X-Generator: Poedit 2.2.1\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
msgid "To delete a tag, untag the associated notes."
msgstr ""
"Um ein Tag zu löschen, entferne es bei allen damit verbundenen Notizen."
"Um ein Schlagwort zu löschen, entferne es bei allen damit verbundenen "
"Notizen."
msgid "Please select the note or notebook to be deleted first."
msgstr ""
@@ -130,7 +131,7 @@ msgstr "Notiz ist kein To-Do: \"%s\""
msgid ""
"Manages E2EE configuration. Commands are `enable`, `disable`, `decrypt`, "
"`status` and `target-status`."
"`status`, `decrypt-file` and `target-status`."
msgstr ""
"Verwaltet die E2EE-Konfiguration. Die Befehle lauten `enable`, `disable`, "
"`decrypt`, `status` und `target-status`."
@@ -598,6 +599,18 @@ msgstr ""
msgid "Exporting to \"%s\" as \"%s\" format. Please wait..."
msgstr "Exportiere „%s“ ins „%s“ Format. Bitte warten..."
msgid "Sidebar"
msgstr "Seitenleiste"
msgid "Note list"
msgstr "Notizen-Liste"
msgid "Note title"
msgstr "Notiz Titel"
msgid "Note body"
msgstr "Notiz Text"
#, javascript-format
msgid "Importing from \"%s\" as \"%s\" format. Please wait..."
msgstr "Importiere „%s“ ins „%s“ Format. Bitte warten..."
@@ -605,8 +618,8 @@ msgstr "Importiere „%s“ ins „%s“ Format. Bitte warten..."
msgid "PDF File"
msgstr "PDF-Datei"
msgid "File"
msgstr "Datei"
msgid "&File"
msgstr "&Datei"
msgid "New note"
msgstr "Neue Notiz"
@@ -623,6 +636,9 @@ msgstr "Importieren"
msgid "Export"
msgstr "Exportieren"
msgid "Synchronise"
msgstr "Synchronisieren"
msgid "Print"
msgstr "Drucken"
@@ -633,8 +649,8 @@ msgstr "%s ausblenden"
msgid "Quit"
msgstr "Verlassen"
msgid "Edit"
msgstr "Bearbeiten"
msgid "&Edit"
msgstr "&Bearbeiten"
msgid "Copy"
msgstr "Kopieren"
@@ -654,6 +670,9 @@ msgstr "Fett"
msgid "Italic"
msgstr "Kursiv"
msgid "Link"
msgstr "Link"
msgid "Insert Date Time"
msgstr "Datum / Uhrzeit einfügen"
@@ -666,8 +685,8 @@ msgstr "Alle Notizen durchsuchen"
msgid "Search in current note"
msgstr "Aktuelle Notiz durchsuchen"
msgid "View"
msgstr "Ansicht"
msgid "&View"
msgstr "&Ansicht"
msgid "Toggle sidebar"
msgstr "Seitenleiste umschalten"
@@ -675,8 +694,11 @@ msgstr "Seitenleiste umschalten"
msgid "Toggle editor layout"
msgstr "Editor-Layout umschalten"
msgid "Tools"
msgstr "Werkzeuge"
msgid "Focus"
msgstr "Fokus"
msgid "&Tools"
msgstr "&Werkzeuge"
msgid "Synchronisation status"
msgstr "Status der Synchronisation"
@@ -690,8 +712,8 @@ msgstr "Verschlüsselungsoptionen"
msgid "General Options"
msgstr "Allgemeine Einstellungen"
msgid "Help"
msgstr "Hilfe"
msgid "&Help"
msgstr "&Hilfe"
msgid "Website and documentation"
msgstr "Webseite und Dokumentation"
@@ -727,19 +749,19 @@ msgstr "Die aktuelle Version ist auf dem neuesten Stand."
#, javascript-format
msgid "%s (pre-release)"
msgstr ""
msgstr "%s (Vorabversion)"
msgid "An update is available, do you want to download it now?"
msgstr ""
"Es ist eine Aktualisierung verfügbar. Soll sie jetzt heruntergeladen werden?"
#, javascript-format
msgid "Your version: v%s"
msgstr ""
msgid "Your version: %s"
msgstr "Deine Version: %s"
#, javascript-format
msgid "New version: v%s"
msgstr ""
msgid "New version: %s"
msgstr "Neue Version: %s"
msgid "Yes"
msgstr "Ja"
@@ -748,7 +770,7 @@ msgid "No"
msgstr "Nein"
msgid "Token has been copied to the clipboard!"
msgstr "Token wurde in die Zwischenablage kopiert."
msgstr "Token wurde in die Zwischenablage kopiert!"
msgid "The web clipper service is enabled and set to auto-start."
msgstr ""
@@ -817,13 +839,16 @@ msgstr ""
"Dieses Autorisierung-Token wird nur benötigt, um Drittanbieter-Anwendungen "
"Zugriff auf Joplin zu gewähren."
msgid "Check synchronisation configuration"
msgstr "Überprüfen der Synchronisationseinstellungen"
#, javascript-format
msgid "Notes and settings are stored in: %s"
msgstr "Notizen und Einstellungen werden gespeichert in: %s"
msgid "Browse..."
msgstr "Durchsuche..."
msgid "Check synchronisation configuration"
msgstr "Überprüfen der Synchronisationseinstellungen"
msgid "Apply"
msgstr "Anwenden"
@@ -917,6 +942,10 @@ msgstr "Status"
msgid "Encryption is:"
msgstr "Die Verschlüsselung ist:"
# 'Nutzung', 'Gebrauch', or 'Verwendung' - depends on the context
msgid "Usage"
msgstr "Nutzung"
msgid "Back"
msgstr "Zurück"
@@ -969,34 +998,6 @@ msgstr "Einige Objekte können nicht entschlüsselt werden."
msgid "Set the password"
msgstr "Setze ein Passwort"
msgid "Add or remove tags"
msgstr "Schlagwörter hinzufügen oder entfernen"
msgid "Duplicate"
msgstr "Duplizieren"
#, javascript-format
msgid "%s - Copy"
msgstr "%s - Kopieren"
msgid "Switch between note and to-do type"
msgstr "Zwischen Notiz und To-Do Typ wechseln"
msgid "Switch to note type"
msgstr "Zu Notiz-Typ wechseln"
msgid "Switch to to-do type"
msgstr "Zu To-Do-Typ wechseln"
msgid "Copy Markdown link"
msgstr "Markdown-Link kopieren"
msgid "Delete"
msgstr "Löschen"
msgid "Delete notes?"
msgstr "Notizen löschen?"
msgid "No notes in here. Create one by clicking on \"New note\"."
msgstr ""
"Keine Notizen vorhanden. Erstelle eine, indem du auf \"Neue Notiz\" drückst."
@@ -1050,7 +1051,7 @@ msgstr ""
"und die Notiz zu bearbeiten."
msgid "Only one note can be printed or exported to PDF at a time."
msgstr ""
msgstr "Nur eine Notiz kann gedruckt oder als PDF exportiert werden."
msgid "strong text"
msgstr "Fetter Text"
@@ -1138,18 +1139,29 @@ msgstr "Verschlüsselungsoptionen"
msgid "Clipper Options"
msgstr "Clipper-Einstellungen"
msgid "Remove this tag from all the notes?"
msgstr "Dieses Schlagwort von allen Notizen entfernen?"
#, javascript-format
msgid ""
"Delete notebook \"%s\"?\n"
"\n"
"All notes and sub-notebooks within this notebook will also be deleted."
msgstr ""
"Notizbuch \"%s\" wirklich löschen?\n"
"\n"
"Alle Notizen und Unternotizen darin werden ebenfalls gelöscht."
#, javascript-format
msgid "Remove tag \"%s\" from all notes?"
msgstr "Schlagwort \"%s\" von allen Notizen entfernen?"
msgid "Remove this search from the sidebar?"
msgstr "Diese Suche von der Seitenleiste entfernen?"
msgid "Delete"
msgstr "Löschen"
msgid "Rename"
msgstr "Umbenennen"
msgid "Synchronise"
msgstr "Synchronisieren"
msgid "Notebooks"
msgstr "Notizbücher"
@@ -1165,6 +1177,39 @@ msgid "Please select where the sync status should be exported to"
msgstr ""
"Bitte wähle aus, wohin der Synchronisations-Status exportiert werden soll"
msgid "Table of contents"
msgstr "Inhaltsverzeichnis"
msgid "Add or remove tags"
msgstr "Schlagwörter hinzufügen oder entfernen"
msgid "Duplicate"
msgstr "Duplizieren"
#, javascript-format
msgid "%s - Copy"
msgstr "%s - Kopieren"
msgid "Switch between note and to-do type"
msgstr "Zwischen Notiz und To-Do Typ wechseln"
msgid "Switch to note type"
msgstr "Zu Notiz-Typ wechseln"
msgid "Switch to to-do type"
msgstr "Zu To-Do-Typ wechseln"
msgid "Copy Markdown link"
msgstr "Markdown-Link kopieren"
#, javascript-format
msgid "Delete note \"%s\"?"
msgstr "Notiz \"%s\" löschen?"
#, javascript-format
msgid "Delete these %d notes?"
msgstr "Sollen diese %d Notizen gelöscht werden?"
#, javascript-format
msgid "Usage: %s"
msgstr "Nutzung: %s"
@@ -1283,6 +1328,12 @@ msgstr "Verschlüsselt"
msgid "Encrypted items cannot be modified"
msgstr "Verschlüsselte Objekte können nicht verändert werden"
msgid "title"
msgstr "Titel"
msgid "updated date"
msgstr "Aktualisierungsdatum"
msgid "Conflicts"
msgstr "Konflikte"
@@ -1294,12 +1345,6 @@ msgid "Notebooks cannot be named \"%s\", which is a reserved title."
msgstr ""
"Notizbuch kann nicht \"%s\" genannt werden. Dieser Name ist reserviert.."
msgid "title"
msgstr "Titel"
msgid "updated date"
msgstr "Aktualisierungsdatum"
msgid "created date"
msgstr "Erstelldatum"
@@ -1344,6 +1389,9 @@ msgstr "Sortiere Notizen nach"
msgid "Reverse sort order"
msgstr "Sortierreihenfolge umdrehen"
msgid "Sort notebooks by"
msgstr "Sortiere Notizbücher nach"
msgid "Save geo-location with notes"
msgstr "Momentanen Standort zusammen mit Notizen speichern"
@@ -1398,11 +1446,11 @@ msgid "Automatically update the application"
msgstr "Die Applikation automatisch aktualisieren"
msgid "Get pre-releases when checking for updates"
msgstr ""
msgstr "Lade auch Vorabversionen herunter"
#, javascript-format
msgid "See the pre-release page for more details: %s"
msgstr ""
msgstr "Weitere Informationen findest Du auf der Vorabversionsseite: %s"
msgid "Synchronisation interval"
msgstr "Synchronisationsinterval"
@@ -1503,6 +1551,22 @@ msgstr "Ignoriere TLS-Zertifikatfehler"
msgid "Invalid option value: \"%s\". Possible values are: %s."
msgstr "Ungültiger Optionswert: \"%s\". Mögliche Werte sind: %s."
msgid "General"
msgstr "Allgemeines"
msgid "Synchronisation"
msgstr "Synchronisation"
msgid "Appearance"
msgstr "Erscheinungsbild"
msgid "Note"
msgstr "Notiz"
# 'Applikation' or 'Anwendung' - both translations are correct.
msgid "Application"
msgstr "Applikation"
#, javascript-format
msgid "The tag \"%s\" already exists. Please choose a different name."
msgstr ""
@@ -1523,6 +1587,9 @@ msgstr "Evernote Export Datei"
msgid "Json Export Directory"
msgstr "Json Export Verzeichnis"
msgid "File"
msgstr "Datei"
msgid "Directory"
msgstr "Verzeichnis"
@@ -1664,7 +1731,7 @@ msgstr ""
"korrekt sind und das das Synchronisierungsziel erreichbar ist. Fehlermeldung:"
msgid "The application has been authorised!"
msgstr "Das Programm wurde erfolgreich autorisiert."
msgstr "Das Programm wurde erfolgreich autorisiert!"
#, javascript-format
msgid ""
@@ -1715,10 +1782,6 @@ msgstr ""
msgid "Joplin website"
msgstr "Website von Joplin"
#, javascript-format
msgid "Joplin v%s"
msgstr "Joplin v%s"
#, javascript-format
msgid "Database v%s"
msgstr "Datenbank v%s"
@@ -1730,7 +1793,6 @@ msgstr "FTS aktiviert: %d"
msgid "Login with Dropbox"
msgstr "Mit Dropbox anmelden"
#, fuzzy
msgid "Enter code here"
msgstr "Hier Code eingeben"
@@ -1816,6 +1878,9 @@ msgstr "Auf der Karte anzeigen"
msgid "Go to source URL"
msgstr "Zur Quell-URL gehen"
msgid "Edit"
msgstr "Bearbeiten"
msgid "Delete notebook"
msgstr "Notizbuch löschen"
@@ -1841,6 +1906,15 @@ msgstr ""
msgid "Welcome"
msgstr "Willkommen"
#~ msgid "Joplin v%s"
#~ msgstr "Joplin v%s"
#~ msgid "Remove?"
#~ msgstr "Löschen?"
#~ msgid "Delete notes?"
#~ msgstr "Notizen löschen?"
#~ msgid "State: %s."
#~ msgstr "Status: %s."
@@ -1902,7 +1976,6 @@ msgstr "Willkommen"
#~ msgid "Set a to-do as completed / not completed"
#~ msgstr "Ein To-Do als abgeschlossen / nicht abgeschlossen markieren"
#, fuzzy
#~ msgid "[t]oggle [c]onsole between maximized/minimized/hidden/visible."
#~ msgstr ""
#~ "Schal[t]e das Terminal zwischen maximiert/minimiert/versteckt/sichtbar um."
@@ -1942,9 +2015,6 @@ msgstr "Willkommen"
#~ msgid "Delete notebook?"
#~ msgstr "Notizbuch löschen?"
#~ msgid "Delete notebook \"%s\"?"
#~ msgstr "Notizbuch \"%s\" löschen?"
#~ msgid "File system synchronisation target directory"
#~ msgstr "Dateisystem-Synchronisation Zielpfad"

View File

@@ -119,7 +119,7 @@ msgstr ""
msgid ""
"Manages E2EE configuration. Commands are `enable`, `disable`, `decrypt`, "
"`status` and `target-status`."
"`status`, `decrypt-file` and `target-status`."
msgstr ""
msgid "Enter master password:"
@@ -508,6 +508,18 @@ msgstr ""
msgid "Exporting to \"%s\" as \"%s\" format. Please wait..."
msgstr ""
msgid "Sidebar"
msgstr ""
msgid "Note list"
msgstr ""
msgid "Note title"
msgstr ""
msgid "Note body"
msgstr ""
#, javascript-format
msgid "Importing from \"%s\" as \"%s\" format. Please wait..."
msgstr ""
@@ -515,7 +527,7 @@ msgstr ""
msgid "PDF File"
msgstr ""
msgid "File"
msgid "&File"
msgstr ""
msgid "New note"
@@ -533,6 +545,9 @@ msgstr ""
msgid "Export"
msgstr ""
msgid "Synchronise"
msgstr ""
msgid "Print"
msgstr ""
@@ -543,7 +558,7 @@ msgstr ""
msgid "Quit"
msgstr ""
msgid "Edit"
msgid "&Edit"
msgstr ""
msgid "Copy"
@@ -564,6 +579,9 @@ msgstr ""
msgid "Italic"
msgstr ""
msgid "Link"
msgstr ""
msgid "Insert Date Time"
msgstr ""
@@ -576,7 +594,7 @@ msgstr ""
msgid "Search in current note"
msgstr ""
msgid "View"
msgid "&View"
msgstr ""
msgid "Toggle sidebar"
@@ -585,7 +603,10 @@ msgstr ""
msgid "Toggle editor layout"
msgstr ""
msgid "Tools"
msgid "Focus"
msgstr ""
msgid "&Tools"
msgstr ""
msgid "Synchronisation status"
@@ -600,7 +621,7 @@ msgstr ""
msgid "General Options"
msgstr ""
msgid "Help"
msgid "&Help"
msgstr ""
msgid "Website and documentation"
@@ -643,11 +664,11 @@ msgid "An update is available, do you want to download it now?"
msgstr ""
#, javascript-format
msgid "Your version: v%s"
msgid "Your version: %s"
msgstr ""
#, javascript-format
msgid "New version: v%s"
msgid "New version: %s"
msgstr ""
msgid "Yes"
@@ -716,13 +737,16 @@ msgid ""
"access Joplin."
msgstr ""
msgid "Check synchronisation configuration"
msgstr ""
#, javascript-format
msgid "Notes and settings are stored in: %s"
msgstr ""
msgid "Browse..."
msgstr ""
msgid "Check synchronisation configuration"
msgstr ""
msgid "Apply"
msgstr ""
@@ -801,6 +825,9 @@ msgstr ""
msgid "Encryption is:"
msgstr ""
msgid "Usage"
msgstr ""
msgid "Back"
msgstr ""
@@ -851,34 +878,6 @@ msgstr ""
msgid "Set the password"
msgstr ""
msgid "Add or remove tags"
msgstr ""
msgid "Duplicate"
msgstr ""
#, javascript-format
msgid "%s - Copy"
msgstr ""
msgid "Switch between note and to-do type"
msgstr ""
msgid "Switch to note type"
msgstr ""
msgid "Switch to to-do type"
msgstr ""
msgid "Copy Markdown link"
msgstr ""
msgid "Delete"
msgstr ""
msgid "Delete notes?"
msgstr ""
msgid "No notes in here. Create one by clicking on \"New note\"."
msgstr ""
@@ -1013,16 +1012,24 @@ msgstr ""
msgid "Clipper Options"
msgstr ""
msgid "Remove this tag from all the notes?"
#, javascript-format
msgid ""
"Delete notebook \"%s\"?\n"
"\n"
"All notes and sub-notebooks within this notebook will also be deleted."
msgstr ""
#, javascript-format
msgid "Remove tag \"%s\" from all notes?"
msgstr ""
msgid "Remove this search from the sidebar?"
msgstr ""
msgid "Rename"
msgid "Delete"
msgstr ""
msgid "Synchronise"
msgid "Rename"
msgstr ""
msgid "Notebooks"
@@ -1039,6 +1046,39 @@ msgstr ""
msgid "Please select where the sync status should be exported to"
msgstr ""
msgid "Table of contents"
msgstr ""
msgid "Add or remove tags"
msgstr ""
msgid "Duplicate"
msgstr ""
#, javascript-format
msgid "%s - Copy"
msgstr ""
msgid "Switch between note and to-do type"
msgstr ""
msgid "Switch to note type"
msgstr ""
msgid "Switch to to-do type"
msgstr ""
msgid "Copy Markdown link"
msgstr ""
#, javascript-format
msgid "Delete note \"%s\"?"
msgstr ""
#, javascript-format
msgid "Delete these %d notes?"
msgstr ""
#, javascript-format
msgid "Usage: %s"
msgstr ""
@@ -1149,6 +1189,12 @@ msgstr ""
msgid "Encrypted items cannot be modified"
msgstr ""
msgid "title"
msgstr ""
msgid "updated date"
msgstr ""
msgid "Conflicts"
msgstr ""
@@ -1159,12 +1205,6 @@ msgstr ""
msgid "Notebooks cannot be named \"%s\", which is a reserved title."
msgstr ""
msgid "title"
msgstr ""
msgid "updated date"
msgstr ""
msgid "created date"
msgstr ""
@@ -1209,6 +1249,9 @@ msgstr ""
msgid "Reverse sort order"
msgstr ""
msgid "Sort notebooks by"
msgstr ""
msgid "Save geo-location with notes"
msgstr ""
@@ -1347,6 +1390,21 @@ msgstr ""
msgid "Invalid option value: \"%s\". Possible values are: %s."
msgstr ""
msgid "General"
msgstr ""
msgid "Synchronisation"
msgstr ""
msgid "Appearance"
msgstr ""
msgid "Note"
msgstr ""
msgid "Application"
msgstr ""
#, javascript-format
msgid "The tag \"%s\" already exists. Please choose a different name."
msgstr ""
@@ -1366,6 +1424,9 @@ msgstr ""
msgid "Json Export Directory"
msgstr ""
msgid "File"
msgstr ""
msgid "Directory"
msgstr ""
@@ -1536,10 +1597,6 @@ msgstr ""
msgid "Joplin website"
msgstr ""
#, javascript-format
msgid "Joplin v%s"
msgstr ""
#, javascript-format
msgid "Database v%s"
msgstr ""
@@ -1635,6 +1692,9 @@ msgstr ""
msgid "Go to source URL"
msgstr ""
msgid "Edit"
msgstr ""
msgid "Delete notebook"
msgstr ""

View File

@@ -1,19 +1,21 @@
# Joplin translation to Spanish (Spain)
# Copyright (C) 2017 Lucas Vieites
# Copyright (C) 2019 Andros Fenollosa
# This file is distributed under the same license as the Joplin-CLI package.
# Lucas Vieites <lucas.vieites@gmail.com>, 2017.
# Andros Fenollosa <andros@fenollosa.email>, 2019.
#
msgid ""
msgstr ""
"Project-Id-Version: Joplin-CLI 1.0.0\n"
"Report-Msgid-Bugs-To: \n"
"Last-Translator: Fernando Martín <f@mrtn.es>\n"
"Last-Translator: Andros Fenollosa <andros@fenollosa.email>\n"
"Language-Team: Spanish <lucas.vieites@gmail.com>\n"
"Language: es_ES\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: Poedit 1.8.11\n"
"X-Generator: Poedit 2.2.1\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Poedit-SourceCharset: UTF-8\n"
@@ -35,7 +37,7 @@ msgid "No notebook selected."
msgstr "No se ha seleccionado ninguna libreta."
msgid "No notebook has been specified."
msgstr "Ninguna libreta fue especificada"
msgstr "Ninguna libreta fue especificada."
msgid "Y"
msgstr "Y"
@@ -125,9 +127,10 @@ msgstr "Marca una tarea como hecha."
msgid "Note is not a to-do: \"%s\""
msgstr "La nota no es una tarea: \"%s\""
#, fuzzy
msgid ""
"Manages E2EE configuration. Commands are `enable`, `disable`, `decrypt`, "
"`status` and `target-status`."
"`status`, `decrypt-file` and `target-status`."
msgstr ""
"Maneja la configuración E2EE. Comandos disponibles `enable`, `disable`, "
"`decrypt`, `status` y `target-status`."
@@ -458,12 +461,11 @@ msgid "Starting synchronisation..."
msgstr "Iniciando sincronización..."
msgid "Downloading resources..."
msgstr ""
msgstr "Descargando recursos..."
msgid "Cancelling... Please wait."
msgstr "Cancelando... Por favor espere."
#, fuzzy
msgid ""
"<tag-command> can be \"add\", \"remove\" or \"list\" to assign or remove "
"[tag] from [note], or to list the notes associated with [tag]. The command "
@@ -585,6 +587,18 @@ msgstr ""
msgid "Exporting to \"%s\" as \"%s\" format. Please wait..."
msgstr "Exportando el formato de \"%s\" a \"%s\". Por favor espere..."
msgid "Sidebar"
msgstr "Barra lateral"
msgid "Note list"
msgstr "Lista de notas"
msgid "Note title"
msgstr "Titulo de nota"
msgid "Note body"
msgstr "Cuerpo de nota"
#, javascript-format
msgid "Importing from \"%s\" as \"%s\" format. Please wait..."
msgstr "Importando el formato de \"%s\" a \"%s\". Por favor espere..."
@@ -592,8 +606,8 @@ msgstr "Importando el formato de \"%s\" a \"%s\". Por favor espere..."
msgid "PDF File"
msgstr "Archivo PDF"
msgid "File"
msgstr "Archivo"
msgid "&File"
msgstr "&Archivo"
msgid "New note"
msgstr "Nueva nota"
@@ -610,6 +624,9 @@ msgstr "Importar"
msgid "Export"
msgstr "Exportar"
msgid "Synchronise"
msgstr "Sincronizar"
msgid "Print"
msgstr "Imprimir"
@@ -620,8 +637,8 @@ msgstr "Oculta %s"
msgid "Quit"
msgstr "Salir"
msgid "Edit"
msgstr "Editar"
msgid "&Edit"
msgstr "&Editar"
msgid "Copy"
msgstr "Copiar"
@@ -632,9 +649,8 @@ msgstr "Cortar"
msgid "Paste"
msgstr "Pegar"
#, fuzzy
msgid "Select all"
msgstr "Seleccione fecha"
msgstr "Seleccionar todo"
msgid "Bold"
msgstr "Negrita"
@@ -642,6 +658,9 @@ msgstr "Negrita"
msgid "Italic"
msgstr "Cursiva"
msgid "Link"
msgstr "Enlace"
msgid "Insert Date Time"
msgstr "Introduce fecha"
@@ -651,12 +670,11 @@ msgstr "Editar con un editor externo"
msgid "Search in all the notes"
msgstr "Buscar en todas las notas"
#, fuzzy
msgid "Search in current note"
msgstr "Buscar en todas las notas"
msgstr "Buscar en nota actual"
msgid "View"
msgstr "Ver"
msgid "&View"
msgstr "&Ver"
msgid "Toggle sidebar"
msgstr "Cambia la barra lateral"
@@ -664,8 +682,11 @@ msgstr "Cambia la barra lateral"
msgid "Toggle editor layout"
msgstr "Cambia el diseño del editor"
msgid "Tools"
msgstr "Herramientas"
msgid "Focus"
msgstr "Foco"
msgid "&Tools"
msgstr "&Herramientas"
msgid "Synchronisation status"
msgstr "Estado de la sincronización"
@@ -679,8 +700,8 @@ msgstr "Opciones de cifrado"
msgid "General Options"
msgstr "Opciones generales"
msgid "Help"
msgstr "Ayuda"
msgid "&Help"
msgstr "&Ayuda"
msgid "Website and documentation"
msgstr "Sitio web y documentación"
@@ -716,18 +737,18 @@ msgstr "La versión actual está actualizada."
#, javascript-format
msgid "%s (pre-release)"
msgstr ""
msgstr "%s (pre-lanzamiento)"
msgid "An update is available, do you want to download it now?"
msgstr "Hay disponible una actualización. ¿Quiere descargarla ahora?"
#, javascript-format
msgid "Your version: v%s"
msgstr ""
msgid "Your version: %s"
msgstr "Tu versión: %s"
#, javascript-format
msgid "New version: v%s"
msgstr ""
msgid "New version: %s"
msgstr "Nueva versión: %s"
msgid "Yes"
msgstr "Sí"
@@ -736,7 +757,7 @@ msgid "No"
msgstr "No"
msgid "Token has been copied to the clipboard!"
msgstr ""
msgstr "¡El token ha sido copiado al portapapeles!"
msgid "The web clipper service is enabled and set to auto-start."
msgstr ""
@@ -788,28 +809,30 @@ msgstr "Paso 2: Instalar la extensión"
msgid "Download and install the relevant extension for your browser:"
msgstr "Descargar e instalar para su navegador:"
#, fuzzy
msgid "Advanced options"
msgstr "Mostrar opciones avanzadas"
msgstr "Opciones avanzadas"
msgid "Authorisation token:"
msgstr ""
msgstr "Token de autorización:"
msgid "Copy token"
msgstr ""
msgstr "Copiar token"
msgid ""
"This authorisation token is only needed to allow third-party applications to "
"access Joplin."
msgstr ""
msgid "Check synchronisation configuration"
msgstr "Comprobar sincronización"
#, javascript-format
msgid "Notes and settings are stored in: %s"
msgstr "Las notas y los ajustes se guardan en: %s"
msgid "Browse..."
msgstr "Explorar..."
msgid "Check synchronisation configuration"
msgstr "Comprobar sincronización"
msgid "Apply"
msgstr "Aplicar"
@@ -903,6 +926,9 @@ msgstr "Estado"
msgid "Encryption is:"
msgstr "El cifrado está:"
msgid "Usage"
msgstr "Uso"
msgid "Back"
msgstr "Atrás"
@@ -921,7 +947,7 @@ msgid "Notebook title:"
msgstr "Título de libreta:"
msgid "Add or remove tags:"
msgstr "Agregar o borrar etiquetas: "
msgstr "Agregar o borrar etiquetas:"
msgid "Separate each tag by a comma."
msgstr "Separar cada etiqueta por una coma."
@@ -953,36 +979,6 @@ msgstr "No se han podido descifrar algunos elementos."
msgid "Set the password"
msgstr "Establecer la contraseña"
msgid "Add or remove tags"
msgstr "Añadir o borrar etiquetas"
msgid "Duplicate"
msgstr "Duplicado"
#, javascript-format
msgid "%s - Copy"
msgstr "%s - Copiar"
msgid "Switch between note and to-do type"
msgstr "Cambiar entre nota y lista de tareas"
#, fuzzy
msgid "Switch to note type"
msgstr "Cambiar entre nota y lista de tareas"
#, fuzzy
msgid "Switch to to-do type"
msgstr "Cambiar entre nota y lista de tareas"
msgid "Copy Markdown link"
msgstr "Copiar el enlace de Markdown"
msgid "Delete"
msgstr "Eliminar"
msgid "Delete notes?"
msgstr "¿Desea eliminar notas?"
msgid "No notes in here. Create one by clicking on \"New note\"."
msgstr "No hay ninguna nota. Cree una pulsando «Nota nueva»."
@@ -991,13 +987,13 @@ msgid ""
msgstr "No hay ninguna libreta. Cree una pulsando en «Libreta nueva»."
msgid "Location"
msgstr ""
msgstr "Localización"
msgid "URL"
msgstr ""
msgstr "URL"
msgid "Note properties"
msgstr ""
msgstr "Propiedades de nota"
msgid "Open..."
msgstr "Abrir..."
@@ -1016,7 +1012,7 @@ msgid "Copy Link Address"
msgstr "Copiar enlace"
msgid "This attachment is not downloaded or not decrypted yet."
msgstr ""
msgstr "El adjunto no ha sido descargado o desencriptado todavía."
#, javascript-format
msgid "Unsupported link or message: %s"
@@ -1031,7 +1027,7 @@ msgstr ""
"editar la nota."
msgid "Only one note can be printed or exported to PDF at a time."
msgstr ""
msgstr "Solo una nota puede ser impresa o exportada a PDF a la vez."
msgid "strong text"
msgstr "texto destacado"
@@ -1119,32 +1115,76 @@ msgstr "Opciones de cifrado"
msgid "Clipper Options"
msgstr "Opciones de recorte"
msgid "Remove this tag from all the notes?"
msgstr "¿Desea eliminar esta etiqueta de todas las notas?"
#, javascript-format
msgid ""
"Delete notebook \"%s\"?\n"
"\n"
"All notes and sub-notebooks within this notebook will also be deleted."
msgstr ""
"Borrar Libreta \"%s\"?\n"
"\n"
"Todas las notas y sublibretas de esta libreta serán borradas."
#, javascript-format
msgid "Remove tag \"%s\" from all notes?"
msgstr "Desea borrar las etiquetas pertenecientes a \"%s\" de todas las notas?"
msgid "Remove this search from the sidebar?"
msgstr "¿Desea eliminar esta búsqueda de la barra lateral?"
msgid "Delete"
msgstr "Eliminar"
msgid "Rename"
msgstr "Renombrar"
msgid "Synchronise"
msgstr "Sincronizar"
msgid "Notebooks"
msgstr "Libretas"
#, javascript-format
msgid "Decrypting items: %d/%d"
msgstr "Descifrando elementos: %d/%d."
msgstr "Descifrando elementos: %d/%d"
#, fuzzy, javascript-format
#, javascript-format
msgid "Fetching resources: %d"
msgstr "Recursos: %d."
msgstr "Obteniendo refuersos: %d"
msgid "Please select where the sync status should be exported to"
msgstr "Seleccione a dónde se debería exportar el estado de sincronización"
msgid "Table of contents"
msgstr ""
msgid "Add or remove tags"
msgstr "Añadir o borrar etiquetas"
msgid "Duplicate"
msgstr "Duplicado"
#, javascript-format
msgid "%s - Copy"
msgstr "%s - Copiar"
msgid "Switch between note and to-do type"
msgstr "Cambiar entre nota y lista de tareas"
msgid "Switch to note type"
msgstr "Cambiar a nota"
msgid "Switch to to-do type"
msgstr "Cambiar a lista de tareas"
msgid "Copy Markdown link"
msgstr "Copiar el enlace de Markdown"
#, javascript-format
msgid "Delete note \"%s\"?"
msgstr "¿Borrar nota \"%s\"?"
#, javascript-format
msgid "Delete these %d notes?"
msgstr "Borrar %d notas?"
#, javascript-format
msgid "Usage: %s"
msgstr "Uso: %s"
@@ -1263,6 +1303,12 @@ msgstr "Cifrado"
msgid "Encrypted items cannot be modified"
msgstr "Los elementos cifrados no pueden ser modificados"
msgid "title"
msgstr "título"
msgid "updated date"
msgstr "fecha de actualización"
msgid "Conflicts"
msgstr "Conflictos"
@@ -1274,12 +1320,6 @@ msgid "Notebooks cannot be named \"%s\", which is a reserved title."
msgstr ""
"No se puede usar el nombre «%s» para una libreta; es un título reservado."
msgid "title"
msgstr "título"
msgid "updated date"
msgstr "fecha de actualización"
msgid "created date"
msgstr "fecha de creación"
@@ -1324,6 +1364,10 @@ msgstr "Ordenar notas por"
msgid "Reverse sort order"
msgstr "Invierte el orden"
#, fuzzy
msgid "Sort notebooks by"
msgstr "Ordenar notas por"
msgid "Save geo-location with notes"
msgstr "Guardar geolocalización en las notas"
@@ -1350,16 +1394,18 @@ msgid ""
"this setting so that your notes are constantly being synchronised, thus "
"reducing the number of conflicts."
msgstr ""
"Esto permitirá que Joplin se ejecute en segundo plano. Se recomienda "
"habilitar esta configuración para que sus notas estén sincronizadas "
"constantemente, reduciendo así el número de conflictos."
msgid "Start application minimised in the tray icon"
msgstr ""
msgstr "Iniciar aplicación minimizada en el icono de la bandeja"
msgid "Global zoom percentage"
msgstr "Establecer el porcentaje de aumento de la aplicación"
#, fuzzy
msgid "Editor font size"
msgstr "Fuente del editor"
msgstr "Editar tamaño de fuente"
msgid "Editor font family"
msgstr "Fuente del editor"
@@ -1376,11 +1422,11 @@ msgid "Automatically update the application"
msgstr "Actualizar la aplicación automáticamente"
msgid "Get pre-releases when checking for updates"
msgstr ""
msgstr "Obtenga pre-lanzamientos cuando busque actualizaciones"
#, javascript-format
msgid "See the pre-release page for more details: %s"
msgstr ""
msgstr "Ver la página de pre-lanzamiento para más detalles: %s"
msgid "Synchronisation interval"
msgstr "Intervalo de sincronización"
@@ -1441,6 +1487,9 @@ msgid ""
"to it before syncing, otherwise all files will be removed! See the FAQ for "
"more details: %s"
msgstr ""
"Atención: Si cambias esta ubicación, asegúrate de copiar todo tu contenido "
"antes de sincronizarlo, de lo contrario todos los archivos serán eliminados. "
"Consulte las preguntas frecuentes para obtener más detalles: %s"
msgid "Nextcloud username"
msgstr "Usuario de Nextcloud"
@@ -1479,9 +1528,24 @@ msgstr "Ignorar errores en certificados TLS"
msgid "Invalid option value: \"%s\". Possible values are: %s."
msgstr "Opción inválida: «%s». Los valores posibles son: %s."
msgid "General"
msgstr "General"
msgid "Synchronisation"
msgstr "Sincronización"
msgid "Appearance"
msgstr "Apariencia"
msgid "Note"
msgstr "Nota"
msgid "Application"
msgstr "Aplicación"
#, javascript-format
msgid "The tag \"%s\" already exists. Please choose a different name."
msgstr ""
msgstr "La etiqueta \"%s\" ya existe. Por favor, busque un nuevo nombre."
msgid "Joplin Export File"
msgstr "Archivo de exportación de Joplin"
@@ -1495,9 +1559,11 @@ msgstr "Directorio para exportar de Joplin"
msgid "Evernote Export File"
msgstr "Archivo exportado de Evernote"
#, fuzzy
msgid "Json Export Directory"
msgstr "Directorio para exportar de Joplin"
msgstr "Directorio para exportar JSON"
msgid "File"
msgstr "Archivo"
msgid "Directory"
msgstr "Directorio"
@@ -1574,10 +1640,10 @@ msgid "On %s: %s"
msgstr "En %s: %s"
msgid "Permission to use camera"
msgstr ""
msgstr "Permiso para usar tu cámara"
msgid "Your permission to use your camera is required."
msgstr ""
msgstr "El permiso para usar tu cámara es necesario."
msgid "There are currently no notes. Create one by clicking on the (+) button."
msgstr "No hay notas. Cree una pulsando en el botón (+)."
@@ -1607,9 +1673,8 @@ msgstr "¿Desea mover %d notas a libreta «%s»?"
msgid "Press to set the decryption password."
msgstr "Presione para establecer la contraseña de descifrado."
#, fuzzy
msgid "Clear alarm"
msgstr "Establecer alarma"
msgstr "Quitar alarma"
msgid "Save alarm"
msgstr "Establecer alarma"
@@ -1623,22 +1688,21 @@ msgstr "Confirmar"
msgid "Cancel synchronisation"
msgstr "Cancelar sincronización"
#, fuzzy
msgid "Checking... Please wait."
msgstr "Cancelando... Por favor espere."
msgstr "Comprobando... Por favor espere."
#, fuzzy
msgid "Success! Synchronisation configuration appears to be correct."
msgstr "Comprobar sincronización"
msgstr "¡Éxito! La configuración de sincronización es correcta."
msgid ""
"Error. Please check that URL, username, password, etc. are correct and that "
"the sync target is accessible. The reported error was:"
msgstr ""
"Error. Por favor comprueba URL, nombre de usuario, contraseña, etc. son "
"correctos y el servicio a sincronizar este accesible. El código de error fue:"
#, fuzzy
msgid "The application has been authorised!"
msgstr "La aplicacion ha sido autorizada éxitosamente."
msgstr "¡La aplicacion ha sido autorizada!"
#, javascript-format
msgid ""
@@ -1648,10 +1712,15 @@ msgid ""
"\n"
"Please try again."
msgstr ""
"No se pudo autorizar aplicación:\n"
"\n"
"%s\n"
"\n"
"Por favor, vuelva a intentarlo."
#, fuzzy, javascript-format
#, javascript-format
msgid "Decrypted items: %s / %s"
msgstr "Descifrando elementos: %d/%d."
msgstr "Descifrando elementos: %s / %s"
msgid "New tags:"
msgstr "Nuevas etiquetas:"
@@ -1685,24 +1754,19 @@ msgstr ""
msgid "Joplin website"
msgstr "Sitio web de Joplin"
#, fuzzy, javascript-format
msgid "Joplin v%s"
msgstr "Sitio web de Joplin"
#, javascript-format
msgid "Database v%s"
msgstr ""
msgstr "Base de datos v%s"
#, fuzzy, javascript-format
#, javascript-format
msgid "FTS enabled: %d"
msgstr "Borrar: %d"
msgstr "FTS activado: %d"
msgid "Login with Dropbox"
msgstr "Acceder con Dropbox"
#, fuzzy
msgid "Enter code here"
msgstr "Entrar en modo línea de comandos"
msgstr "Introduce código aquí"
#, javascript-format
msgid "Master Key %s"
@@ -1756,9 +1820,8 @@ msgstr ""
msgid "Unsupported image type: %s"
msgstr "Tipo de imagen no soportado: %s"
#, fuzzy
msgid "Take photo"
msgstr "Adjuntar foto"
msgstr "Tomar foto"
msgid "Attach photo"
msgstr "Adjuntar foto"
@@ -1785,7 +1848,10 @@ msgid "View on map"
msgstr "Ver en un mapa"
msgid "Go to source URL"
msgstr ""
msgstr "Ir a origen URL"
msgid "Edit"
msgstr "Editar"
msgid "Delete notebook"
msgstr "Borrar libreta"
@@ -1810,6 +1876,15 @@ msgstr ""
msgid "Welcome"
msgstr "Bienvenido"
#~ msgid "Joplin v%s"
#~ msgstr "Joplin v%s"
#~ msgid "Remove?"
#~ msgstr "¿Borrar?"
#~ msgid "Delete notes?"
#~ msgstr "¿Desea eliminar notas?"
#~ msgid "State: %s."
#~ msgstr "Estado: «%s»."
@@ -1869,9 +1944,6 @@ msgstr "Bienvenido"
#~ msgid "Cancel the current command."
#~ msgstr "Cancelar el comando actual."
#~ msgid "Exit the application."
#~ msgstr "Salir de la aplicación."
#~ msgid "Delete the currently selected note or notebook."
#~ msgstr "Eliminar la nota o libreta seleccionada."
@@ -1922,9 +1994,6 @@ msgstr "Bienvenido"
#~ msgid "Delete notebook?"
#~ msgstr "Eliminar libreta?"
#~ msgid "Delete notebook \"%s\"?"
#~ msgstr "Elimina una libreta \"%s\"?"
#, fuzzy
#~ msgid "File system synchronisation target directory"
#~ msgstr "Sincronización de sistema de archivos en directorio objetivo"

View File

@@ -125,9 +125,10 @@ msgstr "Markatu zeregina egindakotzat."
msgid "Note is not a to-do: \"%s\""
msgstr "Oharra ez da zeregina: \"%s\""
#, fuzzy
msgid ""
"Manages E2EE configuration. Commands are `enable`, `disable`, `decrypt`, "
"`status` and `target-status`."
"`status`, `decrypt-file` and `target-status`."
msgstr ""
"E2EEren konfigurazioa erabiltzen du. Komandoak dira `enable`, `disable`, "
"`decrypt`, `status` eta `target-status`."
@@ -582,6 +583,20 @@ msgstr ""
msgid "Exporting to \"%s\" as \"%s\" format. Please wait..."
msgstr ""
msgid "Sidebar"
msgstr ""
msgid "Note list"
msgstr ""
#, fuzzy
msgid "Note title"
msgstr "Koadernoaren izenburua: "
#, fuzzy
msgid "Note body"
msgstr "Koadernoak"
#, javascript-format
msgid "Importing from \"%s\" as \"%s\" format. Please wait..."
msgstr ""
@@ -590,7 +605,8 @@ msgstr ""
msgid "PDF File"
msgstr "Fitxategia"
msgid "File"
#, fuzzy
msgid "&File"
msgstr "Fitxategia"
msgid "New note"
@@ -609,6 +625,9 @@ msgstr "Inportatu"
msgid "Export"
msgstr "Inportatu"
msgid "Synchronise"
msgstr "Sinkronizatu"
msgid "Print"
msgstr ""
@@ -619,7 +638,8 @@ msgstr ""
msgid "Quit"
msgstr "Irten"
msgid "Edit"
#, fuzzy
msgid "&Edit"
msgstr "Editatu"
msgid "Copy"
@@ -641,6 +661,9 @@ msgstr ""
msgid "Italic"
msgstr ""
msgid "Link"
msgstr ""
msgid "Insert Date Time"
msgstr ""
@@ -654,7 +677,7 @@ msgstr "Bilatu ohar guztietan"
msgid "Search in current note"
msgstr "Bilatu ohar guztietan"
msgid "View"
msgid "&View"
msgstr ""
msgid "Toggle sidebar"
@@ -663,7 +686,11 @@ msgstr ""
msgid "Toggle editor layout"
msgstr ""
msgid "Tools"
msgid "Focus"
msgstr ""
#, fuzzy
msgid "&Tools"
msgstr "Tresnak"
msgid "Synchronisation status"
@@ -678,7 +705,8 @@ msgstr "Zifratzeko aukerak"
msgid "General Options"
msgstr "Ezarpenak"
msgid "Help"
#, fuzzy
msgid "&Help"
msgstr "Laguntza"
msgid "Website and documentation"
@@ -722,11 +750,11 @@ msgid "An update is available, do you want to download it now?"
msgstr ""
#, javascript-format
msgid "Your version: v%s"
msgid "Your version: %s"
msgstr ""
#, javascript-format
msgid "New version: v%s"
msgid "New version: %s"
msgstr ""
msgid "Yes"
@@ -797,14 +825,17 @@ msgid ""
"access Joplin."
msgstr ""
#, fuzzy
msgid "Check synchronisation configuration"
msgstr "Sinkronizazioa utzi"
#, javascript-format
msgid "Notes and settings are stored in: %s"
msgstr "Oharrak eta ezarpenak hemen daude gordeta: %s"
msgid "Browse..."
msgstr ""
#, fuzzy
msgid "Check synchronisation configuration"
msgstr "Sinkronizazioa utzi"
msgid "Apply"
msgstr ""
@@ -895,6 +926,10 @@ msgstr "Egoera"
msgid "Encryption is:"
msgstr "Zifratua da:"
#, fuzzy
msgid "Usage"
msgstr "Erabili: %s"
msgid "Back"
msgstr "Atzera"
@@ -949,36 +984,6 @@ msgstr "Zenbait item ezin dira deszifratu."
msgid "Set the password"
msgstr "Ezarri pasahitza"
msgid "Add or remove tags"
msgstr "Gehitu edo ezabatu etiketak"
msgid "Duplicate"
msgstr ""
#, fuzzy, javascript-format
msgid "%s - Copy"
msgstr "Kopiatu"
msgid "Switch between note and to-do type"
msgstr "Aldatu oharra eta zeregin eren artean."
#, fuzzy
msgid "Switch to note type"
msgstr "Aldatu oharra eta zeregin eren artean."
#, fuzzy
msgid "Switch to to-do type"
msgstr "Aldatu oharra eta zeregin eren artean."
msgid "Copy Markdown link"
msgstr ""
msgid "Delete"
msgstr "Ezabatu"
msgid "Delete notes?"
msgstr "Oharrak ezabatu?"
msgid "No notes in here. Create one by clicking on \"New note\"."
msgstr "Hemen ez dago oharrik. Sortu bat \"Ohar berria\" sakatuta."
@@ -1119,18 +1124,26 @@ msgstr "Zifratzeko aukerak"
msgid "Clipper Options"
msgstr "Ezarpenak"
msgid "Remove this tag from all the notes?"
#, fuzzy, javascript-format
msgid ""
"Delete notebook \"%s\"?\n"
"\n"
"All notes and sub-notebooks within this notebook will also be deleted."
msgstr "Koadernoa ezabatu? Dituen ohar guztiak ere ezabatuko dira."
#, fuzzy, javascript-format
msgid "Remove tag \"%s\" from all notes?"
msgstr "Kendu etiketa hori ohar guztietatik?"
msgid "Remove this search from the sidebar?"
msgstr "Kendu bilaketa hori ohar guztietatik?"
msgid "Delete"
msgstr "Ezabatu"
msgid "Rename"
msgstr "Berrizendatu"
msgid "Synchronise"
msgstr "Sinkronizatu"
msgid "Notebooks"
msgstr "Koadernoak"
@@ -1146,6 +1159,42 @@ msgstr "Baliabideak: %d."
msgid "Please select where the sync status should be exported to"
msgstr "Aukeratu nora esportatu sinkronizazioaren egoera, mesedez"
msgid "Table of contents"
msgstr ""
msgid "Add or remove tags"
msgstr "Gehitu edo ezabatu etiketak"
#, fuzzy
msgid "Duplicate"
msgstr "Irten aplikaziotik"
#, fuzzy, javascript-format
msgid "%s - Copy"
msgstr "Kopiatu"
msgid "Switch between note and to-do type"
msgstr "Aldatu oharra eta zeregin eren artean."
#, fuzzy
msgid "Switch to note type"
msgstr "Aldatu oharra eta zeregin eren artean."
#, fuzzy
msgid "Switch to to-do type"
msgstr "Aldatu oharra eta zeregin eren artean."
msgid "Copy Markdown link"
msgstr ""
#, fuzzy, javascript-format
msgid "Delete note \"%s\"?"
msgstr "Oharrak ezabatu?"
#, fuzzy, javascript-format
msgid "Delete these %d notes?"
msgstr "Oharrok ezabatu?"
#, javascript-format
msgid "Usage: %s"
msgstr "Erabili: %s"
@@ -1265,6 +1314,14 @@ msgstr "Zifratuta"
msgid "Encrypted items cannot be modified"
msgstr "Zifratutako itemak ezin aldatu daitezke"
#, fuzzy
msgid "title"
msgstr "Titulu gabekoa"
#, fuzzy
msgid "updated date"
msgstr "Eguneratuta: %d."
msgid "Conflicts"
msgstr "Gatazkak"
@@ -1277,14 +1334,6 @@ msgid "Notebooks cannot be named \"%s\", which is a reserved title."
msgstr ""
"Koadernoak ezin izendatu daitezke \"%s\", izen hori Joplinek gordeta dauka"
#, fuzzy
msgid "title"
msgstr "Titulu gabekoa"
#, fuzzy
msgid "updated date"
msgstr "Eguneratuta: %d."
#, fuzzy
msgid "created date"
msgstr "Sortuta: %d."
@@ -1333,6 +1382,10 @@ msgstr ""
msgid "Reverse sort order"
msgstr "Alderantziz antolatzen du."
#, fuzzy
msgid "Sort notebooks by"
msgstr "Editatu koadernoa"
msgid "Save geo-location with notes"
msgstr "Gore geokokapena oharrekin"
@@ -1486,6 +1539,25 @@ msgstr ""
msgid "Invalid option value: \"%s\". Possible values are: %s."
msgstr "Balio aukera baliogabea: \"%s\". Litezkeen balioak: %s."
#, fuzzy
msgid "General"
msgstr "Ezarpenak"
#, fuzzy
msgid "Synchronisation"
msgstr "Sinkronizazioaren egoera"
msgid "Appearance"
msgstr ""
#, fuzzy
msgid "Note"
msgstr "Koadernoak"
#, fuzzy
msgid "Application"
msgstr "Irten aplikaziotik"
#, javascript-format
msgid "The tag \"%s\" already exists. Please choose a different name."
msgstr ""
@@ -1508,6 +1580,9 @@ msgstr "Evernotetik esportatutako fitxategiak"
msgid "Json Export Directory"
msgstr "Evernotetik esportatutako fitxategiak"
msgid "File"
msgstr "Fitxategia"
msgid "Directory"
msgstr ""
@@ -1686,10 +1761,6 @@ msgstr ""
msgid "Joplin website"
msgstr ""
#, javascript-format
msgid "Joplin v%s"
msgstr ""
#, javascript-format
msgid "Database v%s"
msgstr ""
@@ -1788,6 +1859,9 @@ msgstr "Ikusi mapan"
msgid "Go to source URL"
msgstr ""
msgid "Edit"
msgstr "Editatu"
msgid "Delete notebook"
msgstr "Ezabatu koadernoa"
@@ -1861,9 +1935,6 @@ msgstr "Ongi etorri!"
#~ msgid "Cancel the current command."
#~ msgstr "Utzi uneko komandoa"
#~ msgid "Exit the application."
#~ msgstr "Irten aplikaziotik"
#~ msgid "Delete the currently selected note or notebook."
#~ msgstr "Ezabatu aukeratutako oharra edo koadernoa"

View File

@@ -13,7 +13,7 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: Poedit 2.0.3\n"
"X-Generator: Poedit 2.2.1\n"
msgid "To delete a tag, untag the associated notes."
msgstr "Pour supprimer une vignette, enlever là des notes associées."
@@ -125,10 +125,11 @@ msgstr "La note n'est pas une tâche : \"%s\""
msgid ""
"Manages E2EE configuration. Commands are `enable`, `disable`, `decrypt`, "
"`status` and `target-status`."
"`status`, `decrypt-file` and `target-status`."
msgstr ""
"Gérer la configuration E2EE (Chiffrement de bout à bout). Les commandes sont "
"`enable`, `disable`, `decrypt` et `status` et `target-status`."
"`enable`, `disable`, `decrypt` et `status`, `decrypt-file` et `target-"
"status`."
msgid "Enter master password:"
msgstr "Entrer le mot de passe maître :"
@@ -583,6 +584,18 @@ msgstr ""
msgid "Exporting to \"%s\" as \"%s\" format. Please wait..."
msgstr "Exporter vers \"%s\" au format \"%s\". Veuillez patienter..."
msgid "Sidebar"
msgstr "Barre latérale"
msgid "Note list"
msgstr "Liste de notes"
msgid "Note title"
msgstr "Titre de la note"
msgid "Note body"
msgstr "Corps de la note"
#, javascript-format
msgid "Importing from \"%s\" as \"%s\" format. Please wait..."
msgstr "Importer depuis \"%s\" au format \"%s\". Veuillez patienter..."
@@ -590,8 +603,8 @@ msgstr "Importer depuis \"%s\" au format \"%s\". Veuillez patienter..."
msgid "PDF File"
msgstr "Fichier PDF"
msgid "File"
msgstr "Fichier"
msgid "&File"
msgstr "&Fichier"
msgid "New note"
msgstr "Nouvelle note"
@@ -608,6 +621,9 @@ msgstr "Importer"
msgid "Export"
msgstr "Exporter"
msgid "Synchronise"
msgstr "Synchroniser"
msgid "Print"
msgstr "Imprimer"
@@ -618,8 +634,8 @@ msgstr "Cacher %s"
msgid "Quit"
msgstr "Quitter"
msgid "Edit"
msgstr "Édition"
msgid "&Edit"
msgstr "&Édition"
msgid "Copy"
msgstr "Copier"
@@ -639,6 +655,9 @@ msgstr "Gras"
msgid "Italic"
msgstr "Italique"
msgid "Link"
msgstr "Lien"
msgid "Insert Date Time"
msgstr "Insérer la date et l'heure"
@@ -651,8 +670,8 @@ msgstr "Chercher dans toutes les notes"
msgid "Search in current note"
msgstr "Chercher dans la note en cours"
msgid "View"
msgstr "Affichage"
msgid "&View"
msgstr "&Affichage"
msgid "Toggle sidebar"
msgstr "Basculer barre latérale"
@@ -660,8 +679,11 @@ msgstr "Basculer barre latérale"
msgid "Toggle editor layout"
msgstr "Basculer l'agencement de l'éditeur"
msgid "Tools"
msgstr "Outils"
msgid "Focus"
msgstr "Naviguer"
msgid "&Tools"
msgstr "&Outils"
msgid "Synchronisation status"
msgstr "État de la synchronisation"
@@ -675,8 +697,8 @@ msgstr "Options de chiffrement"
msgid "General Options"
msgstr "Options générales"
msgid "Help"
msgstr "Aide"
msgid "&Help"
msgstr "&Aide"
msgid "Website and documentation"
msgstr "Documentation en ligne"
@@ -719,12 +741,12 @@ msgstr ""
"Une mise à jour est disponible, souhaitez vous la télécharger maintenant ?"
#, javascript-format
msgid "Your version: v%s"
msgstr "Votre version : v%s"
msgid "Your version: %s"
msgstr "Votre version : %s"
#, javascript-format
msgid "New version: v%s"
msgstr "Nouvelle version : v%s"
msgid "New version: %s"
msgstr "Nouvelle version : %s"
msgid "Yes"
msgstr "Oui"
@@ -801,13 +823,16 @@ msgstr ""
"Ce code d'authentification est nécessaire uniquement pour permettre aux "
"logiciels tiers d'accéder aux données de Joplin."
msgid "Check synchronisation configuration"
msgstr "Vérifier config synchronisation"
#, javascript-format
msgid "Notes and settings are stored in: %s"
msgstr "Les notes et paramètres se trouve dans : %s"
msgid "Browse..."
msgstr "Parcourir…"
msgid "Check synchronisation configuration"
msgstr "Vérifier config synchronisation"
msgid "Apply"
msgstr "Appliquer"
@@ -903,6 +928,9 @@ msgstr "État"
msgid "Encryption is:"
msgstr "Le chiffrement est :"
msgid "Usage"
msgstr "Utilisation"
msgid "Back"
msgstr "Retour"
@@ -955,34 +983,6 @@ msgstr "Certains objets ne peuvent être déchiffrés."
msgid "Set the password"
msgstr "Définir le mot de passe"
msgid "Add or remove tags"
msgstr "Gérer les étiquettes"
msgid "Duplicate"
msgstr "Dupliquer"
#, javascript-format
msgid "%s - Copy"
msgstr "%s - Copie"
msgid "Switch between note and to-do type"
msgstr "Alterner entre note et tâche"
msgid "Switch to note type"
msgstr "Convertir en note"
msgid "Switch to to-do type"
msgstr "Convertir en tâche"
msgid "Copy Markdown link"
msgstr "Copier lien Markdown"
msgid "Delete"
msgstr "Supprimer"
msgid "Delete notes?"
msgstr "Supprimer les notes ?"
msgid "No notes in here. Create one by clicking on \"New note\"."
msgstr ""
"Pas de notes ici. Créez-en une en pressant le bouton \"Nouvelle note\"."
@@ -1019,7 +1019,7 @@ msgid "Copy Link Address"
msgstr "Copier l'adresse du lien"
msgid "This attachment is not downloaded or not decrypted yet."
msgstr "Cette pièce jointe n'est pas téléchargée ou pas encore déchiffrée"
msgstr "Cette pièce jointe n'est pas téléchargée ou pas encore déchiffrée."
#, javascript-format
msgid "Unsupported link or message: %s"
@@ -1124,18 +1124,29 @@ msgstr "Options de chiffrement"
msgid "Clipper Options"
msgstr "Options du Web Clipper"
msgid "Remove this tag from all the notes?"
msgstr "Enlever cette étiquette de toutes les notes ?"
#, javascript-format
msgid ""
"Delete notebook \"%s\"?\n"
"\n"
"All notes and sub-notebooks within this notebook will also be deleted."
msgstr ""
"Effacer le carnet \"%s\" ?\n"
"\n"
"Toutes les notes et sous-carnets dans ce carnet seront également effacés."
#, javascript-format
msgid "Remove tag \"%s\" from all notes?"
msgstr "Enlever l’étiquette \"%s\" de toutes les notes ?"
msgid "Remove this search from the sidebar?"
msgstr "Enlever cette recherche de la barre latérale ?"
msgid "Delete"
msgstr "Supprimer"
msgid "Rename"
msgstr "Renommer"
msgid "Synchronise"
msgstr "Synchroniser"
msgid "Notebooks"
msgstr "Carnets"
@@ -1151,6 +1162,39 @@ msgid "Please select where the sync status should be exported to"
msgstr ""
"Veuillez sélectionner un répertoire ou exporter l'état de la synchronisation"
msgid "Table of contents"
msgstr "Table des matières"
msgid "Add or remove tags"
msgstr "Gérer les étiquettes"
msgid "Duplicate"
msgstr "Dupliquer"
#, javascript-format
msgid "%s - Copy"
msgstr "%s - Copie"
msgid "Switch between note and to-do type"
msgstr "Alterner entre note et tâche"
msgid "Switch to note type"
msgstr "Convertir en note"
msgid "Switch to to-do type"
msgstr "Convertir en tâche"
msgid "Copy Markdown link"
msgstr "Copier lien Markdown"
#, javascript-format
msgid "Delete note \"%s\"?"
msgstr "Supprimer note \"%s\" ?"
#, javascript-format
msgid "Delete these %d notes?"
msgstr "Supprimer ces %d notes ?"
#, javascript-format
msgid "Usage: %s"
msgstr "Utilisation : %s"
@@ -1269,6 +1313,12 @@ msgstr "Chiffré"
msgid "Encrypted items cannot be modified"
msgstr "Les objets chiffrés ne peuvent être modifiés"
msgid "title"
msgstr "titre"
msgid "updated date"
msgstr "date de modification"
msgid "Conflicts"
msgstr "Conflits"
@@ -1279,12 +1329,6 @@ msgstr "Impossible de déplacer le carnet à cet endroit"
msgid "Notebooks cannot be named \"%s\", which is a reserved title."
msgstr "Les carnets ne peuvent être nommés \"%s\" car c'est un nom réservé."
msgid "title"
msgstr "titre"
msgid "updated date"
msgstr "date de modification"
msgid "created date"
msgstr "date de création"
@@ -1329,6 +1373,9 @@ msgstr "Trier les notes par"
msgid "Reverse sort order"
msgstr "Inverser l'ordre"
msgid "Sort notebooks by"
msgstr "Trier les carnets par"
msgid "Save geo-location with notes"
msgstr "Enregistrer l'emplacement avec les notes"
@@ -1488,6 +1535,21 @@ msgstr "Ignorer les erreurs de certificats TLS"
msgid "Invalid option value: \"%s\". Possible values are: %s."
msgstr "Option invalide: \"%s\". Les valeurs possibles sont : %s."
msgid "General"
msgstr "Général"
msgid "Synchronisation"
msgstr "Synchronisation"
msgid "Appearance"
msgstr "Apparence"
msgid "Note"
msgstr "Note"
msgid "Application"
msgstr "Application"
#, javascript-format
msgid "The tag \"%s\" already exists. Please choose a different name."
msgstr "L'étiquette \"%s\" existe déjà. Veuillez choisir un autre nom."
@@ -1507,6 +1569,9 @@ msgstr "Fichiers d'export Evernote"
msgid "Json Export Directory"
msgstr "Dossier d'export JSON"
msgid "File"
msgstr "Fichier"
msgid "Directory"
msgstr "Dossier"
@@ -1585,7 +1650,7 @@ msgid "Permission to use camera"
msgstr "Permission d'utiliser l'appareil photo"
msgid "Your permission to use your camera is required."
msgstr "Votre permission est requise pour utiliser l'appareil photo"
msgstr "Votre permission est requise pour utiliser l'appareil photo."
msgid "There are currently no notes. Create one by clicking on the (+) button."
msgstr ""
@@ -1697,10 +1762,6 @@ msgstr "- Position : Pour attacher à une note les coordonnées GPS."
msgid "Joplin website"
msgstr "Site web de Joplin"
#, javascript-format
msgid "Joplin v%s"
msgstr "Joplin v%s"
#, javascript-format
msgid "Database v%s"
msgstr "Base de données v%s"
@@ -1797,6 +1858,9 @@ msgstr "Voir sur carte"
msgid "Go to source URL"
msgstr "Aller à l'URL source"
msgid "Edit"
msgstr "Édition"
msgid "Delete notebook"
msgstr "Supprimer le carnet"
@@ -1821,6 +1885,15 @@ msgstr ""
msgid "Welcome"
msgstr "Bienvenue"
#~ msgid "Joplin v%s"
#~ msgstr "Joplin v%s"
#~ msgid "Remove?"
#~ msgstr "Supprimer ?"
#~ msgid "Delete notes?"
#~ msgstr "Supprimer les notes ?"
#~ msgid "State: %s."
#~ msgstr "État : %s."
@@ -1940,9 +2013,6 @@ msgstr "Bienvenue"
#~ msgid "Delete notebook?"
#~ msgstr "Supprimer le carnet ?"
#~ msgid "Delete notebook \"%s\"?"
#~ msgstr "Supprimer le carnet \"%s\" ?"
#~ msgid "File system synchronisation target directory"
#~ msgstr "Cible de la synchronisation sur le disque dur"

View File

@@ -122,9 +122,10 @@ msgstr "Marca unha tarefa como feita."
msgid "Note is not a to-do: \"%s\""
msgstr "A nota non é unha tarefa: «%s»"
#, fuzzy
msgid ""
"Manages E2EE configuration. Commands are `enable`, `disable`, `decrypt`, "
"`status` and `target-status`."
"`status`, `decrypt-file` and `target-status`."
msgstr ""
"Xestiona a configuración E2EE. As orde son «enable», «disable», «decrypt», "
"«status» e «target-status»."
@@ -576,6 +577,20 @@ msgstr ""
msgid "Exporting to \"%s\" as \"%s\" format. Please wait..."
msgstr "Exportando a «%s» como formato «%s». Agarde..."
msgid "Sidebar"
msgstr ""
msgid "Note list"
msgstr ""
#, fuzzy
msgid "Note title"
msgstr "Título do caderno:"
#, fuzzy
msgid "Note body"
msgstr "Cadernos"
#, javascript-format
msgid "Importing from \"%s\" as \"%s\" format. Please wait..."
msgstr "Importando de «%s» como formato «%s». Agarde..."
@@ -583,7 +598,8 @@ msgstr "Importando de «%s» como formato «%s». Agarde..."
msgid "PDF File"
msgstr "Ficheiro PDF"
msgid "File"
#, fuzzy
msgid "&File"
msgstr "Ficheiro"
msgid "New note"
@@ -601,6 +617,9 @@ msgstr "Importar"
msgid "Export"
msgstr "Exportar"
msgid "Synchronise"
msgstr "Sincronizar"
msgid "Print"
msgstr "Imprimir"
@@ -611,7 +630,8 @@ msgstr "Ocultar %s"
msgid "Quit"
msgstr "Saír"
msgid "Edit"
#, fuzzy
msgid "&Edit"
msgstr "Edtar"
msgid "Copy"
@@ -633,6 +653,9 @@ msgstr ""
msgid "Italic"
msgstr ""
msgid "Link"
msgstr ""
msgid "Insert Date Time"
msgstr ""
@@ -646,7 +669,8 @@ msgstr "Buscar en todas as notas"
msgid "Search in current note"
msgstr "Buscar en todas as notas"
msgid "View"
#, fuzzy
msgid "&View"
msgstr "Vista"
msgid "Toggle sidebar"
@@ -655,7 +679,12 @@ msgstr ""
msgid "Toggle editor layout"
msgstr "Cambiar a disposición do editor"
msgid "Tools"
#, fuzzy
msgid "Focus"
msgstr "Focar no corpo"
#, fuzzy
msgid "&Tools"
msgstr "Ferramentas"
msgid "Synchronisation status"
@@ -670,7 +699,8 @@ msgstr "Opcións de cifrado"
msgid "General Options"
msgstr "Opcións xerais"
msgid "Help"
#, fuzzy
msgid "&Help"
msgstr "Axuda"
msgid "Website and documentation"
@@ -713,11 +743,11 @@ msgid "An update is available, do you want to download it now?"
msgstr "Hai unha actualización dispoñíbel, desexa descargala agora?"
#, javascript-format
msgid "Your version: v%s"
msgid "Your version: %s"
msgstr ""
#, javascript-format
msgid "New version: v%s"
msgid "New version: %s"
msgstr ""
msgid "Yes"
@@ -787,13 +817,16 @@ msgid ""
"access Joplin."
msgstr ""
msgid "Check synchronisation configuration"
msgstr "Comprobar a configuración da sincronización"
#, javascript-format
msgid "Notes and settings are stored in: %s"
msgstr "As notas e axustes gardáronse en: %s"
msgid "Browse..."
msgstr ""
msgid "Check synchronisation configuration"
msgstr "Comprobar a configuración da sincronización"
msgid "Apply"
msgstr ""
@@ -885,6 +918,10 @@ msgstr "Estado"
msgid "Encryption is:"
msgstr "O cifrado é:"
#, fuzzy
msgid "Usage"
msgstr "Uso: %s"
msgid "Back"
msgstr "Anterior"
@@ -936,37 +973,6 @@ msgstr "Non é posíbel descifrar algúns elementos."
msgid "Set the password"
msgstr "Estabelecer un contrasinal"
msgid "Add or remove tags"
msgstr "Engadir ou eliminar etiquetas"
msgid "Duplicate"
msgstr ""
#, fuzzy, javascript-format
msgid "%s - Copy"
msgstr "Copiar"
msgid "Switch between note and to-do type"
msgstr "Cambiar entre notas e tarefas"
#, fuzzy
msgid "Switch to note type"
msgstr "Cambiar entre notas e tarefas"
#, fuzzy
msgid "Switch to to-do type"
msgstr "Cambiar entre notas e tarefas"
#, fuzzy
msgid "Copy Markdown link"
msgstr "Markdown"
msgid "Delete"
msgstr "Eliminar"
msgid "Delete notes?"
msgstr "Desexa eliminar as notas?"
msgid "No notes in here. Create one by clicking on \"New note\"."
msgstr "Aquí non hai notas. Cree unha premendo en «Nova nota»."
@@ -1105,18 +1111,27 @@ msgstr "Opcións de cifrado"
msgid "Clipper Options"
msgstr "Opcións xerais"
msgid "Remove this tag from all the notes?"
#, fuzzy, javascript-format
msgid ""
"Delete notebook \"%s\"?\n"
"\n"
"All notes and sub-notebooks within this notebook will also be deleted."
msgstr ""
"Desexa eliminar o caderno? Tamén se eliminarán todas as notas deste caderno."
#, fuzzy, javascript-format
msgid "Remove tag \"%s\" from all notes?"
msgstr "Desexa eliminar esta etiqueta de todas as notas?"
msgid "Remove this search from the sidebar?"
msgstr "Desexa eliminar esta busca da barra lateral?"
msgid "Delete"
msgstr "Eliminar"
msgid "Rename"
msgstr "Renomear"
msgid "Synchronise"
msgstr "Sincronizar"
msgid "Notebooks"
msgstr "Cadernos"
@@ -1131,6 +1146,43 @@ msgstr "Recursos: %d."
msgid "Please select where the sync status should be exported to"
msgstr "Seleccione onde exportar o estado da sincronización"
msgid "Table of contents"
msgstr ""
msgid "Add or remove tags"
msgstr "Engadir ou eliminar etiquetas"
#, fuzzy
msgid "Duplicate"
msgstr "Sae do aplicativo."
#, fuzzy, javascript-format
msgid "%s - Copy"
msgstr "Copiar"
msgid "Switch between note and to-do type"
msgstr "Cambiar entre notas e tarefas"
#, fuzzy
msgid "Switch to note type"
msgstr "Cambiar entre notas e tarefas"
#, fuzzy
msgid "Switch to to-do type"
msgstr "Cambiar entre notas e tarefas"
#, fuzzy
msgid "Copy Markdown link"
msgstr "Markdown"
#, fuzzy, javascript-format
msgid "Delete note \"%s\"?"
msgstr "Desexa eliminar as notas?"
#, fuzzy, javascript-format
msgid "Delete these %d notes?"
msgstr "Desexa eliminar estas notas?"
#, javascript-format
msgid "Usage: %s"
msgstr "Uso: %s"
@@ -1249,6 +1301,14 @@ msgstr "Cifrado"
msgid "Encrypted items cannot be modified"
msgstr "Non é posíbel modificar elementos cifrados"
#, fuzzy
msgid "title"
msgstr "Sen título"
#, fuzzy
msgid "updated date"
msgstr "Actualizado: %d."
msgid "Conflicts"
msgstr "Conflitos"
@@ -1260,14 +1320,6 @@ msgstr "Non é posíbel mover a nota ao caderno «%s»"
msgid "Notebooks cannot be named \"%s\", which is a reserved title."
msgstr "Os cadernos non poden levar o nome «%s» porque é un título reservado."
#, fuzzy
msgid "title"
msgstr "Sen título"
#, fuzzy
msgid "updated date"
msgstr "Actualizado: %d."
#, fuzzy
msgid "created date"
msgstr "Creado: %d."
@@ -1314,6 +1366,10 @@ msgstr "Ordenar notas por"
msgid "Reverse sort order"
msgstr "Orde inversa"
#, fuzzy
msgid "Sort notebooks by"
msgstr "Ordenar notas por"
msgid "Save geo-location with notes"
msgstr "Gardar xeolocalización coas notas"
@@ -1464,6 +1520,25 @@ msgstr ""
msgid "Invalid option value: \"%s\". Possible values are: %s."
msgstr "Valor incorrecto de opción: «%s». Os valores posíbeis son: %s."
#, fuzzy
msgid "General"
msgstr "Opcións xerais"
#, fuzzy
msgid "Synchronisation"
msgstr "Estado da sincronización"
msgid "Appearance"
msgstr ""
#, fuzzy
msgid "Note"
msgstr "Cadernos"
#, fuzzy
msgid "Application"
msgstr "Sae do aplicativo."
#, javascript-format
msgid "The tag \"%s\" already exists. Please choose a different name."
msgstr ""
@@ -1484,6 +1559,9 @@ msgstr "Ficheiro de exportación de Evernote"
msgid "Json Export Directory"
msgstr "Cartafol de exportación do Joplin"
msgid "File"
msgstr "Ficheiro"
msgid "Directory"
msgstr "Cartafol"
@@ -1664,10 +1742,6 @@ msgstr ""
msgid "Joplin website"
msgstr "Sitio web de Joplin"
#, fuzzy, javascript-format
msgid "Joplin v%s"
msgstr "Sitio web de Joplin"
#, javascript-format
msgid "Database v%s"
msgstr ""
@@ -1765,6 +1839,9 @@ msgstr "Ver no mapa"
msgid "Go to source URL"
msgstr ""
msgid "Edit"
msgstr "Edtar"
msgid "Delete notebook"
msgstr "Eliminar caderno"
@@ -1787,6 +1864,10 @@ msgstr "Non ten cadernos actualmente. Cree un premendo no botón (+)."
msgid "Welcome"
msgstr "Benvido/a"
#, fuzzy
#~ msgid "Joplin v%s"
#~ msgstr "Sitio web de Joplin"
#~ msgid "State: %s."
#~ msgstr "Estado: %s."

View File

@@ -128,7 +128,7 @@ msgstr "Bilješka nije zadatak: \"%s\""
msgid ""
"Manages E2EE configuration. Commands are `enable`, `disable`, `decrypt`, "
"`status` and `target-status`."
"`status`, `decrypt-file` and `target-status`."
msgstr ""
msgid "Enter master password:"
@@ -579,6 +579,20 @@ msgstr ""
msgid "Exporting to \"%s\" as \"%s\" format. Please wait..."
msgstr ""
msgid "Sidebar"
msgstr ""
msgid "Note list"
msgstr ""
#, fuzzy
msgid "Note title"
msgstr "Naslov bilježnice:"
#, fuzzy
msgid "Note body"
msgstr "Bilježnice"
#, javascript-format
msgid "Importing from \"%s\" as \"%s\" format. Please wait..."
msgstr ""
@@ -587,7 +601,8 @@ msgstr ""
msgid "PDF File"
msgstr "Datoteka"
msgid "File"
#, fuzzy
msgid "&File"
msgstr "Datoteka"
msgid "New note"
@@ -606,6 +621,9 @@ msgstr "Uvoz"
msgid "Export"
msgstr "Uvoz"
msgid "Synchronise"
msgstr "Sinkroniziraj"
msgid "Print"
msgstr ""
@@ -616,7 +634,8 @@ msgstr ""
msgid "Quit"
msgstr "Izađi"
msgid "Edit"
#, fuzzy
msgid "&Edit"
msgstr "Uredi"
msgid "Copy"
@@ -638,6 +657,9 @@ msgstr ""
msgid "Italic"
msgstr ""
msgid "Link"
msgstr ""
msgid "Insert Date Time"
msgstr ""
@@ -651,7 +673,7 @@ msgstr "Pretraži u svim bilješkama"
msgid "Search in current note"
msgstr "Pretraži u svim bilješkama"
msgid "View"
msgid "&View"
msgstr ""
msgid "Toggle sidebar"
@@ -660,7 +682,12 @@ msgstr ""
msgid "Toggle editor layout"
msgstr ""
msgid "Tools"
#, fuzzy
msgid "Focus"
msgstr "Naslov bilješke:"
#, fuzzy
msgid "&Tools"
msgstr "Alati"
msgid "Synchronisation status"
@@ -676,7 +703,8 @@ msgstr ""
msgid "General Options"
msgstr "Opcije"
msgid "Help"
#, fuzzy
msgid "&Help"
msgstr "Pomoć"
msgid "Website and documentation"
@@ -720,11 +748,11 @@ msgid "An update is available, do you want to download it now?"
msgstr ""
#, javascript-format
msgid "Your version: v%s"
msgid "Your version: %s"
msgstr ""
#, javascript-format
msgid "New version: v%s"
msgid "New version: %s"
msgstr ""
msgid "Yes"
@@ -795,14 +823,17 @@ msgid ""
"access Joplin."
msgstr ""
#, fuzzy
msgid "Check synchronisation configuration"
msgstr "Prekini sinkronizaciju"
#, javascript-format
msgid "Notes and settings are stored in: %s"
msgstr "Bilješke i postavke su pohranjene u: %s"
msgid "Browse..."
msgstr ""
#, fuzzy
msgid "Check synchronisation configuration"
msgstr "Prekini sinkronizaciju"
msgid "Apply"
msgstr ""
@@ -881,6 +912,10 @@ msgstr "Status"
msgid "Encryption is:"
msgstr ""
#, fuzzy
msgid "Usage"
msgstr "Korištenje: %s"
msgid "Back"
msgstr "Natrag"
@@ -936,36 +971,6 @@ msgstr "Neke stavke se ne mogu sinkronizirati."
msgid "Set the password"
msgstr ""
msgid "Add or remove tags"
msgstr "Dodaj ili makni oznake"
msgid "Duplicate"
msgstr ""
#, fuzzy, javascript-format
msgid "%s - Copy"
msgstr "Kopiraj"
msgid "Switch between note and to-do type"
msgstr "Zamijeni bilješku i zadatak"
#, fuzzy
msgid "Switch to note type"
msgstr "Zamijeni bilješku i zadatak"
#, fuzzy
msgid "Switch to to-do type"
msgstr "Zamijeni bilješku i zadatak"
msgid "Copy Markdown link"
msgstr ""
msgid "Delete"
msgstr "Obriši"
msgid "Delete notes?"
msgstr "Obriši bilješke?"
msgid "No notes in here. Create one by clicking on \"New note\"."
msgstr "Ovdje nema bilješki. Stvori novu pritiskom na \"Nova bilješka\"."
@@ -1105,18 +1110,27 @@ msgstr ""
msgid "Clipper Options"
msgstr "Opcije"
msgid "Remove this tag from all the notes?"
#, fuzzy, javascript-format
msgid ""
"Delete notebook \"%s\"?\n"
"\n"
"All notes and sub-notebooks within this notebook will also be deleted."
msgstr ""
"Obrisati bilježnicu? Sve bilješke u toj bilježnici će također biti obrisane."
#, fuzzy, javascript-format
msgid "Remove tag \"%s\" from all notes?"
msgstr "Makni ovu oznaku iz svih bilješki?"
msgid "Remove this search from the sidebar?"
msgstr "Makni ovu pretragu iz izbornika?"
msgid "Delete"
msgstr "Obriši"
msgid "Rename"
msgstr "Preimenuj"
msgid "Synchronise"
msgstr "Sinkroniziraj"
msgid "Notebooks"
msgstr "Bilježnice"
@@ -1131,6 +1145,42 @@ msgstr "Resursi: %d."
msgid "Please select where the sync status should be exported to"
msgstr "Odaberi lokaciju za izvoz statusa sinkronizacije"
msgid "Table of contents"
msgstr ""
msgid "Add or remove tags"
msgstr "Dodaj ili makni oznake"
#, fuzzy
msgid "Duplicate"
msgstr "Izađi iz aplikacije."
#, fuzzy, javascript-format
msgid "%s - Copy"
msgstr "Kopiraj"
msgid "Switch between note and to-do type"
msgstr "Zamijeni bilješku i zadatak"
#, fuzzy
msgid "Switch to note type"
msgstr "Zamijeni bilješku i zadatak"
#, fuzzy
msgid "Switch to to-do type"
msgstr "Zamijeni bilješku i zadatak"
msgid "Copy Markdown link"
msgstr ""
#, fuzzy, javascript-format
msgid "Delete note \"%s\"?"
msgstr "Obriši bilješke?"
#, fuzzy, javascript-format
msgid "Delete these %d notes?"
msgstr "Obriši ove bilješke?"
#, javascript-format
msgid "Usage: %s"
msgstr "Korištenje: %s"
@@ -1248,6 +1298,14 @@ msgstr ""
msgid "Encrypted items cannot be modified"
msgstr "Neke stavke se ne mogu sinkronizirati."
#, fuzzy
msgid "title"
msgstr "Nenaslovljen"
#, fuzzy
msgid "updated date"
msgstr "Ažurirano: %d."
msgid "Conflicts"
msgstr "Sukobi"
@@ -1259,14 +1317,6 @@ msgstr "Ne mogu premjestiti bilješku u bilježnicu %s"
msgid "Notebooks cannot be named \"%s\", which is a reserved title."
msgstr "Naslov \"%s\" je rezerviran i ne može se koristiti."
#, fuzzy
msgid "title"
msgstr "Nenaslovljen"
#, fuzzy
msgid "updated date"
msgstr "Ažurirano: %d."
#, fuzzy
msgid "created date"
msgstr "Stvoreno: %d."
@@ -1315,6 +1365,10 @@ msgstr ""
msgid "Reverse sort order"
msgstr "Mijenja redoslijed."
#, fuzzy
msgid "Sort notebooks by"
msgstr "Uredi bilježnicu"
msgid "Save geo-location with notes"
msgstr "Spremi geolokacijske podatke sa bilješkama"
@@ -1463,6 +1517,25 @@ msgstr ""
msgid "Invalid option value: \"%s\". Possible values are: %s."
msgstr "Nevažeća vrijednost: \"%s\". Moguće vrijednosti su: %s."
#, fuzzy
msgid "General"
msgstr "Opcije"
#, fuzzy
msgid "Synchronisation"
msgstr "Status sinkronizacije"
msgid "Appearance"
msgstr ""
#, fuzzy
msgid "Note"
msgstr "Bilježnice"
#, fuzzy
msgid "Application"
msgstr "Izađi iz aplikacije."
#, javascript-format
msgid "The tag \"%s\" already exists. Please choose a different name."
msgstr ""
@@ -1485,6 +1558,9 @@ msgstr "Evernote izvozne datoteke"
msgid "Json Export Directory"
msgstr "Evernote izvozne datoteke"
msgid "File"
msgstr "Datoteka"
msgid "Directory"
msgstr ""
@@ -1661,10 +1737,6 @@ msgstr ""
msgid "Joplin website"
msgstr ""
#, javascript-format
msgid "Joplin v%s"
msgstr ""
#, javascript-format
msgid "Database v%s"
msgstr ""
@@ -1764,6 +1836,9 @@ msgstr "Vidi na karti"
msgid "Go to source URL"
msgstr ""
msgid "Edit"
msgstr "Uredi"
msgid "Delete notebook"
msgstr "Obriši bilježnicu"
@@ -1836,9 +1911,6 @@ msgstr "Dobro došli"
#~ msgid "Cancel the current command."
#~ msgstr "Prekini trenutnu naredbu."
#~ msgid "Exit the application."
#~ msgstr "Izađi iz aplikacije."
#~ msgid "Delete the currently selected note or notebook."
#~ msgstr "Obriši odabranu bilješku ili bilježnicu."

View File

@@ -124,9 +124,10 @@ msgstr "Segna un \"Cose-da-fare\" come completato."
msgid "Note is not a to-do: \"%s\""
msgstr "La nota non è un \"Cose-da-fare\": \"%s\""
#, fuzzy
msgid ""
"Manages E2EE configuration. Commands are `enable`, `disable`, `decrypt`, "
"`status` and `target-status`."
"`status`, `decrypt-file` and `target-status`."
msgstr ""
"Gestisci la configurazione E2EE. I comandi sono `abilita`, `disabilita`, "
"`decripta`, `stato` e `stato-target`."
@@ -589,6 +590,20 @@ msgstr ""
msgid "Exporting to \"%s\" as \"%s\" format. Please wait..."
msgstr "Esportazione da \"%s\" come formato \"%s\". Si prega di attendere..."
msgid "Sidebar"
msgstr ""
msgid "Note list"
msgstr ""
#, fuzzy
msgid "Note title"
msgstr "Titolo del Taccuino:"
#, fuzzy
msgid "Note body"
msgstr "Taccuini"
#, javascript-format
msgid "Importing from \"%s\" as \"%s\" format. Please wait..."
msgstr "Importazione da \"%s\" come formato \"%s\". Si prega di attendere..."
@@ -596,7 +611,8 @@ msgstr "Importazione da \"%s\" come formato \"%s\". Si prega di attendere..."
msgid "PDF File"
msgstr "PDF File"
msgid "File"
#, fuzzy
msgid "&File"
msgstr "File"
msgid "New note"
@@ -614,6 +630,9 @@ msgstr "Importa"
msgid "Export"
msgstr "Esporta"
msgid "Synchronise"
msgstr "Sincronizza"
msgid "Print"
msgstr "Stampa"
@@ -624,7 +643,8 @@ msgstr "Nascondi %s"
msgid "Quit"
msgstr "Esci"
msgid "Edit"
#, fuzzy
msgid "&Edit"
msgstr "Modifica"
msgid "Copy"
@@ -645,6 +665,9 @@ msgstr "Grasseto"
msgid "Italic"
msgstr "Corsivo"
msgid "Link"
msgstr ""
msgid "Insert Date Time"
msgstr "Inserisci data e ora"
@@ -657,7 +680,8 @@ msgstr "Cerca in tutte le note"
msgid "Search in current note"
msgstr "Cerca nella nota corrente"
msgid "View"
#, fuzzy
msgid "&View"
msgstr "Vista"
msgid "Toggle sidebar"
@@ -666,7 +690,12 @@ msgstr "Attiva / disattiva barra laterale"
msgid "Toggle editor layout"
msgstr "Attiva / disattiva il layout dell'editor"
msgid "Tools"
#, fuzzy
msgid "Focus"
msgstr "Focus sul testo"
#, fuzzy
msgid "&Tools"
msgstr "Strumenti"
msgid "Synchronisation status"
@@ -681,7 +710,8 @@ msgstr "Opzioni Crittografia"
msgid "General Options"
msgstr "Opzioni Generali"
msgid "Help"
#, fuzzy
msgid "&Help"
msgstr "Aiuto"
msgid "Website and documentation"
@@ -724,11 +754,11 @@ msgid "An update is available, do you want to download it now?"
msgstr "È disponibile un aggiornamento, vuoi scaricarlo ora?"
#, javascript-format
msgid "Your version: v%s"
msgid "Your version: %s"
msgstr ""
#, javascript-format
msgid "New version: v%s"
msgid "New version: %s"
msgstr ""
msgid "Yes"
@@ -804,13 +834,16 @@ msgid ""
"access Joplin."
msgstr ""
msgid "Check synchronisation configuration"
msgstr "Controlla la configurazione della sincronizzazione"
#, javascript-format
msgid "Notes and settings are stored in: %s"
msgstr "Le note e le impostazioni sono memorizzate in: %s"
msgid "Browse..."
msgstr ""
msgid "Check synchronisation configuration"
msgstr "Controlla la configurazione della sincronizzazione"
msgid "Apply"
msgstr "Applica"
@@ -906,6 +939,10 @@ msgstr "Stato"
msgid "Encryption is:"
msgstr "La crittografia è:"
#, fuzzy
msgid "Usage"
msgstr "Uso: %s"
msgid "Back"
msgstr "Indietro"
@@ -956,34 +993,6 @@ msgstr "Alcuni elementi non possono essere decodificati."
msgid "Set the password"
msgstr "Imposta la password"
msgid "Add or remove tags"
msgstr "Aggiungi o rimuovi etichetta"
msgid "Duplicate"
msgstr "Duplicare"
#, javascript-format
msgid "%s - Copy"
msgstr "%s - Copia"
msgid "Switch between note and to-do type"
msgstr "Converti nota in \"Cose-da-fare\" e viceversa"
msgid "Switch to note type"
msgstr "Converti in nota"
msgid "Switch to to-do type"
msgstr "Converti in \"Cose-da-fare\""
msgid "Copy Markdown link"
msgstr "Copia il link Markdown"
msgid "Delete"
msgstr "Elimina"
msgid "Delete notes?"
msgstr "Eliminare le note?"
msgid "No notes in here. Create one by clicking on \"New note\"."
msgstr "Non è presente nessuna nota. Creane una cliccando \"Nuova nota\"."
@@ -1123,18 +1132,28 @@ msgstr "Opzioni di crittografia"
msgid "Clipper Options"
msgstr "Opzioni Clipper"
msgid "Remove this tag from all the notes?"
#, fuzzy, javascript-format
msgid ""
"Delete notebook \"%s\"?\n"
"\n"
"All notes and sub-notebooks within this notebook will also be deleted."
msgstr ""
"Eliminare taccuino? Anche tutte le note e cartelle di questo taccuino "
"saranno cancellati."
#, fuzzy, javascript-format
msgid "Remove tag \"%s\" from all notes?"
msgstr "Rimuovere questa etichetta da tutte le note?"
msgid "Remove this search from the sidebar?"
msgstr "Rimuovere questa ricerca dalla barra laterale?"
msgid "Delete"
msgstr "Elimina"
msgid "Rename"
msgstr "Rinomina"
msgid "Synchronise"
msgstr "Sincronizza"
msgid "Notebooks"
msgstr "Taccuini"
@@ -1149,6 +1168,39 @@ msgstr "Risorse: %d."
msgid "Please select where the sync status should be exported to"
msgstr ""
msgid "Table of contents"
msgstr ""
msgid "Add or remove tags"
msgstr "Aggiungi o rimuovi etichetta"
msgid "Duplicate"
msgstr "Duplicare"
#, javascript-format
msgid "%s - Copy"
msgstr "%s - Copia"
msgid "Switch between note and to-do type"
msgstr "Converti nota in \"Cose-da-fare\" e viceversa"
msgid "Switch to note type"
msgstr "Converti in nota"
msgid "Switch to to-do type"
msgstr "Converti in \"Cose-da-fare\""
msgid "Copy Markdown link"
msgstr "Copia il link Markdown"
#, fuzzy, javascript-format
msgid "Delete note \"%s\"?"
msgstr "Eliminare il taccuino \"%s\"?"
#, fuzzy, javascript-format
msgid "Delete these %d notes?"
msgstr "Cancellare queste note?"
#, javascript-format
msgid "Usage: %s"
msgstr "Uso: %s"
@@ -1267,6 +1319,12 @@ msgstr "Crittografato"
msgid "Encrypted items cannot be modified"
msgstr "Gli elementi crittografati non possono essere modificati"
msgid "title"
msgstr "Titolo"
msgid "updated date"
msgstr "Data di aggiornamento"
msgid "Conflicts"
msgstr "Conflitti"
@@ -1277,12 +1335,6 @@ msgstr "Impossibile spostare il Taccuino in questa posizione"
msgid "Notebooks cannot be named \"%s\", which is a reserved title."
msgstr "I blocchi non possono essere chiamati \"%s\". È un titolo riservato."
msgid "title"
msgstr "Titolo"
msgid "updated date"
msgstr "Data di aggiornamento"
msgid "created date"
msgstr "Data di creazione"
@@ -1327,6 +1379,10 @@ msgstr "Ordina le note per"
msgid "Reverse sort order"
msgstr "Inverti l'ordine"
#, fuzzy
msgid "Sort notebooks by"
msgstr "Ordina le note per"
msgid "Save geo-location with notes"
msgstr "Salva geolocalizzazione con le note"
@@ -1483,6 +1539,25 @@ msgstr "Ignora gli errori del certificato TLS"
msgid "Invalid option value: \"%s\". Possible values are: %s."
msgstr "Opzione non valida: \"%s\". I valori possibili sono: %s."
#, fuzzy
msgid "General"
msgstr "Opzioni Generali"
#, fuzzy
msgid "Synchronisation"
msgstr "Stato di sincronizzazione"
msgid "Appearance"
msgstr ""
#, fuzzy
msgid "Note"
msgstr "Taccuini"
#, fuzzy
msgid "Application"
msgstr "Esci dall'applicazione."
#, javascript-format
msgid "The tag \"%s\" already exists. Please choose a different name."
msgstr "Il tag \"%s\" esiste già. Scegliere un nome differente."
@@ -1502,6 +1577,9 @@ msgstr "Esporta files di Evernote"
msgid "Json Export Directory"
msgstr "Cartella di esportazione JSON"
msgid "File"
msgstr "File"
msgid "Directory"
msgstr "Cartella"
@@ -1689,10 +1767,6 @@ msgstr ""
msgid "Joplin website"
msgstr "Sito web Joplin"
#, javascript-format
msgid "Joplin v%s"
msgstr "Joplin v%s"
#, javascript-format
msgid "Database v%s"
msgstr "Database v%s"
@@ -1789,6 +1863,9 @@ msgstr "Guarda sulla mappa"
msgid "Go to source URL"
msgstr ""
msgid "Edit"
msgstr "Modifica"
msgid "Delete notebook"
msgstr "Cancella Taccuino"
@@ -1812,6 +1889,12 @@ msgstr ""
msgid "Welcome"
msgstr "Benvenuto"
#~ msgid "Joplin v%s"
#~ msgstr "Joplin v%s"
#~ msgid "Delete notes?"
#~ msgstr "Eliminare le note?"
#~ msgid "State: %s."
#~ msgstr "Stato: %s."
@@ -1878,9 +1961,6 @@ msgstr "Benvenuto"
#~ msgid "Cancel the current command."
#~ msgstr "Cancella il comando corrente."
#~ msgid "Exit the application."
#~ msgstr "Esci dall'applicazione."
#~ msgid "Delete the currently selected note or notebook."
#~ msgstr "Elimina la nota o il taccuino selezionato."
@@ -1927,8 +2007,5 @@ msgstr "Benvenuto"
#~ msgid "Delete notebook?"
#~ msgstr "Eliminare il taccuino?"
#~ msgid "Delete notebook \"%s\"?"
#~ msgstr "Eliminare il taccuino \"%s\"?"
#~ msgid "File system synchronisation target directory"
#~ msgstr "Directory di destinazione per la sincronizzazione nel file system"

View File

@@ -123,9 +123,10 @@ msgstr "ToDoを完了としてマークします。"
msgid "Note is not a to-do: \"%s\""
msgstr "ノートはToDoリストではありません:\"%s\""
#, fuzzy
msgid ""
"Manages E2EE configuration. Commands are `enable`, `disable`, `decrypt`, "
"`status` and `target-status`."
"`status`, `decrypt-file` and `target-status`."
msgstr ""
"E2EEの設定を変更します。コマンドは `enable`, `disable`, `decrypt`, `status` "
"and `target-status` です。"
@@ -570,6 +571,20 @@ msgid "Exporting to \"%s\" as \"%s\" format. Please wait..."
msgstr ""
"\"%s\" を \"%s\" フォーマットにエクスポート中。しばらくお待ちください..."
msgid "Sidebar"
msgstr ""
msgid "Note list"
msgstr ""
#, fuzzy
msgid "Note title"
msgstr "ノートブックの題名:"
#, fuzzy
msgid "Note body"
msgstr "ノートブック"
#, javascript-format
msgid "Importing from \"%s\" as \"%s\" format. Please wait..."
msgstr ""
@@ -578,7 +593,8 @@ msgstr ""
msgid "PDF File"
msgstr "PDF ファイル"
msgid "File"
#, fuzzy
msgid "&File"
msgstr "ファイル"
msgid "New note"
@@ -596,6 +612,9 @@ msgstr "インポート"
msgid "Export"
msgstr "エクスポート"
msgid "Synchronise"
msgstr "同期"
msgid "Print"
msgstr "印刷"
@@ -606,7 +625,8 @@ msgstr "%s を隠す"
msgid "Quit"
msgstr "終了"
msgid "Edit"
#, fuzzy
msgid "&Edit"
msgstr "編集"
msgid "Copy"
@@ -627,6 +647,9 @@ msgstr "太字"
msgid "Italic"
msgstr "斜体"
msgid "Link"
msgstr ""
msgid "Insert Date Time"
msgstr "日付の入力"
@@ -639,7 +662,8 @@ msgstr "すべてのノートを検索"
msgid "Search in current note"
msgstr "現在のノートを検索"
msgid "View"
#, fuzzy
msgid "&View"
msgstr "表示"
msgid "Toggle sidebar"
@@ -648,7 +672,12 @@ msgstr "サイドバーの表示切り替え"
msgid "Toggle editor layout"
msgstr "エディターレイアウトの表示切り替え"
msgid "Tools"
#, fuzzy
msgid "Focus"
msgstr "本文にフォーカス"
#, fuzzy
msgid "&Tools"
msgstr "ツール"
msgid "Synchronisation status"
@@ -663,7 +692,8 @@ msgstr "暗号化のオプション"
msgid "General Options"
msgstr "全般のオプション"
msgid "Help"
#, fuzzy
msgid "&Help"
msgstr "ヘルプ"
msgid "Website and documentation"
@@ -706,11 +736,11 @@ msgid "An update is available, do you want to download it now?"
msgstr "アップデートがあります。すぐにダウンロードしますか?"
#, javascript-format
msgid "Your version: v%s"
msgid "Your version: %s"
msgstr ""
#, javascript-format
msgid "New version: v%s"
msgid "New version: %s"
msgstr ""
msgid "Yes"
@@ -786,13 +816,16 @@ msgstr ""
"この認証トークンはサードパーティアプリケーションがJoplinにアクセスするためだ"
"けに必要です。"
msgid "Check synchronisation configuration"
msgstr "同期の設定を確認する"
#, javascript-format
msgid "Notes and settings are stored in: %s"
msgstr "ノートと設定は次の場所に保存されます: %s"
msgid "Browse..."
msgstr ""
msgid "Check synchronisation configuration"
msgstr "同期の設定を確認する"
msgid "Apply"
msgstr "適用"
@@ -884,6 +917,10 @@ msgstr "状態"
msgid "Encryption is:"
msgstr "暗号化の状態:"
#, fuzzy
msgid "Usage"
msgstr "使用方法: %s"
msgid "Back"
msgstr "戻る"
@@ -936,34 +973,6 @@ msgstr "いくつかの項目は復号されませんでした。"
msgid "Set the password"
msgstr "パスワードの設定"
msgid "Add or remove tags"
msgstr "タグの追加と削除"
msgid "Duplicate"
msgstr "複製"
#, javascript-format
msgid "%s - Copy"
msgstr "%s - コピー"
msgid "Switch between note and to-do type"
msgstr "ノートとToDoを切り替え"
msgid "Switch to note type"
msgstr "ノートに切り替え"
msgid "Switch to to-do type"
msgstr "ToDoに切り替え"
msgid "Copy Markdown link"
msgstr "Markdownのリンクをコピー"
msgid "Delete"
msgstr "削除"
msgid "Delete notes?"
msgstr "ノートを削除しますか?"
msgid "No notes in here. Create one by clicking on \"New note\"."
msgstr "ノートがありません。新しいノートを作成して下さい。"
@@ -1100,18 +1109,28 @@ msgstr "暗号化のオプション"
msgid "Clipper Options"
msgstr "Clipperのオプション"
msgid "Remove this tag from all the notes?"
#, fuzzy, javascript-format
msgid ""
"Delete notebook \"%s\"?\n"
"\n"
"All notes and sub-notebooks within this notebook will also be deleted."
msgstr ""
"ノートブックを削除しますか? このノートブックにあるノートとサブノートはすべ"
"て消えてしまいます。"
#, fuzzy, javascript-format
msgid "Remove tag \"%s\" from all notes?"
msgstr "すべてのノートからこのタグを削除しますか?"
msgid "Remove this search from the sidebar?"
msgstr "サイドバーからこの検索を削除しますか?"
msgid "Delete"
msgstr "削除"
msgid "Rename"
msgstr "名前の変更"
msgid "Synchronise"
msgstr "同期"
msgid "Notebooks"
msgstr "ノートブック"
@@ -1126,6 +1145,39 @@ msgstr "取得中のリソース: %d"
msgid "Please select where the sync status should be exported to"
msgstr "同期状況の出力先を選択してください"
msgid "Table of contents"
msgstr ""
msgid "Add or remove tags"
msgstr "タグの追加と削除"
msgid "Duplicate"
msgstr "複製"
#, javascript-format
msgid "%s - Copy"
msgstr "%s - コピー"
msgid "Switch between note and to-do type"
msgstr "ノートとToDoを切り替え"
msgid "Switch to note type"
msgstr "ノートに切り替え"
msgid "Switch to to-do type"
msgstr "ToDoに切り替え"
msgid "Copy Markdown link"
msgstr "Markdownのリンクをコピー"
#, fuzzy, javascript-format
msgid "Delete note \"%s\"?"
msgstr "ノートを削除しますか?"
#, fuzzy, javascript-format
msgid "Delete these %d notes?"
msgstr "ノートを削除しますか?"
#, javascript-format
msgid "Usage: %s"
msgstr "使用方法: %s"
@@ -1244,6 +1296,12 @@ msgstr "暗号化済"
msgid "Encrypted items cannot be modified"
msgstr "暗号化したアイテムは修正できません"
msgid "title"
msgstr "タイトル"
msgid "updated date"
msgstr "アップデート日"
msgid "Conflicts"
msgstr "衝突"
@@ -1256,12 +1314,6 @@ msgstr ""
"\"%s\" というノートブックの名称はシステムで使用するために予約済みです。名称の"
"変更はできません。"
msgid "title"
msgstr "タイトル"
msgid "updated date"
msgstr "アップデート日"
msgid "created date"
msgstr "作成日"
@@ -1306,6 +1358,10 @@ msgstr "ノートのソート方法"
msgid "Reverse sort order"
msgstr "逆順に並び替え"
#, fuzzy
msgid "Sort notebooks by"
msgstr "ノートのソート方法"
msgid "Save geo-location with notes"
msgstr "ノートに位置情報を保存"
@@ -1358,11 +1414,11 @@ msgid "Automatically update the application"
msgstr "アプリケーションを自動的にアップデート"
msgid "Get pre-releases when checking for updates"
msgstr ""
msgstr "更新をチェックする時、開発版を取得する"
#, javascript-format
msgid "See the pre-release page for more details: %s"
msgstr ""
msgstr "詳細についてはプレリリースページを参照してください: %s"
msgid "Synchronisation interval"
msgstr "同期間隔"
@@ -1461,6 +1517,25 @@ msgstr "TLS証明書のエラーを無視"
msgid "Invalid option value: \"%s\". Possible values are: %s."
msgstr "無効な設定値: \"%s\"。有効な値は: %sです。"
#, fuzzy
msgid "General"
msgstr "全般のオプション"
#, fuzzy
msgid "Synchronisation"
msgstr "同期状況"
msgid "Appearance"
msgstr ""
#, fuzzy
msgid "Note"
msgstr "ノートブック"
#, fuzzy
msgid "Application"
msgstr "場所"
#, javascript-format
msgid "The tag \"%s\" already exists. Please choose a different name."
msgstr "タグ \"%s\" はすでにあります。ほかの名前を選択してください。"
@@ -1480,6 +1555,9 @@ msgstr "Evernote エクスポートファイル"
msgid "Json Export Directory"
msgstr "Json エクスポートディレクトリ"
msgid "File"
msgstr "ファイル"
msgid "Directory"
msgstr "ディレクトリ"
@@ -1666,10 +1744,6 @@ msgstr "- 位置情報: ノートに位置情報を添付するのに必要で
msgid "Joplin website"
msgstr "JoplinのWebサイト"
#, fuzzy, javascript-format
msgid "Joplin v%s"
msgstr "JoplinのWebサイト"
#, javascript-format
msgid "Database v%s"
msgstr ""
@@ -1766,6 +1840,9 @@ msgstr "地図上に表示"
msgid "Go to source URL"
msgstr "ソースURLに行く"
msgid "Edit"
msgstr "編集"
msgid "Delete notebook"
msgstr "ノートブックを削除"
@@ -1790,6 +1867,10 @@ msgstr ""
msgid "Welcome"
msgstr "ようこそ"
#, fuzzy
#~ msgid "Joplin v%s"
#~ msgstr "JoplinのWebサイト"
#~ msgid "State: %s."
#~ msgstr "状態: \"%s\"."

View File

@@ -119,7 +119,7 @@ msgstr ""
msgid ""
"Manages E2EE configuration. Commands are `enable`, `disable`, `decrypt`, "
"`status` and `target-status`."
"`status`, `decrypt-file` and `target-status`."
msgstr ""
msgid "Enter master password:"
@@ -508,6 +508,18 @@ msgstr ""
msgid "Exporting to \"%s\" as \"%s\" format. Please wait..."
msgstr ""
msgid "Sidebar"
msgstr ""
msgid "Note list"
msgstr ""
msgid "Note title"
msgstr ""
msgid "Note body"
msgstr ""
#, javascript-format
msgid "Importing from \"%s\" as \"%s\" format. Please wait..."
msgstr ""
@@ -515,7 +527,7 @@ msgstr ""
msgid "PDF File"
msgstr ""
msgid "File"
msgid "&File"
msgstr ""
msgid "New note"
@@ -533,6 +545,9 @@ msgstr ""
msgid "Export"
msgstr ""
msgid "Synchronise"
msgstr ""
msgid "Print"
msgstr ""
@@ -543,7 +558,7 @@ msgstr ""
msgid "Quit"
msgstr ""
msgid "Edit"
msgid "&Edit"
msgstr ""
msgid "Copy"
@@ -564,6 +579,9 @@ msgstr ""
msgid "Italic"
msgstr ""
msgid "Link"
msgstr ""
msgid "Insert Date Time"
msgstr ""
@@ -576,7 +594,7 @@ msgstr ""
msgid "Search in current note"
msgstr ""
msgid "View"
msgid "&View"
msgstr ""
msgid "Toggle sidebar"
@@ -585,7 +603,10 @@ msgstr ""
msgid "Toggle editor layout"
msgstr ""
msgid "Tools"
msgid "Focus"
msgstr ""
msgid "&Tools"
msgstr ""
msgid "Synchronisation status"
@@ -600,7 +621,7 @@ msgstr ""
msgid "General Options"
msgstr ""
msgid "Help"
msgid "&Help"
msgstr ""
msgid "Website and documentation"
@@ -643,11 +664,11 @@ msgid "An update is available, do you want to download it now?"
msgstr ""
#, javascript-format
msgid "Your version: v%s"
msgid "Your version: %s"
msgstr ""
#, javascript-format
msgid "New version: v%s"
msgid "New version: %s"
msgstr ""
msgid "Yes"
@@ -716,13 +737,16 @@ msgid ""
"access Joplin."
msgstr ""
msgid "Check synchronisation configuration"
msgstr ""
#, javascript-format
msgid "Notes and settings are stored in: %s"
msgstr ""
msgid "Browse..."
msgstr ""
msgid "Check synchronisation configuration"
msgstr ""
msgid "Apply"
msgstr ""
@@ -801,6 +825,9 @@ msgstr ""
msgid "Encryption is:"
msgstr ""
msgid "Usage"
msgstr ""
msgid "Back"
msgstr ""
@@ -851,34 +878,6 @@ msgstr ""
msgid "Set the password"
msgstr ""
msgid "Add or remove tags"
msgstr ""
msgid "Duplicate"
msgstr ""
#, javascript-format
msgid "%s - Copy"
msgstr ""
msgid "Switch between note and to-do type"
msgstr ""
msgid "Switch to note type"
msgstr ""
msgid "Switch to to-do type"
msgstr ""
msgid "Copy Markdown link"
msgstr ""
msgid "Delete"
msgstr ""
msgid "Delete notes?"
msgstr ""
msgid "No notes in here. Create one by clicking on \"New note\"."
msgstr ""
@@ -1013,16 +1012,24 @@ msgstr ""
msgid "Clipper Options"
msgstr ""
msgid "Remove this tag from all the notes?"
#, javascript-format
msgid ""
"Delete notebook \"%s\"?\n"
"\n"
"All notes and sub-notebooks within this notebook will also be deleted."
msgstr ""
#, javascript-format
msgid "Remove tag \"%s\" from all notes?"
msgstr ""
msgid "Remove this search from the sidebar?"
msgstr ""
msgid "Rename"
msgid "Delete"
msgstr ""
msgid "Synchronise"
msgid "Rename"
msgstr ""
msgid "Notebooks"
@@ -1039,6 +1046,39 @@ msgstr ""
msgid "Please select where the sync status should be exported to"
msgstr ""
msgid "Table of contents"
msgstr ""
msgid "Add or remove tags"
msgstr ""
msgid "Duplicate"
msgstr ""
#, javascript-format
msgid "%s - Copy"
msgstr ""
msgid "Switch between note and to-do type"
msgstr ""
msgid "Switch to note type"
msgstr ""
msgid "Switch to to-do type"
msgstr ""
msgid "Copy Markdown link"
msgstr ""
#, javascript-format
msgid "Delete note \"%s\"?"
msgstr ""
#, javascript-format
msgid "Delete these %d notes?"
msgstr ""
#, javascript-format
msgid "Usage: %s"
msgstr ""
@@ -1149,6 +1189,12 @@ msgstr ""
msgid "Encrypted items cannot be modified"
msgstr ""
msgid "title"
msgstr ""
msgid "updated date"
msgstr ""
msgid "Conflicts"
msgstr ""
@@ -1159,12 +1205,6 @@ msgstr ""
msgid "Notebooks cannot be named \"%s\", which is a reserved title."
msgstr ""
msgid "title"
msgstr ""
msgid "updated date"
msgstr ""
msgid "created date"
msgstr ""
@@ -1209,6 +1249,9 @@ msgstr ""
msgid "Reverse sort order"
msgstr ""
msgid "Sort notebooks by"
msgstr ""
msgid "Save geo-location with notes"
msgstr ""
@@ -1347,6 +1390,21 @@ msgstr ""
msgid "Invalid option value: \"%s\". Possible values are: %s."
msgstr ""
msgid "General"
msgstr ""
msgid "Synchronisation"
msgstr ""
msgid "Appearance"
msgstr ""
msgid "Note"
msgstr ""
msgid "Application"
msgstr ""
#, javascript-format
msgid "The tag \"%s\" already exists. Please choose a different name."
msgstr ""
@@ -1366,6 +1424,9 @@ msgstr ""
msgid "Json Export Directory"
msgstr ""
msgid "File"
msgstr ""
msgid "Directory"
msgstr ""
@@ -1536,10 +1597,6 @@ msgstr ""
msgid "Joplin website"
msgstr ""
#, javascript-format
msgid "Joplin v%s"
msgstr ""
#, javascript-format
msgid "Database v%s"
msgstr ""
@@ -1635,6 +1692,9 @@ msgstr ""
msgid "Go to source URL"
msgstr ""
msgid "Edit"
msgstr ""
msgid "Delete notebook"
msgstr ""

View File

@@ -124,9 +124,10 @@ msgstr "'할 일' 항목을 완료로 표시합니다."
msgid "Note is not a to-do: \"%s\""
msgstr "노트는 '할 일' 항목이 아닙니다: \"%s\""
#, fuzzy
msgid ""
"Manages E2EE configuration. Commands are `enable`, `disable`, `decrypt`, "
"`status` and `target-status`."
"`status`, `decrypt-file` and `target-status`."
msgstr ""
"E2EE(종단간 암호화) 설정을 관리합니다. 명령어는 `enable`, `disable`, "
"`decrypt`, `status`, `target-status` 입니다."
@@ -447,12 +448,11 @@ msgid "Starting synchronisation..."
msgstr "동기화를 시작합니다..."
msgid "Downloading resources..."
msgstr ""
msgstr "리소스 다운로드 중..."
msgid "Cancelling... Please wait."
msgstr "취소하는 중입니다... 잠시만 기다리세요."
#, fuzzy
msgid ""
"<tag-command> can be \"add\", \"remove\" or \"list\" to assign or remove "
"[tag] from [note], or to list the notes associated with [tag]. The command "
@@ -460,7 +460,8 @@ msgid ""
msgstr ""
"[note]로부터 [tag]를 지우거나 지정할 때, 아니면 [tag]와 관련된 노트의 목록을 "
"확인할 때 <tag-command>로 \"add\", \"remove\" 또는 \"list\" 를 사용할 수 있습"
"니다. `tag list` 명령어로 모든 태그의 목록을 확인할 수 있습니다."
"니다. `tag list` 명령어로 모든 태그의 목록을 확인할 수 있습니다 (옵션 -l 사"
"용 가능)."
#, javascript-format
msgid "Invalid command: \"%s\""
@@ -568,6 +569,20 @@ msgstr ""
msgid "Exporting to \"%s\" as \"%s\" format. Please wait..."
msgstr "\"%s\"에 \"%s\" 포맷으로 내보내는 중입니다. 잠시만 기다리세요..."
msgid "Sidebar"
msgstr ""
msgid "Note list"
msgstr ""
#, fuzzy
msgid "Note title"
msgstr "노트북 제목:"
#, fuzzy
msgid "Note body"
msgstr "노트북"
#, javascript-format
msgid "Importing from \"%s\" as \"%s\" format. Please wait..."
msgstr "\"%s\"에서 \"%s\" 포맷으로 가져오는 중입니다. 잠시만 기다리세요..."
@@ -575,7 +590,8 @@ msgstr "\"%s\"에서 \"%s\" 포맷으로 가져오는 중입니다. 잠시만
msgid "PDF File"
msgstr "PDF 파일"
msgid "File"
#, fuzzy
msgid "&File"
msgstr "파일"
msgid "New note"
@@ -593,6 +609,9 @@ msgstr "가져오기"
msgid "Export"
msgstr "내보내기"
msgid "Synchronise"
msgstr "동기화"
msgid "Print"
msgstr "인쇄"
@@ -603,7 +622,8 @@ msgstr "%s 숨기기"
msgid "Quit"
msgstr "종료"
msgid "Edit"
#, fuzzy
msgid "&Edit"
msgstr "편집"
msgid "Copy"
@@ -615,9 +635,8 @@ msgstr "잘라내기"
msgid "Paste"
msgstr "붙여넣기"
#, fuzzy
msgid "Select all"
msgstr "날짜 선택"
msgstr "모두 선택"
msgid "Bold"
msgstr "굵게"
@@ -625,6 +644,9 @@ msgstr "굵게"
msgid "Italic"
msgstr "기울임"
msgid "Link"
msgstr ""
msgid "Insert Date Time"
msgstr "날짜와 시간 입력"
@@ -634,11 +656,11 @@ msgstr "외부 편집기에서 편집하기"
msgid "Search in all the notes"
msgstr "모든 노트에서 검색"
#, fuzzy
msgid "Search in current note"
msgstr "모든 노트에서 검색"
msgstr "현재 노트에서 검색"
msgid "View"
#, fuzzy
msgid "&View"
msgstr "보기"
msgid "Toggle sidebar"
@@ -647,7 +669,12 @@ msgstr "사이드바 표시 전환"
msgid "Toggle editor layout"
msgstr "편집기 배치 형태 전환"
msgid "Tools"
#, fuzzy
msgid "Focus"
msgstr "내용에 포커스"
#, fuzzy
msgid "&Tools"
msgstr "도구"
msgid "Synchronisation status"
@@ -662,7 +689,8 @@ msgstr "암호화 옵션"
msgid "General Options"
msgstr "일반 옵션"
msgid "Help"
#, fuzzy
msgid "&Help"
msgstr "도움말"
msgid "Website and documentation"
@@ -699,18 +727,18 @@ msgstr "현재 버전은 최신입니다."
#, javascript-format
msgid "%s (pre-release)"
msgstr ""
msgstr "%s (프리-릴리즈)"
msgid "An update is available, do you want to download it now?"
msgstr "업데이트가 있습니다. 지금 다운로드할까요?"
#, javascript-format
msgid "Your version: v%s"
msgstr ""
msgid "Your version: %s"
msgstr "현재 버전: %s"
#, javascript-format
msgid "New version: v%s"
msgstr ""
msgid "New version: %s"
msgstr "새 버전: %s"
msgid "Yes"
msgstr "예"
@@ -719,7 +747,7 @@ msgid "No"
msgstr "아니오"
msgid "Token has been copied to the clipboard!"
msgstr ""
msgstr "토큰이 클립보드로 복사되었습니다!"
msgid "The web clipper service is enabled and set to auto-start."
msgstr "웹 수집기 서비스가 활성화되었고 자동으로 시작하도록 설정되었습니다."
@@ -768,28 +796,32 @@ msgstr "2단계: 확장 기능 설치"
msgid "Download and install the relevant extension for your browser:"
msgstr "브라우저에 적절한 확장 기능을 다운로드 및 설치하세요:"
#, fuzzy
msgid "Advanced options"
msgstr "고급 옵션"
msgid "Authorisation token:"
msgstr ""
msgstr "인증 토큰:"
msgid "Copy token"
msgstr ""
msgstr "토큰 복사"
msgid ""
"This authorisation token is only needed to allow third-party applications to "
"access Joplin."
msgstr ""
msgid "Check synchronisation configuration"
msgstr "동기화 설정 확인"
"이 인증 토큰은 오직 서드파티 애플리케이션에서 조플린을 접근할 때만 필요합니"
"다."
#, javascript-format
msgid "Notes and settings are stored in: %s"
msgstr "노트와 설정값이 다음에 저장되었습니다: %s"
msgid "Browse..."
msgstr ""
msgid "Check synchronisation configuration"
msgstr "동기화 설정 확인"
msgid "Apply"
msgstr "적용"
@@ -881,6 +913,10 @@ msgstr "상태"
msgid "Encryption is:"
msgstr "암호화는 다음과 같습니다:"
#, fuzzy
msgid "Usage"
msgstr "사용량: %s"
msgid "Back"
msgstr "뒤로 가기"
@@ -931,36 +967,6 @@ msgstr "일부 항목들은 암호화할 수 없습니다."
msgid "Set the password"
msgstr "암호 설정"
msgid "Add or remove tags"
msgstr "태그 추가 및 제거"
msgid "Duplicate"
msgstr "복제"
#, javascript-format
msgid "%s - Copy"
msgstr "%s - 복사"
msgid "Switch between note and to-do type"
msgstr "'노트' 또는'할 일' 형식으로 전환합니다."
#, fuzzy
msgid "Switch to note type"
msgstr "'노트' 또는'할 일' 형식으로 전환합니다."
#, fuzzy
msgid "Switch to to-do type"
msgstr "'노트' 또는'할 일' 형식으로 전환합니다."
msgid "Copy Markdown link"
msgstr "마크다운 링크 복사"
msgid "Delete"
msgstr "삭제"
msgid "Delete notes?"
msgstr "노트를 삭제할까요?"
msgid "No notes in here. Create one by clicking on \"New note\"."
msgstr "노트가 없습니다. '새 노트'를 선택해서 노트를 새로 만드세요."
@@ -969,13 +975,13 @@ msgid ""
msgstr "노트북이 없습니다. '새 노트북'을 선택해서 노트북을 새로 만드세요."
msgid "Location"
msgstr ""
msgstr "위치"
msgid "URL"
msgstr ""
msgstr "URL"
msgid "Note properties"
msgstr ""
msgstr "노트 속성"
msgid "Open..."
msgstr "열기..."
@@ -994,7 +1000,7 @@ msgid "Copy Link Address"
msgstr "링크 주소 복사"
msgid "This attachment is not downloaded or not decrypted yet."
msgstr ""
msgstr "이 첨부는 아직 다운로드 또는 복호화 되지 않았습니다."
#, javascript-format
msgid "Unsupported link or message: %s"
@@ -1009,7 +1015,7 @@ msgstr ""
"요."
msgid "Only one note can be printed or exported to PDF at a time."
msgstr ""
msgstr "한 번에 오직 하나의 노트만 출력하거나 내보내기 할 수 있습니다."
msgid "strong text"
msgstr "중요 텍스트"
@@ -1097,18 +1103,28 @@ msgstr "암호화 옵션"
msgid "Clipper Options"
msgstr "수집기 옵션"
msgid "Remove this tag from all the notes?"
#, fuzzy, javascript-format
msgid ""
"Delete notebook \"%s\"?\n"
"\n"
"All notes and sub-notebooks within this notebook will also be deleted."
msgstr ""
"노트북을 삭제할까요? 이 노트북 안에 있는 모든 노트와 하위 노트북들도 함께 삭"
"제됩니다."
#, fuzzy, javascript-format
msgid "Remove tag \"%s\" from all notes?"
msgstr "모든 노트에서 이 태그를 제거할까요?"
msgid "Remove this search from the sidebar?"
msgstr "사이드바에서 이 검색 항목을 제거할까요?"
msgid "Delete"
msgstr "삭제"
msgid "Rename"
msgstr "이름 바꾸기"
msgid "Synchronise"
msgstr "동기화"
msgid "Notebooks"
msgstr "노트북"
@@ -1116,13 +1132,46 @@ msgstr "노트북"
msgid "Decrypting items: %d/%d"
msgstr "복호화 항목: %d/%d"
#, fuzzy, javascript-format
#, javascript-format
msgid "Fetching resources: %d"
msgstr "리소스: %d."
msgstr "리소스 가져오는 중: %d."
msgid "Please select where the sync status should be exported to"
msgstr "동기화 상태를 내보낼 대상을 선택하세요"
msgid "Table of contents"
msgstr ""
msgid "Add or remove tags"
msgstr "태그 추가 및 제거"
msgid "Duplicate"
msgstr "복제"
#, javascript-format
msgid "%s - Copy"
msgstr "%s - 복사"
msgid "Switch between note and to-do type"
msgstr "'노트' 또는'할 일' 형식으로 전환합니다."
msgid "Switch to note type"
msgstr "'노트' 형식으로 전환합니다."
msgid "Switch to to-do type"
msgstr "'할 일' 형식으로 전환합니다."
msgid "Copy Markdown link"
msgstr "마크다운 링크 복사"
#, fuzzy, javascript-format
msgid "Delete note \"%s\"?"
msgstr "노트를 삭제할까요?"
#, fuzzy, javascript-format
msgid "Delete these %d notes?"
msgstr "노트를 삭제할까요?"
#, javascript-format
msgid "Usage: %s"
msgstr "사용량: %s"
@@ -1241,6 +1290,12 @@ msgstr "암호화됨"
msgid "Encrypted items cannot be modified"
msgstr "암호화된 항목은 변경될 수 없습니다"
msgid "title"
msgstr "제목"
msgid "updated date"
msgstr "업데이트된 날짜"
msgid "Conflicts"
msgstr "충돌"
@@ -1251,12 +1306,6 @@ msgstr "노트북을 이 위치로 옮길 수 없습니다"
msgid "Notebooks cannot be named \"%s\", which is a reserved title."
msgstr "노트북을 \"%s\" 제목으로 정할 수 없습니다. 이미 예약중입니다."
msgid "title"
msgstr "제목"
msgid "updated date"
msgstr "업데이트된 날짜"
msgid "created date"
msgstr "만들어진 날짜"
@@ -1301,6 +1350,10 @@ msgstr "노트를 다음 기준으로 정렬"
msgid "Reverse sort order"
msgstr "정렬 순서 반전"
#, fuzzy
msgid "Sort notebooks by"
msgstr "노트를 다음 기준으로 정렬"
msgid "Save geo-location with notes"
msgstr "노트에 지리적 위치 정보 포함시키기"
@@ -1327,16 +1380,17 @@ msgid ""
"this setting so that your notes are constantly being synchronised, thus "
"reducing the number of conflicts."
msgstr ""
"조플린을 백그라운드에서 구동합니다. 노트가 정기적으로 동기화 되어 충돌 횟수"
"를 줄이기 위해 이 옵션을 활성화 하는 것을 추천합니다."
msgid "Start application minimised in the tray icon"
msgstr ""
msgstr "트레이 아이콘에 최소화 된 상태로 애플리케이션 시작"
msgid "Global zoom percentage"
msgstr "전체적 확대 비율"
#, fuzzy
msgid "Editor font size"
msgstr "편집기 글꼴 집합"
msgstr "편집기 글꼴 크기"
msgid "Editor font family"
msgstr "편집기 글꼴 집합"
@@ -1353,11 +1407,11 @@ msgid "Automatically update the application"
msgstr "애플리케이션을 자동으로 업데이트"
msgid "Get pre-releases when checking for updates"
msgstr ""
msgstr "업데이트 확인 시 프리-릴리즈 받기"
#, javascript-format
msgid "See the pre-release page for more details: %s"
msgstr ""
msgstr "자세한 내용은 프리-릴리즈 페이지를 참조하세요: %s"
msgid "Synchronisation interval"
msgstr "동기화 간격"
@@ -1416,6 +1470,8 @@ msgid ""
"to it before syncing, otherwise all files will be removed! See the FAQ for "
"more details: %s"
msgstr ""
"주의: 이 위치를 변경하시려면, 동기화 전에 모든 컨텐트를 복사했는지 확인하세"
"요, 그렇지 않으면 모든 파일이 삭제됩니다! 자세한 정보는 FAQ를 참조하세요: %s"
msgid "Nextcloud username"
msgstr "Nextcloud 사용자 이름"
@@ -1453,9 +1509,28 @@ msgstr "TLS 인증서 오류 무시"
msgid "Invalid option value: \"%s\". Possible values are: %s."
msgstr "올바르지 않은 옵션 값: \"%s\". 가능한 값은 다음과 같습니다: \"%s\"."
#, fuzzy
msgid "General"
msgstr "일반 옵션"
#, fuzzy
msgid "Synchronisation"
msgstr "동기화 상태"
msgid "Appearance"
msgstr ""
#, fuzzy
msgid "Note"
msgstr "노트북"
#, fuzzy
msgid "Application"
msgstr "위치"
#, javascript-format
msgid "The tag \"%s\" already exists. Please choose a different name."
msgstr ""
msgstr "태그 \"%s\"(이)가 이미 존재합니다. 다른 이름을 선택해 주세요."
msgid "Joplin Export File"
msgstr "조플린 내보내기 파일"
@@ -1469,9 +1544,11 @@ msgstr "조플린 내보내기 폴더"
msgid "Evernote Export File"
msgstr "에버노트 내보내기 파일"
#, fuzzy
msgid "Json Export Directory"
msgstr "조플린 내보내기 폴더"
msgstr "Json 내보내기 폴더"
msgid "File"
msgstr "파일"
msgid "Directory"
msgstr "폴더"
@@ -1548,10 +1625,10 @@ msgid "On %s: %s"
msgstr "%s: %s"
msgid "Permission to use camera"
msgstr ""
msgstr "카메라 사용 허가"
msgid "Your permission to use your camera is required."
msgstr ""
msgstr "카메라 사용을 허가가 요구됩니다."
msgid "There are currently no notes. Create one by clicking on the (+) button."
msgstr "노트가 없습니다. (+) 버튼을 선택해 새로 만드세요."
@@ -1581,9 +1658,8 @@ msgstr "%d 노트를 \"%s\" 노트북으로 옮길까요?"
msgid "Press to set the decryption password."
msgstr "복호화 암호를 설정하려면 누르세요."
#, fuzzy
msgid "Clear alarm"
msgstr "알람 설정"
msgstr "알람 취소"
msgid "Save alarm"
msgstr "알람 저장"
@@ -1597,20 +1673,19 @@ msgstr "확인"
msgid "Cancel synchronisation"
msgstr "동기화 취소"
#, fuzzy
msgid "Checking... Please wait."
msgstr "취소하는 중입니다... 잠시만 기다리세요."
msgstr "확인 중입니다... 잠시만 기다리세요."
#, fuzzy
msgid "Success! Synchronisation configuration appears to be correct."
msgstr "동기화 설정 확인"
msgstr "성공! 동기화 설정이 올바릅니다."
msgid ""
"Error. Please check that URL, username, password, etc. are correct and that "
"the sync target is accessible. The reported error was:"
msgstr ""
"Error. Please check that URL, username, password, etc. are correct and that "
"the sync target is accessible. The reported error was:"
#, fuzzy
msgid "The application has been authorised!"
msgstr "애플리케이션이 성공적으로 허가되었습니다."
@@ -1622,10 +1697,15 @@ msgid ""
"\n"
"Please try again."
msgstr ""
"애플리케이션을 허가할 수 없습니다:\n"
"\n"
"%s\n"
"\n"
"다시 시도해 주세요."
#, fuzzy, javascript-format
#, javascript-format
msgid "Decrypted items: %s / %s"
msgstr "복호화 항목: %d/%d"
msgstr "복호화 항목: %s / %s"
msgid "New tags:"
msgstr "새 태그:"
@@ -1656,23 +1736,19 @@ msgstr "- 위치: 지리적 위치 정보를 노트에 첨부하기 위해서
msgid "Joplin website"
msgstr "조플린 웹사이트"
#, fuzzy, javascript-format
msgid "Joplin v%s"
msgstr "조플린 웹사이트"
#, javascript-format
msgid "Database v%s"
msgstr ""
msgstr "데이터베이스 v%s"
#, fuzzy, javascript-format
#, javascript-format
msgid "FTS enabled: %d"
msgstr "삭제: %d"
msgstr "FTS 활성됨: %d"
msgid "Login with Dropbox"
msgstr "Dropbox로 로그인"
msgid "Enter code here"
msgstr ""
msgstr "여기에 코드를 입력하세요"
#, javascript-format
msgid "Master Key %s"
@@ -1725,9 +1801,8 @@ msgstr "조플린 모바일 앱은 현재 해당 형식의 링크를 지원하
msgid "Unsupported image type: %s"
msgstr "지원하지 않는 이미지 형식: %s"
#, fuzzy
msgid "Take photo"
msgstr "사진 첨부"
msgstr "사진 찍기"
msgid "Attach photo"
msgstr "사진 첨부"
@@ -1754,7 +1829,10 @@ msgid "View on map"
msgstr "지도에 표시"
msgid "Go to source URL"
msgstr ""
msgstr "소스 URL로 이동"
msgid "Edit"
msgstr "편집"
msgid "Delete notebook"
msgstr "노트북 삭제"
@@ -1778,6 +1856,9 @@ msgstr "노트북이 없습니다. (+) 버튼을 눌러 새로 만드세요."
msgid "Welcome"
msgstr "환영합니다"
#~ msgid "Joplin v%s"
#~ msgstr "조플린 v%s"
#~ msgid "State: %s."
#~ msgstr "상태: %s."

View File

@@ -124,9 +124,10 @@ msgstr "Markerer et gjøremål som ferdig."
msgid "Note is not a to-do: \"%s\""
msgstr "Notat er ikke et gjøremål: \"%s\""
#, fuzzy
msgid ""
"Manages E2EE configuration. Commands are `enable`, `disable`, `decrypt`, "
"`status` and `target-status`."
"`status`, `decrypt-file` and `target-status`."
msgstr ""
"Utfører E2EE-konfiguration. Tilgjengelige kommandoer er: `enable`(aktiver), "
"`disable`(lukk), `decrypt`(dekrypter), `status` og `target-status` (mottager-"
@@ -164,7 +165,7 @@ msgstr "Rediger notat."
msgid ""
"No text editor is defined. Please set it using `config editor <editor-path>`"
msgstr ""
"Inger teksteditor er valgt. Velg en ved å bruke `config editor <editor-path>`"
"Ingen teksteditor er valgt. Velg en ved å bruke `config editor <editor-path>`"
msgid "No active notebook."
msgstr "Ingen aktiv notatbok."
@@ -576,6 +577,20 @@ msgstr ""
msgid "Exporting to \"%s\" as \"%s\" format. Please wait..."
msgstr "Eksporterer til \"%s\" i \"%s\" format. Vennligst vent..."
msgid "Sidebar"
msgstr ""
msgid "Note list"
msgstr ""
#, fuzzy
msgid "Note title"
msgstr "Tittel på notatbok:"
#, fuzzy
msgid "Note body"
msgstr "Notatbøker"
#, javascript-format
msgid "Importing from \"%s\" as \"%s\" format. Please wait..."
msgstr "Importerer fra \"%s\" i \"%s\"-format. Vennligst vent..."
@@ -583,7 +598,8 @@ msgstr "Importerer fra \"%s\" i \"%s\"-format. Vennligst vent..."
msgid "PDF File"
msgstr "PDF-fil"
msgid "File"
#, fuzzy
msgid "&File"
msgstr "Fil"
msgid "New note"
@@ -601,6 +617,9 @@ msgstr "Importer"
msgid "Export"
msgstr "Eksport"
msgid "Synchronise"
msgstr "Synkroniser"
msgid "Print"
msgstr "Skriv ut"
@@ -611,7 +630,8 @@ msgstr "Skjul %s"
msgid "Quit"
msgstr "Avslutt"
msgid "Edit"
#, fuzzy
msgid "&Edit"
msgstr "Rediger"
msgid "Copy"
@@ -632,6 +652,9 @@ msgstr "Fet"
msgid "Italic"
msgstr "Kursiv"
msgid "Link"
msgstr ""
msgid "Insert Date Time"
msgstr "Sett inn dato/tid"
@@ -645,8 +668,9 @@ msgstr "Søk i alle notater"
msgid "Search in current note"
msgstr "Søk i nåværende notat"
msgid "View"
msgstr "Utseende"
#, fuzzy
msgid "&View"
msgstr "Vis"
msgid "Toggle sidebar"
msgstr "Vis/skjul sidepanel"
@@ -654,7 +678,12 @@ msgstr "Vis/skjul sidepanel"
msgid "Toggle editor layout"
msgstr "Bytt editorutseende"
msgid "Tools"
#, fuzzy
msgid "Focus"
msgstr "Fokuser på brødtekst"
#, fuzzy
msgid "&Tools"
msgstr "Verktøy"
msgid "Synchronisation status"
@@ -669,7 +698,8 @@ msgstr "Krypteringsvalg"
msgid "General Options"
msgstr "Generelle innstillinger"
msgid "Help"
#, fuzzy
msgid "&Help"
msgstr "Hjelp"
msgid "Website and documentation"
@@ -706,18 +736,18 @@ msgstr "Nåværende versjon er den siste tilgjengelige."
#, javascript-format
msgid "%s (pre-release)"
msgstr ""
msgstr "%s (førutgivelse)"
msgid "An update is available, do you want to download it now?"
msgstr "En oppdatering er tilgjengelig, vil du laste den ned nå?"
#, javascript-format
msgid "Your version: v%s"
msgstr ""
msgid "Your version: %s"
msgstr "Din versjon: %s"
#, javascript-format
msgid "New version: v%s"
msgstr ""
msgid "New version: %s"
msgstr "Ny versjon: %s"
msgid "Yes"
msgstr "Ja"
@@ -789,16 +819,19 @@ msgid ""
"This authorisation token is only needed to allow third-party applications to "
"access Joplin."
msgstr ""
"Denne autentiseringsbeviset er det eneste nødvendig for å gi "
"Denne autoriseringsbeviset er det eneste nødvendig for å gi "
"tredjepartsapplikasjoner tilgang til Joplin."
msgid "Check synchronisation configuration"
msgstr "Sjekk synkroniseringskonfigurasjon"
#, javascript-format
msgid "Notes and settings are stored in: %s"
msgstr "Notater og innstillinger er lagret i: %s"
msgid "Browse..."
msgstr ""
msgid "Check synchronisation configuration"
msgstr "Sjekk synkroniseringskonfigurasjon"
msgid "Apply"
msgstr "Bruk"
@@ -893,6 +926,10 @@ msgstr "Status"
msgid "Encryption is:"
msgstr "Kryptering er:"
#, fuzzy
msgid "Usage"
msgstr "Bruk: %s"
msgid "Back"
msgstr "Tilbake"
@@ -945,34 +982,6 @@ msgstr "Noen elementer kan ikke dekrypteres."
msgid "Set the password"
msgstr "Sett passord"
msgid "Add or remove tags"
msgstr "Legg til eller fjern merkelapper"
msgid "Duplicate"
msgstr "Dupliser"
#, javascript-format
msgid "%s - Copy"
msgstr "%s - Kopier"
msgid "Switch between note and to-do type"
msgstr "Bytt mellom notat og gjøremål"
msgid "Switch to note type"
msgstr "Bytt til notatmodus"
msgid "Switch to to-do type"
msgstr "Bytt til gjøremålmodus"
msgid "Copy Markdown link"
msgstr "Kopier Markdown-link"
msgid "Delete"
msgstr "Slett"
msgid "Delete notes?"
msgstr "Slette notater?"
msgid "No notes in here. Create one by clicking on \"New note\"."
msgstr "Ingen notater her enda. Opprett et ved å klikke på \"Nytt notat\"."
@@ -1109,18 +1118,28 @@ msgstr "Krypteringsinnstillinger"
msgid "Clipper Options"
msgstr "Clipper-innstillinger"
msgid "Remove this tag from all the notes?"
#, fuzzy, javascript-format
msgid ""
"Delete notebook \"%s\"?\n"
"\n"
"All notes and sub-notebooks within this notebook will also be deleted."
msgstr ""
"Slette notatbok? Alle notater og underliggende notatbøker i denne notatboken "
"vil også bli slettet."
#, fuzzy, javascript-format
msgid "Remove tag \"%s\" from all notes?"
msgstr "Fjern denne merkelappen fra alle notater?"
msgid "Remove this search from the sidebar?"
msgstr "Fjerne dette søket fra sidepanelet?"
msgid "Delete"
msgstr "Slett"
msgid "Rename"
msgstr "Gi nytt navn"
msgid "Synchronise"
msgstr "Synkroniser"
msgid "Notebooks"
msgstr "Notatbøker"
@@ -1135,6 +1154,39 @@ msgstr "Henter ressurser: %d"
msgid "Please select where the sync status should be exported to"
msgstr "Velg hvor synkroniseringsstatusen skal eksporteres til"
msgid "Table of contents"
msgstr ""
msgid "Add or remove tags"
msgstr "Legg til eller fjern merkelapper"
msgid "Duplicate"
msgstr "Dupliser"
#, javascript-format
msgid "%s - Copy"
msgstr "%s - Kopier"
msgid "Switch between note and to-do type"
msgstr "Bytt mellom notat og gjøremål"
msgid "Switch to note type"
msgstr "Bytt til notatmodus"
msgid "Switch to to-do type"
msgstr "Bytt til gjøremålmodus"
msgid "Copy Markdown link"
msgstr "Kopier Markdown-link"
#, fuzzy, javascript-format
msgid "Delete note \"%s\"?"
msgstr "Slette notater?"
#, fuzzy, javascript-format
msgid "Delete these %d notes?"
msgstr "Slett disse notatene?"
#, javascript-format
msgid "Usage: %s"
msgstr "Bruk: %s"
@@ -1253,6 +1305,12 @@ msgstr "Kryptert"
msgid "Encrypted items cannot be modified"
msgstr "Krypterte elementer kan ikke modifiseres"
msgid "title"
msgstr "tittel"
msgid "updated date"
msgstr "sist oppdatert"
msgid "Conflicts"
msgstr "Konflikter"
@@ -1263,12 +1321,6 @@ msgstr "Kan ikke flytte notatboken til denne plasseringen"
msgid "Notebooks cannot be named \"%s\", which is a reserved title."
msgstr "Notatbøker kan ikke hete %s, som er en reservert tittel."
msgid "title"
msgstr "tittel"
msgid "updated date"
msgstr "sist oppdatert"
msgid "created date"
msgstr "opprettet"
@@ -1313,6 +1365,10 @@ msgstr "Sorter notater etter"
msgid "Reverse sort order"
msgstr "Reverser sorteringsrekkefølge"
#, fuzzy
msgid "Sort notebooks by"
msgstr "Sorter notater etter"
msgid "Save geo-location with notes"
msgstr "Lagre stedsinformasjon med notater"
@@ -1368,11 +1424,11 @@ msgid "Automatically update the application"
msgstr "Oppdater applikasjonen automatisk"
msgid "Get pre-releases when checking for updates"
msgstr ""
msgstr "Få førutgivelse når du sjekker etter oppdateringer"
#, javascript-format
msgid "See the pre-release page for more details: %s"
msgstr ""
msgstr "Se førutgivelsessiden for flere detaljer: %s"
msgid "Synchronisation interval"
msgstr "Synkroniserinsintervall"
@@ -1471,6 +1527,25 @@ msgstr "Ignorer TLS-sertifikatfeil"
msgid "Invalid option value: \"%s\". Possible values are: %s."
msgstr "Ugyldig verdi: \"%s\". Mulige verdier er: %s."
#, fuzzy
msgid "General"
msgstr "Generelle innstillinger"
#, fuzzy
msgid "Synchronisation"
msgstr "Synkroniseringsstatus"
msgid "Appearance"
msgstr ""
#, fuzzy
msgid "Note"
msgstr "Notatbøker"
#, fuzzy
msgid "Application"
msgstr "Lokasjon"
#, javascript-format
msgid "The tag \"%s\" already exists. Please choose a different name."
msgstr "Merkelappen \"%s\" eksiterer allerede. Vennligst velg et annet navn."
@@ -1490,6 +1565,9 @@ msgstr "Evernote-eksportert fil"
msgid "Json Export Directory"
msgstr "Json-eksportert katalog"
msgid "File"
msgstr "Fil"
msgid "Directory"
msgstr "Katalog"
@@ -1676,10 +1754,6 @@ msgstr "- Sted: for å legge ved stedsinformation til notatet."
msgid "Joplin website"
msgstr "Joplins nettsted"
#, fuzzy, javascript-format
msgid "Joplin v%s"
msgstr "Joplin v%s"
#, javascript-format
msgid "Database v%s"
msgstr "Database v%s"
@@ -1776,6 +1850,9 @@ msgstr "Se på kart"
msgid "Go to source URL"
msgstr "Gå til kilde-URL"
msgid "Edit"
msgstr "Rediger"
msgid "Delete notebook"
msgstr "Slett notatbok"
@@ -1797,3 +1874,7 @@ msgstr "Du har enda ingen notatbok. Lag en ved å klikke på (+)-knappen."
msgid "Welcome"
msgstr "Velkommen"
#, fuzzy
#~ msgid "Joplin v%s"
#~ msgstr "Joplin v%s"

View File

@@ -125,9 +125,10 @@ msgstr "Markeer een to-do als voltooid. "
msgid "Note is not a to-do: \"%s\""
msgstr "Notitie is geen to-do: \"%s\""
#, fuzzy
msgid ""
"Manages E2EE configuration. Commands are `enable`, `disable`, `decrypt`, "
"`status` and `target-status`."
"`status`, `decrypt-file` and `target-status`."
msgstr ""
"Beheert E2EE configuratie. Commando's zijn `enable`, `disable`, `decrypt`, "
"`status` and `target-status`."
@@ -584,6 +585,20 @@ msgstr ""
msgid "Exporting to \"%s\" as \"%s\" format. Please wait..."
msgstr ""
msgid "Sidebar"
msgstr ""
msgid "Note list"
msgstr ""
#, fuzzy
msgid "Note title"
msgstr "Notitieboek titel:"
#, fuzzy
msgid "Note body"
msgstr "Notitieboeken"
#, javascript-format
msgid "Importing from \"%s\" as \"%s\" format. Please wait..."
msgstr ""
@@ -592,7 +607,8 @@ msgstr ""
msgid "PDF File"
msgstr "Bestand"
msgid "File"
#, fuzzy
msgid "&File"
msgstr "Bestand"
msgid "New note"
@@ -611,6 +627,9 @@ msgstr "Importeer"
msgid "Export"
msgstr "Importeer"
msgid "Synchronise"
msgstr "Synchroniseer"
msgid "Print"
msgstr ""
@@ -621,7 +640,8 @@ msgstr ""
msgid "Quit"
msgstr "Stop"
msgid "Edit"
#, fuzzy
msgid "&Edit"
msgstr "Bewerk"
msgid "Copy"
@@ -643,6 +663,9 @@ msgstr ""
msgid "Italic"
msgstr ""
msgid "Link"
msgstr ""
msgid "Insert Date Time"
msgstr ""
@@ -656,7 +679,7 @@ msgstr "Zoek in alle notities"
msgid "Search in current note"
msgstr "Zoek in alle notities"
msgid "View"
msgid "&View"
msgstr ""
msgid "Toggle sidebar"
@@ -665,7 +688,11 @@ msgstr ""
msgid "Toggle editor layout"
msgstr ""
msgid "Tools"
msgid "Focus"
msgstr ""
#, fuzzy
msgid "&Tools"
msgstr "Tools"
msgid "Synchronisation status"
@@ -680,7 +707,8 @@ msgstr "Versleutelopties"
msgid "General Options"
msgstr "Algemene opties"
msgid "Help"
#, fuzzy
msgid "&Help"
msgstr "Help"
msgid "Website and documentation"
@@ -724,11 +752,11 @@ msgid "An update is available, do you want to download it now?"
msgstr ""
#, javascript-format
msgid "Your version: v%s"
msgid "Your version: %s"
msgstr ""
#, javascript-format
msgid "New version: v%s"
msgid "New version: %s"
msgstr ""
msgid "Yes"
@@ -799,14 +827,17 @@ msgid ""
"access Joplin."
msgstr ""
#, fuzzy
msgid "Check synchronisation configuration"
msgstr "Annuleer synchronisatie"
#, javascript-format
msgid "Notes and settings are stored in: %s"
msgstr "Notities en instellingen zijn opgeslaan in %s"
msgid "Browse..."
msgstr ""
#, fuzzy
msgid "Check synchronisation configuration"
msgstr "Annuleer synchronisatie"
msgid "Apply"
msgstr ""
@@ -897,6 +928,10 @@ msgstr "Status"
msgid "Encryption is:"
msgstr "Versleuteling is:"
#, fuzzy
msgid "Usage"
msgstr "Gebruik: %s"
msgid "Back"
msgstr "Terug"
@@ -951,36 +986,6 @@ msgstr "Sommige items kunnen niet gedecodeerd worden."
msgid "Set the password"
msgstr "Stel wachtwoord in"
msgid "Add or remove tags"
msgstr "Voeg tag toe of verwijder tag"
msgid "Duplicate"
msgstr ""
#, fuzzy, javascript-format
msgid "%s - Copy"
msgstr "Kopieer"
msgid "Switch between note and to-do type"
msgstr "Wissel tussen notitie en to-do type"
#, fuzzy
msgid "Switch to note type"
msgstr "Wissel tussen notitie en to-do type"
#, fuzzy
msgid "Switch to to-do type"
msgstr "Wissel tussen notitie en to-do type"
msgid "Copy Markdown link"
msgstr ""
msgid "Delete"
msgstr "Verwijderen"
msgid "Delete notes?"
msgstr "Notities verwijderen?"
msgid "No notes in here. Create one by clicking on \"New note\"."
msgstr "Geen notities. Maak een notitie door op \"Nieuwe notitie\" te klikken."
@@ -1122,18 +1127,28 @@ msgstr "Versleutelopties"
msgid "Clipper Options"
msgstr "Algemene opties"
msgid "Remove this tag from all the notes?"
#, fuzzy, javascript-format
msgid ""
"Delete notebook \"%s\"?\n"
"\n"
"All notes and sub-notebooks within this notebook will also be deleted."
msgstr ""
"Notitieboek verwijderen? Alle notities in dit notitieboek zullen ook "
"verwijderd worden."
#, fuzzy, javascript-format
msgid "Remove tag \"%s\" from all notes?"
msgstr "Deze tag verwijderen van alle notities?"
msgid "Remove this search from the sidebar?"
msgstr "Dit item verwijderen van de zijbalk?"
msgid "Delete"
msgstr "Verwijderen"
msgid "Rename"
msgstr "Hernoem"
msgid "Synchronise"
msgstr "Synchroniseer"
msgid "Notebooks"
msgstr "Notitieboeken"
@@ -1148,6 +1163,42 @@ msgstr "Middelen: %d."
msgid "Please select where the sync status should be exported to"
msgstr "Selecteer waar de synchronisatie status naar geëxporteerd moet worden"
msgid "Table of contents"
msgstr ""
msgid "Add or remove tags"
msgstr "Voeg tag toe of verwijder tag"
#, fuzzy
msgid "Duplicate"
msgstr "Sluit de applicatie."
#, fuzzy, javascript-format
msgid "%s - Copy"
msgstr "Kopieer"
msgid "Switch between note and to-do type"
msgstr "Wissel tussen notitie en to-do type"
#, fuzzy
msgid "Switch to note type"
msgstr "Wissel tussen notitie en to-do type"
#, fuzzy
msgid "Switch to to-do type"
msgstr "Wissel tussen notitie en to-do type"
msgid "Copy Markdown link"
msgstr ""
#, fuzzy, javascript-format
msgid "Delete note \"%s\"?"
msgstr "Notities verwijderen?"
#, fuzzy, javascript-format
msgid "Delete these %d notes?"
msgstr "Deze notities verwijderen?"
#, javascript-format
msgid "Usage: %s"
msgstr "Gebruik: %s"
@@ -1267,6 +1318,14 @@ msgstr "Versleuteld"
msgid "Encrypted items cannot be modified"
msgstr "Versleutelde items kunnen niet aangepast worden"
#, fuzzy
msgid "title"
msgstr "Untitled"
#, fuzzy
msgid "updated date"
msgstr "Bijgewerkt: %d."
msgid "Conflicts"
msgstr "Conflicten"
@@ -1280,14 +1339,6 @@ msgstr ""
"Notitieboeken kunnen niet \"%s\" genoemd worden, dit is een gereserveerd "
"woord."
#, fuzzy
msgid "title"
msgstr "Untitled"
#, fuzzy
msgid "updated date"
msgstr "Bijgewerkt: %d."
#, fuzzy
msgid "created date"
msgstr "Aangemaakt: %d."
@@ -1336,6 +1387,10 @@ msgstr ""
msgid "Reverse sort order"
msgstr "Draait de sorteervolgorde om."
#, fuzzy
msgid "Sort notebooks by"
msgstr "Bewerk notitieboek"
msgid "Save geo-location with notes"
msgstr "Sla geo-locatie op bij notities"
@@ -1486,6 +1541,25 @@ msgstr ""
msgid "Invalid option value: \"%s\". Possible values are: %s."
msgstr "Ongeldige optie: \"%s\". Geldige waarden zijn: %s."
#, fuzzy
msgid "General"
msgstr "Algemene opties"
#, fuzzy
msgid "Synchronisation"
msgstr "Synchronisatie status"
msgid "Appearance"
msgstr ""
#, fuzzy
msgid "Note"
msgstr "Notitieboeken"
#, fuzzy
msgid "Application"
msgstr "Sluit de applicatie."
#, javascript-format
msgid "The tag \"%s\" already exists. Please choose a different name."
msgstr ""
@@ -1508,6 +1582,9 @@ msgstr "Exporteer Evernote bestanden"
msgid "Json Export Directory"
msgstr "Exporteer Evernote bestanden"
msgid "File"
msgstr "Bestand"
msgid "Directory"
msgstr ""
@@ -1688,10 +1765,6 @@ msgstr ""
msgid "Joplin website"
msgstr ""
#, javascript-format
msgid "Joplin v%s"
msgstr ""
#, javascript-format
msgid "Database v%s"
msgstr ""
@@ -1790,6 +1863,9 @@ msgstr "Toon op de kaart"
msgid "Go to source URL"
msgstr ""
msgid "Edit"
msgstr "Bewerk"
msgid "Delete notebook"
msgstr "Verwijder notitieboek"
@@ -1865,9 +1941,6 @@ msgstr "Welkom"
#~ msgid "Cancel the current command."
#~ msgstr "Annuleer het huidige commando."
#~ msgid "Exit the application."
#~ msgstr "Sluit de applicatie."
#~ msgid "Delete the currently selected note or notebook."
#~ msgstr ""
#~ "Verwijder de geselecteerde notitie of het geselecteerde notitieboek."

View File

@@ -127,9 +127,10 @@ msgstr "Markeert een taak als afgerond."
msgid "Note is not a to-do: \"%s\""
msgstr "Notitie is geen taak: \"%s\""
#, fuzzy
msgid ""
"Manages E2EE configuration. Commands are `enable`, `disable`, `decrypt`, "
"`status` and `target-status`."
"`status`, `decrypt-file` and `target-status`."
msgstr ""
"Beheert de E2EE-configuratie. Opdrachten zijn: `enable`, `disable`, "
"`decrypt`, `status` en `target-status`."
@@ -585,6 +586,20 @@ msgstr ""
msgid "Exporting to \"%s\" as \"%s\" format. Please wait..."
msgstr "Bezig met exporteren van \"%s\" in het formaat \"%s\". Even geduld..."
msgid "Sidebar"
msgstr ""
msgid "Note list"
msgstr ""
#, fuzzy
msgid "Note title"
msgstr "Titel van notitieboek:"
#, fuzzy
msgid "Note body"
msgstr "Notitieboeken"
#, javascript-format
msgid "Importing from \"%s\" as \"%s\" format. Please wait..."
msgstr "Bezig met importeren van \"%s\" in het formaat \"%s\". Even geduld..."
@@ -592,7 +607,8 @@ msgstr "Bezig met importeren van \"%s\" in het formaat \"%s\". Even geduld..."
msgid "PDF File"
msgstr "PDF-bestand"
msgid "File"
#, fuzzy
msgid "&File"
msgstr "Bestand"
msgid "New note"
@@ -610,6 +626,9 @@ msgstr "Importeren"
msgid "Export"
msgstr "Exporteren"
msgid "Synchronise"
msgstr "Synchroniseren"
msgid "Print"
msgstr "Afdrukken"
@@ -620,7 +639,8 @@ msgstr "%s verbergen"
msgid "Quit"
msgstr "Afsluiten"
msgid "Edit"
#, fuzzy
msgid "&Edit"
msgstr "Bewerken"
msgid "Copy"
@@ -642,6 +662,9 @@ msgstr "Vetgedrukt"
msgid "Italic"
msgstr "Cursief"
msgid "Link"
msgstr ""
msgid "Insert Date Time"
msgstr "Datum en tijd invoegen"
@@ -655,7 +678,8 @@ msgstr "Alle notities doorzoeken"
msgid "Search in current note"
msgstr "Alle notities doorzoeken"
msgid "View"
#, fuzzy
msgid "&View"
msgstr "Beeld"
msgid "Toggle sidebar"
@@ -664,7 +688,12 @@ msgstr "Zijbalk tonen/verbergen"
msgid "Toggle editor layout"
msgstr "Bewerkindeling tonen/verbergen"
msgid "Tools"
#, fuzzy
msgid "Focus"
msgstr "Inhoud focussen"
#, fuzzy
msgid "&Tools"
msgstr "Hulpmiddelen"
msgid "Synchronisation status"
@@ -679,7 +708,8 @@ msgstr "Versleutelingsopties"
msgid "General Options"
msgstr "Algemene opties"
msgid "Help"
#, fuzzy
msgid "&Help"
msgstr "Hulp"
msgid "Website and documentation"
@@ -722,11 +752,11 @@ msgid "An update is available, do you want to download it now?"
msgstr "Er is een update beschikbaar. Wil je deze nu downloaden?"
#, javascript-format
msgid "Your version: v%s"
msgid "Your version: %s"
msgstr ""
#, javascript-format
msgid "New version: v%s"
msgid "New version: %s"
msgstr ""
msgid "Yes"
@@ -802,13 +832,16 @@ msgid ""
"access Joplin."
msgstr ""
msgid "Check synchronisation configuration"
msgstr "Synchronisatieconfiguratie controleren"
#, javascript-format
msgid "Notes and settings are stored in: %s"
msgstr "Notities en instellingen worden opgeslagen in: %s"
msgid "Browse..."
msgstr ""
msgid "Check synchronisation configuration"
msgstr "Synchronisatieconfiguratie controleren"
msgid "Apply"
msgstr "Toepassen"
@@ -903,6 +936,10 @@ msgstr "Status"
msgid "Encryption is:"
msgstr "Gebruikte versleuteling:"
#, fuzzy
msgid "Usage"
msgstr "Gebruik: %s"
msgid "Back"
msgstr "Terug"
@@ -955,36 +992,6 @@ msgstr "Sommige items kunnen niet worden ontsleuteled."
msgid "Set the password"
msgstr "Wachtwoord instellen"
msgid "Add or remove tags"
msgstr "Labels toevoegen of verwijderen"
msgid "Duplicate"
msgstr "Dupliceren"
#, javascript-format
msgid "%s - Copy"
msgstr "%s - kopiëren"
msgid "Switch between note and to-do type"
msgstr "Schakelen tussen notitie en taak"
#, fuzzy
msgid "Switch to note type"
msgstr "Schakelen tussen notitie en taak"
#, fuzzy
msgid "Switch to to-do type"
msgstr "Schakelen tussen notitie en taak"
msgid "Copy Markdown link"
msgstr "Markdownlink kopiëren"
msgid "Delete"
msgstr "Verwijderen"
msgid "Delete notes?"
msgstr "Notities verwijderen?"
msgid "No notes in here. Create one by clicking on \"New note\"."
msgstr ""
"Er zijn hier geen notities. Creëer een notitie door de klikken op \"Nieuwe "
@@ -1125,18 +1132,28 @@ msgstr "Versleutelopties"
msgid "Clipper Options"
msgstr "Webclipperopties"
msgid "Remove this tag from all the notes?"
#, fuzzy, javascript-format
msgid ""
"Delete notebook \"%s\"?\n"
"\n"
"All notes and sub-notebooks within this notebook will also be deleted."
msgstr ""
"Notitieboek verwijderen? Alle notities en sub-notitieboeken worden eveneens "
"verwijderd."
#, fuzzy, javascript-format
msgid "Remove tag \"%s\" from all notes?"
msgstr "Wil je dit label verwijderen van alle notities?"
msgid "Remove this search from the sidebar?"
msgstr "Wil je deze zoekopdracht verwijderen uit de zijbalk?"
msgid "Delete"
msgstr "Verwijderen"
msgid "Rename"
msgstr "Naam wijzigen"
msgid "Synchronise"
msgstr "Synchroniseren"
msgid "Notebooks"
msgstr "Notitieboeken"
@@ -1151,6 +1168,41 @@ msgstr "Bronnen: %d."
msgid "Please select where the sync status should be exported to"
msgstr "Kies waar de synchronisatiestatus naar moet worden geëxporteerd"
msgid "Table of contents"
msgstr ""
msgid "Add or remove tags"
msgstr "Labels toevoegen of verwijderen"
msgid "Duplicate"
msgstr "Dupliceren"
#, javascript-format
msgid "%s - Copy"
msgstr "%s - kopiëren"
msgid "Switch between note and to-do type"
msgstr "Schakelen tussen notitie en taak"
#, fuzzy
msgid "Switch to note type"
msgstr "Schakelen tussen notitie en taak"
#, fuzzy
msgid "Switch to to-do type"
msgstr "Schakelen tussen notitie en taak"
msgid "Copy Markdown link"
msgstr "Markdownlink kopiëren"
#, fuzzy, javascript-format
msgid "Delete note \"%s\"?"
msgstr "Notities verwijderen?"
#, fuzzy, javascript-format
msgid "Delete these %d notes?"
msgstr "Deze notities verwijderen?"
#, javascript-format
msgid "Usage: %s"
msgstr "Gebruik: %s"
@@ -1269,6 +1321,12 @@ msgstr "Versleuteld"
msgid "Encrypted items cannot be modified"
msgstr "Versleutelde items kunnen niet worden bewerkt"
msgid "title"
msgstr "titel"
msgid "updated date"
msgstr "bijgewerkt op"
msgid "Conflicts"
msgstr "Conflicten"
@@ -1279,12 +1337,6 @@ msgstr "Kan notitieboek niet verplaatsen naar deze locatie"
msgid "Notebooks cannot be named \"%s\", which is a reserved title."
msgstr "Notitieboeken mogen niet \"%s\" heten; dit is een gereserveerde titel."
msgid "title"
msgstr "titel"
msgid "updated date"
msgstr "bijgewerkt op"
msgid "created date"
msgstr "gecreëerd op"
@@ -1329,6 +1381,10 @@ msgstr "Notities sorteren op"
msgid "Reverse sort order"
msgstr "Sorteervolgorde omdraaien"
#, fuzzy
msgid "Sort notebooks by"
msgstr "Notities sorteren op"
msgid "Save geo-location with notes"
msgstr "Locatie opslaan in notities"
@@ -1484,6 +1540,25 @@ msgstr "TLS-certificaatfouten negeren"
msgid "Invalid option value: \"%s\". Possible values are: %s."
msgstr "Ongeldige optie: \"%s\". Geldige waarden zijn: %s."
#, fuzzy
msgid "General"
msgstr "Algemene opties"
#, fuzzy
msgid "Synchronisation"
msgstr "Synchronisatiestatus"
msgid "Appearance"
msgstr ""
#, fuzzy
msgid "Note"
msgstr "Notitieboeken"
#, fuzzy
msgid "Application"
msgstr "Sluit de applicatie af."
#, javascript-format
msgid "The tag \"%s\" already exists. Please choose a different name."
msgstr ""
@@ -1504,6 +1579,9 @@ msgstr "Evernote-exportbestand"
msgid "Json Export Directory"
msgstr "Joplin-exportmap"
msgid "File"
msgstr "Bestand"
msgid "Directory"
msgstr "Map"
@@ -1692,10 +1770,6 @@ msgstr "- Locatie: zodat je locatie-informatie kunt toevoegen aan een notitie."
msgid "Joplin website"
msgstr "Joplin-website"
#, fuzzy, javascript-format
msgid "Joplin v%s"
msgstr "Joplin-website"
#, javascript-format
msgid "Database v%s"
msgstr ""
@@ -1792,6 +1866,9 @@ msgstr "Tonen op kaart"
msgid "Go to source URL"
msgstr ""
msgid "Edit"
msgstr "Bewerken"
msgid "Delete notebook"
msgstr "Notitieboek verwijderen"
@@ -1816,6 +1893,10 @@ msgstr ""
msgid "Welcome"
msgstr "Welkom"
#, fuzzy
#~ msgid "Joplin v%s"
#~ msgstr "Joplin-website"
#~ msgid "State: %s."
#~ msgstr "Status: %s."

View File

@@ -14,7 +14,7 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: Poedit 2.0.7\n"
"X-Generator: Poedit 2.2.1\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
msgid "To delete a tag, untag the associated notes."
@@ -124,9 +124,10 @@ msgstr "Marca uma tarefa como feita."
msgid "Note is not a to-do: \"%s\""
msgstr "Nota não é uma tarefa: \"%s\""
#, fuzzy
msgid ""
"Manages E2EE configuration. Commands are `enable`, `disable`, `decrypt`, "
"`status` and `target-status`."
"`status`, `decrypt-file` and `target-status`."
msgstr ""
"Gerencia a configuração E2EE. Os comandos são `enable`, `disable`, "
"`decrypt`, `status` e `target-status`."
@@ -582,6 +583,20 @@ msgstr ""
msgid "Exporting to \"%s\" as \"%s\" format. Please wait..."
msgstr "Exportando para \"%s\" com o formato \"%s\". Por favor, aguarde..."
msgid "Sidebar"
msgstr ""
msgid "Note list"
msgstr ""
#, fuzzy
msgid "Note title"
msgstr "Título do caderno:"
#, fuzzy
msgid "Note body"
msgstr "Cadernos"
#, javascript-format
msgid "Importing from \"%s\" as \"%s\" format. Please wait..."
msgstr "Importando de \"%s\" com o formato \"%s\". Por favor, aguarde..."
@@ -589,7 +604,8 @@ msgstr "Importando de \"%s\" com o formato \"%s\". Por favor, aguarde..."
msgid "PDF File"
msgstr "Arquivo PDF"
msgid "File"
#, fuzzy
msgid "&File"
msgstr "Arquivo"
msgid "New note"
@@ -607,6 +623,9 @@ msgstr "Importar"
msgid "Export"
msgstr "Exportar"
msgid "Synchronise"
msgstr "Sincronizar"
msgid "Print"
msgstr "Imprimir"
@@ -617,7 +636,8 @@ msgstr "Ocultar %s"
msgid "Quit"
msgstr "Sair"
msgid "Edit"
#, fuzzy
msgid "&Edit"
msgstr "Editar"
msgid "Copy"
@@ -638,6 +658,9 @@ msgstr "Negrito"
msgid "Italic"
msgstr "Itálico"
msgid "Link"
msgstr ""
msgid "Insert Date Time"
msgstr "Inserir Data e Hora"
@@ -650,7 +673,8 @@ msgstr "Pesquisar em todas as notas"
msgid "Search in current note"
msgstr "Pesquisar na nota atual"
msgid "View"
#, fuzzy
msgid "&View"
msgstr "Visualizar"
msgid "Toggle sidebar"
@@ -659,7 +683,12 @@ msgstr "Alternar barra lateral"
msgid "Toggle editor layout"
msgstr "Alternar layout do editor"
msgid "Tools"
#, fuzzy
msgid "Focus"
msgstr "Focar no corpo"
#, fuzzy
msgid "&Tools"
msgstr "Ferramentas"
msgid "Synchronisation status"
@@ -674,7 +703,8 @@ msgstr "Opções de Encriptação"
msgid "General Options"
msgstr "Opções Gerais"
msgid "Help"
#, fuzzy
msgid "&Help"
msgstr "Ajuda"
msgid "Website and documentation"
@@ -717,11 +747,11 @@ msgid "An update is available, do you want to download it now?"
msgstr "Uma atualização está disponível, você quer baixar agora?"
#, javascript-format
msgid "Your version: v%s"
msgid "Your version: %s"
msgstr ""
#, javascript-format
msgid "New version: v%s"
msgid "New version: %s"
msgstr ""
msgid "Yes"
@@ -731,7 +761,7 @@ msgid "No"
msgstr "Não"
msgid "Token has been copied to the clipboard!"
msgstr "Token foi copiado para a \\u00e1rea de transfer\\u00eancia!"
msgstr "Token foi copiado para a área de transferência!"
msgid "The web clipper service is enabled and set to auto-start."
msgstr ""
@@ -786,25 +816,28 @@ msgid "Advanced options"
msgstr "Mostrar opções avançadas"
msgid "Authorisation token:"
msgstr "Token de autoriza\\u00e7\\u00e3o:"
msgstr "Token de autorização:"
msgid "Copy token"
msgstr "Copira token"
msgstr "Copiar token"
msgid ""
"This authorisation token is only needed to allow third-party applications to "
"access Joplin."
msgstr ""
"Esse token de autoriza\\u00e7\\u00e3o só é necess\\u00e1rio para permitir "
"que aplicativos de terceiros acessem o Joplin."
msgid "Check synchronisation configuration"
msgstr "Verificar a configuração da sincronização"
"Esse token de autorização só é necessário para permitir que aplicativos de "
"terceiros acessem o Joplin."
#, javascript-format
msgid "Notes and settings are stored in: %s"
msgstr "Notas e configurações estão armazenadas em: %s"
msgid "Browse..."
msgstr ""
msgid "Check synchronisation configuration"
msgstr "Verificar a configuração da sincronização"
msgid "Apply"
msgstr "Aplicar"
@@ -898,6 +931,10 @@ msgstr "Status"
msgid "Encryption is:"
msgstr "Encriptação está:"
#, fuzzy
msgid "Usage"
msgstr "Uso: %s"
msgid "Back"
msgstr "Voltar"
@@ -949,34 +986,6 @@ msgstr "Alguns itens não podem ser decriptados."
msgid "Set the password"
msgstr "Configurar a senha"
msgid "Add or remove tags"
msgstr "Adicionar ou remover tags"
msgid "Duplicate"
msgstr "Duplicar"
#, javascript-format
msgid "%s - Copy"
msgstr "%s - Copiar"
msgid "Switch between note and to-do type"
msgstr "Alternar entre os tipos Nota e Tarefa"
msgid "Switch to note type"
msgstr "Alternar para o tipo Nota"
msgid "Switch to to-do type"
msgstr "Alternar para o tipo Tarefa"
msgid "Copy Markdown link"
msgstr "Copiar link de Markdown"
msgid "Delete"
msgstr "Excluir"
msgid "Delete notes?"
msgstr "Excluir notas?"
msgid "No notes in here. Create one by clicking on \"New note\"."
msgstr "Não há notas aqui. Crie uma, clicando em \"Nova nota\"."
@@ -1113,18 +1122,28 @@ msgstr "Opções de Encriptação"
msgid "Clipper Options"
msgstr "Opções do clipper"
msgid "Remove this tag from all the notes?"
#, fuzzy, javascript-format
msgid ""
"Delete notebook \"%s\"?\n"
"\n"
"All notes and sub-notebooks within this notebook will also be deleted."
msgstr ""
"Excluir o caderno? Todas as notas e sub-cadernos dentro deste também serão "
"excluídas."
#, fuzzy, javascript-format
msgid "Remove tag \"%s\" from all notes?"
msgstr "Remover esta tag de todas as notas?"
msgid "Remove this search from the sidebar?"
msgstr "Remover essa pesquisa da barra lateral?"
msgid "Delete"
msgstr "Excluir"
msgid "Rename"
msgstr "Renomear"
msgid "Synchronise"
msgstr "Sincronizar"
msgid "Notebooks"
msgstr "Cadernos"
@@ -1141,6 +1160,39 @@ msgstr ""
"Favor selecionar o local para onde o status de sincronia deveria ser "
"exportado"
msgid "Table of contents"
msgstr ""
msgid "Add or remove tags"
msgstr "Adicionar ou remover tags"
msgid "Duplicate"
msgstr "Duplicar"
#, javascript-format
msgid "%s - Copy"
msgstr "%s - Copiar"
msgid "Switch between note and to-do type"
msgstr "Alternar entre os tipos Nota e Tarefa"
msgid "Switch to note type"
msgstr "Alternar para o tipo Nota"
msgid "Switch to to-do type"
msgstr "Alternar para o tipo Tarefa"
msgid "Copy Markdown link"
msgstr "Copiar link de Markdown"
#, fuzzy, javascript-format
msgid "Delete note \"%s\"?"
msgstr "Apagar o caderno \"%s\"?"
#, fuzzy, javascript-format
msgid "Delete these %d notes?"
msgstr "Excluir estas notas?"
#, javascript-format
msgid "Usage: %s"
msgstr "Uso: %s"
@@ -1259,6 +1311,12 @@ msgstr "Encriptado"
msgid "Encrypted items cannot be modified"
msgstr "Itens encriptados não podem ser modificados"
msgid "title"
msgstr "título"
msgid "updated date"
msgstr "data de atualização"
msgid "Conflicts"
msgstr "Conflitos"
@@ -1270,12 +1328,6 @@ msgid "Notebooks cannot be named \"%s\", which is a reserved title."
msgstr ""
"Os cadernos não podem ser nomeados como\"%s\", que é um título reservado."
msgid "title"
msgstr "título"
msgid "updated date"
msgstr "data de atualização"
msgid "created date"
msgstr "data de criação"
@@ -1320,6 +1372,10 @@ msgstr "Ordenar notas por"
msgid "Reverse sort order"
msgstr "Inverter ordem de classificação"
#, fuzzy
msgid "Sort notebooks by"
msgstr "Ordenar notas por"
msgid "Save geo-location with notes"
msgstr "Salvar geolocalização com notas"
@@ -1478,6 +1534,25 @@ msgstr "Ignorar erros de certificados TLS"
msgid "Invalid option value: \"%s\". Possible values are: %s."
msgstr "Valor da opção inválida: \"%s\". Os valores possíveis são: %s."
#, fuzzy
msgid "General"
msgstr "Opções Gerais"
#, fuzzy
msgid "Synchronisation"
msgstr "Status de sincronização"
msgid "Appearance"
msgstr ""
#, fuzzy
msgid "Note"
msgstr "Cadernos"
#, fuzzy
msgid "Application"
msgstr "Localização"
#, javascript-format
msgid "The tag \"%s\" already exists. Please choose a different name."
msgstr "A tag \"%s\" já existe. Escolha um nome diferente."
@@ -1497,6 +1572,9 @@ msgstr "Arquivo de Exportação do Evernote"
msgid "Json Export Directory"
msgstr "Diretório de Exportação JSON"
msgid "File"
msgstr "Arquivo"
msgid "Directory"
msgstr "Diretório"
@@ -1573,10 +1651,10 @@ msgid "On %s: %s"
msgstr "Em %s: %s"
msgid "Permission to use camera"
msgstr "Permissão para utilizar sua c\\u00e2mera"
msgstr "Permissão para utilizar sua câmera"
msgid "Your permission to use your camera is required."
msgstr "É necessária a sua permissão para utilizar sua c\\u00e2mera."
msgstr "É necessária a sua permissão para utilizar sua câmera."
msgid "There are currently no notes. Create one by clicking on the (+) button."
msgstr "Atualmente, não há notas. Crie uma, clicando no botão (+)."
@@ -1688,10 +1766,6 @@ msgstr ""
msgid "Joplin website"
msgstr "Site do Joplin"
#, fuzzy, javascript-format
msgid "Joplin v%s"
msgstr "Site do Joplin"
#, javascript-format
msgid "Database v%s"
msgstr ""
@@ -1788,6 +1862,9 @@ msgstr "Ver no mapa"
msgid "Go to source URL"
msgstr "Ir para a URL de origem"
msgid "Edit"
msgstr "Editar"
msgid "Delete notebook"
msgstr "Excluir caderno"
@@ -1810,6 +1887,13 @@ msgstr "Você não possui cadernos. Crie um clicando no botão (+)."
msgid "Welcome"
msgstr "Bem-vindo"
#, fuzzy
#~ msgid "Joplin v%s"
#~ msgstr "Site do Joplin"
#~ msgid "Delete notes?"
#~ msgstr "Excluir notas?"
#~ msgid "State: %s."
#~ msgstr "Estado: \"%s\"."
@@ -1906,8 +1990,5 @@ msgstr "Bem-vindo"
#~ msgid "Delete notebook?"
#~ msgstr "Excluir caderno?"
#~ msgid "Delete notebook \"%s\"?"
#~ msgstr "Apagar o caderno \"%s\"?"
#~ msgid "File system synchronisation target directory"
#~ msgstr "Diretório de destino de sincronização do sistema de arquivos"

View File

@@ -123,7 +123,7 @@ msgstr "Notița nu este o sarcină: \"%s\""
msgid ""
"Manages E2EE configuration. Commands are `enable`, `disable`, `decrypt`, "
"`status` and `target-status`."
"`status`, `decrypt-file` and `target-status`."
msgstr ""
msgid "Enter master password:"
@@ -521,6 +521,20 @@ msgstr ""
msgid "Exporting to \"%s\" as \"%s\" format. Please wait..."
msgstr "Se exportă către \"%s\" în format \"%s\". Vă rugăm să așteotați..."
msgid "Sidebar"
msgstr ""
msgid "Note list"
msgstr ""
#, fuzzy
msgid "Note title"
msgstr "Titlul caietului de notițe:"
#, fuzzy
msgid "Note body"
msgstr "Caiete de notițe"
#, javascript-format
msgid "Importing from \"%s\" as \"%s\" format. Please wait..."
msgstr ""
@@ -528,7 +542,8 @@ msgstr ""
msgid "PDF File"
msgstr "Fișier PDF"
msgid "File"
#, fuzzy
msgid "&File"
msgstr "Fișier"
msgid "New note"
@@ -546,6 +561,9 @@ msgstr "Importați"
msgid "Export"
msgstr "Exportați"
msgid "Synchronise"
msgstr "Sincronizați"
msgid "Print"
msgstr "Printați"
@@ -556,7 +574,8 @@ msgstr "Ascundeți %s"
msgid "Quit"
msgstr "Ieșiți"
msgid "Edit"
#, fuzzy
msgid "&Edit"
msgstr "Editați"
msgid "Copy"
@@ -578,6 +597,9 @@ msgstr ""
msgid "Italic"
msgstr ""
msgid "Link"
msgstr ""
msgid "Insert Date Time"
msgstr ""
@@ -591,7 +613,8 @@ msgstr "Căutați în toate notițele"
msgid "Search in current note"
msgstr "Căutați în toate notițele"
msgid "View"
#, fuzzy
msgid "&View"
msgstr "Vizualizați"
msgid "Toggle sidebar"
@@ -600,7 +623,11 @@ msgstr ""
msgid "Toggle editor layout"
msgstr ""
msgid "Tools"
msgid "Focus"
msgstr ""
#, fuzzy
msgid "&Tools"
msgstr "Unelte"
msgid "Synchronisation status"
@@ -615,7 +642,8 @@ msgstr "Opțiuni de criptare"
msgid "General Options"
msgstr "Opțiuni Generale"
msgid "Help"
#, fuzzy
msgid "&Help"
msgstr "Ajutor"
msgid "Website and documentation"
@@ -658,11 +686,11 @@ msgid "An update is available, do you want to download it now?"
msgstr ""
#, javascript-format
msgid "Your version: v%s"
msgid "Your version: %s"
msgstr ""
#, javascript-format
msgid "New version: v%s"
msgid "New version: %s"
msgstr ""
msgid "Yes"
@@ -732,13 +760,16 @@ msgid ""
"access Joplin."
msgstr ""
msgid "Check synchronisation configuration"
msgstr ""
#, javascript-format
msgid "Notes and settings are stored in: %s"
msgstr ""
msgid "Browse..."
msgstr ""
msgid "Check synchronisation configuration"
msgstr ""
msgid "Apply"
msgstr "Aplicați"
@@ -817,6 +848,10 @@ msgstr "Status"
msgid "Encryption is:"
msgstr "Criptarea este:"
#, fuzzy
msgid "Usage"
msgstr "Utilizare: %s"
msgid "Back"
msgstr "Înapoi"
@@ -867,36 +902,6 @@ msgstr "Câțiva itemi nu pot fi descriptați."
msgid "Set the password"
msgstr "Setați parola"
msgid "Add or remove tags"
msgstr "Adăugați ori eliminați etichete"
msgid "Duplicate"
msgstr "Duplicați"
#, javascript-format
msgid "%s - Copy"
msgstr "%s - Copiați"
msgid "Switch between note and to-do type"
msgstr "Schimbați între notiță și sarcină"
#, fuzzy
msgid "Switch to note type"
msgstr "Schimbați între notiță și sarcină"
#, fuzzy
msgid "Switch to to-do type"
msgstr "Schimbați între notiță și sarcină"
msgid "Copy Markdown link"
msgstr "Copiați link-ul Markdown"
msgid "Delete"
msgstr "Ștergeți"
msgid "Delete notes?"
msgstr "Ștergeți notițele?"
msgid "No notes in here. Create one by clicking on \"New note\"."
msgstr ""
@@ -1031,18 +1036,26 @@ msgstr "Opțiuni de criptare"
msgid "Clipper Options"
msgstr "Opțiuni Clipper"
msgid "Remove this tag from all the notes?"
#, javascript-format
msgid ""
"Delete notebook \"%s\"?\n"
"\n"
"All notes and sub-notebooks within this notebook will also be deleted."
msgstr ""
#, javascript-format
msgid "Remove tag \"%s\" from all notes?"
msgstr ""
msgid "Remove this search from the sidebar?"
msgstr ""
msgid "Delete"
msgstr "Ștergeți"
msgid "Rename"
msgstr "Redenumiți"
msgid "Synchronise"
msgstr "Sincronizați"
msgid "Notebooks"
msgstr "Caiete de notițe"
@@ -1057,6 +1070,42 @@ msgstr "Resurse: %d."
msgid "Please select where the sync status should be exported to"
msgstr ""
msgid "Table of contents"
msgstr ""
msgid "Add or remove tags"
msgstr "Adăugați ori eliminați etichete"
#, fuzzy
msgid "Duplicate"
msgstr "Duplicați"
#, javascript-format
msgid "%s - Copy"
msgstr "%s - Copiați"
msgid "Switch between note and to-do type"
msgstr "Schimbați între notiță și sarcină"
#, fuzzy
msgid "Switch to note type"
msgstr "Schimbați între notiță și sarcină"
#, fuzzy
msgid "Switch to to-do type"
msgstr "Schimbați între notiță și sarcină"
msgid "Copy Markdown link"
msgstr "Copiați link-ul Markdown"
#, fuzzy, javascript-format
msgid "Delete note \"%s\"?"
msgstr "Ștergeți notițele?"
#, fuzzy, javascript-format
msgid "Delete these %d notes?"
msgstr "Ștergeți aceste notițe?"
#, javascript-format
msgid "Usage: %s"
msgstr "Utilizare: %s"
@@ -1167,6 +1216,12 @@ msgstr "Criptat"
msgid "Encrypted items cannot be modified"
msgstr "Itemii criptați nu pot fi editați"
msgid "title"
msgstr "titlu"
msgid "updated date"
msgstr "data actualizării"
msgid "Conflicts"
msgstr "Conflicte"
@@ -1177,12 +1232,6 @@ msgstr "Nu se poate muta caietul de notițe în această locație"
msgid "Notebooks cannot be named \"%s\", which is a reserved title."
msgstr ""
msgid "title"
msgstr "titlu"
msgid "updated date"
msgstr "data actualizării"
msgid "created date"
msgstr "data creării"
@@ -1227,6 +1276,10 @@ msgstr "Sortați notițele după"
msgid "Reverse sort order"
msgstr "Inversați ordinea sortării"
#, fuzzy
msgid "Sort notebooks by"
msgstr "Sortați notițele după"
msgid "Save geo-location with notes"
msgstr "Salvați geo-locația în notițe"
@@ -1366,6 +1419,25 @@ msgstr "Ignoră erorile de certificat TLS"
msgid "Invalid option value: \"%s\". Possible values are: %s."
msgstr ""
#, fuzzy
msgid "General"
msgstr "Opțiuni Generale"
#, fuzzy
msgid "Synchronisation"
msgstr "Statusul sincronizării"
msgid "Appearance"
msgstr ""
#, fuzzy
msgid "Note"
msgstr "Caiete de notițe"
#, fuzzy
msgid "Application"
msgstr "Duplicați"
#, javascript-format
msgid "The tag \"%s\" already exists. Please choose a different name."
msgstr ""
@@ -1385,6 +1457,9 @@ msgstr ""
msgid "Json Export Directory"
msgstr ""
msgid "File"
msgstr "Fișier"
msgid "Directory"
msgstr ""
@@ -1557,10 +1632,6 @@ msgstr ""
msgid "Joplin website"
msgstr "Website Joplin"
#, fuzzy, javascript-format
msgid "Joplin v%s"
msgstr "Website Joplin"
#, javascript-format
msgid "Database v%s"
msgstr ""
@@ -1657,6 +1728,9 @@ msgstr "Vizualizați pe hartă"
msgid "Go to source URL"
msgstr ""
msgid "Edit"
msgstr "Editați"
msgid "Delete notebook"
msgstr "Ștergeți caiet de notițe"
@@ -1680,6 +1754,10 @@ msgstr ""
msgid "Welcome"
msgstr "Bine ați venit"
#, fuzzy
#~ msgid "Joplin v%s"
#~ msgstr "Website Joplin"
#~ msgid "State: %s."
#~ msgstr "Statut: %s."

File diff suppressed because it is too large Load Diff

View File

@@ -123,9 +123,10 @@ msgstr "Označi seznam opravil kot končan."
msgid "Note is not a to-do: \"%s\""
msgstr "Zabeležka ni formata seznam opravil: \"%s\""
#, fuzzy
msgid ""
"Manages E2EE configuration. Commands are `enable`, `disable`, `decrypt`, "
"`status` and `target-status`."
"`status`, `decrypt-file` and `target-status`."
msgstr ""
"Upravlja z E2EE nastavitvami. Ukazi so `enable`, `disable`, `decrypt`, "
"`status` in `target-status`."
@@ -582,6 +583,20 @@ msgstr ""
msgid "Exporting to \"%s\" as \"%s\" format. Please wait..."
msgstr "Izvažam v \"%s\" kot \"%s\" format. Prosim počakajte..."
msgid "Sidebar"
msgstr ""
msgid "Note list"
msgstr ""
#, fuzzy
msgid "Note title"
msgstr "Naslov beležnice:"
#, fuzzy
msgid "Note body"
msgstr "Beležnice"
#, javascript-format
msgid "Importing from \"%s\" as \"%s\" format. Please wait..."
msgstr "Uvažam v \"%s\" kot \"%s\" format. Prosim počakajte..."
@@ -589,7 +604,8 @@ msgstr "Uvažam v \"%s\" kot \"%s\" format. Prosim počakajte..."
msgid "PDF File"
msgstr "PDF datoteka"
msgid "File"
#, fuzzy
msgid "&File"
msgstr "Datoteka"
msgid "New note"
@@ -607,6 +623,9 @@ msgstr "Uvozi"
msgid "Export"
msgstr "Izvozi"
msgid "Synchronise"
msgstr "Sinhroniziraj"
msgid "Print"
msgstr "Natisni"
@@ -617,7 +636,8 @@ msgstr "Skrij %s"
msgid "Quit"
msgstr "Izhod"
msgid "Edit"
#, fuzzy
msgid "&Edit"
msgstr "Uredi"
msgid "Copy"
@@ -639,6 +659,9 @@ msgstr ""
msgid "Italic"
msgstr ""
msgid "Link"
msgstr ""
msgid "Insert Date Time"
msgstr ""
@@ -652,7 +675,8 @@ msgstr "Išči znotraj vseh zabeležk"
msgid "Search in current note"
msgstr "Išči znotraj vseh zabeležk"
msgid "View"
#, fuzzy
msgid "&View"
msgstr "Pogled"
msgid "Toggle sidebar"
@@ -661,7 +685,12 @@ msgstr ""
msgid "Toggle editor layout"
msgstr "Spremeni izgled urejevalnika"
msgid "Tools"
#, fuzzy
msgid "Focus"
msgstr "Fokusiraj vsebino"
#, fuzzy
msgid "&Tools"
msgstr "Orodja"
msgid "Synchronisation status"
@@ -676,7 +705,8 @@ msgstr "Možnosti enkripcije"
msgid "General Options"
msgstr "Splošne možnosti"
msgid "Help"
#, fuzzy
msgid "&Help"
msgstr "Pomoč"
msgid "Website and documentation"
@@ -719,11 +749,11 @@ msgid "An update is available, do you want to download it now?"
msgstr "Posodobitev je na voljo, jo želite prenesti sedaj?"
#, javascript-format
msgid "Your version: v%s"
msgid "Your version: %s"
msgstr ""
#, javascript-format
msgid "New version: v%s"
msgid "New version: %s"
msgstr ""
msgid "Yes"
@@ -793,13 +823,16 @@ msgid ""
"access Joplin."
msgstr ""
msgid "Check synchronisation configuration"
msgstr "Preveri nastavitve sinhronizacije"
#, javascript-format
msgid "Notes and settings are stored in: %s"
msgstr "Zabeležke in nastavitve so shranjene v: %s"
msgid "Browse..."
msgstr ""
msgid "Check synchronisation configuration"
msgstr "Preveri nastavitve sinhronizacije"
msgid "Apply"
msgstr ""
@@ -893,6 +926,10 @@ msgstr "Status"
msgid "Encryption is:"
msgstr "Enkripcija je:"
#, fuzzy
msgid "Usage"
msgstr "Uporaba: %s"
msgid "Back"
msgstr "Nazaj"
@@ -946,37 +983,6 @@ msgstr "Nekateri predmeti ne morejo biti dekriptirani."
msgid "Set the password"
msgstr "Nastavi geslo"
msgid "Add or remove tags"
msgstr "Dodaj ali odstrani oznake"
msgid "Duplicate"
msgstr ""
#, fuzzy, javascript-format
msgid "%s - Copy"
msgstr "Kopiraj"
msgid "Switch between note and to-do type"
msgstr "Menjaj med zabeležko in seznamom opravil"
#, fuzzy
msgid "Switch to note type"
msgstr "Menjaj med zabeležko in seznamom opravil"
#, fuzzy
msgid "Switch to to-do type"
msgstr "Menjaj med zabeležko in seznamom opravil"
#, fuzzy
msgid "Copy Markdown link"
msgstr "Sistem označevanja"
msgid "Delete"
msgstr "Izbriši"
msgid "Delete notes?"
msgstr "Izbriši zabeležke?"
msgid "No notes in here. Create one by clicking on \"New note\"."
msgstr ""
"Trenutno ni tukaj nobene zabeležke. Ustvarite jo z klikom na \"Nova zabeležka"
@@ -1119,18 +1125,28 @@ msgstr "Možnosti enkripcije"
msgid "Clipper Options"
msgstr "Splošne možnosti"
msgid "Remove this tag from all the notes?"
#, fuzzy, javascript-format
msgid ""
"Delete notebook \"%s\"?\n"
"\n"
"All notes and sub-notebooks within this notebook will also be deleted."
msgstr ""
"Želite izbrisati beležnico? Vse zabeležke znotraj beležke bodo hkrati "
"izbrisane."
#, fuzzy, javascript-format
msgid "Remove tag \"%s\" from all notes?"
msgstr "Odstranite to oznako iz vseh zabeležk?"
msgid "Remove this search from the sidebar?"
msgstr "Odstranite ta iskalni niz iz stranske vrstice?"
msgid "Delete"
msgstr "Izbriši"
msgid "Rename"
msgstr "Preimenuj"
msgid "Synchronise"
msgstr "Sinhroniziraj"
msgid "Notebooks"
msgstr "Beležnice"
@@ -1145,6 +1161,43 @@ msgstr "Viri: %d."
msgid "Please select where the sync status should be exported to"
msgstr "Prosim izberite, kam želite izvoziti sinhronizacijski status"
msgid "Table of contents"
msgstr ""
msgid "Add or remove tags"
msgstr "Dodaj ali odstrani oznake"
#, fuzzy
msgid "Duplicate"
msgstr "Izhod iz aplikacije."
#, fuzzy, javascript-format
msgid "%s - Copy"
msgstr "Kopiraj"
msgid "Switch between note and to-do type"
msgstr "Menjaj med zabeležko in seznamom opravil"
#, fuzzy
msgid "Switch to note type"
msgstr "Menjaj med zabeležko in seznamom opravil"
#, fuzzy
msgid "Switch to to-do type"
msgstr "Menjaj med zabeležko in seznamom opravil"
#, fuzzy
msgid "Copy Markdown link"
msgstr "Sistem označevanja"
#, fuzzy, javascript-format
msgid "Delete note \"%s\"?"
msgstr "Izbriši zabeležke?"
#, fuzzy, javascript-format
msgid "Delete these %d notes?"
msgstr "Izbriši te zabeležke?"
#, javascript-format
msgid "Usage: %s"
msgstr "Uporaba: %s"
@@ -1263,6 +1316,14 @@ msgstr "Enkriptirano"
msgid "Encrypted items cannot be modified"
msgstr "Enkriptirani predmeti ne morejo biti spremenjeni"
#, fuzzy
msgid "title"
msgstr "Neimenovano"
#, fuzzy
msgid "updated date"
msgstr "Posodobljeno: %d."
msgid "Conflicts"
msgstr "Konfikti"
@@ -1274,14 +1335,6 @@ msgstr "Ni moč premakniti zabeležke v \"%s\" beležnico"
msgid "Notebooks cannot be named \"%s\", which is a reserved title."
msgstr "Beležnica ne more biti imenovana \"%s\", ker je to rezerviran naslov."
#, fuzzy
msgid "title"
msgstr "Neimenovano"
#, fuzzy
msgid "updated date"
msgstr "Posodobljeno: %d."
#, fuzzy
msgid "created date"
msgstr "Ustvarjeno: %d."
@@ -1328,6 +1381,10 @@ msgstr "Razporedi zabeležko po"
msgid "Reverse sort order"
msgstr "Obrni vrstni red"
#, fuzzy
msgid "Sort notebooks by"
msgstr "Razporedi zabeležko po"
msgid "Save geo-location with notes"
msgstr "Shrani geo-lokacijo z zabeležkami"
@@ -1478,6 +1535,25 @@ msgstr ""
msgid "Invalid option value: \"%s\". Possible values are: %s."
msgstr "Neveljavna vrednost: \"%s\". Možne vrednosti so : %s."
#, fuzzy
msgid "General"
msgstr "Splošne možnosti"
#, fuzzy
msgid "Synchronisation"
msgstr "Status sinhronizacije"
msgid "Appearance"
msgstr ""
#, fuzzy
msgid "Note"
msgstr "Beležnice"
#, fuzzy
msgid "Application"
msgstr "Izhod iz aplikacije."
#, javascript-format
msgid "The tag \"%s\" already exists. Please choose a different name."
msgstr ""
@@ -1498,6 +1574,9 @@ msgstr "Evernote izvozna datoteka"
msgid "Json Export Directory"
msgstr "Joplin izvozno mesto"
msgid "File"
msgstr "Datoteka"
msgid "Directory"
msgstr "Mesto datoteke"
@@ -1678,10 +1757,6 @@ msgstr ""
msgid "Joplin website"
msgstr "Joplin spletna stran"
#, fuzzy, javascript-format
msgid "Joplin v%s"
msgstr "Joplin spletna stran"
#, javascript-format
msgid "Database v%s"
msgstr ""
@@ -1779,6 +1854,9 @@ msgstr "Prikaži na zemljevidu"
msgid "Go to source URL"
msgstr ""
msgid "Edit"
msgstr "Uredi"
msgid "Delete notebook"
msgstr "Izbriši beležnico"
@@ -1801,6 +1879,10 @@ msgstr "Trenutno nimate nobene beležnice. Ustvarite jo s klikom na (+) gumb."
msgid "Welcome"
msgstr "Dobrodošli"
#, fuzzy
#~ msgid "Joplin v%s"
#~ msgstr "Joplin spletna stran"
#~ msgid "State: %s."
#~ msgstr "Stanje: %s."

View File

@@ -13,7 +13,7 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: Poedit 2.1.1\n"
"X-Generator: Poedit 2.2.1\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
msgid "To delete a tag, untag the associated notes."
@@ -124,9 +124,10 @@ msgstr "Märker en att-göra som gjord."
msgid "Note is not a to-do: \"%s\""
msgstr "Anteckning är inte en att-göra: \"%s\""
#, fuzzy
msgid ""
"Manages E2EE configuration. Commands are `enable`, `disable`, `decrypt`, "
"`status` and `target-status`."
"`status`, `decrypt-file` and `target-status`."
msgstr ""
"Hanterar E2EE-konfiguration. Kommandon är `enable`,` disable`, `decrypt`,` "
"status` och `target-status`."
@@ -462,21 +463,20 @@ msgid "Starting synchronisation..."
msgstr "Startar synkronisering..."
msgid "Downloading resources..."
msgstr ""
msgstr "Laddar ned resurser..."
msgid "Cancelling... Please wait."
msgstr "Avbryter... vänta."
#, fuzzy
msgid ""
"<tag-command> can be \"add\", \"remove\" or \"list\" to assign or remove "
"[tag] from [note], or to list the notes associated with [tag]. The command "
"`tag list` can be used to list all the tags (use -l for long option)."
msgstr ""
"<tag-command> kan vara \"add\", \"remove\" eller \"list\" för att tilldela "
"eller ta bort [tag] från [note], eller för att lista anteckningarna som är "
"associerade med [tag]. Kommandot `tag list` kan användas för att lista alla "
"taggar."
"<tag-command> kan vara \"lägg till\", \"ta bort\" eller \"lisat\" för att "
"tilldela eller ta bort [tag] från [note], eller för att lista anteckningarna "
"som är associerade med [tag]. Kommandot `tag list` kan användas för att "
"lista alla taggar."
#, javascript-format
msgid "Invalid command: \"%s\""
@@ -589,6 +589,18 @@ msgstr ""
msgid "Exporting to \"%s\" as \"%s\" format. Please wait..."
msgstr "Exportera till \"%s\" som \"%s\" format. Vänta..."
msgid "Sidebar"
msgstr "Sidofältet"
msgid "Note list"
msgstr "Anteckningsboken"
msgid "Note title"
msgstr "Rubriken"
msgid "Note body"
msgstr "Texten"
#, javascript-format
msgid "Importing from \"%s\" as \"%s\" format. Please wait..."
msgstr "Importerar från \"%s\" som \"%s\" format. Vänta..."
@@ -596,7 +608,8 @@ msgstr "Importerar från \"%s\" som \"%s\" format. Vänta..."
msgid "PDF File"
msgstr "PDF-fil"
msgid "File"
#, fuzzy
msgid "&File"
msgstr "Fil"
msgid "New note"
@@ -614,6 +627,9 @@ msgstr "Importera"
msgid "Export"
msgstr "Exportera"
msgid "Synchronise"
msgstr "Synkronisera"
msgid "Print"
msgstr "Skriv ut"
@@ -624,7 +640,8 @@ msgstr "Dölj %s"
msgid "Quit"
msgstr "Avsluta"
msgid "Edit"
#, fuzzy
msgid "&Edit"
msgstr "Redigera"
msgid "Copy"
@@ -636,9 +653,8 @@ msgstr "Klipp ut"
msgid "Paste"
msgstr "Klistra in"
#, fuzzy
msgid "Select all"
msgstr "Välj datum"
msgstr "Välj alla"
msgid "Bold"
msgstr "Fet"
@@ -646,6 +662,9 @@ msgstr "Fet"
msgid "Italic"
msgstr "Kursiv"
msgid "Link"
msgstr "Länk"
msgid "Insert Date Time"
msgstr "Infoga datumtid"
@@ -655,11 +674,11 @@ msgstr "Redigera i extern redigerare"
msgid "Search in all the notes"
msgstr "Sök i alla anteckningarna"
#, fuzzy
msgid "Search in current note"
msgstr "Sök i alla anteckningarna"
msgstr "Sök i aktuell anteckning"
msgid "View"
#, fuzzy
msgid "&View"
msgstr "Visa"
msgid "Toggle sidebar"
@@ -668,7 +687,11 @@ msgstr "Växla sidofältet"
msgid "Toggle editor layout"
msgstr "Växla redigeringslayout"
msgid "Tools"
msgid "Focus"
msgstr "Fokus"
#, fuzzy
msgid "&Tools"
msgstr "Verktyg"
msgid "Synchronisation status"
@@ -683,7 +706,8 @@ msgstr "Krypteringsinställningar"
msgid "General Options"
msgstr "Allmänna inställningar"
msgid "Help"
#, fuzzy
msgid "&Help"
msgstr "Hjälp"
msgid "Website and documentation"
@@ -720,18 +744,18 @@ msgstr "Nuvarande version är uppdaterad."
#, javascript-format
msgid "%s (pre-release)"
msgstr ""
msgstr "%s (förhandsversion)"
msgid "An update is available, do you want to download it now?"
msgstr "En uppdatering är tillgänglig, vill du hämta den nu?"
#, javascript-format
msgid "Your version: v%s"
msgstr ""
msgid "Your version: %s"
msgstr "Din version: %s"
#, javascript-format
msgid "New version: v%s"
msgstr ""
msgid "New version: %s"
msgstr "Ny version: %s"
msgid "Yes"
msgstr "Ja"
@@ -740,7 +764,7 @@ msgid "No"
msgstr "Nej"
msgid "Token has been copied to the clipboard!"
msgstr ""
msgstr "Token har kopierats till urklipp!"
msgid "The web clipper service is enabled and set to auto-start."
msgstr "Web clipper-tjänsten är aktiverad och inställd för automatisk start."
@@ -790,28 +814,32 @@ msgstr "Steg 2: Installera tillägget"
msgid "Download and install the relevant extension for your browser:"
msgstr "Hämta och installera det relevanta tillägget för din webbläsare:"
#, fuzzy
msgid "Advanced options"
msgstr "Visa avancerade inställningar"
msgstr "Avancerade alternativ"
msgid "Authorisation token:"
msgstr ""
msgstr "Auktoriserings token:"
msgid "Copy token"
msgstr ""
msgstr "Kopiera token"
msgid ""
"This authorisation token is only needed to allow third-party applications to "
"access Joplin."
msgstr ""
msgid "Check synchronisation configuration"
msgstr "Kontrollera synkroniseringskonfigurationen"
"Denna auktorisering behövs endast för att tillåta tredjepartsprogram att "
"integrera med Joplin."
#, javascript-format
msgid "Notes and settings are stored in: %s"
msgstr "Anteckningar och inställningar lagras i: %s"
msgid "Browse..."
msgstr "Bläddra..."
msgid "Check synchronisation configuration"
msgstr "Kontrollera synkroniseringskonfigurationen"
msgid "Apply"
msgstr "Tillämpa"
@@ -906,6 +934,9 @@ msgstr "Tillstånd"
msgid "Encryption is:"
msgstr "Kryptering är:"
msgid "Usage"
msgstr "Användning"
msgid "Back"
msgstr "Tillbaka"
@@ -958,36 +989,6 @@ msgstr "Några objekt kan inte dekrypteras."
msgid "Set the password"
msgstr "Ställ in lösenord"
msgid "Add or remove tags"
msgstr "Lägg till eller ta bort taggar"
msgid "Duplicate"
msgstr "Duplikat"
#, javascript-format
msgid "%s - Copy"
msgstr "%s - Kopiera"
msgid "Switch between note and to-do type"
msgstr "Växla mellan antecknings- och att-göra-typ"
#, fuzzy
msgid "Switch to note type"
msgstr "Växla mellan antecknings- och att-göra-typ"
#, fuzzy
msgid "Switch to to-do type"
msgstr "Växla mellan antecknings- och att-göra-typ"
msgid "Copy Markdown link"
msgstr "Kopiera Markdown-länk"
msgid "Delete"
msgstr "Ta bort"
msgid "Delete notes?"
msgstr "Ta bort anteckningar?"
msgid "No notes in here. Create one by clicking on \"New note\"."
msgstr "Inga anteckningar här. Skapa en genom att klicka på \"Ny anteckning\"."
@@ -998,13 +999,13 @@ msgstr ""
"\"Ny anteckningsbok\"."
msgid "Location"
msgstr ""
msgstr "Plats"
msgid "URL"
msgstr ""
msgstr "URL"
msgid "Note properties"
msgstr ""
msgstr "Anteckningens egenskaper"
msgid "Open..."
msgstr "Öppna..."
@@ -1023,7 +1024,7 @@ msgid "Copy Link Address"
msgstr "Kopiera länkadress"
msgid "This attachment is not downloaded or not decrypted yet."
msgstr ""
msgstr "Denna bilaga är inte nedladdad eller ännu inte dekrypterad."
#, javascript-format
msgid "Unsupported link or message: %s"
@@ -1039,6 +1040,7 @@ msgstr ""
msgid "Only one note can be printed or exported to PDF at a time."
msgstr ""
"Endast en anteckning i taget kan bli utskriven eller exporterad till PDF."
msgid "strong text"
msgstr "stark text"
@@ -1126,18 +1128,28 @@ msgstr "Krypteringsinställningar"
msgid "Clipper Options"
msgstr "Clipper-inställningar"
msgid "Remove this tag from all the notes?"
#, fuzzy, javascript-format
msgid ""
"Delete notebook \"%s\"?\n"
"\n"
"All notes and sub-notebooks within this notebook will also be deleted."
msgstr ""
"Ta bort anteckningsboken? Alla anteckningar och delanteckningsböcker i den "
"här anteckningsboken tas bort också."
#, fuzzy, javascript-format
msgid "Remove tag \"%s\" from all notes?"
msgstr "Ta bort den här taggen från alla anteckningar?"
msgid "Remove this search from the sidebar?"
msgstr "Ta bort den här sökningen från sidofältet?"
msgid "Delete"
msgstr "Ta bort"
msgid "Rename"
msgstr "Byt namn"
msgid "Synchronise"
msgstr "Synkronisera"
msgid "Notebooks"
msgstr "Anteckningsböcker"
@@ -1145,13 +1157,48 @@ msgstr "Anteckningsböcker"
msgid "Decrypting items: %d/%d"
msgstr "Dekrypterar objekt: %d/%d"
#, fuzzy, javascript-format
#, javascript-format
msgid "Fetching resources: %d"
msgstr "Resurser: %d."
msgstr "Hämtar resurser: %d"
msgid "Please select where the sync status should be exported to"
msgstr "Välj vart synkroniseringstillståndet ska exporteras till"
msgid "Table of contents"
msgstr ""
msgid "Add or remove tags"
msgstr "Lägg till eller ta bort taggar"
msgid "Duplicate"
msgstr "Duplikat"
#, javascript-format
msgid "%s - Copy"
msgstr "%s - Kopiera"
msgid "Switch between note and to-do type"
msgstr "Växla mellan antecknings- och att-göra-typ"
#, fuzzy
msgid "Switch to note type"
msgstr "Växla mellan antecknings- och att-göra-typ"
#, fuzzy
msgid "Switch to to-do type"
msgstr "Växla mellan antecknings- och att-göra-typ"
msgid "Copy Markdown link"
msgstr "Kopiera Markdown-länk"
#, fuzzy, javascript-format
msgid "Delete note \"%s\"?"
msgstr "Ta bort anteckningar?"
#, fuzzy, javascript-format
msgid "Delete these %d notes?"
msgstr "Ta bort dessa anteckningar?"
#, javascript-format
msgid "Usage: %s"
msgstr "Användning: %s"
@@ -1270,6 +1317,12 @@ msgstr "Krypterad"
msgid "Encrypted items cannot be modified"
msgstr "Krypterade objekt kan inte ändras"
msgid "title"
msgstr "titel"
msgid "updated date"
msgstr "uppdaterad datum"
msgid "Conflicts"
msgstr "Konflikter"
@@ -1281,14 +1334,8 @@ msgid "Notebooks cannot be named \"%s\", which is a reserved title."
msgstr ""
"Anteckningsböcker kan inte namnges \"%s\", vilket är en reserverad titel."
msgid "title"
msgstr "titel"
msgid "updated date"
msgstr "uppdaterad datum"
msgid "created date"
msgstr "Skapad datum"
msgstr "skapad datum"
msgid "This note does not have geolocation information."
msgstr "Denna anteckning har inte geolokaliseringsinformation."
@@ -1331,6 +1378,10 @@ msgstr "Sortera anteckningar efter"
msgid "Reverse sort order"
msgstr "Omvänd sorteringsordning"
#, fuzzy
msgid "Sort notebooks by"
msgstr "Sortera anteckningar efter"
msgid "Save geo-location with notes"
msgstr "Spara geolokalisering med anteckningar"
@@ -1357,16 +1408,18 @@ msgid ""
"this setting so that your notes are constantly being synchronised, thus "
"reducing the number of conflicts."
msgstr ""
"Detta tillåter Joplin att köra i bakgrunden. Det är rekommenderat att "
"tillåta detta så att anteckningarna synkroniseras löpande. På det sättet "
"minskas risken för konflikter."
msgid "Start application minimised in the tray icon"
msgstr ""
msgstr "Starta programmet minimerat"
msgid "Global zoom percentage"
msgstr "Global zoomprocent"
#, fuzzy
msgid "Editor font size"
msgstr "Redigerarens typsnittsfamilj"
msgstr "Redigerarens teckenstorlek"
msgid "Editor font family"
msgstr "Redigerarens typsnittsfamilj"
@@ -1383,11 +1436,11 @@ msgid "Automatically update the application"
msgstr "Uppdatera programmet automatiskt"
msgid "Get pre-releases when checking for updates"
msgstr ""
msgstr "Inkludera även förhandsversionen vid uppdateringar"
#, javascript-format
msgid "See the pre-release page for more details: %s"
msgstr ""
msgstr "Se sidan för förhandsversioner för mer information: %s"
msgid "Synchronisation interval"
msgstr "Synkroniseringsintervall"
@@ -1447,6 +1500,9 @@ msgid ""
"to it before syncing, otherwise all files will be removed! See the FAQ for "
"more details: %s"
msgstr ""
"OBS! Om du ändrar denna plats så se till att du har en kopia på allt "
"innehåll innan du synkroniserar. Annars kommer samtliga filer att raderas. "
"Läs FAQ för mer information: %s"
msgid "Nextcloud username"
msgstr "Nextcloud-användarnamn"
@@ -1485,9 +1541,25 @@ msgstr "Ignorera TLS-certifikatfel"
msgid "Invalid option value: \"%s\". Possible values are: %s."
msgstr "Ogiltigt inställningsvärde: \"%s\". Möjliga värden är: %s."
#, fuzzy
msgid "General"
msgstr "Allmänna inställningar"
msgid "Synchronisation"
msgstr "Synkronisering"
msgid "Appearance"
msgstr "Utseende"
msgid "Note"
msgstr "Anteckning"
msgid "Application"
msgstr "Avslutar programmet"
#, javascript-format
msgid "The tag \"%s\" already exists. Please choose a different name."
msgstr ""
msgstr "Taggen \"%s\" finns redan. Välj ett annat namn."
msgid "Joplin Export File"
msgstr "Joplin-exporteringsfil"
@@ -1501,9 +1573,11 @@ msgstr "Joplin-exporteringskatalog"
msgid "Evernote Export File"
msgstr "Evernote-exporteringsfil"
#, fuzzy
msgid "Json Export Directory"
msgstr "Joplin-exporteringskatalog"
msgstr "Joplin-exportkatalog"
msgid "File"
msgstr "Fil"
msgid "Directory"
msgstr "Katalog"
@@ -1580,10 +1654,10 @@ msgid "On %s: %s"
msgstr "På %s: %s"
msgid "Permission to use camera"
msgstr ""
msgstr "Tillåtelse att använda kameran"
msgid "Your permission to use your camera is required."
msgstr ""
msgstr "Du måste ge tillåtelse att använda kameran."
msgid "There are currently no notes. Create one by clicking on the (+) button."
msgstr ""
@@ -1615,9 +1689,8 @@ msgstr "Flytta %d anteckningar till anteckningsboken \"%s\"?"
msgid "Press to set the decryption password."
msgstr "Tryck för att ställa in dekrypteringslösenordet."
#, fuzzy
msgid "Clear alarm"
msgstr "Sätt alarm"
msgstr "Ta bort alarm"
msgid "Save alarm"
msgstr "Spara alarm"
@@ -1631,22 +1704,21 @@ msgstr "Bekräfta"
msgid "Cancel synchronisation"
msgstr "Avbryt synkronisering"
#, fuzzy
msgid "Checking... Please wait."
msgstr "Avbryter... vänta."
msgstr "Kontrollerar... vänta."
#, fuzzy
msgid "Success! Synchronisation configuration appears to be correct."
msgstr "Kontrollera synkroniseringskonfigurationen"
msgstr "Lyckades! Synkroniseringsinställningarna verkar vara korrekta."
msgid ""
"Error. Please check that URL, username, password, etc. are correct and that "
"the sync target is accessible. The reported error was:"
msgstr ""
"Fel. Verifiera att URL, användarnamn, lösenord etc. är korrekta och att "
"destinationen är tillgänglig. Rapporterat fel var:"
#, fuzzy
msgid "The application has been authorised!"
msgstr "Programmet har godkänts."
msgstr "Programmet har blivit godkänt!"
#, javascript-format
msgid ""
@@ -1656,10 +1728,15 @@ msgid ""
"\n"
"Please try again."
msgstr ""
"Kunde inte auktorisera programmet:\n"
"\n"
"%s\n"
"\n"
"Försök igen."
#, fuzzy, javascript-format
#, javascript-format
msgid "Decrypted items: %s / %s"
msgstr "Dekrypterar objekt: %d/%d"
msgstr "Antal dekrypterade objekt: %s / %s"
msgid "New tags:"
msgstr "Nya taggar:"
@@ -1694,23 +1771,19 @@ msgstr ""
msgid "Joplin website"
msgstr "Joplin-webbplats"
#, fuzzy, javascript-format
msgid "Joplin v%s"
msgstr "Joplin-webbplats"
#, javascript-format
msgid "Database v%s"
msgstr ""
msgstr "Databas v%s"
#, fuzzy, javascript-format
#, javascript-format
msgid "FTS enabled: %d"
msgstr "För att ta bort: %d"
msgstr "FTS aktiverat: %d"
msgid "Login with Dropbox"
msgstr "Logga in med Dropbox"
msgid "Enter code here"
msgstr ""
msgstr "Ange kod här"
#, javascript-format
msgid "Master Key %s"
@@ -1764,9 +1837,8 @@ msgstr ""
msgid "Unsupported image type: %s"
msgstr "Bildstorlek som inte stöds: %s"
#, fuzzy
msgid "Take photo"
msgstr "Bifoga foto"
msgstr "Ta ett foto"
msgid "Attach photo"
msgstr "Bifoga foto"
@@ -1793,7 +1865,10 @@ msgid "View on map"
msgstr "Visa på karta"
msgid "Go to source URL"
msgstr ""
msgstr "Gå till källans URL"
msgid "Edit"
msgstr "Redigera"
msgid "Delete notebook"
msgstr "Ta bort anteckningsbok"
@@ -1820,6 +1895,9 @@ msgstr ""
msgid "Welcome"
msgstr "Välkommen"
#~ msgid "Joplin v%s"
#~ msgstr "Joplin v%s"
#~ msgid "State: %s."
#~ msgstr "Tillstånd: %s."

1858
CliClient/locales/tr_TR.po Normal file

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -122,9 +122,10 @@ msgstr "標記待辦事項為完成。"
msgid "Note is not a to-do: \"%s\""
msgstr "記事不等於待辨事項: \"%s\""
#, fuzzy
msgid ""
"Manages E2EE configuration. Commands are `enable`, `disable`, `decrypt`, "
"`status` and `target-status`."
"`status`, `decrypt-file` and `target-status`."
msgstr ""
"管理 E2EE 設置。命令是 `enable`,`disable`,`decrypt`,`status` 和 `target-"
"status`。"
@@ -548,6 +549,20 @@ msgstr ""
msgid "Exporting to \"%s\" as \"%s\" format. Please wait..."
msgstr "匯出到 \"%s\" 為 \"%s\" 格式。請稍候..."
msgid "Sidebar"
msgstr ""
msgid "Note list"
msgstr ""
#, fuzzy
msgid "Note title"
msgstr "記事本標題:"
#, fuzzy
msgid "Note body"
msgstr "記事本"
#, javascript-format
msgid "Importing from \"%s\" as \"%s\" format. Please wait..."
msgstr "從 \"%s\" 匯入為 \"%s\" 格式。請稍候..."
@@ -555,7 +570,8 @@ msgstr "從 \"%s\" 匯入為 \"%s\" 格式。請稍候..."
msgid "PDF File"
msgstr "PDF 檔案"
msgid "File"
#, fuzzy
msgid "&File"
msgstr "檔案"
msgid "New note"
@@ -573,6 +589,9 @@ msgstr "匯入"
msgid "Export"
msgstr "匯出"
msgid "Synchronise"
msgstr "進行同步"
msgid "Print"
msgstr "列印"
@@ -583,7 +602,8 @@ msgstr "隱藏 %s"
msgid "Quit"
msgstr "結束"
msgid "Edit"
#, fuzzy
msgid "&Edit"
msgstr "編輯"
msgid "Copy"
@@ -605,6 +625,9 @@ msgstr "粗體"
msgid "Italic"
msgstr "斜體"
msgid "Link"
msgstr ""
msgid "Insert Date Time"
msgstr "插入日期時間"
@@ -618,7 +641,8 @@ msgstr "在所有記事中搜尋"
msgid "Search in current note"
msgstr "在所有記事中搜尋"
msgid "View"
#, fuzzy
msgid "&View"
msgstr "檢視"
msgid "Toggle sidebar"
@@ -627,7 +651,12 @@ msgstr "顯示 / 隱藏側邊欄"
msgid "Toggle editor layout"
msgstr "切換編輯器佈局"
msgid "Tools"
#, fuzzy
msgid "Focus"
msgstr "游標置於內文"
#, fuzzy
msgid "&Tools"
msgstr "工具"
msgid "Synchronisation status"
@@ -642,7 +671,8 @@ msgstr "加密選項"
msgid "General Options"
msgstr "一般選項"
msgid "Help"
#, fuzzy
msgid "&Help"
msgstr "說明"
msgid "Website and documentation"
@@ -685,11 +715,11 @@ msgid "An update is available, do you want to download it now?"
msgstr "有可用的更新,您需要立即下載嗎?"
#, javascript-format
msgid "Your version: v%s"
msgid "Your version: %s"
msgstr ""
#, javascript-format
msgid "New version: v%s"
msgid "New version: %s"
msgstr ""
msgid "Yes"
@@ -761,13 +791,16 @@ msgid ""
"access Joplin."
msgstr ""
msgid "Check synchronisation configuration"
msgstr "檢測同步設置"
#, javascript-format
msgid "Notes and settings are stored in: %s"
msgstr "所有記事和設置均儲存於: %s"
msgid "Browse..."
msgstr ""
msgid "Check synchronisation configuration"
msgstr "檢測同步設置"
msgid "Apply"
msgstr "套用"
@@ -855,6 +888,10 @@ msgstr "狀態"
msgid "Encryption is:"
msgstr "加密:"
#, fuzzy
msgid "Usage"
msgstr "使用資訊: %s"
msgid "Back"
msgstr "返回"
@@ -905,36 +942,6 @@ msgstr "有些項目不能解密。"
msgid "Set the password"
msgstr "設置密碼"
msgid "Add or remove tags"
msgstr "新增或移除標籤"
msgid "Duplicate"
msgstr "新增複本"
#, javascript-format
msgid "%s - Copy"
msgstr "%s - 複本"
msgid "Switch between note and to-do type"
msgstr "切換到記事 / 待辦事項"
#, fuzzy
msgid "Switch to note type"
msgstr "切換到記事 / 待辦事項"
#, fuzzy
msgid "Switch to to-do type"
msgstr "切換到記事 / 待辦事項"
msgid "Copy Markdown link"
msgstr "複製 Markdown 連結"
msgid "Delete"
msgstr "刪除"
msgid "Delete notes?"
msgstr "刪除此記事?"
msgid "No notes in here. Create one by clicking on \"New note\"."
msgstr "當前沒有任何筆記。通過按一下 \"新增筆記\" 去建立。"
@@ -1069,18 +1076,26 @@ msgstr "加密選項"
msgid "Clipper Options"
msgstr "Clipper 選項"
msgid "Remove this tag from all the notes?"
#, fuzzy, javascript-format
msgid ""
"Delete notebook \"%s\"?\n"
"\n"
"All notes and sub-notebooks within this notebook will also be deleted."
msgstr "決定刪除記事本?此記事本中的所有記事和子記事本也將被刪除。"
#, fuzzy, javascript-format
msgid "Remove tag \"%s\" from all notes?"
msgstr "是否從所有記事中刪除此標籤?"
msgid "Remove this search from the sidebar?"
msgstr "是否從側邊欄中刪除此搜索?"
msgid "Delete"
msgstr "刪除"
msgid "Rename"
msgstr "重新命名"
msgid "Synchronise"
msgstr "進行同步"
msgid "Notebooks"
msgstr "記事本"
@@ -1095,6 +1110,41 @@ msgstr "資源: %d。"
msgid "Please select where the sync status should be exported to"
msgstr "請選擇將同步狀態導出到的位置"
msgid "Table of contents"
msgstr ""
msgid "Add or remove tags"
msgstr "新增或移除標籤"
msgid "Duplicate"
msgstr "新增複本"
#, javascript-format
msgid "%s - Copy"
msgstr "%s - 複本"
msgid "Switch between note and to-do type"
msgstr "切換到記事 / 待辦事項"
#, fuzzy
msgid "Switch to note type"
msgstr "切換到記事 / 待辦事項"
#, fuzzy
msgid "Switch to to-do type"
msgstr "切換到記事 / 待辦事項"
msgid "Copy Markdown link"
msgstr "複製 Markdown 連結"
#, fuzzy, javascript-format
msgid "Delete note \"%s\"?"
msgstr "刪除此記事?"
#, fuzzy, javascript-format
msgid "Delete these %d notes?"
msgstr "刪除這些記事?"
#, javascript-format
msgid "Usage: %s"
msgstr "使用資訊: %s"
@@ -1210,6 +1260,12 @@ msgstr "已加密"
msgid "Encrypted items cannot be modified"
msgstr "無法修改已加密項目"
msgid "title"
msgstr "標題"
msgid "updated date"
msgstr "更新日期"
msgid "Conflicts"
msgstr "衝突"
@@ -1220,12 +1276,6 @@ msgstr "無法移動記事本到此位置"
msgid "Notebooks cannot be named \"%s\", which is a reserved title."
msgstr "筆記本無法命名為 \"%s\",這標題已被保留。"
msgid "title"
msgstr "標題"
msgid "updated date"
msgstr "更新日期"
msgid "created date"
msgstr "建立日期"
@@ -1270,6 +1320,10 @@ msgstr "排序記事"
msgid "Reverse sort order"
msgstr "顛倒排序順序"
#, fuzzy
msgid "Sort notebooks by"
msgstr "排序記事"
msgid "Save geo-location with notes"
msgstr "在記事中保存地理位置資訊"
@@ -1418,6 +1472,25 @@ msgstr "忽略 TLS 證書錯誤"
msgid "Invalid option value: \"%s\". Possible values are: %s."
msgstr "不正確選項值: \"%s\"。可能的值為: %s。"
#, fuzzy
msgid "General"
msgstr "一般選項"
#, fuzzy
msgid "Synchronisation"
msgstr "顯示同步狀態"
msgid "Appearance"
msgstr ""
#, fuzzy
msgid "Note"
msgstr "記事本"
#, fuzzy
msgid "Application"
msgstr "離開本程式。"
#, javascript-format
msgid "The tag \"%s\" already exists. Please choose a different name."
msgstr ""
@@ -1438,6 +1511,9 @@ msgstr "Evernote 匯出檔"
msgid "Json Export Directory"
msgstr "Joplin 匯出目錄"
msgid "File"
msgstr "檔案"
msgid "Directory"
msgstr "目錄"
@@ -1616,10 +1692,6 @@ msgstr "- 位置: 允許將地理位置資訊附加到筆記。"
msgid "Joplin website"
msgstr "Joplin 官方網站"
#, fuzzy, javascript-format
msgid "Joplin v%s"
msgstr "Joplin 官方網站"
#, javascript-format
msgid "Database v%s"
msgstr ""
@@ -1716,6 +1788,9 @@ msgstr "在地圖上顯示"
msgid "Go to source URL"
msgstr ""
msgid "Edit"
msgstr "編輯"
msgid "Delete notebook"
msgstr "刪除記事本"
@@ -1736,6 +1811,10 @@ msgstr "您當前沒有任何筆記本。通過按一下 (+) 鍵去建立一本
msgid "Welcome"
msgstr "歡迎"
#, fuzzy
#~ msgid "Joplin v%s"
#~ msgstr "Joplin 官方網站"
#~ msgid "State: %s."
#~ msgstr "狀態: %s。"

View File

@@ -1,6 +1,6 @@
{
"name": "joplin",
"version": "1.0.120",
"version": "1.0.123",
"lockfileVersion": 1,
"requires": true,
"dependencies": {
@@ -29,16 +29,16 @@
},
"dependencies": {
"acorn": {
"version": "6.0.2",
"resolved": "https://registry.npmjs.org/acorn/-/acorn-6.0.2.tgz",
"integrity": "sha512-GXmKIvbrN3TV7aVqAzVFaMW8F8wzVX7voEBRO3bDA64+EX37YSayggRJP5Xig6HYHBkWKpFg9W5gg6orklubhg=="
"version": "6.0.6",
"resolved": "https://registry.npmjs.org/acorn/-/acorn-6.0.6.tgz",
"integrity": "sha512-5M3G/A4uBSMIlfJ+h9W125vJvPFH/zirISsW5qfxF5YzEvXJCtolLoQvM5yZft0DvMcUrPGKPOlgEu55I6iUtA=="
}
}
},
"acorn-walk": {
"version": "6.0.1",
"resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-6.0.1.tgz",
"integrity": "sha512-PqVQ8c6a3kyqdsUZlC7nljp3FFuxipBRHKu+7C1h8QygBFlzTaDX5HD383jej3Peed+1aDG8HwkfB1Z1HMNPkw=="
"version": "6.1.1",
"resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-6.1.1.tgz",
"integrity": "sha512-OtUw6JUTgxA2QoqqmrmQ7F2NYqiBPi/L2jqHyFtllhOUvXYQXf0Z1CYUinIfyT4bTCGmrA7gX9FvHA81uzCoVw=="
},
"ajv": {
"version": "5.5.2",
@@ -488,12 +488,12 @@
"integrity": "sha1-GK6XmmoMqZSwYlhTkW0mYruuCxo="
},
"data-urls": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/data-urls/-/data-urls-1.0.1.tgz",
"integrity": "sha512-0HdcMZzK6ubMUnsMmQmG0AcLQPvbvb47R0+7CCZQCYgcd8OUWG91CG7sM6GoXgjz+WLl4ArFzHtBMy/QqSF4eg==",
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/data-urls/-/data-urls-1.1.0.tgz",
"integrity": "sha512-YTWYI9se1P55u58gL5GkQHW4P6VJBJ5iBT+B5a7i2Tjadhv52paJG0qHX4A0OR6/t52odI64KP2YvFpkDOi3eQ==",
"requires": {
"abab": "^2.0.0",
"whatwg-mimetype": "^2.1.0",
"whatwg-mimetype": "^2.2.0",
"whatwg-url": "^7.0.0"
},
"dependencies": {
@@ -1427,9 +1427,9 @@
"dev": true
},
"joplin-turndown": {
"version": "4.0.9",
"resolved": "https://registry.npmjs.org/joplin-turndown/-/joplin-turndown-4.0.9.tgz",
"integrity": "sha512-8MOxX4t5Ai22muHhXPMGNoKc/AB7gSo0eUvNh6dyd6b3vcSiMIRZE8UHpMjS9ruJQ+8e+8TtJXc0nfbexeHwrA==",
"version": "4.0.11",
"resolved": "https://registry.npmjs.org/joplin-turndown/-/joplin-turndown-4.0.11.tgz",
"integrity": "sha512-2oiwWX0nKYi1NVcaprSsrXQkYdGoRtPWFmnXdWQnQW44jlgjFV38B4VrgliwX5ZMq7cbx6A9IBwfXcBL2YV2NA==",
"requires": {
"jsdom": "^11.9.0"
}
@@ -1488,6 +1488,17 @@
"xml-name-validator": "^3.0.0"
},
"dependencies": {
"ajv": {
"version": "6.7.0",
"resolved": "https://registry.npmjs.org/ajv/-/ajv-6.7.0.tgz",
"integrity": "sha512-RZXPviBTtfmtka9n9sy1N5M5b82CbxWIR6HIis4s3WQTXDJamc/0gpCWNGz6EWdWp4DOfjzJfhz/AS9zVPjjWg==",
"requires": {
"fast-deep-equal": "^2.0.1",
"fast-json-stable-stringify": "^2.0.0",
"json-schema-traverse": "^0.4.1",
"uri-js": "^4.2.2"
}
},
"aws4": {
"version": "1.8.0",
"resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz",
@@ -1506,46 +1517,46 @@
"resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
"integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g=="
},
"fast-deep-equal": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz",
"integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk="
},
"form-data": {
"version": "2.3.2",
"resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.2.tgz",
"integrity": "sha1-SXBJi+YEwgwAXU9cI67NIda0kJk=",
"version": "2.3.3",
"resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz",
"integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==",
"requires": {
"asynckit": "^0.4.0",
"combined-stream": "1.0.6",
"combined-stream": "^1.0.6",
"mime-types": "^2.1.12"
},
"dependencies": {
"combined-stream": {
"version": "1.0.6",
"resolved": "http://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz",
"integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=",
"requires": {
"delayed-stream": "~1.0.0"
}
}
}
},
"har-validator": {
"version": "5.1.0",
"resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.0.tgz",
"integrity": "sha512-+qnmNjI4OfH2ipQ9VQOw23bBd/ibtfbVdK2fYbY4acTDqKTW/YDp9McimZdDbG8iV9fZizUqQMD5xvriB146TA==",
"version": "5.1.3",
"resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz",
"integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==",
"requires": {
"ajv": "^5.3.0",
"ajv": "^6.5.5",
"har-schema": "^2.0.0"
}
},
"json-schema-traverse": {
"version": "0.4.1",
"resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
"integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg=="
},
"mime-db": {
"version": "1.36.0",
"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.36.0.tgz",
"integrity": "sha512-L+xvyD9MkoYMXb1jAmzI/lWYAxAMCPvIBSWur0PZ5nOf5euahRLVqH//FKW9mWp2lkqUgYiXPgkzfMUFi4zVDw=="
"version": "1.37.0",
"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.37.0.tgz",
"integrity": "sha512-R3C4db6bgQhlIhPU48fUtdVmKnflq+hRdad7IyKhtFj06VPNVdk2RhiYL3UjQIlso8L+YxAtFkobT0VK+S/ybg=="
},
"mime-types": {
"version": "2.1.20",
"resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.20.tgz",
"integrity": "sha512-HrkrPaP9vGuWbLK1B1FfgAkbqNjIuy4eHlIYnFi7kamZyLLrGlo2mpcx0bBmNpKqBtYtAfGbodDddIgddSJC2A==",
"version": "2.1.21",
"resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.21.tgz",
"integrity": "sha512-3iL6DbwpyLzjR3xHSFNFeb9Nz/M8WDkX33t1GFQnFOllWk8pOrh/LSrB5OXlnlW5P9LH73X6loW/eogc+F5lJg==",
"requires": {
"mime-db": "~1.36.0"
"mime-db": "~1.37.0"
}
},
"oauth-sign": {
@@ -2793,7 +2804,7 @@
"requires": {
"chalk": "^2.1.0",
"emphasize": "^1.5.0",
"node-emoji": "git+https://github.com/laurent22/node-emoji.git#9fa01eac463e94dde1316ef8c53089eeef4973b5",
"node-emoji": "git+https://github.com/laurent22/node-emoji.git",
"slice-ansi": "^1.0.0",
"string-width": "^2.1.1",
"terminal-kit": "^1.13.11",
@@ -2915,6 +2926,21 @@
"resolved": "https://registry.npmjs.org/upper-case/-/upper-case-1.1.3.tgz",
"integrity": "sha1-9rRQHC7EzdJrp4vnIilh3ndiFZg="
},
"uri-js": {
"version": "4.2.2",
"resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz",
"integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==",
"requires": {
"punycode": "^2.1.0"
},
"dependencies": {
"punycode": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
"integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A=="
}
}
},
"url-parse": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.2.0.tgz",
@@ -2963,17 +2989,17 @@
"integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg=="
},
"whatwg-encoding": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.4.tgz",
"integrity": "sha512-vM9KWN6MP2mIHZ86ytcyIv7e8Cj3KTfO2nd2c8PFDqcI4bxFmQp83ibq4wadq7rL9l9sZV6o9B0LTt8ygGAAXg==",
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz",
"integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==",
"requires": {
"iconv-lite": "0.4.23"
"iconv-lite": "0.4.24"
},
"dependencies": {
"iconv-lite": {
"version": "0.4.23",
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz",
"integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==",
"version": "0.4.24",
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
"integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
"requires": {
"safer-buffer": ">= 2.1.2 < 3"
}
@@ -2981,9 +3007,9 @@
}
},
"whatwg-mimetype": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.2.0.tgz",
"integrity": "sha512-5YSO1nMd5D1hY3WzAQV3PzZL83W3YeyR1yW9PcH26Weh1t+Vzh9B6XkDh7aXm83HBZ4nSMvkjvN2H2ySWIvBgw=="
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz",
"integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g=="
},
"whatwg-url": {
"version": "6.5.0",

View File

@@ -20,7 +20,7 @@
],
"owner": "Laurent Cozic"
},
"version": "1.0.120",
"version": "1.0.123",
"bin": {
"joplin": "./main.js"
},
@@ -41,7 +41,7 @@
"html-minifier": "^3.5.15",
"image-data-uri": "^2.0.0",
"image-type": "^3.0.0",
"joplin-turndown": "^4.0.9",
"joplin-turndown": "^4.0.11",
"joplin-turndown-plugin-gfm": "^1.0.7",
"jssha": "^2.3.0",
"levenshtein": "^1.0.5",

View File

@@ -22,20 +22,22 @@ trap finish EXIT
cd "$ROOT_DIR"
npm test tests-build/ArrayUtils.js
npm test tests-build/encryption.js
npm test tests-build/EnexToMd.js
npm test tests-build/HtmlToMd.js
npm test tests-build/markdownUtils.js
npm test tests-build/models_BaseItem.js
npm test tests-build/models_Folder.js
npm test tests-build/models_Note.js
npm test tests-build/models_Tag.js
npm test tests-build/models_ItemChange.js
npm test tests-build/models_Note.js
npm test tests-build/models_Resource.js
npm test tests-build/models_Setting.js
npm test tests-build/models_Tag.js
npm test tests-build/pathUtils.js
npm test tests-build/StringUtils.js
npm test tests-build/services_InteropService.js
npm test tests-build/services_ResourceService.js
npm test tests-build/urlUtils.js
npm test tests-build/encryption.js
npm test tests-build/services_rest_Api.js
npm test tests-build/synchronizer.js
npm test tests-build/services_SearchEngine.js
npm test tests-build/StringUtils.js
npm test tests-build/synchronizer.js
npm test tests-build/urlUtils.js

View File

@@ -37,7 +37,7 @@ describe('HtmlToMd', function() {
const htmlPath = basePath + '/' + htmlFilename;
const mdPath = basePath + '/' + filename(htmlFilename) + '.md';
// if (htmlFilename !== 'anchor_with_url_with_spaces.html') continue;
// if (htmlFilename !== 'picture.html') continue;
const html = await shim.fsDriver().readFile(htmlPath);
let expectedMd = await shim.fsDriver().readFile(mdPath);

View File

@@ -20,9 +20,9 @@ describe('StringUtils', function() {
[['test'], 'test', 'a', 'b', 'atestb'],
[['test'], 'Test', 'a', 'b', 'aTestb'],
[['te[]st'], 'Te[]st', 'a', 'b', 'aTe[]stb'],
[['test1', 'test2'], 'bla test1 blabla test1 bla test2 not this one - test22', 'a', 'b', 'bla atest1b blabla atest1b bla atest2b not this one - test22'],
// [['test1', 'test2'], 'bla test1 blabla test1 bla test2 not this one - test22', 'a', 'b', 'bla atest1b blabla atest1b bla atest2b not this one - test22'],
[['test1', 'test2'], 'bla test1 test1 bla test2', '<span class="highlighted-keyword">', '</span>', 'bla <span class="highlighted-keyword">test1</span> <span class="highlighted-keyword">test1</span> bla <span class="highlighted-keyword">test2</span>'],
[[{ type:'regex', value:'test.*?'}], 'bla test1 test1 bla test2 test tttest', 'a', 'b', 'bla atest1b atest1b bla atest2b atestb tttest'],
// [[{ type:'regex', value:'test.*?'}], 'bla test1 test1 bla test2 test tttest', 'a', 'b', 'bla atest1b atest1b bla atest2b atestb tttest'],
];
for (let i = 0; i < testCases.length; i++) {
@@ -36,7 +36,7 @@ describe('StringUtils', function() {
const actual = StringUtils.surroundKeywords(keywords, input, prefix, suffix);
expect(actual).toBe(expected);
expect(actual).toBe(expected, 'Test case ' + i);
}
done();

View File

@@ -0,0 +1,47 @@
<figure itemprop="associatedMedia image" itemscope="" itemtype="http://schema.org/ImageObject" data-component="image" data-media-id="75583fcfe2eb74f1e89ea320355ff4156f4ade7b" id="img-1">
<meta itemprop="representativeOfPage" content="true">
<meta itemprop="url" content="https://i.guim.co.uk/img/media/75583fcfe2eb74f1e89ea320355ff4156f4ade7b/0_49_3904_2342/master/3904.jpg?width=700&amp;quality=85&amp;auto=format&amp;fit=max&amp;s=2a6a7ba9738c6a6a79eab39ba46c34cd">
<meta itemprop="width" content="3904">
<meta itemprop="height" content="2342">
<a href="#img-1" data-link-name="Launch Article Lightbox" data-is-ajax="">
<div>
<picture>
<!--[if IE 9]><video style="display: none;"><![endif]-->
<source media="(min-width: 980px) and (-webkit-min-device-pixel-ratio: 1.25), (min-width: 980px) and (min-resolution: 120dpi)" sizes="620px" srcset="https://i.guim.co.uk/img/media/75583fcfe2eb74f1e89ea320355ff4156f4ade7b/0_49_3904_2342/master/3904.jpg?width=620&amp;quality=45&amp;auto=format&amp;fit=max&amp;dpr=2&amp;s=bacff59339e5ba117f957c24218ef76b 1240w">
<source media="(min-width: 980px)" sizes="620px" srcset="https://i.guim.co.uk/img/media/75583fcfe2eb74f1e89ea320355ff4156f4ade7b/0_49_3904_2342/master/3904.jpg?width=620&amp;quality=85&amp;auto=format&amp;fit=max&amp;s=f1427ce6689688d3d6e0087fe9cb5c18 620w">
<source media="(min-width: 740px) and (-webkit-min-device-pixel-ratio: 1.25), (min-width: 740px) and (min-resolution: 120dpi)" sizes="700px" srcset="https://i.guim.co.uk/img/media/75583fcfe2eb74f1e89ea320355ff4156f4ade7b/0_49_3904_2342/master/3904.jpg?width=700&amp;quality=45&amp;auto=format&amp;fit=max&amp;dpr=2&amp;s=70accd3c6e7d2c36f5ccc7321eab097e 1400w">
<source media="(min-width: 740px)" sizes="700px" srcset="https://i.guim.co.uk/img/media/75583fcfe2eb74f1e89ea320355ff4156f4ade7b/0_49_3904_2342/master/3904.jpg?width=700&amp;quality=85&amp;auto=format&amp;fit=max&amp;s=2a6a7ba9738c6a6a79eab39ba46c34cd 700w">
<source media="(min-width: 660px) and (-webkit-min-device-pixel-ratio: 1.25), (min-width: 660px) and (min-resolution: 120dpi)" sizes="620px" srcset="https://i.guim.co.uk/img/media/75583fcfe2eb74f1e89ea320355ff4156f4ade7b/0_49_3904_2342/master/3904.jpg?width=620&amp;quality=45&amp;auto=format&amp;fit=max&amp;dpr=2&amp;s=bacff59339e5ba117f957c24218ef76b 1240w">
<source media="(min-width: 660px)" sizes="620px" srcset="https://i.guim.co.uk/img/media/75583fcfe2eb74f1e89ea320355ff4156f4ade7b/0_49_3904_2342/master/3904.jpg?width=620&amp;quality=85&amp;auto=format&amp;fit=max&amp;s=f1427ce6689688d3d6e0087fe9cb5c18 620w">
<source media="(min-width: 480px) and (-webkit-min-device-pixel-ratio: 1.25), (min-width: 480px) and (min-resolution: 120dpi)" sizes="645px" srcset="https://i.guim.co.uk/img/media/75583fcfe2eb74f1e89ea320355ff4156f4ade7b/0_49_3904_2342/master/3904.jpg?width=645&amp;quality=45&amp;auto=format&amp;fit=max&amp;dpr=2&amp;s=6751fcff1b880acc45ed5aab6511a2ca 1290w">
<source media="(min-width: 480px)" sizes="645px" srcset="https://i.guim.co.uk/img/media/75583fcfe2eb74f1e89ea320355ff4156f4ade7b/0_49_3904_2342/master/3904.jpg?width=645&amp;quality=85&amp;auto=format&amp;fit=max&amp;s=d18702564383ce5d613d22b96ec6d726 645w">
<source media="(min-width: 0px) and (-webkit-min-device-pixel-ratio: 1.25), (min-width: 0px) and (min-resolution: 120dpi)" sizes="465px" srcset="https://i.guim.co.uk/img/media/75583fcfe2eb74f1e89ea320355ff4156f4ade7b/0_49_3904_2342/master/3904.jpg?width=465&amp;quality=45&amp;auto=format&amp;fit=max&amp;dpr=2&amp;s=a7b87fb26b9813d197f3c236a5282ca4 930w">
<source media="(min-width: 0px)" sizes="465px" srcset="https://i.guim.co.uk/img/media/75583fcfe2eb74f1e89ea320355ff4156f4ade7b/0_49_3904_2342/master/3904.jpg?width=465&amp;quality=85&amp;auto=format&amp;fit=max&amp;s=821ae9e950ae92371b40a35e98a31116 465w">
<!--[if IE 9]></video><![endif]-->
<img itemprop="contentUrl" alt="A blood moon" src="https://i.guim.co.uk/img/media/75583fcfe2eb74f1e89ea320355ff4156f4ade7b/0_49_3904_2342/master/3904.jpg?width=300&amp;quality=85&amp;auto=format&amp;fit=max&amp;s=1e9b643d2c109a1e271f50046eac1324">
</picture>
</div>
<span>
<svg width="22" height="22" viewBox="0 0 22 22">
<path d="M3.4 20.2L9 14.5 7.5 13l-5.7 5.6L1 14H0v7.5l.5.5H8v-1l-4.6-.8M18.7 1.9L13 7.6 14.4 9l5.7-5.7.5 4.7h1.2V.6l-.5-.5H14v1.2l4.7.6"></path>
</svg>
</span>
</a>
<label for="show-caption">
<span>
<svg width="6" height="14" viewBox="0 0 6 14">
<path d="M4.6 12l-.4 1.4c-.7.2-1.9.6-3 .6-.7 0-1.2-.2-1.2-.9 0-.2 0-.3.1-.5l2-6.7H.7l.4-1.5 4.2-.6h.2L3 12h1.6zm-.3-9.2c-.9 0-1.4-.5-1.4-1.3C2.9.5 3.7 0 4.6 0 5.4 0 6 .5 6 1.3c0 1-.8 1.5-1.7 1.5z"></path>
</svg>
</span>
</label>
<figcaption itemprop="description">
<span>
<svg width="11" height="10" viewBox="0 0 11 10">
<path fill-rule="evenodd" d="M5.5 0L11 10H0z"></path>
</svg>
</span>
A blood moon last occurred in July 2018, though clouds largely obscured the celestial phenomenon in the UK.
Photograph: JM F Almeida/Getty Images
</figcaption>
</figure>

View File

@@ -0,0 +1,3 @@
[![A blood moon](https://i.guim.co.uk/img/media/75583fcfe2eb74f1e89ea320355ff4156f4ade7b/0_49_3904_2342/master/3904.jpg?width=300&quality=85&auto=format&fit=max&s=1e9b643d2c109a1e271f50046eac1324)](#img-1)
A blood moon last occurred in July 2018, though clouds largely obscured the celestial phenomenon in the UK. Photograph: JM F Almeida/Getty Images

View File

@@ -52,4 +52,53 @@ describe('models_Folder', function() {
expect(all.length).toBe(0);
}));
it('should sort by last modified, based on content', asyncTest(async () => {
let folders;
let f1 = await Folder.save({ title: "folder1" }); await sleep(0.1);
let f2 = await Folder.save({ title: "folder2" }); await sleep(0.1);
let f3 = await Folder.save({ title: "folder3" }); await sleep(0.1);
let n1 = await Note.save({ title: 'note1', parent_id: f2.id });
folders = await Folder.orderByLastModified(await Folder.all(), 'desc');
expect(folders.length).toBe(3);
expect(folders[0].id).toBe(f2.id);
expect(folders[1].id).toBe(f3.id);
expect(folders[2].id).toBe(f1.id);
let n2 = await Note.save({ title: 'note1', parent_id: f1.id });
folders = await Folder.orderByLastModified(await Folder.all(), 'desc');
expect(folders[0].id).toBe(f1.id);
expect(folders[1].id).toBe(f2.id);
expect(folders[2].id).toBe(f3.id);
await Note.save({ id: n1.id, title: 'note1 mod' });
folders = await Folder.orderByLastModified(await Folder.all(), 'desc');
expect(folders[0].id).toBe(f2.id);
expect(folders[1].id).toBe(f1.id);
expect(folders[2].id).toBe(f3.id);
folders = await Folder.orderByLastModified(await Folder.all(), 'asc');
expect(folders[0].id).toBe(f3.id);
expect(folders[1].id).toBe(f1.id);
expect(folders[2].id).toBe(f2.id);
}));
it('should sort by last modified, based on content (sub-folders too)', asyncTest(async () => {
let folders;
let f1 = await Folder.save({ title: "folder1" }); await sleep(0.1);
let f2 = await Folder.save({ title: "folder2" }); await sleep(0.1);
let f3 = await Folder.save({ title: "folder3", parent_id: f1.id }); await sleep(0.1);
let n1 = await Note.save({ title: 'note1', parent_id: f3.id });
folders = await Folder.orderByLastModified(await Folder.all(), 'desc');
expect(folders.length).toBe(3);
expect(folders[0].id).toBe(f1.id);
expect(folders[1].id).toBe(f3.id);
expect(folders[2].id).toBe(f2.id);
}));
});

View File

@@ -4,6 +4,7 @@ const { time } = require('lib/time-utils.js');
const { asyncTest, fileContentEqual, setupDatabase, setupDatabaseAndSynchronizer, db, synchronizer, fileApi, sleep, clearDatabase, switchClient, syncTargetId, objectsEqual, checkThrowAsync } = require('test-utils.js');
const Folder = require('lib/models/Folder.js');
const Note = require('lib/models/Note.js');
const NoteTag = require('lib/models/NoteTag.js');
const Tag = require('lib/models/Tag.js');
const BaseModel = require('lib/BaseModel.js');
const { shim } = require('lib/shim');
@@ -42,4 +43,18 @@ describe('models_Tag', function() {
expect(hasThrown).toBe(true);
}));
it('should not return tags without notes', asyncTest(async () => {
let folder1 = await Folder.save({ title: "folder1" });
let note1 = await Note.save({ title: 'ma note', parent_id: folder1.id });
await Tag.setNoteTagsByTitles(note1.id, ['un']);
let tags = await Tag.allWithNotes();
expect(tags.length).toBe(1);
await Note.delete(note1.id);
tags = await Tag.allWithNotes();
expect(tags.length).toBe(0);
}));
});

View File

@@ -1,6 +1,6 @@
require('app-module-path').addPath(__dirname);
const { friendlySafeFilename } = require('lib/path-utils.js');
const { extractExecutablePath, quotePath, unquotePath, friendlySafeFilename } = require('lib/path-utils.js');
const { fileContentEqual, setupDatabase, setupDatabaseAndSynchronizer, db, synchronizer, fileApi, sleep, clearDatabase, switchClient, syncTargetId, objectsEqual, checkThrowAsync } = require('test-utils.js');
process.on('unhandledRejection', (reason, p) => {
@@ -36,4 +36,41 @@ describe('pathUtils', function() {
done();
});
it('should quote and unquote paths', async (done) => {
const testCases = [
['', ''],
['/my/path', '/my/path'],
['/my/path with spaces', '"/my/path with spaces"'],
['/my/weird"path', '"/my/weird\\"path"'],
['c:\\Windows\\test.dll', 'c:\\Windows\\test.dll'],
['c:\\Windows\\test test.dll', '"c:\\Windows\\test test.dll"'],
];
for (let i = 0; i < testCases.length; i++) {
const t = testCases[i];
expect(quotePath(t[0])).toBe(t[1]);
expect(unquotePath(quotePath(t[0]))).toBe(t[0]);
}
done();
});
it('should extract executable path from command', async (done) => {
const testCases = [
['', ''],
['/my/cmd -some -args', '/my/cmd'],
['"/my/cmd" -some -args', '"/my/cmd"'],
['"/my/cmd"', '"/my/cmd"'],
['"/my/cmd and space" -some -flags', '"/my/cmd and space"'],
['"" -some -flags', '""'],
];
for (let i = 0; i < testCases.length; i++) {
const t = testCases[i];
expect(extractExecutablePath(t[0])).toBe(t[1]);
}
done();
});
});

View File

@@ -111,6 +111,58 @@ describe('services_SearchEngine', function() {
expect(rows[4].id).toBe(n5.id);
}));
it('should order search results by relevance (last updated first)', asyncTest(async () => {
let rows;
const n1 = await Note.save({ title: "abcd" });
await sleep(0.1);
const n2 = await Note.save({ title: "abcd" });
await sleep(0.1);
const n3 = await Note.save({ title: "abcd" });
await sleep(0.1);
await engine.syncTables();
rows = await engine.search('abcd');
expect(rows[0].id).toBe(n3.id);
expect(rows[1].id).toBe(n2.id);
expect(rows[2].id).toBe(n1.id);
await Note.save({ id: n1.id, title: "abcd" });
await engine.syncTables();
rows = await engine.search('abcd');
expect(rows[0].id).toBe(n1.id);
expect(rows[1].id).toBe(n3.id);
expect(rows[2].id).toBe(n2.id);
}));
it('should order search results by relevance (completed to-dos last)', asyncTest(async () => {
let rows;
const n1 = await Note.save({ title: "abcd", is_todo: 1 });
await sleep(0.1);
const n2 = await Note.save({ title: "abcd", is_todo: 1 });
await sleep(0.1);
const n3 = await Note.save({ title: "abcd", is_todo: 1 });
await sleep(0.1);
await engine.syncTables();
rows = await engine.search('abcd');
expect(rows[0].id).toBe(n3.id);
expect(rows[1].id).toBe(n2.id);
expect(rows[2].id).toBe(n1.id);
await Note.save({ id: n3.id, todo_completed: Date.now() });
await engine.syncTables();
rows = await engine.search('abcd');
expect(rows[0].id).toBe(n2.id);
expect(rows[1].id).toBe(n1.id);
expect(rows[2].id).toBe(n3.id);
}));
it('should supports various query types', asyncTest(async () => {
let rows;
@@ -221,37 +273,63 @@ describe('services_SearchEngine', function() {
const expected = t[1];
const actual = engine.parseQuery(input);
expect(JSON.stringify(actual.terms._)).toBe(JSON.stringify(expected._));
expect(JSON.stringify(actual.terms.title)).toBe(JSON.stringify(expected.title));
expect(JSON.stringify(actual.terms.body)).toBe(JSON.stringify(expected.body));
const _Values = actual.terms._ ? actual.terms._.map(v => v.value) : undefined;
const titleValues = actual.terms.title ? actual.terms.title.map(v => v.value) : undefined;
const bodyValues = actual.terms.body ? actual.terms.body.map(v => v.value) : undefined;
expect(JSON.stringify(_Values)).toBe(JSON.stringify(expected._), 'Test case (_) ' + i);
expect(JSON.stringify(titleValues)).toBe(JSON.stringify(expected.title), 'Test case (title) ' + i);
expect(JSON.stringify(bodyValues)).toBe(JSON.stringify(expected.body), 'Test case (body) ' + i);
}
}));
it('should parse query strings with wildcards', asyncTest(async () => {
// it('should parse query strings with wildcards', asyncTest(async () => {
// let rows;
// const testCases = [
// ['do*', ['do', 'dog', 'domino'], [] ],
// // "*" is a wildcard only when used at the end (to search for documents with the specified prefix)
// // If it's at the beginning, it's ignored, if it's in the middle, it's treated as a litteral "*".
// ['*an*', ['an', 'anneau'], ['piano', 'plan'] ],
// ['no*no', ['no*no'], ['nonono'] ],
// ];
// for (let i = 0; i < testCases.length; i++) {
// const t = testCases[i];
// const input = t[0];
// const shouldMatch = t[1];
// const shouldNotMatch = t[2];
// const regex = new RegExp(engine.parseQuery(input).terms._[0].value, 'gmi');
// for (let j = 0; j < shouldMatch.length; j++) {
// const r = shouldMatch[j].match(regex);
// expect(!!r).toBe(true, '"' + input + '" should match "' + shouldMatch[j] + '"');
// }
// }
// expect(engine.parseQuery('*').termCount).toBe(0);
// }));
it('should handle queries with special characters', asyncTest(async () => {
let rows;
const testCases = [
['do*', ['do', 'dog', 'domino'], [] ],
// "*" is a wildcard only when used at the end (to searhc for documents with the specified prefix)
// If it's at the beginning, it's ignored, if it's in the middle, it's treated as a litteral "*".
['*an*', ['an', 'anneau'], ['piano', 'plan'] ],
['no*no', ['no*no'], ['nonono'] ],
['did-not-match', 'did-not-match'],
['does match', 'does match'],
];
for (let i = 0; i < testCases.length; i++) {
const t = testCases[i];
const input = t[0];
const shouldMatch = t[1];
const shouldNotMatch = t[2];
const regex = new RegExp(engine.parseQuery(input).terms._[0].value, 'gmi');
const content = t[0];
const query = t[1];
for (let j = 0; j < shouldMatch.length; j++) {
const r = shouldMatch[j].match(regex);
expect(!!r).toBe(true, '"' + input + '" should match "' + shouldMatch[j] + '"');
}
const n = await Note.save({ title: content });
await engine.syncTables();
rows = await engine.search(query);
expect(rows.length).toBe(1);
await Note.delete(n.id);
}
expect(engine.parseQuery('*').termCount).toBe(0);
}));
});

View File

@@ -170,6 +170,17 @@ describe('services_rest_Api', function() {
done();
});
it('should create folders with supplied ID', async (done) => {
const response = await api.route('POST', 'folders', null, JSON.stringify({
id: '12345678123456781234567812345678',
title: 'from api',
}));
expect(response.id).toBe('12345678123456781234567812345678');
done();
});
it('should create notes with images', async (done) => {
let response = null;
const f = await Folder.save({ title: "mon carnet" });

View File

@@ -15,6 +15,7 @@ const MasterKey = require('lib/models/MasterKey');
const BaseItem = require('lib/models/BaseItem.js');
const BaseModel = require('lib/BaseModel.js');
const SyncTargetRegistry = require('lib/SyncTargetRegistry.js');
const WelcomeUtils = require('lib/WelcomeUtils');
process.on('unhandledRejection', (reason, p) => {
console.log('Unhandled Rejection at: Promise', p, 'reason:', reason);
@@ -1099,4 +1100,46 @@ describe('Synchronizer', function() {
expect(note2.title).toBe("un UPDATE");
}));
it("should create a new Welcome notebook on each client", asyncTest(async () => {
// Create the Welcome items on two separate clients
await WelcomeUtils.createWelcomeItems();
await synchronizer().start();
await switchClient(2);
await WelcomeUtils.createWelcomeItems();
const beforeFolderCount = (await Folder.all()).length;
const beforeNoteCount = (await Note.all()).length;
expect(beforeFolderCount === 1).toBe(true);
expect(beforeNoteCount > 1).toBe(true);
await synchronizer().start();
const afterFolderCount = (await Folder.all()).length;
const afterNoteCount = (await Note.all()).length;
expect(afterFolderCount).toBe(beforeFolderCount * 2);
expect(afterNoteCount).toBe(beforeNoteCount * 2);
// Changes to the Welcome items should be synced to all clients
const f1 = (await Folder.all())[0];
await Folder.save({ id: f1.id, title: 'Welcome MOD' });
await synchronizer().start();
await switchClient(1);
await synchronizer().start();
const f1_1 = await Folder.load(f1.id);
expect(f1_1.title).toBe('Welcome MOD');
// Now check that it created the duplicate tag
const tags = await Tag.modelSelectAll('SELECT * FROM tags WHERE title = "organising"');
expect(tags.length).toBe(2);
}));
});

View File

@@ -30,6 +30,21 @@
return output;
}
function getImageSizes(element) {
const images = element.getElementsByTagName('img');
const output = {};
for (let i = 0; i < images.length; i++) {
const img = images[i];
output[img.src] = {
width: img.width,
height: img.height,
naturalWidth: img.naturalWidth,
naturalHeight: img.naturalHeight,
};
}
return output;
}
// Cleans up element by removing all its invisible children (which we don't want to render as Markdown)
function cleanUpElement(element) {
const childNodes = element.childNodes;
@@ -74,7 +89,7 @@
async function prepareCommandResponse(command) {
console.info('Got command: ' + command.name);
const clippedContentResponse = (title, html) => {
const clippedContentResponse = (title, html, imageSizes) => {
return {
name: 'clippedContent',
title: title,
@@ -83,6 +98,7 @@
url: location.origin + location.pathname + location.search,
parent_id: command.parent_id,
tags: command.tags || '',
image_sizes: imageSizes,
};
}
@@ -99,20 +115,20 @@
response.warning = 'Could not retrieve simplified version of page - full page has been saved instead.';
return response;
}
return clippedContentResponse(article.title, article.body);
return clippedContentResponse(article.title, article.body, getImageSizes(document));
} else if (command.name === "completePageHtml") {
const cleanDocument = document.body.cloneNode(true);
cleanUpElement(cleanDocument);
return clippedContentResponse(pageTitle(), cleanDocument.innerHTML);
return clippedContentResponse(pageTitle(), cleanDocument.innerHTML, getImageSizes(document));
} else if (command.name === "selectedHtml") {
const range = window.getSelection().getRangeAt(0);
const container = document.createElement('div');
container.appendChild(range.cloneContents());
return clippedContentResponse(pageTitle(), container.innerHTML);
return clippedContentResponse(pageTitle(), container.innerHTML, getImageSizes(document));
} else if (command.name === 'screenshot') {
@@ -233,6 +249,10 @@
return {};
} else if (command.name === "pageUrl") {
let url = location.origin + location.pathname + location.search;
return clippedContentResponse(pageTitle(), url, getImageSizes(document));
} else {
throw new Error('Unknown command: ' + JSON.stringify(command));
}

View File

@@ -5,6 +5,7 @@
"description": "Capture and save web pages and screenshots from your browser to Joplin.",
"homepage_url": "https://joplin.cozic.net",
"icons": {
"32": "icons/32.png",
"48": "icons/48.png",
"96": "icons/96.png"
},

File diff suppressed because it is too large Load Diff

View File

@@ -7,7 +7,7 @@
"react": "^16.3.2",
"react-dom": "^16.3.2",
"react-redux": "^5.0.7",
"react-scripts": "1.1.4",
"react-scripts": "^2.1.5",
"redux": "^4.0.0"
},
"scripts": {
@@ -19,7 +19,13 @@
"postinstall": "node scripts/postinstall.js"
},
"devDependencies": {
"cra-build-watch": "^1.0.1",
"cra-build-watch": "^1.4.0",
"fs-extra": "^6.0.1"
}
},
"browserslist": [
">0.2%",
"not dead",
"not ie <= 11",
"not op_mini all"
]
}

View File

@@ -49,6 +49,12 @@ class AppComponent extends Component {
});
}
this.clipUrl_click = () => {
bridge().sendCommandToActiveTab({
name: 'pageUrl',
});
}
this.clipScreenshot_click = async () => {
try {
const baseUrl = await bridge().clipperServerBaseUrl();
@@ -296,6 +302,7 @@ class AppComponent extends Component {
<li><a className="Button" onClick={this.clipComplete_click}>Clip complete page</a></li>
<li><a className="Button" onClick={this.clipSelection_click}>Clip selection</a></li>
<li><a className="Button" onClick={this.clipScreenshot_click}>Clip screenshot</a></li>
<li><a className="Button" onClick={this.clipUrl_click}>Clip URL</a></li>
</ul>
</div>
{ foldersComp() }

View File

@@ -29,6 +29,7 @@ class Bridge {
source_url: command.url,
parent_id: command.parent_id,
tags: command.tags || '',
image_sizes: command.image_sizes || {},
};
this.dispatch({ type: 'CLIPPED_CONTENT_SET', content: content });

View File

@@ -54,6 +54,9 @@ class ElectronAppWrapper {
y: windowState.y,
width: windowState.width,
height: windowState.height,
webPreferences: {
nodeIntegration: true,
},
};
// Linux icon workaround for bug https://github.com/electron-userland/electron-builder/issues/2098
@@ -77,7 +80,7 @@ class ElectronAppWrapper {
}))
// Uncomment this to view errors if the application does not start
if (this.env_ === 'dev') this.win_.webContents.openDevTools();
// if (this.env_ === 'dev') this.win_.webContents.openDevTools();
this.win_.on('close', (event) => {
// If it's on macOS, the app is completely closed only if the user chooses to close the app (willQuitApp_ will be true)
@@ -191,19 +194,24 @@ class ElectronAppWrapper {
ensureSingleInstance() {
if (this.env_ === 'dev') return false;
return new Promise((resolve, reject) => {
const alreadyRunning = this.electronApp_.makeSingleInstance((commandLine, workingDirectory) => {
const win = this.window();
if (!win) return;
if (win.isMinimized()) win.restore();
win.show();
win.focus();
});
const gotTheLock = this.electronApp_.requestSingleInstanceLock();
if (alreadyRunning) this.electronApp_.quit();
if (!gotTheLock) {
// Another instance is already running - exit
this.electronApp_.quit();
return true;
}
resolve(alreadyRunning);
// Someone tried to open a second instance - focus our window instead
this.electronApp_.on('second-instance', (event, commandLine, workingDirectory) => {
const win = this.window();
if (!win) return;
if (win.isMinimized()) win.restore();
win.show();
win.focus();
});
return false;
}
async start() {
@@ -211,8 +219,8 @@ class ElectronAppWrapper {
// the "ready" event. So we use the function below to make sure that the app is ready.
await this.waitForElectronAppReady();
const alreadyRunning = await this.ensureSingleInstance();
if (alreadyRunning) return;
const alreadyRunning = this.ensureSingleInstance();
if (alreadyRunning) return;
this.createWindow();

View File

@@ -42,6 +42,7 @@ const appDefaultState = Object.assign({}, defaultState, {
sidebarVisibility: true,
windowContentSize: bridge().windowContentSize(),
watchedNoteFiles: [],
lastEditorScrollPercents: {},
});
class Application extends BaseApplication {
@@ -171,6 +172,14 @@ class Application extends BaseApplication {
}
break;
case 'EDITOR_SCROLL_PERCENT_SET':
newState = Object.assign({}, state);
const newPercents = Object.assign({}, newState.lastEditorScrollPercents);
newPercents[action.noteId] = action.percent;
newState.lastEditorScrollPercents = newPercents;
break;
}
} catch (error) {
error.message = 'In reducer: ' + error.message + ' Action: ' + JSON.stringify(action);
@@ -225,25 +234,78 @@ class Application extends BaseApplication {
this.updateMenu(screen);
}
focusElement_(target) {
this.dispatch({
type: 'WINDOW_COMMAND',
name: 'focusElement',
target: target,
});
}
updateMenu(screen) {
if (this.lastMenuScreen_ === screen) return;
const sortNoteItems = [];
const sortNoteOptions = Setting.enumOptions('notes.sortOrder.field');
for (let field in sortNoteOptions) {
if (!sortNoteOptions.hasOwnProperty(field)) continue;
sortNoteItems.push({
label: sortNoteOptions[field],
screens: ['Main'],
const sortNoteFolderItems = (type) => {
const sortItems = [];
const sortOptions = Setting.enumOptions(type + '.sortOrder.field');
for (let field in sortOptions) {
if (!sortOptions.hasOwnProperty(field)) continue;
sortItems.push({
label: sortOptions[field],
screens: ['Main'],
type: 'checkbox',
checked: Setting.value(type + '.sortOrder.field') === field,
click: () => {
Setting.setValue(type + '.sortOrder.field', field);
this.refreshMenu();
}
});
}
sortItems.push({ type: 'separator' });
sortItems.push({
label: Setting.settingMetadata(type + '.sortOrder.reverse').label(),
type: 'checkbox',
checked: Setting.value('notes.sortOrder.field') === field,
checked: Setting.value(type + '.sortOrder.reverse'),
screens: ['Main'],
click: () => {
Setting.setValue('notes.sortOrder.field', field);
this.refreshMenu();
}
Setting.setValue(type + '.sortOrder.reverse', !Setting.value(type + '.sortOrder.reverse'));
},
});
return sortItems;
}
const sortNoteItems = sortNoteFolderItems('notes');
const sortFolderItems = sortNoteFolderItems('folders');
const focusItems = [];
focusItems.push({
label: _('Sidebar'),
click: () => { this.focusElement_('sideBar') },
accelerator: 'CommandOrControl+Shift+S',
});
focusItems.push({
label: _('Note list'),
click: () => { this.focusElement_('noteList') },
accelerator: 'CommandOrControl+Shift+L',
});
focusItems.push({
label: _('Note title'),
click: () => { this.focusElement_('noteTitle') },
accelerator: 'CommandOrControl+Shift+N',
});
focusItems.push({
label: _('Note body'),
click: () => { this.focusElement_('noteBody') },
accelerator: 'CommandOrControl+Shift+B',
});
const importItems = [];
const exportItems = [];
const ioService = new InteropService();
@@ -325,7 +387,11 @@ class Application extends BaseApplication {
const template = [
{
label: _('File'),
label: _('&File'),
/* `&` before one of the char in the label name mean, that
* <Alt + F> will open this menu. It's needed becase electron
* opens the first menu on Alt press if no hotkey assigned.
* Issue: https://github.com/laurent22/joplin/issues/934 */
submenu: [{
label: _('New note'),
accelerator: 'CommandOrControl+N',
@@ -365,6 +431,18 @@ class Application extends BaseApplication {
submenu: exportItems,
}, {
type: 'separator',
}, {
label: _('Synchronise'),
accelerator: 'CommandOrControl+S',
screens: ['Main'],
click: async () => {
this.dispatch({
type: 'WINDOW_COMMAND',
name: 'synchronize',
});
}
}, {
type: 'separator',
}, {
label: _('Print'),
accelerator: 'CommandOrControl+P',
@@ -391,7 +469,7 @@ class Application extends BaseApplication {
click: () => { bridge().electronApp().quit() }
}]
}, {
label: _('Edit'),
label: _('&Edit'),
submenu: [{
label: _('Copy'),
role: 'copy',
@@ -431,10 +509,22 @@ class Application extends BaseApplication {
name: 'textItalic',
});
},
}, {
label: _('Link'),
screens: ['Main'],
accelerator: 'CommandOrControl+K',
click: () => {
this.dispatch({
type: 'WINDOW_COMMAND',
name: 'textLink',
});
},
}, {
type: 'separator',
screens: ['Main'],
}, {
label: _('Insert Date Time'),
screens: ['Main'],
visible: false,
accelerator: 'CommandOrControl+Shift+T',
click: () => {
this.dispatch({
@@ -461,7 +551,7 @@ class Application extends BaseApplication {
}, {
label: _('Search in all the notes'),
screens: ['Main'],
accelerator: 'F6',
accelerator: shim.isMac() ? 'Shift+Command+F' : 'F6',
click: () => {
this.dispatch({
type: 'WINDOW_COMMAND',
@@ -480,11 +570,11 @@ class Application extends BaseApplication {
},
}],
}, {
label: _('View'),
label: _('&View'),
submenu: [{
label: _('Toggle sidebar'),
screens: ['Main'],
accelerator: 'F10',
accelerator: shim.isMac() ? 'Option+Command+S' : 'F10',
click: () => {
this.dispatch({
type: 'WINDOW_COMMAND',
@@ -509,13 +599,9 @@ class Application extends BaseApplication {
screens: ['Main'],
submenu: sortNoteItems,
}, {
label: Setting.settingMetadata('notes.sortOrder.reverse').label(),
type: 'checkbox',
checked: Setting.value('notes.sortOrder.reverse'),
label: Setting.settingMetadata('folders.sortOrder.field').label(),
screens: ['Main'],
click: () => {
Setting.setValue('notes.sortOrder.reverse', !Setting.value('notes.sortOrder.reverse'));
},
submenu: sortFolderItems,
}, {
label: Setting.settingMetadata('uncompletedTodosOnTop').label(),
type: 'checkbox',
@@ -532,9 +618,16 @@ class Application extends BaseApplication {
click: () => {
Setting.setValue('showCompletedTodos', !Setting.value('showCompletedTodos'));
},
}, {
type: 'separator',
screens: ['Main'],
}, {
label: _('Focus'),
screens: ['Main'],
submenu: focusItems,
}],
}, {
label: _('Tools'),
label: _('&Tools'),
submenu: [{
label: _('Synchronisation status'),
click: () => {
@@ -573,7 +666,7 @@ class Application extends BaseApplication {
}
}],
}, {
label: _('Help'),
label: _('&Help'),
submenu: [{
label: _('Website and documentation'),
accelerator: 'F1',

View File

@@ -120,14 +120,18 @@ function checkForUpdates(inBackground, window, logFilePath, options) {
autoUpdateLogger_.info('Is Pre-release:', release.prerelease);
if (compareVersions(release.version, packageInfo.version) <= 0) {
if (!checkInBackground_) dialog.showMessageBox({ message: _('Current version is up-to-date.') })
if (!checkInBackground_) dialog.showMessageBox({
type: 'info',
message: _('Current version is up-to-date.'),
buttons: [_('OK')],
})
} else {
const releaseNotes = release.notes.trim() ? "\n\n" + release.notes.trim() : '';
const newVersionString = release.prerelease ? _('%s (pre-release)', release.version) : release.version;
const buttonIndex = dialog.showMessageBox(parentWindow_, {
type: 'info',
message: _('An update is available, do you want to download it now?') + '\n\n' + _('Your version: v%s', packageInfo.version) + '\n' + _('New version: v%s', newVersionString) + releaseNotes,
message: _('An update is available, do you want to download it now?') + '\n\n' + _('Your version: %s', packageInfo.version) + '\n' + _('New version: %s', newVersionString) + releaseNotes,
buttons: [_('Yes'), _('No')]
});

View File

@@ -43,6 +43,7 @@ fs.readdirSync(guiPath).forEach((filename) => {
const libContent = [
fs.readFileSync(basePath + '/ReactNativeClient/lib/string-utils-common.js', 'utf8'),
fs.readFileSync(basePath + '/ReactNativeClient/lib/markJsUtils.js', 'utf8'),
fs.readFileSync(basePath + '/ReactNativeClient/lib/MdToHtml/webviewLib.js', 'utf8'),
];
fs.writeFileSync(__dirname + '/gui/note-viewer/lib.js', libContent.join('\n'), 'utf8');

View File

@@ -0,0 +1,50 @@
const execCommand = function(command) {
const exec = require('child_process').exec
console.info('Running: ' + command);
return new Promise((resolve, reject) => {
let childProcess = exec(command, (error, stdout, stderr) => {
if (error) {
if (error.signal == 'SIGTERM') {
resolve('Process was killed');
} else {
reject(error);
}
} else {
resolve(stdout.trim());
}
});
});
}
const isLinux = () => {
return process && process.platform === 'linux';
}
const isWindows = () => {
return process && process.platform === 'win32';
}
const isMac = () => {
return process && process.platform === 'darwin';
}
async function main() {
// electron-rebuild --arch ia32 && electron-rebuild --arch x64
let exePath = __dirname + '/node_modules/.bin/electron-rebuild';
if (isWindows()) exePath += '.cmd';
if (isWindows()) {
console.info(await execCommand(['"' + exePath + '"', '--arch ia32'].join(' ')));
console.info(await execCommand(['"' + exePath + '"', '--arch x64'].join(' ')));
} else {
console.info(await execCommand(['"' + exePath + '"'].join(' ')));
}
}
main().catch((error) => {
console.error(error);
process.exit(1);
});

View File

@@ -7,6 +7,7 @@ const { Header } = require('./Header.min.js');
const { themeStyle } = require('../theme.js');
const pathUtils = require('lib/path-utils.js');
const { _ } = require('lib/locale.js');
const { commandArgumentsToString } = require('lib/string-utils');
const SyncTargetRegistry = require('lib/SyncTargetRegistry');
const shared = require('lib/components/shared/config-shared.js');
@@ -43,6 +44,49 @@ class ConfigScreenComponent extends React.Component {
return output;
}
sectionToComponent(key, section, settings) {
const theme = themeStyle(this.props.theme);
const settingComps = [];
for (let i = 0; i < section.metadatas.length; i++) {
const md = section.metadatas[i];
const settingComp = this.settingToComponent(md.key, settings[md.key]);
settingComps.push(settingComp);
}
const sectionStyle = {
marginBottom: 20,
};
const headerStyle = Object.assign({}, theme.headerStyle, {
borderBottomWidth: 1,
borderBottomColor: theme.dividerColor,
borderBottomStyle: 'solid',
paddingBottom: '.4em',
});
if (section.name === 'general') {
sectionStyle.borderTopWidth = 0;
}
const noteComp = section.name !== 'general' ? null : (
<div style={Object.assign({}, theme.textStyle, {marginBottom: 10})}>
{_('Notes and settings are stored in: %s', pathUtils.toSystemSlashes(Setting.value('profileDir'), process.platform))}
</div>
);
return (
<div key={key} style={sectionStyle}>
<h2 style={headerStyle}>{Setting.sectionNameToLabel(section.name)}</h2>
{noteComp}
<div>
{settingComps}
</div>
</div>
);
}
settingToComponent(key, value) {
const theme = themeStyle(this.props.theme);
@@ -56,6 +100,15 @@ class ConfigScreenComponent extends React.Component {
color: theme.color,
});
const subLabel = Object.assign({}, labelStyle, {
opacity: 0.7,
marginBottom: Math.round(rowStyle.marginBottom * 0.7),
});
const invisibleLabel = Object.assign({}, labelStyle, {
opacity: 0,
});
const controlStyle = {
display: 'inline-block',
color: theme.color,
@@ -70,6 +123,7 @@ class ConfigScreenComponent extends React.Component {
});
const updateSettingValue = (key, value) => {
// console.info(key + ' = ' + value);
return shared.updateSettingValue(this, key, value);
}
@@ -119,23 +173,93 @@ class ConfigScreenComponent extends React.Component {
</div>
);
} else if (md.type === Setting.TYPE_STRING) {
const onTextChange = (event) => {
updateSettingValue(key, event.target.value);
}
const inputStyle = Object.assign({}, controlStyle, {
width: '50%',
minWidth: '20em',
border: '1px solid' });
const inputType = md.secure === true ? 'password' : 'text';
return (
<div key={key} style={rowStyle}>
<div style={labelStyle}><label>{md.label()}</label></div>
<input type={inputType} style={inputStyle} value={this.state.settings[key]} onChange={(event) => {onTextChange(event)}} />
{ descriptionComp }
</div>
);
if (md.subType === 'file_path_and_args') {
inputStyle.marginBottom = subLabel.marginBottom;
const splitCmd = cmdString => {
const path = pathUtils.extractExecutablePath(cmdString);
const args = cmdString.substr(path.length + 1);
return [pathUtils.unquotePath(path), args];
}
const joinCmd = cmdArray => {
if (!cmdArray[0] && !cmdArray[1]) return '';
let cmdString = pathUtils.quotePath(cmdArray[0]);
if (!cmdString) cmdString = '""';
if (cmdArray[1]) cmdString += ' ' + cmdArray[1];
return cmdString;
}
const onPathChange = event => {
const cmd = splitCmd(this.state.settings[key]);
cmd[0] = event.target.value;
updateSettingValue(key, joinCmd(cmd));
}
const onArgsChange = event => {
const cmd = splitCmd(this.state.settings[key]);
cmd[1] = event.target.value;
updateSettingValue(key, joinCmd(cmd));
}
const browseButtonClick = () => {
const paths = bridge().showOpenDialog();
if (!paths || !paths.length) return;
const cmd = splitCmd(this.state.settings[key]);
cmd[0] = paths[0]
updateSettingValue(key, joinCmd(cmd));
}
const cmd = splitCmd(this.state.settings[key]);
return (
<div key={key} style={rowStyle}>
<div style={{display:'flex'}}>
<div style={{flex:0, whiteSpace: 'nowrap'}}>
<div style={labelStyle}><label>{md.label()}</label></div>
</div>
<div style={{flex:0}}>
<div style={subLabel}>Path:</div>
<div style={subLabel}>Arguments:</div>
</div>
<div style={{flex:1}}>
<div style={{display: 'flex', flexDirection: 'row', alignItems: 'center', marginBottom: inputStyle.marginBottom}}>
<input type={inputType} style={Object.assign({}, inputStyle, {marginBottom:0})} onChange={(event) => {onPathChange(event)}} value={cmd[0]} />
<button onClick={browseButtonClick} style={Object.assign({}, theme.buttonStyle, { marginLeft: 5, minHeight: 20, height: 20 })}>{_('Browse...')}</button>
</div>
<input type={inputType} style={inputStyle} onChange={(event) => {onArgsChange(event)}} value={cmd[1]}/>
</div>
</div>
<div style={{display:'flex'}}>
<div style={{flex:0, whiteSpace: 'nowrap'}}>
<div style={invisibleLabel}><label>{md.label()}</label></div>
</div>
<div style={{flex:1}}>
{ descriptionComp }
</div>
</div>
</div>
);
} else {
const onTextChange = (event) => {
updateSettingValue(key, event.target.value);
}
return (
<div key={key} style={rowStyle}>
<div style={labelStyle}><label>{md.label()}</label></div>
<input type={inputType} style={inputStyle} value={this.state.settings[key]} onChange={(event) => {onTextChange(event)}} />
{ descriptionComp }
</div>
);
}
} else if (md.type === Setting.TYPE_INT) {
const onNumChange = (event) => {
updateSettingValue(key, event.target.value);
@@ -170,21 +294,31 @@ class ConfigScreenComponent extends React.Component {
render() {
const theme = themeStyle(this.props.theme);
const style = Object.assign({
backgroundColor: theme.backgroundColor
}, this.props.style, { overflow: 'auto' });
const settings = this.state.settings;
}, this.props.style, {
overflow: 'hidden',
display: 'flex',
flexDirection: 'column',
});
const headerStyle = Object.assign({}, theme.headerStyle, { width: style.width });
let settings = this.state.settings;
const containerStyle = Object.assign({}, theme.containerStyle, { padding: 10 });
const containerStyle = Object.assign({}, theme.containerStyle, { padding: 10, paddingTop: 0 });
const hasChanges = !!this.state.changedSettingKeys.length;
const buttonStyle = Object.assign({}, theme.buttonStyle, {
display: this.state.changedSettingKeys.length ? 'inline-block' : 'none',
display: 'inline-block',
marginRight: 10,
});
const settingComps = shared.settingsToComponents(this, 'desktop', settings);
const buttonStyleApprove = Object.assign({}, buttonStyle, {
opacity: hasChanges ? 1 : theme.disabledOpacity,
});
const settingComps = shared.settingsToComponents2(this, 'desktop', settings);
const syncTargetMd = SyncTargetRegistry.idToMetadata(settings['sync.target']);
@@ -199,22 +333,29 @@ class ConfigScreenComponent extends React.Component {
settingComps.push(
<div key="check_sync_config_button" style={this.rowStyle_}>
<button style={buttonStyle} disabled={this.state.checkSyncConfigResult === 'checking'} onClick={this.checkSyncConfig_}>{_('Check synchronisation configuration')}</button>
<button disabled={this.state.checkSyncConfigResult === 'checking'} style={buttonStyle} onClick={this.checkSyncConfig_}>{_('Check synchronisation configuration')}</button>
{ statusComp }
</div>);
}
const buttonBarStyle = {
display: 'flex',
alignItems: 'center',
padding: 15,
borderBottomWidth: 1,
borderBottomStyle: 'solid',
borderBottomColor: theme.dividerColor,
};
return (
<div style={style}>
<Header style={headerStyle} />
<div style={buttonBarStyle}>
<button onClick={() => {this.onCancelClick()}} style={buttonStyle}>{'⬅ ' + _('Cancel')}</button>
<button disabled={!hasChanges} onClick={() => {this.onSaveClick()}} style={buttonStyleApprove}>{_('OK')}</button>
<button disabled={!hasChanges} onClick={() => {this.onApplyClick()}} style={buttonStyleApprove}>{_('Apply')}</button>
</div>
<div style={containerStyle}>
<div style={Object.assign({}, theme.textStyle, {marginBottom: 20})}>
{_('Notes and settings are stored in: %s', pathUtils.toSystemSlashes(Setting.value('profileDir'), process.platform))}
</div>
{ settingComps }
<button onClick={() => {this.onSaveClick()}} style={buttonStyle}>{_('OK')}</button>
<button onClick={() => {this.onCancelClick()}} style={buttonStyle}>{_('Cancel')}</button>
<button onClick={() => {this.onApplyClick()}} style={buttonStyle}>{_('Apply')}</button>
</div>
</div>
);

View File

@@ -3,6 +3,7 @@ const { connect } = require('react-redux');
const { reg } = require('lib/registry.js');
const { themeStyle } = require('../theme.js');
const { _ } = require('lib/locale.js');
const { bridge } = require('electron').remote.require('./bridge');
class HeaderComponent extends React.Component {
@@ -10,6 +11,7 @@ class HeaderComponent extends React.Component {
super();
this.state = {
searchQuery: '',
showSearchUsageLink: false,
};
this.scheduleSearchChangeEventIid_ = null;
@@ -37,6 +39,27 @@ class HeaderComponent extends React.Component {
triggerOnQuery('');
if (this.searchElement_) this.searchElement_.focus();
}
this.search_onFocus = event => {
if (this.hideSearchUsageLinkIID_) {
clearTimeout(this.hideSearchUsageLinkIID_);
this.hideSearchUsageLinkIID_ = null;
}
this.setState({ showSearchUsageLink: true });
}
this.search_onBlur = event => {
if (this.hideSearchUsageLinkIID_) return;
this.hideSearchUsageLinkIID_ = setTimeout(() => {
this.setState({ showSearchUsageLink: false });
}, 5000);
}
this.searchUsageLink_click = event => {
bridge().openExternal('https://joplin.cozic.net/#searching');
}
}
async componentWillReceiveProps(nextProps) {
@@ -45,6 +68,13 @@ class HeaderComponent extends React.Component {
}
}
componentWillUnmount() {
if (this.hideSearchUsageLinkIID_) {
clearTimeout(this.hideSearchUsageLinkIID_);
this.hideSearchUsageLinkIID_ = null;
}
}
async doCommand(command) {
if (!command) return;
@@ -100,6 +130,8 @@ class HeaderComponent extends React.Component {
}
makeSearch(key, style, options, state) {
const theme = themeStyle(this.props.theme);
const inputStyle = {
display: 'flex',
flex: 1,
@@ -137,6 +169,10 @@ class HeaderComponent extends React.Component {
const icon = <i style={iconStyle} className={"fa " + iconName}></i>
if (options.onQuery) this.searchOnQuery_ = options.onQuery;
const usageLink = !this.state.showSearchUsageLink ? null : (
<a onClick={this.searchUsageLink_click} style={theme.urlStyle} href="#">{_('Usage')}</a>
);
return (
<div key={key} style={containerStyle}>
<input
@@ -146,12 +182,15 @@ class HeaderComponent extends React.Component {
value={state.searchQuery}
onChange={this.search_onChange}
ref={elem => this.searchElement_ = elem}
onFocus={this.search_onFocus}
onBlur={this.search_onBlur}
/>
<a
href="#"
style={searchButton}
onClick={this.search_onClear}
>{icon}</a>
{usageLink}
</div>);
}

View File

@@ -6,13 +6,23 @@ class ItemList extends React.Component {
super();
this.scrollTop_ = 0;
this.listRef = React.createRef();
this.onScroll = this.onScroll.bind(this);
this.onKeyDown = this.onKeyDown.bind(this);
}
visibleItemCount(props) {
if (typeof props === 'undefined') props = this.props;
return Math.ceil(props.style.height / props.itemHeight);
}
updateStateItemIndexes(props) {
if (typeof props === 'undefined') props = this.props;
const topItemIndex = Math.floor(this.scrollTop_ / props.itemHeight);
const visibleItemCount = Math.ceil(props.style.height / props.itemHeight);
const visibleItemCount = this.visibleItemCount(props);
let bottomItemIndex = topItemIndex + visibleItemCount;
if (bottomItemIndex >= props.items.length) bottomItemIndex = props.items.length - 1;
@@ -31,8 +41,33 @@ class ItemList extends React.Component {
this.updateStateItemIndexes(newProps);
}
onScroll(scrollTop) {
onScroll(event) {
this.scrollTop_ = event.target.scrollTop;
this.updateStateItemIndexes();
}
onKeyDown(event) {
if (this.props.onKeyDown) this.props.onKeyDown(event);
}
makeItemIndexVisible(itemIndex) {
const top = Math.min(this.props.items.length - 1, this.state.topItemIndex + 1);
const bottom = Math.max(0, this.state.bottomItemIndex - 1)
if (itemIndex >= top && itemIndex <= bottom) return;
let scrollTop = 0;
if (itemIndex < top) {
scrollTop = this.props.itemHeight * itemIndex;
} else {
scrollTop = this.props.itemHeight * itemIndex - (this.visibleItemCount() - 1) * this.props.itemHeight;
}
if (scrollTop < 0) scrollTop = 0;
this.scrollTop_ = scrollTop;
this.listRef.current.scrollTop = scrollTop;
this.updateStateItemIndexes();
}
@@ -61,10 +96,8 @@ class ItemList extends React.Component {
let classes = ['item-list'];
if (this.props.className) classes.push(this.props.className);
const that = this;
return (
<div className={classes.join(' ')} style={style} onScroll={ (event) => { this.onScroll(event.target.scrollTop) }}>
<div ref={this.listRef} className={classes.join(' ')} style={style} onScroll={this.onScroll} onKeyDown={this.onKeyDown}>
{ itemComps }
</div>
);

View File

@@ -17,6 +17,7 @@ const { _ } = require('lib/locale.js');
const layoutUtils = require('lib/layout-utils.js');
const { bridge } = require('electron').remote.require('./bridge');
const eventManager = require('../eventManager');
const VerticalResizer = require('./VerticalResizer.min');
class MainScreenComponent extends React.Component {
@@ -24,6 +25,16 @@ class MainScreenComponent extends React.Component {
super();
this.notePropertiesDialog_close = this.notePropertiesDialog_close.bind(this);
this.sidebar_onDrag = this.sidebar_onDrag.bind(this);
this.noteList_onDrag = this.noteList_onDrag.bind(this);
}
sidebar_onDrag(event) {
Setting.setValue('style.sidebar.width', this.props.sidebarWidth + event.deltaX);
}
noteList_onDrag(event) {
Setting.setValue('style.noteList.width', Setting.value('style.noteList.width') + event.deltaX);
}
notePropertiesDialog_close() {
@@ -265,8 +276,8 @@ class MainScreenComponent extends React.Component {
}
}
styles(themeId, width, height, messageBoxVisible, isSidebarVisible) {
const styleKey = themeId + '_' + width + '_' + height + '_' + messageBoxVisible + '_' + (+isSidebarVisible);
styles(themeId, width, height, messageBoxVisible, isSidebarVisible, sidebarWidth, noteListWidth) {
const styleKey = [themeId, width, height, messageBoxVisible, (+isSidebarVisible), sidebarWidth, noteListWidth].join('_');
if (styleKey === this.styleKey_) return this.styles_;
const theme = themeStyle(themeId);
@@ -288,14 +299,20 @@ class MainScreenComponent extends React.Component {
backgroundColor: theme.warningBackgroundColor,
}
this.styles_.verticalResizer = {
width: 5,
height: height,
display: 'inline-block',
};
const rowHeight = height - theme.headerHeight - (messageBoxVisible ? this.styles_.messageBox.height : 0);
this.styles_.sideBar = {
width: Math.floor(layoutUtils.size(width * .2, 150, 300)),
width: sidebarWidth - this.styles_.verticalResizer.width,
height: rowHeight,
display: 'inline-block',
verticalAlign: 'top',
};
};
if (isSidebarVisible === false) {
this.styles_.sideBar.width = 0;
@@ -303,14 +320,14 @@ class MainScreenComponent extends React.Component {
}
this.styles_.noteList = {
width: Math.floor(layoutUtils.size(width * .2, 150, 300)),
width: noteListWidth - this.styles_.verticalResizer.width,
height: rowHeight,
display: 'inline-block',
verticalAlign: 'top',
};
this.styles_.noteText = {
width: Math.floor(layoutUtils.size(width - this.styles_.sideBar.width - this.styles_.noteList.width, 0)),
width: Math.floor(width - this.styles_.sideBar.width - this.styles_.noteList.width - 10),
height: rowHeight,
display: 'inline-block',
verticalAlign: 'top',
@@ -338,15 +355,15 @@ class MainScreenComponent extends React.Component {
render() {
const theme = themeStyle(this.props.theme);
const style = Object.assign({
color: theme.color,
backgroundColor: theme.backgroundColor,
}, this.props.style);
color: theme.color,
backgroundColor: theme.backgroundColor,
}, this.props.style);
const promptOptions = this.state.promptOptions;
const folders = this.props.folders;
const notes = this.props.notes;
const messageBoxVisible = this.props.hasDisabledSyncItems || this.props.showMissingMasterKeyMessage;
const sidebarVisibility = this.props.sidebarVisibility;
const styles = this.styles(this.props.theme, style.width, style.height, messageBoxVisible, sidebarVisibility);
const styles = this.styles(this.props.theme, style.width, style.height, messageBoxVisible, sidebarVisibility, this.props.sidebarWidth, this.props.noteListWidth);
const selectedFolderId = this.props.selectedFolderId;
const onConflictFolder = this.props.selectedFolderId === Folder.conflictFolderId();
@@ -375,7 +392,7 @@ class MainScreenComponent extends React.Component {
headerItems.push({
title: _('New notebook'),
iconName: 'fa-folder-o',
iconName: 'fa-book',
onClick: () => { this.doCommand({ name: 'newNotebook' }) },
});
@@ -462,7 +479,9 @@ class MainScreenComponent extends React.Component {
<Header style={styles.header} showBackButton={false} items={headerItems} />
{messageComp}
<SideBar style={styles.sideBar} />
<VerticalResizer style={styles.verticalResizer} onDrag={this.sidebar_onDrag}/>
<NoteList style={styles.noteList} />
<VerticalResizer style={styles.verticalResizer} onDrag={this.noteList_onDrag}/>
<NoteText style={styles.noteText} visiblePanes={this.props.noteVisiblePanes} />
</div>
);
@@ -482,6 +501,8 @@ const mapStateToProps = (state) => {
showMissingMasterKeyMessage: state.notLoadedMasterKeys.length && state.masterKeys.length,
selectedFolderId: state.selectedFolderId,
sidebarVisibility: state.sidebarVisibility,
sidebarWidth: state.settings['style.sidebar.width'],
noteListWidth: state.settings['style.noteList.width'],
};
};

View File

@@ -17,7 +17,11 @@ class NavigatorComponent extends Component {
}
updateWindowTitle(title) {
bridge().window().setTitle(title);
try {
if (bridge().window()) bridge().window().setTitle(title);
} catch (error) {
console.warn('updateWindowTitle', error);
}
}
render() {

View File

@@ -13,8 +13,10 @@ const eventManager = require('../eventManager');
const InteropService = require('lib/services/InteropService');
const InteropServiceHelper = require('../InteropServiceHelper.js');
const Search = require('lib/models/Search');
const { stateUtils } = require('lib/reducer');
const Mark = require('mark.js/dist/mark.min.js');
const SearchEngine = require('lib/services/SearchEngine');
const NoteListUtils = require('./utils/NoteListUtils');
const { replaceRegexDiacritics, pregQuote } = require('lib/string-utils');
class NoteListComponent extends React.Component {
@@ -22,7 +24,11 @@ class NoteListComponent extends React.Component {
constructor() {
super();
this.itemListRef = React.createRef();
this.itemAnchorRefs_ = {};
this.itemRenderer = this.itemRenderer.bind(this);
this.onKeyDown = this.onKeyDown.bind(this);
}
style() {
@@ -79,103 +85,10 @@ class NoteListComponent extends React.Component {
if (!noteIds.length) return;
const notes = noteIds.map((id) => BaseModel.byId(this.props.notes, id));
let hasEncrypted = false;
for (let i = 0; i < notes.length; i++) {
if (!!notes[i].encryption_applied) hasEncrypted = true;
}
const menu = new Menu()
if (!hasEncrypted) {
menu.append(new MenuItem({label: _('Add or remove tags'), enabled: noteIds.length === 1, click: async () => {
this.props.dispatch({
type: 'WINDOW_COMMAND',
name: 'setTags',
noteId: noteIds[0],
});
}}));
menu.append(new MenuItem({label: _('Duplicate'), click: async () => {
for (let i = 0; i < noteIds.length; i++) {
const note = await Note.load(noteIds[i]);
await Note.duplicate(noteIds[i], {
uniqueTitle: _('%s - Copy', note.title),
});
}
}}));
if (noteIds.length <= 1) {
menu.append(new MenuItem({label: _('Switch between note and to-do type'), click: async () => {
for (let i = 0; i < noteIds.length; i++) {
const note = await Note.load(noteIds[i]);
await Note.save(Note.toggleIsTodo(note), { userSideValidation: true });
eventManager.emit('noteTypeToggle', { noteId: note.id });
}
}}));
} else {
const switchNoteType = async (noteIds, type) => {
for (let i = 0; i < noteIds.length; i++) {
const note = await Note.load(noteIds[i]);
const newNote = Note.changeNoteType(note, type);
if (newNote === note) continue;
await Note.save(newNote, { userSideValidation: true });
eventManager.emit('noteTypeToggle', { noteId: note.id });
}
}
menu.append(new MenuItem({label: _('Switch to note type'), click: async () => {
await switchNoteType(noteIds, 'note');
}}));
menu.append(new MenuItem({label: _('Switch to to-do type'), click: async () => {
await switchNoteType(noteIds, 'todo');
}}));
}
menu.append(new MenuItem({label: _('Copy Markdown link'), click: async () => {
const { clipboard } = require('electron');
const links = [];
for (let i = 0; i < noteIds.length; i++) {
const note = await Note.load(noteIds[i]);
links.push(Note.markdownTag(note));
}
clipboard.writeText(links.join(' '));
}}));
const exportMenu = new Menu();
const ioService = new InteropService();
const ioModules = ioService.modules();
for (let i = 0; i < ioModules.length; i++) {
const module = ioModules[i];
if (module.type !== 'exporter') continue;
exportMenu.append(new MenuItem({ label: module.fullLabel() , click: async () => {
await InteropServiceHelper.export(this.props.dispatch.bind(this), module, { sourceNoteIds: noteIds });
}}));
}
if (noteIds.length === 1) {
exportMenu.append(new MenuItem({ label: 'PDF - ' + _('PDF File') , click: () => {
this.props.dispatch({
type: 'WINDOW_COMMAND',
name: 'exportPdf',
});
}}));
}
const exportMenuItem = new MenuItem({label: _('Export'), submenu: exportMenu});
menu.append(exportMenuItem);
}
menu.append(new MenuItem({label: _('Delete'), click: async () => {
const ok = bridge().showConfirmMessageBox(noteIds.length > 1 ? _('Delete notes?') : _('Delete note?'));
if (!ok) return;
await Note.batchDelete(noteIds);
}}));
const menu = NoteListUtils.makeContextMenu(noteIds, {
notes: this.props.notes,
dispatch: this.props.dispatch,
});
menu.popup(bridge().window());
}
@@ -185,7 +98,7 @@ class NoteListComponent extends React.Component {
const width = this.props.style.width;
const onTitleClick = async (event, item) => {
if (event.ctrlKey) {
if (event.ctrlKey || event.metaKey) {
event.preventDefault();
this.props.dispatch({
type: 'NOTE_SELECT_TOGGLE',
@@ -304,11 +217,15 @@ class NoteListComponent extends React.Component {
<i style={watchedIconStyle} className={"fa fa-external-link"}></i>
);
if (!this.itemAnchorRefs_[item.id]) this.itemAnchorRefs_[item.id] = React.createRef();
const ref = this.itemAnchorRefs_[item.id];
// Need to include "todo_completed" in key so that checkbox is updated when
// item is changed via sync.
return <div key={item.id + '_' + item.todo_completed} style={style}>
{checkbox}
<a
ref={ref}
className="list-item"
onContextMenu={(event) => this.itemContextMenu(event)}
href="#"
@@ -324,11 +241,147 @@ class NoteListComponent extends React.Component {
</div>
}
itemAnchorRef(itemId) {
if (this.itemAnchorRefs_[itemId] && this.itemAnchorRefs_[itemId].current) return this.itemAnchorRefs_[itemId].current;
return null;
}
doCommand(command) {
if (!command) return;
let commandProcessed = true;
if (command.name === 'focusElement' && command.target === 'noteList') {
if (this.props.selectedNoteIds.length) {
const ref = this.itemAnchorRef(this.props.selectedNoteIds[0]);
if (ref) ref.focus();
}
} else {
commandProcessed = false;
}
if (commandProcessed) {
this.props.dispatch({
type: 'WINDOW_COMMAND',
name: null,
});
}
}
componentDidUpdate(prevProps, prevState, snapshot) {
if (prevProps.windowCommand !== this.props.windowCommand) {
this.doCommand(this.props.windowCommand);
}
if (prevProps.selectedNoteIds !== this.props.selectedNoteIds && this.props.selectedNoteIds.length === 1) {
const id = this.props.selectedNoteIds[0];
for (let i = 0; i < this.props.notes.length; i++) {
if (this.props.notes[i].id === id) {
this.itemListRef.current.makeItemIndexVisible(i);
break;
}
}
}
}
async onKeyDown(event) {
const keyCode = event.keyCode;
const noteIds = this.props.selectedNoteIds;
if (noteIds.length === 1 && (keyCode === 40 || keyCode === 38)) { // DOWN / UP
const noteId = noteIds[0];
let noteIndex = BaseModel.modelIndexById(this.props.notes, noteId);
const inc = keyCode === 38 ? -1 : +1;
noteIndex += inc;
if (noteIndex < 0) noteIndex = 0;
if (noteIndex > this.props.notes.length - 1) noteIndex = this.props.notes.length - 1;
const newSelectedNote = this.props.notes[noteIndex];
this.props.dispatch({
type: 'NOTE_SELECT',
id: newSelectedNote.id,
});
this.itemListRef.current.makeItemIndexVisible(noteIndex);
this.focusNoteId_(newSelectedNote.id);
event.preventDefault();
}
if (noteIds.length && (keyCode === 46 || (keyCode === 8 && event.metaKey))) { // DELETE / CMD+Backspace
event.preventDefault();
await NoteListUtils.confirmDeleteNotes(noteIds);
}
if (noteIds.length && keyCode === 32) { // SPACE
event.preventDefault();
const notes = BaseModel.modelsByIds(this.props.notes, noteIds);
const todos = notes.filter(n => !!n.is_todo);
if (!todos.length) return;
for (let i = 0; i < todos.length; i++) {
const toggledTodo = Note.toggleTodoCompleted(todos[i]);
await Note.save(toggledTodo);
}
this.focusNoteId_(todos[0].id);
}
if (keyCode === 9) { // TAB
event.preventDefault();
if (event.shiftKey) {
this.props.dispatch({
type: 'WINDOW_COMMAND',
name: 'focusElement',
target: 'sideBar',
});
} else {
this.props.dispatch({
type: 'WINDOW_COMMAND',
name: 'focusElement',
target: 'noteTitle',
});
}
}
}
focusNoteId_(noteId) {
// - We need to focus the item manually otherwise focus might be lost when the
// list is scrolled and items within it are being rebuilt.
// - We need to use an interval because when leaving the arrow pressed, the rendering
// of items might lag behind and so the ref is not yet available at this point.
if (!this.itemAnchorRef(noteId)) {
if (this.focusItemIID_) clearInterval(this.focusItemIID_);
this.focusItemIID_ = setInterval(() => {
if (this.itemAnchorRef(noteId)) {
this.itemAnchorRef(noteId).focus();
clearInterval(this.focusItemIID_)
this.focusItemIID_ = null;
}
}, 10);
} else {
this.itemAnchorRef(noteId).focus();
}
}
componentWillUnmount() {
if (this.focusItemIID_) {
clearInterval(this.focusItemIID_);
this.focusItemIID_ = null;
}
}
render() {
const theme = themeStyle(this.props.theme);
const style = this.props.style;
let notes = this.props.notes.slice();
if (!notes.length) {
const padding = 10;
const emptyDivStyle = Object.assign({
@@ -343,14 +396,16 @@ class NoteListComponent extends React.Component {
return <div style={emptyDivStyle}>{ this.props.folders.length ? _('No notes in here. Create one by clicking on "New note".') : _('There is currently no notebook. Create one by clicking on "New notebook".')}</div>
}
return (
return (
<ItemList
ref={this.itemListRef}
itemHeight={this.style().listItem.height}
style={style}
className={"note-list"}
items={notes}
style={style}
itemRenderer={this.itemRenderer}
></ItemList>
onKeyDown={this.onKeyDown}
/>
);
}
@@ -366,6 +421,7 @@ const mapStateToProps = (state) => {
searches: state.searches,
selectedSearchId: state.selectedSearchId,
watchedNoteFiles: state.watchedNoteFiles,
windowCommand: state.windowCommand,
};
};

View File

@@ -13,6 +13,7 @@ class NoteSearchBarComponent extends React.Component {
};
this.searchInput_change = this.searchInput_change.bind(this);
this.searchInput_keyDown = this.searchInput_keyDown.bind(this);
this.previousButton_click = this.previousButton_click.bind(this);
this.nextButton_click = this.nextButton_click.bind(this);
this.closeButton_click = this.closeButton_click.bind(this);
@@ -70,6 +71,24 @@ class NoteSearchBarComponent extends React.Component {
this.triggerOnChange(query);
}
searchInput_keyDown(event) {
if (event.keyCode === 13) { // ENTER
event.preventDefault();
if (!event.shiftKey) {
if (this.props.onNext) this.props.onNext();
} else {
if (this.props.onPrevious) this.props.onPrevious();
}
}
if (event.keyCode === 27) { // ESCAPE
event.preventDefault();
if (this.props.onClose) this.props.onClose();
}
}
previousButton_click(event) {
if (this.props.onPrevious) this.props.onPrevious();
}
@@ -101,7 +120,7 @@ class NoteSearchBarComponent extends React.Component {
<div style={this.props.style}>
<div style={{display: 'flex', flexDirection: 'row', alignItems: 'center' }}>
{ closeButton }
<input placeholder={_('Search...')} value={this.state.query} onChange={this.searchInput_change} ref="searchInput" type="text" style={{width: 200, marginRight: 5}}></input>
<input placeholder={_('Search...')} value={this.state.query} onChange={this.searchInput_change} onKeyDown={this.searchInput_keyDown} ref="searchInput" type="text" style={{width: 200, marginRight: 5}}></input>
{ nextButton }
{ previousButton }
</div>

View File

@@ -28,6 +28,7 @@ const ArrayUtils = require('lib/ArrayUtils');
const ObjectUtils = require('lib/ObjectUtils');
const urlUtils = require('lib/urlUtils');
const dialogs = require('./dialogs');
const NoteListUtils = require('./utils/NoteListUtils');
const NoteSearchBar = require('./NoteSearchBar.min.js');
const markdownUtils = require('lib/markdownUtils');
const ExternalEditWatcher = require('lib/services/ExternalEditWatcher');
@@ -35,6 +36,8 @@ const ResourceFetcher = require('lib/services/ResourceFetcher');
const { toSystemSlashes, safeFilename } = require('lib/path-utils');
const { clipboard } = require('electron');
const SearchEngine = require('lib/services/SearchEngine');
const ModelCache = require('lib/services/ModelCache');
const NoteTextViewer = require('./NoteTextViewer.min');
require('brace/mode/markdown');
// https://ace.c9.io/build/kitchen-sink.html
@@ -73,11 +76,14 @@ class NoteTextComponent extends React.Component {
// to automatically set the title.
newAndNoTitleChangeNoteId: null,
bodyHtml: '',
lastRenderCssFiles: [],
lastKeys: [],
showLocalSearch: false,
localSearch: Object.assign({}, this.localSearchDefaultState),
};
this.webviewRef_ = React.createRef();
this.lastLoadedNoteId_ = null;
this.webviewListeners_ = null;
@@ -103,9 +109,9 @@ class NoteTextComponent extends React.Component {
}
}
this.onAlarmChange_ = (event) => { if (event.noteId === this.props.noteId) this.reloadNote(this.props); }
this.onNoteTypeToggle_ = (event) => { if (event.noteId === this.props.noteId) this.reloadNote(this.props); }
this.onTodoToggle_ = (event) => { if (event.noteId === this.props.noteId) this.reloadNote(this.props); }
this.onAlarmChange_ = (event) => { if (event.noteId === this.props.noteId) this.scheduleReloadNote(this.props); }
this.onNoteTypeToggle_ = (event) => { if (event.noteId === this.props.noteId) this.scheduleReloadNote(this.props); }
this.onTodoToggle_ = (event) => { if (event.noteId === this.props.noteId) this.scheduleReloadNote(this.props); }
this.onEditorPaste_ = async (event = null) => {
const formats = clipboard.availableFormats();
@@ -214,7 +220,7 @@ class NoteTextComponent extends React.Component {
this.externalEditWatcher_noteChange = (event) => {
if (!this.state.note || !this.state.note.id) return;
if (event.id === this.state.note.id) {
this.reloadNote(this.props);
this.scheduleReloadNote(this.props);
}
}
@@ -222,9 +228,10 @@ class NoteTextComponent extends React.Component {
if (!this.state.note || !this.state.note.body) return;
const resourceIds = await Note.linkedResourceIds(this.state.note.body);
if (resourceIds.indexOf(resource.id) >= 0) {
this.mdToHtml().clearCache();
// this.mdToHtml().clearCache();
this.lastSetHtml_ = '';
this.updateHtml(this.state.note.body);
this.scheduleHtmlUpdate();
//this.updateHtml(this.state.note.body);
}
}
@@ -257,6 +264,10 @@ class NoteTextComponent extends React.Component {
showLocalSearch: false,
});
}
this.titleField_keyDown = this.titleField_keyDown.bind(this);
this.webview_ipcMessage = this.webview_ipcMessage.bind(this);
this.webview_domReady = this.webview_domReady.bind(this);
}
// Note:
@@ -357,7 +368,6 @@ class NoteTextComponent extends React.Component {
this.saveIfNeeded();
this.mdToHtml_ = null;
this.destroyWebview();
eventManager.removeListener('alarmChange', this.onAlarmChange_);
eventManager.removeListener('noteTypeToggle', this.onNoteTypeToggle_);
@@ -398,6 +408,20 @@ class NoteTextComponent extends React.Component {
}, 500);
}
scheduleReloadNote(props, options = null) {
if (this.scheduleReloadNoteIID_) {
clearTimeout(this.scheduleReloadNoteIID_);
this.scheduleReloadNoteIID_ = null;
}
this.scheduleReloadNoteIID_ = setTimeout(() => {
this.reloadNote(props, options);
}, 10);
}
// Generally, reloadNote() should not be called directly so that it's not called multiple times
// from multiple places within a short interval of time. Instead use scheduleReloadNote() to
// delay reloading a bit and make sure that only one reload operation is performed.
async reloadNote(props, options = null) {
if (!options) options = {};
if (!('noReloadIfLocalChanges' in options)) options.noReloadIfLocalChanges = false;
@@ -412,12 +436,17 @@ class NoteTextComponent extends React.Component {
let loadingNewNote = true;
let parentFolder = null;
let noteTags = [];
let scrollPercent = 0;
if (props.newNote) {
note = Object.assign({}, props.newNote);
this.lastLoadedNoteId_ = null;
} else {
noteId = props.noteId;
scrollPercent = this.props.lastEditorScrollPercents[noteId];
if (!scrollPercent) scrollPercent = 0;
loadingNewNote = stateNoteId !== noteId;
noteTags = await Tag.tagsByNoteId(noteId);
this.lastLoadedNoteId_ = noteId;
@@ -438,7 +467,7 @@ class NoteTextComponent extends React.Component {
// If we are loading nothing (noteId == null), make sure to
// set webviewReady to false too because the webview component
// is going to be removed in render().
const webviewReady = this.webview_ && this.state.webviewReady && (noteId || props.newNote);
const webviewReady = !!this.webviewRef_.current && this.state.webviewReady && (!!noteId || !!props.newNote);
// Scroll back to top when loading new note
if (loadingNewNote) {
@@ -455,11 +484,13 @@ class NoteTextComponent extends React.Component {
if (this.props.newNote) {
const focusSettingName = !!note.is_todo ? 'newTodoFocus' : 'newNoteFocus';
if (Setting.value(focusSettingName) === 'title') {
if (this.titleField_) this.titleField_.focus();
} else {
if (this.editor_) this.editor_.editor.focus();
}
requestAnimationFrame(() => {
if (Setting.value(focusSettingName) === 'title') {
if (this.titleField_) this.titleField_.focus();
} else {
if (this.editor_) this.editor_.editor.focus();
}
});
}
if (this.editor_) {
@@ -481,6 +512,11 @@ class NoteTextComponent extends React.Component {
}
this.editor_.editor.clearSelection();
this.editor_.editor.moveCursorTo(0,0);
setTimeout(() => {
this.setEditorPercentScroll(scrollPercent ? scrollPercent : 0);
this.setViewerPercentScroll(scrollPercent ? scrollPercent : 0);
}, 10);
}
}
@@ -530,22 +566,24 @@ class NoteTextComponent extends React.Component {
}
}
// if (newState.note) await shared.refreshAttachedResources(this, newState.note.body);
this.updateHtml(newState.note ? newState.note.body : '');
}
async componentWillReceiveProps(nextProps) {
if (nextProps.newNote) {
await this.reloadNote(nextProps);
} else if ('noteId' in nextProps && nextProps.noteId !== this.props.noteId) {
await this.reloadNote(nextProps);
if (this.props.newNote !== nextProps.newNote && nextProps.newNote) {
await this.scheduleReloadNote(nextProps);
} else if (('noteId' in nextProps) && nextProps.noteId !== this.props.noteId) {
await this.scheduleReloadNote(nextProps);
} else if ('noteTags' in nextProps && this.areNoteTagsModified(nextProps.noteTags, this.state.noteTags)) {
this.setState({
noteTags: nextProps.noteTags
});
}
if ('syncStarted' in nextProps && !nextProps.syncStarted && !this.isModified()) {
await this.reloadNote(nextProps, { noReloadIfLocalChanges: true });
if ((nextProps.syncStarted !== this.props.syncStarted) && ('syncStarted' in nextProps) && !nextProps.syncStarted && !this.isModified()) {
await this.scheduleReloadNote(nextProps, { noReloadIfLocalChanges: true });
}
if (nextProps.windowCommand) {
@@ -602,7 +640,7 @@ class NoteTextComponent extends React.Component {
const arg0 = args && args.length >= 1 ? args[0] : null;
const arg1 = args && args.length >= 2 ? args[1] : null;
reg.logger().debug('Got ipc-message: ' + msg, args);
console.info('Got ipc-message: ' + msg, args);
if (msg.indexOf('checkboxclick:') === 0) {
// Ugly hack because setting the body here will make the scrollbar
@@ -611,7 +649,7 @@ class NoteTextComponent extends React.Component {
// "afterRender" event has been called.
this.restoreScrollTop_ = this.editorScrollTop();
const newBody = this.mdToHtml_.handleCheckboxClick(msg, this.state.note.body);
const newBody = shared.toggleCheckbox(msg, this.state.note.body);
this.saveOneProperty('body', newBody);
} else if (msg === 'setMarkerCount') {
const ls = Object.assign({}, this.state.localSearch);
@@ -678,6 +716,10 @@ class NoteTextComponent extends React.Component {
type: "FOLDER_AND_NOTE_SELECT",
folderId: item.parent_id,
noteId: item.id,
historyNoteAction: {
id: this.state.note.id,
parent_id: this.state.note.parent_id,
},
});
} else {
throw new Error('Unsupported item type: ' + item.type_);
@@ -687,6 +729,7 @@ class NoteTextComponent extends React.Component {
// When using the file:// protocol, openExternal doesn't work (does nothing) with URL-encoded paths
require('electron').shell.openExternal(urlDecode(msg));
} else {
console.info('OPEN URL');
require('electron').shell.openExternal(msg);
}
} else if (msg.indexOf('#') === 0) {
@@ -710,11 +753,31 @@ class NoteTextComponent extends React.Component {
}
setEditorPercentScroll(p) {
const noteId = this.props.noteId;
if (noteId) {
this.props.dispatch({
type: 'EDITOR_SCROLL_PERCENT_SET',
noteId: noteId,
percent: p,
});
}
this.editorSetScrollTop(p * this.editorMaxScroll());
}
setViewerPercentScroll(p) {
this.webview_.send('setPercentScroll', p);
const noteId = this.props.noteId;
if (noteId) {
this.props.dispatch({
type: 'EDITOR_SCROLL_PERCENT_SET',
noteId: noteId,
percent: p,
});
}
if (this.webviewRef_.current) this.webviewRef_.current.wrappedInstance.send('setPercentScroll', p);
}
editor_scroll() {
@@ -724,29 +787,20 @@ class NoteTextComponent extends React.Component {
}
const m = this.editorMaxScroll();
this.setViewerPercentScroll(m ? this.editorScrollTop() / m : 0);
const percent = m ? this.editorScrollTop() / m : 0;
this.setViewerPercentScroll(percent);
}
webview_domReady() {
if (!this.webview_) return;
if (!this.webviewRef_.current) return;
this.setState({
webviewReady: true,
});
if (Setting.value('env') === 'dev') this.webview_.openDevTools();
}
webview_ref(element) {
if (this.webview_) {
if (this.webview_ === element) return;
this.destroyWebview();
}
if (!element) {
this.destroyWebview();
} else {
this.initWebview(element);
if (Setting.value('env') === 'dev') {
this.webviewRef_.current.wrappedInstance.openDevTools();
}
}
@@ -822,35 +876,6 @@ class NoteTextComponent extends React.Component {
}
}
initWebview(wv) {
if (!this.webviewListeners_) {
this.webviewListeners_ = {
'dom-ready': this.webview_domReady.bind(this),
'ipc-message': this.webview_ipcMessage.bind(this),
};
}
for (let n in this.webviewListeners_) {
if (!this.webviewListeners_.hasOwnProperty(n)) continue;
const fn = this.webviewListeners_[n];
wv.addEventListener(n, fn);
}
this.webview_ = wv;
}
destroyWebview() {
if (!this.webview_) return;
for (let n in this.webviewListeners_) {
if (!this.webviewListeners_.hasOwnProperty(n)) continue;
const fn = this.webviewListeners_[n];
this.webview_.removeEventListener(n, fn);
}
this.webview_ = null;
}
aceEditor_change(body) {
shared.noteComponent_change(this, 'body', body);
this.scheduleHtmlUpdate();
@@ -872,28 +897,22 @@ class NoteTextComponent extends React.Component {
}
}
updateHtml(body = null) {
const mdOptions = {
onResourceLoaded: () => {
if (this.resourceLoadedTimeoutId_) {
clearTimeout(this.resourceLoadedTimeoutId_);
this.resourceLoadedTimeoutId_ = null;
}
this.resourceLoadedTimeoutId_ = setTimeout(() => {
this.resourceLoadedTimeoutId_ = null;
this.updateHtml();
this.forceUpdate();
}, 100);
},
postMessageSyntax: 'ipcProxySendToHost',
};
const theme = themeStyle(this.props.theme);
async updateHtml(body = null, options = null) {
if (!options) options = {};
if (!('useCustomCss' in options)) options.useCustomCss = true;
let bodyToRender = body;
if (bodyToRender === null) bodyToRender = this.state.note && this.state.note.body ? this.state.note.body : '';
bodyToRender = '<style>' + this.props.customCss + '</style>\n' + bodyToRender;
const theme = themeStyle(this.props.theme);
const mdOptions = {
codeTheme: theme.codeThemeCss,
postMessageSyntax: 'ipcProxySendToHost',
userCss: options.useCustomCss ? this.props.customCss : '',
resources: await shared.attachedResources(bodyToRender),
};
let bodyHtml = '';
const visiblePanes = this.props.visiblePanes || ['editor', 'viewer'];
@@ -903,9 +922,34 @@ class NoteTextComponent extends React.Component {
bodyToRender = '*' + _('This note has no content. Click on "%s" to toggle the editor and edit the note.', _('Layout')) + '*';
}
bodyHtml = this.mdToHtml().render(bodyToRender, theme, mdOptions);
const result = this.mdToHtml().render(bodyToRender, theme, mdOptions);
this.setState({ bodyHtml: bodyHtml });
this.setState({
bodyHtml: result.html,
lastRenderCssFiles: result.cssFiles,
});
}
titleField_keyDown(event) {
const keyCode = event.keyCode;
if (keyCode === 9) { // TAB
event.preventDefault();
if (event.shiftKey) {
this.props.dispatch({
type: 'WINDOW_COMMAND',
name: 'focusElement',
target: 'noteList',
});
} else {
this.props.dispatch({
type: 'WINDOW_COMMAND',
name: 'focusElement',
target: 'noteBody',
});
}
}
}
async doCommand(command) {
@@ -924,7 +968,9 @@ class NoteTextComponent extends React.Component {
fn = this.commandTextBold;
} else if (command.name === 'textItalic') {
fn = this.commandTextItalic;
} else if (command.name === 'insertDateTime' ) {
} else if (command.name === 'textLink') {
fn = this.commandTextLink;
} else if (command.name === 'insertDateTime') {
fn = this.commandDateTime;
} else if (command.name === 'commandStartExternalEditing') {
fn = this.commandStartExternalEditing;
@@ -933,6 +979,20 @@ class NoteTextComponent extends React.Component {
}
}
if (command.name === 'focusElement' && command.target === 'noteTitle') {
fn = () => {
if (!this.titleField_) return;
this.titleField_.focus();
}
}
if (command.name === 'focusElement' && command.target === 'noteBody') {
fn = () => {
if (!this.editor_) return;
this.editor_.editor.focus();
}
}
if (!fn) return;
this.props.dispatch({
@@ -1001,8 +1061,8 @@ class NoteTextComponent extends React.Component {
});
}
printTo_(target, options) {
if (this.props.selectedNoteIds.length !== 1 || !this.webview_) {
async printTo_(target, options) {
if (this.props.selectedNoteIds.length !== 1 || !this.webviewRef_.current) {
throw new Error(_('Only one note can be printed or exported to PDF at a time.'));
}
@@ -1012,19 +1072,19 @@ class NoteTextComponent extends React.Component {
const previousTheme = Setting.value('theme');
Setting.setValue('theme', Setting.THEME_LIGHT);
this.lastSetHtml_ = '';
this.updateHtml(tempBody);
await this.updateHtml(tempBody, { useCustomCss: false });
this.forceUpdate();
const restoreSettings = () => {
const restoreSettings = async () => {
Setting.setValue('theme', previousTheme);
this.lastSetHtml_ = '';
this.updateHtml(previousBody);
await this.updateHtml(previousBody);
this.forceUpdate();
}
setTimeout(() => {
if (target === 'pdf') {
this.webview_.printToPDF({}, (error, data) => {
this.webviewRef_.current.wrappedInstance.printToPDF({ printBackground: true }, (error, data) => {
restoreSettings();
if (error) {
@@ -1034,13 +1094,13 @@ class NoteTextComponent extends React.Component {
}
});
} else if (target === 'printer') {
this.webview_.print();
this.webviewRef_.current.wrappedInstance.print({ printBackground: true });
restoreSettings();
}
}, 100);
}
commandSavePdf() {
async commandSavePdf() {
try {
if (!this.state.note) throw new Error(_('Only one note can be printed or exported to PDF at a time.'));
@@ -1051,15 +1111,15 @@ class NoteTextComponent extends React.Component {
if (!path) return;
this.printTo_('pdf', { path: path });
await this.printTo_('pdf', { path: path });
} catch (error) {
bridge().showErrorMessageBox(error.message);
}
}
commandPrint() {
async commandPrint() {
try {
this.printTo_('printer');
await this.printTo_('printer');
} catch (error) {
bridge().showErrorMessageBox(error.message);
}
@@ -1313,11 +1373,30 @@ class NoteTextComponent extends React.Component {
if (note && this.state.folder && ['Search', 'Tag'].includes(this.props.notesParentType)) {
toolbarItems.push({
title: _('In: %s', this.state.folder.title),
iconName: 'fa-folder-o',
iconName: 'fa-book',
enabled: false,
});
}
if (this.props.historyNotes.length) {
toolbarItems.push({
tooltip: _('Back'),
iconName: 'fa-arrow-left',
onClick: () => {
if (!this.props.historyNotes.length) return;
const lastItem = this.props.historyNotes[this.props.historyNotes.length - 1];
this.props.dispatch({
type: "FOLDER_AND_NOTE_SELECT",
folderId: lastItem.parent_id,
noteId: lastItem.id,
historyNoteAction: 'pop',
});
},
});
}
toolbarItems.push({
tooltip: _('Bold'),
iconName: 'fa-bold',
@@ -1453,6 +1532,61 @@ class NoteTextComponent extends React.Component {
return toolbarItems;
}
renderNoNotes(rootStyle) {
const emptyDivStyle = Object.assign({
backgroundColor: 'black',
opacity: 0.1,
}, rootStyle);
return <div style={emptyDivStyle}></div>
}
renderMultiNotes(rootStyle) {
const theme = themeStyle(this.props.theme);
const multiNotesButton_click = item => {
if (item.submenu) {
item.submenu.popup(bridge().window());
} else {
item.click();
}
}
const menu = NoteListUtils.makeContextMenu(this.props.selectedNoteIds, {
notes: this.props.notes,
dispatch: this.props.dispatch,
});
const buttonStyle = Object.assign({}, theme.buttonStyle, {
marginBottom: 10,
});
const itemComps = [];
const menuItems = menu.items;
for (let i = 0; i < menuItems.length; i++) {
const item = menuItems[i];
if (!item.enabled) continue;
itemComps.push(<button
key={item.label}
style={buttonStyle}
onClick={() => multiNotesButton_click(item)}
>{item.label}</button>);
}
rootStyle = Object.assign({}, rootStyle, {
paddingTop: rootStyle.paddingLeft,
display: 'inline-flex',
justifyContent: 'center',
});
return (<div style={rootStyle}>
<div style={{display: 'flex', flexDirection: 'column'}}>
{itemComps}
</div>
</div>);
}
render() {
const style = this.props.style;
const note = this.state.note;
@@ -1472,12 +1606,10 @@ class NoteTextComponent extends React.Component {
const innerWidth = rootStyle.width - rootStyle.paddingLeft - rootStyle.paddingRight - borderWidth;
if (!note || !!note.encryption_applied) {
const emptyDivStyle = Object.assign({
backgroundColor: 'black',
opacity: 0.1,
}, rootStyle);
return <div style={emptyDivStyle}></div>
if (this.props.selectedNoteIds.length > 1) {
return this.renderMultiNotes(rootStyle);
} else if (!note || !!note.encryption_applied) { //|| (note && !this.props.newNote && this.props.noteId && note.id !== this.props.noteId)) { // note.id !== props.noteId is when the note has not been loaded yet, and the previous one is still in the state
return this.renderNoNotes(rootStyle);
}
const titleBarStyle = {
@@ -1579,8 +1711,10 @@ class NoteTextComponent extends React.Component {
const htmlHasChanged = this.lastSetHtml_ !== html;
if (htmlHasChanged) {
let options = {codeTheme: theme.codeThemeCss};
this.webview_.send('setHtml', html, options);
let options = {
cssFiles: this.state.lastRenderCssFiles,
};
this.webviewRef_.current.wrappedInstance.send('setHtml', html, options);
this.lastSetHtml_ = html;
}
@@ -1606,7 +1740,7 @@ class NoteTextComponent extends React.Component {
if (htmlHasChanged || keywordHash !== this.lastSetMarkers_ || !ObjectUtils.fieldsEqual(this.lastSetMarkersOptions_, markerOptions)) {
this.lastSetMarkers_ = keywordHash;
this.lastSetMarkersOptions_ = Object.assign({}, markerOptions);
this.webview_.send('setMarkers', keywords, markerOptions);
this.webviewRef_.current.wrappedInstance.send('setMarkers', keywords, markerOptions);
}
}
@@ -1623,6 +1757,7 @@ class NoteTextComponent extends React.Component {
style={titleEditorStyle}
value={note && note.title ? note.title : ''}
onChange={(event) => { this.title_changeText(event); }}
onKeyDown={this.titleField_keyDown}
placeholder={ this.props.newNote ? _('Creating new %s...', isTodo ? _('to-do') : _('note')) : '' }
/>
@@ -1637,32 +1772,13 @@ class NoteTextComponent extends React.Component {
const titleBarDate = <span style={Object.assign({}, theme.textStyle, {color: theme.colorFaded})}>{time.formatMsToLocal(note.user_updated_time)}</span>
const viewer = <webview
style={viewerStyle}
preload="gui/note-viewer/preload.js"
src="gui/note-viewer/index.html"
webpreferences="contextIsolation"
ref={(elem) => { this.webview_ref(elem); } }
const viewer = <NoteTextViewer
ref={this.webviewRef_}
viewerStyle={viewerStyle}
onDomReady={this.webview_domReady}
onIpcMessage={this.webview_ipcMessage}
/>
// const markers = [{
// startRow: 2,
// startCol: 3,
// endRow: 2,
// endCol: 6,
// type: 'text',
// className: 'test-marker'
// }];
// markers={markers}
// editorProps={{$useWorker: false}}
// #note-editor .test-marker {
// background-color: red;
// color: yellow;
// position: absolute;
// }
const editorRootStyle = Object.assign({}, editorStyle);
delete editorRootStyle.width;
delete editorRootStyle.height;
@@ -1684,6 +1800,7 @@ class NoteTextComponent extends React.Component {
showPrintMargin={false}
onSelectionChange={this.aceEditor_selectionChange}
onFocus={this.aceEditor_focus}
readOnly={visiblePanes.indexOf('editor') < 0}
// Disable warning: "Automatically scrolling cursor into view after
// selection change this will be disabled in the next version set
@@ -1727,6 +1844,7 @@ class NoteTextComponent extends React.Component {
const mapStateToProps = (state) => {
return {
noteId: state.selectedNoteIds.length === 1 ? state.selectedNoteIds[0] : null,
notes: state.notes,
selectedNoteIds: state.selectedNoteIds,
noteTags: state.selectedNoteTags,
folderId: state.selectedFolderId,
@@ -1742,6 +1860,8 @@ const mapStateToProps = (state) => {
selectedSearchId: state.selectedSearchId,
watchedNoteFiles: state.watchedNoteFiles,
customCss: state.customCss,
lastEditorScrollPercents: state.lastEditorScrollPercents,
historyNotes: state.historyNotes,
};
};

View File

@@ -0,0 +1,135 @@
const React = require('react');
const { connect } = require('react-redux');
const { themeStyle } = require('../theme.js');
const { _ } = require('lib/locale.js');
class NoteTextViewerComponent extends React.Component {
constructor() {
super();
this.initialized_ = false;
this.webviewRef_ = React.createRef();
this.webviewListeners_ = null;
this.webview_domReady = this.webview_domReady.bind(this);
this.webview_ipcMessage = this.webview_ipcMessage.bind(this);
}
webview_domReady(event) {
this.props.onDomReady(event);
}
webview_ipcMessage(event) {
this.props.onIpcMessage(event);
}
initWebview() {
const wv = this.webviewRef_.current;
if (!this.webviewListeners_) {
this.webviewListeners_ = {
'dom-ready': this.webview_domReady.bind(this),
'ipc-message': this.webview_ipcMessage.bind(this),
};
}
for (let n in this.webviewListeners_) {
if (!this.webviewListeners_.hasOwnProperty(n)) continue;
const fn = this.webviewListeners_[n];
wv.addEventListener(n, fn);
}
let isAlreadyReady = false;
try {
isAlreadyReady = !this.webviewRef_.current.isLoading()
} catch (error) {
// Ignore - it means the view has not started loading, and the DOM ready event has not been emitted yet
// Error is "The WebView must be attached to the DOM and the dom-ready event emitted before this method can be called."
}
// Edge-case - the webview was already ready by the time initWebview was
// called - so manually call the domReady event to notify caller.
if (isAlreadyReady) {
this.webview_domReady({});
}
}
destroyWebview() {
const wv = this.webviewRef_.current;
if (!wv || !this.initialized_) return;
for (let n in this.webviewListeners_) {
if (!this.webviewListeners_.hasOwnProperty(n)) continue;
const fn = this.webviewListeners_[n];
wv.removeEventListener(n, fn);
}
}
componentDidUpdate() {
if (!this.initialized_ && this.webviewRef_.current) {
this.initWebview();
this.initialized_ = true;
}
}
componentWillUnmount() {
this.destroyWebview();
}
// ----------------------------------------------------------------
// Wrap WebView functions
// ----------------------------------------------------------------
send(channel, arg0 = null, arg1 = null, arg2 = null, arg3 = null) {
return this.webviewRef_.current.send(channel, arg0, arg1, arg2, arg3);
}
printToPDF(options, callback) {
// In Electron 4x, printToPDF is broken so need to use this hack:
// https://github.com/electron/electron/issues/16171#issuecomment-451090245
// return this.webviewRef_.current.printToPDF(options, callback);
return this.webviewRef_.current.getWebContents().printToPDF(options, callback);
}
print(options = {}) {
// In Electron 4x, print is broken so need to use this hack:
// https://github.com/electron/electron/issues/16219#issuecomment-451454948
// Note that this is not a perfect workaround since it means the options are ignored
// In particular it means that background images and colours won't be printed (printBackground property will be ignored)
// return this.webviewRef_.current.getWebContents().print({});
return this.webviewRef_.current.getWebContents().executeJavaScript("window.print()")
}
openDevTools() {
return this.webviewRef_.current.openDevTools();
}
// ----------------------------------------------------------------
// Wrap WebView functions (END)
// ----------------------------------------------------------------
render() {
return <webview
ref={this.webviewRef_}
style={this.props.viewerStyle}
preload="gui/note-viewer/preload.js"
src="gui/note-viewer/index.html"
webpreferences="contextIsolation"
/>
}
}
const mapStateToProps = (state) => {
return {
theme: state.settings.theme,
};
};
const NoteTextViewer = connect(mapStateToProps, null, null, { withRef: true })(NoteTextViewerComponent);
module.exports = NoteTextViewer;

View File

@@ -15,6 +15,7 @@ const { ConfigScreen } = require('./ConfigScreen.min.js');
const { EncryptionConfigScreen } = require('./EncryptionConfigScreen.min.js');
const { ClipperConfigScreen } = require('./ClipperConfigScreen.min.js');
const { Navigator } = require('./Navigator.min.js');
const WelcomeUtils = require('lib/WelcomeUtils');
const { app } = require('../app');
@@ -71,6 +72,8 @@ class RootComponent extends React.Component {
state: 'ready',
});
}
await WelcomeUtils.install(this.props.dispatch);
}
render() {

View File

@@ -13,6 +13,7 @@ const { bridge } = require("electron").remote.require("./bridge");
const Menu = bridge().Menu;
const MenuItem = bridge().MenuItem;
const InteropServiceHelper = require("../InteropServiceHelper.js");
const { substrWithEllipsis } = require('lib/string-utils');
const { shim } = require('lib/shim');
class SideBarComponent extends React.Component {
@@ -40,9 +41,15 @@ class SideBarComponent extends React.Component {
const dt = event.dataTransfer;
if (!dt) return;
// folderId can be NULL when dropping on the sidebar Notebook header. In that case, it's used
// to put the dropped folder at the root. But for notes, folderId needs to always be defined
// since there's no such thing as a root note.
if (dt.types.indexOf("text/x-jop-note-ids") >= 0) {
event.preventDefault();
if (!folderId) return;
const noteIds = JSON.parse(dt.getData("text/x-jop-note-ids"));
for (let i = 0; i < noteIds.length; i++) {
await Note.moveToFolder(noteIds[i], folderId);
@@ -81,6 +88,15 @@ class SideBarComponent extends React.Component {
});
};
this.folderItemsOrder_ = [];
this.tagItemsOrder_ = [];
this.onKeyDown = this.onKeyDown.bind(this);
this.rootRef = React.createRef();
this.anchorItemRefs = {};
this.state = {
tagHeaderIsExpanded: Setting.value('tagHeaderIsExpanded'),
folderHeaderIsExpanded: Setting.value('folderHeaderIsExpanded')
@@ -172,9 +188,8 @@ class SideBarComponent extends React.Component {
marginTop: 10,
marginLeft: 5,
marginRight: 5,
minHeight: 70,
marginBottom: 10,
wordWrap: "break-word",
//width: "100%",
},
};
@@ -192,6 +207,33 @@ class SideBarComponent extends React.Component {
}
}
doCommand(command) {
if (!command) return;
let commandProcessed = true;
if (command.name === 'focusElement' && command.target === 'sideBar') {
if (this.props.sidebarVisibility) {
const item = this.selectedItem();
if (item) {
const anchorRef = this.anchorItemRefs[item.type][item.id];
if (anchorRef) anchorRef.current.focus();
}
}
} else if (command.name === 'synchronize') {
this.sync_click();
} else {
commandProcessed = false;
}
if (commandProcessed) {
this.props.dispatch({
type: 'WINDOW_COMMAND',
name: null,
});
}
}
componentDidUpdate(prevProps) {
if (shim.isLinux()) {
// For some reason, the UI seems to sleep in some Linux distro during
@@ -214,7 +256,13 @@ class SideBarComponent extends React.Component {
this.clearForceUpdateDuringSync();
}
itemContextMenu(event) {
componentDidUpdate(prevProps, prevState, snapshot) {
if (prevProps.windowCommand !== this.props.windowCommand) {
this.doCommand(this.props.windowCommand);
}
}
async itemContextMenu(event) {
const itemId = event.target.getAttribute("data-id");
if (itemId === Folder.conflictFolderId()) return;
@@ -223,9 +271,11 @@ class SideBarComponent extends React.Component {
let deleteMessage = "";
if (itemType === BaseModel.TYPE_FOLDER) {
deleteMessage = _("Delete notebook? All notes and sub-notebooks within this notebook will also be deleted.");
const folder = await Folder.load(itemId);
deleteMessage = _('Delete notebook "%s"?\n\nAll notes and sub-notebooks within this notebook will also be deleted.', substrWithEllipsis(folder.title, 0, 32));
} else if (itemType === BaseModel.TYPE_TAG) {
deleteMessage = _("Remove this tag from all the notes?");
const tag = await Tag.load(itemId);
deleteMessage = _('Remove tag "%s" from all notes?', substrWithEllipsis(tag.title, 0, 32));
} else if (itemType === BaseModel.TYPE_SEARCH) {
deleteMessage = _("Remove this search from the sidebar?");
}
@@ -341,17 +391,26 @@ class SideBarComponent extends React.Component {
});
}
searchItem_click(search) {
this.props.dispatch({
type: "SEARCH_SELECT",
id: search ? search.id : null,
});
}
// searchItem_click(search) {
// this.props.dispatch({
// type: "SEARCH_SELECT",
// id: search ? search.id : null,
// });
// }
async sync_click() {
await shared.synchronize_press(this);
}
anchorItemRef(type, id) {
let refs = null;
if (!this.anchorItemRefs[type]) this.anchorItemRefs[type] = {};
if (this.anchorItemRefs[type][id]) return this.anchorItemRefs[type][id];
this.anchorItemRefs[type][id] = React.createRef();
return this.anchorItemRefs[type][id];
}
folderItem(folder, selected, hasChildren, depth) {
let style = Object.assign({}, this.style().listItem);
if (folder.id === Folder.conflictFolderId()) style = Object.assign(style, this.style().conflictFolder);
@@ -359,8 +418,6 @@ class SideBarComponent extends React.Component {
const itemTitle = Folder.displayTitle(folder);
let containerStyle = Object.assign({}, this.style().listItemContainer);
// containerStyle.paddingLeft = containerStyle.paddingLeft + depth * 10;
if (selected) containerStyle = Object.assign(containerStyle, this.style().listItemSelected);
let expandLinkStyle = Object.assign({}, this.style().listItemExpandIcon);
@@ -373,10 +430,13 @@ class SideBarComponent extends React.Component {
const expandIcon = <i style={expandIconStyle} className={"fa " + iconName}></i>
const expandLink = hasChildren ? <a style={expandLinkStyle} href="#" folderid={folder.id} onClick={this.onFolderToggleClick_}>{expandIcon}</a> : <span style={expandLinkStyle}>{expandIcon}</span>
const anchorRef = this.anchorItemRef('folder', folder.id);
return (
<div className="list-item-container" style={containerStyle} key={folder.id} onDragStart={this.onFolderDragStart_} onDragOver={this.onFolderDragOver_} onDrop={this.onFolderDrop_} draggable={true} folderid={folder.id}>
{ expandLink }
<a
ref={anchorRef}
className="list-item"
href="#"
data-id={folder.id}
@@ -398,10 +458,14 @@ class SideBarComponent extends React.Component {
tagItem(tag, selected) {
let style = Object.assign({}, this.style().tagItem);
if (selected) style = Object.assign(style, this.style().listItemSelected);
const anchorRef = this.anchorItemRef('tag', tag.id);
return (
<a
className="list-item"
href="#"
ref={anchorRef}
data-id={tag.id}
data-type={BaseModel.TYPE_TAG}
onContextMenu={event => this.itemContextMenu(event)}
@@ -418,26 +482,26 @@ class SideBarComponent extends React.Component {
);
}
searchItem(search, selected) {
let style = Object.assign({}, this.style().listItem);
if (selected) style = Object.assign(style, this.style().listItemSelected);
return (
<a
className="list-item"
href="#"
data-id={search.id}
data-type={BaseModel.TYPE_SEARCH}
onContextMenu={event => this.itemContextMenu(event)}
key={search.id}
style={style}
onClick={() => {
this.searchItem_click(search);
}}
>
{search.title}
</a>
);
}
// searchItem(search, selected) {
// let style = Object.assign({}, this.style().listItem);
// if (selected) style = Object.assign(style, this.style().listItemSelected);
// return (
// <a
// className="list-item"
// href="#"
// data-id={search.id}
// data-type={BaseModel.TYPE_SEARCH}
// onContextMenu={event => this.itemContextMenu(event)}
// key={search.id}
// style={style}
// onClick={() => {
// this.searchItem_click(search);
// }}
// >
// {search.title}
// </a>
// );
// }
makeDivider(key) {
return <div style={{ height: 2, backgroundColor: "blue" }} key={key} />;
@@ -462,8 +526,11 @@ class SideBarComponent extends React.Component {
toggleIcon = <i className={`fa ${isExpanded ? 'fa-chevron-down' : 'fa-chevron-left'}`} style={{ fontSize: style.fontSize * 0.75,
marginRight: 12, marginLeft: 5, marginTop: style.fontSize * 0.125}}></i>;
}
const ref = this.anchorItemRef('headers', key);
return (
<div style={style} key={key} {...extraProps} onClick={(event) => {
<div ref={ref} style={style} key={key} {...extraProps} onClick={(event) => {
// if a custom click event is attached, trigger that.
if (headerClick) {
headerClick(key, event);
@@ -477,6 +544,91 @@ class SideBarComponent extends React.Component {
);
}
selectedItem() {
if (this.props.notesParentType === 'Folder' && this.props.selectedFolderId) {
return { type: 'folder', id: this.props.selectedFolderId };
} else if (this.props.notesParentType === 'Tag' && this.props.selectedTagId) {
return { type: 'tag', id: this.props.selectedTagId };
} else if (this.props.notesParentType === 'Search' && this.props.selectedSearchId) {
return { type: 'search', id: this.props.selectedSearchId };
}
return null;
}
onKeyDown(event) {
const keyCode = event.keyCode;
const selectedItem = this.selectedItem();
if (keyCode === 40 || keyCode === 38) { // DOWN / UP
event.preventDefault();
const focusItems = [];
for (let i = 0; i < this.folderItemsOrder_.length; i++) {
const id = this.folderItemsOrder_[i];
focusItems.push({ id: id, ref: this.anchorItemRefs['folder'][id], type: 'folder' });
}
for (let i = 0; i < this.tagItemsOrder_.length; i++) {
const id = this.tagItemsOrder_[i];
focusItems.push({ id: id, ref: this.anchorItemRefs['tag'][id], type: 'tag' });
}
let currentIndex = 0;
for (let i = 0; i < focusItems.length; i++) {
if (!selectedItem || focusItems[i].id === selectedItem.id) {
currentIndex = i;
break;
}
}
const inc = keyCode === 38 ? -1 : +1;
let newIndex = currentIndex + inc;
if (newIndex < 0) newIndex = 0;
if (newIndex > focusItems.length - 1) newIndex = focusItems.length - 1;
const focusItem = focusItems[newIndex];
let actionName = focusItem.type.toUpperCase() + '_SELECT';
this.props.dispatch({
type: actionName,
id: focusItem.id,
});
focusItem.ref.current.focus();
}
if (keyCode === 9) { // TAB
event.preventDefault();
if (event.shiftKey) {
this.props.dispatch({
type: 'WINDOW_COMMAND',
name: 'focusElement',
target: 'noteBody',
});
} else {
this.props.dispatch({
type: 'WINDOW_COMMAND',
name: 'focusElement',
target: 'noteList',
});
}
}
if (selectedItem && selectedItem.type === 'folder' && keyCode === 32) { // SPACE
event.preventDefault();
this.props.dispatch({
type: 'FOLDER_TOGGLE',
id: selectedItem.id,
});
}
}
onHeaderClick_(key, event) {
const currentHeader = event.currentTarget;
const toggleBlock = +currentHeader.getAttribute('toggleblock');
@@ -489,7 +641,7 @@ class SideBarComponent extends React.Component {
}
synchronizeButton(type) {
const style = this.style().button;
const style = Object.assign({}, this.style().button, { marginBottom: 5 });
const iconName = type === "sync" ? "fa-refresh" : "fa-times";
const label = type === "sync" ? _("Synchronise") : _("Cancel");
const icon = <i style={{ fontSize: style.fontSize, marginRight: 5 }} className={"fa " + iconName} />;
@@ -513,18 +665,22 @@ class SideBarComponent extends React.Component {
const theme = themeStyle(this.props.theme);
const style = Object.assign({}, this.style().root, this.props.style, {
overflowX: "hidden",
overflowY: "auto",
overflowY: "hidden",
display: 'inline-flex',
flexDirection: 'column',
});
let items = [];
items.push(this.makeHeader("folderHeader", _("Notebooks"), "fa-folder-o", {
items.push(this.makeHeader("folderHeader", _("Notebooks"), "fa-book", {
onDrop: this.onFolderDrop_,
folderid: '',
toggleblock: 1
}));
if (this.props.folders.length) {
const folderItems = shared.renderFolders(this.props, this.folderItem.bind(this));
const result = shared.renderFolders(this.props, this.folderItem.bind(this));
const folderItems = result.items;
this.folderItemsOrder_ = result.order;
items.push(<div className="folders" key="folder_items" style={{display: this.state.folderHeaderIsExpanded ? 'block': 'none'}}>
{folderItems}</div>);
}
@@ -534,7 +690,9 @@ class SideBarComponent extends React.Component {
}));
if (this.props.tags.length) {
const tagItems = shared.renderTags(this.props, this.tagItem.bind(this));
const result = shared.renderTags(this.props, this.tagItem.bind(this));
const tagItems = result.items;
this.tagItemsOrder_ = result.order;
items.push(
<div className="tags" key="tag_items" style={{display: this.state.tagHeaderIsExpanded ? 'block': 'none'}}>
@@ -565,17 +723,24 @@ class SideBarComponent extends React.Component {
);
}
items.push(this.synchronizeButton(this.props.syncStarted ? "cancel" : "sync"));
const syncButton = this.synchronizeButton(this.props.syncStarted ? "cancel" : "sync");
items.push(
const syncReportComp = !syncReportText.length ? null : (
<div style={this.style().syncReport} key="sync_report">
{syncReportText}
</div>
);
{syncReportText}
</div>
);
return (
<div className="side-bar" style={style}>
{items}
<div ref={this.rootRef} onKeyDown={this.onKeyDown} className="side-bar" style={style}>
<div style={{flex:1, overflowX: 'hidden', overflowY: 'auto'}}>
{items}
</div>
<div style={{flex:0}}>
{syncButton}
{syncReportComp}
</div>
</div>
);
}
@@ -597,6 +762,8 @@ const mapStateToProps = state => {
collapsedFolderIds: state.collapsedFolderIds,
decryptionWorker: state.decryptionWorker,
resourceFetcher: state.resourceFetcher,
windowCommand: state.windowCommand,
sidebarVisibility: state.sidebarVisibility,
};
};

View File

@@ -0,0 +1,102 @@
const React = require("react");
const electron = require('electron');
class VerticalResizer extends React.PureComponent {
constructor() {
super();
this.state = {
parentRight: 0,
parentHeight: 0,
parentWidth: 0,
drag: {
startX: 0,
lastX: 0,
},
};
this.onDragStart = this.onDragStart.bind(this);
this.onDrag = this.onDrag.bind(this);
this.onDragEnd = this.onDragEnd.bind(this);
this.document_onDragOver = this.document_onDragOver.bind(this);
}
document_onDragOver(event) {
// This is just to prevent the cursor from changing to a "+" as it's dragged
// over other elements. With this it stays a normal cursor.
event.dataTransfer.dropEffect = 'none';
}
onDragStart(event) {
document.addEventListener('dragover', this.document_onDragOver)
event.dataTransfer.dropEffect= 'none';
const cursor = electron.screen.getCursorScreenPoint();
this.setState({
drag: {
startX: cursor.x,
lastX: cursor.x,
}
});
if (this.props.onDragStart) this.props.onDragStart({});
}
onDrag(event) {
// If we got a drag event with no buttons pressed, it's the last drag event
// that we should ignore, because it's sometimes use to put the dragged element
// back to its original position (if there was no valid drop target), which we don't want.
// Also if clientX, screenX, etc. are 0, it's also the last event and we want to ignore these buggy values.
// const e = event.nativeEvent;
// if (!e.buttons || (!e.clientX && !e.clientY && !e.screenX && !e.screenY)) return;
const cursor = electron.screen.getCursorScreenPoint();
const newX = cursor.x;
const delta = newX - this.state.drag.lastX;
if (!delta) return;
this.setState({
drag: Object.assign({}, this.state.drag, { lastX: newX }),
}, () => {
this.props.onDrag({ deltaX: delta });
});
}
onDragEnd(event) {
document.removeEventListener('dragover', this.document_onDragOver);
}
componentWillUnmount() {
document.removeEventListener('dragover', this.document_onDragOver);
}
render() {
const debug = false;
const rootStyle = Object.assign({}, {
height: '100%',
width:5,
borderColor:'red',
borderWidth: debug ? 1 : 0,
borderStyle:'solid',
cursor: 'col-resize',
boxSizing: 'border-box',
opacity: 0,
}, this.props.style);
return (
<div
style={rootStyle}
draggable={true}
onDragStart={this.onDragStart}
onDrag={this.onDrag}
onDragEnd={this.onDragEnd}
/>
);
}
}
module.exports = VerticalResizer;

View File

@@ -28,13 +28,11 @@
ul ul, ul ol, ol ul, ol ol {
margin-bottom: 0px;
}
.katex { font-size: 1.3em; } /* This controls the global Katex font size*/
</style>
</head>
<body id="body">
<div id="hlScriptContainer"></div>
<div id="styleContainer"></div>
<div id="markScriptContainer"></div>
<div id="content" ondragstart="return false;" ondrop="return false;"></div>
<script src="./lib.js"></script>
@@ -58,62 +56,18 @@
}
});
// ----------------------------------------------------------------------
// Handle dynamically loading HLJS when a code element is present
// ----------------------------------------------------------------------
let hljsScriptAdded = false;
let hljsLoaded = false;
function loadHljs(options) {
hljsScriptAdded = true;
const script = document.createElement('script');
script.onload = function () {
hljsLoaded = true;
applyHljs();
};
script.src = 'highlight/highlight.pack.js';
document.getElementById('hlScriptContainer').appendChild(script);
const link = document.createElement('link');
link.rel = 'stylesheet';
// https://ace.c9.io/build/kitchen-sink.html
// https://highlightjs.org/static/demo/
link.href = 'highlight/styles/' + options.codeTheme;
document.getElementById('hlScriptContainer').appendChild(link);
}
function loadAndApplyHljs(options) {
var codeElements = document.getElementsByClassName('code');
if (!codeElements.length) return;
if (!hljsScriptAdded) {
this.loadHljs(options);
return;
}
// If HLJS is not loaded yet, no need to do anything. When it loads
// it will automatically apply the style to all the code elements.
if (hljsLoaded) applyHljs(codeElements);
}
function applyHljs(codeElements) {
if (typeof codeElements === 'undefined') codeElements = document.getElementsByClassName('code');
for (var i = 0; i < codeElements.length; i++) {
try {
hljs.highlightBlock(codeElements[i]);
} catch (error) {
console.warn('Cannot highlight code', error);
}
const loadedCssFiles_ = {};
function loadCssFiles(cssFiles) {
for (let i = 0; i < cssFiles.length; i++) {
const f = cssFiles[i];
if (loadedCssFiles_[f]) continue;
const link = document.createElement('link');
link.rel = 'stylesheet';
link.href = f;
document.getElementById('styleContainer').appendChild(link);
}
}
// ----------------------------------------------------------------------
// / Handle dynamically loading HLJS when a code element is present
// ----------------------------------------------------------------------
// Note: the scroll position source of truth is "percentScroll_". This is easier to manage than scrollTop because
// the scrollTop value depends on the images being loaded or not. For example, if the scrollTop is saved while
// images are being displayed then restored while images are being reloaded, the new scrollTop might be changed
@@ -150,21 +104,6 @@
contentElement.innerHTML = html;
loadAndApplyHljs(event.options);
// Remove the bullet from "ul" for checkbox lists and extra padding
// const checkboxes = document.getElementsByClassName('checkbox');
// for (let i = 0; i < checkboxes.length; i++) {
// const cb = checkboxes[i];
// const ul = cb.parentElement.parentElement;
// if (!ul) {
// console.warn('Unexpected layout for checkbox');
// continue;
// }
// ul.style.listStyleType = 'none';
// ul.style.paddingLeft = 0;
// }
let previousContentHeight = contentElement.scrollHeight;
let startTime = Date.now();
ignoreNextScrollEvent = true;
@@ -184,6 +123,8 @@
}
}, 1);
}
loadCssFiles(event.options.cssFiles);
}
let ignoreNextScrollEvent = false;
@@ -347,49 +288,8 @@
}
});
function handleInternalLink(event, anchorNode) {
const href = anchorNode.getAttribute('href');
if (href.indexOf('#') === 0) {
event.preventDefault();
location.hash = href;
return true;
}
return false;
}
function getParentAnchorElement(element) {
let counter = 0;
while (true) {
if (counter++ >= 10000) {
console.warn('been looping for too long - exiting')
return null;
}
if (!element) return null;
if (element.nodeName === 'A') return element;
element = element.parentElement;
}
}
document.addEventListener('click', function(event) {
const anchor = getParentAnchorElement(event.target);
if (!anchor) return;
// Prevent URLs added via <a> tags from being opened within the application itself
// otherwise it would open the whole website within the WebView.
if (!anchor.hasAttribute('data-from-md')) {
if (handleInternalLink(event, anchor)) return;
event.preventDefault();
ipcProxySendToHost(anchor.getAttribute('href'));
return;
}
// If this is an internal link, jump to the anchor directly
if (anchor.hasAttribute('data-from-md')) {
if (handleInternalLink(event, anchor)) return;
}
webviewLib.initialize({
postMessage: ipcProxySendToHost,
});
// Disable drag and drop otherwise it's possible to drop a URL

View File

@@ -0,0 +1,137 @@
const { time } = require('lib/time-utils.js');
const BaseModel = require('lib/BaseModel');
const markJsUtils = require('lib/markJsUtils');
const { _ } = require('lib/locale.js');
const { bridge } = require('electron').remote.require('./bridge');
const Menu = bridge().Menu;
const MenuItem = bridge().MenuItem;
const eventManager = require('../../eventManager');
const InteropService = require('lib/services/InteropService');
const InteropServiceHelper = require('../../InteropServiceHelper.js');
const Search = require('lib/models/Search');
const Note = require('lib/models/Note');
const SearchEngine = require('lib/services/SearchEngine');
const { replaceRegexDiacritics, pregQuote, substrWithEllipsis } = require('lib/string-utils');
class NoteListUtils {
static makeContextMenu(noteIds, props) {
const notes = noteIds.map((id) => BaseModel.byId(props.notes, id));
let hasEncrypted = false;
for (let i = 0; i < notes.length; i++) {
if (!!notes[i].encryption_applied) hasEncrypted = true;
}
const menu = new Menu()
if (!hasEncrypted) {
menu.append(new MenuItem({label: _('Add or remove tags'), enabled: noteIds.length === 1, click: async () => {
props.dispatch({
type: 'WINDOW_COMMAND',
name: 'setTags',
noteId: noteIds[0],
});
}}));
menu.append(new MenuItem({label: _('Duplicate'), click: async () => {
for (let i = 0; i < noteIds.length; i++) {
const note = await Note.load(noteIds[i]);
await Note.duplicate(noteIds[i], {
uniqueTitle: _('%s - Copy', note.title),
});
}
}}));
if (noteIds.length <= 1) {
menu.append(new MenuItem({label: _('Switch between note and to-do type'), click: async () => {
for (let i = 0; i < noteIds.length; i++) {
const note = await Note.load(noteIds[i]);
await Note.save(Note.toggleIsTodo(note), { userSideValidation: true });
eventManager.emit('noteTypeToggle', { noteId: note.id });
}
}}));
} else {
const switchNoteType = async (noteIds, type) => {
for (let i = 0; i < noteIds.length; i++) {
const note = await Note.load(noteIds[i]);
const newNote = Note.changeNoteType(note, type);
if (newNote === note) continue;
await Note.save(newNote, { userSideValidation: true });
eventManager.emit('noteTypeToggle', { noteId: note.id });
}
}
menu.append(new MenuItem({label: _('Switch to note type'), click: async () => {
await switchNoteType(noteIds, 'note');
}}));
menu.append(new MenuItem({label: _('Switch to to-do type'), click: async () => {
await switchNoteType(noteIds, 'todo');
}}));
}
menu.append(new MenuItem({label: _('Copy Markdown link'), click: async () => {
const { clipboard } = require('electron');
const links = [];
for (let i = 0; i < noteIds.length; i++) {
const note = await Note.load(noteIds[i]);
links.push(Note.markdownTag(note));
}
clipboard.writeText(links.join(' '));
}}));
const exportMenu = new Menu();
const ioService = new InteropService();
const ioModules = ioService.modules();
for (let i = 0; i < ioModules.length; i++) {
const module = ioModules[i];
if (module.type !== 'exporter') continue;
exportMenu.append(new MenuItem({ label: module.fullLabel() , click: async () => {
await InteropServiceHelper.export(props.dispatch.bind(this), module, { sourceNoteIds: noteIds });
}}));
}
if (noteIds.length === 1) {
exportMenu.append(new MenuItem({ label: 'PDF - ' + _('PDF File') , click: () => {
props.dispatch({
type: 'WINDOW_COMMAND',
name: 'exportPdf',
});
}}));
}
const exportMenuItem = new MenuItem({label: _('Export'), submenu: exportMenu});
menu.append(exportMenuItem);
}
menu.append(new MenuItem({label: _('Delete'), click: async () => {
await this.confirmDeleteNotes(noteIds);
}}));
return menu;
}
static async confirmDeleteNotes(noteIds) {
if (!noteIds.length) return;
let msg = '';
if (noteIds.length === 1) {
const note = await Note.load(noteIds[0]);
if (!note) return;
msg = _('Delete note "%s"?', substrWithEllipsis(note.title, 0, 32));
} else {
msg = _('Delete these %d notes?', noteIds.length);
}
const ok = bridge().showConfirmMessageBox(msg);
if (!ok) return;
await Note.batchDelete(noteIds);
}
}
module.exports = NoteListUtils;

View File

@@ -2,6 +2,11 @@
<html>
<head>
<meta charset="UTF-8">
<!--
No CPS because we need to allow everything due to some dependencies (eg. depd, which comes from maybe Node or Electron
uses 'eval'.
<meta http-equiv="Content-Security-Policy" content="default-src 'self' 'unsafe-inline' 'unsafe-eval'">
-->
<title>Joplin</title>
<link rel="stylesheet" href="style.css">
<link rel="stylesheet" href="css/fork-awesome.min.css">

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -1,5 +1,6 @@
var locales = {};
locales['en_GB'] = require('./en_GB.json');
locales['ar'] = require('./ar.json');
locales['ca'] = require('./ca.json');
locales['cs_CZ'] = require('./cs_CZ.json');
locales['da_DK'] = require('./da_DK.json');
@@ -20,6 +21,7 @@ locales['ro'] = require('./ro.json');
locales['ru_RU'] = require('./ru_RU.json');
locales['sl_SI'] = require('./sl_SI.json');
locales['sv'] = require('./sv.json');
locales['tr_TR'] = require('./tr_TR.json');
locales['zh_CN'] = require('./zh_CN.json');
locales['zh_TW'] = require('./zh_TW.json');
module.exports = { locales: locales };

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

View File

@@ -1,6 +1,6 @@
{
"name": "Joplin",
"version": "1.0.124",
"version": "1.0.140",
"description": "Joplin for Desktop",
"main": "main.js",
"scripts": {
@@ -8,7 +8,7 @@
"pack": "node_modules/.bin/electron-builder --dir",
"dist": "node_modules/.bin/electron-builder",
"publish": "build -p always",
"postinstall": "node compile.js && node compile-package-info.js && node ../../Tools/copycss.js --copy-fonts && install-app-deps",
"postinstall": "node compile.js && node compile-package-info.js && node ../../Tools/copycss.js --copy-fonts && node electronRebuild.js",
"compile": "node compile.js && node compile-package-info.js && node ../../Tools/copycss.js --copy-fonts"
},
"repository": {
@@ -22,10 +22,12 @@
},
"build": {
"appId": "net.cozic.joplin-desktop",
"npmRebuild": false,
"extraResources": [
"build/icons/*"
],
"win": {
"rfc3161TimeStampServer": "http://sha256timestamp.ws.symantec.com/sha256/timestamp",
"icon": "../../Assets/Joplin.ico",
"target": [
{
@@ -70,8 +72,9 @@
"app-builder-bin": "^1.9.11",
"babel-cli": "^6.26.0",
"babel-preset-react": "^6.24.1",
"electron": "^1.8.7",
"electron-builder": "20.14.7"
"electron": "4.0.5",
"electron-builder": "20.38.5",
"electron-rebuild": "^1.8.4"
},
"optionalDependencies": {
"7zip-bin-linux": "^1.0.1",
@@ -93,10 +96,10 @@
"form-data": "^2.3.2",
"formatcoords": "^1.1.3",
"fs-extra": "^5.0.0",
"highlight.js": "^9.12.0",
"highlight.js": "^9.15.6",
"html-entities": "^1.2.1",
"image-type": "^3.0.0",
"joplin-turndown": "^4.0.9",
"joplin-turndown": "^4.0.11",
"joplin-turndown-plugin-gfm": "^1.0.7",
"jssha": "^2.3.1",
"katex": "^0.10.0",
@@ -106,7 +109,6 @@
"markdown-it": "^8.4.1",
"markdown-it-katex": "^2.0.3",
"md5": "^2.2.1",
"mermaid": "^8.0.0-rc.8",
"mime": "^2.3.1",
"moment": "^2.22.2",
"multiparty": "^4.2.1",
@@ -125,13 +127,13 @@
"server-destroy": "^1.0.1",
"smalltalk": "^2.5.1",
"sprintf-js": "^1.1.1",
"sqlite3": "^4.0.4",
"sqlite3": "^4.0.6",
"string-padding": "^1.0.2",
"string-to-stream": "^1.1.1",
"syswide-cas": "^5.1.0",
"tar": "^4.4.4",
"tcp-port-used": "^0.1.2",
"url-parse": "^1.4.1",
"url-parse": "^1.4.3",
"uuid": "^3.2.1",
"valid-url": "^1.0.9",
"xml2js": "^0.4.19"

Some files were not shown because too many files have changed in this diff Show More