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

Compare commits

...

581 Commits

Author SHA1 Message Date
Laurent Cozic
3a9817d11e Android release v1.0.282 2019-07-21 14:04:18 +01:00
Laurent Cozic
6a42ef50ec All: Fixes #1732: Fixed note order when dragging a note outside a notebook 2019-07-21 13:55:25 +01:00
Laurent Cozic
35b6b3fc46 Merge branch 'clipper_html_mode' 2019-07-21 13:46:54 +01:00
Laurent Cozic
f5515e3496 Doc: Fixed template doc 2019-07-21 09:07:33 +01:00
Laurent Cozic
fd509bb4af Doc: Fixed template table 2019-07-21 08:57:50 +01:00
Laurent Cozic
b21c0f5d69 Doc: Fixed website templating 2019-07-21 08:55:44 +01:00
Laurent Cozic
1033b3626f Update translations 2019-07-21 08:49:49 +01:00
Laurent Cozic
f407c8d756 Added Serbian translation - thanks Željko! 2019-07-21 08:19:32 +01:00
Laurent Cozic
6436dff94b Api: Fixed handling of markup language 2019-07-21 00:31:29 +01:00
Laurent Cozic
3f7b4e10b6 Merge branch 'master' into clipper_html_mode 2019-07-21 00:24:25 +01:00
Laurent Cozic
36168a9a5d Use regex instead of jsdom for compability with mobile app 2019-07-21 00:18:51 +01:00
Helmut K. C. Tessarek
118540c733 add config for stale bot 2019-07-20 17:41:49 -04:00
Caleb John
cd5d412c69 Desktop: Added support for templates (#1647)
* First pass of adding support for templates

* remove default value from template prompt

* Add template placeholder text

* Add mustache templates with datetime support for new notes

* Moved template code to utils, added separate prompt for templates

* Add templates to menu and allow for keyboad only use

* update template prompt for dark theme

* update with laurents suggestions, add refresh button

* revert template command, remove new note prompt
2019-07-20 22:13:10 +01:00
Helmut K. C. Tessarek
e29fb3eb66 new issue templates 2019-07-19 15:01:32 -04:00
Laurent Cozic
8ff1668c8f Minor changes 2019-07-19 18:18:05 +01:00
Laurent Cozic
14fc73b388 Use markupToHtml everywhere 2019-07-19 17:48:38 +01:00
Laurent Cozic
f34330f101 Doc: Contributor list on rows of 5 2019-07-18 20:46:01 +01:00
Laurent Cozic
2ba50321d4 Doc: Added contributors 2019-07-18 18:36:29 +01:00
Laurent Cozic
38177c7e54 All: Optimised loading of multiple items 2019-07-17 22:50:12 +01:00
Laurent Cozic
687e308a73 Desktop: Added markup language to property dialog 2019-07-17 22:49:40 +01:00
Laurent Cozic
490db0db62 Desktop: Disable Markdown actions for HTML notes 2019-07-17 22:49:12 +01:00
Laurent Cozic
feb5f17479 Clipper: Generate better HTML so that it loads faster in text editor 2019-07-17 22:48:13 +01:00
Laurent Cozic
fbb3543818 Desktop: Fixed race condition when loading a note while another one is still loading. Improved performance when loading large note. 2019-07-17 22:42:53 +01:00
Laurent Cozic
30d0dfb424 Clipper: Fixed sizing issue when importing HTML pages 2019-07-16 22:58:44 +01:00
Laurent Cozic
7239a2013c Clipper: Improved clipping of images in HTML mode 2019-07-16 22:23:04 +01:00
Laurent Cozic
2361c5a5e7 Clipper: Better handling of images when multiple images have the same source but with different dimensions 2019-07-16 21:47:44 +01:00
Laurent Cozic
38e8a881d5 More refactoring to easily handle multiple renderers 2019-07-16 19:05:47 +01:00
Helmut K. C. Tessarek
d45d1b4225 Mobile: Show correct time/date (as specified in settings) for note properties (#1749) 2019-07-16 15:11:58 +01:00
Helmut K. C. Tessarek
e9c88dfdc4 Update de_DE.po 2019-07-15 23:21:46 -04:00
Laurent Cozic
fbb0ac5892 Clipper: Refactored image rules to re-use more code 2019-07-15 20:43:28 +00:00
Helmut K. C. Tessarek
7a902bbd25 Desktop, Mobile: Update Markdown plugins: footnote, toc-done-right, anchor (#1741) 2019-07-15 01:29:44 +01:00
Laurent Cozic
c75618eb8f Clipper: Minor fixes 2019-07-15 01:17:17 +01:00
Laurent Cozic
74ee629266 Clipper: Fixed issue with relative links when importing HTML 2019-07-15 00:44:45 +01:00
Caleb John
8ecc58e1bf Desktop: Add support for cinnamon to install script (#1738) 2019-07-15 00:29:09 +01:00
Laurent Cozic
71078637db Android release v1.0.281 2019-07-14 19:56:46 +01:00
Laurent Cozic
5460a977b1 Clipper: Fixed issues related to viewing images and to HTML comments that were incorrectly being displayed 2019-07-14 19:52:57 +01:00
Laurent Cozic
a0dd0702fb Clipper: Adding support for clipping page as HTML 2019-07-14 16:00:02 +01:00
Laurent Cozic
3e48992eb4 Clipper: Disabled preview for now as too many problems with it and not so useful 2019-07-14 09:46:06 +01:00
Laurent Cozic
bdb31f2890 Mobile: Fixed issue that could slow down app when displaying large list of notes 2019-07-13 23:55:28 +01:00
Laurent Cozic
0255546ae1 Mobile: Auto-save after toggling to-do state 2019-07-13 23:49:35 +01:00
Laurent Cozic
d066350eea Electron release v1.0.161 2019-07-13 19:18:34 +01:00
Laurent Cozic
a1e3260309 Clipper: Resolves #1160: Allow importing MathJax formulas, in particular from StackExchange 2019-07-13 19:17:28 +01:00
Laurent Cozic
be1f57a8a6 Desktop: Fixes #1727: Keep back button when opening a note link from the search results 2019-07-13 17:58:59 +01:00
Laurent Cozic
ca4dfe0f0f Desktop: Fixes #1724: Improved note selection and scrolling when moving a note to a different notebook 2019-07-13 17:40:09 +01:00
Laurent Cozic
fa69957d3f Desktop, CLI: Fixes #1723: Import Evernote audio files correctly 2019-07-13 17:26:47 +01:00
Laurent Cozic
f7203ed7e2 Desktop: Fixes #1720: Fixed issue with certain commands being repeated in some cases 2019-07-13 16:57:33 +01:00
Laurent Cozic
331858bd4f Desktop: Fixes #1704: Set note title to correct size when zoom is enabled 2019-07-13 16:46:52 +01:00
Laurent Cozic
4d2c9523a3 Desktop: Fixes #1699: Hide toolbar button text when it is below a certain size 2019-07-13 16:42:57 +01:00
Laurent Cozic
4d9d84a8f3 Merge branch 'master' of github.com:laurent22/joplin 2019-07-13 15:58:06 +01:00
Laurent Cozic
ec1089870f All: Fixes #1694: When deleting resource from sync target also delete associated data blob 2019-07-13 15:57:53 +01:00
Helmut K. C. Tessarek
dbedefc021 Desktop: Fixes #1342: Add override for ACE editor shortcut Ctrl+K (#1705) 2019-07-13 14:52:32 +01:00
Kirill Goncharov
f6b0da3f5e Android: Check filesystem permission if filesystem sync target is selected (#1665)
* Android: Check filesystem permission if filesystem sync target is selected

* Android: Change permission error text, don't prevent user from saving settings
2019-07-13 14:51:54 +01:00
Laurent Cozic
85bf89fd97 Android release v1.0.279 2019-07-12 19:44:23 +01:00
Laurent Cozic
c2a80b12f0 Mobile: More rendering optimisations to make animations smoother and to allow typing fast on large notes 2019-07-12 19:36:12 +01:00
Laurent Cozic
981c97cca5 Mobile: Optimising screen rendering to make text input faster 2019-07-12 18:32:08 +01:00
Laurent Cozic
091cbc5355 Mobile: Added sync button animation; Added notebook header; Improved layout of Edit Notebook screen 2019-07-12 18:07:47 +01:00
Laurent Cozic
e5a8114887 Mobile: Added icons to left sidebar 2019-07-11 18:44:26 +01:00
Laurent Cozic
4779fc6f43 Mobile: Remove search and side menu button from config screen 2019-07-11 18:26:04 +01:00
Laurent Cozic
86e7daaec4 Mobile: Cleaned context menu and moved options and metadata to side menu bar 2019-07-11 18:23:29 +01:00
Laurent Cozic
cab73a26e7 Mobile: Adding note side menu 2019-07-11 17:43:55 +01:00
Laurent Cozic
554ddb3b51 Mobile: Grouped file attachment action under one menu 2019-07-11 17:41:13 +01:00
Laurent Cozic
3b22bdb8ae Doc: Fixed Linux install command line for website 2019-07-10 18:18:31 +01:00
Laurent Cozic
5fdd07679e All: Fix: Only log master key ID 2019-07-10 17:35:08 +01:00
Laurent Cozic
69f75a1520 Doc: Updated old links 2019-07-10 17:00:10 +01:00
Laurent Cozic
f9b7acb8b1 Merge branch 'master' of github.com:laurent22/joplin 2019-07-10 16:41:20 +01:00
Laurent Cozic
91f700ad54 Doc: Updated email addresses 2019-07-10 16:41:13 +01:00
Robert
966aca7753 Update nl_NL.po (#1709)
* Update nl_NL.po

* Added ampersands to main menu items 

for the nl-nl translation
2019-07-05 13:00:53 -04:00
Helmut K. C. Tessarek
4de8816ed5 Merge pull request #1710 from Marmo/Marmo-translation-20190705
Translation: minor fixes (de_DE)
2019-07-05 11:26:32 -04:00
Marmo
bea68a1056 Minor translation fixes (de_DE) 2019-07-05 13:54:11 +02:00
Laurent Cozic
6fea7116b6 Mobile: Removed now unneeded Welcome screen 2019-06-29 00:24:00 +01:00
Laurent Cozic
2955914ca5 Mobile: Fixes #1690 (maybe): Process less data simultaneously when building search index to prevent out of memory errors 2019-06-28 23:49:43 +01:00
Laurent Cozic
fd150b5b9d Update website 2019-06-28 16:08:50 +01:00
Laurent Cozic
334ffad196 Doc: Added link to Mastodon feed 2019-06-28 16:04:05 +01:00
Charles
a796a9d179 API: Support is_todo property to allow making a note a todo (#1688) 2019-06-28 13:46:55 +01:00
Helmut K. C. Tessarek
917dcea28a use a command to get the current branch that works with older git versions
closes #1695
2019-06-28 05:02:21 -04:00
Laurent Cozic
c901228dc5 Merge branch 'master' of github.com:laurent22/joplin 2019-06-28 00:51:14 +01:00
Laurent Cozic
da21580785 Mobile: Added 'All notes' screen; Cleaned up header bar buttons; Removed 'body' from note preview object to improve memory usage 2019-06-28 00:51:02 +01:00
Laurent Cozic
4d92187327 Mobile: Added button to fix search engine index 2019-06-28 00:48:52 +01:00
Helmut K. C. Tessarek
207d433fb3 Desktop: Improved: Show git branch and hash in About dialog (#1692)
* show git branch and hash in About dialog

This additional info will only be shown, if the code is not an official release.

An official release is calculated as follows:
- current commit has a tag
- the tag contains the version number of the package

However, the information will always be printed to the console.

* info will now always be shown in About dialog (if available)

ElectronClient/app/compile-package-info.js: added warning
ElectronClient/app/app.js: push info conditionally to the message array

* use sprintf syntax
2019-06-27 15:04:02 +01:00
Laurent Cozic
ffc311d7bd Mobile: Moved slider value to the left so that it is visible while dragging 2019-06-27 00:05:17 +01:00
Laurent Cozic
a1e8e71359 Mobile: Added auto-save 2019-06-26 23:26:26 +01:00
Laurent Cozic
7942e74dc6 Mobile: Fixed field focus logic 2019-06-26 23:21:12 +01:00
Laurent Cozic
c4e21c2b6a Mobile: Added placeholders for note title and body, and focus body by default for notes 2019-06-26 23:00:25 +01:00
Laurent Cozic
0a06aa6f9f Mobile: When inside a note, do not show side menu and search buttons 2019-06-26 22:54:09 +01:00
Laurent Cozic
f985cfa25c Mobile: Removed arrow icon as it is rendered weirdly on device 2019-06-26 18:51:12 +01:00
Laurent Cozic
6e143aef5c Android release v1.0.277 2019-06-26 18:40:43 +01:00
Laurent Cozic
bf16aa6192 All: Better logging in case of error while indexing search 2019-06-26 18:36:42 +01:00
Laurent Cozic
d96c58d192 Mobile: Edit and delete notebooks by long-pressing them, and removed context menu on note lists 2019-06-26 18:28:09 +01:00
Laurent Cozic
e7e0264411 Mobile: Improved side menu: Made button panel fixed at the bottom, and added dark overlay over right side content 2019-06-26 18:05:37 +00:00
Laurent Cozic
430a11282b Mobile: Moved 'New notebook' button to sidebar 2019-06-26 01:10:15 +01:00
Laurent Cozic
9957b2798c Mobile: Moved config menu item to button on side bar 2019-06-26 00:35:26 +01:00
Laurent Cozic
2c5b0010bf Mobile: Removed concept of Advanced Options and move tools to Config screen to clean up context menu 2019-06-26 00:13:13 +01:00
Laurent Cozic
1e3c6ed98c Desktop: When doing local search do not split query into words 2019-06-25 23:09:53 +01:00
Laurent Cozic
484f290eb0 Clipper: Improved clipping selection by removing unecessary elements 2019-06-25 22:11:12 +01:00
Helmut K. C. Tessarek
06ad539941 Clipper release v1.0.17 2019-06-23 23:23:07 -04:00
Laurent Cozic
5b84e80ac4 Clipper: Fixes #1214: Include data from form fields when clipping forms 2019-06-24 00:57:39 +01:00
Laurent Cozic
ca0f349348 Merge branch 'master' of github.com:laurent22/joplin 2019-06-24 00:00:24 +01:00
Laurent Cozic
d79089aea3 Clipper: Fixes #1682: Do not clip elements that should be hidden 2019-06-24 00:00:11 +01:00
Eugene Odeluga
03611ad5ca Desktop: For Ubuntu users, added unity to if condition for desktop icon creation (#1683) 2019-06-23 22:24:58 +01:00
Helmut K. C. Tessarek
c78c1cd3cf Clipper release v1.0.16 2019-06-23 03:06:34 -04:00
水货
55afa7b5b7 Update zh_CN.po (#1681) 2019-06-23 03:00:41 -04:00
Laurent Cozic
a6c407b62b Doc: Mentioned Goto Anything feature 2019-06-22 19:06:54 +01:00
Laurent Cozic
21897a3cd4 Clipper: Resolves #1669: Handle special case of code block used on Microsoft website 2019-06-22 18:57:41 +01:00
Laurent Cozic
5796dd2098 Update translations 2019-06-22 13:10:13 +01:00
abonte
d050071437 update it_IT.po (#1680) 2019-06-22 12:45:35 +01:00
Laurent Cozic
eaf8510f49 Doc: Added requirement for unit tests 2019-06-22 12:44:31 +01:00
Laurent Cozic
6ee2595dce Desktop: Fixes #1676: Preserve user timestamps when adding note via API 2019-06-22 12:31:04 +01:00
Laurent Cozic
0ecf2d6d9a Merge branch 'master' of github.com:laurent22/joplin 2019-06-22 11:23:35 +01:00
Laurent Cozic
50fd075168 Desktop, CLI: Fixes #1672: Fix line break issue when importing certain notes from Evernotes 2019-06-22 11:23:22 +01:00
Helmut K. C. Tessarek
6fa76bb83a fix minor typo in README.md 2019-06-21 23:58:44 -04:00
Laurent Cozic
b175c1fc94 Desktop: Resolves #1649: Cache code blocks in notes to speed up rendering 2019-06-21 08:28:59 +01:00
Caleb John
b461625518 Desktop: Fixed issue with issue with watching file on Linux (#1659)
Watch for rename events in the external editor and re-watch file
2019-06-20 00:44:51 +01:00
Laurent Cozic
3819897ba1 Merge branch 'master' of github.com:laurent22/joplin 2019-06-20 00:02:29 +01:00
Laurent Cozic
6a031857ba Desktop: Fixes #1664: Disable certain menu items when no note or multiple notes are selected, and fixed menu item to set tag 2019-06-20 00:02:13 +01:00
Laurent Cozic
0e57b7eb46 iOS v10.0.36 2019-06-19 23:22:35 +01:00
Laurent Cozic
e21a0ba5b7 Update translations 2019-06-19 23:18:24 +01:00
Laurent Cozic
78f731e616 Merge branch 'master' of github.com:laurent22/joplin 2019-06-19 23:16:45 +01:00
Laurent Cozic
f6688a65ae iOS: Fixed bug that was preventing images from displaying 2019-06-19 23:16:37 +01:00
Laurent Cozic
035b9c6d1a Android: This is now needed to build the app 2019-06-19 21:51:22 +01:00
Laurent Cozic
266ff244d9 Revert "Mobile: Added button to clear local sync state"
Can cause too many issues.

This reverts commit 6ce091f4d8.
2019-06-19 21:50:26 +01:00
Laurent Cozic
de1bfa5c34 Android release v1.0.276 2019-06-19 15:08:44 +01:00
Laurent Cozic
478b8f00d8 Fix release script 2019-06-19 15:04:46 +01:00
Laurent Cozic
860d2fd7f5 Merge branch 'master' of github.com:laurent22/joplin 2019-06-19 15:04:16 +01:00
Laurent Cozic
6ce091f4d8 Mobile: Added button to clear local sync state 2019-06-19 14:57:59 +01:00
Laurent Cozic
ce595ac5e4 Mentioned that it works on FreeBSD 2019-06-19 12:29:15 +01:00
Laurent Cozic
267436a00d Merge pull request #1660 from delta-emil/bulgarian-translation
Localization: add bulgarian
2019-06-18 22:54:52 +01:00
Helmut K. C. Tessarek
97e0f4258a Update localization en_US.po 2019-06-18 12:32:56 -04:00
delta-emil
faa6ccc150 add bulgarian translation 2019-06-16 23:39:20 +03:00
Laurent Cozic
349cade946 All: Optimised resource download queue by exiting early if resources are already downloaded 2019-06-15 21:48:37 +01:00
Laurent Cozic
0200aa92de Doc: Added doc for resource download mode 2019-06-15 21:28:31 +01:00
Laurent Cozic
60ed2cbee5 Mobile: Fixed bug where photo was not displayed just after having taken it 2019-06-15 21:23:30 +01:00
Laurent Cozic
0e7b2f36c8 Fixing release process for Android 2019-06-15 18:58:09 +01:00
Laurent Cozic
4083221b21 Android: Added support for 64-bit hardware 2019-06-15 18:48:07 +01:00
Laurent Cozic
d55c511b4a iOS v10.0.35 2019-06-15 18:18:17 +01:00
Laurent Cozic
7863e1dffe Update website 2019-06-15 10:27:44 +01:00
Laurent Cozic
7cfdf778de Android release v1.0.271 2019-06-15 09:44:34 +01:00
Laurent Cozic
075e55c077 Android release v1.0.269 2019-06-15 01:23:12 +01:00
Laurent Cozic
dc818e8a0c Electron release v1.0.160 2019-06-15 00:57:36 +01:00
Laurent Cozic
caa58dd913 name 2019-06-15 00:57:13 +01:00
Laurent Cozic
c84c3cd026 Merge pull request #1655 from laurent22/react-native-5-9
React Native 5 9
2019-06-14 23:32:12 +01:00
Laurent Cozic
bda5ac9fb5 Upgraded RNdocument-picker 2019-06-14 23:23:01 +01:00
Laurent Cozic
f928f645e5 Upgraded RNSqlite to remove warnings 2019-06-14 23:16:37 +01:00
Laurent Cozic
53d7e906d4 Removed unneeded class that was causing a require cycle 2019-06-14 23:04:05 +01:00
Laurent Cozic
e670b5d03f Upgraded RNDialogbox to remove warnings 2019-06-14 23:02:35 +01:00
Laurent Cozic
2a7d555859 Replaced deprecated Slider component 2019-06-14 22:59:27 +01:00
Laurent Cozic
e6675f500c Removed no longer used WebView module 2019-06-14 22:46:08 +01:00
Laurent Cozic
c3f20d3ebc Getting latest RNCamera to work with Android 2019-06-14 22:45:35 +01:00
Laurent Cozic
ff257060d1 Trying get RNCamera to work in iOS 2019-06-14 22:31:01 +01:00
Laurent Cozic
68cde202a4 Added JSC to improve performances of Android app 2019-06-14 18:37:46 +01:00
Laurent Cozic
1a7a87e170 Remove this for now as are not on AndroidX yet 2019-06-14 18:30:16 +01:00
Laurent Cozic
2990642923 Trying to fix rn-camera but cannot be full fixed yet due to https://github.com/react-native-community/react-native-camera/pull/2306 2019-06-14 09:15:38 +01:00
Laurent Cozic
0818de036e Fixing issue with webview so that WebKit rendering can be used 2019-06-14 09:14:01 +01:00
Laurent Cozic
122bc29035 Mobile: Upgraded WebView 2019-06-14 08:11:15 +01:00
Laurent Cozic
861cf8a1b2 Merge branch 'master' into react-native-5-9 2019-06-14 07:22:57 +01:00
Laurent Cozic
7d6959e9e4 Merge branch 'master' of github.com:laurent22/joplin 2019-06-14 07:22:38 +01:00
Laurent Cozic
85091052e7 iOS: Fixed missing Confirm and Cancel buttons on Alarm dialog 2019-06-14 07:22:25 +01:00
Laurent Cozic
f46ad5bfda Upgrading to React Native 5.9 2019-06-14 07:12:24 +01:00
Laurent Cozic
29f7937fc2 Merge branch 'master' of github.com:laurent22/joplin 2019-06-13 08:48:30 +01:00
Laurent Cozic
7fae9fda10 Desktop: Fixes #1443: Allow opening external editor on new notes 2019-06-13 08:48:19 +01:00
Laurent Cozic
a37961dccc Desktop: Removed placeholder in tag list because it repeats the label 2019-06-13 08:47:47 +01:00
Helmut K. C. Tessarek
55155646aa Clipper release v1.0.15 2019-06-12 19:38:32 -04:00
Laurent Cozic
7bffe86439 Merge branch 'master' of github.com:laurent22/joplin 2019-06-13 00:26:55 +01:00
Laurent Cozic
86136e0c6c Clipper: Fixes #1622: Import named anchors from clipped pages 2019-06-13 00:26:19 +01:00
Helmut K. C. Tessarek
21ae447d9c Clipper: Create a zip file of the source (for validation by Firefox reviewers) (#1648)
The file `joplin-webclipper-source.zip` will be in the `dist` directory of the webclipper.
2019-06-12 23:11:24 +01:00
Laurent Cozic
ad211b4b4e Clipper: Fixes #1600: Handle SVG images and fix issue with invalid file extensions 2019-06-12 09:45:31 +01:00
Laurent Cozic
d6218f35fe Clipper: Fixes #1526: Local files can be clipped again 2019-06-11 01:09:48 +01:00
Laurent Cozic
7af0dcd19a Merge branch 'master' of github.com:laurent22/joplin 2019-06-11 00:11:57 +01:00
Laurent Cozic
e1a52c5606 CLI: Remove Welcome notes because they are mostly relevent to desktop and mobile, and there is already intro text on CLI 2019-06-11 00:11:49 +01:00
Helmut K. C. Tessarek
468c345527 Desktop: Improved: Added shortuct for tags (Cmd+Opt+T / Ctrl+Alt+T) (#1638)
fixes #1626
2019-06-10 23:45:49 +01:00
Caleb John
041bdc08a2 Desktop: New: Highlight notebooks based on depth (#1634)
* Highlight notebooks based on depth

* Adjusted notebook depth targets, and dark theme select color
2019-06-10 23:44:51 +01:00
Laurent Cozic
7535f1a8c6 Update website 2019-06-10 23:41:32 +01:00
Laurent Cozic
0b24433db3 CLI v1.0.140 2019-06-10 08:56:11 +01:00
Laurent Cozic
f7de0c5ffd Merge branch 'master' of github.com:laurent22/joplin 2019-06-10 08:55:46 +01:00
Laurent Cozic
62c48b9a46 CLI: Fixed regression which was preventing decryption on newly created profiles 2019-06-10 08:55:36 +01:00
Helmut K. C. Tessarek
3fafda9684 Desktop: Added menu item to format inline code (#1641)
* Revert "Fix for #1426, aded backticks to auto-wrapping quotes."

This reverts commit 7dee93076a.

* changes to backtick behavior

- add shortcut ``` cmd+` ``` / ``` ctrl+` ```
- add menu item for `Inline code`

* rename menu item Inline Code -> Code
2019-06-10 08:05:20 +01:00
Helmut K. C. Tessarek
2cf1cda128 Update de_DE.po (#1640) 2019-06-10 01:18:07 -04:00
Laurent Cozic
fedee9499b Funding: Remove name for now because it causes an error 2019-06-08 10:38:42 +01:00
Laurent Cozic
7c6c7f34ba Android release v1.0.261 2019-06-08 00:49:41 +01:00
Laurent Cozic
0d65edd0e8 Electron release v1.0.159 2019-06-08 00:47:09 +01:00
Laurent Cozic
d57520c66a Merge branch 'master' of github.com:laurent22/joplin 2019-06-08 00:23:35 +01:00
Laurent Cozic
fa28ae1433 Mobile: Improved and cleaned up config screen 2019-06-08 00:23:17 +01:00
Laurent Cozic
0acf9823e5 Added missing test 2019-06-07 23:39:34 +01:00
Caleb John
799ad5f1da Desktop: Improved tag dialog to make it easier to add and remove tags (#1589) 2019-06-07 23:33:06 +01:00
Laurent Cozic
9f6b3ccf40 All: Improved: Allow using multiple connections to download items while synchronising (#1633)
* Task queue

* All: Improved sync speed by downloading items in parallel

* Improved download queue
2019-06-07 23:20:08 +01:00
Laurent Cozic
df714c357d All: Improved: Better handling of items that cannot be decrypted, including those that cause crashes 2019-06-07 23:11:08 +01:00
Laurent Cozic
de5fdc84f8 Added simple Key-Value store to support temporary data 2019-06-07 08:05:15 +00:00
Laurent Cozic
b5b228af15 Merge branch 'master' of github.com:laurent22/joplin 2019-06-06 16:05:26 +01:00
Laurent Cozic
7a85628f46 Doc: added Twitter feed and Product Hunt page 2019-06-06 16:05:14 +01:00
MichipX
075e76fc4b [Update] Language file: pl_PL.po (#1625)
Addition of strings and correction of mistakes.
2019-06-06 13:40:51 +01:00
Gustavo Reis
172a98fed4 Desktop: Fix icon path and directory in Linux install script (#1612) 2019-06-05 23:14:19 +01:00
Caleb John
409bdd7b78 Desktop, mobile: Upgrade TOC plugin version to 4.0.0 to fix various issues (#1603) 2019-06-05 23:13:00 +01:00
Caleb John
d012c689e1 Desktop: Improve how font size is applied (#1601) 2019-06-05 23:11:18 +01:00
Caleb John
89ec0629e6 Bump version of multimd-tables for mobile (#1597) 2019-06-05 23:02:10 +01:00
Laurent Cozic
b3475ae195 Android release v1.0.260 2019-06-05 18:31:59 +01:00
Laurent Cozic
a72ab67473 CLI v1.0.139 2019-06-05 18:09:10 +01:00
Laurent Cozic
90fbfec914 Update translations 2019-06-05 18:07:11 +01:00
Germán Martín
49ef023a90 Complete Spanish translation (#1613)
* Complete Spanish translation

Add missing translations

* Fix translation

* Review translation with Poedit
2019-06-05 18:02:36 +01:00
abonte
64bfd74f18 Translation: update it_IT.po (#1616)
* update Italian translation

* small fix
2019-06-05 18:02:20 +01:00
Laurent Cozic
655e35056e Merge branch 'master' of github.com:laurent22/joplin 2019-06-05 17:41:40 +01:00
Laurent Cozic
a13ba63ab8 Desktop: New: Added option to open development tools, to make it easier to create custom CSS 2019-06-05 17:41:30 +01:00
Laurent Cozic
e2e00d4c87 Doc: Added info to submit a web clipper bug 2019-06-05 15:09:22 +01:00
Helmut K. C. Tessarek
159dc44f6c Update website 2019-05-28 22:43:54 -04:00
Laurent Cozic
8fe2091926 Desktop, CLI: Fixes #1583: Handle multiple lines in attributes when importing Enex files 2019-05-28 22:52:09 +01:00
Laurent Cozic
c362c38dc0 Merge branch 'master' of github.com:laurent22/joplin 2019-05-28 22:05:25 +01:00
Laurent Cozic
316a52bbc2 All: Improved workflow of downloading and decrypting data during sync 2019-05-28 22:05:11 +01:00
Helmut K. C. Tessarek
0de9f6f944 Merge pull request #1596 from mmahmoudian/Update-Persian-localization
Improved and fixed Persian (fa) translation
2019-05-28 13:48:03 -04:00
Laurent Cozic
3ba021fdd9 Fixed test for Welcome notebook 2019-05-28 18:17:59 +01:00
Laurent Cozic
04c6579f2c All: Fix: Fix issue with revisions being needlessly created when decrypting notes 2019-05-28 18:10:21 +01:00
Mehrad Mahmoudian
bc7bd456a7 [update] Persian (fa) Language 2019-05-28 19:02:02 +03:00
Laurent Cozic
6d7511efbb Electron release v1.0.158 2019-05-27 19:54:04 +01:00
Caleb John
a0fb99d78f Desktop, Mobile: Improved: Enable more options on multimd-table plugin (#1586)
* Update multimd-table and enable options

* Add `options` option to markdown plugins
2019-05-27 19:53:02 +01:00
Laurent Cozic
685a52c2c5 Desktop, Mobile: Fixes #1587: Fix internal note links 2019-05-27 19:49:18 +01:00
Laurent Cozic
fc77419ca1 Desktop: Fixed empty separators in menu 2019-05-27 19:48:09 +01:00
Laurent Cozic
bab3a12e92 Doc: Updated build instructions for Windows 2019-05-27 18:04:24 +01:00
Laurent Cozic
21f0b90f48 Android release v1.0.255 2019-05-26 19:41:20 +01:00
Laurent Cozic
83682ab513 Desktop, Mobile: Improved config screen with dark theme 2019-05-26 19:39:07 +01:00
Laurent Cozic
7b987b5a8f Desktop: Resolves #1575: Make bold text more visible 2019-05-24 23:51:56 +01:00
Laurent Cozic
cb5aa425c8 Updated translations 2019-05-24 23:09:31 +01:00
Laurent Cozic
dd222381dd Translatiobs 2019-05-24 23:08:31 +01:00
Laurent Cozic
d7210811f6 Android release v1.0.254 2019-05-24 17:38:10 +01:00
Laurent Cozic
3a43cfeebf Electron release v1.0.157 2019-05-24 17:35:53 +01:00
Laurent Cozic
31e33c6628 Updated translations 2019-05-24 17:35:44 +01:00
Laurent Cozic
875f8d6997 Electron release v1.0.156 2019-05-24 17:35:04 +01:00
Laurent Cozic
aaaf27af6e Android: Fixed resource loading issue, and improved logging on desktop 2019-05-24 17:34:18 +01:00
Laurent Cozic
43624ffa75 Desktop: Improved: Add number of characters removed and added in revision list 2019-05-24 17:31:18 +01:00
Laurent Cozic
996b6623f1 Android release v1.0.253 2019-05-24 14:50:18 +01:00
Laurent Cozic
613041b806 Electron release v1.0.155 2019-05-24 14:47:35 +01:00
Laurent Cozic
ff1d01a864 Merge branch 'master' of github.com:laurent22/joplin 2019-05-24 14:47:30 +01:00
Laurent Cozic
bcbbe10bf8 Electron release v1.0.154 2019-05-24 14:47:12 +01:00
Laurent Cozic
3de0abfc84 Update FUNDING.yml 2019-05-24 09:57:53 +01:00
Laurent Cozic
133fd03469 Update FUNDING.yml 2019-05-24 09:55:29 +01:00
Laurent Cozic
4f97c5c017 Update FUNDING.yml 2019-05-24 09:55:07 +01:00
Laurent Cozic
2d8fbac58c Create FUNDING.yml 2019-05-24 09:53:31 +01:00
Laurent Cozic
95f7ac4a4a Merge branch 'master' of github.com:laurent22/joplin 2019-05-24 09:07:11 +01:00
Laurent Cozic
6a56a6ccf0 Doc: Added more technical info for revision history 2019-05-24 09:05:16 +01:00
Luis Orozco
1eb8df9fa6 Desktop: Fixes #1186, #1354: Clears search when clicking on a notebook. (#1504)
* Fixes #1186, #1354. Clears search when clicking on a notebook.

* use new resetSearch method where possible, replaced tabs with spaces

* replaced a couple more spaces with tabs
2019-05-24 08:13:01 +01:00
Helmut K. C. Tessarek
485b4baebb Update de_DE.po 2019-05-23 23:40:42 -04:00
Laurent Cozic
5590d887c9 Doc: Added note history info 2019-05-24 00:21:15 +01:00
Laurent Cozic
d00bfa997e Doc: Fixed more links 2019-05-22 16:57:45 +01:00
Laurent Cozic
1a8590e9b9 Update website 2019-05-22 16:49:57 +01:00
Laurent Cozic
5a978977df Fix Iran flag 2019-05-22 16:49:32 +01:00
Laurent Cozic
5d763c7e6c All: Remove tags from Welcome item due to issue with cleaning them up afterwards 2019-05-22 16:38:53 +01:00
Laurent Cozic
050b089e72 Update translations 2019-05-22 16:34:59 +01:00
Helmut K. C. Tessarek
733ea4027c Doc: use new forum link (#1545) 2019-05-22 16:20:10 +01:00
Helmut K. C. Tessarek
10500c78b1 All: Fix: Default sort order for notebooks should be title and ascending (#1541) 2019-05-22 16:18:16 +01:00
Caleb John
0040cc02a2 Only delete the .desktop file if it will be replaced by the script (#1537) 2019-05-22 16:16:41 +01:00
Luis Orozco
74afd20f0c Desktop: Fixes #1426: added backticks to auto-wrapping quotes. (#1534) 2019-05-22 16:16:03 +01:00
Luis Orozco
dc9bde2184 Github: updated Contributing.md (#1533)
* updated Contributing.md

- Added several guidelines
- Moved some rules to bulleted lists (for quicker reading).

* Replace links to old forum domain to new domain. Removed a word.
2019-05-22 16:14:59 +01:00
Mehrad Mahmoudian
5243ea7eb2 All: New: Added Persian translation (#1539)
* [init] the first version of the fa.po file

Providing translation for Persian language

* [fix] moved the fa.po file into correct path
2019-05-22 16:05:25 +01:00
水货
7d93492658 Update zh_CN.po (#1524) 2019-05-22 15:57:20 +01:00
Helmut K. C. Tessarek
c6b56345f5 add /%d to Fetching resources: %d (#1532) 2019-05-22 15:56:25 +01:00
Laurent Cozic
8a6fe20a69 All: Resolves #1481: New: Allow downloading attachments on demand or automatically (#1527)
* Allow downloading resources automatically, on demand, or when loading note

* Make needToBeFetched calls to return the right number of resources

* All: Improved handling of resource downloading and decryption

* Desktop: Click on resource to download it (and, optionally, to decrypt it)

* Desktop: Better handling of resource state (not downloaded, downloading, encrypted) in front end

* Renamed setting to sync.resourceDownloadMode

* Download resources when changing setting

* tweaks

* removed duplicate cs

* Better report resource download progress

* Make sure resource cache is properly cleared when needed

* Also handle manual download for non-image resources

* More improvements to logic when downloading and decrypting resources
2019-05-22 15:56:07 +01:00
Laurent Cozic
6bcbedd6a4 CLI v1.0.137 2019-05-19 12:05:02 +01:00
Laurent Cozic
4c935b78f9 Removed log statement 2019-05-19 12:04:09 +01:00
Laurent Cozic
94cddda6d0 Removed temp files 2019-05-19 11:22:00 +01:00
Laurent Cozic
1924ea062c CLI v1.0.136 2019-05-19 11:20:17 +01:00
Laurent Cozic
07e88b2eeb All: Handle missing resource blob when setting resource size 2019-05-19 11:18:44 +01:00
Laurent Cozic
e4a08c29d7 Desktop, Mobile: Improved: Gray out checkboxes that have been ticked inside notes 2019-05-17 22:41:30 +01:00
Laurent Cozic
d60afcaabe Fixed merge 2019-05-16 17:36:02 +00:00
Laurent Cozic
1a091460ca All: Fixed: Prevent app from trying to upload resource it has not downloaded yet 2019-05-16 17:34:16 +00:00
Laurent Cozic
8ebaa7f6eb All: Put back "Fetched items" message during sync 2019-05-15 08:14:36 +01:00
Laurent Cozic
e2a64e21a2 Electron release v1.0.153 2019-05-14 22:23:47 +01:00
Laurent Cozic
78ddd22f09 Log more revision information to allow debugging issues 2019-05-14 22:23:34 +01:00
Laurent Cozic
c546b7076a Fixed doc 2019-05-14 22:02:47 +01:00
Laurent Cozic
0e2bb5d784 Desktop: Improved: When opening a note using Goto Anything, open all its parent notebooks too 2019-05-14 00:11:27 +01:00
Laurent Cozic
5c069c38f5 CLI v1.0.135 2019-05-13 23:59:27 +01:00
Laurent Cozic
451b9c0ae9 CLI v1.0.133 2019-05-13 23:55:53 +01:00
Laurent Cozic
047897621a Fix CLI build script 2019-05-13 23:52:12 +01:00
Laurent Cozic
52e5cec585 Update website 2019-05-13 23:41:31 +01:00
Laurent Cozic
bc98b65efa Update website 2019-05-13 23:23:57 +01:00
Laurent Cozic
9250e77862 Added link to CLI changelog 2019-05-13 23:23:42 +01:00
Laurent Cozic
cd69e71945 Forgot to publish in publish script 2019-05-13 23:20:25 +01:00
Laurent Cozic
e705e6e990 CLI v1.0.129 2019-05-13 23:18:57 +01:00
Laurent Cozic
4638f11c5e Created CLI release script with changelog auto-generation 2019-05-13 23:18:44 +01:00
Laurent Cozic
9de7c15e93 CLI v1.0.128 2019-05-13 22:53:08 +01:00
Laurent Cozic
61736546b4 Updated translations 2019-05-13 22:52:42 +01:00
Laurent Cozic
82b6dd23a7 CLI v1.0.127 2019-05-13 10:11:10 +01:00
Laurent Cozic
64427f0160 iOS 10.0.34 2019-05-13 10:10:37 +01:00
Laurent Cozic
cbf47cb9ee Android release v1.0.252 2019-05-13 09:53:50 +01:00
Laurent Cozic
dba3e4202d Electron release v1.0.152 2019-05-13 09:51:04 +01:00
Laurent Cozic
173cd6de4d Fixed regression 2019-05-13 09:50:39 +01:00
Laurent Cozic
3d333bd8f2 Removed build files 2019-05-13 00:43:12 +01:00
Laurent Cozic
a82f8c7dd0 CLI v1.0.126 2019-05-13 00:42:16 +01:00
Helmut K. C. Tessarek
cde079e44e Clipper release v1.0.14 2019-05-12 17:52:20 -04:00
Laurent Cozic
f8d20b61ea Update website 2019-05-12 16:18:30 +01:00
Laurent Cozic
d279435502 Android release v1.0.251 2019-05-12 16:16:39 +01:00
Laurent Cozic
eb2065128e Electron release v1.0.151 2019-05-12 16:04:01 +01:00
Laurent Cozic
10e81aa476 Trying to fix iOS release issue 2019-05-12 16:03:22 +01:00
Laurent Cozic
3e808f05fd Improved logic to set resource file size 2019-05-12 15:53:42 +01:00
Laurent Cozic
e57bfad9b1 Android release v1.0.248 2019-05-12 11:50:21 +01:00
Laurent Cozic
5f344f07d4 Electron release v1.0.150 2019-05-12 11:41:35 +01:00
Laurent Cozic
e1b7b64e1b All: Make sure resource filesize is set in all cases 2019-05-12 11:41:07 +01:00
Laurent Cozic
ed3970be81 CLI: Fix: Do not resize images if they are already below the max dimensions 2019-05-12 11:38:33 +01:00
Laurent Cozic
c27861d40f Electron release v1.0.149 2019-05-12 01:22:02 +01:00
Laurent Cozic
565dfba8c9 All: Fixes #371 (sort of): Allow resources greater than 10 MB but they won't be synced on mobile 2019-05-12 01:15:52 +01:00
Laurent Cozic
553a26eb63 Desktop, CLI: Added option to disable creation of welcome items 2019-05-12 01:10:46 +01:00
Laurent Cozic
9c85bc2cd1 All: Save size of a resource to the database; and added mechanism to run non-database migrations 2019-05-11 17:55:40 +01:00
Laurent Cozic
e96bc9c48a All: Allow specifying the log level of a log target 2019-05-11 17:53:56 +01:00
Laurent Cozic
0d036d8183 Fixed regression following fix for #1425 2019-05-11 17:35:39 +01:00
Laurent Cozic
e5f2a7f2f5 Fixed regression caused by #1472 2019-05-11 17:34:45 +01:00
Laurent Cozic
016ce3dd61 Desktop: Resolves #1502: Improved note deletion dialog 2019-05-11 13:36:44 +01:00
Laurent Cozic
afb375955e Fixed regressions following fix for #1425 2019-05-11 12:08:28 +01:00
Laurent Cozic
b702b0b40c Desktop: Fixes #1425: Improved handling of images when using external editor, so that it works in Atom, VSCode and Typora 2019-05-11 11:46:13 +01:00
Laurent Cozic
91ecab51c5 Clipper: Fixed: Added Chrome workaround to prevent it from posting the same note twice 2019-05-11 11:18:09 +01:00
Laurent Cozic
7628506926 Merge branch 'master' of github.com:laurent22/joplin 2019-05-11 11:13:23 +01:00
Laurent Cozic
4e7f7c0c9c Clipper: Fixes #1510: Fixed display of some images in preview. Also display images at correct size inside preview. 2019-05-11 11:13:13 +01:00
Laurent Cozic
863f5bcf18 Desktop, Mobile: Fixed: Some images were not being displayed 2019-05-11 09:49:56 +01:00
Laurent Cozic
dccd489fcc Clipper: Fix: Fix handling of tables with empty headers 2019-05-11 09:23:31 +01:00
Helmut K. C. Tessarek
333c3f6369 added .gitignore to /Tools 2019-05-10 20:19:42 -04:00
Helmut K. C. Tessarek
808413d0bf remove section self-signed certs from FAQ for now - no Android rel available that has this feature yet 2019-05-10 03:19:47 -04:00
Helmut K. C. Tessarek
440be3d920 remove unintentionally committed files again 2019-05-09 23:01:49 -04:00
Helmut K. C. Tessarek
9b27a4f601 Update website 2019-05-09 22:58:56 -04:00
Don Bowman
6e36ca32b4 CLI: Fix: Bump sqlite3 to v4.0.7 for node12 support (#1508) 2019-05-10 01:18:04 +01:00
simonsan
85a9c303f2 Changed download links to v1.0.145 (#1507) 2019-05-10 01:17:08 +01:00
Krešimir Klas
7e9972d99f Android: Resolves #680: New: Allow self-signed certificates (#1466)
* Allow User-added CAs in Android

This will enable connecting to servers with self-signed certificates on
android as per issue #680.

Implemented as per:
- https://android-developers.googleblog.com/2016/07/changes-to-trusted-certificate.html
- https://github.com/facebook/react-native/issues/20488

* Allow User-added CAs in Android

This will enable connecting to servers with self-signed certificates on
android as per issue #680.

Implemented as per:
- https://android-developers.googleblog.com/2016/07/changes-to-trusted-certificate.html
- https://github.com/facebook/react-native/issues/20488
2019-05-10 01:15:13 +01:00
Laurent Cozic
771975cd35 Clipper: Fixes #1462: Allow importing images from local file with file:// URLs 2019-05-10 01:06:06 +01:00
Laurent Cozic
356f8e580b Clipper: Improved: Updated Readability library to improve Simplified Page clipping 2019-05-10 00:05:23 +01:00
Laurent Cozic
68268cb35d Merge branch 'master' of github.com:laurent22/joplin 2019-05-09 23:46:41 +01:00
Laurent Cozic
8e58ed12af Clipper: Resolves #1379: Improved: Display warning icon when a page might not render well in simplified mode 2019-05-09 23:41:52 +01:00
Laurent Cozic
beb428b246 Android release v1.0.246 2019-05-08 00:54:46 +01:00
Laurent Cozic
4d81caff0b Electron release v1.0.148 2019-05-08 00:52:20 +01:00
Laurent Cozic
78372c9bac All: Improved: Make sure a revision is saved a note has not been modified for over a week 2019-05-08 00:51:56 +01:00
Laurent Cozic
a4db1bc671 All: Improved: Do not save a revision if there is already a recent one that exists 2019-05-08 00:10:36 +01:00
Laurent Cozic
8ea1c373ed Fixed position of config button 2019-05-07 23:50:12 +01:00
Laurent Cozic
8ef27dfcdc Merge branch 'master' of github.com:laurent22/joplin 2019-05-07 23:43:40 +01:00
Laurent Cozic
23e43c7bc1 Desktop: Fix: Fixed note history sort order. 2019-05-07 23:42:46 +01:00
Helmut K. C. Tessarek
edb8f4c79f Merge pull request #1503 from ruzaq/master
CLI: CZech translation updated
2019-05-07 17:46:39 -04:00
Ruzicka Pavel
e115fa4bb3 CZech translation updated 2019-05-07 23:30:18 +02:00
Laurent Cozic
52a2daddbf All: Improved: Make sure user timestamp is preserved with revision information 2019-05-07 22:15:47 +01:00
Laurent Cozic
c400142996 All: Fix: Make sure a revision is not empty before saving it 2019-05-07 20:46:58 +01:00
Laurent Cozic
219171a18c Remove dependency to git2json and improved handling of new commit messages 2019-05-06 22:18:17 +01:00
Laurent Cozic
d7d573d9dd Android release v1.0.245 2019-05-06 21:51:42 +01:00
Laurent Cozic
c4b17f8919 Electron release v1.0.147 2019-05-06 21:48:50 +01:00
Laurent Cozic
da2f4b96c7 Electron release v1.0.146 2019-05-06 21:48:37 +01:00
Laurent Cozic
08af9de190 All: Resolves #712: New: Support for note history (#1415)
* Started revisions support

* More rev changes

* More rev changes

* More revs changes

* Fixed deletion algorithm

* More tests and moved updated time to separate field

* Display info when restoring note

* Better handling of existing notes

* wip

* Further improvements and fixed tests

* Better handling of changes created via sync

* Enable chokidar again

* Testing special case

* Further improved logic to handle notes that existed before the revision service

* Added tests

* Better handling of encrypted revisions

* Improved handling of deleted note revisions by moving logic to collectRevision

* Improved handling of old notes by moving logic to collectRevision()

* Handle case when deleting revisions while one is still encrypted

* UI tweaks

* Added revision service to mobile app

* Fixed config screens on mobile and desktop

* Enabled revisions on CLI app
2019-05-06 21:35:29 +01:00
Laurent Cozic
9e2982992a Merge branch 'master' of github.com:laurent22/joplin 2019-05-06 21:31:45 +01:00
Laurent Cozic
c03ac5c5f1 Make sure Appveyor only build tags 2019-05-06 21:31:37 +01:00
Luis Orozco
5934f2f08e Desktop: Fixes #355: Resets the undo manager when creating new notes (#1495) 2019-05-06 21:30:04 +01:00
Caleb John
f136f40fdc Doc: Update readme to warn about restarting the editor for userstyle (#1487) 2019-05-06 21:26:34 +01:00
Luis Orozco
d213e4ab57 All: Fixed: Prevents notes with no title to break after synchronize (#1472)
Tests to confirm serialize/unserialize don't change body and title

check if item title exists, otherwise display default title.

added test checking serializing/unserializing Folders don't modify data
2019-05-06 21:25:14 +01:00
Laurent Cozic
782aae4ddf Doc: Better handling of platform in changelog autogenerate 2019-05-03 15:02:32 +00:00
Laurent Cozic
4f47bd7bcd Android release v1.0.244 2019-05-03 00:22:11 +01:00
Laurent Cozic
4f76946140 Electron release v1.0.145 2019-05-03 00:20:01 +01:00
Laurent Cozic
aa60923cbd Doc: Better handling of platforms in changelog generation 2019-05-03 00:19:42 +01:00
doc75
7670ce32b1 removing sh in Linux installation command line as this is unnecessary (and failing on Ubuntu) (#1484) 2019-05-02 23:58:38 +01:00
Laurent Cozic
0b98632336 Update website 2019-05-02 23:54:52 +01:00
Laurent Cozic
49c998de83 Doc: Auto-generate anchors 2019-05-02 23:54:31 +01:00
Helmut K. C. Tessarek
da69d6b2c9 Desktop: Fix: Update chokidar to fix blank screen when returning from external editor (#1479) 2019-05-02 16:00:17 +01:00
Michael Schneider
a757aefce0 Remove separator between New Notebook and Close Window in File Menu (#1483) 2019-05-02 15:55:48 +01:00
Laurent Cozic
b2129cb8c4 Desktop, CLI: Fixes #1476: Import lists and sub-lists from Enex files with correct indentation 2019-05-01 18:06:37 +01:00
Laurent Cozic
27f14c175f Electron release v1.0.144 2019-04-30 23:42:42 +01:00
Laurent Cozic
aad49c520b All: Improved: Display better error message when trying to sync with a new sync target from an old version of Joplin 2019-04-30 23:42:06 +01:00
Michael Schneider
af794a16d6 Desktop (macOS): Add macOS "Close Window" menu item and add name to Quit menu (#1434)
* Add Close Window to macOS file menu

* Add Joplin to Quit menu item

On macOS the application name appears usually within the Quit menu item.

* Use performClose: selector for Close Window

* Revert Quit with name and add Quit string to translations

* Move Quit translation to joplin.pot

* Remove Quit string
2019-04-30 21:38:20 +01:00
Laurent Cozic
ca7266cd69 Fixing images 2019-04-30 19:04:24 +01:00
Laurent Cozic
fb758afc81 Update website 2019-04-30 18:58:35 +01:00
Laurent Cozic
b806f0da49 Removed dependency to unsafe and buggy marked 2019-04-30 18:58:19 +01:00
Laurent Cozic
4e3b1f3e13 Merge branch 'master' of github.com:laurent22/joplin 2019-04-30 18:29:46 +01:00
Laurent Cozic
475467c41c Update website 2019-04-30 18:29:43 +01:00
Caleb John
28e5039873 Update Joplin_install_and_update from #1422 and #1473 (#1475) 2019-04-30 18:28:36 +01:00
Laurent Cozic
1efc6e6151 Merge branch 'master' of github.com:laurent22/joplin 2019-04-30 18:27:08 +01:00
Laurent Cozic
e280a02643 Update doc 2019-04-30 18:26:58 +01:00
Christian Moritz
788dc42684 CLI: Improved: Update sharp (for node 12 compatibility) (#1471) 2019-04-30 17:32:51 +01:00
Laurent Cozic
01f2759a62 Added CLI changelog 2019-04-29 18:39:43 +01:00
Laurent Cozic
9419e3af9c CLI v1.0.125 2019-04-29 18:36:32 +01:00
Laurent Cozic
6d220005cc All: Fixes #1353: Remove message "Processing a path that has already been done" as this is not an error 2019-04-29 18:27:32 +01:00
Laurent Cozic
6d68e61bbd Exclude reverted commits from changelog 2019-04-29 07:42:40 +01:00
Laurent Cozic
29582623b0 Revert "Desktop: Improved: Removed gaps between note list and vertical resizers (#1464)"
This reverts commit d6e59c5238.
2019-04-29 07:28:16 +01:00
Laurent Cozic
4571e7853a Improved auto-generation of changelog 2019-04-28 15:09:07 +01:00
Luis Orozco
d6e59c5238 Desktop: Improved: Removed gaps between note list and vertical resizers (#1464) 2019-04-28 14:23:17 +01:00
Luis Orozco
6335cbedb8 Desktop: Improved: UI updates to sidebar and header, changing icon sizes and animations (#1463)
Added animation to icon in synchronize button

Moved sync report above button, which prevents the sync button from moving from its place when the report has text.

Added animation to icon in Toggle Sidebar button, using the css transition property.

Reduced font size for text and icons in header and sidebar

Changed theme color2 from white to a very light grey. It is barely
noticeable, but reduces contrast a bit, improving readability.
2019-04-28 14:20:18 +01:00
Laurent Cozic
f3344ce05d Removed "Demo" word from screenshot to comply with App Store 2019-04-28 13:11:15 +01:00
Laurent Cozic
155d38d24a Update website 2019-04-26 19:06:17 +01:00
Laurent Cozic
412f6d8316 Fixing Arabic flag 2019-04-26 18:58:40 +01:00
Laurent Cozic
d0f3ed80e0 Added new required iOS screenshots 2019-04-26 18:37:30 +01:00
Helmut K. C. Tessarek
b86f3b74bd build-translation.js: hack to show en_US as 100% (#1448) 2019-04-26 18:36:12 +01:00
Laurent Cozic
60054d1d8b ios-v10.0.31 2019-04-26 08:52:59 +01:00
Laurent Cozic
c40c6428d7 Merge branch 'master' of github.com:laurent22/joplin 2019-04-26 08:30:51 +01:00
Laurent Cozic
e708ecccee Updated FAQ 2019-04-26 08:30:40 +01:00
Helmut K. C. Tessarek
04f991d3bf Update website 2019-04-23 16:10:41 -04:00
Helmut K. C. Tessarek
d5d7368ba0 Merge pull request #1446 from Fvbor/patch-1
Readme: Change Download links from 1.0.142 to 1.0.143
2019-04-23 16:09:16 -04:00
Hagen Tasche
abff929d4e Change Download links from 1.0.142 to 1.0.143 2019-04-23 09:09:11 +02:00
Laurent Cozic
49edc82594 Tools: Allow auto-generating changelog from commit messages 2019-04-22 18:02:45 +00:00
Helmut K. C. Tessarek
7dd7d0ec17 Merge pull request #1439 from tessus/localization-de_DE
update localization de_DE.po
2019-04-22 00:01:34 -04:00
Helmut K. C. Tessarek
61aaf64f95 update localization de_DE.po 2019-04-22 00:00:54 -04:00
Helmut K. C. Tessarek
da35785951 Update website 2019-04-21 14:55:52 -04:00
Helmut K. C. Tessarek
e394034678 restore the content of API.md 2019-04-21 14:49:12 -04:00
Laurent Cozic
edf002ab32 Android release v1.0.243 2019-04-21 14:58:33 +01:00
Laurent Cozic
50f2076981 Electron release v1.0.143 2019-04-21 14:56:13 +01:00
Laurent Cozic
a9ae78bcde Updated translations 2019-04-21 14:55:12 +01:00
Laurent Cozic
0d7f9a2ab3 Merge branch 'master' of github.com:laurent22/joplin 2019-04-21 13:56:01 +01:00
Laurent Cozic
a5ee120281 All: Fixes #1433: Some resources could incorrectly be deleted even though they are still present in a note. Also added additional verifications before deleting a resource. 2019-04-21 13:49:40 +01:00
Helmut K. C. Tessarek
12ebf44e22 Desktop: add option to use soft breaks for markdown rendering (#1408)
* add option to use soft breaks for markdown rendering

* oops, I didn't use the British spelling

* moved setting to section Plugins

* change text -> Enable soft breaks
2019-04-21 10:03:10 +01:00
Laurent Cozic
220f5d0967 Desktop: Fixes #1425 (probably): Fix display of images when using VSCode as external editor 2019-04-20 21:12:19 +01:00
Laurent Cozic
4ef05272c4 Clipper: Fixes #1417: Sort the folders in the same order as the desktop app 2019-04-20 19:29:23 +01:00
Laurent Cozic
c3262aa5f8 Desktop: Allow CtrlCmd+G shortcut from text editor 2019-04-20 19:07:13 +01:00
Laurent Cozic
42119c8f42 All: Fixes #1427: Support checkoxes behind bullets 2019-04-20 19:00:22 +01:00
Laurent Cozic
27cce03968 Updated translations 2019-04-20 12:26:34 +01:00
Laurent Cozic
776aba1e49 Merge branch 'master' of github.com:laurent22/joplin 2019-04-20 12:23:55 +01:00
Laurent Cozic
9356841cfc Desktop: Fixes #423: Make sure links are clickable when exporting to PDF 2019-04-20 12:23:05 +01:00
Helmut K. C. Tessarek
7fc233e808 Desktop: change shortcuts for 'Print' and 'Goto Anything' (#1420)
Print            Command/Control + P
Goto Anything    Command/Control + G

closes #1413
2019-04-20 12:02:43 +01:00
Helmut K. C. Tessarek
7b2eac3abd add localization for English (United States) en_US (#1391) 2019-04-20 12:01:53 +01:00
Laurent Cozic
93323deea5 Desktop: Fix: Updated Electron and Chokidar to try to fix external editor crashing app 2019-04-20 12:00:42 +01:00
Laurent Cozic
e8fa399e9e Update website 2019-04-18 15:26:13 +01:00
Laurent Cozic
a974eb5d9f Fixing links 2019-04-18 15:11:56 +01:00
Laurent Cozic
6a3f04274d Update website 2019-04-18 15:00:32 +01:00
Laurent Cozic
f8e1395087 joplin.cozic.net => joplinapp.org 2019-04-18 14:59:17 +01:00
Laurent Cozic
82b5af51e5 Update CNAME 2019-04-18 14:06:15 +01:00
Laurent Cozic
cf40c14a86 All: Fixes #1405: Handle invalid resource tags that contain no data when importing ENEX 2019-04-12 01:43:15 +01:00
Laurent Cozic
be2b2b7836 Merge branch 'master' of github.com:laurent22/joplin 2019-04-04 08:14:36 +01:00
Laurent Cozic
0cebae8032 All: Allow longer folder paths 2019-04-04 08:01:16 +01:00
Laurent Cozic
6ebc77cbba Desktop: Fix: Goto Anything results were displayed lowercase 2019-04-04 07:53:20 +01:00
Tim Kilåker
542a5e88b7 All: 1383 Clear selected Notes when switching Notebook (#1387) 2019-04-04 07:48:33 +01:00
Laurent Cozic
72b36522e8 All: Improved support for Japanese, Chinese, Korean search queries (also applies to Goto Anything) 2019-04-03 07:46:41 +01:00
Laurent Cozic
252d937405 Update website 2019-04-02 17:46:39 +01:00
Laurent Cozic
a73b0309b9 Electron release v1.0.142 2019-04-02 17:27:52 +01:00
Laurent Cozic
c22283e799 Electron release v1.0.141 2019-04-02 17:27:39 +01:00
Laurent Cozic
1e51ab4a59 Updated translations 2019-04-02 17:27:19 +01:00
Caleb John
0c2f2667d3 All: Allow toggling markdown plugins and added several new plugins (#1347)
* Initial test of enabling plugins

* Added support for toggle-able plugins
- Also adds some new plugins

* Add instructions on adding toggle-plugins

* Fix subtle anchor bug
- webview was moving itself when scrolling to bottom anchors

* Moves the webview hack so that it only applies to anchors

* Add plugin descriptions to the README, also removed mermaid from README

* rename plugin.* to markdown.plugin.* to be more forward compatible
2019-04-02 17:14:48 +01:00
Laurent Cozic
496c9ddb91 Fixed tests to match new behaviour 2019-04-02 00:22:04 +01:00
Laurent Cozic
5ad0b2eed9 Clean up 2019-04-02 00:12:38 +01:00
Laurent Cozic
577d62e783 Updated translations 2019-04-02 00:11:40 +01:00
Laurent Cozic
dcb73c9916 Desktop: Fixed menu logic for non-macOS 2019-04-01 19:51:47 +00:00
Laurent Cozic
6b2910c3c7 Desktop: Added Goto Anything dialog and implemented basic plugin system 2019-04-01 19:43:13 +00:00
Helmut K. C. Tessarek
db04906416 Desktop: macOS: make the menu more like a macOS menu (#1348)
* macOS: make the menu more like a macOS menu

* remove duplcated code even more

* yep, I forgot to localize the new menu item

* more de-duplication, create File menu on macOS
2019-04-01 10:04:34 +01:00
s1nceri7y
54fceeb07d Update README.md (#1375)
added links to browser extensions
2019-03-31 18:27:36 +01:00
RaphaelKimmig
fa32678645 improve search bar text alignment (#1377) 2019-03-31 18:26:47 +01:00
RaphaelKimmig
ee1df1a396 fix sub pixel rendering for desktop (#1378) 2019-03-31 18:25:13 +01:00
Laurent Cozic
729be8767c Clipper release v1.0.13 2019-03-31 12:15:24 +01:00
Helmut K. C. Tessarek
8471f0d86d Merge pull request #1374 from s1nceri7y/patch-1
Update ru_RU.po
2019-03-30 16:34:43 -04:00
s1nceri7y
390b818d71 Update ru_RU.po
translation adjustments
2019-03-30 10:14:44 +00:00
Laurent Cozic
1a1c190ea3 Clipper: Move Confirm button up 2019-03-29 10:11:27 +00:00
Laurent Cozic
40d82b80f1 Clipper release v1.0.12 2019-03-29 09:45:19 +00:00
Laurent Cozic
7647ecbbc7 Clipper: Do not inline scripts to prevent CSP error 2019-03-29 09:44:56 +00:00
Laurent Cozic
b2a5cf9dd0 Clipper release v1.0.10 2019-03-29 09:06:55 +00:00
Laurent Cozic
cbf3ab2ec2 Merge branch 'master' of github.com:laurent22/joplin 2019-03-29 09:04:10 +00:00
Laurent Cozic
c4a37ff0ba Clipper: Better handling of error on tabs where extension is not available 2019-03-29 09:03:21 +00:00
Laurent Cozic
bdc7ea4346 All: Display warning when changing dir for filesystem sync 2019-03-29 08:01:58 +00:00
Tekki
d4c4b9b10a Replace curl with wget in installation script. (#1368) 2019-03-28 21:19:07 +00:00
Caleb John
4b9105edff Set blockScrolling to Infinty (fixes error message) (#1363) 2019-03-28 21:18:53 +00:00
Caleb John
c0980a5a9e prevent appimage integration prompt when joplin.desktop already exists (#1337) 2019-03-28 20:49:44 +00:00
Laurent Cozic
272055fc1d Updated translations 2019-03-28 17:06:06 +00:00
Laurent Cozic
cbb1851b12 Updated translations 2019-03-28 17:05:08 +00:00
Helmut K. C. Tessarek
45d758d52e Merge pull request #1362 from Shaxine/patch-1
Update pt_BR.po
2019-03-24 17:53:02 -04:00
Helmut K. C. Tessarek
49936ef095 update download links, stats, website 2019-03-24 17:50:27 -04:00
António Pereira
986d4be601 Update pt_BR.po
Keep command as intended.
2019-03-24 12:43:47 +00:00
Mats Estensen
b6ad9719ad Translation: complete norwegian, remove fuzzy entries (#1333)
* complete norwegian, remove fuzzy entries

* minor typos
2019-03-17 01:19:31 -04:00
Laurent Cozic
96a1546da1 Desktop: Improved search - when clearing search, stay on current item. When clicking on notebook name, jump to note within notebook. Improved toolbar layout. 2019-03-15 21:57:58 +00:00
Laurent Cozic
6884dd2b9e Cleaned up MdToHtml style 2019-03-13 23:03:55 +00:00
Laurent Cozic
9c027e59c4 Android release v1.0.242 2019-03-13 22:52:24 +00:00
Laurent Cozic
9e16ff3644 Mobile: Moved tags to separate screen to avoid slow down when having many tags 2019-03-13 22:42:16 +00:00
Laurent Cozic
4000cb5d1c All: Fixes #1325: Fixed nested checkbox indentation 2019-03-12 22:24:44 +00:00
Laurent Cozic
1030b412ff All: Fixes #1326: Restored inline code styling 2019-03-12 22:07:02 +00:00
Laurent Cozic
54f0fbcf6b Desktop: Fixes #1329: Could not edit created and updated time anymroe 2019-03-12 21:52:23 +00:00
Laurent Cozic
1602182085 Desktop: Fixes #1334 (maybe): Upgraded chokidar which it seems was randomly making Electron 4 crash (maybe due to fsevent package) 2019-03-12 21:41:13 +00:00
Laurent Cozic
20bb1238c5 CLI v1.0.124 2019-03-11 19:37:52 +00:00
Laurent Cozic
68fbe8125e Desktop: Fixed: The side bar was being refreshed too frequently. Fixed: Order of notebooks with sub-notebooks was sometimes incorrect when sorting by last updated time. 2019-03-10 21:16:05 +00:00
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
387 changed files with 57426 additions and 23072 deletions

4
.github/FUNDING.yml vendored Normal file
View File

@@ -0,0 +1,4 @@
# These are supported funding model platforms
patreon: joplin
custom: https://joplinapp.org/donate/

4
.github/ISSUE_TEMPLATE.md vendored Normal file
View File

@@ -0,0 +1,4 @@
👉 Please follow one of these issue templates:
- https://github.com/laurent22/joplin/issues/new/choose
Note: to keep the backlog clean and actionable, issues may be immediately closed if they do not follow one of the above issue templates.

43
.github/ISSUE_TEMPLATE/bug_report.md vendored Normal file
View File

@@ -0,0 +1,43 @@
---
name: "🐛 Bug Report"
about: Report a reproducible bug or regression in Joplin.
title: ''
labels: 'bug'
---
<!--
Please provide a clear and concise description of what the bug is. (In the section Steps To Reproduce.)
Include screenshots if needed.
Please test using the latest Joplin release to make sure your issue has not already been fixed.
-->
## Environment
Joplin version:
Platform:
OS specifcs:
<!--
Platform can be one of: macOS, Linux, Windows, Android, iOS, terminal (or a combination)
OS specifcs: e.g. OS version, Linux distribution, Android/iOS version, ...
-->
## Steps To Reproduce
1.
2.
<!--
Issues without reproduction steps are likely to stall.
-->
Describe what you expected to happen:
## Logfile
<!--
Please attach a debug log. Issues without a debug log are likely to stall.
For information on how to collect a log file: https://joplinapp.org/debugging/
-->

View File

@@ -0,0 +1,33 @@
---
name: Feature request
about: Suggest a feature for Joplin.
title: '[Feature request] '
labels: 'feature request'
---
<!--
Please search open issues first - many features have already been requested!
-->
## Has it been discussed in the forum? Link to topic.
<!--
Feature requests should be discussed in the forum first. https://discourse.joplinapp.org
Please provide a link to the topic.
-->
## Is your feature request related to a problem? Please describe.
<!-- A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] -->
## Describe the solution you'd like
<!-- A clear and concise description of what you want to happen. -->
## Describe alternatives you've considered
<!-- A clear and concise description of any alternative solutions or features you've considered. -->
## Additional context
<!-- Add any other context or screenshots about the feature request here. -->

29
.github/ISSUE_TEMPLATE/question.md vendored Normal file
View File

@@ -0,0 +1,29 @@
---
name: "🤔 Questions and Help"
about: The issue tracker is not for questions. Please ask questions on https://discourse.joplinapp.org/.
title: 'Question: '
labels: 'question'
---
🚨 The issue tracker is not for questions. 🚨
As it happens, support requests that are created as issues are likely to be closed. We want to make sure you are able to find the help you seek.
## Questions and Help
Please read the [documentation](https://joplinapp.org/) and [FAQ](https://joplinapp.org/faq/) first.
### https://discourse.joplinapp.org/
If you have still questions related to Joplin, please open a topic in the [forum](https://discourse.joplinapp.org/).
You can use your GitHub credentials to login to the forum.
## Links
- Documentation: https://joplinapp.org
- FAQ: https://joplinapp.org/faq/
- Forum: https://discourse.joplinapp.org
- How to enable end-to-end encryption: https://joplinapp.org/e2ee/
- API documentation: https://joplinapp.org/api/
- How to enable debug mode: https://joplinapp.org/debugging/

25
.github/stale.yml vendored Normal file
View File

@@ -0,0 +1,25 @@
# Configuration for probot-stale - https://github.com/probot/stale
# Number of days of inactivity before an issue becomes stale
daysUntilStale: 90
# Number of days of inactivity before a stale issue is closed
daysUntilClose: 7
# Issues with these labels will never be considered stale
exemptLabels:
- "good first issue"
- "essential"
- "essential-reviewed"
- "help wanted"
- "nice to have"
- "upstream"
- "backlog"
# Label to use when marking an issue as stale
staleLabel: stale
# Comment to post when marking an issue as stale. Set to `false` to disable
markComment: >
Hey there, it looks like there has been no activity on this issue recently. Has the issue been fixed, or does it still require the community's attention? This issue may be closed if no further activity occurs.
You may also label this issue as "backlog" and I will leave it open.
Thank you for your contributions.
# Comment to post when closing a stale issue. Set to `false` to disable
closeComment: >
Closing this issue after a prolonged period of inactivity. If this issue is still present in the latest release, please feel free to create a new issue with up-to-date information.
only: issues

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

Binary file not shown.

Before

Width:  |  Height:  |  Size: 986 B

BIN
Assets/AdresseSupport.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 335 KiB

After

Width:  |  Height:  |  Size: 336 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 254 KiB

After

Width:  |  Height:  |  Size: 244 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 249 KiB

View File

@@ -1,7 +1,8 @@
[![Travis Build Status](https://travis-ci.org/laurent22/joplin.svg?branch=master)](https://travis-ci.org/laurent22/joplin) [![Appveyor Build Status](https://ci.appveyor.com/api/projects/status/github/laurent22/joplin?branch=master&passingText=master%20-%20OK&svg=true)](https://ci.appveyor.com/project/laurent22/joplin)
# General information
- All the applications share the same library, which, for historical reasons, is in ReactNativeClient/lib. This library is copied to the relevant directories when building each app.
- The translations are built by running CliClient/build-translation.sh. You normally don't need to run this if you haven't updated the translation since the compiled files are on the repository.
## macOS dependencies
@@ -58,6 +59,8 @@ If node-gyp does not works (MSBUILD: error MSB3428: Could not load the Visual C+
If `yarn dist` fails, it may need administrative rights.
If you get an `error MSB8020: The build tools for v140 cannot be found.` try to run with a different toolset version, eg `npm install --toolset=v141` (See [here](https://github.com/mapbox/node-sqlite3/issues/1124) for more info).
The [building\_win32\_tips on this page](./readme/building_win32_tips.md) might be helpful.
# Building the Mobile application

View File

@@ -1,34 +1,63 @@
**IMPORTANT:** At the moment pull requests for new features are no longer being accepted. More info there: https://github.com/laurent22/joplin/issues/1112
* * *
# User support
For general discussion about Joplin, user support, software development questions, and to discuss new features, please go to the [Joplin Forum](https://discourse.joplin.cozic.net/). It is possible to login with your GitHub account.
The [Joplin Forum](https://discourse.joplinapp.org/) is the community driven place for user support, general discussion about Joplin, problems with installation, new features and software development questions. It is possible to login with your GitHub account. Don't use the issue tracker for support questions.
# Reporting a bug
Please check first that it [has not already been reported](https://github.com/laurent22/joplin/issues?utf8=%E2%9C%93&q=is%3Aissue). Also consider [enabling debug mode](https://github.com/laurent22/joplin/blob/master/readme/debugging.md) before reporting the issue so that you can provide as much details as possible to help fix it.
File bugs in the [Github Issue Tracker](https://github.com/laurent22/joplin/issues?utf8=%E2%9C%93&q=is%3Aissue). Please follow these guidelines:
If possible, **please provide a screenshot**. A screenshot showing the problem is often more useful than a paragraph describing it as it can make it immediately clear what the issue is.
- Search existing issues first, make sure yours hasn't already been reported.
- Consider [enabling debug mode](https://joplinapp.org/debugging/) so that you can provide as much details as possible when reporting the issue.
- Stay on topic, but describe the issue in detail so that others can reproduce it.
- **Provide a screenshot** if possible. A screenshot showing the problem is often more useful than a paragraph describing it.
- For web clipper bugs, **please provide the URL causing the issue**. Sometimes the clipper works in one page but not in another so it is important to know what URL has a problem.
# Feature requests
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.
Please check that your request has not already been posted in the [Github Issue Tracker](https://github.com/laurent22/joplin/issues?utf8=%E2%9C%93&q=is%3Aissue). If it has, **up-voting the issue** increases the chances it'll be noticed and implemented in the future. "+1" comments are not tracked.
# Creating a pull request
As a general rule, suggestions to *improve Joplin* should be posted first in the [Joplin Forum](https://discourse.joplinapp.org/) for discussion.
- 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.
Avoid listing multiple requests in one report in the [Github Issue Tracker](https://github.com/laurent22/joplin/issues?utf8=%E2%9C%93&q=is%3Aissue). One issue per request makes it easier to track and discuss it.
- Bug fixes have a very high change of being accepted.
Finally, when submitting a pull request, don't forget to [test your code](#unit-tests).
- A pull request that is relevant to the current roadmap has a very high change of being accepted.
# Contribute to the project
## Contributing to Joplin's translation
Joplin is available in multiple languages thanks to the help of its users. You can help translate Joplin to your language or keep it up to date. Please read the documentation about [Localisation](https://joplinapp.org/#localisation).
## Contributing to Joplin's code
If you want to start contributing to the project's code, please follow these guidelines before creating a pull request:
- Bug fixes are always welcome. Start by reviewing the list of [essential issues](https://github.com/laurent22/joplin/issues?q=is%3Aissue+is%3Aopen+label%3Aessential)
- Before adding a new feature, ask about it in the [Github Issue Tracker](https://github.com/laurent22/joplin/issues?utf8=%E2%9C%93&q=is%3Aissue) or the [Joplin Forum](https://discourse.joplinapp.org/), or check if existing discussions exist to make sure the new functionality is desired.
- **Changes that will consist in more than 50 lines of code should be discussed the [Joplin Forum](https://discourse.joplinapp.org/)**, so that you don't spend too much time implementing something that might not be accepted.
Building the apps is relatively easy - please [see the build instructions](https://github.com/laurent22/joplin/blob/master/BUILD.md) for more details.
# Coding style
## 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):
- **Please use tabs, NOT spaces.**
- **Please do not add or remove optional characters, such as spaces or colons.** Please setup your editor so that it only changes what you are working on and is not making automated changes elsewhere. The reason for this is that small white space changes make diff hard to read and can cause needless conflicts.
## Unit tests
When submitting a pull request for a new feature or bug fix, please add unit tests for your code. Unit testing GUI changes is not always possible so it is not required, but any change in a file under /lib for example should be unit tested.
The tests are under CliClient/tests. To get them running, you first need to build the CLI app:
cd CliClient
npm i
Then to run all the test units:
./run_test.sh
To run just one particular file:
./run_test.sh markdownUtils # Don't add the .js extension

View File

@@ -23,6 +23,7 @@ const fs = require('fs-extra');
const { cliUtils } = require('./cli-utils.js');
const Cache = require('lib/Cache');
const WelcomeUtils = require('lib/WelcomeUtils');
const RevisionService = require('lib/services/RevisionService');
class Application extends BaseApplication {
@@ -377,8 +378,6 @@ 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) {
@@ -422,6 +421,8 @@ class Application extends BaseApplication {
const tags = await Tag.allWithNotes();
ResourceService.runInBackground();
RevisionService.instance().runInBackground();
this.dispatch({
type: 'TAG_UPDATE_ALL',

View File

@@ -102,7 +102,7 @@ function getFooter() {
output.push('WEBSITE');
output.push('');
output.push(INDENT + 'https://joplin.cozic.net');
output.push(INDENT + 'https://joplinapp.org');
output.push('');

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://joplinapp.org/#searching');
lines.push('');
for (let i = 0; i < models.length; i++) {
const model = models[i];
const ModelClass = BaseItem.getClassByItemType(model.type);

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) {
@@ -59,14 +76,8 @@ class Command extends BaseCommand {
break;
} 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();
const ok = await askForMasterKey(error);
if (!ok) return;
continue;
}
@@ -85,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');

View File

@@ -37,7 +37,7 @@ class Command extends BaseCommand {
const stdoutWidth = app().commandStdoutMaxWidth();
if (args.command === 'shortcuts' || args.command === 'keymap') {
this.stdout(_('For information on how to customise the shortcuts please visit %s', 'https://joplin.cozic.net/terminal/#shortcuts'));
this.stdout(_('For information on how to customise the shortcuts please visit %s', 'https://joplinapp.org/terminal/#shortcuts'));
this.stdout('');
if (app().gui().isDummy()) {

View File

@@ -22,6 +22,7 @@ const Tag = require('lib/models/Tag.js');
const NoteTag = require('lib/models/NoteTag.js');
const MasterKey = require('lib/models/MasterKey');
const Setting = require('lib/models/Setting.js');
const Revision = require('lib/models/Revision.js');
const { Logger } = require('lib/logger.js');
const { FsDriverNode } = require('lib/fs-driver-node.js');
const { shimInit } = require('lib/shim-init-node.js');
@@ -43,6 +44,7 @@ BaseItem.loadClass('Resource', Resource);
BaseItem.loadClass('Tag', Tag);
BaseItem.loadClass('NoteTag', NoteTag);
BaseItem.loadClass('MasterKey', MasterKey);
BaseItem.loadClass('Revision', Revision);
Setting.setConstant('appId', 'net.cozic.joplin-cli');
Setting.setConstant('appType', 'cli');

2099
CliClient/locales/ar.po Normal file

File diff suppressed because it is too large Load Diff

2129
CliClient/locales/bg_BG.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»"
@@ -610,8 +611,8 @@ msgstr "S'està important des de «%s» com a format «%s». Espereu..."
msgid "PDF File"
msgstr "Fitxer PDF"
msgid "File"
msgstr "Fitxer"
msgid "Synchronisation status"
msgstr "Estat de la sincronització"
msgid "New note"
msgstr "Nota nova"
@@ -622,14 +623,66 @@ msgstr "Llistat de tasques pendents nou"
msgid "New notebook"
msgstr "Bloc de notes nou"
msgid "Print"
msgstr "Imprimeix"
msgid "General Options"
msgstr "Opcions generals"
msgid "Encryption options"
msgstr "Opcions del xifratge"
msgid "Web clipper options"
msgstr "Opcions del desa-retalls de webs"
msgid "Create note from template"
msgstr ""
msgid "Create to-do from template"
msgstr ""
msgid "Insert template"
msgstr ""
#, fuzzy
msgid "Open template directory"
msgstr "Directori d'exportació del Joplin"
msgid "Refresh templates"
msgstr ""
#, fuzzy, javascript-format
msgid "Revision: %s (%s)"
msgstr "%s %s (%s)"
#, javascript-format
msgid "%s %s (%s, %s)"
msgstr "%s %s (%s, %s)"
#, fuzzy
msgid "&File"
msgstr "Fitxer"
msgid "About Joplin"
msgstr "Quant al Joplin"
msgid "Preferences..."
msgstr ""
msgid "Check for updates..."
msgstr "Comprova les actualitzacions..."
msgid "Templates"
msgstr ""
msgid "Import"
msgstr "Importació"
msgid "Export"
msgstr "Exportació"
msgid "Print"
msgstr "Imprimeix"
msgid "Synchronise"
msgstr "Sincronitza"
#, javascript-format
msgid "Hide %s"
@@ -638,7 +691,11 @@ msgstr "Amaga %s"
msgid "Quit"
msgstr "Surt"
msgid "Edit"
msgid "Close Window"
msgstr ""
#, fuzzy
msgid "&Edit"
msgstr "Edita"
msgid "Copy"
@@ -663,12 +720,18 @@ msgstr ""
msgid "Link"
msgstr ""
msgid "Code"
msgstr ""
msgid "Insert Date Time"
msgstr ""
msgid "Edit in external editor"
msgstr ""
msgid "Tags"
msgstr "Etiquetes"
msgid "Search in all the notes"
msgstr "Cerca a totes les notes"
@@ -676,7 +739,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"
@@ -689,22 +753,12 @@ msgstr "Canvia el disseny de l'editor"
msgid "Focus"
msgstr "Vés al cos"
msgid "Tools"
#, fuzzy
msgid "&Tools"
msgstr "Eines"
msgid "Synchronisation status"
msgstr "Estat de la sincronització"
msgid "Web clipper options"
msgstr "Opcions del desa-retalls de webs"
msgid "Encryption options"
msgstr "Opcions del xifratge"
msgid "General Options"
msgstr "Opcions generals"
msgid "Help"
#, fuzzy
msgid "&Help"
msgstr "Ajuda"
msgid "Website and documentation"
@@ -713,15 +767,8 @@ msgstr "Lloc web i documentació"
msgid "Make a donation"
msgstr "Donatius"
msgid "Check for updates..."
msgstr "Comprova les actualitzacions..."
msgid "About Joplin"
msgstr "Quant al Joplin"
#, javascript-format
msgid "%s %s (%s, %s)"
msgstr "%s %s (%s, %s)"
msgid "Toggle development tools"
msgstr ""
#, javascript-format
msgid "Open %s"
@@ -747,11 +794,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"
@@ -832,12 +879,12 @@ msgstr ""
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 "Browse..."
msgstr ""
msgid "Apply"
msgstr ""
@@ -956,9 +1003,6 @@ msgstr "Títol del bloc de notes:"
msgid "Add or remove tags:"
msgstr "Afegeix o suprimeix etiquetes:"
msgid "Separate each tag by a comma."
msgstr "Separeu les etiquetes amb comes."
msgid "Rename notebook:"
msgstr "Canvia el nom del bloc de notes:"
@@ -980,8 +1024,9 @@ msgstr "Alguns elements no s'han pogut sincronitzar."
msgid "View them now"
msgstr "Mostra'ls ara"
msgid "Some items cannot be decrypted."
msgstr "Alguns elements no s'han pogut desxifrar."
#, fuzzy
msgid "One or more master keys need a password."
msgstr "Introduïu una contrasenya mestra:"
msgid "Set the password"
msgstr "Establiu la contrasenya"
@@ -1001,9 +1046,33 @@ msgstr ""
msgid "URL"
msgstr ""
#, fuzzy
msgid "Note History"
msgstr "Blocs de notes"
msgid "Previous versions of this note"
msgstr ""
msgid "Note properties"
msgstr ""
#, javascript-format
msgid "The note \"%s\" has been successfully restored to the notebook \"%s\"."
msgstr ""
#, fuzzy
msgid "This note has no history"
msgstr "Aquesta nota s'ha modificat:"
msgid "Restore"
msgstr ""
#, javascript-format
msgid ""
"Click \"%s\" to restore the note. It will be copied in the notebook named "
"\"%s\". The current version of the note will not be replaced or modified."
msgstr ""
msgid "Open..."
msgstr "Obre..."
@@ -1053,9 +1122,6 @@ msgstr ""
msgid "Attach file"
msgstr "Adjunta un fitxer"
msgid "Tags"
msgstr "Etiquetes"
msgid "Set alarm"
msgstr "Estableix una alarma"
@@ -1066,9 +1132,6 @@ msgstr "A: %s"
msgid "Hyperlink"
msgstr ""
msgid "Code"
msgstr ""
msgid "Numbered List"
msgstr ""
@@ -1125,7 +1188,17 @@ 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?"
@@ -1137,23 +1210,23 @@ msgstr "Suprimeix"
msgid "Rename"
msgstr "Canvia el nom"
msgid "Synchronise"
msgstr "Sincronitza"
msgid "Notebooks"
msgstr "Blocs de notes"
#, fuzzy, javascript-format
msgid "Decrypting items: %d/%d"
msgstr "Elements obtinguts: %d/%d."
msgstr "Elements obtinguts: %d/%d"
#, fuzzy, javascript-format
msgid "Fetching resources: %d"
msgstr "Recursos: %d."
msgid "Fetching resources: %d/%d"
msgstr "Recursos: %d/%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 "Retry"
msgstr ""
msgid "Add or remove tags"
msgstr "Afegeix o suprimeix etiquetes"
@@ -1187,6 +1260,14 @@ msgstr "Voleu suprimir les notes?"
msgid "Delete these %d notes?"
msgstr "Voleu suprimir aquestes notes?"
msgid ""
"Type a note title to jump to it. Or type # followed by a tag name, or @ "
"followed by a notebook name."
msgstr ""
msgid "Goto Anything..."
msgstr ""
#, javascript-format
msgid "Usage: %s"
msgstr "Ús: %s"
@@ -1299,12 +1380,22 @@ msgstr "En progés"
msgid "Synchronisation is already in progress. State: %s"
msgstr "La sincronització ja és en procés. Estat: %s"
msgid ""
"Unknown item type downloaded - please upgrade Joplin to the latest version"
msgstr ""
msgid "Encrypted"
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"
@@ -1315,12 +1406,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ó"
@@ -1335,6 +1420,65 @@ msgstr "No es pot copiar la nota al bloc de notes «%s»"
msgid "Cannot move note to \"%s\" notebook"
msgstr "No es pot moure la nota al bloc de notes «%s»"
#, javascript-format
msgid ""
"Attention: If you change this location, make sure you copy all your content "
"to it before syncing, otherwise all files will be removed! See the FAQ for "
"more details: %s"
msgstr ""
msgid "Synchronisation target"
msgstr "Objectiu de sincronització"
msgid ""
"The target to synchonise to. Each sync target may have additional parameters "
"which are named as `sync.NUM.NAME` (all documented below)."
msgstr ""
"L'objectiu on se sincronitzarà. Cada objectiu pot tenir paràmetres "
"addicionals que s'anomenen com a «sync.NUM.NAME» (es documenten a sota)."
msgid "Directory to synchronise with (absolute path)"
msgstr "Directori on es farà la sincronització (camí absolut)"
msgid "Nextcloud WebDAV URL"
msgstr "URL del Nextcloud WebDAV"
msgid "Nextcloud username"
msgstr "Nom d'usuari del Nextcloud"
msgid "Nextcloud password"
msgstr "Contrasenya del Nextcloud"
msgid "WebDAV URL"
msgstr "URL de WebDAV"
msgid "WebDAV username"
msgstr "Nom d'usuari WebDAV"
msgid "WebDAV password"
msgstr "Contrasenya de WebDAV"
msgid "Attachment download behaviour"
msgstr ""
msgid ""
"In \"Manual\" mode, attachments are downloaded only when you click on them. "
"In \"Auto\", they are downloaded when you open the note. In \"Always\", all "
"the attachments are downloaded whether you open the note or not."
msgstr ""
msgid "Always"
msgstr ""
msgid "Manual"
msgstr ""
msgid "Auto"
msgstr ""
msgid "Max concurrent connections"
msgstr ""
msgid "Language"
msgstr "Llengua"
@@ -1365,6 +1509,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"
@@ -1380,6 +1528,43 @@ msgstr "Vés al cos"
msgid "When creating a new note:"
msgstr "En crear una nota:"
msgid "Enable soft breaks"
msgstr ""
#, fuzzy
msgid "Enable math expressions"
msgstr "Activa el xifratge"
msgid "Enable ==mark== syntax"
msgstr ""
msgid "Enable footnotes"
msgstr ""
msgid "Enable table of contents extension"
msgstr ""
msgid "Enable ~sub~ syntax"
msgstr ""
msgid "Enable ^sup^ syntax"
msgstr ""
msgid "Enable deflist syntax"
msgstr ""
msgid "Enable abbreviation syntax"
msgstr ""
msgid "Enable markdown emoji"
msgstr ""
msgid "Enable ++insert++ syntax"
msgstr ""
msgid "Enable multimarkdown table extension"
msgstr ""
msgid "Show tray icon"
msgstr "Mostra la icona a la safata"
@@ -1450,54 +1635,6 @@ msgstr ""
"L'editor que s'usarà per a obrir una nota. Si no s'indica cap, intentarà "
"detectar automàticament l'editor predeterminat."
msgid "Show advanced options"
msgstr "Mostra les opcions avançades"
msgid "Synchronisation target"
msgstr "Objectiu de sincronització"
msgid ""
"The target to synchonise to. Each sync target may have additional parameters "
"which are named as `sync.NUM.NAME` (all documented below)."
msgstr ""
"L'objectiu on se sincronitzarà. Cada objectiu pot tenir paràmetres "
"addicionals que s'anomenen com a «sync.NUM.NAME» (es documenten a sota)."
msgid "Directory to synchronise with (absolute path)"
msgstr "Directori on es farà la sincronització (camí absolut)"
msgid ""
"The path to synchronise with when file system synchronisation is enabled. "
"See `sync.target`."
msgstr ""
"El camí on sincronitzar en activar la sincronització del sistema. Vegeu "
"«sync.target»."
msgid "Nextcloud WebDAV URL"
msgstr "URL del Nextcloud WebDAV"
#, javascript-format
msgid ""
"Attention: If you change this location, make sure you copy all your content "
"to it before syncing, otherwise all files will be removed! See the FAQ for "
"more details: %s"
msgstr ""
msgid "Nextcloud username"
msgstr "Nom d'usuari del Nextcloud"
msgid "Nextcloud password"
msgstr "Contrasenya del Nextcloud"
msgid "WebDAV URL"
msgstr "URL de WebDAV"
msgid "WebDAV username"
msgstr "Nom d'usuari WebDAV"
msgid "WebDAV password"
msgstr "Contrasenya de WebDAV"
msgid "Custom TLS certificates"
msgstr ""
@@ -1511,6 +1648,20 @@ msgstr ""
msgid "Ignore TLS certificate errors"
msgstr ""
#, fuzzy
msgid "Enable note history"
msgstr "Activa el xifratge"
msgid "days"
msgstr ""
#, javascript-format
msgid "%d days"
msgstr ""
msgid "Keep note history for"
msgstr ""
#, javascript-format
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."
@@ -1530,6 +1681,9 @@ msgstr ""
msgid "Note"
msgstr "Blocs de notes"
msgid "Plugins"
msgstr ""
#, fuzzy
msgid "Application"
msgstr "Surt de l'aplicació"
@@ -1554,6 +1708,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"
@@ -1579,13 +1736,12 @@ msgstr "No hi ha dades per exportar."
msgid "Please specify the notebook where the notes should be imported to."
msgstr "Indiqueu el bloc de notes on s'haurien d'importar les notes."
msgid "Restored Notes"
msgstr ""
msgid "Items that cannot be synchronised"
msgstr "Elements que no s'han pogut sincronitzar"
#, javascript-format
msgid "%s (%s): %s"
msgstr "%s (%s): %s"
msgid ""
"These items will remain on the device but will not be uploaded to the sync "
"target. In order to find these items, either search for the title or the ID "
@@ -1595,6 +1751,24 @@ msgstr ""
"destinació de sincronització. Per a poder trobar aquests elements, podeu "
"cercar pel títol o la ID (que es mostra entre claus a sobre)."
#, fuzzy, javascript-format
msgid "%s (%s) could not be uploaded: %s"
msgstr "No s'ha pogut desar el bloc de notes: %s"
#, fuzzy, javascript-format
msgid "Item \"%s\" could not be downloaded: %s"
msgstr "No s'ha pogut desar el bloc de notes: %s"
#, fuzzy
msgid "Items that cannot be decrypted"
msgstr "Elements que no s'han pogut sincronitzar"
msgid ""
"Joplin failed to decrypt these items multiple times, possibly because they "
"are corrupted or too large. These items will remain on the device but Joplin "
"will no longer attempt to decrypt them."
msgstr ""
msgid "Sync status (synced items / total items)"
msgstr "Estat de la sincronització (element sinc. / elements totals)"
@@ -1640,18 +1814,6 @@ msgstr "Ara mateix no hi ha cap nota. Creeu-ne una fent clic en el botó (+)."
msgid "Delete these notes?"
msgstr "Voleu suprimir aquestes notes?"
msgid "Log"
msgstr "Registre"
msgid "Export Debug Report"
msgstr "Exporta l'informe de depuració"
msgid "Encryption Config"
msgstr "Configuració del xifratge"
msgid "Configuration"
msgstr "Configuració"
msgid "Move to notebook..."
msgstr "Mou al bloc de notes..."
@@ -1675,8 +1837,24 @@ msgstr "Seleccioneu una data"
msgid "Confirm"
msgstr "Confirmació"
msgid "Cancel synchronisation"
msgstr "Cancel·la la sincronització"
#, fuzzy, javascript-format
msgid "Notebook: %s"
msgstr "Blocs de notes"
#, fuzzy
msgid "Encrypted notebooks cannot be renamed"
msgstr "Els elements xifrats no es poden modificar"
#, fuzzy
msgid "New Notebook"
msgstr "Bloc de notes nou"
msgid "Configuration"
msgstr "Configuració"
#, fuzzy
msgid "All notes"
msgstr "nota"
#, fuzzy
msgid "Checking... Please wait."
@@ -1714,6 +1892,54 @@ msgstr "Etiquetes noves:"
msgid "Type new tags or select from list"
msgstr "Escriviu etiquetes noves o seleccioneu-ne de la llista"
msgid "Warning"
msgstr ""
msgid ""
"In order to use file system synchronization your permission to write to "
"external storage is required."
msgstr ""
#, fuzzy
msgid "Information"
msgstr "Configuració"
msgid "Encryption Config"
msgstr "Configuració del xifratge"
#, fuzzy
msgid "Tools"
msgstr "Eines"
#, fuzzy
msgid "Sync Status"
msgstr "Estat"
msgid "Log"
msgstr "Registre"
#, fuzzy
msgid "Creating report..."
msgstr "S'està creant una %s..."
msgid "Export Debug Report"
msgstr "Exporta l'informe de depuració"
msgid "Fixing search index..."
msgstr ""
msgid "Fix search index"
msgstr ""
msgid ""
"Use this to rebuild the search index if there is a problem with search. It "
"may take some times depending on the number of notes."
msgstr ""
#, fuzzy
msgid "More information"
msgstr "Configuració"
msgid ""
"To work correctly, the app needs the following permissions. Please enable "
"them in your phone settings, in Apps > Joplin > Permissions"
@@ -1740,10 +1966,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 ""
@@ -1782,6 +2004,10 @@ msgstr "No s'ha pogut desar el bloc de notes: %s"
msgid "Edit notebook"
msgstr "Edita el bloc de notes"
#, fuzzy
msgid "Enter notebook title"
msgstr "Títol del bloc de notes:"
msgid "Show all"
msgstr "Mostra-ho tot"
@@ -1806,10 +2032,32 @@ msgid "The Joplin mobile app does not currently support this type of link: %s"
msgstr ""
"L'aplicació mòbil del Joplin, ara per ara, no admet aquest tipus d'enllaç: %s"
#, javascript-format
msgid "Links with protocol \"%s\" are not supported"
msgstr ""
#, javascript-format
msgid "Unsupported image type: %s"
msgstr "Tipus d'imatge no admesa: %s"
#, fuzzy, javascript-format
msgid "Updated: %s"
msgstr "Acualitzades: %d."
msgid "View on map"
msgstr "Mostra-ho al mapa"
msgid "Go to source URL"
msgstr ""
#, fuzzy
msgid "Attach..."
msgstr "Cerca..."
#, fuzzy
msgid "Choose an option"
msgstr "Mostra les opcions avançades"
#, fuzzy
msgid "Take photo"
msgstr "Adjunta una imatge"
@@ -1829,20 +2077,18 @@ msgstr "Converteix a nota"
msgid "Convert to todo"
msgstr "Converteix a llistat de tasques pendents"
msgid "Hide metadata"
msgstr "Amaga les metadades"
msgid "Show metadata"
msgstr "Mostra les metadades"
msgid "View on map"
msgstr "Mostra-ho al mapa"
msgid "Go to source URL"
msgid "Properties"
msgstr ""
msgid "Delete notebook"
msgstr "Suprimeix el bloc de notes"
msgid "Add body"
msgstr ""
msgid "Edit"
msgstr "Edita"
#, fuzzy
msgid "Add title"
msgstr "títol"
msgid "Login with OneDrive"
msgstr "Inicia sessió amb OneDrive"
@@ -1850,19 +2096,52 @@ msgstr "Inicia sessió amb OneDrive"
msgid "Search"
msgstr "Cerca"
msgid ""
"Click on the (+) button to create a new note or notebook. Click on the side "
"menu to access your existing notebooks."
msgstr ""
"Feu clic en el botó (+) per a crear una nota o bloc de notes. Feu clic en el "
"menú lateral per a accedir als blocs de notes existents."
#~ msgid "Cancel synchronisation"
#~ msgstr "Cancel·la la sincronització"
msgid "You currently have no notebook. Create one by clicking on (+) button."
msgstr ""
"Ara mateix no teniu cap bloc de notes. Creeu-ne un fent clic al botó (+)."
#~ msgid "Hide metadata"
#~ msgstr "Amaga les metadades"
msgid "Welcome"
msgstr "Benvingut"
#~ msgid "Show metadata"
#~ msgstr "Mostra les metadades"
#~ msgid "Delete notebook"
#~ msgstr "Suprimeix el bloc de notes"
#~ msgid ""
#~ "Click on the (+) button to create a new note or notebook. Click on the "
#~ "side menu to access your existing notebooks."
#~ msgstr ""
#~ "Feu clic en el botó (+) per a crear una nota o bloc de notes. Feu clic en "
#~ "el menú lateral per a accedir als blocs de notes existents."
#~ msgid ""
#~ "You currently have no notebook. Create one by clicking on (+) button."
#~ msgstr ""
#~ "Ara mateix no teniu cap bloc de notes. Creeu-ne un fent clic al botó (+)."
#~ msgid "Welcome"
#~ msgstr "Benvingut"
#~ msgid "Separate each tag by a comma."
#~ msgstr "Separeu les etiquetes amb comes."
#~ msgid "Some items cannot be decrypted."
#~ msgstr "Alguns elements no s'han pogut desxifrar."
#~ msgid "%s (%s): %s"
#~ msgstr "%s (%s): %s"
#~ msgid ""
#~ "The path to synchronise with when file system synchronisation is enabled. "
#~ "See `sync.target`."
#~ msgstr ""
#~ "El camí on sincronitzar en activar la sincronització del sistema. Vegeu "
#~ "«sync.target»."
#, fuzzy
#~ msgid "Joplin v%s"
#~ msgstr "Lloc web del Joplin"
#~ msgid "State: %s."
#~ msgstr "Estat: %s"

File diff suppressed because it is too large Load Diff

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-"
@@ -597,8 +598,8 @@ msgstr "Importerer fra \"%s\" som \"%s\"-format. Vent venligst..."
msgid "PDF File"
msgstr "PDF fil"
msgid "File"
msgstr "Fil"
msgid "Synchronisation status"
msgstr "Synkroniserings status"
msgid "New note"
msgstr "Ny note"
@@ -609,14 +610,66 @@ msgstr "Ny opgave"
msgid "New notebook"
msgstr "Ny notesbog"
msgid "Print"
msgstr "Udskriv"
msgid "General Options"
msgstr "Generelle indstillinger"
msgid "Encryption options"
msgstr "Krypterings muligheder"
msgid "Web clipper options"
msgstr ""
msgid "Create note from template"
msgstr ""
msgid "Create to-do from template"
msgstr ""
msgid "Insert template"
msgstr ""
#, fuzzy
msgid "Open template directory"
msgstr "Joplin eksport mappe"
msgid "Refresh templates"
msgstr ""
#, fuzzy, javascript-format
msgid "Revision: %s (%s)"
msgstr "%s %s (%s)"
#, javascript-format
msgid "%s %s (%s, %s)"
msgstr "%s %s (%s, %s)"
#, fuzzy
msgid "&File"
msgstr "Fil"
msgid "About Joplin"
msgstr "Om Joplin"
msgid "Preferences..."
msgstr ""
msgid "Check for updates..."
msgstr "Checker om der er opdateringer.."
msgid "Templates"
msgstr ""
msgid "Import"
msgstr "Importer"
msgid "Export"
msgstr "Eksporter"
msgid "Print"
msgstr "Udskriv"
msgid "Synchronise"
msgstr "Synkroniser"
#, javascript-format
msgid "Hide %s"
@@ -625,7 +678,11 @@ msgstr "Skjul %s"
msgid "Quit"
msgstr "Afslut"
msgid "Edit"
msgid "Close Window"
msgstr ""
#, fuzzy
msgid "&Edit"
msgstr "Ret"
msgid "Copy"
@@ -650,12 +707,18 @@ msgstr ""
msgid "Link"
msgstr ""
msgid "Code"
msgstr ""
msgid "Insert Date Time"
msgstr ""
msgid "Edit in external editor"
msgstr ""
msgid "Tags"
msgstr "Mærker"
msgid "Search in all the notes"
msgstr "Søg i alle noter"
@@ -663,7 +726,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"
@@ -676,22 +740,12 @@ msgstr "Skift editor layout"
msgid "Focus"
msgstr "Fokuser på brødtekst"
msgid "Tools"
#, fuzzy
msgid "&Tools"
msgstr "Værktøjer"
msgid "Synchronisation status"
msgstr "Synkroniserings status"
msgid "Web clipper options"
msgstr ""
msgid "Encryption options"
msgstr "Krypterings muligheder"
msgid "General Options"
msgstr "Generelle indstillinger"
msgid "Help"
#, fuzzy
msgid "&Help"
msgstr "Hjælp"
msgid "Website and documentation"
@@ -700,15 +754,8 @@ msgstr "Joplins hjemmeside og dokumentation"
msgid "Make a donation"
msgstr "Giv en donation"
msgid "Check for updates..."
msgstr "Checker om der er opdateringer.."
msgid "About Joplin"
msgstr "Om Joplin"
#, javascript-format
msgid "%s %s (%s, %s)"
msgstr "%s %s (%s, %s)"
msgid "Toggle development tools"
msgstr ""
#, javascript-format
msgid "Open %s"
@@ -734,11 +781,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"
@@ -812,12 +859,12 @@ msgstr ""
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 "Browse..."
msgstr ""
msgid "Apply"
msgstr ""
@@ -935,9 +982,6 @@ msgstr "Notesbogs titel:"
msgid "Add or remove tags:"
msgstr "Tilføj eller slet mærker:"
msgid "Separate each tag by a comma."
msgstr "Adskil hver mærke med komma."
msgid "Rename notebook:"
msgstr "Omdøb notesbog:"
@@ -961,8 +1005,9 @@ msgstr "Nogle emner kan ikke synkroniseres."
msgid "View them now"
msgstr "Vis dem nu"
msgid "Some items cannot be decrypted."
msgstr "Nogle emner kan ikke krypteres."
#, fuzzy
msgid "One or more master keys need a password."
msgstr "Indtast Hoved kodeord:"
msgid "Set the password"
msgstr "Indstil kodeord"
@@ -980,9 +1025,33 @@ msgstr ""
msgid "URL"
msgstr ""
#, fuzzy
msgid "Note History"
msgstr "Notesbøger"
msgid "Previous versions of this note"
msgstr ""
msgid "Note properties"
msgstr ""
#, javascript-format
msgid "The note \"%s\" has been successfully restored to the notebook \"%s\"."
msgstr ""
#, fuzzy
msgid "This note has no history"
msgstr "Denne note er ændret:"
msgid "Restore"
msgstr ""
#, javascript-format
msgid ""
"Click \"%s\" to restore the note. It will be copied in the notebook named "
"\"%s\". The current version of the note will not be replaced or modified."
msgstr ""
msgid "Open..."
msgstr "Åben..."
@@ -1030,9 +1099,6 @@ msgstr ""
msgid "Attach file"
msgstr "Vedhæft fil"
msgid "Tags"
msgstr "Mærker"
msgid "Set alarm"
msgstr "Indstil alarm"
@@ -1043,9 +1109,6 @@ msgstr "%s: %s"
msgid "Hyperlink"
msgstr ""
msgid "Code"
msgstr ""
msgid "Numbered List"
msgstr ""
@@ -1103,7 +1166,15 @@ 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?"
@@ -1115,23 +1186,23 @@ msgstr "Slet"
msgid "Rename"
msgstr "Omdøb"
msgid "Synchronise"
msgstr "Synkroniser"
msgid "Notebooks"
msgstr "Notesbøger"
#, fuzzy, javascript-format
msgid "Decrypting items: %d/%d"
msgstr "Hentede emner: %d/%d."
msgstr "Hentede emner: %d/%d"
#, fuzzy, javascript-format
msgid "Fetching resources: %d"
msgstr "Ressourcer: %d."
msgid "Fetching resources: %d/%d"
msgstr "Ressourcer: %d/%d"
msgid "Please select where the sync status should be exported to"
msgstr "Vælg hvor sync status skal eksporteres til"
msgid "Retry"
msgstr ""
msgid "Add or remove tags"
msgstr "Tilføj eller slet mærker"
@@ -1166,6 +1237,14 @@ msgstr "Slet noter?"
msgid "Delete these %d notes?"
msgstr "Slet disse noter?"
msgid ""
"Type a note title to jump to it. Or type # followed by a tag name, or @ "
"followed by a notebook name."
msgstr ""
msgid "Goto Anything..."
msgstr ""
#, javascript-format
msgid "Usage: %s"
msgstr "Forbrug: %s"
@@ -1278,12 +1357,24 @@ msgstr "I gang"
msgid "Synchronisation is already in progress. State: %s"
msgstr "Synkronisering er allerede i gang: Tilstand: %s"
msgid ""
"Unknown item type downloaded - please upgrade Joplin to the latest version"
msgstr ""
msgid "Encrypted"
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"
@@ -1295,14 +1386,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."
@@ -1318,6 +1401,65 @@ msgstr "Kan ikke kopiere note til \"%s\" notesbog"
msgid "Cannot move note to \"%s\" notebook"
msgstr "Kan ikke flytte note til \"%s\" notesbog"
#, javascript-format
msgid ""
"Attention: If you change this location, make sure you copy all your content "
"to it before syncing, otherwise all files will be removed! See the FAQ for "
"more details: %s"
msgstr ""
msgid "Synchronisation target"
msgstr "Synkroniserings mål"
msgid ""
"The target to synchonise to. Each sync target may have additional parameters "
"which are named as `sync.NUM.NAME` (all documented below)."
msgstr ""
"Synkroniserings mål. Hver synk. mål kan have ekstra parametre som navngives "
"som `sync.NUM.NAME` (se dokumentation herunder)."
msgid "Directory to synchronise with (absolute path)"
msgstr "Mappe der skal synkroniseres med (absolut sti)"
msgid "Nextcloud WebDAV URL"
msgstr "Nextcloud WebDAV URL"
msgid "Nextcloud username"
msgstr "Nextcloud brugernavn"
msgid "Nextcloud password"
msgstr "Nextcloud kodeord"
msgid "WebDAV URL"
msgstr "WebDAV URL"
msgid "WebDAV username"
msgstr "WebDAV brugernavn"
msgid "WebDAV password"
msgstr "WebDAV kodeord"
msgid "Attachment download behaviour"
msgstr ""
msgid ""
"In \"Manual\" mode, attachments are downloaded only when you click on them. "
"In \"Auto\", they are downloaded when you open the note. In \"Always\", all "
"the attachments are downloaded whether you open the note or not."
msgstr ""
msgid "Always"
msgstr ""
msgid "Manual"
msgstr ""
msgid "Auto"
msgstr ""
msgid "Max concurrent connections"
msgstr ""
msgid "Language"
msgstr "Sprog"
@@ -1349,6 +1491,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"
@@ -1364,6 +1510,43 @@ msgstr "Fokuser på brødtekst"
msgid "When creating a new note:"
msgstr "Ved oprettelse af ny note:"
msgid "Enable soft breaks"
msgstr ""
#, fuzzy
msgid "Enable math expressions"
msgstr "Start kryptering"
msgid "Enable ==mark== syntax"
msgstr ""
msgid "Enable footnotes"
msgstr ""
msgid "Enable table of contents extension"
msgstr ""
msgid "Enable ~sub~ syntax"
msgstr ""
msgid "Enable ^sup^ syntax"
msgstr ""
msgid "Enable deflist syntax"
msgstr ""
msgid "Enable abbreviation syntax"
msgstr ""
msgid "Enable markdown emoji"
msgstr ""
msgid "Enable ++insert++ syntax"
msgstr ""
msgid "Enable multimarkdown table extension"
msgstr ""
msgid "Show tray icon"
msgstr "Vis ikon på bundbjælke"
@@ -1434,54 +1617,6 @@ msgstr ""
"Editor der bruges til at åbne note. Hvis ingen valgt/udfyldt, vil auto-"
"funktion søge efter standard editor."
msgid "Show advanced options"
msgstr "Vis avancerede indstillinger"
msgid "Synchronisation target"
msgstr "Synkroniserings mål"
msgid ""
"The target to synchonise to. Each sync target may have additional parameters "
"which are named as `sync.NUM.NAME` (all documented below)."
msgstr ""
"Synkroniserings mål. Hver synk. mål kan have ekstra parametre som navngives "
"som `sync.NUM.NAME` (se dokumentation herunder)."
msgid "Directory to synchronise with (absolute path)"
msgstr "Mappe der skal synkroniseres med (absolut sti)"
msgid ""
"The path to synchronise with when file system synchronisation is enabled. "
"See `sync.target`."
msgstr ""
"Sti til synkronisering, når filsystem synkronisering er slået til. Se `sync."
"target`."
msgid "Nextcloud WebDAV URL"
msgstr "Nextcloud WebDAV URL"
#, javascript-format
msgid ""
"Attention: If you change this location, make sure you copy all your content "
"to it before syncing, otherwise all files will be removed! See the FAQ for "
"more details: %s"
msgstr ""
msgid "Nextcloud username"
msgstr "Nextcloud brugernavn"
msgid "Nextcloud password"
msgstr "Nextcloud kodeord"
msgid "WebDAV URL"
msgstr "WebDAV URL"
msgid "WebDAV username"
msgstr "WebDAV brugernavn"
msgid "WebDAV password"
msgstr "WebDAV kodeord"
msgid "Custom TLS certificates"
msgstr ""
@@ -1495,6 +1630,20 @@ msgstr ""
msgid "Ignore TLS certificate errors"
msgstr ""
#, fuzzy
msgid "Enable note history"
msgstr "Start kryptering"
msgid "days"
msgstr ""
#, javascript-format
msgid "%d days"
msgstr ""
msgid "Keep note history for"
msgstr ""
#, javascript-format
msgid "Invalid option value: \"%s\". Possible values are: %s."
msgstr "Ulovlig værdi: \"%s\". Mulige valg er: %s."
@@ -1514,6 +1663,9 @@ msgstr ""
msgid "Note"
msgstr "Notesbøger"
msgid "Plugins"
msgstr ""
#, fuzzy
msgid "Application"
msgstr "Forlad/luk program."
@@ -1538,6 +1690,9 @@ msgstr "Evernote eksport fil"
msgid "Json Export Directory"
msgstr "Joplin eksport mappe"
msgid "File"
msgstr "Fil"
msgid "Directory"
msgstr "Indeks"
@@ -1563,13 +1718,12 @@ msgstr "Der er ingen data at eksportere."
msgid "Please specify the notebook where the notes should be imported to."
msgstr "Angiv hvilken notesbog, noter skal importeres til."
msgid "Restored Notes"
msgstr ""
msgid "Items that cannot be synchronised"
msgstr "Emner kan ikke synkroniseres"
#, javascript-format
msgid "%s (%s): %s"
msgstr "%s (%s): %s"
msgid ""
"These items will remain on the device but will not be uploaded to the sync "
"target. In order to find these items, either search for the title or the ID "
@@ -1579,6 +1733,24 @@ msgstr ""
"For at finde disse emner; enten søg efter titel eller ID (som er vist i "
"klammer herover)"
#, fuzzy, javascript-format
msgid "%s (%s) could not be uploaded: %s"
msgstr "Notesbogen kan ikke gemmes: %s"
#, fuzzy, javascript-format
msgid "Item \"%s\" could not be downloaded: %s"
msgstr "Notesbogen kan ikke gemmes: %s"
#, fuzzy
msgid "Items that cannot be decrypted"
msgstr "Emner kan ikke synkroniseres"
msgid ""
"Joplin failed to decrypt these items multiple times, possibly because they "
"are corrupted or too large. These items will remain on the device but Joplin "
"will no longer attempt to decrypt them."
msgstr ""
msgid "Sync status (synced items / total items)"
msgstr "Synk status (synk' emner / emner i alt)"
@@ -1624,18 +1796,6 @@ msgstr "Der er ingen noter. Opret note ved at klikke på (+) knappen."
msgid "Delete these notes?"
msgstr "Slet disse noter?"
msgid "Log"
msgstr "Log"
msgid "Export Debug Report"
msgstr "Eksporter undersøgelses rapport"
msgid "Encryption Config"
msgstr "Krypterings indstillinger"
msgid "Configuration"
msgstr "Indstillinger"
msgid "Move to notebook..."
msgstr "Flyt til notesbog..."
@@ -1660,8 +1820,24 @@ msgstr "Vælg dato"
msgid "Confirm"
msgstr "Bekræft"
msgid "Cancel synchronisation"
msgstr "Afbryd synkronisering"
#, fuzzy, javascript-format
msgid "Notebook: %s"
msgstr "Notesbøger"
#, fuzzy
msgid "Encrypted notebooks cannot be renamed"
msgstr "Krypteret emner kan ikke rettes"
#, fuzzy
msgid "New Notebook"
msgstr "Ny notesbog"
msgid "Configuration"
msgstr "Indstillinger"
#, fuzzy
msgid "All notes"
msgstr "note"
#, fuzzy
msgid "Checking... Please wait."
@@ -1699,6 +1875,54 @@ msgstr "Nye tags:"
msgid "Type new tags or select from list"
msgstr "Indtast nye tags eller vælg fra listen"
msgid "Warning"
msgstr ""
msgid ""
"In order to use file system synchronization your permission to write to "
"external storage is required."
msgstr ""
#, fuzzy
msgid "Information"
msgstr "Indstillinger"
msgid "Encryption Config"
msgstr "Krypterings indstillinger"
#, fuzzy
msgid "Tools"
msgstr "Værktøjer"
#, fuzzy
msgid "Sync Status"
msgstr "Status"
msgid "Log"
msgstr "Log"
#, fuzzy
msgid "Creating report..."
msgstr "Opretter ny %s..."
msgid "Export Debug Report"
msgstr "Eksporter undersøgelses rapport"
msgid "Fixing search index..."
msgstr ""
msgid "Fix search index"
msgstr ""
msgid ""
"Use this to rebuild the search index if there is a problem with search. It "
"may take some times depending on the number of notes."
msgstr ""
#, fuzzy
msgid "More information"
msgstr "Indstillinger"
msgid ""
"To work correctly, the app needs the following permissions. Please enable "
"them in your phone settings, in Apps > Joplin > Permissions"
@@ -1718,10 +1942,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 ""
@@ -1761,6 +1981,10 @@ msgstr "Notesbogen kan ikke gemmes: %s"
msgid "Edit notebook"
msgstr "Rediger notesbog"
#, fuzzy
msgid "Enter notebook title"
msgstr "Notesbogs titel:"
msgid "Show all"
msgstr "Vis alt"
@@ -1784,10 +2008,32 @@ msgstr ""
msgid "The Joplin mobile app does not currently support this type of link: %s"
msgstr ""
#, javascript-format
msgid "Links with protocol \"%s\" are not supported"
msgstr ""
#, javascript-format
msgid "Unsupported image type: %s"
msgstr "Ulovlig billedtype: %s"
#, fuzzy, javascript-format
msgid "Updated: %s"
msgstr "Opdateret %d."
msgid "View on map"
msgstr "Vis på kort"
msgid "Go to source URL"
msgstr ""
#, fuzzy
msgid "Attach..."
msgstr "Søg"
#, fuzzy
msgid "Choose an option"
msgstr "Vis avancerede indstillinger"
#, fuzzy
msgid "Take photo"
msgstr "Vedhæft foto"
@@ -1807,20 +2053,18 @@ msgstr "Konverter til note"
msgid "Convert to todo"
msgstr "Konverter til opgave"
msgid "Hide metadata"
msgstr "Skjul metadata"
msgid "Show metadata"
msgstr "Vis metadata"
msgid "View on map"
msgstr "Vis på kort"
msgid "Go to source URL"
msgid "Properties"
msgstr ""
msgid "Delete notebook"
msgstr "Slet notesbog"
msgid "Add body"
msgstr ""
msgid "Edit"
msgstr "Ret"
#, fuzzy
msgid "Add title"
msgstr "Samlet"
msgid "Login with OneDrive"
msgstr "Log på med OneDrive"
@@ -1828,18 +2072,51 @@ msgstr "Log på med OneDrive"
msgid "Search"
msgstr "Søg"
msgid ""
"Click on the (+) button to create a new note or notebook. Click on the side "
"menu to access your existing notebooks."
msgstr ""
"Klik på (+) knappen for at oprette ny note eller notesbog. Klik på side menu "
"for at åbne eksisterende notesbøger."
#~ msgid "Cancel synchronisation"
#~ msgstr "Afbryd synkronisering"
msgid "You currently have no notebook. Create one by clicking on (+) button."
msgstr "Du har ingen notesbøger. Opret en ved at klikke på (+) knappen."
#~ msgid "Hide metadata"
#~ msgstr "Skjul metadata"
msgid "Welcome"
msgstr "Velkommen"
#~ msgid "Show metadata"
#~ msgstr "Vis metadata"
#~ msgid "Delete notebook"
#~ msgstr "Slet notesbog"
#~ msgid ""
#~ "Click on the (+) button to create a new note or notebook. Click on the "
#~ "side menu to access your existing notebooks."
#~ msgstr ""
#~ "Klik på (+) knappen for at oprette ny note eller notesbog. Klik på side "
#~ "menu for at åbne eksisterende notesbøger."
#~ msgid ""
#~ "You currently have no notebook. Create one by clicking on (+) button."
#~ msgstr "Du har ingen notesbøger. Opret en ved at klikke på (+) knappen."
#~ msgid "Welcome"
#~ msgstr "Velkommen"
#~ msgid "Separate each tag by a comma."
#~ msgstr "Adskil hver mærke med komma."
#~ msgid "Some items cannot be decrypted."
#~ msgstr "Nogle emner kan ikke krypteres."
#~ msgid "%s (%s): %s"
#~ msgstr "%s (%s): %s"
#~ msgid ""
#~ "The path to synchronise with when file system synchronisation is enabled. "
#~ "See `sync.target`."
#~ msgstr ""
#~ "Sti til synkronisering, når filsystem synkronisering er slået til. Se "
#~ "`sync.target`."
#, fuzzy
#~ msgid "Joplin v%s"
#~ msgstr "Joplin hjemmeside"
#~ msgid "State: %s."
#~ msgstr "Tilstand: %s."

File diff suppressed because it is too large Load Diff

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:"
@@ -527,7 +527,7 @@ msgstr ""
msgid "PDF File"
msgstr ""
msgid "File"
msgid "Synchronisation status"
msgstr ""
msgid "New note"
@@ -539,13 +539,63 @@ msgstr ""
msgid "New notebook"
msgstr ""
msgid "Print"
msgstr ""
msgid "General Options"
msgstr ""
msgid "Encryption options"
msgstr ""
msgid "Web clipper options"
msgstr ""
msgid "Create note from template"
msgstr ""
msgid "Create to-do from template"
msgstr ""
msgid "Insert template"
msgstr ""
msgid "Open template directory"
msgstr ""
msgid "Refresh templates"
msgstr ""
#, javascript-format
msgid "Revision: %s (%s)"
msgstr ""
#, javascript-format
msgid "%s %s (%s, %s)"
msgstr ""
msgid "&File"
msgstr ""
msgid "About Joplin"
msgstr ""
msgid "Preferences..."
msgstr ""
msgid "Check for updates..."
msgstr ""
msgid "Templates"
msgstr ""
msgid "Import"
msgstr ""
msgid "Export"
msgstr ""
msgid "Print"
msgid "Synchronise"
msgstr ""
#, javascript-format
@@ -555,7 +605,10 @@ msgstr ""
msgid "Quit"
msgstr ""
msgid "Edit"
msgid "Close Window"
msgstr ""
msgid "&Edit"
msgstr ""
msgid "Copy"
@@ -579,19 +632,25 @@ msgstr ""
msgid "Link"
msgstr ""
msgid "Code"
msgstr ""
msgid "Insert Date Time"
msgstr ""
msgid "Edit in external editor"
msgstr ""
msgid "Tags"
msgstr ""
msgid "Search in all the notes"
msgstr ""
msgid "Search in current note"
msgstr ""
msgid "View"
msgid "&View"
msgstr ""
msgid "Toggle sidebar"
@@ -603,22 +662,10 @@ msgstr ""
msgid "Focus"
msgstr ""
msgid "Tools"
msgid "&Tools"
msgstr ""
msgid "Synchronisation status"
msgstr ""
msgid "Web clipper options"
msgstr ""
msgid "Encryption options"
msgstr ""
msgid "General Options"
msgstr ""
msgid "Help"
msgid "&Help"
msgstr ""
msgid "Website and documentation"
@@ -627,14 +674,7 @@ msgstr ""
msgid "Make a donation"
msgstr ""
msgid "Check for updates..."
msgstr ""
msgid "About Joplin"
msgstr ""
#, javascript-format
msgid "%s %s (%s, %s)"
msgid "Toggle development tools"
msgstr ""
#, javascript-format
@@ -661,11 +701,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"
@@ -738,10 +778,10 @@ msgstr ""
msgid "Notes and settings are stored in: %s"
msgstr ""
msgid "Browse..."
msgid "Check synchronisation configuration"
msgstr ""
msgid "Check synchronisation configuration"
msgid "Browse..."
msgstr ""
msgid "Apply"
@@ -845,9 +885,6 @@ msgstr ""
msgid "Add or remove tags:"
msgstr ""
msgid "Separate each tag by a comma."
msgstr ""
msgid "Rename notebook:"
msgstr ""
@@ -869,7 +906,7 @@ msgstr ""
msgid "View them now"
msgstr ""
msgid "Some items cannot be decrypted."
msgid "One or more master keys need a password."
msgstr ""
msgid "Set the password"
@@ -888,9 +925,31 @@ msgstr ""
msgid "URL"
msgstr ""
msgid "Note History"
msgstr ""
msgid "Previous versions of this note"
msgstr ""
msgid "Note properties"
msgstr ""
#, javascript-format
msgid "The note \"%s\" has been successfully restored to the notebook \"%s\"."
msgstr ""
msgid "This note has no history"
msgstr ""
msgid "Restore"
msgstr ""
#, javascript-format
msgid ""
"Click \"%s\" to restore the note. It will be copied in the notebook named "
"\"%s\". The current version of the note will not be replaced or modified."
msgstr ""
msgid "Open..."
msgstr ""
@@ -938,9 +997,6 @@ msgstr ""
msgid "Attach file"
msgstr ""
msgid "Tags"
msgstr ""
msgid "Set alarm"
msgstr ""
@@ -951,9 +1007,6 @@ msgstr ""
msgid "Hyperlink"
msgstr ""
msgid "Code"
msgstr ""
msgid "Numbered List"
msgstr ""
@@ -1009,7 +1062,15 @@ 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?"
@@ -1021,9 +1082,6 @@ msgstr ""
msgid "Rename"
msgstr ""
msgid "Synchronise"
msgstr ""
msgid "Notebooks"
msgstr ""
@@ -1032,12 +1090,15 @@ msgid "Decrypting items: %d/%d"
msgstr ""
#, javascript-format
msgid "Fetching resources: %d"
msgid "Fetching resources: %d/%d"
msgstr ""
msgid "Please select where the sync status should be exported to"
msgstr ""
msgid "Retry"
msgstr ""
msgid "Add or remove tags"
msgstr ""
@@ -1068,6 +1129,14 @@ msgstr ""
msgid "Delete these %d notes?"
msgstr ""
msgid ""
"Type a note title to jump to it. Or type # followed by a tag name, or @ "
"followed by a notebook name."
msgstr ""
msgid "Goto Anything..."
msgstr ""
#, javascript-format
msgid "Usage: %s"
msgstr ""
@@ -1172,12 +1241,22 @@ msgstr ""
msgid "Synchronisation is already in progress. State: %s"
msgstr ""
msgid ""
"Unknown item type downloaded - please upgrade Joplin to the latest version"
msgstr ""
msgid "Encrypted"
msgstr ""
msgid "Encrypted items cannot be modified"
msgstr ""
msgid "title"
msgstr ""
msgid "updated date"
msgstr ""
msgid "Conflicts"
msgstr ""
@@ -1188,12 +1267,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 ""
@@ -1208,6 +1281,63 @@ msgstr ""
msgid "Cannot move note to \"%s\" notebook"
msgstr ""
#, javascript-format
msgid ""
"Attention: If you change this location, make sure you copy all your content "
"to it before syncing, otherwise all files will be removed! See the FAQ for "
"more details: %s"
msgstr ""
msgid "Synchronisation target"
msgstr ""
msgid ""
"The target to synchonise to. Each sync target may have additional parameters "
"which are named as `sync.NUM.NAME` (all documented below)."
msgstr ""
msgid "Directory to synchronise with (absolute path)"
msgstr ""
msgid "Nextcloud WebDAV URL"
msgstr ""
msgid "Nextcloud username"
msgstr ""
msgid "Nextcloud password"
msgstr ""
msgid "WebDAV URL"
msgstr ""
msgid "WebDAV username"
msgstr ""
msgid "WebDAV password"
msgstr ""
msgid "Attachment download behaviour"
msgstr ""
msgid ""
"In \"Manual\" mode, attachments are downloaded only when you click on them. "
"In \"Auto\", they are downloaded when you open the note. In \"Always\", all "
"the attachments are downloaded whether you open the note or not."
msgstr ""
msgid "Always"
msgstr ""
msgid "Manual"
msgstr ""
msgid "Auto"
msgstr ""
msgid "Max concurrent connections"
msgstr ""
msgid "Language"
msgstr ""
@@ -1238,6 +1368,9 @@ msgstr ""
msgid "Reverse sort order"
msgstr ""
msgid "Sort notebooks by"
msgstr ""
msgid "Save geo-location with notes"
msgstr ""
@@ -1253,6 +1386,42 @@ msgstr ""
msgid "When creating a new note:"
msgstr ""
msgid "Enable soft breaks"
msgstr ""
msgid "Enable math expressions"
msgstr ""
msgid "Enable ==mark== syntax"
msgstr ""
msgid "Enable footnotes"
msgstr ""
msgid "Enable table of contents extension"
msgstr ""
msgid "Enable ~sub~ syntax"
msgstr ""
msgid "Enable ^sup^ syntax"
msgstr ""
msgid "Enable deflist syntax"
msgstr ""
msgid "Enable abbreviation syntax"
msgstr ""
msgid "Enable markdown emoji"
msgstr ""
msgid "Enable ++insert++ syntax"
msgstr ""
msgid "Enable multimarkdown table extension"
msgstr ""
msgid "Show tray icon"
msgstr ""
@@ -1315,50 +1484,6 @@ msgid ""
"If none is provided it will try to auto-detect the default editor."
msgstr ""
msgid "Show advanced options"
msgstr ""
msgid "Synchronisation target"
msgstr ""
msgid ""
"The target to synchonise to. Each sync target may have additional parameters "
"which are named as `sync.NUM.NAME` (all documented below)."
msgstr ""
msgid "Directory to synchronise with (absolute path)"
msgstr ""
msgid ""
"The path to synchronise with when file system synchronisation is enabled. "
"See `sync.target`."
msgstr ""
msgid "Nextcloud WebDAV URL"
msgstr ""
#, javascript-format
msgid ""
"Attention: If you change this location, make sure you copy all your content "
"to it before syncing, otherwise all files will be removed! See the FAQ for "
"more details: %s"
msgstr ""
msgid "Nextcloud username"
msgstr ""
msgid "Nextcloud password"
msgstr ""
msgid "WebDAV URL"
msgstr ""
msgid "WebDAV username"
msgstr ""
msgid "WebDAV password"
msgstr ""
msgid "Custom TLS certificates"
msgstr ""
@@ -1372,6 +1497,19 @@ msgstr ""
msgid "Ignore TLS certificate errors"
msgstr ""
msgid "Enable note history"
msgstr ""
msgid "days"
msgstr ""
#, javascript-format
msgid "%d days"
msgstr ""
msgid "Keep note history for"
msgstr ""
#, javascript-format
msgid "Invalid option value: \"%s\". Possible values are: %s."
msgstr ""
@@ -1388,6 +1526,9 @@ msgstr ""
msgid "Note"
msgstr ""
msgid "Plugins"
msgstr ""
msgid "Application"
msgstr ""
@@ -1410,6 +1551,9 @@ msgstr ""
msgid "Json Export Directory"
msgstr ""
msgid "File"
msgstr ""
msgid "Directory"
msgstr ""
@@ -1433,11 +1577,10 @@ msgstr ""
msgid "Please specify the notebook where the notes should be imported to."
msgstr ""
msgid "Items that cannot be synchronised"
msgid "Restored Notes"
msgstr ""
#, javascript-format
msgid "%s (%s): %s"
msgid "Items that cannot be synchronised"
msgstr ""
msgid ""
@@ -1446,6 +1589,23 @@ msgid ""
"(which is displayed in brackets above)."
msgstr ""
#, javascript-format
msgid "%s (%s) could not be uploaded: %s"
msgstr ""
#, javascript-format
msgid "Item \"%s\" could not be downloaded: %s"
msgstr ""
msgid "Items that cannot be decrypted"
msgstr ""
msgid ""
"Joplin failed to decrypt these items multiple times, possibly because they "
"are corrupted or too large. These items will remain on the device but Joplin "
"will no longer attempt to decrypt them."
msgstr ""
msgid "Sync status (synced items / total items)"
msgstr ""
@@ -1491,18 +1651,6 @@ msgstr ""
msgid "Delete these notes?"
msgstr ""
msgid "Log"
msgstr ""
msgid "Export Debug Report"
msgstr ""
msgid "Encryption Config"
msgstr ""
msgid "Configuration"
msgstr ""
msgid "Move to notebook..."
msgstr ""
@@ -1525,7 +1673,20 @@ msgstr ""
msgid "Confirm"
msgstr ""
msgid "Cancel synchronisation"
#, javascript-format
msgid "Notebook: %s"
msgstr ""
msgid "Encrypted notebooks cannot be renamed"
msgstr ""
msgid "New Notebook"
msgstr ""
msgid "Configuration"
msgstr ""
msgid "All notes"
msgstr ""
msgid "Checking... Please wait."
@@ -1561,6 +1722,49 @@ msgstr ""
msgid "Type new tags or select from list"
msgstr ""
msgid "Warning"
msgstr ""
msgid ""
"In order to use file system synchronization your permission to write to "
"external storage is required."
msgstr ""
msgid "Information"
msgstr ""
msgid "Encryption Config"
msgstr ""
msgid "Tools"
msgstr ""
msgid "Sync Status"
msgstr ""
msgid "Log"
msgstr ""
msgid "Creating report..."
msgstr ""
msgid "Export Debug Report"
msgstr ""
msgid "Fixing search index..."
msgstr ""
msgid "Fix search index"
msgstr ""
msgid ""
"Use this to rebuild the search index if there is a problem with search. It "
"may take some times depending on the number of notes."
msgstr ""
msgid "More information"
msgstr ""
msgid ""
"To work correctly, the app needs the following permissions. Please enable "
"them in your phone settings, in Apps > Joplin > Permissions"
@@ -1580,10 +1784,6 @@ msgstr ""
msgid "Joplin website"
msgstr ""
#, javascript-format
msgid "Joplin v%s"
msgstr ""
#, javascript-format
msgid "Database v%s"
msgstr ""
@@ -1622,6 +1822,9 @@ msgstr ""
msgid "Edit notebook"
msgstr ""
msgid "Enter notebook title"
msgstr ""
msgid "Show all"
msgstr ""
@@ -1645,10 +1848,30 @@ msgstr ""
msgid "The Joplin mobile app does not currently support this type of link: %s"
msgstr ""
#, javascript-format
msgid "Links with protocol \"%s\" are not supported"
msgstr ""
#, javascript-format
msgid "Unsupported image type: %s"
msgstr ""
#, javascript-format
msgid "Updated: %s"
msgstr ""
msgid "View on map"
msgstr ""
msgid "Go to source URL"
msgstr ""
msgid "Attach..."
msgstr ""
msgid "Choose an option"
msgstr ""
msgid "Take photo"
msgstr ""
@@ -1667,19 +1890,16 @@ msgstr ""
msgid "Convert to todo"
msgstr ""
msgid "Hide metadata"
msgid "Properties"
msgstr ""
msgid "Show metadata"
msgid "Add body"
msgstr ""
msgid "View on map"
msgid "Edit"
msgstr ""
msgid "Go to source URL"
msgstr ""
msgid "Delete notebook"
msgid "Add title"
msgstr ""
msgid "Login with OneDrive"
@@ -1687,14 +1907,3 @@ msgstr ""
msgid "Search"
msgstr ""
msgid ""
"Click on the (+) button to create a new note or notebook. Click on the side "
"menu to access your existing notebooks."
msgstr ""
msgid "You currently have no notebook. Create one by clicking on (+) button."
msgstr ""
msgid "Welcome"
msgstr ""

1945
CliClient/locales/en_US.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

@@ -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`."
@@ -604,8 +605,8 @@ msgstr ""
msgid "PDF File"
msgstr "Fitxategia"
msgid "File"
msgstr "Fitxategia"
msgid "Synchronisation status"
msgstr "Sinkronizazioaren egoera"
msgid "New note"
msgstr "Ohar berria"
@@ -616,6 +617,57 @@ msgstr "Zeregin berria"
msgid "New notebook"
msgstr "Koaderno berria"
msgid "Print"
msgstr ""
msgid "General Options"
msgstr "Ezarpenak"
msgid "Encryption options"
msgstr "Zifratzeko aukerak"
msgid "Web clipper options"
msgstr ""
msgid "Create note from template"
msgstr ""
msgid "Create to-do from template"
msgstr ""
msgid "Insert template"
msgstr ""
msgid "Open template directory"
msgstr ""
msgid "Refresh templates"
msgstr ""
#, fuzzy, javascript-format
msgid "Revision: %s (%s)"
msgstr "%s %s (%s)"
#, javascript-format
msgid "%s %s (%s, %s)"
msgstr "%s %s (%s, %s)"
#, fuzzy
msgid "&File"
msgstr "Fitxategia"
msgid "About Joplin"
msgstr "Joplin-i buruz"
msgid "Preferences..."
msgstr ""
msgid "Check for updates..."
msgstr ""
msgid "Templates"
msgstr ""
msgid "Import"
msgstr "Inportatu"
@@ -623,8 +675,8 @@ msgstr "Inportatu"
msgid "Export"
msgstr "Inportatu"
msgid "Print"
msgstr ""
msgid "Synchronise"
msgstr "Sinkronizatu"
#, javascript-format
msgid "Hide %s"
@@ -633,7 +685,11 @@ msgstr ""
msgid "Quit"
msgstr "Irten"
msgid "Edit"
msgid "Close Window"
msgstr ""
#, fuzzy
msgid "&Edit"
msgstr "Editatu"
msgid "Copy"
@@ -658,12 +714,18 @@ msgstr ""
msgid "Link"
msgstr ""
msgid "Code"
msgstr ""
msgid "Insert Date Time"
msgstr ""
msgid "Edit in external editor"
msgstr ""
msgid "Tags"
msgstr "Etiketak"
msgid "Search in all the notes"
msgstr "Bilatu ohar guztietan"
@@ -671,7 +733,7 @@ msgstr "Bilatu ohar guztietan"
msgid "Search in current note"
msgstr "Bilatu ohar guztietan"
msgid "View"
msgid "&View"
msgstr ""
msgid "Toggle sidebar"
@@ -683,22 +745,12 @@ msgstr ""
msgid "Focus"
msgstr ""
msgid "Tools"
#, fuzzy
msgid "&Tools"
msgstr "Tresnak"
msgid "Synchronisation status"
msgstr "Sinkronizazioaren egoera"
msgid "Web clipper options"
msgstr ""
msgid "Encryption options"
msgstr "Zifratzeko aukerak"
msgid "General Options"
msgstr "Ezarpenak"
msgid "Help"
#, fuzzy
msgid "&Help"
msgstr "Laguntza"
msgid "Website and documentation"
@@ -708,16 +760,9 @@ msgstr "Web orria eta dokumentazioa (en)"
msgid "Make a donation"
msgstr "Web orria eta dokumentazioa (en)"
msgid "Check for updates..."
msgid "Toggle development tools"
msgstr ""
msgid "About Joplin"
msgstr "Joplin-i buruz"
#, javascript-format
msgid "%s %s (%s, %s)"
msgstr "%s %s (%s, %s)"
#, fuzzy, javascript-format
msgid "Open %s"
msgstr "On %s: %s"
@@ -742,11 +787,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"
@@ -821,13 +866,13 @@ msgstr ""
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 "Browse..."
msgstr ""
msgid "Apply"
msgstr ""
@@ -944,9 +989,6 @@ msgstr "Koadernoaren izenburua: "
msgid "Add or remove tags:"
msgstr "Gehitu edo ezabatu etiketak:"
msgid "Separate each tag by a comma."
msgstr "Banatu etiketak koma erabiliaz."
msgid "Rename notebook:"
msgstr "Berrizendatu koadernoa:"
@@ -970,8 +1012,9 @@ msgstr "Zenbait item ezin dira sinkronizatu."
msgid "View them now"
msgstr "Ikusi hori orain"
msgid "Some items cannot be decrypted."
msgstr "Zenbait item ezin dira deszifratu."
#, fuzzy
msgid "One or more master keys need a password."
msgstr "Sartu pasahitz nagusia:"
msgid "Set the password"
msgstr "Ezarri pasahitza"
@@ -989,9 +1032,33 @@ msgstr ""
msgid "URL"
msgstr ""
#, fuzzy
msgid "Note History"
msgstr "Koadernoak"
msgid "Previous versions of this note"
msgstr ""
msgid "Note properties"
msgstr ""
#, javascript-format
msgid "The note \"%s\" has been successfully restored to the notebook \"%s\"."
msgstr ""
#, fuzzy
msgid "This note has no history"
msgstr "Ohar hau mugitua izan da:"
msgid "Restore"
msgstr ""
#, javascript-format
msgid ""
"Click \"%s\" to restore the note. It will be copied in the notebook named "
"\"%s\". The current version of the note will not be replaced or modified."
msgstr ""
msgid "Open..."
msgstr ""
@@ -1040,9 +1107,6 @@ msgstr ""
msgid "Attach file"
msgstr "Erantsi fitxategia"
msgid "Tags"
msgstr "Etiketak"
msgid "Set alarm"
msgstr "Ezarri alarma"
@@ -1053,9 +1117,6 @@ msgstr "%s: %s"
msgid "Hyperlink"
msgstr ""
msgid "Code"
msgstr ""
msgid "Numbered List"
msgstr ""
@@ -1116,7 +1177,15 @@ 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?"
@@ -1128,24 +1197,24 @@ msgstr "Ezabatu"
msgid "Rename"
msgstr "Berrizendatu"
msgid "Synchronise"
msgstr "Sinkronizatu"
msgid "Notebooks"
msgstr "Koadernoak"
#, fuzzy, javascript-format
msgid "Decrypting items: %d/%d"
msgstr "Itemak eskuratuta: %d%d."
msgstr "Itemak eskuratuta: %d/%d"
#, fuzzy, javascript-format
msgid "Fetching resources: %d"
msgstr "Baliabideak: %d."
msgid "Fetching resources: %d/%d"
msgstr "Baliabideak: %d/%d"
#, fuzzy
msgid "Please select where the sync status should be exported to"
msgstr "Aukeratu nora esportatu sinkronizazioaren egoera, mesedez"
msgid "Retry"
msgstr ""
msgid "Add or remove tags"
msgstr "Gehitu edo ezabatu etiketak"
@@ -1179,6 +1248,14 @@ msgstr "Oharrak ezabatu?"
msgid "Delete these %d notes?"
msgstr "Oharrok ezabatu?"
msgid ""
"Type a note title to jump to it. Or type # followed by a tag name, or @ "
"followed by a notebook name."
msgstr ""
msgid "Goto Anything..."
msgstr ""
#, javascript-format
msgid "Usage: %s"
msgstr "Erabili: %s"
@@ -1292,12 +1369,24 @@ msgstr ""
msgid "Synchronisation is already in progress. State: %s"
msgstr "Sinkronizazioa hasita dago. Egoera: %s"
msgid ""
"Unknown item type downloaded - please upgrade Joplin to the latest version"
msgstr ""
msgid "Encrypted"
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"
@@ -1310,14 +1399,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 +1414,69 @@ msgstr "Ezin kopia daiteke oharra \"%s\" koadernora"
msgid "Cannot move note to \"%s\" notebook"
msgstr "Ezin eraman daiteke oharra \"%s\" koadernora"
#, javascript-format
msgid ""
"Attention: If you change this location, make sure you copy all your content "
"to it before syncing, otherwise all files will be removed! See the FAQ for "
"more details: %s"
msgstr ""
msgid "Synchronisation target"
msgstr "Sinkronizazio helbudua"
msgid ""
"The target to synchonise to. Each sync target may have additional parameters "
"which are named as `sync.NUM.NAME` (all documented below)."
msgstr ""
"Sinkronizazio helburua. Sinkronizazio aukera bakoitzak izan ditzake "
"parametro gehigarriak, horrela izendatuta `sync.NUM.NAME` (dena beherago "
"dokumentatuta)."
msgid "Directory to synchronise with (absolute path)"
msgstr "Sinkronizatzeko direktorioa (bide-izena osorik)"
msgid "Nextcloud WebDAV URL"
msgstr "Nextcloud WebDAV URL"
msgid "Nextcloud username"
msgstr "Nextcloud erabiltzaile-izena"
msgid "Nextcloud password"
msgstr "Nextcloud pasahitza"
#, fuzzy
msgid "WebDAV URL"
msgstr "Nextcloud WebDAV URL"
#, fuzzy
msgid "WebDAV username"
msgstr "Nextcloud erabiltzaile-izena"
#, fuzzy
msgid "WebDAV password"
msgstr "Ezarri pasahitza"
msgid "Attachment download behaviour"
msgstr ""
msgid ""
"In \"Manual\" mode, attachments are downloaded only when you click on them. "
"In \"Auto\", they are downloaded when you open the note. In \"Always\", all "
"the attachments are downloaded whether you open the note or not."
msgstr ""
msgid "Always"
msgstr ""
msgid "Manual"
msgstr ""
msgid "Auto"
msgstr ""
msgid "Max concurrent connections"
msgstr ""
msgid "Language"
msgstr "Hizkuntza"
@@ -1366,6 +1510,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"
@@ -1383,6 +1531,43 @@ msgstr ""
msgid "When creating a new note:"
msgstr "Ohar berria sortzen du."
msgid "Enable soft breaks"
msgstr ""
#, fuzzy
msgid "Enable math expressions"
msgstr "Zifratua gaitu"
msgid "Enable ==mark== syntax"
msgstr ""
msgid "Enable footnotes"
msgstr ""
msgid "Enable table of contents extension"
msgstr ""
msgid "Enable ~sub~ syntax"
msgstr ""
msgid "Enable ^sup^ syntax"
msgstr ""
msgid "Enable deflist syntax"
msgstr ""
msgid "Enable abbreviation syntax"
msgstr ""
msgid "Enable markdown emoji"
msgstr ""
msgid "Enable ++insert++ syntax"
msgstr ""
msgid "Enable multimarkdown table extension"
msgstr ""
msgid "Show tray icon"
msgstr ""
@@ -1451,57 +1636,6 @@ msgstr ""
"Editorea erabiliko da oharra zabaltzeko. Ez badago zehaztutakorik lehenetsia "
"igartzen ahaleginduko da."
msgid "Show advanced options"
msgstr "Erakutsi aukera aurreratuak"
msgid "Synchronisation target"
msgstr "Sinkronizazio helbudua"
msgid ""
"The target to synchonise to. Each sync target may have additional parameters "
"which are named as `sync.NUM.NAME` (all documented below)."
msgstr ""
"Sinkronizazio helburua. Sinkronizazio aukera bakoitzak izan ditzake "
"parametro gehigarriak, horrela izendatuta `sync.NUM.NAME` (dena beherago "
"dokumentatuta)."
msgid "Directory to synchronise with (absolute path)"
msgstr "Sinkronizatzeko direktorioa (bide-izena osorik)"
msgid ""
"The path to synchronise with when file system synchronisation is enabled. "
"See `sync.target`."
msgstr ""
"Sinkronizazio sistema gaituta dagoenerako bide-izena. Ikus `sync.target`."
msgid "Nextcloud WebDAV URL"
msgstr "Nextcloud WebDAV URL"
#, javascript-format
msgid ""
"Attention: If you change this location, make sure you copy all your content "
"to it before syncing, otherwise all files will be removed! See the FAQ for "
"more details: %s"
msgstr ""
msgid "Nextcloud username"
msgstr "Nextcloud erabiltzaile-izena"
msgid "Nextcloud password"
msgstr "Nextcloud pasahitza"
#, fuzzy
msgid "WebDAV URL"
msgstr "Nextcloud WebDAV URL"
#, fuzzy
msgid "WebDAV username"
msgstr "Nextcloud erabiltzaile-izena"
#, fuzzy
msgid "WebDAV password"
msgstr "Ezarri pasahitza"
msgid "Custom TLS certificates"
msgstr ""
@@ -1515,6 +1649,20 @@ msgstr ""
msgid "Ignore TLS certificate errors"
msgstr ""
#, fuzzy
msgid "Enable note history"
msgstr "Zifratua gaitu"
msgid "days"
msgstr ""
#, javascript-format
msgid "%d days"
msgstr ""
msgid "Keep note history for"
msgstr ""
#, javascript-format
msgid "Invalid option value: \"%s\". Possible values are: %s."
msgstr "Balio aukera baliogabea: \"%s\". Litezkeen balioak: %s."
@@ -1534,6 +1682,9 @@ msgstr ""
msgid "Note"
msgstr "Koadernoak"
msgid "Plugins"
msgstr ""
#, fuzzy
msgid "Application"
msgstr "Irten aplikaziotik"
@@ -1560,6 +1711,9 @@ msgstr "Evernotetik esportatutako fitxategiak"
msgid "Json Export Directory"
msgstr "Evernotetik esportatutako fitxategiak"
msgid "File"
msgstr "Fitxategia"
msgid "Directory"
msgstr ""
@@ -1584,13 +1738,12 @@ msgstr ""
msgid "Please specify the notebook where the notes should be imported to."
msgstr "Aukeratu nora esportatu sinkronizazioaren egoera, mesedez"
msgid "Restored Notes"
msgstr ""
msgid "Items that cannot be synchronised"
msgstr "Itemok ezin sinkronizatu"
#, javascript-format
msgid "%s (%s): %s"
msgstr "%s (%s): %s"
msgid ""
"These items will remain on the device but will not be uploaded to the sync "
"target. In order to find these items, either search for the title or the ID "
@@ -1599,6 +1752,24 @@ msgstr ""
"Itemok gailuan geratuko dira baina ez dira sinkronizatuko. Horiek aurkitzeko "
"bilaketak egin titulu edo goiko parentesien arteko IDaren arabera."
#, fuzzy, javascript-format
msgid "%s (%s) could not be uploaded: %s"
msgstr "Koadernoa ezin gorde daiteke: %s"
#, fuzzy, javascript-format
msgid "Item \"%s\" could not be downloaded: %s"
msgstr "Koadernoa ezin gorde daiteke: %s"
#, fuzzy
msgid "Items that cannot be decrypted"
msgstr "Itemok ezin sinkronizatu"
msgid ""
"Joplin failed to decrypt these items multiple times, possibly because they "
"are corrupted or too large. These items will remain on the device but Joplin "
"will no longer attempt to decrypt them."
msgstr ""
msgid "Sync status (synced items / total items)"
msgstr "Sinkronizazio egoera (sinkronizatutako itemak/itemak guztira)"
@@ -1644,18 +1815,6 @@ msgstr "Ez dago oharrik. Sortu bat (+) botoian klik eginaz."
msgid "Delete these notes?"
msgstr "Oharrok ezabatu?"
msgid "Log"
msgstr "Egunkaria"
msgid "Export Debug Report"
msgstr "Esportatu arazketa txostena"
msgid "Encryption Config"
msgstr "Zifratze Ezarpenak"
msgid "Configuration"
msgstr "Konfigurazioa"
msgid "Move to notebook..."
msgstr "Mugitu ... koadernora"
@@ -1680,8 +1839,24 @@ msgstr "Data aukeratu"
msgid "Confirm"
msgstr "Baieztatu"
msgid "Cancel synchronisation"
msgstr "Sinkronizazioa utzi"
#, fuzzy, javascript-format
msgid "Notebook: %s"
msgstr "Koadernoak"
#, fuzzy
msgid "Encrypted notebooks cannot be renamed"
msgstr "Zifratutako itemak ezin aldatu daitezke"
#, fuzzy
msgid "New Notebook"
msgstr "Koaderno berria"
msgid "Configuration"
msgstr "Konfigurazioa"
#, fuzzy
msgid "All notes"
msgstr "Ohar berria"
#, fuzzy
msgid "Checking... Please wait."
@@ -1719,6 +1894,54 @@ msgstr ""
msgid "Type new tags or select from list"
msgstr ""
msgid "Warning"
msgstr ""
msgid ""
"In order to use file system synchronization your permission to write to "
"external storage is required."
msgstr ""
#, fuzzy
msgid "Information"
msgstr "Konfigurazioa"
msgid "Encryption Config"
msgstr "Zifratze Ezarpenak"
#, fuzzy
msgid "Tools"
msgstr "Tresnak"
#, fuzzy
msgid "Sync Status"
msgstr "Egoera"
msgid "Log"
msgstr "Egunkaria"
#, fuzzy
msgid "Creating report..."
msgstr "Oharrak inportatzen..."
msgid "Export Debug Report"
msgstr "Esportatu arazketa txostena"
msgid "Fixing search index..."
msgstr ""
msgid "Fix search index"
msgstr ""
msgid ""
"Use this to rebuild the search index if there is a problem with search. It "
"may take some times depending on the number of notes."
msgstr ""
#, fuzzy
msgid "More information"
msgstr "Konfigurazioa"
msgid ""
"To work correctly, the app needs the following permissions. Please enable "
"them in your phone settings, in Apps > Joplin > Permissions"
@@ -1738,10 +1961,6 @@ msgstr ""
msgid "Joplin website"
msgstr ""
#, javascript-format
msgid "Joplin v%s"
msgstr ""
#, javascript-format
msgid "Database v%s"
msgstr ""
@@ -1782,6 +2001,10 @@ msgstr "Koadernoa ezin gorde daiteke: %s"
msgid "Edit notebook"
msgstr "Editatu koadernoa"
#, fuzzy
msgid "Enter notebook title"
msgstr "Koadernoaren izenburua: "
msgid "Show all"
msgstr ""
@@ -1805,10 +2028,32 @@ msgstr ""
msgid "The Joplin mobile app does not currently support this type of link: %s"
msgstr ""
#, javascript-format
msgid "Links with protocol \"%s\" are not supported"
msgstr ""
#, javascript-format
msgid "Unsupported image type: %s"
msgstr "Irudi formatua ez onartua: %s"
#, fuzzy, javascript-format
msgid "Updated: %s"
msgstr "Eguneratuta: %d."
msgid "View on map"
msgstr "Ikusi mapan"
msgid "Go to source URL"
msgstr ""
#, fuzzy
msgid "Attach..."
msgstr "Bilatu"
#, fuzzy
msgid "Choose an option"
msgstr "Erakutsi aukera aurreratuak"
#, fuzzy
msgid "Take photo"
msgstr "Argazkia erantsi"
@@ -1828,20 +2073,18 @@ msgstr "Oharra bihurtu"
msgid "Convert to todo"
msgstr "Zeregina bihurtu"
msgid "Hide metadata"
msgstr "Ezkutatu metadatuak"
msgid "Show metadata"
msgstr "Erakutsi metadatuak"
msgid "View on map"
msgstr "Ikusi mapan"
msgid "Go to source URL"
msgid "Properties"
msgstr ""
msgid "Delete notebook"
msgstr "Ezabatu koadernoa"
msgid "Add body"
msgstr ""
msgid "Edit"
msgstr "Editatu"
#, fuzzy
msgid "Add title"
msgstr "Titulu gabekoa"
msgid "Login with OneDrive"
msgstr "Login with OneDrive"
@@ -1849,18 +2092,46 @@ msgstr "Login with OneDrive"
msgid "Search"
msgstr "Bilatu"
msgid ""
"Click on the (+) button to create a new note or notebook. Click on the side "
"menu to access your existing notebooks."
msgstr ""
"Sakatu (+) botoian ohar edo koaderno berria sortzeko. Klik alboko menuan "
"dagoeneko badiren koadernoak."
#~ msgid "Cancel synchronisation"
#~ msgstr "Sinkronizazioa utzi"
msgid "You currently have no notebook. Create one by clicking on (+) button."
msgstr "Oraindik ez duzu koadernorik. Sortu bat (+) botoian sakatuta."
#~ msgid "Hide metadata"
#~ msgstr "Ezkutatu metadatuak"
msgid "Welcome"
msgstr "Ongi etorri!"
#~ msgid "Show metadata"
#~ msgstr "Erakutsi metadatuak"
#~ msgid "Delete notebook"
#~ msgstr "Ezabatu koadernoa"
#~ msgid ""
#~ "Click on the (+) button to create a new note or notebook. Click on the "
#~ "side menu to access your existing notebooks."
#~ msgstr ""
#~ "Sakatu (+) botoian ohar edo koaderno berria sortzeko. Klik alboko menuan "
#~ "dagoeneko badiren koadernoak."
#~ msgid ""
#~ "You currently have no notebook. Create one by clicking on (+) button."
#~ msgstr "Oraindik ez duzu koadernorik. Sortu bat (+) botoian sakatuta."
#~ msgid "Welcome"
#~ msgstr "Ongi etorri!"
#~ msgid "Separate each tag by a comma."
#~ msgstr "Banatu etiketak koma erabiliaz."
#~ msgid "Some items cannot be decrypted."
#~ msgstr "Zenbait item ezin dira deszifratu."
#~ msgid "%s (%s): %s"
#~ msgstr "%s (%s): %s"
#~ msgid ""
#~ "The path to synchronise with when file system synchronisation is enabled. "
#~ "See `sync.target`."
#~ msgstr ""
#~ "Sinkronizazio sistema gaituta dagoenerako bide-izena. Ikus `sync.target`."
#, fuzzy
#~ msgid "State: %s."

1975
CliClient/locales/fa.po Normal file

File diff suppressed because it is too large Load Diff

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.2.1\n"
"X-Generator: Poedit 2.0.3\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 :"
@@ -602,8 +603,8 @@ msgstr "Importer depuis \"%s\" au format \"%s\". Veuillez patienter..."
msgid "PDF File"
msgstr "Fichier PDF"
msgid "File"
msgstr "Fichier"
msgid "Synchronisation status"
msgstr "État de la synchronisation"
msgid "New note"
msgstr "Nouvelle note"
@@ -614,14 +615,64 @@ msgstr "Nouvelle tâche"
msgid "New notebook"
msgstr "Nouveau carnet"
msgid "Print"
msgstr "Imprimer"
msgid "General Options"
msgstr "Options générales"
msgid "Encryption options"
msgstr "Options de chiffrement"
msgid "Web clipper options"
msgstr "Options du Web Clipper"
msgid "Create note from template"
msgstr "Créer une note à partir d'un modèle"
msgid "Create to-do from template"
msgstr "Créer une tâche à partir d'un modèle"
msgid "Insert template"
msgstr "Insérer un modèle"
msgid "Open template directory"
msgstr "Ouvrir le dossier des modèles"
msgid "Refresh templates"
msgstr "Rafraichir modèles"
#, javascript-format
msgid "Revision: %s (%s)"
msgstr "Révision : %s (%s)"
#, javascript-format
msgid "%s %s (%s, %s)"
msgstr "%s %s (%s, %s)"
msgid "&File"
msgstr "&Fichier"
msgid "About Joplin"
msgstr "A propos de Joplin"
msgid "Preferences..."
msgstr "Préférences…"
msgid "Check for updates..."
msgstr "Vérifier les mises à jour..."
msgid "Templates"
msgstr "Modèles"
msgid "Import"
msgstr "Importer"
msgid "Export"
msgstr "Exporter"
msgid "Print"
msgstr "Imprimer"
msgid "Synchronise"
msgstr "Synchroniser"
#, javascript-format
msgid "Hide %s"
@@ -630,8 +681,11 @@ msgstr "Cacher %s"
msgid "Quit"
msgstr "Quitter"
msgid "Edit"
msgstr "Édition"
msgid "Close Window"
msgstr "Fermer la fenêtre"
msgid "&Edit"
msgstr "&Édition"
msgid "Copy"
msgstr "Copier"
@@ -654,20 +708,26 @@ msgstr "Italique"
msgid "Link"
msgstr "Lien"
msgid "Code"
msgstr "Code"
msgid "Insert Date Time"
msgstr "Insérer la date et l'heure"
msgid "Edit in external editor"
msgstr "Ouvrir dans un éditeur externe"
msgid "Tags"
msgstr "Étiquettes"
msgid "Search in all the notes"
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"
@@ -678,23 +738,11 @@ msgstr "Basculer l'agencement de l'éditeur"
msgid "Focus"
msgstr "Naviguer"
msgid "Tools"
msgstr "Outils"
msgid "&Tools"
msgstr "&Outils"
msgid "Synchronisation status"
msgstr "État de la synchronisation"
msgid "Web clipper options"
msgstr "Options du Web Clipper"
msgid "Encryption options"
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"
@@ -702,15 +750,8 @@ msgstr "Documentation en ligne"
msgid "Make a donation"
msgstr "Faire un don"
msgid "Check for updates..."
msgstr "Vérifier les mises à jour..."
msgid "About Joplin"
msgstr "A propos de Joplin"
#, javascript-format
msgid "%s %s (%s, %s)"
msgstr "%s %s (%s, %s)"
msgid "Toggle development tools"
msgstr "Monter/Cacher les outils de développement"
#, javascript-format
msgid "Open %s"
@@ -737,12 +778,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"
@@ -823,12 +864,12 @@ msgstr ""
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 "Browse..."
msgstr "Parcourir…"
msgid "Apply"
msgstr "Appliquer"
@@ -949,9 +990,6 @@ msgstr "Titre du carnet :"
msgid "Add or remove tags:"
msgstr "Modifier les étiquettes :"
msgid "Separate each tag by a comma."
msgstr "Séparez chaque étiquette par une virgule."
msgid "Rename notebook:"
msgstr "Renommer le carnet :"
@@ -973,8 +1011,8 @@ msgstr "Certains objets ne peuvent être synchronisés."
msgid "View them now"
msgstr "Les voir maintenant"
msgid "Some items cannot be decrypted."
msgstr "Certains objets ne peuvent être déchiffrés."
msgid "One or more master keys need a password."
msgstr "L'une des clefs maîtres requiert un mot de passe."
msgid "Set the password"
msgstr "Définir le mot de passe"
@@ -995,9 +1033,34 @@ msgstr "Lieu"
msgid "URL"
msgstr "URL"
msgid "Note History"
msgstr "Historique des notes"
msgid "Previous versions of this note"
msgstr "Versions précédentes de cette note"
msgid "Note properties"
msgstr "Propriétés de la note"
#, javascript-format
msgid "The note \"%s\" has been successfully restored to the notebook \"%s\"."
msgstr "La note \"%s\" a été restaurée dans le carnet \"%s\"."
msgid "This note has no history"
msgstr "Cette note n'a pas d'historique"
msgid "Restore"
msgstr "Restaurer"
#, javascript-format
msgid ""
"Click \"%s\" to restore the note. It will be copied in the notebook named "
"\"%s\". The current version of the note will not be replaced or modified."
msgstr ""
"Cliquez sur \"%s\" pour restaurer cette note. Elle sera copiée dans le "
"carnet \"%s\". La version actuelle de la note ne sera pas replacée ou "
"modifiée."
msgid "Open..."
msgstr "Ouvrir..."
@@ -1049,9 +1112,6 @@ msgstr "Insérer lien"
msgid "Attach file"
msgstr "Attacher un fichier"
msgid "Tags"
msgstr "Étiquettes"
msgid "Set alarm"
msgstr "Régler alarme"
@@ -1062,9 +1122,6 @@ msgstr "Dans : %s"
msgid "Hyperlink"
msgstr "Lien"
msgid "Code"
msgstr "Code"
msgid "Numbered List"
msgstr "Liste numérotée"
@@ -1120,8 +1177,19 @@ 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 ?"
@@ -1132,9 +1200,6 @@ msgstr "Supprimer"
msgid "Rename"
msgstr "Renommer"
msgid "Synchronise"
msgstr "Synchroniser"
msgid "Notebooks"
msgstr "Carnets"
@@ -1143,13 +1208,16 @@ msgid "Decrypting items: %d/%d"
msgstr "Déchiffrement des objets : %d/%d"
#, javascript-format
msgid "Fetching resources: %d"
msgstr "Tél. ressources : %d"
msgid "Fetching resources: %d/%d"
msgstr "Tél. ressources : %d/%d"
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 "Retry"
msgstr "Réessayer"
msgid "Add or remove tags"
msgstr "Gérer les étiquettes"
@@ -1180,6 +1248,16 @@ msgstr "Supprimer note \"%s\" ?"
msgid "Delete these %d notes?"
msgstr "Supprimer ces %d notes ?"
msgid ""
"Type a note title to jump to it. Or type # followed by a tag name, or @ "
"followed by a notebook name."
msgstr ""
"Entrez le titre d’une note, ou entrez # suivit du nom d’une étiquette, ou @ "
"suivit du nom d’un carnet."
msgid "Goto Anything..."
msgstr "Navigation rapide…"
#, javascript-format
msgid "Usage: %s"
msgstr "Utilisation : %s"
@@ -1292,12 +1370,22 @@ msgstr "En cours"
msgid "Synchronisation is already in progress. State: %s"
msgstr "La synchronisation est déjà en cours. État : %s"
msgid ""
"Unknown item type downloaded - please upgrade Joplin to the latest version"
msgstr "Objet inconnu téléchargé - veuillez mettre Joplin à jour"
msgid "Encrypted"
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"
@@ -1308,12 +1396,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"
@@ -1328,6 +1410,73 @@ msgstr "Impossible de copier la note vers le carnet \"%s\""
msgid "Cannot move note to \"%s\" notebook"
msgstr "Impossible de déplacer la note vers le carnet \"%s\""
#, javascript-format
msgid ""
"Attention: If you change this location, make sure you copy all your content "
"to it before syncing, otherwise all files will be removed! See the FAQ for "
"more details: %s"
msgstr ""
"Attention : si vous changez cet emplacement, copiez-y tout le contenu avant "
"de synchroniser, sinon tous les fichiers seront supprimés ! Consulter la FAQ "
"pour plus de détails : %s"
msgid "Synchronisation target"
msgstr "Cible de la synchronisation"
msgid ""
"The target to synchonise to. Each sync target may have additional parameters "
"which are named as `sync.NUM.NAME` (all documented below)."
msgstr ""
"La cible avec laquelle synchroniser. Chaque cible de synchronisation peut "
"avoir des paramètres supplémentaires sous le nom `sync.NUM.NOM` (documentés "
"ci-dessous)."
msgid "Directory to synchronise with (absolute path)"
msgstr "Répertoire avec lequel synchroniser (chemin absolu)"
msgid "Nextcloud WebDAV URL"
msgstr "Nextcloud : URL WebDAV"
msgid "Nextcloud username"
msgstr "Nextcloud : Nom utilisateur"
msgid "Nextcloud password"
msgstr "Nextcloud : Mot de passe"
msgid "WebDAV URL"
msgstr "WebDAV : URL"
msgid "WebDAV username"
msgstr "WebDAV : Nom utilisateur"
msgid "WebDAV password"
msgstr "WebDAV : Mot de passe"
msgid "Attachment download behaviour"
msgstr "Téléchargement des ressources"
msgid ""
"In \"Manual\" mode, attachments are downloaded only when you click on them. "
"In \"Auto\", they are downloaded when you open the note. In \"Always\", all "
"the attachments are downloaded whether you open the note or not."
msgstr ""
"En mode \"manuel\", les ressources sont téléchargées uniquement lorsque vous "
"cliquez dessus. En mode \"auto\", elles sont téléchargées lorsque vous "
"ouvrez la note. En mode \"toujours\", toutes les ressources sont "
"téléchargées, que vous ayez ouvert la note ou pas."
msgid "Always"
msgstr "Toujours"
msgid "Manual"
msgstr "Manuel"
msgid "Auto"
msgstr "Auto"
msgid "Max concurrent connections"
msgstr "Nombre maxi de connections simultanées"
msgid "Language"
msgstr "Langue"
@@ -1358,6 +1507,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"
@@ -1373,6 +1525,42 @@ msgstr "Curseur sur corps du message"
msgid "When creating a new note:"
msgstr "Lors de la création d'une note :"
msgid "Enable soft breaks"
msgstr "Activer retours à la ligne \"doux\""
msgid "Enable math expressions"
msgstr "Activer les expressions mathématiques"
msgid "Enable ==mark== syntax"
msgstr "Activer la syntaxe pour ==surligner=="
msgid "Enable footnotes"
msgstr "Activer les notes de bas de page"
msgid "Enable table of contents extension"
msgstr "Activer la table des matières"
msgid "Enable ~sub~ syntax"
msgstr "Activer la syntaxe ~indice~"
msgid "Enable ^sup^ syntax"
msgstr "Activer la syntaxe ^exposant^"
msgid "Enable deflist syntax"
msgstr "Activer les listes de définitions"
msgid "Enable abbreviation syntax"
msgstr "Activer la syntaxe pour abréviations"
msgid "Enable markdown emoji"
msgstr "Activer la syntaxe émoji"
msgid "Enable ++insert++ syntax"
msgstr "Activer la syntaxe ++insertion++"
msgid "Enable multimarkdown table extension"
msgstr "Activer les tables multi-markdown"
msgid "Show tray icon"
msgstr "Afficher l'icône dans la zone de notifications"
@@ -1443,58 +1631,6 @@ msgstr ""
"La commande de l'éditeur de texte (peut inclure des options) pour ouvrir et "
"modifier les notes. Si non-spécifiée, elle sera détectée automatiquement."
msgid "Show advanced options"
msgstr "Montrer les options avancées"
msgid "Synchronisation target"
msgstr "Cible de la synchronisation"
msgid ""
"The target to synchonise to. Each sync target may have additional parameters "
"which are named as `sync.NUM.NAME` (all documented below)."
msgstr ""
"La cible avec laquelle synchroniser. Chaque cible de synchronisation peut "
"avoir des paramètres supplémentaires sous le nom `sync.NUM.NOM` (documentés "
"ci-dessous)."
msgid "Directory to synchronise with (absolute path)"
msgstr "Répertoire avec lequel synchroniser (chemin absolu)"
msgid ""
"The path to synchronise with when file system synchronisation is enabled. "
"See `sync.target`."
msgstr ""
"Le chemin du répertoire avec lequel synchroniser lorsque la synchronisation "
"par système de fichier est activée. Voir `sync.target`."
msgid "Nextcloud WebDAV URL"
msgstr "Nextcloud : URL WebDAV"
#, javascript-format
msgid ""
"Attention: If you change this location, make sure you copy all your content "
"to it before syncing, otherwise all files will be removed! See the FAQ for "
"more details: %s"
msgstr ""
"Attention : si vous changez cet emplacement, copiez-y tout le contenu avant "
"de synchroniser, sinon tous les fichiers seront supprimés ! Consulter la FAQ "
"pour plus de détails : %s"
msgid "Nextcloud username"
msgstr "Nextcloud : Nom utilisateur"
msgid "Nextcloud password"
msgstr "Nextcloud : Mot de passe"
msgid "WebDAV URL"
msgstr "WebDAV : URL"
msgid "WebDAV username"
msgstr "WebDAV : Nom utilisateur"
msgid "WebDAV password"
msgstr "WebDAV : Mot de passe"
msgid "Custom TLS certificates"
msgstr "Certificats TLS personnalisés"
@@ -1513,6 +1649,19 @@ msgstr ""
msgid "Ignore TLS certificate errors"
msgstr "Ignorer les erreurs de certificats TLS"
msgid "Enable note history"
msgstr "Activer l'historique des notes"
msgid "days"
msgstr "jours"
#, javascript-format
msgid "%d days"
msgstr "%d jours"
msgid "Keep note history for"
msgstr "Garder l'historique des notes pour"
#, javascript-format
msgid "Invalid option value: \"%s\". Possible values are: %s."
msgstr "Option invalide: \"%s\". Les valeurs possibles sont : %s."
@@ -1529,6 +1678,9 @@ msgstr "Apparence"
msgid "Note"
msgstr "Note"
msgid "Plugins"
msgstr "Modules"
msgid "Application"
msgstr "Application"
@@ -1551,6 +1703,9 @@ msgstr "Fichiers d'export Evernote"
msgid "Json Export Directory"
msgstr "Dossier d'export JSON"
msgid "File"
msgstr "Fichier"
msgid "Directory"
msgstr "Dossier"
@@ -1576,13 +1731,12 @@ msgstr "Il n'y a pas de données à exporter."
msgid "Please specify the notebook where the notes should be imported to."
msgstr "Veuillez sélectionner le carnet où les notes doivent être importées."
msgid "Restored Notes"
msgstr "Notes restaurées"
msgid "Items that cannot be synchronised"
msgstr "Objets qui ne peuvent pas être synchronisés"
#, javascript-format
msgid "%s (%s): %s"
msgstr "%s (%s) : %s"
msgid ""
"These items will remain on the device but will not be uploaded to the sync "
"target. In order to find these items, either search for the title or the ID "
@@ -1592,6 +1746,26 @@ msgstr ""
"de la synchronisation. Pour trouver ces objets, faite une recherche sur le "
"titre ou l'identifiant de l'objet (affiché ci-dessus entre parenthèses)."
#, javascript-format
msgid "%s (%s) could not be uploaded: %s"
msgstr "%s (%s) n'a pas pu être envoyé : %s"
#, javascript-format
msgid "Item \"%s\" could not be downloaded: %s"
msgstr "L'objet \"%s\" n'a pas pu être téléchargé : %s"
msgid "Items that cannot be decrypted"
msgstr "Objets qui ne peuvent pas être déchiffrés"
msgid ""
"Joplin failed to decrypt these items multiple times, possibly because they "
"are corrupted or too large. These items will remain on the device but Joplin "
"will no longer attempt to decrypt them."
msgstr ""
"Joplin n'a pas pu déchiffrer ces objets à plusieurs reprises, peut-être "
"parce qu'ils sont corrompus ou trop larges. Ces objets vont rester sur "
"l'appareil mais Joplin n'essayera plus de les déchiffrer."
msgid "Sync status (synced items / total items)"
msgstr "Status de la synchronisation (objets synchro. / total)"
@@ -1639,18 +1813,6 @@ msgstr ""
msgid "Delete these notes?"
msgstr "Supprimer ces notes ?"
msgid "Log"
msgstr "Journal"
msgid "Export Debug Report"
msgstr "Exporter rapport de débogage"
msgid "Encryption Config"
msgstr "Config chiffrement"
msgid "Configuration"
msgstr "Configuration"
msgid "Move to notebook..."
msgstr "Déplacer vers..."
@@ -1673,8 +1835,21 @@ msgstr "Sélectionner date"
msgid "Confirm"
msgstr "Confirmer"
msgid "Cancel synchronisation"
msgstr "Annuler synchronisation"
#, javascript-format
msgid "Notebook: %s"
msgstr "Carnet : %s"
msgid "Encrypted notebooks cannot be renamed"
msgstr "Les carnets chiffrés ne peuvent être renommés"
msgid "New Notebook"
msgstr "Nouveau carnet"
msgid "Configuration"
msgstr "Configuration"
msgid "All notes"
msgstr "Toutes les notes"
msgid "Checking... Please wait."
msgstr "Vérification... Veuillez attendre."
@@ -1716,6 +1891,53 @@ msgstr "Nouvelles étiquettes :"
msgid "Type new tags or select from list"
msgstr "Entrez de nouvelles étiquettes ou sélectionnez de la liste"
msgid "Warning"
msgstr "Avertissement"
msgid ""
"In order to use file system synchronization your permission to write to "
"external storage is required."
msgstr ""
"Pour utiliser la synchronisation par système de fichiers, votre autorisation "
"pour écrire sur le stockage externe est requise."
msgid "Information"
msgstr "Information"
msgid "Encryption Config"
msgstr "Config chiffrement"
msgid "Tools"
msgstr "Outils"
msgid "Sync Status"
msgstr "État synchronisation"
msgid "Log"
msgstr "Journal"
msgid "Creating report..."
msgstr "Création du rapport..."
msgid "Export Debug Report"
msgstr "Exporter rapport de débogage"
msgid "Fixing search index..."
msgstr "Correction de l'index..."
msgid "Fix search index"
msgstr "Corriger index de recherche"
msgid ""
"Use this to rebuild the search index if there is a problem with search. It "
"may take some times depending on the number of notes."
msgstr ""
"Utilisez ceci pour corriger l'index du moteur de recherche en cas de "
"problème. Cela peut prendre assez longtemps selon le nombre de notes."
msgid "More information"
msgstr "Plus d'information"
msgid ""
"To work correctly, the app needs the following permissions. Please enable "
"them in your phone settings, in Apps > Joplin > Permissions"
@@ -1741,10 +1963,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"
@@ -1783,6 +2001,9 @@ msgstr "Ce carnet n'a pas pu être sauvegardé : %s"
msgid "Edit notebook"
msgstr "Éditer le carnet"
msgid "Enter notebook title"
msgstr "Entrez le titre du carnet"
msgid "Show all"
msgstr "Afficher tous"
@@ -1807,10 +2028,30 @@ msgid "The Joplin mobile app does not currently support this type of link: %s"
msgstr ""
"L'application mobile Joplin ne gère pas pour l'instant ce type de lien : %s"
#, javascript-format
msgid "Links with protocol \"%s\" are not supported"
msgstr "Le schéma d'URI \"%s\" n'est pas supporté"
#, javascript-format
msgid "Unsupported image type: %s"
msgstr "Type d'image non géré : %s"
#, javascript-format
msgid "Updated: %s"
msgstr "Mis à jour : %s"
msgid "View on map"
msgstr "Voir sur carte"
msgid "Go to source URL"
msgstr "Aller à l'URL source"
msgid "Attach..."
msgstr "Joindre..."
msgid "Choose an option"
msgstr "Choisissez une option"
msgid "Take photo"
msgstr "Prendre une photo"
@@ -1829,20 +2070,17 @@ msgstr "Convertir en note"
msgid "Convert to todo"
msgstr "Convertir en tâche"
msgid "Hide metadata"
msgstr "Cacher les métadonnées"
msgid "Properties"
msgstr "Propriétés"
msgid "Show metadata"
msgstr "Voir métadonnées"
msgid "Add body"
msgstr "Ajoutez le contenu"
msgid "View on map"
msgstr "Voir sur carte"
msgid "Edit"
msgstr "Édition"
msgid "Go to source URL"
msgstr "Aller à l'URL source"
msgid "Delete notebook"
msgstr "Supprimer le carnet"
msgid "Add title"
msgstr "Ajoutez le titre"
msgid "Login with OneDrive"
msgstr "Se connecter à OneDrive"
@@ -1850,23 +2088,68 @@ msgstr "Se connecter à OneDrive"
msgid "Search"
msgstr "Chercher"
msgid ""
"Click on the (+) button to create a new note or notebook. Click on the side "
"menu to access your existing notebooks."
msgstr ""
"Appuyez sur le bouton (+) pour créer une nouvelle note ou carnet. Ouvrez le "
"menu latéral pour accéder à vos carnets."
#~ msgid ""
#~ "Joplin does not have permission to access \"%s\". Either choose a "
#~ "different sync target, or give Joplin the \"Storage\" permission."
#~ msgstr ""
#~ "Joplin ne peut pas accéder au dossier \"%s\". Choisissez une autre cible "
#~ "de synchronisation, ou donnez à Joplin l'autorisation \"Stockage\"."
msgid "You currently have no notebook. Create one by clicking on (+) button."
msgstr ""
"Vous n'avez pour l'instant pas de carnets. Créez-en un en pressant le bouton "
"(+)."
#~ msgid "Permission to write to external storage"
#~ msgstr "Autorisation d'écrire sur le stockage externe"
msgid "Welcome"
msgstr "Bienvenue"
#~ msgid "Cancel synchronisation"
#~ msgstr "Annuler synchronisation"
#~ msgid "Delete notes?"
#~ msgstr "Supprimer les notes ?"
#~ msgid "Hide metadata"
#~ msgstr "Cacher les métadonnées"
#~ msgid "Show metadata"
#~ msgstr "Voir métadonnées"
#~ msgid "Delete notebook"
#~ msgstr "Supprimer le carnet"
#~ msgid ""
#~ "Click on the (+) button to create a new note or notebook. Click on the "
#~ "side menu to access your existing notebooks."
#~ msgstr ""
#~ "Appuyez sur le bouton (+) pour créer une nouvelle note ou carnet. Ouvrez "
#~ "le menu latéral pour accéder à vos carnets."
#~ msgid ""
#~ "You currently have no notebook. Create one by clicking on (+) button."
#~ msgstr ""
#~ "Vous n'avez pour l'instant pas de carnets. Créez-en un en pressant le "
#~ "bouton (+)."
#~ msgid "Welcome"
#~ msgstr "Bienvenue"
#~ msgid "Separate each tag by a comma."
#~ msgstr "Séparez chaque étiquette par une virgule."
#~ msgid "Some items cannot be decrypted."
#~ msgstr "Certains objets ne peuvent être déchiffrés."
#~ msgid "%s (%s): %s"
#~ msgstr "%s (%s) : %s"
#~ msgid "Table of contents"
#~ msgstr "Table des matières"
#~ msgid ""
#~ "The path to synchronise with when file system synchronisation is enabled. "
#~ "See `sync.target`."
#~ msgstr ""
#~ "Le chemin du répertoire avec lequel synchroniser lorsque la "
#~ "synchronisation par système de fichier est activée. Voir `sync.target`."
#~ msgid "Joplin v%s"
#~ msgstr "Joplin v%s"
#~ msgid "Remove?"
#~ msgstr "Supprimer ?"
#~ msgid "State: %s."
#~ msgstr "État : %s."

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»."
@@ -597,8 +598,8 @@ msgstr "Importando de «%s» como formato «%s». Agarde..."
msgid "PDF File"
msgstr "Ficheiro PDF"
msgid "File"
msgstr "Ficheiro"
msgid "Synchronisation status"
msgstr "Estado da sincronización"
msgid "New note"
msgstr "Nova nota"
@@ -609,14 +610,66 @@ msgstr "Nova tarefa"
msgid "New notebook"
msgstr "Novo caderno"
msgid "Print"
msgstr "Imprimir"
msgid "General Options"
msgstr "Opcións xerais"
msgid "Encryption options"
msgstr "Opcións de cifrado"
msgid "Web clipper options"
msgstr ""
msgid "Create note from template"
msgstr ""
msgid "Create to-do from template"
msgstr ""
msgid "Insert template"
msgstr ""
#, fuzzy
msgid "Open template directory"
msgstr "Cartafol de exportación do Joplin"
msgid "Refresh templates"
msgstr ""
#, fuzzy, javascript-format
msgid "Revision: %s (%s)"
msgstr "%s %s (%s)"
#, javascript-format
msgid "%s %s (%s, %s)"
msgstr "%s %s (%s, %s)"
#, fuzzy
msgid "&File"
msgstr "Ficheiro"
msgid "About Joplin"
msgstr "Sobre o Joplin"
msgid "Preferences..."
msgstr ""
msgid "Check for updates..."
msgstr "Buscar actualizacións…"
msgid "Templates"
msgstr ""
msgid "Import"
msgstr "Importar"
msgid "Export"
msgstr "Exportar"
msgid "Print"
msgstr "Imprimir"
msgid "Synchronise"
msgstr "Sincronizar"
#, javascript-format
msgid "Hide %s"
@@ -625,7 +678,11 @@ msgstr "Ocultar %s"
msgid "Quit"
msgstr "Saír"
msgid "Edit"
msgid "Close Window"
msgstr ""
#, fuzzy
msgid "&Edit"
msgstr "Edtar"
msgid "Copy"
@@ -650,12 +707,18 @@ msgstr ""
msgid "Link"
msgstr ""
msgid "Code"
msgstr ""
msgid "Insert Date Time"
msgstr ""
msgid "Edit in external editor"
msgstr ""
msgid "Tags"
msgstr "Etiquetas"
msgid "Search in all the notes"
msgstr "Buscar en todas as notas"
@@ -663,7 +726,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"
@@ -676,22 +740,12 @@ msgstr "Cambiar a disposición do editor"
msgid "Focus"
msgstr "Focar no corpo"
msgid "Tools"
#, fuzzy
msgid "&Tools"
msgstr "Ferramentas"
msgid "Synchronisation status"
msgstr "Estado da sincronización"
msgid "Web clipper options"
msgstr ""
msgid "Encryption options"
msgstr "Opcións de cifrado"
msgid "General Options"
msgstr "Opcións xerais"
msgid "Help"
#, fuzzy
msgid "&Help"
msgstr "Axuda"
msgid "Website and documentation"
@@ -700,15 +754,8 @@ msgstr "Sitio web e documentación"
msgid "Make a donation"
msgstr "Doar"
msgid "Check for updates..."
msgstr "Buscar actualizacións…"
msgid "About Joplin"
msgstr "Sobre o Joplin"
#, javascript-format
msgid "%s %s (%s, %s)"
msgstr "%s %s (%s, %s)"
msgid "Toggle development tools"
msgstr ""
#, javascript-format
msgid "Open %s"
@@ -734,11 +781,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"
@@ -812,12 +859,12 @@ msgstr ""
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 "Browse..."
msgstr ""
msgid "Apply"
msgstr ""
@@ -933,9 +980,6 @@ msgstr "Título do caderno:"
msgid "Add or remove tags:"
msgstr "Engadir ou eliminar etiquetas:"
msgid "Separate each tag by a comma."
msgstr "Separar cada etiqueta por unha coma."
msgid "Rename notebook:"
msgstr "Renomear caderno:"
@@ -958,8 +1002,9 @@ msgstr "Non é posíbel sincronizar algúns elementos."
msgid "View them now"
msgstr "Visualizar agora"
msgid "Some items cannot be decrypted."
msgstr "Non é posíbel descifrar algúns elementos."
#, fuzzy
msgid "One or more master keys need a password."
msgstr "Introducir contrasinal mestre:"
msgid "Set the password"
msgstr "Estabelecer un contrasinal"
@@ -977,9 +1022,33 @@ msgstr ""
msgid "URL"
msgstr ""
#, fuzzy
msgid "Note History"
msgstr "Cadernos"
msgid "Previous versions of this note"
msgstr ""
msgid "Note properties"
msgstr ""
#, javascript-format
msgid "The note \"%s\" has been successfully restored to the notebook \"%s\"."
msgstr ""
#, fuzzy
msgid "This note has no history"
msgstr "Esta nota foi modificada:"
msgid "Restore"
msgstr ""
#, javascript-format
msgid ""
"Click \"%s\" to restore the note. It will be copied in the notebook named "
"\"%s\". The current version of the note will not be replaced or modified."
msgstr ""
msgid "Open..."
msgstr "Abrir…"
@@ -1029,9 +1098,6 @@ msgstr ""
msgid "Attach file"
msgstr "Anexar un ficheiro"
msgid "Tags"
msgstr "Etiquetas"
msgid "Set alarm"
msgstr "Estabelecer alarma"
@@ -1042,9 +1108,6 @@ msgstr "%s: %s"
msgid "Hyperlink"
msgstr ""
msgid "Code"
msgstr ""
msgid "Numbered List"
msgstr ""
@@ -1102,7 +1165,16 @@ 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?"
@@ -1114,23 +1186,23 @@ msgstr "Eliminar"
msgid "Rename"
msgstr "Renomear"
msgid "Synchronise"
msgstr "Sincronizar"
msgid "Notebooks"
msgstr "Cadernos"
#, fuzzy, javascript-format
msgid "Decrypting items: %d/%d"
msgstr "Elementos obtidos: %d/%d."
msgstr "Elementos obtidos: %d/%d"
#, fuzzy, javascript-format
msgid "Fetching resources: %d"
msgstr "Recursos: %d."
msgid "Fetching resources: %d/%d"
msgstr "Recursos: %d/%d"
msgid "Please select where the sync status should be exported to"
msgstr "Seleccione onde exportar o estado da sincronización"
msgid "Retry"
msgstr ""
msgid "Add or remove tags"
msgstr "Engadir ou eliminar etiquetas"
@@ -1165,6 +1237,14 @@ msgstr "Desexa eliminar as notas?"
msgid "Delete these %d notes?"
msgstr "Desexa eliminar estas notas?"
msgid ""
"Type a note title to jump to it. Or type # followed by a tag name, or @ "
"followed by a notebook name."
msgstr ""
msgid "Goto Anything..."
msgstr ""
#, javascript-format
msgid "Usage: %s"
msgstr "Uso: %s"
@@ -1277,12 +1357,24 @@ msgstr "En proceso"
msgid "Synchronisation is already in progress. State: %s"
msgstr "A sincronización xa está en proceso. Estado: %s"
msgid ""
"Unknown item type downloaded - please upgrade Joplin to the latest version"
msgstr ""
msgid "Encrypted"
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"
@@ -1294,14 +1386,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."
@@ -1317,6 +1401,65 @@ msgstr "Non é posíbel copiar a nota ao caderno «%s»"
msgid "Cannot move note to \"%s\" notebook"
msgstr "Non é posíbel mover a nota ao caderno «%s»"
#, javascript-format
msgid ""
"Attention: If you change this location, make sure you copy all your content "
"to it before syncing, otherwise all files will be removed! See the FAQ for "
"more details: %s"
msgstr ""
msgid "Synchronisation target"
msgstr "Destino da sincronización"
msgid ""
"The target to synchonise to. Each sync target may have additional parameters "
"which are named as `sync.NUM.NAME` (all documented below)."
msgstr ""
"Destino co que sincronizar. Cada destino da sincronización pode ter "
"parámetros adicionais que se chaman «sync.NUM.NAME» (documentados arriba)."
msgid "Directory to synchronise with (absolute path)"
msgstr "Cartafol a sincronizar con (ruta absoluta)"
msgid "Nextcloud WebDAV URL"
msgstr "URL de Nextcloud WebDAV"
msgid "Nextcloud username"
msgstr "Usuario de Nextcloud"
msgid "Nextcloud password"
msgstr "Contrasinal do Nextcloud"
msgid "WebDAV URL"
msgstr "URL do WebDAV"
msgid "WebDAV username"
msgstr "Usuario de WebDAV"
msgid "WebDAV password"
msgstr "Contrasinal do WebDAV"
msgid "Attachment download behaviour"
msgstr ""
msgid ""
"In \"Manual\" mode, attachments are downloaded only when you click on them. "
"In \"Auto\", they are downloaded when you open the note. In \"Always\", all "
"the attachments are downloaded whether you open the note or not."
msgstr ""
msgid "Always"
msgstr ""
msgid "Manual"
msgstr ""
msgid "Auto"
msgstr ""
msgid "Max concurrent connections"
msgstr ""
msgid "Language"
msgstr "Idioma"
@@ -1348,6 +1491,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"
@@ -1363,6 +1510,43 @@ msgstr "Focar no corpo"
msgid "When creating a new note:"
msgstr "Cando se crea unha nova nota:"
msgid "Enable soft breaks"
msgstr ""
#, fuzzy
msgid "Enable math expressions"
msgstr "Activar cifrado"
msgid "Enable ==mark== syntax"
msgstr ""
msgid "Enable footnotes"
msgstr ""
msgid "Enable table of contents extension"
msgstr ""
msgid "Enable ~sub~ syntax"
msgstr ""
msgid "Enable ^sup^ syntax"
msgstr ""
msgid "Enable deflist syntax"
msgstr ""
msgid "Enable abbreviation syntax"
msgstr ""
msgid "Enable markdown emoji"
msgstr ""
msgid "Enable ++insert++ syntax"
msgstr ""
msgid "Enable multimarkdown table extension"
msgstr ""
msgid "Show tray icon"
msgstr "Mostrar a icona na bandexa"
@@ -1433,54 +1617,6 @@ msgstr ""
"Editor a usar para abrir unha nota. Se non se indica ningún tentará detectar "
"automaticamente o editor predeterminado."
msgid "Show advanced options"
msgstr "Mostrar opcións avanzadas"
msgid "Synchronisation target"
msgstr "Destino da sincronización"
msgid ""
"The target to synchonise to. Each sync target may have additional parameters "
"which are named as `sync.NUM.NAME` (all documented below)."
msgstr ""
"Destino co que sincronizar. Cada destino da sincronización pode ter "
"parámetros adicionais que se chaman «sync.NUM.NAME» (documentados arriba)."
msgid "Directory to synchronise with (absolute path)"
msgstr "Cartafol a sincronizar con (ruta absoluta)"
msgid ""
"The path to synchronise with when file system synchronisation is enabled. "
"See `sync.target`."
msgstr ""
"Ruta para sincronizar cando estea activada a sincronización do sistema de "
"ficheiros. Vexa «sync.target»."
msgid "Nextcloud WebDAV URL"
msgstr "URL de Nextcloud WebDAV"
#, javascript-format
msgid ""
"Attention: If you change this location, make sure you copy all your content "
"to it before syncing, otherwise all files will be removed! See the FAQ for "
"more details: %s"
msgstr ""
msgid "Nextcloud username"
msgstr "Usuario de Nextcloud"
msgid "Nextcloud password"
msgstr "Contrasinal do Nextcloud"
msgid "WebDAV URL"
msgstr "URL do WebDAV"
msgid "WebDAV username"
msgstr "Usuario de WebDAV"
msgid "WebDAV password"
msgstr "Contrasinal do WebDAV"
msgid "Custom TLS certificates"
msgstr ""
@@ -1494,6 +1630,20 @@ msgstr ""
msgid "Ignore TLS certificate errors"
msgstr ""
#, fuzzy
msgid "Enable note history"
msgstr "Activar cifrado"
msgid "days"
msgstr ""
#, javascript-format
msgid "%d days"
msgstr ""
msgid "Keep note history for"
msgstr ""
#, javascript-format
msgid "Invalid option value: \"%s\". Possible values are: %s."
msgstr "Valor incorrecto de opción: «%s». Os valores posíbeis son: %s."
@@ -1513,6 +1663,9 @@ msgstr ""
msgid "Note"
msgstr "Cadernos"
msgid "Plugins"
msgstr ""
#, fuzzy
msgid "Application"
msgstr "Sae do aplicativo."
@@ -1537,6 +1690,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"
@@ -1562,13 +1718,12 @@ msgstr "Non hai datos para exportar."
msgid "Please specify the notebook where the notes should be imported to."
msgstr "Indique o caderno ao que importar as notas."
msgid "Restored Notes"
msgstr ""
msgid "Items that cannot be synchronised"
msgstr "Elementos que non se poden sincronizar"
#, javascript-format
msgid "%s (%s): %s"
msgstr "%s (%s): %s"
msgid ""
"These items will remain on the device but will not be uploaded to the sync "
"target. In order to find these items, either search for the title or the ID "
@@ -1578,6 +1733,24 @@ msgstr ""
"de sincronización. Co fin de atopar estes elementos pode buscalos polo "
"título ou polo ID (mostrados entre corchetes arriba)."
#, fuzzy, javascript-format
msgid "%s (%s) could not be uploaded: %s"
msgstr "Non foi posíbel gardar o caderno: %s"
#, fuzzy, javascript-format
msgid "Item \"%s\" could not be downloaded: %s"
msgstr "Non foi posíbel gardar o caderno: %s"
#, fuzzy
msgid "Items that cannot be decrypted"
msgstr "Elementos que non se poden sincronizar"
msgid ""
"Joplin failed to decrypt these items multiple times, possibly because they "
"are corrupted or too large. These items will remain on the device but Joplin "
"will no longer attempt to decrypt them."
msgstr ""
msgid "Sync status (synced items / total items)"
msgstr "Estado da sincronización (elementos sincronizados / elementos totais)"
@@ -1623,18 +1796,6 @@ msgstr "Non ten notas actualmente. Cree unha premendo no botón (+)."
msgid "Delete these notes?"
msgstr "Desexa eliminar estas notas?"
msgid "Log"
msgstr "Rexistro"
msgid "Export Debug Report"
msgstr "Exportar informe de depuración"
msgid "Encryption Config"
msgstr "Configuración de cifrado"
msgid "Configuration"
msgstr "Configuración"
msgid "Move to notebook..."
msgstr "Mover para o caderno..."
@@ -1659,8 +1820,24 @@ msgstr "Seleccionar data"
msgid "Confirm"
msgstr "Confirmar"
msgid "Cancel synchronisation"
msgstr "Cancelar sincronización"
#, fuzzy, javascript-format
msgid "Notebook: %s"
msgstr "Cadernos"
#, fuzzy
msgid "Encrypted notebooks cannot be renamed"
msgstr "Non é posíbel modificar elementos cifrados"
#, fuzzy
msgid "New Notebook"
msgstr "Novo caderno"
msgid "Configuration"
msgstr "Configuración"
#, fuzzy
msgid "All notes"
msgstr "nota"
#, fuzzy
msgid "Checking... Please wait."
@@ -1698,6 +1875,54 @@ msgstr "Etiquetas novas:"
msgid "Type new tags or select from list"
msgstr "Escriba etiquetas novas ou seleccione da lista"
msgid "Warning"
msgstr ""
msgid ""
"In order to use file system synchronization your permission to write to "
"external storage is required."
msgstr ""
#, fuzzy
msgid "Information"
msgstr "Configuración"
msgid "Encryption Config"
msgstr "Configuración de cifrado"
#, fuzzy
msgid "Tools"
msgstr "Ferramentas"
#, fuzzy
msgid "Sync Status"
msgstr "Estado"
msgid "Log"
msgstr "Rexistro"
#, fuzzy
msgid "Creating report..."
msgstr "Criando novo %s..."
msgid "Export Debug Report"
msgstr "Exportar informe de depuración"
msgid "Fixing search index..."
msgstr ""
msgid "Fix search index"
msgstr ""
msgid ""
"Use this to rebuild the search index if there is a problem with search. It "
"may take some times depending on the number of notes."
msgstr ""
#, fuzzy
msgid "More information"
msgstr "Configuración"
msgid ""
"To work correctly, the app needs the following permissions. Please enable "
"them in your phone settings, in Apps > Joplin > Permissions"
@@ -1717,10 +1942,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 ""
@@ -1760,6 +1981,10 @@ msgstr "Non foi posíbel gardar o caderno: %s"
msgid "Edit notebook"
msgstr "Editar caderno"
#, fuzzy
msgid "Enter notebook title"
msgstr "Título do caderno:"
msgid "Show all"
msgstr "Mostrar todo"
@@ -1783,10 +2008,32 @@ msgstr ""
msgid "The Joplin mobile app does not currently support this type of link: %s"
msgstr ""
#, javascript-format
msgid "Links with protocol \"%s\" are not supported"
msgstr ""
#, javascript-format
msgid "Unsupported image type: %s"
msgstr "Tipo de imaxe incompatíbel: %s"
#, fuzzy, javascript-format
msgid "Updated: %s"
msgstr "Actualizado: %d."
msgid "View on map"
msgstr "Ver no mapa"
msgid "Go to source URL"
msgstr ""
#, fuzzy
msgid "Attach..."
msgstr "Buscar…"
#, fuzzy
msgid "Choose an option"
msgstr "Mostrar opcións avanzadas"
#, fuzzy
msgid "Take photo"
msgstr "Anexar foto"
@@ -1806,20 +2053,18 @@ msgstr "Converter para nota"
msgid "Convert to todo"
msgstr "Converter para tarefa"
msgid "Hide metadata"
msgstr "Ocultar metadados"
msgid "Show metadata"
msgstr "Mostrar metadatos"
msgid "View on map"
msgstr "Ver no mapa"
msgid "Go to source URL"
msgid "Properties"
msgstr ""
msgid "Delete notebook"
msgstr "Eliminar caderno"
msgid "Add body"
msgstr ""
msgid "Edit"
msgstr "Edtar"
#, fuzzy
msgid "Add title"
msgstr "Sen título"
msgid "Login with OneDrive"
msgstr "Acceder con OneDrive"
@@ -1827,18 +2072,51 @@ msgstr "Acceder con OneDrive"
msgid "Search"
msgstr "Buscar"
msgid ""
"Click on the (+) button to create a new note or notebook. Click on the side "
"menu to access your existing notebooks."
msgstr ""
"Prema no botón (+) para crear unha nota ou caderno. Prema no menú lateral "
"para acceder aos cadernos existentes."
#~ msgid "Cancel synchronisation"
#~ msgstr "Cancelar sincronización"
msgid "You currently have no notebook. Create one by clicking on (+) button."
msgstr "Non ten cadernos actualmente. Cree un premendo no botón (+)."
#~ msgid "Hide metadata"
#~ msgstr "Ocultar metadados"
msgid "Welcome"
msgstr "Benvido/a"
#~ msgid "Show metadata"
#~ msgstr "Mostrar metadatos"
#~ msgid "Delete notebook"
#~ msgstr "Eliminar caderno"
#~ msgid ""
#~ "Click on the (+) button to create a new note or notebook. Click on the "
#~ "side menu to access your existing notebooks."
#~ msgstr ""
#~ "Prema no botón (+) para crear unha nota ou caderno. Prema no menú lateral "
#~ "para acceder aos cadernos existentes."
#~ msgid ""
#~ "You currently have no notebook. Create one by clicking on (+) button."
#~ msgstr "Non ten cadernos actualmente. Cree un premendo no botón (+)."
#~ msgid "Welcome"
#~ msgstr "Benvido/a"
#~ msgid "Separate each tag by a comma."
#~ msgstr "Separar cada etiqueta por unha coma."
#~ msgid "Some items cannot be decrypted."
#~ msgstr "Non é posíbel descifrar algúns elementos."
#~ msgid "%s (%s): %s"
#~ msgstr "%s (%s): %s"
#~ msgid ""
#~ "The path to synchronise with when file system synchronisation is enabled. "
#~ "See `sync.target`."
#~ msgstr ""
#~ "Ruta para sincronizar cando estea activada a sincronización do sistema de "
#~ "ficheiros. Vexa «sync.target»."
#, 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:"
@@ -601,8 +601,8 @@ msgstr ""
msgid "PDF File"
msgstr "Datoteka"
msgid "File"
msgstr "Datoteka"
msgid "Synchronisation status"
msgstr "Status sinkronizacije"
msgid "New note"
msgstr "Nova bilješka"
@@ -613,6 +613,58 @@ msgstr "Novi zadatak"
msgid "New notebook"
msgstr "Nova bilježnica"
msgid "Print"
msgstr ""
#, fuzzy
msgid "General Options"
msgstr "Opcije"
msgid "Encryption options"
msgstr ""
msgid "Web clipper options"
msgstr ""
msgid "Create note from template"
msgstr ""
msgid "Create to-do from template"
msgstr ""
msgid "Insert template"
msgstr ""
msgid "Open template directory"
msgstr ""
msgid "Refresh templates"
msgstr ""
#, fuzzy, javascript-format
msgid "Revision: %s (%s)"
msgstr "%s %s (%s)"
#, javascript-format
msgid "%s %s (%s, %s)"
msgstr "%s %s (%s, %s)"
#, fuzzy
msgid "&File"
msgstr "Datoteka"
msgid "About Joplin"
msgstr "O Joplinu"
msgid "Preferences..."
msgstr ""
msgid "Check for updates..."
msgstr ""
msgid "Templates"
msgstr ""
msgid "Import"
msgstr "Uvoz"
@@ -620,8 +672,8 @@ msgstr "Uvoz"
msgid "Export"
msgstr "Uvoz"
msgid "Print"
msgstr ""
msgid "Synchronise"
msgstr "Sinkroniziraj"
#, javascript-format
msgid "Hide %s"
@@ -630,7 +682,11 @@ msgstr ""
msgid "Quit"
msgstr "Izađi"
msgid "Edit"
msgid "Close Window"
msgstr ""
#, fuzzy
msgid "&Edit"
msgstr "Uredi"
msgid "Copy"
@@ -655,12 +711,18 @@ msgstr ""
msgid "Link"
msgstr ""
msgid "Code"
msgstr ""
msgid "Insert Date Time"
msgstr ""
msgid "Edit in external editor"
msgstr ""
msgid "Tags"
msgstr "Oznake"
msgid "Search in all the notes"
msgstr "Pretraži u svim bilješkama"
@@ -668,7 +730,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"
@@ -681,23 +743,12 @@ msgstr ""
msgid "Focus"
msgstr "Naslov bilješke:"
msgid "Tools"
#, fuzzy
msgid "&Tools"
msgstr "Alati"
msgid "Synchronisation status"
msgstr "Status sinkronizacije"
msgid "Web clipper options"
msgstr ""
msgid "Encryption options"
msgstr ""
#, fuzzy
msgid "General Options"
msgstr "Opcije"
msgid "Help"
msgid "&Help"
msgstr "Pomoć"
msgid "Website and documentation"
@@ -707,16 +758,9 @@ msgstr "Website i dokumentacija"
msgid "Make a donation"
msgstr "Website i dokumentacija"
msgid "Check for updates..."
msgid "Toggle development tools"
msgstr ""
msgid "About Joplin"
msgstr "O Joplinu"
#, javascript-format
msgid "%s %s (%s, %s)"
msgstr "%s %s (%s, %s)"
#, fuzzy, javascript-format
msgid "Open %s"
msgstr "On %s: %s"
@@ -741,11 +785,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"
@@ -820,13 +864,13 @@ msgstr ""
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 "Browse..."
msgstr ""
msgid "Apply"
msgstr ""
@@ -931,9 +975,6 @@ msgstr "Naslov bilježnice:"
msgid "Add or remove tags:"
msgstr "Dodaj ili makni oznake:"
msgid "Separate each tag by a comma."
msgstr "Odvoji oznake zarezom."
msgid "Rename notebook:"
msgstr "Preimenuj bilježnicu:"
@@ -957,9 +998,8 @@ msgstr "Neke stavke se ne mogu sinkronizirati."
msgid "View them now"
msgstr "Pogledaj ih sada"
#, fuzzy
msgid "Some items cannot be decrypted."
msgstr "Neke stavke se ne mogu sinkronizirati."
msgid "One or more master keys need a password."
msgstr ""
msgid "Set the password"
msgstr ""
@@ -977,9 +1017,33 @@ msgstr ""
msgid "URL"
msgstr ""
#, fuzzy
msgid "Note History"
msgstr "Bilježnice"
msgid "Previous versions of this note"
msgstr ""
msgid "Note properties"
msgstr ""
#, javascript-format
msgid "The note \"%s\" has been successfully restored to the notebook \"%s\"."
msgstr ""
#, fuzzy
msgid "This note has no history"
msgstr "Bilješka je promijenjena:"
msgid "Restore"
msgstr ""
#, javascript-format
msgid ""
"Click \"%s\" to restore the note. It will be copied in the notebook named "
"\"%s\". The current version of the note will not be replaced or modified."
msgstr ""
msgid "Open..."
msgstr ""
@@ -1028,9 +1092,6 @@ msgstr ""
msgid "Attach file"
msgstr "Priloži datoteku"
msgid "Tags"
msgstr "Oznake"
msgid "Set alarm"
msgstr "Postavi upozorenje"
@@ -1041,9 +1102,6 @@ msgstr "%s: %s"
msgid "Hyperlink"
msgstr ""
msgid "Code"
msgstr ""
msgid "Numbered List"
msgstr ""
@@ -1103,7 +1161,16 @@ 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?"
@@ -1115,23 +1182,23 @@ msgstr "Obriši"
msgid "Rename"
msgstr "Preimenuj"
msgid "Synchronise"
msgstr "Sinkroniziraj"
msgid "Notebooks"
msgstr "Bilježnice"
#, fuzzy, javascript-format
msgid "Decrypting items: %d/%d"
msgstr "Stvorene lokalne stavke: %d."
msgstr "Stvorene lokalne stavke: %d/%d"
#, fuzzy, javascript-format
msgid "Fetching resources: %d"
msgstr "Resursi: %d."
msgid "Fetching resources: %d/%d"
msgstr "Resursi: %d/%d"
msgid "Please select where the sync status should be exported to"
msgstr "Odaberi lokaciju za izvoz statusa sinkronizacije"
msgid "Retry"
msgstr ""
msgid "Add or remove tags"
msgstr "Dodaj ili makni oznake"
@@ -1165,6 +1232,14 @@ msgstr "Obriši bilješke?"
msgid "Delete these %d notes?"
msgstr "Obriši ove bilješke?"
msgid ""
"Type a note title to jump to it. Or type # followed by a tag name, or @ "
"followed by a notebook name."
msgstr ""
msgid "Goto Anything..."
msgstr ""
#, javascript-format
msgid "Usage: %s"
msgstr "Korištenje: %s"
@@ -1275,6 +1350,10 @@ msgstr ""
msgid "Synchronisation is already in progress. State: %s"
msgstr "Sinkronizacija je već u toku. Stanje: %s"
msgid ""
"Unknown item type downloaded - please upgrade Joplin to the latest version"
msgstr ""
msgid "Encrypted"
msgstr ""
@@ -1282,6 +1361,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"
@@ -1293,14 +1380,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."
@@ -1316,6 +1395,63 @@ msgstr "Ne mogu kopirati bilješku u bilježnicu %s"
msgid "Cannot move note to \"%s\" notebook"
msgstr "Ne mogu premjestiti bilješku u bilježnicu %s"
#, javascript-format
msgid ""
"Attention: If you change this location, make sure you copy all your content "
"to it before syncing, otherwise all files will be removed! See the FAQ for "
"more details: %s"
msgstr ""
msgid "Synchronisation target"
msgstr "Sinkroniziraj sa"
msgid ""
"The target to synchonise to. Each sync target may have additional parameters "
"which are named as `sync.NUM.NAME` (all documented below)."
msgstr ""
msgid "Directory to synchronise with (absolute path)"
msgstr "Direktorij za sinkroniziranje (apsolutna putanja)"
msgid "Nextcloud WebDAV URL"
msgstr ""
msgid "Nextcloud username"
msgstr ""
msgid "Nextcloud password"
msgstr ""
msgid "WebDAV URL"
msgstr ""
msgid "WebDAV username"
msgstr ""
msgid "WebDAV password"
msgstr ""
msgid "Attachment download behaviour"
msgstr ""
msgid ""
"In \"Manual\" mode, attachments are downloaded only when you click on them. "
"In \"Auto\", they are downloaded when you open the note. In \"Always\", all "
"the attachments are downloaded whether you open the note or not."
msgstr ""
msgid "Always"
msgstr ""
msgid "Manual"
msgstr ""
msgid "Auto"
msgstr ""
msgid "Max concurrent connections"
msgstr ""
msgid "Language"
msgstr "Jezik"
@@ -1349,6 +1485,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"
@@ -1367,6 +1507,42 @@ msgstr ""
msgid "When creating a new note:"
msgstr "Stvara novu bilješku."
msgid "Enable soft breaks"
msgstr ""
msgid "Enable math expressions"
msgstr ""
msgid "Enable ==mark== syntax"
msgstr ""
msgid "Enable footnotes"
msgstr ""
msgid "Enable table of contents extension"
msgstr ""
msgid "Enable ~sub~ syntax"
msgstr ""
msgid "Enable ^sup^ syntax"
msgstr ""
msgid "Enable deflist syntax"
msgstr ""
msgid "Enable abbreviation syntax"
msgstr ""
msgid "Enable markdown emoji"
msgstr ""
msgid "Enable ++insert++ syntax"
msgstr ""
msgid "Enable multimarkdown table extension"
msgstr ""
msgid "Show tray icon"
msgstr ""
@@ -1434,52 +1610,6 @@ msgstr ""
"Program za uređivanje koji će biti korišten za uređivanje bilješki. Ako ni "
"jedan nije odabran, pokušati će se sa default programom."
msgid "Show advanced options"
msgstr "Prikaži napredne opcije"
msgid "Synchronisation target"
msgstr "Sinkroniziraj sa"
msgid ""
"The target to synchonise to. Each sync target may have additional parameters "
"which are named as `sync.NUM.NAME` (all documented below)."
msgstr ""
msgid "Directory to synchronise with (absolute path)"
msgstr "Direktorij za sinkroniziranje (apsolutna putanja)"
msgid ""
"The path to synchronise with when file system synchronisation is enabled. "
"See `sync.target`."
msgstr ""
"Putanja do direktorija za sinkronizaciju u slučaju kad je sinkronizacija sa "
"datotečnim sustavom omogućena. Vidi `sync.target`."
msgid "Nextcloud WebDAV URL"
msgstr ""
#, javascript-format
msgid ""
"Attention: If you change this location, make sure you copy all your content "
"to it before syncing, otherwise all files will be removed! See the FAQ for "
"more details: %s"
msgstr ""
msgid "Nextcloud username"
msgstr ""
msgid "Nextcloud password"
msgstr ""
msgid "WebDAV URL"
msgstr ""
msgid "WebDAV username"
msgstr ""
msgid "WebDAV password"
msgstr ""
msgid "Custom TLS certificates"
msgstr ""
@@ -1493,6 +1623,20 @@ msgstr ""
msgid "Ignore TLS certificate errors"
msgstr ""
#, fuzzy
msgid "Enable note history"
msgstr "Bilješka je promijenjena:"
msgid "days"
msgstr ""
#, javascript-format
msgid "%d days"
msgstr ""
msgid "Keep note history for"
msgstr ""
#, javascript-format
msgid "Invalid option value: \"%s\". Possible values are: %s."
msgstr "Nevažeća vrijednost: \"%s\". Moguće vrijednosti su: %s."
@@ -1512,6 +1656,9 @@ msgstr ""
msgid "Note"
msgstr "Bilježnice"
msgid "Plugins"
msgstr ""
#, fuzzy
msgid "Application"
msgstr "Izađi iz aplikacije."
@@ -1538,6 +1685,9 @@ msgstr "Evernote izvozne datoteke"
msgid "Json Export Directory"
msgstr "Evernote izvozne datoteke"
msgid "File"
msgstr "Datoteka"
msgid "Directory"
msgstr ""
@@ -1562,19 +1712,36 @@ msgstr ""
msgid "Please specify the notebook where the notes should be imported to."
msgstr "Odaberi lokaciju za izvoz statusa sinkronizacije"
msgid "Restored Notes"
msgstr ""
msgid "Items that cannot be synchronised"
msgstr "Stavke koje se ne mogu sinkronizirati"
#, fuzzy, javascript-format
msgid "%s (%s): %s"
msgstr "%s %s (%s)"
msgid ""
"These items will remain on the device but will not be uploaded to the sync "
"target. In order to find these items, either search for the title or the ID "
"(which is displayed in brackets above)."
msgstr ""
#, fuzzy, javascript-format
msgid "%s (%s) could not be uploaded: %s"
msgstr "Bilježnicu nije moguće snimiti: %s"
#, fuzzy, javascript-format
msgid "Item \"%s\" could not be downloaded: %s"
msgstr "Bilježnicu nije moguće snimiti: %s"
#, fuzzy
msgid "Items that cannot be decrypted"
msgstr "Stavke koje se ne mogu sinkronizirati"
msgid ""
"Joplin failed to decrypt these items multiple times, possibly because they "
"are corrupted or too large. These items will remain on the device but Joplin "
"will no longer attempt to decrypt them."
msgstr ""
msgid "Sync status (synced items / total items)"
msgstr "Status (sinkronizirane stavke / ukupni broj stavki)"
@@ -1620,18 +1787,6 @@ msgstr "Trenutno nema bilješki. Stvori novu klikom na (+) gumb."
msgid "Delete these notes?"
msgstr "Obriši ove bilješke?"
msgid "Log"
msgstr "Log"
msgid "Export Debug Report"
msgstr "Izvezi Debug izvještaj"
msgid "Encryption Config"
msgstr ""
msgid "Configuration"
msgstr "Konfiguracija"
msgid "Move to notebook..."
msgstr "Premjesti u bilježnicu..."
@@ -1656,8 +1811,24 @@ msgstr "Odaberi datum"
msgid "Confirm"
msgstr "Potvrdi"
msgid "Cancel synchronisation"
msgstr "Prekini sinkronizaciju"
#, fuzzy, javascript-format
msgid "Notebook: %s"
msgstr "Bilježnice"
#, fuzzy
msgid "Encrypted notebooks cannot be renamed"
msgstr "Neke stavke se ne mogu sinkronizirati."
#, fuzzy
msgid "New Notebook"
msgstr "Nova bilježnica"
msgid "Configuration"
msgstr "Konfiguracija"
#, fuzzy
msgid "All notes"
msgstr "Nova bilješka"
#, fuzzy
msgid "Checking... Please wait."
@@ -1695,6 +1866,54 @@ msgstr ""
msgid "Type new tags or select from list"
msgstr ""
msgid "Warning"
msgstr ""
msgid ""
"In order to use file system synchronization your permission to write to "
"external storage is required."
msgstr ""
#, fuzzy
msgid "Information"
msgstr "Konfiguracija"
msgid "Encryption Config"
msgstr ""
#, fuzzy
msgid "Tools"
msgstr "Alati"
#, fuzzy
msgid "Sync Status"
msgstr "Status"
msgid "Log"
msgstr "Log"
#, fuzzy
msgid "Creating report..."
msgstr "Uvozim bilješke..."
msgid "Export Debug Report"
msgstr "Izvezi Debug izvještaj"
msgid "Fixing search index..."
msgstr ""
msgid "Fix search index"
msgstr ""
msgid ""
"Use this to rebuild the search index if there is a problem with search. It "
"may take some times depending on the number of notes."
msgstr ""
#, fuzzy
msgid "More information"
msgstr "Konfiguracija"
msgid ""
"To work correctly, the app needs the following permissions. Please enable "
"them in your phone settings, in Apps > Joplin > Permissions"
@@ -1714,10 +1933,6 @@ msgstr ""
msgid "Joplin website"
msgstr ""
#, javascript-format
msgid "Joplin v%s"
msgstr ""
#, javascript-format
msgid "Database v%s"
msgstr ""
@@ -1759,6 +1974,10 @@ msgstr "Bilježnicu nije moguće snimiti: %s"
msgid "Edit notebook"
msgstr "Uredi bilježnicu"
#, fuzzy
msgid "Enter notebook title"
msgstr "Naslov bilježnice:"
msgid "Show all"
msgstr ""
@@ -1782,10 +2001,32 @@ msgstr ""
msgid "The Joplin mobile app does not currently support this type of link: %s"
msgstr ""
#, javascript-format
msgid "Links with protocol \"%s\" are not supported"
msgstr ""
#, javascript-format
msgid "Unsupported image type: %s"
msgstr "Nepodržana vrsta slike: %s"
#, fuzzy, javascript-format
msgid "Updated: %s"
msgstr "Ažurirano: %d."
msgid "View on map"
msgstr "Vidi na karti"
msgid "Go to source URL"
msgstr ""
#, fuzzy
msgid "Attach..."
msgstr "Traži"
#, fuzzy
msgid "Choose an option"
msgstr "Prikaži napredne opcije"
#, fuzzy
msgid "Take photo"
msgstr "Priloži sliku"
@@ -1805,20 +2046,18 @@ msgstr "Pretvori u bilješku"
msgid "Convert to todo"
msgstr "Pretvori u zadatak"
msgid "Hide metadata"
msgstr "Sakrij metapodatke"
msgid "Show metadata"
msgstr "Prikaži metapodatke"
msgid "View on map"
msgstr "Vidi na karti"
msgid "Go to source URL"
msgid "Properties"
msgstr ""
msgid "Delete notebook"
msgstr "Obriši bilježnicu"
msgid "Add body"
msgstr ""
msgid "Edit"
msgstr "Uredi"
#, fuzzy
msgid "Add title"
msgstr "Nenaslovljen"
msgid "Login with OneDrive"
msgstr "Prijavi se u OneDrive"
@@ -1826,18 +2065,49 @@ msgstr "Prijavi se u OneDrive"
msgid "Search"
msgstr "Traži"
msgid ""
"Click on the (+) button to create a new note or notebook. Click on the side "
"menu to access your existing notebooks."
msgstr ""
"Klikni (+) gumb za dodavanje nove bilješke ili bilježnice ili odaberi "
"postojeću bilježnicu iz izbornika."
#~ msgid "Cancel synchronisation"
#~ msgstr "Prekini sinkronizaciju"
msgid "You currently have no notebook. Create one by clicking on (+) button."
msgstr "Trenutno nemaš nijednu bilježnicu. Stvori novu klikom na (+) gumb."
#~ msgid "Hide metadata"
#~ msgstr "Sakrij metapodatke"
msgid "Welcome"
msgstr "Dobro došli"
#~ msgid "Show metadata"
#~ msgstr "Prikaži metapodatke"
#~ msgid "Delete notebook"
#~ msgstr "Obriši bilježnicu"
#~ msgid ""
#~ "Click on the (+) button to create a new note or notebook. Click on the "
#~ "side menu to access your existing notebooks."
#~ msgstr ""
#~ "Klikni (+) gumb za dodavanje nove bilješke ili bilježnice ili odaberi "
#~ "postojeću bilježnicu iz izbornika."
#~ msgid ""
#~ "You currently have no notebook. Create one by clicking on (+) button."
#~ msgstr "Trenutno nemaš nijednu bilježnicu. Stvori novu klikom na (+) gumb."
#~ msgid "Welcome"
#~ msgstr "Dobro došli"
#~ msgid "Separate each tag by a comma."
#~ msgstr "Odvoji oznake zarezom."
#, fuzzy
#~ msgid "Some items cannot be decrypted."
#~ msgstr "Neke stavke se ne mogu sinkronizirati."
#, fuzzy
#~ msgid "%s (%s): %s"
#~ msgstr "%s %s (%s)"
#~ msgid ""
#~ "The path to synchronise with when file system synchronisation is enabled. "
#~ "See `sync.target`."
#~ msgstr ""
#~ "Putanja do direktorija za sinkronizaciju u slučaju kad je sinkronizacija "
#~ "sa datotečnim sustavom omogućena. Vidi `sync.target`."
#, fuzzy
#~ msgid "State: %s."

File diff suppressed because it is too large Load Diff

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` です。"
@@ -592,8 +593,8 @@ msgstr ""
msgid "PDF File"
msgstr "PDF ファイル"
msgid "File"
msgstr "ファイル"
msgid "Synchronisation status"
msgstr "同期状況"
msgid "New note"
msgstr "新しいノート"
@@ -604,14 +605,67 @@ msgstr "新しいToDo"
msgid "New notebook"
msgstr "新しいノートブック"
msgid "Print"
msgstr "印刷"
msgid "General Options"
msgstr "全般のオプション"
msgid "Encryption options"
msgstr "暗号化のオプション"
msgid "Web clipper options"
msgstr "Webクリッパーのオプション"
msgid "Create note from template"
msgstr ""
msgid "Create to-do from template"
msgstr ""
#, fuzzy
msgid "Insert template"
msgstr "日付の入力"
#, fuzzy
msgid "Open template directory"
msgstr "Joplin エクスポートディレクトリ"
msgid "Refresh templates"
msgstr ""
#, fuzzy, javascript-format
msgid "Revision: %s (%s)"
msgstr "%s %s (%s)"
#, javascript-format
msgid "%s %s (%s, %s)"
msgstr "%s %s (%s, %s)"
#, fuzzy
msgid "&File"
msgstr "ファイル"
msgid "About Joplin"
msgstr "Joplinについて"
msgid "Preferences..."
msgstr ""
msgid "Check for updates..."
msgstr "アップデートのチェック..."
msgid "Templates"
msgstr ""
msgid "Import"
msgstr "インポート"
msgid "Export"
msgstr "エクスポート"
msgid "Print"
msgstr "印刷"
msgid "Synchronise"
msgstr "同期"
#, javascript-format
msgid "Hide %s"
@@ -620,7 +674,11 @@ msgstr "%s を隠す"
msgid "Quit"
msgstr "終了"
msgid "Edit"
msgid "Close Window"
msgstr ""
#, fuzzy
msgid "&Edit"
msgstr "編集"
msgid "Copy"
@@ -644,19 +702,26 @@ msgstr "斜体"
msgid "Link"
msgstr ""
msgid "Code"
msgstr "コード"
msgid "Insert Date Time"
msgstr "日付の入力"
msgid "Edit in external editor"
msgstr "外部エディターで編集"
msgid "Tags"
msgstr "タグ"
msgid "Search in all the notes"
msgstr "すべてのノートを検索"
msgid "Search in current note"
msgstr "現在のノートを検索"
msgid "View"
#, fuzzy
msgid "&View"
msgstr "表示"
msgid "Toggle sidebar"
@@ -669,22 +734,12 @@ msgstr "エディターレイアウトの表示切り替え"
msgid "Focus"
msgstr "本文にフォーカス"
msgid "Tools"
#, fuzzy
msgid "&Tools"
msgstr "ツール"
msgid "Synchronisation status"
msgstr "同期状況"
msgid "Web clipper options"
msgstr "Webクリッパーのオプション"
msgid "Encryption options"
msgstr "暗号化のオプション"
msgid "General Options"
msgstr "全般のオプション"
msgid "Help"
#, fuzzy
msgid "&Help"
msgstr "ヘルプ"
msgid "Website and documentation"
@@ -693,15 +748,8 @@ msgstr "Webサイトとドキュメント"
msgid "Make a donation"
msgstr "寄付する"
msgid "Check for updates..."
msgstr "アップデートのチェック..."
msgid "About Joplin"
msgstr "Joplinについて"
#, javascript-format
msgid "%s %s (%s, %s)"
msgstr "%s %s (%s, %s)"
msgid "Toggle development tools"
msgstr ""
#, javascript-format
msgid "Open %s"
@@ -727,11 +775,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"
@@ -811,12 +859,12 @@ msgstr ""
msgid "Notes and settings are stored in: %s"
msgstr "ノートと設定は次の場所に保存されます: %s"
msgid "Browse..."
msgstr ""
msgid "Check synchronisation configuration"
msgstr "同期の設定を確認する"
msgid "Browse..."
msgstr ""
msgid "Apply"
msgstr "適用"
@@ -934,9 +982,6 @@ msgstr "ノートブックの題名:"
msgid "Add or remove tags:"
msgstr "タグの追加・削除:"
msgid "Separate each tag by a comma."
msgstr "それぞれのタグをカンマ(,)で区切ってください。"
msgid "Rename notebook:"
msgstr "ノートブックの名前を変更:"
@@ -958,8 +1003,9 @@ msgstr "いくつかの項目は同期されませんでした。"
msgid "View them now"
msgstr "今すぐ表示"
msgid "Some items cannot be decrypted."
msgstr "いくつかの項目は復号されませんでした。"
#, fuzzy
msgid "One or more master keys need a password."
msgstr "マスターパスワードを入力してください:"
msgid "Set the password"
msgstr "パスワードの設定"
@@ -977,9 +1023,33 @@ msgstr "場所"
msgid "URL"
msgstr "URL"
#, fuzzy
msgid "Note History"
msgstr "ノートブック"
msgid "Previous versions of this note"
msgstr ""
msgid "Note properties"
msgstr "ノートのプロパティ"
#, javascript-format
msgid "The note \"%s\" has been successfully restored to the notebook \"%s\"."
msgstr ""
#, fuzzy
msgid "This note has no history"
msgstr "ノートは変更されています:"
msgid "Restore"
msgstr ""
#, javascript-format
msgid ""
"Click \"%s\" to restore the note. It will be copied in the notebook named "
"\"%s\". The current version of the note will not be replaced or modified."
msgstr ""
msgid "Open..."
msgstr "開く..."
@@ -1029,9 +1099,6 @@ msgstr "ハイパーリンクの挿入"
msgid "Attach file"
msgstr "ファイルを添付する"
msgid "Tags"
msgstr "タグ"
msgid "Set alarm"
msgstr "アラームをセット"
@@ -1042,9 +1109,6 @@ msgstr "内: %s"
msgid "Hyperlink"
msgstr "ハイパーリンク"
msgid "Code"
msgstr "コード"
msgid "Numbered List"
msgstr "番号つきリスト"
@@ -1100,7 +1164,17 @@ 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?"
@@ -1112,9 +1186,6 @@ msgstr "削除"
msgid "Rename"
msgstr "名前の変更"
msgid "Synchronise"
msgstr "同期"
msgid "Notebooks"
msgstr "ノートブック"
@@ -1123,12 +1194,15 @@ msgid "Decrypting items: %d/%d"
msgstr "復号中のアイテム: %d/%d"
#, javascript-format
msgid "Fetching resources: %d"
msgstr "取得中のリソース: %d"
msgid "Fetching resources: %d/%d"
msgstr "取得中のリソース: %d/%d"
msgid "Please select where the sync status should be exported to"
msgstr "同期状況の出力先を選択してください"
msgid "Retry"
msgstr ""
msgid "Add or remove tags"
msgstr "タグの追加と削除"
@@ -1159,6 +1233,14 @@ msgstr "ノートを削除しますか?"
msgid "Delete these %d notes?"
msgstr "ノートを削除しますか?"
msgid ""
"Type a note title to jump to it. Or type # followed by a tag name, or @ "
"followed by a notebook name."
msgstr ""
msgid "Goto Anything..."
msgstr ""
#, javascript-format
msgid "Usage: %s"
msgstr "使用方法: %s"
@@ -1271,12 +1353,22 @@ msgstr "実行中"
msgid "Synchronisation is already in progress. State: %s"
msgstr "同期作業はすでに実行中です。状態: %s"
msgid ""
"Unknown item type downloaded - please upgrade Joplin to the latest version"
msgstr ""
msgid "Encrypted"
msgstr "暗号化済"
msgid "Encrypted items cannot be modified"
msgstr "暗号化したアイテムは修正できません"
msgid "title"
msgstr "タイトル"
msgid "updated date"
msgstr "アップデート日"
msgid "Conflicts"
msgstr "衝突"
@@ -1289,12 +1381,6 @@ msgstr ""
"\"%s\" というノートブックの名称はシステムで使用するために予約済みです。名称の"
"変更はできません。"
msgid "title"
msgstr "タイトル"
msgid "updated date"
msgstr "アップデート日"
msgid "created date"
msgstr "作成日"
@@ -1309,6 +1395,68 @@ msgstr "ノートをノートブック \"%s\" にコピーできません"
msgid "Cannot move note to \"%s\" notebook"
msgstr "ノートをノートブック \"%s\" に移動できません"
#, javascript-format
msgid ""
"Attention: If you change this location, make sure you copy all your content "
"to it before syncing, otherwise all files will be removed! See the FAQ for "
"more details: %s"
msgstr ""
"注意: この場所を変更する際は、同期する前に新しい場所にすべての内容をコピーし"
"ておきましょう。そうしないとすべてのファイルが削除されていまいます! 詳しくは"
"次のFAQをご覧ください: %s"
msgid "Synchronisation target"
msgstr "同期先"
msgid ""
"The target to synchonise to. Each sync target may have additional parameters "
"which are named as `sync.NUM.NAME` (all documented below)."
msgstr ""
"同期する先です。いずれの同期先も `sync.NUM.NAME` のように追加のパラメーターを"
"持つことができるでしょう(すべてのドキュメントは下にあります)。"
msgid "Directory to synchronise with (absolute path)"
msgstr "同期先のディレクトリ(絶対パス)"
msgid "Nextcloud WebDAV URL"
msgstr "Nextcloud WebDAV URL"
msgid "Nextcloud username"
msgstr "Nextcloud ユーザー名"
msgid "Nextcloud password"
msgstr "Nextcloud パスワード"
msgid "WebDAV URL"
msgstr "WebDAV URL"
msgid "WebDAV username"
msgstr "WebDAV ユーザー名"
msgid "WebDAV password"
msgstr "WevDAV パスワード"
msgid "Attachment download behaviour"
msgstr ""
msgid ""
"In \"Manual\" mode, attachments are downloaded only when you click on them. "
"In \"Auto\", they are downloaded when you open the note. In \"Always\", all "
"the attachments are downloaded whether you open the note or not."
msgstr ""
msgid "Always"
msgstr ""
msgid "Manual"
msgstr ""
msgid "Auto"
msgstr ""
msgid "Max concurrent connections"
msgstr ""
msgid "Language"
msgstr "言語"
@@ -1339,6 +1487,10 @@ msgstr "ノートのソート方法"
msgid "Reverse sort order"
msgstr "逆順に並び替え"
#, fuzzy
msgid "Sort notebooks by"
msgstr "ノートのソート方法"
msgid "Save geo-location with notes"
msgstr "ノートに位置情報を保存"
@@ -1354,6 +1506,43 @@ msgstr "本文にフォーカス"
msgid "When creating a new note:"
msgstr "新しいノートを作成した際:"
msgid "Enable soft breaks"
msgstr ""
#, fuzzy
msgid "Enable math expressions"
msgstr "暗号化を有効にする"
msgid "Enable ==mark== syntax"
msgstr ""
msgid "Enable footnotes"
msgstr ""
msgid "Enable table of contents extension"
msgstr ""
msgid "Enable ~sub~ syntax"
msgstr ""
msgid "Enable ^sup^ syntax"
msgstr ""
msgid "Enable deflist syntax"
msgstr ""
msgid "Enable abbreviation syntax"
msgstr ""
msgid "Enable markdown emoji"
msgstr ""
msgid "Enable ++insert++ syntax"
msgstr ""
msgid "Enable multimarkdown table extension"
msgstr ""
msgid "Show tray icon"
msgstr "トレイアイコンの表示"
@@ -1391,11 +1580,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 "同期間隔"
@@ -1422,57 +1611,6 @@ msgstr ""
"このエディターコマンド(と引数)はノートを開く際に使用されます。空欄の場合は"
"既定のエディターを自動的に検出します。"
msgid "Show advanced options"
msgstr "詳細な設定の表示"
msgid "Synchronisation target"
msgstr "同期先"
msgid ""
"The target to synchonise to. Each sync target may have additional parameters "
"which are named as `sync.NUM.NAME` (all documented below)."
msgstr ""
"同期する先です。いずれの同期先も `sync.NUM.NAME` のように追加のパラメーターを"
"持つことができるでしょう(すべてのドキュメントは下にあります)。"
msgid "Directory to synchronise with (absolute path)"
msgstr "同期先のディレクトリ(絶対パス)"
msgid ""
"The path to synchronise with when file system synchronisation is enabled. "
"See `sync.target`."
msgstr ""
"ファイルシステム同期の有効時に同期を行うパスです。`sync.target`も参考にしてく"
"ださい。"
msgid "Nextcloud WebDAV URL"
msgstr "Nextcloud WebDAV URL"
#, javascript-format
msgid ""
"Attention: If you change this location, make sure you copy all your content "
"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 ユーザー名"
msgid "Nextcloud password"
msgstr "Nextcloud パスワード"
msgid "WebDAV URL"
msgstr "WebDAV URL"
msgid "WebDAV username"
msgstr "WebDAV ユーザー名"
msgid "WebDAV password"
msgstr "WevDAV パスワード"
msgid "Custom TLS certificates"
msgstr "TLS証明書のカスタマイズ"
@@ -1490,6 +1628,20 @@ msgstr ""
msgid "Ignore TLS certificate errors"
msgstr "TLS証明書のエラーを無視"
#, fuzzy
msgid "Enable note history"
msgstr "暗号化を有効にする"
msgid "days"
msgstr ""
#, javascript-format
msgid "%d days"
msgstr ""
msgid "Keep note history for"
msgstr ""
#, javascript-format
msgid "Invalid option value: \"%s\". Possible values are: %s."
msgstr "無効な設定値: \"%s\"。有効な値は: %sです。"
@@ -1509,6 +1661,9 @@ msgstr ""
msgid "Note"
msgstr "ノートブック"
msgid "Plugins"
msgstr ""
#, fuzzy
msgid "Application"
msgstr "場所"
@@ -1532,6 +1687,9 @@ msgstr "Evernote エクスポートファイル"
msgid "Json Export Directory"
msgstr "Json エクスポートディレクトリ"
msgid "File"
msgstr "ファイル"
msgid "Directory"
msgstr "ディレクトリ"
@@ -1557,13 +1715,12 @@ msgstr "エクスポートするデータがありません。"
msgid "Please specify the notebook where the notes should be imported to."
msgstr "ノートをどのノートブックにインポートするのか指定してください。"
msgid "Restored Notes"
msgstr ""
msgid "Items that cannot be synchronised"
msgstr "同期ができなかったアイテム"
#, javascript-format
msgid "%s (%s): %s"
msgstr "%s (%s): %s"
msgid ""
"These items will remain on the device but will not be uploaded to the sync "
"target. In order to find these items, either search for the title or the ID "
@@ -1573,6 +1730,24 @@ msgstr ""
"のようなアイテムを探すには、タイトルまたはID(上記の括弧内に表示されている)で"
"検索してください。"
#, fuzzy, javascript-format
msgid "%s (%s) could not be uploaded: %s"
msgstr "次のファイルは開くことができません:%s"
#, fuzzy, javascript-format
msgid "Item \"%s\" could not be downloaded: %s"
msgstr "次のファイルは開くことができません:%s"
#, fuzzy
msgid "Items that cannot be decrypted"
msgstr "同期ができなかったアイテム"
msgid ""
"Joplin failed to decrypt these items multiple times, possibly because they "
"are corrupted or too large. These items will remain on the device but Joplin "
"will no longer attempt to decrypt them."
msgstr ""
msgid "Sync status (synced items / total items)"
msgstr "同期状況 (同期済/総数)"
@@ -1618,18 +1793,6 @@ msgstr "ノートがありません。(+)ボタンを押して新しいノート
msgid "Delete these notes?"
msgstr "ノートを削除しますか?"
msgid "Log"
msgstr "ログ"
msgid "Export Debug Report"
msgstr "デバッグレポートの出力"
msgid "Encryption Config"
msgstr "暗号化の設定"
msgid "Configuration"
msgstr "設定"
msgid "Move to notebook..."
msgstr "ノートブックへ移動..."
@@ -1652,8 +1815,24 @@ msgstr "日付の選択"
msgid "Confirm"
msgstr "確認"
msgid "Cancel synchronisation"
msgstr "同期の中止"
#, fuzzy, javascript-format
msgid "Notebook: %s"
msgstr "ノートブック"
#, fuzzy
msgid "Encrypted notebooks cannot be renamed"
msgstr "暗号化したアイテムは修正できません"
#, fuzzy
msgid "New Notebook"
msgstr "新しいノートブック"
msgid "Configuration"
msgstr "設定"
#, fuzzy
msgid "All notes"
msgstr "ノート"
msgid "Checking... Please wait."
msgstr "確認中...お待ちください。"
@@ -1695,6 +1874,54 @@ msgstr "新しいタグ:"
msgid "Type new tags or select from list"
msgstr "新しいタグを入力するか、リストから選択してください"
msgid "Warning"
msgstr ""
msgid ""
"In order to use file system synchronization your permission to write to "
"external storage is required."
msgstr ""
#, fuzzy
msgid "Information"
msgstr "設定"
msgid "Encryption Config"
msgstr "暗号化の設定"
#, fuzzy
msgid "Tools"
msgstr "ツール"
#, fuzzy
msgid "Sync Status"
msgstr "状態"
msgid "Log"
msgstr "ログ"
#, fuzzy
msgid "Creating report..."
msgstr "新しい %s を作成中..."
msgid "Export Debug Report"
msgstr "デバッグレポートの出力"
msgid "Fixing search index..."
msgstr ""
msgid "Fix search index"
msgstr ""
msgid ""
"Use this to rebuild the search index if there is a problem with search. It "
"may take some times depending on the number of notes."
msgstr ""
#, fuzzy
msgid "More information"
msgstr "設定"
msgid ""
"To work correctly, the app needs the following permissions. Please enable "
"them in your phone settings, in Apps > Joplin > Permissions"
@@ -1718,10 +1945,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 ""
@@ -1761,6 +1984,10 @@ msgstr "ノートブックは保存できませんでした:%s"
msgid "Edit notebook"
msgstr "ノートブックの編集"
#, fuzzy
msgid "Enter notebook title"
msgstr "ノートブックの題名:"
msgid "Show all"
msgstr "すべて表示"
@@ -1784,10 +2011,32 @@ msgstr "ID %s のアイテムはありません"
msgid "The Joplin mobile app does not currently support this type of link: %s"
msgstr "Joplinモバイルアプリは次のタイプのリンクをまだサポートしていません: %s"
#, javascript-format
msgid "Links with protocol \"%s\" are not supported"
msgstr ""
#, javascript-format
msgid "Unsupported image type: %s"
msgstr "サポートされていない画像の形式: %s"
#, fuzzy, javascript-format
msgid "Updated: %s"
msgstr "アップデート: %d."
msgid "View on map"
msgstr "地図上に表示"
msgid "Go to source URL"
msgstr "ソースURLに行く"
#, fuzzy
msgid "Attach..."
msgstr "検索..."
#, fuzzy
msgid "Choose an option"
msgstr "詳細な設定の表示"
msgid "Take photo"
msgstr "写真を撮影する"
@@ -1806,20 +2055,19 @@ msgstr "ノートに変換"
msgid "Convert to todo"
msgstr "ToDoに変換"
msgid "Hide metadata"
msgstr "メタデータを隠す"
#, fuzzy
msgid "Properties"
msgstr "ノートのプロパティ"
msgid "Show metadata"
msgstr "メタデータを表示"
msgid "Add body"
msgstr ""
msgid "View on map"
msgstr "地図上に表示"
msgid "Edit"
msgstr "編集"
msgid "Go to source URL"
msgstr "ソースURLに行く"
msgid "Delete notebook"
msgstr "ノートブックを削除"
#, fuzzy
msgid "Add title"
msgstr "タイトル"
msgid "Login with OneDrive"
msgstr "OneDriveログイン"
@@ -1827,20 +2075,57 @@ msgstr "OneDriveログイン"
msgid "Search"
msgstr "検索"
msgid ""
"Click on the (+) button to create a new note or notebook. Click on the side "
"menu to access your existing notebooks."
msgstr ""
"(+)ボタンを押してノートやノートブックを作成してください。サイドメニューからあ"
"なたのノートブックにアクセスができます。"
#, fuzzy
#~ msgid "Permission to write to external storage"
#~ msgstr "カメラ使用の許可"
msgid "You currently have no notebook. Create one by clicking on (+) button."
msgstr ""
"ノートブックがありません。(+)をクリックして新しいノートブックを作成してくださ"
"い。"
#~ msgid "Cancel synchronisation"
#~ msgstr "同期の中止"
msgid "Welcome"
msgstr "ようこそ"
#~ msgid "Hide metadata"
#~ msgstr "メタデータを隠す"
#~ msgid "Show metadata"
#~ msgstr "メタデータを表示"
#~ msgid "Delete notebook"
#~ msgstr "ノートブックを削除"
#~ msgid ""
#~ "Click on the (+) button to create a new note or notebook. Click on the "
#~ "side menu to access your existing notebooks."
#~ msgstr ""
#~ "(+)ボタンを押してノートやノートブックを作成してください。サイドメニューか"
#~ "らあなたのノートブックにアクセスができます。"
#~ msgid ""
#~ "You currently have no notebook. Create one by clicking on (+) button."
#~ msgstr ""
#~ "ノートブックがありません。(+)をクリックして新しいノートブックを作成してく"
#~ "ださい。"
#~ msgid "Welcome"
#~ msgstr "ようこそ"
#~ msgid "Separate each tag by a comma."
#~ msgstr "それぞれのタグをカンマ(,)で区切ってください。"
#~ msgid "Some items cannot be decrypted."
#~ msgstr "いくつかの項目は復号されませんでした。"
#~ msgid "%s (%s): %s"
#~ msgstr "%s (%s): %s"
#~ msgid ""
#~ "The path to synchronise with when file system synchronisation is enabled. "
#~ "See `sync.target`."
#~ msgstr ""
#~ "ファイルシステム同期の有効時に同期を行うパスです。`sync.target`も参考にし"
#~ "てください。"
#, 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:"
@@ -527,7 +527,7 @@ msgstr ""
msgid "PDF File"
msgstr ""
msgid "File"
msgid "Synchronisation status"
msgstr ""
msgid "New note"
@@ -539,13 +539,63 @@ msgstr ""
msgid "New notebook"
msgstr ""
msgid "Print"
msgstr ""
msgid "General Options"
msgstr ""
msgid "Encryption options"
msgstr ""
msgid "Web clipper options"
msgstr ""
msgid "Create note from template"
msgstr ""
msgid "Create to-do from template"
msgstr ""
msgid "Insert template"
msgstr ""
msgid "Open template directory"
msgstr ""
msgid "Refresh templates"
msgstr ""
#, javascript-format
msgid "Revision: %s (%s)"
msgstr ""
#, javascript-format
msgid "%s %s (%s, %s)"
msgstr ""
msgid "&File"
msgstr ""
msgid "About Joplin"
msgstr ""
msgid "Preferences..."
msgstr ""
msgid "Check for updates..."
msgstr ""
msgid "Templates"
msgstr ""
msgid "Import"
msgstr ""
msgid "Export"
msgstr ""
msgid "Print"
msgid "Synchronise"
msgstr ""
#, javascript-format
@@ -555,7 +605,10 @@ msgstr ""
msgid "Quit"
msgstr ""
msgid "Edit"
msgid "Close Window"
msgstr ""
msgid "&Edit"
msgstr ""
msgid "Copy"
@@ -579,19 +632,25 @@ msgstr ""
msgid "Link"
msgstr ""
msgid "Code"
msgstr ""
msgid "Insert Date Time"
msgstr ""
msgid "Edit in external editor"
msgstr ""
msgid "Tags"
msgstr ""
msgid "Search in all the notes"
msgstr ""
msgid "Search in current note"
msgstr ""
msgid "View"
msgid "&View"
msgstr ""
msgid "Toggle sidebar"
@@ -603,22 +662,10 @@ msgstr ""
msgid "Focus"
msgstr ""
msgid "Tools"
msgid "&Tools"
msgstr ""
msgid "Synchronisation status"
msgstr ""
msgid "Web clipper options"
msgstr ""
msgid "Encryption options"
msgstr ""
msgid "General Options"
msgstr ""
msgid "Help"
msgid "&Help"
msgstr ""
msgid "Website and documentation"
@@ -627,14 +674,7 @@ msgstr ""
msgid "Make a donation"
msgstr ""
msgid "Check for updates..."
msgstr ""
msgid "About Joplin"
msgstr ""
#, javascript-format
msgid "%s %s (%s, %s)"
msgid "Toggle development tools"
msgstr ""
#, javascript-format
@@ -661,11 +701,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"
@@ -738,10 +778,10 @@ msgstr ""
msgid "Notes and settings are stored in: %s"
msgstr ""
msgid "Browse..."
msgid "Check synchronisation configuration"
msgstr ""
msgid "Check synchronisation configuration"
msgid "Browse..."
msgstr ""
msgid "Apply"
@@ -845,9 +885,6 @@ msgstr ""
msgid "Add or remove tags:"
msgstr ""
msgid "Separate each tag by a comma."
msgstr ""
msgid "Rename notebook:"
msgstr ""
@@ -869,7 +906,7 @@ msgstr ""
msgid "View them now"
msgstr ""
msgid "Some items cannot be decrypted."
msgid "One or more master keys need a password."
msgstr ""
msgid "Set the password"
@@ -888,9 +925,31 @@ msgstr ""
msgid "URL"
msgstr ""
msgid "Note History"
msgstr ""
msgid "Previous versions of this note"
msgstr ""
msgid "Note properties"
msgstr ""
#, javascript-format
msgid "The note \"%s\" has been successfully restored to the notebook \"%s\"."
msgstr ""
msgid "This note has no history"
msgstr ""
msgid "Restore"
msgstr ""
#, javascript-format
msgid ""
"Click \"%s\" to restore the note. It will be copied in the notebook named "
"\"%s\". The current version of the note will not be replaced or modified."
msgstr ""
msgid "Open..."
msgstr ""
@@ -938,9 +997,6 @@ msgstr ""
msgid "Attach file"
msgstr ""
msgid "Tags"
msgstr ""
msgid "Set alarm"
msgstr ""
@@ -951,9 +1007,6 @@ msgstr ""
msgid "Hyperlink"
msgstr ""
msgid "Code"
msgstr ""
msgid "Numbered List"
msgstr ""
@@ -1009,7 +1062,15 @@ 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?"
@@ -1021,9 +1082,6 @@ msgstr ""
msgid "Rename"
msgstr ""
msgid "Synchronise"
msgstr ""
msgid "Notebooks"
msgstr ""
@@ -1032,12 +1090,15 @@ msgid "Decrypting items: %d/%d"
msgstr ""
#, javascript-format
msgid "Fetching resources: %d"
msgid "Fetching resources: %d/%d"
msgstr ""
msgid "Please select where the sync status should be exported to"
msgstr ""
msgid "Retry"
msgstr ""
msgid "Add or remove tags"
msgstr ""
@@ -1068,6 +1129,14 @@ msgstr ""
msgid "Delete these %d notes?"
msgstr ""
msgid ""
"Type a note title to jump to it. Or type # followed by a tag name, or @ "
"followed by a notebook name."
msgstr ""
msgid "Goto Anything..."
msgstr ""
#, javascript-format
msgid "Usage: %s"
msgstr ""
@@ -1172,12 +1241,22 @@ msgstr ""
msgid "Synchronisation is already in progress. State: %s"
msgstr ""
msgid ""
"Unknown item type downloaded - please upgrade Joplin to the latest version"
msgstr ""
msgid "Encrypted"
msgstr ""
msgid "Encrypted items cannot be modified"
msgstr ""
msgid "title"
msgstr ""
msgid "updated date"
msgstr ""
msgid "Conflicts"
msgstr ""
@@ -1188,12 +1267,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 ""
@@ -1208,6 +1281,63 @@ msgstr ""
msgid "Cannot move note to \"%s\" notebook"
msgstr ""
#, javascript-format
msgid ""
"Attention: If you change this location, make sure you copy all your content "
"to it before syncing, otherwise all files will be removed! See the FAQ for "
"more details: %s"
msgstr ""
msgid "Synchronisation target"
msgstr ""
msgid ""
"The target to synchonise to. Each sync target may have additional parameters "
"which are named as `sync.NUM.NAME` (all documented below)."
msgstr ""
msgid "Directory to synchronise with (absolute path)"
msgstr ""
msgid "Nextcloud WebDAV URL"
msgstr ""
msgid "Nextcloud username"
msgstr ""
msgid "Nextcloud password"
msgstr ""
msgid "WebDAV URL"
msgstr ""
msgid "WebDAV username"
msgstr ""
msgid "WebDAV password"
msgstr ""
msgid "Attachment download behaviour"
msgstr ""
msgid ""
"In \"Manual\" mode, attachments are downloaded only when you click on them. "
"In \"Auto\", they are downloaded when you open the note. In \"Always\", all "
"the attachments are downloaded whether you open the note or not."
msgstr ""
msgid "Always"
msgstr ""
msgid "Manual"
msgstr ""
msgid "Auto"
msgstr ""
msgid "Max concurrent connections"
msgstr ""
msgid "Language"
msgstr ""
@@ -1238,6 +1368,9 @@ msgstr ""
msgid "Reverse sort order"
msgstr ""
msgid "Sort notebooks by"
msgstr ""
msgid "Save geo-location with notes"
msgstr ""
@@ -1253,6 +1386,42 @@ msgstr ""
msgid "When creating a new note:"
msgstr ""
msgid "Enable soft breaks"
msgstr ""
msgid "Enable math expressions"
msgstr ""
msgid "Enable ==mark== syntax"
msgstr ""
msgid "Enable footnotes"
msgstr ""
msgid "Enable table of contents extension"
msgstr ""
msgid "Enable ~sub~ syntax"
msgstr ""
msgid "Enable ^sup^ syntax"
msgstr ""
msgid "Enable deflist syntax"
msgstr ""
msgid "Enable abbreviation syntax"
msgstr ""
msgid "Enable markdown emoji"
msgstr ""
msgid "Enable ++insert++ syntax"
msgstr ""
msgid "Enable multimarkdown table extension"
msgstr ""
msgid "Show tray icon"
msgstr ""
@@ -1315,50 +1484,6 @@ msgid ""
"If none is provided it will try to auto-detect the default editor."
msgstr ""
msgid "Show advanced options"
msgstr ""
msgid "Synchronisation target"
msgstr ""
msgid ""
"The target to synchonise to. Each sync target may have additional parameters "
"which are named as `sync.NUM.NAME` (all documented below)."
msgstr ""
msgid "Directory to synchronise with (absolute path)"
msgstr ""
msgid ""
"The path to synchronise with when file system synchronisation is enabled. "
"See `sync.target`."
msgstr ""
msgid "Nextcloud WebDAV URL"
msgstr ""
#, javascript-format
msgid ""
"Attention: If you change this location, make sure you copy all your content "
"to it before syncing, otherwise all files will be removed! See the FAQ for "
"more details: %s"
msgstr ""
msgid "Nextcloud username"
msgstr ""
msgid "Nextcloud password"
msgstr ""
msgid "WebDAV URL"
msgstr ""
msgid "WebDAV username"
msgstr ""
msgid "WebDAV password"
msgstr ""
msgid "Custom TLS certificates"
msgstr ""
@@ -1372,6 +1497,19 @@ msgstr ""
msgid "Ignore TLS certificate errors"
msgstr ""
msgid "Enable note history"
msgstr ""
msgid "days"
msgstr ""
#, javascript-format
msgid "%d days"
msgstr ""
msgid "Keep note history for"
msgstr ""
#, javascript-format
msgid "Invalid option value: \"%s\". Possible values are: %s."
msgstr ""
@@ -1388,6 +1526,9 @@ msgstr ""
msgid "Note"
msgstr ""
msgid "Plugins"
msgstr ""
msgid "Application"
msgstr ""
@@ -1410,6 +1551,9 @@ msgstr ""
msgid "Json Export Directory"
msgstr ""
msgid "File"
msgstr ""
msgid "Directory"
msgstr ""
@@ -1433,11 +1577,10 @@ msgstr ""
msgid "Please specify the notebook where the notes should be imported to."
msgstr ""
msgid "Items that cannot be synchronised"
msgid "Restored Notes"
msgstr ""
#, javascript-format
msgid "%s (%s): %s"
msgid "Items that cannot be synchronised"
msgstr ""
msgid ""
@@ -1446,6 +1589,23 @@ msgid ""
"(which is displayed in brackets above)."
msgstr ""
#, javascript-format
msgid "%s (%s) could not be uploaded: %s"
msgstr ""
#, javascript-format
msgid "Item \"%s\" could not be downloaded: %s"
msgstr ""
msgid "Items that cannot be decrypted"
msgstr ""
msgid ""
"Joplin failed to decrypt these items multiple times, possibly because they "
"are corrupted or too large. These items will remain on the device but Joplin "
"will no longer attempt to decrypt them."
msgstr ""
msgid "Sync status (synced items / total items)"
msgstr ""
@@ -1491,18 +1651,6 @@ msgstr ""
msgid "Delete these notes?"
msgstr ""
msgid "Log"
msgstr ""
msgid "Export Debug Report"
msgstr ""
msgid "Encryption Config"
msgstr ""
msgid "Configuration"
msgstr ""
msgid "Move to notebook..."
msgstr ""
@@ -1525,7 +1673,20 @@ msgstr ""
msgid "Confirm"
msgstr ""
msgid "Cancel synchronisation"
#, javascript-format
msgid "Notebook: %s"
msgstr ""
msgid "Encrypted notebooks cannot be renamed"
msgstr ""
msgid "New Notebook"
msgstr ""
msgid "Configuration"
msgstr ""
msgid "All notes"
msgstr ""
msgid "Checking... Please wait."
@@ -1561,6 +1722,49 @@ msgstr ""
msgid "Type new tags or select from list"
msgstr ""
msgid "Warning"
msgstr ""
msgid ""
"In order to use file system synchronization your permission to write to "
"external storage is required."
msgstr ""
msgid "Information"
msgstr ""
msgid "Encryption Config"
msgstr ""
msgid "Tools"
msgstr ""
msgid "Sync Status"
msgstr ""
msgid "Log"
msgstr ""
msgid "Creating report..."
msgstr ""
msgid "Export Debug Report"
msgstr ""
msgid "Fixing search index..."
msgstr ""
msgid "Fix search index"
msgstr ""
msgid ""
"Use this to rebuild the search index if there is a problem with search. It "
"may take some times depending on the number of notes."
msgstr ""
msgid "More information"
msgstr ""
msgid ""
"To work correctly, the app needs the following permissions. Please enable "
"them in your phone settings, in Apps > Joplin > Permissions"
@@ -1580,10 +1784,6 @@ msgstr ""
msgid "Joplin website"
msgstr ""
#, javascript-format
msgid "Joplin v%s"
msgstr ""
#, javascript-format
msgid "Database v%s"
msgstr ""
@@ -1622,6 +1822,9 @@ msgstr ""
msgid "Edit notebook"
msgstr ""
msgid "Enter notebook title"
msgstr ""
msgid "Show all"
msgstr ""
@@ -1645,10 +1848,30 @@ msgstr ""
msgid "The Joplin mobile app does not currently support this type of link: %s"
msgstr ""
#, javascript-format
msgid "Links with protocol \"%s\" are not supported"
msgstr ""
#, javascript-format
msgid "Unsupported image type: %s"
msgstr ""
#, javascript-format
msgid "Updated: %s"
msgstr ""
msgid "View on map"
msgstr ""
msgid "Go to source URL"
msgstr ""
msgid "Attach..."
msgstr ""
msgid "Choose an option"
msgstr ""
msgid "Take photo"
msgstr ""
@@ -1667,19 +1890,16 @@ msgstr ""
msgid "Convert to todo"
msgstr ""
msgid "Hide metadata"
msgid "Properties"
msgstr ""
msgid "Show metadata"
msgid "Add body"
msgstr ""
msgid "View on map"
msgid "Edit"
msgstr ""
msgid "Go to source URL"
msgstr ""
msgid "Delete notebook"
msgid "Add title"
msgstr ""
msgid "Login with OneDrive"
@@ -1687,14 +1907,3 @@ msgstr ""
msgid "Search"
msgstr ""
msgid ""
"Click on the (+) button to create a new note or notebook. Click on the side "
"menu to access your existing notebooks."
msgstr ""
msgid "You currently have no notebook. Create one by clicking on (+) button."
msgstr ""
msgid "Welcome"
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` 입니다."
@@ -589,8 +590,8 @@ msgstr "\"%s\"에서 \"%s\" 포맷으로 가져오는 중입니다. 잠시만
msgid "PDF File"
msgstr "PDF 파일"
msgid "File"
msgstr "파일"
msgid "Synchronisation status"
msgstr "동기화 상태"
msgid "New note"
msgstr "새 노트"
@@ -601,14 +602,67 @@ msgstr "새 '할 일'"
msgid "New notebook"
msgstr "새 노트북"
msgid "Print"
msgstr "인쇄"
msgid "General Options"
msgstr "일반 옵션"
msgid "Encryption options"
msgstr "암호화 옵션"
msgid "Web clipper options"
msgstr "웹 수집기 옵션"
msgid "Create note from template"
msgstr ""
msgid "Create to-do from template"
msgstr ""
#, fuzzy
msgid "Insert template"
msgstr "날짜와 시간 입력"
#, fuzzy
msgid "Open template directory"
msgstr "조플린 내보내기 폴더"
msgid "Refresh templates"
msgstr ""
#, fuzzy, javascript-format
msgid "Revision: %s (%s)"
msgstr "%s %s (%s)"
#, javascript-format
msgid "%s %s (%s, %s)"
msgstr "%s %s (%s, %s)"
#, fuzzy
msgid "&File"
msgstr "파일"
msgid "About Joplin"
msgstr "조플린이란?"
msgid "Preferences..."
msgstr ""
msgid "Check for updates..."
msgstr "업데이트 확인..."
msgid "Templates"
msgstr ""
msgid "Import"
msgstr "가져오기"
msgid "Export"
msgstr "내보내기"
msgid "Print"
msgstr "인쇄"
msgid "Synchronise"
msgstr "동기화"
#, javascript-format
msgid "Hide %s"
@@ -617,7 +671,11 @@ msgstr "%s 숨기기"
msgid "Quit"
msgstr "종료"
msgid "Edit"
msgid "Close Window"
msgstr ""
#, fuzzy
msgid "&Edit"
msgstr "편집"
msgid "Copy"
@@ -641,19 +699,26 @@ msgstr "기울임"
msgid "Link"
msgstr ""
msgid "Code"
msgstr "코드"
msgid "Insert Date Time"
msgstr "날짜와 시간 입력"
msgid "Edit in external editor"
msgstr "외부 편집기에서 편집하기"
msgid "Tags"
msgstr "태그"
msgid "Search in all the notes"
msgstr "모든 노트에서 검색"
msgid "Search in current note"
msgstr "현재 노트에서 검색"
msgid "View"
#, fuzzy
msgid "&View"
msgstr "보기"
msgid "Toggle sidebar"
@@ -666,22 +731,12 @@ msgstr "편집기 배치 형태 전환"
msgid "Focus"
msgstr "내용에 포커스"
msgid "Tools"
#, fuzzy
msgid "&Tools"
msgstr "도구"
msgid "Synchronisation status"
msgstr "동기화 상태"
msgid "Web clipper options"
msgstr "웹 수집기 옵션"
msgid "Encryption options"
msgstr "암호화 옵션"
msgid "General Options"
msgstr "일반 옵션"
msgid "Help"
#, fuzzy
msgid "&Help"
msgstr "도움말"
msgid "Website and documentation"
@@ -690,15 +745,8 @@ msgstr "웹사이트 및 각종 문서"
msgid "Make a donation"
msgstr "기부하기"
msgid "Check for updates..."
msgstr "업데이트 확인..."
msgid "About Joplin"
msgstr "조플린이란?"
#, javascript-format
msgid "%s %s (%s, %s)"
msgstr "%s %s (%s, %s)"
msgid "Toggle development tools"
msgstr ""
#, javascript-format
msgid "Open %s"
@@ -724,12 +772,12 @@ msgid "An update is available, do you want to download it now?"
msgstr "업데이트가 있습니다. 지금 다운로드할까요?"
#, javascript-format
msgid "Your version: v%s"
msgstr "현재 버전: v%s"
msgid "Your version: %s"
msgstr "현재 버전: %s"
#, javascript-format
msgid "New version: v%s"
msgstr "새 버전: v%s"
msgid "New version: %s"
msgstr "새 버전: %s"
msgid "Yes"
msgstr "예"
@@ -807,12 +855,12 @@ msgstr ""
msgid "Notes and settings are stored in: %s"
msgstr "노트와 설정값이 다음에 저장되었습니다: %s"
msgid "Browse..."
msgstr ""
msgid "Check synchronisation configuration"
msgstr "동기화 설정 확인"
msgid "Browse..."
msgstr ""
msgid "Apply"
msgstr "적용"
@@ -928,9 +976,6 @@ msgstr "노트북 제목:"
msgid "Add or remove tags:"
msgstr "태그 추가 및 제거:"
msgid "Separate each tag by a comma."
msgstr "각각의 태그를 쉼표로 구분합니다."
msgid "Rename notebook:"
msgstr "노트북 이름 바꾸기:"
@@ -952,8 +997,9 @@ msgstr "일부 항목들은 동기화할 수 없습니다."
msgid "View them now"
msgstr "지금 보여주기"
msgid "Some items cannot be decrypted."
msgstr "일부 항목들은 암호화할 수 없습니다."
#, fuzzy
msgid "One or more master keys need a password."
msgstr "관리자 비밀번호를 입력하세요:"
msgid "Set the password"
msgstr "암호 설정"
@@ -971,9 +1017,33 @@ msgstr "위치"
msgid "URL"
msgstr "URL"
#, fuzzy
msgid "Note History"
msgstr "노트북"
msgid "Previous versions of this note"
msgstr ""
msgid "Note properties"
msgstr "노트 속성"
#, javascript-format
msgid "The note \"%s\" has been successfully restored to the notebook \"%s\"."
msgstr ""
#, fuzzy
msgid "This note has no history"
msgstr "노트가 변경되었습니다:"
msgid "Restore"
msgstr ""
#, javascript-format
msgid ""
"Click \"%s\" to restore the note. It will be copied in the notebook named "
"\"%s\". The current version of the note will not be replaced or modified."
msgstr ""
msgid "Open..."
msgstr "열기..."
@@ -1023,9 +1093,6 @@ msgstr "하이퍼링크 삽입"
msgid "Attach file"
msgstr "파일 첨부"
msgid "Tags"
msgstr "태그"
msgid "Set alarm"
msgstr "알람 설정"
@@ -1036,9 +1103,6 @@ msgstr "내부: %s"
msgid "Hyperlink"
msgstr "하이퍼링크"
msgid "Code"
msgstr "코드"
msgid "Numbered List"
msgstr "숫자가 매겨진 목록"
@@ -1094,7 +1158,17 @@ 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?"
@@ -1106,9 +1180,6 @@ msgstr "삭제"
msgid "Rename"
msgstr "이름 바꾸기"
msgid "Synchronise"
msgstr "동기화"
msgid "Notebooks"
msgstr "노트북"
@@ -1117,12 +1188,15 @@ msgid "Decrypting items: %d/%d"
msgstr "복호화 항목: %d/%d"
#, javascript-format
msgid "Fetching resources: %d"
msgstr "리소스 가져오는 중: %d."
msgid "Fetching resources: %d/%d"
msgstr "리소스 가져오는 중: %d/%d"
msgid "Please select where the sync status should be exported to"
msgstr "동기화 상태를 내보낼 대상을 선택하세요"
msgid "Retry"
msgstr ""
msgid "Add or remove tags"
msgstr "태그 추가 및 제거"
@@ -1153,6 +1227,14 @@ msgstr "노트를 삭제할까요?"
msgid "Delete these %d notes?"
msgstr "노트를 삭제할까요?"
msgid ""
"Type a note title to jump to it. Or type # followed by a tag name, or @ "
"followed by a notebook name."
msgstr ""
msgid "Goto Anything..."
msgstr ""
#, javascript-format
msgid "Usage: %s"
msgstr "사용량: %s"
@@ -1265,12 +1347,22 @@ msgstr "진행 중"
msgid "Synchronisation is already in progress. State: %s"
msgstr "동기화가 이미 진행되고 있습니다. 상태: %s"
msgid ""
"Unknown item type downloaded - please upgrade Joplin to the latest version"
msgstr ""
msgid "Encrypted"
msgstr "암호화됨"
msgid "Encrypted items cannot be modified"
msgstr "암호화된 항목은 변경될 수 없습니다"
msgid "title"
msgstr "제목"
msgid "updated date"
msgstr "업데이트된 날짜"
msgid "Conflicts"
msgstr "충돌"
@@ -1281,12 +1373,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 +1387,67 @@ msgstr "노트를 \"%s\" 노트북으로 복사할 수 없습니다"
msgid "Cannot move note to \"%s\" notebook"
msgstr "노트를 \"%s\" 노트북으로 옮길 수 없습니다"
#, javascript-format
msgid ""
"Attention: If you change this location, make sure you copy all your content "
"to it before syncing, otherwise all files will be removed! See the FAQ for "
"more details: %s"
msgstr ""
"주의: 이 위치를 변경하시려면, 동기화 전에 모든 컨텐트를 복사했는지 확인하세"
"요, 그렇지 않으면 모든 파일이 삭제됩니다! 자세한 정보는 FAQ를 참조하세요: %s"
msgid "Synchronisation target"
msgstr "동기화 대상"
msgid ""
"The target to synchonise to. Each sync target may have additional parameters "
"which are named as `sync.NUM.NAME` (all documented below)."
msgstr ""
"동기화를 할 대상을 선택합니다. 각각의 동기화 대상은 `sync.NUM.NAME` 형식으로 "
"된 추가적인 매개 변수를 포함할 수 있습니다(아래에 문서화되어 있습니다)."
msgid "Directory to synchronise with (absolute path)"
msgstr "동기화를 할 폴더 (절대적 경로)"
msgid "Nextcloud WebDAV URL"
msgstr "Nextcloud WebDAV URL"
msgid "Nextcloud username"
msgstr "Nextcloud 사용자 이름"
msgid "Nextcloud password"
msgstr "Nextcloud 암호"
msgid "WebDAV URL"
msgstr "WebDAV URL"
msgid "WebDAV username"
msgstr "WebDAV 사용자 이름"
msgid "WebDAV password"
msgstr "WebDAV 암호"
msgid "Attachment download behaviour"
msgstr ""
msgid ""
"In \"Manual\" mode, attachments are downloaded only when you click on them. "
"In \"Auto\", they are downloaded when you open the note. In \"Always\", all "
"the attachments are downloaded whether you open the note or not."
msgstr ""
msgid "Always"
msgstr ""
msgid "Manual"
msgstr ""
msgid "Auto"
msgstr ""
msgid "Max concurrent connections"
msgstr ""
msgid "Language"
msgstr "언어"
@@ -1331,6 +1478,10 @@ msgstr "노트를 다음 기준으로 정렬"
msgid "Reverse sort order"
msgstr "정렬 순서 반전"
#, fuzzy
msgid "Sort notebooks by"
msgstr "노트를 다음 기준으로 정렬"
msgid "Save geo-location with notes"
msgstr "노트에 지리적 위치 정보 포함시키기"
@@ -1346,6 +1497,43 @@ msgstr "내용에 포커스"
msgid "When creating a new note:"
msgstr "새 노트를 만들 때:"
msgid "Enable soft breaks"
msgstr ""
#, fuzzy
msgid "Enable math expressions"
msgstr "암호화 사용"
msgid "Enable ==mark== syntax"
msgstr ""
msgid "Enable footnotes"
msgstr ""
msgid "Enable table of contents extension"
msgstr ""
msgid "Enable ~sub~ syntax"
msgstr ""
msgid "Enable ^sup^ syntax"
msgstr ""
msgid "Enable deflist syntax"
msgstr ""
msgid "Enable abbreviation syntax"
msgstr ""
msgid "Enable markdown emoji"
msgstr ""
msgid "Enable ++insert++ syntax"
msgstr ""
msgid "Enable multimarkdown table extension"
msgstr ""
msgid "Show tray icon"
msgstr "트레이 아이콘 표시"
@@ -1415,56 +1603,6 @@ msgstr ""
"노트를 여는데 사용할 텍스트 편집기 명령어(인자를 포함할 수 있습니다)를 지정합"
"니다. 주어진 명령어가 없을 시 기본 편집기를 자동으로 탐지할 것입니다."
msgid "Show advanced options"
msgstr "고급 옵션"
msgid "Synchronisation target"
msgstr "동기화 대상"
msgid ""
"The target to synchonise to. Each sync target may have additional parameters "
"which are named as `sync.NUM.NAME` (all documented below)."
msgstr ""
"동기화를 할 대상을 선택합니다. 각각의 동기화 대상은 `sync.NUM.NAME` 형식으로 "
"된 추가적인 매개 변수를 포함할 수 있습니다(아래에 문서화되어 있습니다)."
msgid "Directory to synchronise with (absolute path)"
msgstr "동기화를 할 폴더 (절대적 경로)"
msgid ""
"The path to synchronise with when file system synchronisation is enabled. "
"See `sync.target`."
msgstr ""
"파일 시스템 동기화가 활성화된 경우에 동기화를 할 경로입니다. `sync.target`를 "
"참조하세요."
msgid "Nextcloud WebDAV URL"
msgstr "Nextcloud WebDAV URL"
#, javascript-format
msgid ""
"Attention: If you change this location, make sure you copy all your content "
"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 사용자 이름"
msgid "Nextcloud password"
msgstr "Nextcloud 암호"
msgid "WebDAV URL"
msgstr "WebDAV URL"
msgid "WebDAV username"
msgstr "WebDAV 사용자 이름"
msgid "WebDAV password"
msgstr "WebDAV 암호"
msgid "Custom TLS certificates"
msgstr "임의의 TLS 인증서"
@@ -1482,6 +1620,20 @@ msgstr ""
msgid "Ignore TLS certificate errors"
msgstr "TLS 인증서 오류 무시"
#, fuzzy
msgid "Enable note history"
msgstr "암호화 사용"
msgid "days"
msgstr ""
#, javascript-format
msgid "%d days"
msgstr ""
msgid "Keep note history for"
msgstr ""
#, javascript-format
msgid "Invalid option value: \"%s\". Possible values are: %s."
msgstr "올바르지 않은 옵션 값: \"%s\". 가능한 값은 다음과 같습니다: \"%s\"."
@@ -1501,6 +1653,9 @@ msgstr ""
msgid "Note"
msgstr "노트북"
msgid "Plugins"
msgstr ""
#, fuzzy
msgid "Application"
msgstr "위치"
@@ -1524,6 +1679,9 @@ msgstr "에버노트 내보내기 파일"
msgid "Json Export Directory"
msgstr "Json 내보내기 폴더"
msgid "File"
msgstr "파일"
msgid "Directory"
msgstr "폴더"
@@ -1549,13 +1707,12 @@ msgstr "내보낼 데이터가 없습니다."
msgid "Please specify the notebook where the notes should be imported to."
msgstr "노트를 가져와서 저장할 노트북을 지정하세요."
msgid "Restored Notes"
msgstr ""
msgid "Items that cannot be synchronised"
msgstr "동기화를 할 수 없는 항목"
#, javascript-format
msgid "%s (%s): %s"
msgstr "%s (%s): %s"
msgid ""
"These items will remain on the device but will not be uploaded to the sync "
"target. In order to find these items, either search for the title or the ID "
@@ -1565,6 +1722,24 @@ msgstr ""
"런 항목을 찾으려면 제목 또는 ID로 검색하세요. (상단에 괄호 안에 표시되어 있습"
"니다)"
#, fuzzy, javascript-format
msgid "%s (%s) could not be uploaded: %s"
msgstr "다음 파일을 열 수 없습니다: %s"
#, fuzzy, javascript-format
msgid "Item \"%s\" could not be downloaded: %s"
msgstr "다음 파일을 열 수 없습니다: %s"
#, fuzzy
msgid "Items that cannot be decrypted"
msgstr "동기화를 할 수 없는 항목"
msgid ""
"Joplin failed to decrypt these items multiple times, possibly because they "
"are corrupted or too large. These items will remain on the device but Joplin "
"will no longer attempt to decrypt them."
msgstr ""
msgid "Sync status (synced items / total items)"
msgstr "동기화 상태 (동기화 완료 항목 / 전체 항목)"
@@ -1610,18 +1785,6 @@ msgstr "노트가 없습니다. (+) 버튼을 선택해 새로 만드세요."
msgid "Delete these notes?"
msgstr "노트를 삭제할까요?"
msgid "Log"
msgstr "로그"
msgid "Export Debug Report"
msgstr "디버그 보고서 내보내기"
msgid "Encryption Config"
msgstr "암호화 설정"
msgid "Configuration"
msgstr "설정"
msgid "Move to notebook..."
msgstr "노트북으로 옮기기..."
@@ -1644,8 +1807,24 @@ msgstr "날짜 선택"
msgid "Confirm"
msgstr "확인"
msgid "Cancel synchronisation"
msgstr "동기화 취소"
#, fuzzy, javascript-format
msgid "Notebook: %s"
msgstr "노트북"
#, fuzzy
msgid "Encrypted notebooks cannot be renamed"
msgstr "암호화된 항목은 변경될 수 없습니다"
#, fuzzy
msgid "New Notebook"
msgstr "새 노트북"
msgid "Configuration"
msgstr "설정"
#, fuzzy
msgid "All notes"
msgstr "노트"
msgid "Checking... Please wait."
msgstr "확인 중입니다... 잠시만 기다리세요."
@@ -1687,6 +1866,54 @@ msgstr "새 태그:"
msgid "Type new tags or select from list"
msgstr "새 태그를 입력하거나 목록에서 선택하세요"
msgid "Warning"
msgstr ""
msgid ""
"In order to use file system synchronization your permission to write to "
"external storage is required."
msgstr ""
#, fuzzy
msgid "Information"
msgstr "설정"
msgid "Encryption Config"
msgstr "암호화 설정"
#, fuzzy
msgid "Tools"
msgstr "도구"
#, fuzzy
msgid "Sync Status"
msgstr "상태"
msgid "Log"
msgstr "로그"
#, fuzzy
msgid "Creating report..."
msgstr "%s 새로 만들기..."
msgid "Export Debug Report"
msgstr "디버그 보고서 내보내기"
msgid "Fixing search index..."
msgstr ""
msgid "Fix search index"
msgstr ""
msgid ""
"Use this to rebuild the search index if there is a problem with search. It "
"may take some times depending on the number of notes."
msgstr ""
#, fuzzy
msgid "More information"
msgstr "설정"
msgid ""
"To work correctly, the app needs the following permissions. Please enable "
"them in your phone settings, in Apps > Joplin > Permissions"
@@ -1710,10 +1937,6 @@ msgstr "- 위치: 지리적 위치 정보를 노트에 첨부하기 위해서
msgid "Joplin website"
msgstr "조플린 웹사이트"
#, javascript-format
msgid "Joplin v%s"
msgstr "조플린 v%s"
#, javascript-format
msgid "Database v%s"
msgstr "데이터베이스 v%s"
@@ -1752,6 +1975,10 @@ msgstr "노트북을 저장할 수 없습니다: %s"
msgid "Edit notebook"
msgstr "노트북 편집"
#, fuzzy
msgid "Enter notebook title"
msgstr "노트북 제목:"
msgid "Show all"
msgstr "모두 표시"
@@ -1775,10 +2002,32 @@ msgstr "ID %s에 해당하는 항목이 없습니다"
msgid "The Joplin mobile app does not currently support this type of link: %s"
msgstr "조플린 모바일 앱은 현재 해당 형식의 링크를 지원하지 않습니다: %s"
#, javascript-format
msgid "Links with protocol \"%s\" are not supported"
msgstr ""
#, javascript-format
msgid "Unsupported image type: %s"
msgstr "지원하지 않는 이미지 형식: %s"
#, fuzzy, javascript-format
msgid "Updated: %s"
msgstr "업데이트됨: %d."
msgid "View on map"
msgstr "지도에 표시"
msgid "Go to source URL"
msgstr "소스 URL로 이동"
#, fuzzy
msgid "Attach..."
msgstr "찾기..."
#, fuzzy
msgid "Choose an option"
msgstr "고급 옵션"
msgid "Take photo"
msgstr "사진 찍기"
@@ -1797,20 +2046,19 @@ msgstr "노트로 변환"
msgid "Convert to todo"
msgstr "'할 일'로 변환"
msgid "Hide metadata"
msgstr "메타데이터 숨김"
#, fuzzy
msgid "Properties"
msgstr "노트 속성"
msgid "Show metadata"
msgstr "메타데이터 표시"
msgid "Add body"
msgstr ""
msgid "View on map"
msgstr "지도에 표시"
msgid "Edit"
msgstr "편집"
msgid "Go to source URL"
msgstr "소스 URL로 이동"
msgid "Delete notebook"
msgstr "노트북 삭제"
#, fuzzy
msgid "Add title"
msgstr "제목"
msgid "Login with OneDrive"
msgstr "OneDrive 로그인"
@@ -1818,18 +2066,54 @@ msgstr "OneDrive 로그인"
msgid "Search"
msgstr "검색"
msgid ""
"Click on the (+) button to create a new note or notebook. Click on the side "
"menu to access your existing notebooks."
msgstr ""
"(+) 버튼을 눌러 새 노트 및 노트북을 만드세요. 측면 메뉴를 눌러 기존의 노트북"
"을 관리하세요."
#, fuzzy
#~ msgid "Permission to write to external storage"
#~ msgstr "카메라 사용 허가"
msgid "You currently have no notebook. Create one by clicking on (+) button."
msgstr "노트북이 없습니다. (+) 버튼을 눌러 새로 만드세요."
#~ msgid "Cancel synchronisation"
#~ msgstr "동기화 취소"
msgid "Welcome"
msgstr "환영합니다"
#~ msgid "Hide metadata"
#~ msgstr "메타데이터 숨김"
#~ msgid "Show metadata"
#~ msgstr "메타데이터 표시"
#~ msgid "Delete notebook"
#~ msgstr "노트북 삭제"
#~ msgid ""
#~ "Click on the (+) button to create a new note or notebook. Click on the "
#~ "side menu to access your existing notebooks."
#~ msgstr ""
#~ "(+) 버튼을 눌러 새 노트 및 노트북을 만드세요. 측면 메뉴를 눌러 기존의 노트"
#~ "북을 관리하세요."
#~ msgid ""
#~ "You currently have no notebook. Create one by clicking on (+) button."
#~ msgstr "노트북이 없습니다. (+) 버튼을 눌러 새로 만드세요."
#~ msgid "Welcome"
#~ msgstr "환영합니다"
#~ msgid "Separate each tag by a comma."
#~ msgstr "각각의 태그를 쉼표로 구분합니다."
#~ msgid "Some items cannot be decrypted."
#~ msgstr "일부 항목들은 암호화할 수 없습니다."
#~ msgid "%s (%s): %s"
#~ msgstr "%s (%s): %s"
#~ msgid ""
#~ "The path to synchronise with when file system synchronisation is enabled. "
#~ "See `sync.target`."
#~ msgstr ""
#~ "파일 시스템 동기화가 활성화된 경우에 동기화를 할 경로입니다. `sync.target`"
#~ "를 참조하세요."
#~ msgid "Joplin v%s"
#~ msgstr "조플린 v%s"
#~ msgid "State: %s."
#~ msgstr "상태: %s."

File diff suppressed because it is too large Load Diff

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`."
@@ -606,8 +607,8 @@ msgstr ""
msgid "PDF File"
msgstr "Bestand"
msgid "File"
msgstr "Bestand"
msgid "Synchronisation status"
msgstr "Synchronisatie status"
msgid "New note"
msgstr "Nieuwe notitie"
@@ -618,6 +619,57 @@ msgstr "Nieuwe to-do"
msgid "New notebook"
msgstr "Nieuw notitieboek"
msgid "Print"
msgstr ""
msgid "General Options"
msgstr "Algemene opties"
msgid "Encryption options"
msgstr "Versleutelopties"
msgid "Web clipper options"
msgstr ""
msgid "Create note from template"
msgstr ""
msgid "Create to-do from template"
msgstr ""
msgid "Insert template"
msgstr ""
msgid "Open template directory"
msgstr ""
msgid "Refresh templates"
msgstr ""
#, fuzzy, javascript-format
msgid "Revision: %s (%s)"
msgstr "%s %s (%s)"
#, javascript-format
msgid "%s %s (%s, %s)"
msgstr "%s %s (%s, %s)"
#, fuzzy
msgid "&File"
msgstr "Bestand"
msgid "About Joplin"
msgstr "Over Joplin"
msgid "Preferences..."
msgstr ""
msgid "Check for updates..."
msgstr ""
msgid "Templates"
msgstr ""
msgid "Import"
msgstr "Importeer"
@@ -625,8 +677,8 @@ msgstr "Importeer"
msgid "Export"
msgstr "Importeer"
msgid "Print"
msgstr ""
msgid "Synchronise"
msgstr "Synchroniseer"
#, javascript-format
msgid "Hide %s"
@@ -635,7 +687,11 @@ msgstr ""
msgid "Quit"
msgstr "Stop"
msgid "Edit"
msgid "Close Window"
msgstr ""
#, fuzzy
msgid "&Edit"
msgstr "Bewerk"
msgid "Copy"
@@ -660,12 +716,18 @@ msgstr ""
msgid "Link"
msgstr ""
msgid "Code"
msgstr ""
msgid "Insert Date Time"
msgstr ""
msgid "Edit in external editor"
msgstr ""
msgid "Tags"
msgstr "Tags"
msgid "Search in all the notes"
msgstr "Zoek in alle notities"
@@ -673,7 +735,7 @@ msgstr "Zoek in alle notities"
msgid "Search in current note"
msgstr "Zoek in alle notities"
msgid "View"
msgid "&View"
msgstr ""
msgid "Toggle sidebar"
@@ -685,22 +747,12 @@ msgstr ""
msgid "Focus"
msgstr ""
msgid "Tools"
#, fuzzy
msgid "&Tools"
msgstr "Tools"
msgid "Synchronisation status"
msgstr "Synchronisatie status"
msgid "Web clipper options"
msgstr ""
msgid "Encryption options"
msgstr "Versleutelopties"
msgid "General Options"
msgstr "Algemene opties"
msgid "Help"
#, fuzzy
msgid "&Help"
msgstr "Help"
msgid "Website and documentation"
@@ -710,16 +762,9 @@ msgstr "Website en documentatie"
msgid "Make a donation"
msgstr "Website en documentatie"
msgid "Check for updates..."
msgid "Toggle development tools"
msgstr ""
msgid "About Joplin"
msgstr "Over Joplin"
#, javascript-format
msgid "%s %s (%s, %s)"
msgstr "%s %s (%s, %s)"
#, fuzzy, javascript-format
msgid "Open %s"
msgstr "Op %s: %s"
@@ -744,11 +789,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"
@@ -823,13 +868,13 @@ msgstr ""
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 "Browse..."
msgstr ""
msgid "Apply"
msgstr ""
@@ -946,9 +991,6 @@ msgstr "Notitieboek titel:"
msgid "Add or remove tags:"
msgstr "Voeg tag toe of verwijder tag"
msgid "Separate each tag by a comma."
msgstr "Scheid iedere tag met een komma."
msgid "Rename notebook:"
msgstr "Hernoem notitieboek:"
@@ -972,8 +1014,9 @@ msgstr "Sommige items kunnen niet gesynchroniseerd worden."
msgid "View them now"
msgstr "Bekijk ze nu"
msgid "Some items cannot be decrypted."
msgstr "Sommige items kunnen niet gedecodeerd worden."
#, fuzzy
msgid "One or more master keys need a password."
msgstr "Voeg hoofdsleutel in:"
msgid "Set the password"
msgstr "Stel wachtwoord in"
@@ -993,9 +1036,33 @@ msgstr ""
msgid "URL"
msgstr ""
#, fuzzy
msgid "Note History"
msgstr "Notitieboeken"
msgid "Previous versions of this note"
msgstr ""
msgid "Note properties"
msgstr ""
#, javascript-format
msgid "The note \"%s\" has been successfully restored to the notebook \"%s\"."
msgstr ""
#, fuzzy
msgid "This note has no history"
msgstr "Deze notitie werd aangepast:"
msgid "Restore"
msgstr ""
#, javascript-format
msgid ""
"Click \"%s\" to restore the note. It will be copied in the notebook named "
"\"%s\". The current version of the note will not be replaced or modified."
msgstr ""
msgid "Open..."
msgstr ""
@@ -1044,9 +1111,6 @@ msgstr ""
msgid "Attach file"
msgstr "Voeg bestand toe"
msgid "Tags"
msgstr "Tags"
msgid "Set alarm"
msgstr "Zet melding"
@@ -1057,9 +1121,6 @@ msgstr "%s: %s"
msgid "Hyperlink"
msgstr ""
msgid "Code"
msgstr ""
msgid "Numbered List"
msgstr ""
@@ -1119,7 +1180,17 @@ 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?"
@@ -1131,23 +1202,23 @@ msgstr "Verwijderen"
msgid "Rename"
msgstr "Hernoem"
msgid "Synchronise"
msgstr "Synchroniseer"
msgid "Notebooks"
msgstr "Notitieboeken"
#, fuzzy, javascript-format
msgid "Decrypting items: %d/%d"
msgstr "Opgehaalde items: %d/%d."
msgstr "Opgehaalde items: %d/%d"
#, fuzzy, javascript-format
msgid "Fetching resources: %d"
msgstr "Middelen: %d."
msgid "Fetching resources: %d/%d"
msgstr "Middelen: %d/%d"
msgid "Please select where the sync status should be exported to"
msgstr "Selecteer waar de synchronisatie status naar geëxporteerd moet worden"
msgid "Retry"
msgstr ""
msgid "Add or remove tags"
msgstr "Voeg tag toe of verwijder tag"
@@ -1181,6 +1252,14 @@ msgstr "Notities verwijderen?"
msgid "Delete these %d notes?"
msgstr "Deze notities verwijderen?"
msgid ""
"Type a note title to jump to it. Or type # followed by a tag name, or @ "
"followed by a notebook name."
msgstr ""
msgid "Goto Anything..."
msgstr ""
#, javascript-format
msgid "Usage: %s"
msgstr "Gebruik: %s"
@@ -1294,12 +1373,24 @@ msgstr ""
msgid "Synchronisation is already in progress. State: %s"
msgstr "Synchronisatie is reeds bezig. Status: %s"
msgid ""
"Unknown item type downloaded - please upgrade Joplin to the latest version"
msgstr ""
msgid "Encrypted"
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"
@@ -1313,14 +1404,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 +1419,65 @@ msgstr "Kan notitie niet naar notitieboek \"%s\" kopiëren."
msgid "Cannot move note to \"%s\" notebook"
msgstr "Kan notitie niet naar notitieboek \"%s\" verplaatsen."
#, javascript-format
msgid ""
"Attention: If you change this location, make sure you copy all your content "
"to it before syncing, otherwise all files will be removed! See the FAQ for "
"more details: %s"
msgstr ""
msgid "Synchronisation target"
msgstr "Synchronisatiedoel"
msgid ""
"The target to synchonise to. Each sync target may have additional parameters "
"which are named as `sync.NUM.NAME` (all documented below)."
msgstr ""
msgid "Directory to synchronise with (absolute path)"
msgstr "Folder om mee te synchroniseren (absolute pad)"
msgid "Nextcloud WebDAV URL"
msgstr ""
msgid "Nextcloud username"
msgstr ""
#, fuzzy
msgid "Nextcloud password"
msgstr "Stel wachtwoord in"
msgid "WebDAV URL"
msgstr ""
msgid "WebDAV username"
msgstr ""
#, fuzzy
msgid "WebDAV password"
msgstr "Stel wachtwoord in"
msgid "Attachment download behaviour"
msgstr ""
msgid ""
"In \"Manual\" mode, attachments are downloaded only when you click on them. "
"In \"Auto\", they are downloaded when you open the note. In \"Always\", all "
"the attachments are downloaded whether you open the note or not."
msgstr ""
msgid "Always"
msgstr ""
msgid "Manual"
msgstr ""
msgid "Auto"
msgstr ""
msgid "Max concurrent connections"
msgstr ""
msgid "Language"
msgstr "Taal"
@@ -1369,6 +1511,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"
@@ -1386,6 +1532,43 @@ msgstr ""
msgid "When creating a new note:"
msgstr "Maakt een nieuwe notitie aan."
msgid "Enable soft breaks"
msgstr ""
#, fuzzy
msgid "Enable math expressions"
msgstr "Schakel encryptie in"
msgid "Enable ==mark== syntax"
msgstr ""
msgid "Enable footnotes"
msgstr ""
msgid "Enable table of contents extension"
msgstr ""
msgid "Enable ~sub~ syntax"
msgstr ""
msgid "Enable ^sup^ syntax"
msgstr ""
msgid "Enable deflist syntax"
msgstr ""
msgid "Enable abbreviation syntax"
msgstr ""
msgid "Enable markdown emoji"
msgstr ""
msgid "Enable ++insert++ syntax"
msgstr ""
msgid "Enable multimarkdown table extension"
msgstr ""
msgid "Show tray icon"
msgstr ""
@@ -1454,54 +1637,6 @@ msgstr ""
"geen meegegeven wordt, zal het programma de standaard editor proberen te "
"detecteren. "
msgid "Show advanced options"
msgstr "Toon geavanceerde opties"
msgid "Synchronisation target"
msgstr "Synchronisatiedoel"
msgid ""
"The target to synchonise to. Each sync target may have additional parameters "
"which are named as `sync.NUM.NAME` (all documented below)."
msgstr ""
msgid "Directory to synchronise with (absolute path)"
msgstr "Folder om mee te synchroniseren (absolute pad)"
msgid ""
"The path to synchronise with when file system synchronisation is enabled. "
"See `sync.target`."
msgstr ""
"Het pad om mee te synchroniseren als bestandssysteem synchronisatie is "
"ingeschakeld. Zie `sync.target`."
msgid "Nextcloud WebDAV URL"
msgstr ""
#, javascript-format
msgid ""
"Attention: If you change this location, make sure you copy all your content "
"to it before syncing, otherwise all files will be removed! See the FAQ for "
"more details: %s"
msgstr ""
msgid "Nextcloud username"
msgstr ""
#, fuzzy
msgid "Nextcloud password"
msgstr "Stel wachtwoord in"
msgid "WebDAV URL"
msgstr ""
msgid "WebDAV username"
msgstr ""
#, fuzzy
msgid "WebDAV password"
msgstr "Stel wachtwoord in"
msgid "Custom TLS certificates"
msgstr ""
@@ -1515,6 +1650,20 @@ msgstr ""
msgid "Ignore TLS certificate errors"
msgstr ""
#, fuzzy
msgid "Enable note history"
msgstr "Schakel encryptie in"
msgid "days"
msgstr ""
#, javascript-format
msgid "%d days"
msgstr ""
msgid "Keep note history for"
msgstr ""
#, javascript-format
msgid "Invalid option value: \"%s\". Possible values are: %s."
msgstr "Ongeldige optie: \"%s\". Geldige waarden zijn: %s."
@@ -1534,6 +1683,9 @@ msgstr ""
msgid "Note"
msgstr "Notitieboeken"
msgid "Plugins"
msgstr ""
#, fuzzy
msgid "Application"
msgstr "Sluit de applicatie."
@@ -1560,6 +1712,9 @@ msgstr "Exporteer Evernote bestanden"
msgid "Json Export Directory"
msgstr "Exporteer Evernote bestanden"
msgid "File"
msgstr "Bestand"
msgid "Directory"
msgstr ""
@@ -1584,13 +1739,12 @@ msgstr ""
msgid "Please specify the notebook where the notes should be imported to."
msgstr "Selecteer waar de synchronisatie status naar geëxporteerd moet worden"
msgid "Restored Notes"
msgstr ""
msgid "Items that cannot be synchronised"
msgstr "Items die niet gesynchroniseerd kunnen worden"
#, javascript-format
msgid "%s (%s): %s"
msgstr "%s (%s): %s"
msgid ""
"These items will remain on the device but will not be uploaded to the sync "
"target. In order to find these items, either search for the title or the ID "
@@ -1600,6 +1754,24 @@ msgstr ""
"geüpload worden naar het synchronistatiedoel. Om deze items te vinden, zoek "
"naar de titel of het ID (afgebeeld bovenaan tussen haakjes)."
#, fuzzy, javascript-format
msgid "%s (%s) could not be uploaded: %s"
msgstr "Het notitieboek kon niet opgeslaan worden: %s"
#, fuzzy, javascript-format
msgid "Item \"%s\" could not be downloaded: %s"
msgstr "Het notitieboek kon niet opgeslaan worden: %s"
#, fuzzy
msgid "Items that cannot be decrypted"
msgstr "Items die niet gesynchroniseerd kunnen worden"
msgid ""
"Joplin failed to decrypt these items multiple times, possibly because they "
"are corrupted or too large. These items will remain on the device but Joplin "
"will no longer attempt to decrypt them."
msgstr ""
msgid "Sync status (synced items / total items)"
msgstr "Sync status (gesynchroniseerde items / totaal aantal items)"
@@ -1646,18 +1818,6 @@ msgstr ""
msgid "Delete these notes?"
msgstr "Deze notities verwijderen?"
msgid "Log"
msgstr "Log"
msgid "Export Debug Report"
msgstr "Exporteer debug rapport"
msgid "Encryption Config"
msgstr "Encryptie configuratie"
msgid "Configuration"
msgstr "Configuratie"
msgid "Move to notebook..."
msgstr "Verplaats naar notitieboek..."
@@ -1682,8 +1842,24 @@ msgstr "Selecteer datum"
msgid "Confirm"
msgstr "Bevestig"
msgid "Cancel synchronisation"
msgstr "Annuleer synchronisatie"
#, fuzzy, javascript-format
msgid "Notebook: %s"
msgstr "Notitieboeken"
#, fuzzy
msgid "Encrypted notebooks cannot be renamed"
msgstr "Versleutelde items kunnen niet aangepast worden"
#, fuzzy
msgid "New Notebook"
msgstr "Nieuw notitieboek"
msgid "Configuration"
msgstr "Configuratie"
#, fuzzy
msgid "All notes"
msgstr "Nieuwe notitie"
#, fuzzy
msgid "Checking... Please wait."
@@ -1721,6 +1897,54 @@ msgstr ""
msgid "Type new tags or select from list"
msgstr ""
msgid "Warning"
msgstr ""
msgid ""
"In order to use file system synchronization your permission to write to "
"external storage is required."
msgstr ""
#, fuzzy
msgid "Information"
msgstr "Configuratie"
msgid "Encryption Config"
msgstr "Encryptie configuratie"
#, fuzzy
msgid "Tools"
msgstr "Tools"
#, fuzzy
msgid "Sync Status"
msgstr "Status"
msgid "Log"
msgstr "Log"
#, fuzzy
msgid "Creating report..."
msgstr "Notities importeren..."
msgid "Export Debug Report"
msgstr "Exporteer debug rapport"
msgid "Fixing search index..."
msgstr ""
msgid "Fix search index"
msgstr ""
msgid ""
"Use this to rebuild the search index if there is a problem with search. It "
"may take some times depending on the number of notes."
msgstr ""
#, fuzzy
msgid "More information"
msgstr "Configuratie"
msgid ""
"To work correctly, the app needs the following permissions. Please enable "
"them in your phone settings, in Apps > Joplin > Permissions"
@@ -1740,10 +1964,6 @@ msgstr ""
msgid "Joplin website"
msgstr ""
#, javascript-format
msgid "Joplin v%s"
msgstr ""
#, javascript-format
msgid "Database v%s"
msgstr ""
@@ -1784,6 +2004,10 @@ msgstr "Het notitieboek kon niet opgeslaan worden: %s"
msgid "Edit notebook"
msgstr "Bewerk notitieboek"
#, fuzzy
msgid "Enter notebook title"
msgstr "Notitieboek titel:"
msgid "Show all"
msgstr ""
@@ -1807,10 +2031,32 @@ msgstr ""
msgid "The Joplin mobile app does not currently support this type of link: %s"
msgstr ""
#, javascript-format
msgid "Links with protocol \"%s\" are not supported"
msgstr ""
#, javascript-format
msgid "Unsupported image type: %s"
msgstr "Afbeeldingstype %s wordt niet ondersteund"
#, fuzzy, javascript-format
msgid "Updated: %s"
msgstr "Bijgewerkt: %d."
msgid "View on map"
msgstr "Toon op de kaart"
msgid "Go to source URL"
msgstr ""
#, fuzzy
msgid "Attach..."
msgstr "Zoeken"
#, fuzzy
msgid "Choose an option"
msgstr "Toon geavanceerde opties"
#, fuzzy
msgid "Take photo"
msgstr "Voeg foto toe"
@@ -1830,20 +2076,18 @@ msgstr "Converteer naar notitie"
msgid "Convert to todo"
msgstr "Converteer naar to-do"
msgid "Hide metadata"
msgstr "Verberg metadata"
msgid "Show metadata"
msgstr "Toon metadata"
msgid "View on map"
msgstr "Toon op de kaart"
msgid "Go to source URL"
msgid "Properties"
msgstr ""
msgid "Delete notebook"
msgstr "Verwijder notitieboek"
msgid "Add body"
msgstr ""
msgid "Edit"
msgstr "Bewerk"
#, fuzzy
msgid "Add title"
msgstr "Untitled"
msgid "Login with OneDrive"
msgstr "Log in met OneDrive"
@@ -1851,20 +2095,49 @@ msgstr "Log in met OneDrive"
msgid "Search"
msgstr "Zoeken"
msgid ""
"Click on the (+) button to create a new note or notebook. Click on the side "
"menu to access your existing notebooks."
msgstr ""
"Klik op de (+) om een nieuwe notitie of een nieuw notitieboek aan te maken. "
"Klik in het menu om uw bestaande notitieboeken te raadplegen."
#~ msgid "Cancel synchronisation"
#~ msgstr "Annuleer synchronisatie"
msgid "You currently have no notebook. Create one by clicking on (+) button."
msgstr ""
"U heeft momenteel geen notitieboek. Maak een notitieboek door op (+) te "
"klikken."
#~ msgid "Hide metadata"
#~ msgstr "Verberg metadata"
msgid "Welcome"
msgstr "Welkom"
#~ msgid "Show metadata"
#~ msgstr "Toon metadata"
#~ msgid "Delete notebook"
#~ msgstr "Verwijder notitieboek"
#~ msgid ""
#~ "Click on the (+) button to create a new note or notebook. Click on the "
#~ "side menu to access your existing notebooks."
#~ msgstr ""
#~ "Klik op de (+) om een nieuwe notitie of een nieuw notitieboek aan te "
#~ "maken. Klik in het menu om uw bestaande notitieboeken te raadplegen."
#~ msgid ""
#~ "You currently have no notebook. Create one by clicking on (+) button."
#~ msgstr ""
#~ "U heeft momenteel geen notitieboek. Maak een notitieboek door op (+) te "
#~ "klikken."
#~ msgid "Welcome"
#~ msgstr "Welkom"
#~ msgid "Separate each tag by a comma."
#~ msgstr "Scheid iedere tag met een komma."
#~ msgid "Some items cannot be decrypted."
#~ msgstr "Sommige items kunnen niet gedecodeerd worden."
#~ msgid "%s (%s): %s"
#~ msgstr "%s (%s): %s"
#~ msgid ""
#~ "The path to synchronise with when file system synchronisation is enabled. "
#~ "See `sync.target`."
#~ msgstr ""
#~ "Het pad om mee te synchroniseren als bestandssysteem synchronisatie is "
#~ "ingeschakeld. Zie `sync.target`."
#, fuzzy
#~ msgid "State: %s."

File diff suppressed because it is too large Load Diff

2144
CliClient/locales/pl_PL.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

@@ -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:"
@@ -542,8 +542,8 @@ msgstr ""
msgid "PDF File"
msgstr "Fișier PDF"
msgid "File"
msgstr "Fișier"
msgid "Synchronisation status"
msgstr "Statusul sincronizării"
msgid "New note"
msgstr "Adăugați o nouă notiță"
@@ -554,14 +554,65 @@ msgstr "Adăugați o nouă sarcină"
msgid "New notebook"
msgstr "Adăugați un nou caiet de notițe"
msgid "Print"
msgstr "Printați"
msgid "General Options"
msgstr "Opțiuni Generale"
msgid "Encryption options"
msgstr "Opțiuni de criptare"
msgid "Web clipper options"
msgstr ""
msgid "Create note from template"
msgstr ""
msgid "Create to-do from template"
msgstr ""
msgid "Insert template"
msgstr ""
msgid "Open template directory"
msgstr ""
msgid "Refresh templates"
msgstr ""
#, fuzzy, javascript-format
msgid "Revision: %s (%s)"
msgstr "%s %s (%s)"
#, javascript-format
msgid "%s %s (%s, %s)"
msgstr "%s %s (%s, %s)"
#, fuzzy
msgid "&File"
msgstr "Fișier"
msgid "About Joplin"
msgstr "Despre Joplin"
msgid "Preferences..."
msgstr ""
msgid "Check for updates..."
msgstr "Verificați actualizările..."
msgid "Templates"
msgstr ""
msgid "Import"
msgstr "Importați"
msgid "Export"
msgstr "Exportați"
msgid "Print"
msgstr "Printați"
msgid "Synchronise"
msgstr "Sincronizați"
#, javascript-format
msgid "Hide %s"
@@ -570,7 +621,11 @@ msgstr "Ascundeți %s"
msgid "Quit"
msgstr "Ieșiți"
msgid "Edit"
msgid "Close Window"
msgstr ""
#, fuzzy
msgid "&Edit"
msgstr "Editați"
msgid "Copy"
@@ -595,12 +650,18 @@ msgstr ""
msgid "Link"
msgstr ""
msgid "Code"
msgstr "Cod"
msgid "Insert Date Time"
msgstr ""
msgid "Edit in external editor"
msgstr "Editați într-un editor extern"
msgid "Tags"
msgstr "Etichete"
msgid "Search in all the notes"
msgstr "Căutați în toate notițele"
@@ -608,7 +669,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"
@@ -620,22 +682,12 @@ msgstr ""
msgid "Focus"
msgstr ""
msgid "Tools"
#, fuzzy
msgid "&Tools"
msgstr "Unelte"
msgid "Synchronisation status"
msgstr "Statusul sincronizării"
msgid "Web clipper options"
msgstr ""
msgid "Encryption options"
msgstr "Opțiuni de criptare"
msgid "General Options"
msgstr "Opțiuni Generale"
msgid "Help"
#, fuzzy
msgid "&Help"
msgstr "Ajutor"
msgid "Website and documentation"
@@ -644,15 +696,8 @@ msgstr "Website și documentație"
msgid "Make a donation"
msgstr "Faceți o donație"
msgid "Check for updates..."
msgstr "Verificați actualizările..."
msgid "About Joplin"
msgstr "Despre Joplin"
#, javascript-format
msgid "%s %s (%s, %s)"
msgstr "%s %s (%s, %s)"
msgid "Toggle development tools"
msgstr ""
#, javascript-format
msgid "Open %s"
@@ -678,11 +723,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"
@@ -756,10 +801,10 @@ msgstr ""
msgid "Notes and settings are stored in: %s"
msgstr ""
msgid "Browse..."
msgid "Check synchronisation configuration"
msgstr ""
msgid "Check synchronisation configuration"
msgid "Browse..."
msgstr ""
msgid "Apply"
@@ -864,9 +909,6 @@ msgstr "Titlul caietului de notițe:"
msgid "Add or remove tags:"
msgstr "Adăugați ori eliminați etichete:"
msgid "Separate each tag by a comma."
msgstr "Separați fiecare etichetă printr-o virgulă."
msgid "Rename notebook:"
msgstr "Redenumiți caietul de notițe:"
@@ -888,8 +930,8 @@ msgstr "Câțiva itemi nu pot fi sincronizați."
msgid "View them now"
msgstr "Vizualizați-le acum"
msgid "Some items cannot be decrypted."
msgstr "Câțiva itemi nu pot fi descriptați."
msgid "One or more master keys need a password."
msgstr ""
msgid "Set the password"
msgstr "Setați parola"
@@ -907,9 +949,33 @@ msgstr ""
msgid "URL"
msgstr ""
#, fuzzy
msgid "Note History"
msgstr "Caiete de notițe"
msgid "Previous versions of this note"
msgstr ""
msgid "Note properties"
msgstr ""
#, javascript-format
msgid "The note \"%s\" has been successfully restored to the notebook \"%s\"."
msgstr ""
#, fuzzy
msgid "This note has no history"
msgstr "Această notiță a fost modificată:"
msgid "Restore"
msgstr ""
#, javascript-format
msgid ""
"Click \"%s\" to restore the note. It will be copied in the notebook named "
"\"%s\". The current version of the note will not be replaced or modified."
msgstr ""
msgid "Open..."
msgstr "Deschideți..."
@@ -957,9 +1023,6 @@ msgstr "Introduceți hyperlink"
msgid "Attach file"
msgstr "Atașați fișier"
msgid "Tags"
msgstr "Etichete"
msgid "Set alarm"
msgstr "Setați alarma"
@@ -970,9 +1033,6 @@ msgstr "În: %s"
msgid "Hyperlink"
msgstr "Hyperlink"
msgid "Code"
msgstr "Cod"
msgid "Numbered List"
msgstr "Listă numerotată"
@@ -1028,7 +1088,15 @@ 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?"
@@ -1040,9 +1108,6 @@ msgstr "Ștergeți"
msgid "Rename"
msgstr "Redenumiți"
msgid "Synchronise"
msgstr "Sincronizați"
msgid "Notebooks"
msgstr "Caiete de notițe"
@@ -1051,12 +1116,15 @@ msgid "Decrypting items: %d/%d"
msgstr "Se decriptează itemi: %d/%d"
#, fuzzy, javascript-format
msgid "Fetching resources: %d"
msgstr "Resurse: %d."
msgid "Fetching resources: %d/%d"
msgstr "Resurse: %d/%d"
msgid "Please select where the sync status should be exported to"
msgstr ""
msgid "Retry"
msgstr ""
msgid "Add or remove tags"
msgstr "Adăugați ori eliminați etichete"
@@ -1090,6 +1158,14 @@ msgstr "Ștergeți notițele?"
msgid "Delete these %d notes?"
msgstr "Ștergeți aceste notițe?"
msgid ""
"Type a note title to jump to it. Or type # followed by a tag name, or @ "
"followed by a notebook name."
msgstr ""
msgid "Goto Anything..."
msgstr ""
#, javascript-format
msgid "Usage: %s"
msgstr "Utilizare: %s"
@@ -1194,12 +1270,22 @@ msgstr "În progres"
msgid "Synchronisation is already in progress. State: %s"
msgstr ""
msgid ""
"Unknown item type downloaded - please upgrade Joplin to the latest version"
msgstr ""
msgid "Encrypted"
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"
@@ -1210,12 +1296,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"
@@ -1230,6 +1310,63 @@ msgstr "Nu se poate copia notița în caietul de notițe \"%s\""
msgid "Cannot move note to \"%s\" notebook"
msgstr "Nu se poate muta notița în caietul de notițe \"%s\""
#, javascript-format
msgid ""
"Attention: If you change this location, make sure you copy all your content "
"to it before syncing, otherwise all files will be removed! See the FAQ for "
"more details: %s"
msgstr ""
msgid "Synchronisation target"
msgstr ""
msgid ""
"The target to synchonise to. Each sync target may have additional parameters "
"which are named as `sync.NUM.NAME` (all documented below)."
msgstr ""
msgid "Directory to synchronise with (absolute path)"
msgstr ""
msgid "Nextcloud WebDAV URL"
msgstr "URL NextCloud WebDAV"
msgid "Nextcloud username"
msgstr "Nume utilizator Nextcloud"
msgid "Nextcloud password"
msgstr "Parolă Nextcloud"
msgid "WebDAV URL"
msgstr "URL-ul WebDAV"
msgid "WebDAV username"
msgstr "Nume utilizator WebDAV"
msgid "WebDAV password"
msgstr "Parolă WebDAV"
msgid "Attachment download behaviour"
msgstr ""
msgid ""
"In \"Manual\" mode, attachments are downloaded only when you click on them. "
"In \"Auto\", they are downloaded when you open the note. In \"Always\", all "
"the attachments are downloaded whether you open the note or not."
msgstr ""
msgid "Always"
msgstr ""
msgid "Manual"
msgstr ""
msgid "Auto"
msgstr ""
msgid "Max concurrent connections"
msgstr ""
msgid "Language"
msgstr "Limbă"
@@ -1260,6 +1397,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"
@@ -1275,6 +1416,43 @@ msgstr ""
msgid "When creating a new note:"
msgstr "Când este creată o nouă notiță:"
msgid "Enable soft breaks"
msgstr ""
#, fuzzy
msgid "Enable math expressions"
msgstr "Activați criptarea"
msgid "Enable ==mark== syntax"
msgstr ""
msgid "Enable footnotes"
msgstr ""
msgid "Enable table of contents extension"
msgstr ""
msgid "Enable ~sub~ syntax"
msgstr ""
msgid "Enable ^sup^ syntax"
msgstr ""
msgid "Enable deflist syntax"
msgstr ""
msgid "Enable abbreviation syntax"
msgstr ""
msgid "Enable markdown emoji"
msgstr ""
msgid "Enable ++insert++ syntax"
msgstr ""
msgid "Enable multimarkdown table extension"
msgstr ""
msgid "Show tray icon"
msgstr "Afișați iconița coșul de gunoi"
@@ -1338,50 +1516,6 @@ msgid ""
"If none is provided it will try to auto-detect the default editor."
msgstr ""
msgid "Show advanced options"
msgstr "Afișați opțiunile avansate"
msgid "Synchronisation target"
msgstr ""
msgid ""
"The target to synchonise to. Each sync target may have additional parameters "
"which are named as `sync.NUM.NAME` (all documented below)."
msgstr ""
msgid "Directory to synchronise with (absolute path)"
msgstr ""
msgid ""
"The path to synchronise with when file system synchronisation is enabled. "
"See `sync.target`."
msgstr ""
msgid "Nextcloud WebDAV URL"
msgstr "URL NextCloud WebDAV"
#, javascript-format
msgid ""
"Attention: If you change this location, make sure you copy all your content "
"to it before syncing, otherwise all files will be removed! See the FAQ for "
"more details: %s"
msgstr ""
msgid "Nextcloud username"
msgstr "Nume utilizator Nextcloud"
msgid "Nextcloud password"
msgstr "Parolă Nextcloud"
msgid "WebDAV URL"
msgstr "URL-ul WebDAV"
msgid "WebDAV username"
msgstr "Nume utilizator WebDAV"
msgid "WebDAV password"
msgstr "Parolă WebDAV"
msgid "Custom TLS certificates"
msgstr "Certificate TLS cusomizate"
@@ -1395,6 +1529,20 @@ msgstr ""
msgid "Ignore TLS certificate errors"
msgstr "Ignoră erorile de certificat TLS"
#, fuzzy
msgid "Enable note history"
msgstr "Activați criptarea"
msgid "days"
msgstr ""
#, javascript-format
msgid "%d days"
msgstr ""
msgid "Keep note history for"
msgstr ""
#, javascript-format
msgid "Invalid option value: \"%s\". Possible values are: %s."
msgstr ""
@@ -1414,6 +1562,9 @@ msgstr ""
msgid "Note"
msgstr "Caiete de notițe"
msgid "Plugins"
msgstr ""
#, fuzzy
msgid "Application"
msgstr "Duplicați"
@@ -1437,6 +1588,9 @@ msgstr ""
msgid "Json Export Directory"
msgstr ""
msgid "File"
msgstr "Fișier"
msgid "Directory"
msgstr ""
@@ -1460,19 +1614,36 @@ msgstr "Nu există date de exportat."
msgid "Please specify the notebook where the notes should be imported to."
msgstr ""
msgid "Restored Notes"
msgstr ""
msgid "Items that cannot be synchronised"
msgstr "Itemii nu pot fi sincronizați"
#, javascript-format
msgid "%s (%s): %s"
msgstr "%s (%s): %s"
msgid ""
"These items will remain on the device but will not be uploaded to the sync "
"target. In order to find these items, either search for the title or the ID "
"(which is displayed in brackets above)."
msgstr ""
#, fuzzy, javascript-format
msgid "%s (%s) could not be uploaded: %s"
msgstr "Acest fișier nu a putut fi deschis: %s"
#, fuzzy, javascript-format
msgid "Item \"%s\" could not be downloaded: %s"
msgstr "Acest fișier nu a putut fi deschis: %s"
#, fuzzy
msgid "Items that cannot be decrypted"
msgstr "Itemii nu pot fi sincronizați"
msgid ""
"Joplin failed to decrypt these items multiple times, possibly because they "
"are corrupted or too large. These items will remain on the device but Joplin "
"will no longer attempt to decrypt them."
msgstr ""
msgid "Sync status (synced items / total items)"
msgstr ""
@@ -1518,18 +1689,6 @@ msgstr ""
msgid "Delete these notes?"
msgstr "Ștergeți aceste notițe?"
msgid "Log"
msgstr ""
msgid "Export Debug Report"
msgstr ""
msgid "Encryption Config"
msgstr ""
msgid "Configuration"
msgstr "Configurare"
msgid "Move to notebook..."
msgstr "Mutați în caietul de notițe..."
@@ -1553,8 +1712,24 @@ msgstr "Selectați data"
msgid "Confirm"
msgstr "Confirmați"
msgid "Cancel synchronisation"
msgstr "Amânați sincronizarea"
#, fuzzy, javascript-format
msgid "Notebook: %s"
msgstr "Caiete de notițe"
#, fuzzy
msgid "Encrypted notebooks cannot be renamed"
msgstr "Itemii criptați nu pot fi editați"
#, fuzzy
msgid "New Notebook"
msgstr "Adăugați un nou caiet de notițe"
msgid "Configuration"
msgstr "Configurare"
#, fuzzy
msgid "All notes"
msgstr "notiță"
#, fuzzy
msgid "Checking... Please wait."
@@ -1590,6 +1765,54 @@ msgstr "Etichete noi:"
msgid "Type new tags or select from list"
msgstr ""
msgid "Warning"
msgstr ""
msgid ""
"In order to use file system synchronization your permission to write to "
"external storage is required."
msgstr ""
#, fuzzy
msgid "Information"
msgstr "Configurare"
msgid "Encryption Config"
msgstr ""
#, fuzzy
msgid "Tools"
msgstr "Unelte"
#, fuzzy
msgid "Sync Status"
msgstr "Status"
msgid "Log"
msgstr ""
#, fuzzy
msgid "Creating report..."
msgstr "Se crează un %s..."
msgid "Export Debug Report"
msgstr ""
msgid "Fixing search index..."
msgstr ""
msgid "Fix search index"
msgstr ""
msgid ""
"Use this to rebuild the search index if there is a problem with search. It "
"may take some times depending on the number of notes."
msgstr ""
#, fuzzy
msgid "More information"
msgstr "Configurare"
msgid ""
"To work correctly, the app needs the following permissions. Please enable "
"them in your phone settings, in Apps > Joplin > Permissions"
@@ -1609,10 +1832,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 ""
@@ -1651,6 +1870,10 @@ msgstr "Caietul de notițe nu a puut fi salvat: %s"
msgid "Edit notebook"
msgstr "Editați caietul de notițe"
#, fuzzy
msgid "Enter notebook title"
msgstr "Titlul caietului de notițe:"
msgid "Show all"
msgstr "Afișați tot"
@@ -1674,10 +1897,32 @@ msgstr "Niciun item cu ID-ul %s"
msgid "The Joplin mobile app does not currently support this type of link: %s"
msgstr ""
#, javascript-format
msgid "Links with protocol \"%s\" are not supported"
msgstr ""
#, javascript-format
msgid "Unsupported image type: %s"
msgstr ""
#, fuzzy, javascript-format
msgid "Updated: %s"
msgstr "Actualizat: %d."
msgid "View on map"
msgstr "Vizualizați pe hartă"
msgid "Go to source URL"
msgstr ""
#, fuzzy
msgid "Attach..."
msgstr "Caută..."
#, fuzzy
msgid "Choose an option"
msgstr "Afișați opțiunile avansate"
#, fuzzy
msgid "Take photo"
msgstr "Atașează imagine"
@@ -1697,20 +1942,18 @@ msgstr ""
msgid "Convert to todo"
msgstr ""
msgid "Hide metadata"
msgstr "Ascundeți metadatele"
msgid "Show metadata"
msgstr "Afișați metadatele"
msgid "View on map"
msgstr "Vizualizați pe hartă"
msgid "Go to source URL"
msgid "Properties"
msgstr ""
msgid "Delete notebook"
msgstr "Ștergeți caiet de notițe"
msgid "Add body"
msgstr ""
msgid "Edit"
msgstr "Editați"
#, fuzzy
msgid "Add title"
msgstr "titlu"
# vezi context
msgid "Login with OneDrive"
@@ -1719,18 +1962,39 @@ msgstr "Autentificare prin OneDrive"
msgid "Search"
msgstr "Caută"
msgid ""
"Click on the (+) button to create a new note or notebook. Click on the side "
"menu to access your existing notebooks."
msgstr ""
#~ msgid "Cancel synchronisation"
#~ msgstr "Amânați sincronizarea"
msgid "You currently have no notebook. Create one by clicking on (+) button."
msgstr ""
"Nu aveți niciun caiet de notițe creat. Creați unul făcând click pe butonnul "
"(+)."
#~ msgid "Hide metadata"
#~ msgstr "Ascundeți metadatele"
msgid "Welcome"
msgstr "Bine ați venit"
#~ msgid "Show metadata"
#~ msgstr "Afișați metadatele"
#~ msgid "Delete notebook"
#~ msgstr "Ștergeți caiet de notițe"
#~ msgid ""
#~ "You currently have no notebook. Create one by clicking on (+) button."
#~ msgstr ""
#~ "Nu aveți niciun caiet de notițe creat. Creați unul făcând click pe "
#~ "butonnul (+)."
#~ msgid "Welcome"
#~ msgstr "Bine ați venit"
#~ msgid "Separate each tag by a comma."
#~ msgstr "Separați fiecare etichetă printr-o virgulă."
#~ msgid "Some items cannot be decrypted."
#~ msgstr "Câțiva itemi nu pot fi descriptați."
#~ msgid "%s (%s): %s"
#~ msgstr "%s (%s): %s"
#, 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`."
@@ -603,8 +604,8 @@ msgstr "Uvažam v \"%s\" kot \"%s\" format. Prosim počakajte..."
msgid "PDF File"
msgstr "PDF datoteka"
msgid "File"
msgstr "Datoteka"
msgid "Synchronisation status"
msgstr "Status sinhronizacije"
msgid "New note"
msgstr "Nova zabeležka"
@@ -615,14 +616,66 @@ msgstr "Novi seznam opravil"
msgid "New notebook"
msgstr "Nova beležnica"
msgid "Print"
msgstr "Natisni"
msgid "General Options"
msgstr "Splošne možnosti"
msgid "Encryption options"
msgstr "Možnosti enkripcije"
msgid "Web clipper options"
msgstr ""
msgid "Create note from template"
msgstr ""
msgid "Create to-do from template"
msgstr ""
msgid "Insert template"
msgstr ""
#, fuzzy
msgid "Open template directory"
msgstr "Joplin izvozno mesto"
msgid "Refresh templates"
msgstr ""
#, fuzzy, javascript-format
msgid "Revision: %s (%s)"
msgstr "%s %s (%s)"
#, javascript-format
msgid "%s %s (%s, %s)"
msgstr "%s %s (%s, %s)"
#, fuzzy
msgid "&File"
msgstr "Datoteka"
msgid "About Joplin"
msgstr "O Joplinu"
msgid "Preferences..."
msgstr ""
msgid "Check for updates..."
msgstr "Preverjanje za posodobitvami..."
msgid "Templates"
msgstr ""
msgid "Import"
msgstr "Uvozi"
msgid "Export"
msgstr "Izvozi"
msgid "Print"
msgstr "Natisni"
msgid "Synchronise"
msgstr "Sinhroniziraj"
#, javascript-format
msgid "Hide %s"
@@ -631,7 +684,11 @@ msgstr "Skrij %s"
msgid "Quit"
msgstr "Izhod"
msgid "Edit"
msgid "Close Window"
msgstr ""
#, fuzzy
msgid "&Edit"
msgstr "Uredi"
msgid "Copy"
@@ -656,12 +713,18 @@ msgstr ""
msgid "Link"
msgstr ""
msgid "Code"
msgstr ""
msgid "Insert Date Time"
msgstr ""
msgid "Edit in external editor"
msgstr ""
msgid "Tags"
msgstr "Oznake"
msgid "Search in all the notes"
msgstr "Išči znotraj vseh zabeležk"
@@ -669,7 +732,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"
@@ -682,22 +746,12 @@ msgstr "Spremeni izgled urejevalnika"
msgid "Focus"
msgstr "Fokusiraj vsebino"
msgid "Tools"
#, fuzzy
msgid "&Tools"
msgstr "Orodja"
msgid "Synchronisation status"
msgstr "Status sinhronizacije"
msgid "Web clipper options"
msgstr ""
msgid "Encryption options"
msgstr "Možnosti enkripcije"
msgid "General Options"
msgstr "Splošne možnosti"
msgid "Help"
#, fuzzy
msgid "&Help"
msgstr "Pomoč"
msgid "Website and documentation"
@@ -706,15 +760,8 @@ msgstr "Spletna stran in dokumentacija"
msgid "Make a donation"
msgstr "Doniraj"
msgid "Check for updates..."
msgstr "Preverjanje za posodobitvami..."
msgid "About Joplin"
msgstr "O Joplinu"
#, javascript-format
msgid "%s %s (%s, %s)"
msgstr "%s %s (%s, %s)"
msgid "Toggle development tools"
msgstr ""
#, javascript-format
msgid "Open %s"
@@ -740,11 +787,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"
@@ -818,12 +865,12 @@ msgstr ""
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 "Browse..."
msgstr ""
msgid "Apply"
msgstr ""
@@ -942,9 +989,6 @@ msgstr "Naslov beležnice:"
msgid "Add or remove tags:"
msgstr "Dodaj ali odstrani oznako:"
msgid "Separate each tag by a comma."
msgstr "Loči vsako oznako z vejico."
msgid "Rename notebook:"
msgstr "Preimenuj beležnico:"
@@ -968,8 +1012,9 @@ msgstr "Nekateri premeti ne morejo biti sinhronizirani."
msgid "View them now"
msgstr "Prikaži jih sedaj"
msgid "Some items cannot be decrypted."
msgstr "Nekateri predmeti ne morejo biti dekriptirani."
#, fuzzy
msgid "One or more master keys need a password."
msgstr "Vnesite glavno geslo:"
msgid "Set the password"
msgstr "Nastavi geslo"
@@ -991,9 +1036,33 @@ msgstr ""
msgid "URL"
msgstr ""
#, fuzzy
msgid "Note History"
msgstr "Beležnice"
msgid "Previous versions of this note"
msgstr ""
msgid "Note properties"
msgstr ""
#, javascript-format
msgid "The note \"%s\" has been successfully restored to the notebook \"%s\"."
msgstr ""
#, fuzzy
msgid "This note has no history"
msgstr "Ta zabeležka je bila spremenjena:"
msgid "Restore"
msgstr ""
#, javascript-format
msgid ""
"Click \"%s\" to restore the note. It will be copied in the notebook named "
"\"%s\". The current version of the note will not be replaced or modified."
msgstr ""
msgid "Open..."
msgstr "Odpri..."
@@ -1043,9 +1112,6 @@ msgstr ""
msgid "Attach file"
msgstr "Pripni datoteko"
msgid "Tags"
msgstr "Oznake"
msgid "Set alarm"
msgstr "Nastavi alarm"
@@ -1056,9 +1122,6 @@ msgstr "%s: %s"
msgid "Hyperlink"
msgstr ""
msgid "Code"
msgstr ""
msgid "Numbered List"
msgstr ""
@@ -1116,7 +1179,17 @@ 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?"
@@ -1128,23 +1201,23 @@ msgstr "Izbriši"
msgid "Rename"
msgstr "Preimenuj"
msgid "Synchronise"
msgstr "Sinhroniziraj"
msgid "Notebooks"
msgstr "Beležnice"
#, fuzzy, javascript-format
msgid "Decrypting items: %d/%d"
msgstr "Preneseni predmeti: %d/%d."
msgstr "Preneseni predmeti: %d/%d"
#, fuzzy, javascript-format
msgid "Fetching resources: %d"
msgstr "Viri: %d."
msgid "Fetching resources: %d/%d"
msgstr "Viri: %d/%d"
msgid "Please select where the sync status should be exported to"
msgstr "Prosim izberite, kam želite izvoziti sinhronizacijski status"
msgid "Retry"
msgstr ""
msgid "Add or remove tags"
msgstr "Dodaj ali odstrani oznake"
@@ -1179,6 +1252,14 @@ msgstr "Izbriši zabeležke?"
msgid "Delete these %d notes?"
msgstr "Izbriši te zabeležke?"
msgid ""
"Type a note title to jump to it. Or type # followed by a tag name, or @ "
"followed by a notebook name."
msgstr ""
msgid "Goto Anything..."
msgstr ""
#, javascript-format
msgid "Usage: %s"
msgstr "Uporaba: %s"
@@ -1291,12 +1372,24 @@ msgstr "V postopku"
msgid "Synchronisation is already in progress. State: %s"
msgstr "Sinhronizacija je že v postopku. Stanje: %s"
msgid ""
"Unknown item type downloaded - please upgrade Joplin to the latest version"
msgstr ""
msgid "Encrypted"
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"
@@ -1308,14 +1401,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."
@@ -1331,6 +1416,65 @@ msgstr "Ni moč kopirati zabeležke v \"%s\" beležnico"
msgid "Cannot move note to \"%s\" notebook"
msgstr "Ni moč premakniti zabeležke v \"%s\" beležnico"
#, javascript-format
msgid ""
"Attention: If you change this location, make sure you copy all your content "
"to it before syncing, otherwise all files will be removed! See the FAQ for "
"more details: %s"
msgstr ""
msgid "Synchronisation target"
msgstr "Sinhronizacijski cilj"
msgid ""
"The target to synchonise to. Each sync target may have additional parameters "
"which are named as `sync.NUM.NAME` (all documented below)."
msgstr ""
"Ciljno sinhronizacijsko mesto. Vsak sinhronizacijski cilj ima lahko dodatne "
"parametre imenovano kot `sync.NUM.NAME` (vse je dokumentirano spodaj)."
msgid "Directory to synchronise with (absolute path)"
msgstr "Mesto ciljne sinhronizacije (absolutna pot)"
msgid "Nextcloud WebDAV URL"
msgstr "Nextcloud WebDAV URL"
msgid "Nextcloud username"
msgstr "Nextcloud uporabniško ime"
msgid "Nextcloud password"
msgstr "Nextcloud geslo"
msgid "WebDAV URL"
msgstr "WebDAV URL"
msgid "WebDAV username"
msgstr "WebDAV uporabniško ime"
msgid "WebDAV password"
msgstr "WebDAV geslo"
msgid "Attachment download behaviour"
msgstr ""
msgid ""
"In \"Manual\" mode, attachments are downloaded only when you click on them. "
"In \"Auto\", they are downloaded when you open the note. In \"Always\", all "
"the attachments are downloaded whether you open the note or not."
msgstr ""
msgid "Always"
msgstr ""
msgid "Manual"
msgstr ""
msgid "Auto"
msgstr ""
msgid "Max concurrent connections"
msgstr ""
msgid "Language"
msgstr "Jezik"
@@ -1362,6 +1506,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"
@@ -1377,6 +1525,43 @@ msgstr "Fokusiraj vsebino"
msgid "When creating a new note:"
msgstr "Ob ustvarjanju nove zabeležke:"
msgid "Enable soft breaks"
msgstr ""
#, fuzzy
msgid "Enable math expressions"
msgstr "Omogoči enkripcijo"
msgid "Enable ==mark== syntax"
msgstr ""
msgid "Enable footnotes"
msgstr ""
msgid "Enable table of contents extension"
msgstr ""
msgid "Enable ~sub~ syntax"
msgstr ""
msgid "Enable ^sup^ syntax"
msgstr ""
msgid "Enable deflist syntax"
msgstr ""
msgid "Enable abbreviation syntax"
msgstr ""
msgid "Enable markdown emoji"
msgstr ""
msgid "Enable ++insert++ syntax"
msgstr ""
msgid "Enable multimarkdown table extension"
msgstr ""
msgid "Show tray icon"
msgstr "Pokaži ikono v območju za obvestila(opravilna vrstica)"
@@ -1447,54 +1632,6 @@ msgstr ""
"Urejevalnik, ki bo uporabljen za odpiranje zabeležk. Če noben ni izbran, bo "
"avtomatsko zaznan privzeti urejevalnik."
msgid "Show advanced options"
msgstr "Pokaži napredne možnosti"
msgid "Synchronisation target"
msgstr "Sinhronizacijski cilj"
msgid ""
"The target to synchonise to. Each sync target may have additional parameters "
"which are named as `sync.NUM.NAME` (all documented below)."
msgstr ""
"Ciljno sinhronizacijsko mesto. Vsak sinhronizacijski cilj ima lahko dodatne "
"parametre imenovano kot `sync.NUM.NAME` (vse je dokumentirano spodaj)."
msgid "Directory to synchronise with (absolute path)"
msgstr "Mesto ciljne sinhronizacije (absolutna pot)"
msgid ""
"The path to synchronise with when file system synchronisation is enabled. "
"See `sync.target`."
msgstr ""
"Pot za sinhronizacijo, ki bo uporabljena ob omogočeni sinhronizaciji. Poglej "
"`sync.target`."
msgid "Nextcloud WebDAV URL"
msgstr "Nextcloud WebDAV URL"
#, javascript-format
msgid ""
"Attention: If you change this location, make sure you copy all your content "
"to it before syncing, otherwise all files will be removed! See the FAQ for "
"more details: %s"
msgstr ""
msgid "Nextcloud username"
msgstr "Nextcloud uporabniško ime"
msgid "Nextcloud password"
msgstr "Nextcloud geslo"
msgid "WebDAV URL"
msgstr "WebDAV URL"
msgid "WebDAV username"
msgstr "WebDAV uporabniško ime"
msgid "WebDAV password"
msgstr "WebDAV geslo"
msgid "Custom TLS certificates"
msgstr ""
@@ -1508,6 +1645,20 @@ msgstr ""
msgid "Ignore TLS certificate errors"
msgstr ""
#, fuzzy
msgid "Enable note history"
msgstr "Omogoči enkripcijo"
msgid "days"
msgstr ""
#, javascript-format
msgid "%d days"
msgstr ""
msgid "Keep note history for"
msgstr ""
#, javascript-format
msgid "Invalid option value: \"%s\". Possible values are: %s."
msgstr "Neveljavna vrednost: \"%s\". Možne vrednosti so : %s."
@@ -1527,6 +1678,9 @@ msgstr ""
msgid "Note"
msgstr "Beležnice"
msgid "Plugins"
msgstr ""
#, fuzzy
msgid "Application"
msgstr "Izhod iz aplikacije."
@@ -1551,6 +1705,9 @@ msgstr "Evernote izvozna datoteka"
msgid "Json Export Directory"
msgstr "Joplin izvozno mesto"
msgid "File"
msgstr "Datoteka"
msgid "Directory"
msgstr "Mesto datoteke"
@@ -1576,13 +1733,12 @@ msgstr "Ni datotek za izvoz."
msgid "Please specify the notebook where the notes should be imported to."
msgstr "Prosim navedite beležnico, kamor želite uvoziti zabeležke."
msgid "Restored Notes"
msgstr ""
msgid "Items that cannot be synchronised"
msgstr "Predmeti ne morejo biti sinhronizirani"
#, javascript-format
msgid "%s (%s): %s"
msgstr "%s (%s): %s"
msgid ""
"These items will remain on the device but will not be uploaded to the sync "
"target. In order to find these items, either search for the title or the ID "
@@ -1592,6 +1748,24 @@ msgstr ""
"sinhronizacijski cilj. Če želite najti te predmete, iščite po ali naslovu "
"ali ID(je prikazan zgoraj v oklepajih)"
#, fuzzy, javascript-format
msgid "%s (%s) could not be uploaded: %s"
msgstr "Beležnica ne more biti shranjena: %s"
#, fuzzy, javascript-format
msgid "Item \"%s\" could not be downloaded: %s"
msgstr "Beležnica ne more biti shranjena: %s"
#, fuzzy
msgid "Items that cannot be decrypted"
msgstr "Predmeti ne morejo biti sinhronizirani"
msgid ""
"Joplin failed to decrypt these items multiple times, possibly because they "
"are corrupted or too large. These items will remain on the device but Joplin "
"will no longer attempt to decrypt them."
msgstr ""
msgid "Sync status (synced items / total items)"
msgstr "Status sinhronizacije(sinhronizirani predmeti / vse datoteke)"
@@ -1637,18 +1811,6 @@ msgstr "Trenutno ni zabeležk. Ustvarite jo s klikom na (+) gumb."
msgid "Delete these notes?"
msgstr "Izbriši te zabeležke?"
msgid "Log"
msgstr "Dnevnik"
msgid "Export Debug Report"
msgstr "Izvozi poročilo o napakah"
msgid "Encryption Config"
msgstr "Nastavite enkripcije"
msgid "Configuration"
msgstr "Nastavitve"
msgid "Move to notebook..."
msgstr "Premakni v beležnico..."
@@ -1673,8 +1835,24 @@ msgstr "Izberi datum"
msgid "Confirm"
msgstr "Potrdi"
msgid "Cancel synchronisation"
msgstr "Prekliči sinhronizacijo"
#, fuzzy, javascript-format
msgid "Notebook: %s"
msgstr "Beležnice"
#, fuzzy
msgid "Encrypted notebooks cannot be renamed"
msgstr "Enkriptirani predmeti ne morejo biti spremenjeni"
#, fuzzy
msgid "New Notebook"
msgstr "Nova beležnica"
msgid "Configuration"
msgstr "Nastavitve"
#, fuzzy
msgid "All notes"
msgstr "zabeležka"
#, fuzzy
msgid "Checking... Please wait."
@@ -1712,6 +1890,54 @@ msgstr ""
msgid "Type new tags or select from list"
msgstr ""
msgid "Warning"
msgstr ""
msgid ""
"In order to use file system synchronization your permission to write to "
"external storage is required."
msgstr ""
#, fuzzy
msgid "Information"
msgstr "Nastavitve"
msgid "Encryption Config"
msgstr "Nastavite enkripcije"
#, fuzzy
msgid "Tools"
msgstr "Orodja"
#, fuzzy
msgid "Sync Status"
msgstr "Status"
msgid "Log"
msgstr "Dnevnik"
#, fuzzy
msgid "Creating report..."
msgstr "Ustvarjanje nove %s..."
msgid "Export Debug Report"
msgstr "Izvozi poročilo o napakah"
msgid "Fixing search index..."
msgstr ""
msgid "Fix search index"
msgstr ""
msgid ""
"Use this to rebuild the search index if there is a problem with search. It "
"may take some times depending on the number of notes."
msgstr ""
#, fuzzy
msgid "More information"
msgstr "Nastavitve"
msgid ""
"To work correctly, the app needs the following permissions. Please enable "
"them in your phone settings, in Apps > Joplin > Permissions"
@@ -1731,10 +1957,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 ""
@@ -1774,6 +1996,10 @@ msgstr "Beležnica ne more biti shranjena: %s"
msgid "Edit notebook"
msgstr "Uredi beležnico"
#, fuzzy
msgid "Enter notebook title"
msgstr "Naslov beležnice:"
msgid "Show all"
msgstr "Prikaži vse"
@@ -1797,10 +2023,32 @@ msgstr ""
msgid "The Joplin mobile app does not currently support this type of link: %s"
msgstr ""
#, javascript-format
msgid "Links with protocol \"%s\" are not supported"
msgstr ""
#, javascript-format
msgid "Unsupported image type: %s"
msgstr "Nepodprt tip slike: %s"
#, fuzzy, javascript-format
msgid "Updated: %s"
msgstr "Posodobljeno: %d."
msgid "View on map"
msgstr "Prikaži na zemljevidu"
msgid "Go to source URL"
msgstr ""
#, fuzzy
msgid "Attach..."
msgstr "Išči"
#, fuzzy
msgid "Choose an option"
msgstr "Pokaži napredne možnosti"
#, fuzzy
msgid "Take photo"
msgstr "Pripni fotografijo"
@@ -1820,20 +2068,18 @@ msgstr "Pretvori v zabeležko"
msgid "Convert to todo"
msgstr "Pretvori v za narediti"
msgid "Hide metadata"
msgstr "Skrij meta podatke"
msgid "Show metadata"
msgstr "Prikaži meta podatke"
msgid "View on map"
msgstr "Prikaži na zemljevidu"
msgid "Go to source URL"
msgid "Properties"
msgstr ""
msgid "Delete notebook"
msgstr "Izbriši beležnico"
msgid "Add body"
msgstr ""
msgid "Edit"
msgstr "Uredi"
#, fuzzy
msgid "Add title"
msgstr "Neimenovano"
msgid "Login with OneDrive"
msgstr "Prijavi se z OneDrive"
@@ -1841,18 +2087,52 @@ msgstr "Prijavi se z OneDrive"
msgid "Search"
msgstr "Išči"
msgid ""
"Click on the (+) button to create a new note or notebook. Click on the side "
"menu to access your existing notebooks."
msgstr ""
"Kliknite na (+) gumb, da ustvarite novo zabeležko ali beležnico. Kliknite na "
"stranski menu za dostop do obstoječih beležnic."
#~ msgid "Cancel synchronisation"
#~ msgstr "Prekliči sinhronizacijo"
msgid "You currently have no notebook. Create one by clicking on (+) button."
msgstr "Trenutno nimate nobene beležnice. Ustvarite jo s klikom na (+) gumb."
#~ msgid "Hide metadata"
#~ msgstr "Skrij meta podatke"
msgid "Welcome"
msgstr "Dobrodošli"
#~ msgid "Show metadata"
#~ msgstr "Prikaži meta podatke"
#~ msgid "Delete notebook"
#~ msgstr "Izbriši beležnico"
#~ msgid ""
#~ "Click on the (+) button to create a new note or notebook. Click on the "
#~ "side menu to access your existing notebooks."
#~ msgstr ""
#~ "Kliknite na (+) gumb, da ustvarite novo zabeležko ali beležnico. Kliknite "
#~ "na stranski menu za dostop do obstoječih beležnic."
#~ msgid ""
#~ "You currently have no notebook. Create one by clicking on (+) button."
#~ msgstr ""
#~ "Trenutno nimate nobene beležnice. Ustvarite jo s klikom na (+) gumb."
#~ msgid "Welcome"
#~ msgstr "Dobrodošli"
#~ msgid "Separate each tag by a comma."
#~ msgstr "Loči vsako oznako z vejico."
#~ msgid "Some items cannot be decrypted."
#~ msgstr "Nekateri predmeti ne morejo biti dekriptirani."
#~ msgid "%s (%s): %s"
#~ msgstr "%s (%s): %s"
#~ msgid ""
#~ "The path to synchronise with when file system synchronisation is enabled. "
#~ "See `sync.target`."
#~ msgstr ""
#~ "Pot za sinhronizacijo, ki bo uporabljena ob omogočeni sinhronizaciji. "
#~ "Poglej `sync.target`."
#, fuzzy
#~ msgid "Joplin v%s"
#~ msgstr "Joplin spletna stran"
#~ msgid "State: %s."
#~ msgstr "Stanje: %s."

2125
CliClient/locales/sr_RS.po Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -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`."
@@ -607,8 +608,8 @@ msgstr "Importerar från \"%s\" som \"%s\" format. Vänta..."
msgid "PDF File"
msgstr "PDF-fil"
msgid "File"
msgstr "Fil"
msgid "Synchronisation status"
msgstr "Synkroniseringstillstånd"
msgid "New note"
msgstr "Ny anteckning"
@@ -619,14 +620,67 @@ msgstr "Ny att-göra"
msgid "New notebook"
msgstr "Ny anteckningsbok"
msgid "Print"
msgstr "Skriv ut"
msgid "General Options"
msgstr "Allmänna inställningar"
msgid "Encryption options"
msgstr "Krypteringsinställningar"
msgid "Web clipper options"
msgstr "Web clipper-inställningar"
msgid "Create note from template"
msgstr ""
msgid "Create to-do from template"
msgstr ""
#, fuzzy
msgid "Insert template"
msgstr "Infoga datumtid"
#, fuzzy
msgid "Open template directory"
msgstr "Joplin-exporteringskatalog"
msgid "Refresh templates"
msgstr ""
#, fuzzy, javascript-format
msgid "Revision: %s (%s)"
msgstr "%s %s (%s)"
#, javascript-format
msgid "%s %s (%s, %s)"
msgstr "%s %s (%s, %s)"
#, fuzzy
msgid "&File"
msgstr "Fil"
msgid "About Joplin"
msgstr "Om Joplin"
msgid "Preferences..."
msgstr ""
msgid "Check for updates..."
msgstr "Sök efter uppdateringar..."
msgid "Templates"
msgstr ""
msgid "Import"
msgstr "Importera"
msgid "Export"
msgstr "Exportera"
msgid "Print"
msgstr "Skriv ut"
msgid "Synchronise"
msgstr "Synkronisera"
#, javascript-format
msgid "Hide %s"
@@ -635,7 +689,11 @@ msgstr "Dölj %s"
msgid "Quit"
msgstr "Avsluta"
msgid "Edit"
msgid "Close Window"
msgstr ""
#, fuzzy
msgid "&Edit"
msgstr "Redigera"
msgid "Copy"
@@ -659,19 +717,26 @@ msgstr "Kursiv"
msgid "Link"
msgstr "Länk"
msgid "Code"
msgstr "Kod"
msgid "Insert Date Time"
msgstr "Infoga datumtid"
msgid "Edit in external editor"
msgstr "Redigera i extern redigerare"
msgid "Tags"
msgstr "Taggar"
msgid "Search in all the notes"
msgstr "Sök i alla anteckningarna"
msgid "Search in current note"
msgstr "Sök i aktuell anteckning"
msgid "View"
#, fuzzy
msgid "&View"
msgstr "Visa"
msgid "Toggle sidebar"
@@ -683,22 +748,12 @@ msgstr "Växla redigeringslayout"
msgid "Focus"
msgstr "Fokus"
msgid "Tools"
#, fuzzy
msgid "&Tools"
msgstr "Verktyg"
msgid "Synchronisation status"
msgstr "Synkroniseringstillstånd"
msgid "Web clipper options"
msgstr "Web clipper-inställningar"
msgid "Encryption options"
msgstr "Krypteringsinställningar"
msgid "General Options"
msgstr "Allmänna inställningar"
msgid "Help"
#, fuzzy
msgid "&Help"
msgstr "Hjälp"
msgid "Website and documentation"
@@ -707,15 +762,8 @@ msgstr "Webbplats och dokumentation"
msgid "Make a donation"
msgstr "Gör en donation"
msgid "Check for updates..."
msgstr "Sök efter uppdateringar..."
msgid "About Joplin"
msgstr "Om Joplin"
#, javascript-format
msgid "%s %s (%s, %s)"
msgstr "%s %s (%s, %s)"
msgid "Toggle development tools"
msgstr ""
#, javascript-format
msgid "Open %s"
@@ -741,12 +789,12 @@ 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 "Din version: v%s"
msgid "Your version: %s"
msgstr "Din version: %s"
#, javascript-format
msgid "New version: v%s"
msgstr "Ny version: v%s"
msgid "New version: %s"
msgstr "Ny version: %s"
msgid "Yes"
msgstr "Ja"
@@ -825,12 +873,12 @@ msgstr ""
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 "Browse..."
msgstr "Bläddra..."
msgid "Apply"
msgstr "Tillämpa"
@@ -950,9 +998,6 @@ msgstr "Titel på anteckningsbok:"
msgid "Add or remove tags:"
msgstr "Lägg till eller ta bort taggar:"
msgid "Separate each tag by a comma."
msgstr "Separera varje tagg med ett komma."
msgid "Rename notebook:"
msgstr "Byt namn på anteckningsbok:"
@@ -974,8 +1019,9 @@ msgstr "Några objekt kan inte synkroniseras."
msgid "View them now"
msgstr "Visa dem nu"
msgid "Some items cannot be decrypted."
msgstr "Några objekt kan inte dekrypteras."
#, fuzzy
msgid "One or more master keys need a password."
msgstr "Ange huvudlösenord:"
msgid "Set the password"
msgstr "Ställ in lösenord"
@@ -995,9 +1041,33 @@ msgstr "Plats"
msgid "URL"
msgstr "URL"
#, fuzzy
msgid "Note History"
msgstr "Anteckningsboken"
msgid "Previous versions of this note"
msgstr ""
msgid "Note properties"
msgstr "Anteckningens egenskaper"
#, javascript-format
msgid "The note \"%s\" has been successfully restored to the notebook \"%s\"."
msgstr ""
#, fuzzy
msgid "This note has no history"
msgstr "Denna anteckning har ändrats:"
msgid "Restore"
msgstr ""
#, javascript-format
msgid ""
"Click \"%s\" to restore the note. It will be copied in the notebook named "
"\"%s\". The current version of the note will not be replaced or modified."
msgstr ""
msgid "Open..."
msgstr "Öppna..."
@@ -1048,9 +1118,6 @@ msgstr "Infoga hyperlänk"
msgid "Attach file"
msgstr "Bifoga fil"
msgid "Tags"
msgstr "Taggar"
msgid "Set alarm"
msgstr "Sätt alarm"
@@ -1061,9 +1128,6 @@ msgstr "I: %s"
msgid "Hyperlink"
msgstr "Hyperlänk"
msgid "Code"
msgstr "Kod"
msgid "Numbered List"
msgstr "Numrerad lista"
@@ -1119,7 +1183,17 @@ 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?"
@@ -1131,9 +1205,6 @@ msgstr "Ta bort"
msgid "Rename"
msgstr "Byt namn"
msgid "Synchronise"
msgstr "Synkronisera"
msgid "Notebooks"
msgstr "Anteckningsböcker"
@@ -1142,12 +1213,15 @@ msgid "Decrypting items: %d/%d"
msgstr "Dekrypterar objekt: %d/%d"
#, javascript-format
msgid "Fetching resources: %d"
msgstr "Hämtar resurser: %d"
msgid "Fetching resources: %d/%d"
msgstr "Hämtar resurser: %d/%d"
msgid "Please select where the sync status should be exported to"
msgstr "Välj vart synkroniseringstillståndet ska exporteras till"
msgid "Retry"
msgstr ""
msgid "Add or remove tags"
msgstr "Lägg till eller ta bort taggar"
@@ -1180,6 +1254,14 @@ msgstr "Ta bort anteckningar?"
msgid "Delete these %d notes?"
msgstr "Ta bort dessa anteckningar?"
msgid ""
"Type a note title to jump to it. Or type # followed by a tag name, or @ "
"followed by a notebook name."
msgstr ""
msgid "Goto Anything..."
msgstr ""
#, javascript-format
msgid "Usage: %s"
msgstr "Användning: %s"
@@ -1292,12 +1374,22 @@ msgstr "Pågår"
msgid "Synchronisation is already in progress. State: %s"
msgstr "Synkronisering pågår redan. Tillstånd: %s"
msgid ""
"Unknown item type downloaded - please upgrade Joplin to the latest version"
msgstr ""
msgid "Encrypted"
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"
@@ -1309,12 +1401,6 @@ 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"
@@ -1329,6 +1415,68 @@ msgstr "Kan inte kopiera anteckning till \"%s\" anteckningsbok"
msgid "Cannot move note to \"%s\" notebook"
msgstr "Kan inte flytta anteckning till \"%s\" anteckningsbok"
#, javascript-format
msgid ""
"Attention: If you change this location, make sure you copy all your content "
"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 "Synchronisation target"
msgstr "Synkroniseringsmål"
msgid ""
"The target to synchonise to. Each sync target may have additional parameters "
"which are named as `sync.NUM.NAME` (all documented below)."
msgstr ""
"Målet att synkronisera till. Varje synkroniseringsmål kan ha ytterligare "
"parametrar som heter `sync.NUM.NAME` (alla dokumenterade nedan)."
msgid "Directory to synchronise with (absolute path)"
msgstr "Katalog för att synkronisera med (absolut sökväg)"
msgid "Nextcloud WebDAV URL"
msgstr "Nextcloud-WebDAV-webbadress"
msgid "Nextcloud username"
msgstr "Nextcloud-användarnamn"
msgid "Nextcloud password"
msgstr "Nextcloud-lösenord"
msgid "WebDAV URL"
msgstr "WebDAV-webbadress"
msgid "WebDAV username"
msgstr "WebDAV-användarnamn"
msgid "WebDAV password"
msgstr "WebDAV-lösenord"
msgid "Attachment download behaviour"
msgstr ""
msgid ""
"In \"Manual\" mode, attachments are downloaded only when you click on them. "
"In \"Auto\", they are downloaded when you open the note. In \"Always\", all "
"the attachments are downloaded whether you open the note or not."
msgstr ""
msgid "Always"
msgstr ""
msgid "Manual"
msgstr ""
msgid "Auto"
msgstr ""
msgid "Max concurrent connections"
msgstr ""
msgid "Language"
msgstr "Språk"
@@ -1359,6 +1507,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"
@@ -1374,6 +1526,43 @@ msgstr "Fokus på huvuddel"
msgid "When creating a new note:"
msgstr "När du skapar en ny anteckning:"
msgid "Enable soft breaks"
msgstr ""
#, fuzzy
msgid "Enable math expressions"
msgstr "Aktivera kryptering"
msgid "Enable ==mark== syntax"
msgstr ""
msgid "Enable footnotes"
msgstr ""
msgid "Enable table of contents extension"
msgstr ""
msgid "Enable ~sub~ syntax"
msgstr ""
msgid "Enable ^sup^ syntax"
msgstr ""
msgid "Enable deflist syntax"
msgstr ""
msgid "Enable abbreviation syntax"
msgstr ""
msgid "Enable markdown emoji"
msgstr ""
msgid "Enable ++insert++ syntax"
msgstr ""
msgid "Enable multimarkdown table extension"
msgstr ""
msgid "Show tray icon"
msgstr "Visa fältikon"
@@ -1445,57 +1634,6 @@ msgstr ""
"anteckning. Om inget tillhandahålls försöker det automatiskt identifiera "
"standardredigeraren."
msgid "Show advanced options"
msgstr "Visa avancerade inställningar"
msgid "Synchronisation target"
msgstr "Synkroniseringsmål"
msgid ""
"The target to synchonise to. Each sync target may have additional parameters "
"which are named as `sync.NUM.NAME` (all documented below)."
msgstr ""
"Målet att synkronisera till. Varje synkroniseringsmål kan ha ytterligare "
"parametrar som heter `sync.NUM.NAME` (alla dokumenterade nedan)."
msgid "Directory to synchronise with (absolute path)"
msgstr "Katalog för att synkronisera med (absolut sökväg)"
msgid ""
"The path to synchronise with when file system synchronisation is enabled. "
"See `sync.target`."
msgstr ""
"Sökvägen att synkronisera med när synkronisering av filsystem är aktiverat. "
"Se `sync.target`."
msgid "Nextcloud WebDAV URL"
msgstr "Nextcloud-WebDAV-webbadress"
#, javascript-format
msgid ""
"Attention: If you change this location, make sure you copy all your content "
"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"
msgid "Nextcloud password"
msgstr "Nextcloud-lösenord"
msgid "WebDAV URL"
msgstr "WebDAV-webbadress"
msgid "WebDAV username"
msgstr "WebDAV-användarnamn"
msgid "WebDAV password"
msgstr "WebDAV-lösenord"
msgid "Custom TLS certificates"
msgstr "Anpassade TLS-certifikat"
@@ -1514,6 +1652,20 @@ msgstr ""
msgid "Ignore TLS certificate errors"
msgstr "Ignorera TLS-certifikatfel"
#, fuzzy
msgid "Enable note history"
msgstr "Aktivera kryptering"
msgid "days"
msgstr ""
#, javascript-format
msgid "%d days"
msgstr ""
msgid "Keep note history for"
msgstr ""
#, javascript-format
msgid "Invalid option value: \"%s\". Possible values are: %s."
msgstr "Ogiltigt inställningsvärde: \"%s\". Möjliga värden är: %s."
@@ -1531,6 +1683,9 @@ msgstr "Utseende"
msgid "Note"
msgstr "Anteckning"
msgid "Plugins"
msgstr ""
msgid "Application"
msgstr "Avslutar programmet"
@@ -1553,6 +1708,9 @@ msgstr "Evernote-exporteringsfil"
msgid "Json Export Directory"
msgstr "Joplin-exportkatalog"
msgid "File"
msgstr "Fil"
msgid "Directory"
msgstr "Katalog"
@@ -1578,13 +1736,12 @@ msgstr "Det finns ingen data att exportera."
msgid "Please specify the notebook where the notes should be imported to."
msgstr "Ange anteckningsboken som anteckningarna ska importeras till."
msgid "Restored Notes"
msgstr ""
msgid "Items that cannot be synchronised"
msgstr "Objekt som inte kan synkroniseras"
#, javascript-format
msgid "%s (%s): %s"
msgstr "%s (%s): %s"
msgid ""
"These items will remain on the device but will not be uploaded to the sync "
"target. In order to find these items, either search for the title or the ID "
@@ -1594,6 +1751,24 @@ msgstr ""
"till synkroniseringsmålet. För att hitta dessa objekt, sök antingen efter "
"titel eller ID (som visas i parentes ovan)."
#, fuzzy, javascript-format
msgid "%s (%s) could not be uploaded: %s"
msgstr "Den här filen kunde inte öppnas: %s"
#, fuzzy, javascript-format
msgid "Item \"%s\" could not be downloaded: %s"
msgstr "Den här filen kunde inte öppnas: %s"
#, fuzzy
msgid "Items that cannot be decrypted"
msgstr "Objekt som inte kan synkroniseras"
msgid ""
"Joplin failed to decrypt these items multiple times, possibly because they "
"are corrupted or too large. These items will remain on the device but Joplin "
"will no longer attempt to decrypt them."
msgstr ""
msgid "Sync status (synced items / total items)"
msgstr "Synkroniseringstillstånd (synkroniserade objekt / totalt antal objekt)"
@@ -1641,18 +1816,6 @@ msgstr ""
msgid "Delete these notes?"
msgstr "Ta bort dessa anteckningar?"
msgid "Log"
msgstr "Logg"
msgid "Export Debug Report"
msgstr "Exportera felsökningsrapport"
msgid "Encryption Config"
msgstr "Kryptering-konfiguration"
msgid "Configuration"
msgstr "Konfiguration"
msgid "Move to notebook..."
msgstr "Flytta till anteckningsbok..."
@@ -1675,8 +1838,24 @@ msgstr "Välj datum"
msgid "Confirm"
msgstr "Bekräfta"
msgid "Cancel synchronisation"
msgstr "Avbryt synkronisering"
#, fuzzy, javascript-format
msgid "Notebook: %s"
msgstr "Anteckningsböcker"
#, fuzzy
msgid "Encrypted notebooks cannot be renamed"
msgstr "Krypterade objekt kan inte ändras"
#, fuzzy
msgid "New Notebook"
msgstr "Ny anteckningsbok"
msgid "Configuration"
msgstr "Konfiguration"
#, fuzzy
msgid "All notes"
msgstr "anteckning"
msgid "Checking... Please wait."
msgstr "Kontrollerar... vänta."
@@ -1718,6 +1897,54 @@ msgstr "Nya taggar:"
msgid "Type new tags or select from list"
msgstr "Skriv nya taggar eller välj från listan"
msgid "Warning"
msgstr ""
msgid ""
"In order to use file system synchronization your permission to write to "
"external storage is required."
msgstr ""
#, fuzzy
msgid "Information"
msgstr "Konfiguration"
msgid "Encryption Config"
msgstr "Kryptering-konfiguration"
#, fuzzy
msgid "Tools"
msgstr "Verktyg"
#, fuzzy
msgid "Sync Status"
msgstr "Tillstånd"
msgid "Log"
msgstr "Logg"
#, fuzzy
msgid "Creating report..."
msgstr "Skapar ny %s..."
msgid "Export Debug Report"
msgstr "Exportera felsökningsrapport"
msgid "Fixing search index..."
msgstr ""
msgid "Fix search index"
msgstr ""
msgid ""
"Use this to rebuild the search index if there is a problem with search. It "
"may take some times depending on the number of notes."
msgstr ""
#, fuzzy
msgid "More information"
msgstr "Konfiguration"
msgid ""
"To work correctly, the app needs the following permissions. Please enable "
"them in your phone settings, in Apps > Joplin > Permissions"
@@ -1745,10 +1972,6 @@ msgstr ""
msgid "Joplin website"
msgstr "Joplin-webbplats"
#, javascript-format
msgid "Joplin v%s"
msgstr "Joplin v%s"
#, javascript-format
msgid "Database v%s"
msgstr "Databas v%s"
@@ -1787,6 +2010,10 @@ msgstr "Anteckningsboken kunde inte sparas: %s"
msgid "Edit notebook"
msgstr "Redigera anteckningsbok"
#, fuzzy
msgid "Enter notebook title"
msgstr "Titel på anteckningsbok:"
msgid "Show all"
msgstr "Visa alla"
@@ -1811,10 +2038,32 @@ msgid "The Joplin mobile app does not currently support this type of link: %s"
msgstr ""
"Den mobila appen Joplin stöder för närvarande inte denna typ av länk: %s"
#, javascript-format
msgid "Links with protocol \"%s\" are not supported"
msgstr ""
#, javascript-format
msgid "Unsupported image type: %s"
msgstr "Bildstorlek som inte stöds: %s"
#, fuzzy, javascript-format
msgid "Updated: %s"
msgstr "Uppdaterad: %d."
msgid "View on map"
msgstr "Visa på karta"
msgid "Go to source URL"
msgstr "Gå till källans URL"
#, fuzzy
msgid "Attach..."
msgstr "Sök..."
#, fuzzy
msgid "Choose an option"
msgstr "Visa avancerade inställningar"
msgid "Take photo"
msgstr "Ta ett foto"
@@ -1833,20 +2082,19 @@ msgstr "Konvertera till anteckning"
msgid "Convert to todo"
msgstr "Konvertera till att-göra"
msgid "Hide metadata"
msgstr "Dölj metadata"
#, fuzzy
msgid "Properties"
msgstr "Anteckningens egenskaper"
msgid "Show metadata"
msgstr "Visa metadata"
msgid "Add body"
msgstr ""
msgid "View on map"
msgstr "Visa på karta"
msgid "Edit"
msgstr "Redigera"
msgid "Go to source URL"
msgstr "Gå till källans URL"
msgid "Delete notebook"
msgstr "Ta bort anteckningsbok"
#, fuzzy
msgid "Add title"
msgstr "titel"
msgid "Login with OneDrive"
msgstr "Logga in med OneDrive"
@@ -1854,21 +2102,57 @@ msgstr "Logga in med OneDrive"
msgid "Search"
msgstr "Sök"
msgid ""
"Click on the (+) button to create a new note or notebook. Click on the side "
"menu to access your existing notebooks."
msgstr ""
"Klicka på (+)-knappen för att skapa en ny anteckning eller anteckningsbok. "
"Klicka på sidomenyn för att få tillgång till dina befintliga "
"anteckningsböcker."
#, fuzzy
#~ msgid "Permission to write to external storage"
#~ msgstr "Tillåtelse att använda kameran"
msgid "You currently have no notebook. Create one by clicking on (+) button."
msgstr ""
"Du har för närvarande ingen anteckningsbok. Skapa en genom att klicka på (+)-"
"knappen."
#~ msgid "Cancel synchronisation"
#~ msgstr "Avbryt synkronisering"
msgid "Welcome"
msgstr "Välkommen"
#~ msgid "Hide metadata"
#~ msgstr "Dölj metadata"
#~ msgid "Show metadata"
#~ msgstr "Visa metadata"
#~ msgid "Delete notebook"
#~ msgstr "Ta bort anteckningsbok"
#~ msgid ""
#~ "Click on the (+) button to create a new note or notebook. Click on the "
#~ "side menu to access your existing notebooks."
#~ msgstr ""
#~ "Klicka på (+)-knappen för att skapa en ny anteckning eller "
#~ "anteckningsbok. Klicka på sidomenyn för att få tillgång till dina "
#~ "befintliga anteckningsböcker."
#~ msgid ""
#~ "You currently have no notebook. Create one by clicking on (+) button."
#~ msgstr ""
#~ "Du har för närvarande ingen anteckningsbok. Skapa en genom att klicka på "
#~ "(+)-knappen."
#~ msgid "Welcome"
#~ msgstr "Välkommen"
#~ msgid "Separate each tag by a comma."
#~ msgstr "Separera varje tagg med ett komma."
#~ msgid "Some items cannot be decrypted."
#~ msgstr "Några objekt kan inte dekrypteras."
#~ msgid "%s (%s): %s"
#~ msgstr "%s (%s): %s"
#~ msgid ""
#~ "The path to synchronise with when file system synchronisation is enabled. "
#~ "See `sync.target`."
#~ msgstr ""
#~ "Sökvägen att synkronisera med när synkronisering av filsystem är "
#~ "aktiverat. Se `sync.target`."
#~ msgid "Joplin v%s"
#~ msgstr "Joplin v%s"
#~ msgid "State: %s."
#~ msgstr "Tillstånd: %s."

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`。"
@@ -569,8 +570,8 @@ msgstr "從 \"%s\" 匯入為 \"%s\" 格式。請稍候..."
msgid "PDF File"
msgstr "PDF 檔案"
msgid "File"
msgstr "檔案"
msgid "Synchronisation status"
msgstr "顯示同步狀態"
msgid "New note"
msgstr "新增記事"
@@ -581,14 +582,67 @@ msgstr "新增待辦事項"
msgid "New notebook"
msgstr "新增記事本"
msgid "Print"
msgstr "列印"
msgid "General Options"
msgstr "一般選項"
msgid "Encryption options"
msgstr "加密選項"
msgid "Web clipper options"
msgstr "Web clipper 選項"
msgid "Create note from template"
msgstr ""
msgid "Create to-do from template"
msgstr ""
#, fuzzy
msgid "Insert template"
msgstr "插入日期時間"
#, fuzzy
msgid "Open template directory"
msgstr "Joplin 匯出目錄"
msgid "Refresh templates"
msgstr ""
#, fuzzy, javascript-format
msgid "Revision: %s (%s)"
msgstr "%s %s (%s)"
#, javascript-format
msgid "%s %s (%s, %s)"
msgstr "%s %s (%s, %s)"
#, fuzzy
msgid "&File"
msgstr "檔案"
msgid "About Joplin"
msgstr "關於 Joplin"
msgid "Preferences..."
msgstr ""
msgid "Check for updates..."
msgstr "檢查更新..."
msgid "Templates"
msgstr ""
msgid "Import"
msgstr "匯入"
msgid "Export"
msgstr "匯出"
msgid "Print"
msgstr "列印"
msgid "Synchronise"
msgstr "進行同步"
#, javascript-format
msgid "Hide %s"
@@ -597,7 +651,11 @@ msgstr "隱藏 %s"
msgid "Quit"
msgstr "結束"
msgid "Edit"
msgid "Close Window"
msgstr ""
#, fuzzy
msgid "&Edit"
msgstr "編輯"
msgid "Copy"
@@ -622,12 +680,18 @@ msgstr "斜體"
msgid "Link"
msgstr ""
msgid "Code"
msgstr "引言"
msgid "Insert Date Time"
msgstr "插入日期時間"
msgid "Edit in external editor"
msgstr "使用外部編輯器編輯"
msgid "Tags"
msgstr "標籤"
msgid "Search in all the notes"
msgstr "在所有記事中搜尋"
@@ -635,7 +699,8 @@ msgstr "在所有記事中搜尋"
msgid "Search in current note"
msgstr "在所有記事中搜尋"
msgid "View"
#, fuzzy
msgid "&View"
msgstr "檢視"
msgid "Toggle sidebar"
@@ -648,22 +713,12 @@ msgstr "切換編輯器佈局"
msgid "Focus"
msgstr "游標置於內文"
msgid "Tools"
#, fuzzy
msgid "&Tools"
msgstr "工具"
msgid "Synchronisation status"
msgstr "顯示同步狀態"
msgid "Web clipper options"
msgstr "Web clipper 選項"
msgid "Encryption options"
msgstr "加密選項"
msgid "General Options"
msgstr "一般選項"
msgid "Help"
#, fuzzy
msgid "&Help"
msgstr "說明"
msgid "Website and documentation"
@@ -672,15 +727,8 @@ msgstr "官方網站及線上說明"
msgid "Make a donation"
msgstr "捐助"
msgid "Check for updates..."
msgstr "檢查更新..."
msgid "About Joplin"
msgstr "關於 Joplin"
#, javascript-format
msgid "%s %s (%s, %s)"
msgstr "%s %s (%s, %s)"
msgid "Toggle development tools"
msgstr ""
#, javascript-format
msgid "Open %s"
@@ -706,11 +754,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,12 +834,12 @@ msgstr ""
msgid "Notes and settings are stored in: %s"
msgstr "所有記事和設置均儲存於: %s"
msgid "Browse..."
msgstr ""
msgid "Check synchronisation configuration"
msgstr "檢測同步設置"
msgid "Browse..."
msgstr ""
msgid "Apply"
msgstr "套用"
@@ -903,9 +951,6 @@ msgstr "記事本標題:"
msgid "Add or remove tags:"
msgstr "新增或移除標籤:"
msgid "Separate each tag by a comma."
msgstr "您可用逗號分隔每個標籤。"
msgid "Rename notebook:"
msgstr "重新命名記事本:"
@@ -927,8 +972,9 @@ msgstr "有些項目不能同步。"
msgid "View them now"
msgstr "立即檢視"
msgid "Some items cannot be decrypted."
msgstr "有些項目不能解密。"
#, fuzzy
msgid "One or more master keys need a password."
msgstr "輸入主密碼:"
msgid "Set the password"
msgstr "設置密碼"
@@ -946,9 +992,33 @@ msgstr ""
msgid "URL"
msgstr ""
#, fuzzy
msgid "Note History"
msgstr "記事本"
msgid "Previous versions of this note"
msgstr ""
msgid "Note properties"
msgstr ""
#, javascript-format
msgid "The note \"%s\" has been successfully restored to the notebook \"%s\"."
msgstr ""
#, fuzzy
msgid "This note has no history"
msgstr "此記事已被修改:"
msgid "Restore"
msgstr ""
#, javascript-format
msgid ""
"Click \"%s\" to restore the note. It will be copied in the notebook named "
"\"%s\". The current version of the note will not be replaced or modified."
msgstr ""
msgid "Open..."
msgstr "開啟..."
@@ -996,9 +1066,6 @@ msgstr "插入超連結"
msgid "Attach file"
msgstr "附加檔案"
msgid "Tags"
msgstr "標籤"
msgid "Set alarm"
msgstr "設置提醒"
@@ -1009,9 +1076,6 @@ msgstr "在: %s"
msgid "Hyperlink"
msgstr "超連結"
msgid "Code"
msgstr "引言"
msgid "Numbered List"
msgstr "編號清單"
@@ -1067,7 +1131,15 @@ 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?"
@@ -1079,9 +1151,6 @@ msgstr "刪除"
msgid "Rename"
msgstr "重新命名"
msgid "Synchronise"
msgstr "進行同步"
msgid "Notebooks"
msgstr "記事本"
@@ -1090,12 +1159,15 @@ msgid "Decrypting items: %d/%d"
msgstr "正在解密項目: %d/%d 項"
#, fuzzy, javascript-format
msgid "Fetching resources: %d"
msgstr "資源: %d"
msgid "Fetching resources: %d/%d"
msgstr "資源: %d/%d"
msgid "Please select where the sync status should be exported to"
msgstr "請選擇將同步狀態導出到的位置"
msgid "Retry"
msgstr ""
msgid "Add or remove tags"
msgstr "新增或移除標籤"
@@ -1128,6 +1200,14 @@ msgstr "刪除此記事?"
msgid "Delete these %d notes?"
msgstr "刪除這些記事?"
msgid ""
"Type a note title to jump to it. Or type # followed by a tag name, or @ "
"followed by a notebook name."
msgstr ""
msgid "Goto Anything..."
msgstr ""
#, javascript-format
msgid "Usage: %s"
msgstr "使用資訊: %s"
@@ -1237,12 +1317,22 @@ msgstr "進行中"
msgid "Synchronisation is already in progress. State: %s"
msgstr "同步已在進行中。狀態: %s"
msgid ""
"Unknown item type downloaded - please upgrade Joplin to the latest version"
msgstr ""
msgid "Encrypted"
msgstr "已加密"
msgid "Encrypted items cannot be modified"
msgstr "無法修改已加密項目"
msgid "title"
msgstr "標題"
msgid "updated date"
msgstr "更新日期"
msgid "Conflicts"
msgstr "衝突"
@@ -1253,12 +1343,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 "建立日期"
@@ -1273,6 +1357,65 @@ msgstr "無法複製此記事到 \"%s\" 記事本"
msgid "Cannot move note to \"%s\" notebook"
msgstr "無法移動此記事到 \"%s\" 記事本"
#, javascript-format
msgid ""
"Attention: If you change this location, make sure you copy all your content "
"to it before syncing, otherwise all files will be removed! See the FAQ for "
"more details: %s"
msgstr ""
msgid "Synchronisation target"
msgstr "同步目標"
msgid ""
"The target to synchonise to. Each sync target may have additional parameters "
"which are named as `sync.NUM.NAME` (all documented below)."
msgstr ""
"要同步的目標。每個同步目標可能有附加的參數,它們被命名為 `sync.NUM.NAME` (全"
"部記錄如下)。"
msgid "Directory to synchronise with (absolute path)"
msgstr "要同步的目錄 (絕對路徑)"
msgid "Nextcloud WebDAV URL"
msgstr "Nextcloud WebDAV 網址"
msgid "Nextcloud username"
msgstr "Nextcloud 用戶名稱"
msgid "Nextcloud password"
msgstr "Nextcloud 密碼"
msgid "WebDAV URL"
msgstr "WebDAV 網址"
msgid "WebDAV username"
msgstr "WebDAV 用戶名稱"
msgid "WebDAV password"
msgstr "WebDAV 密碼"
msgid "Attachment download behaviour"
msgstr ""
msgid ""
"In \"Manual\" mode, attachments are downloaded only when you click on them. "
"In \"Auto\", they are downloaded when you open the note. In \"Always\", all "
"the attachments are downloaded whether you open the note or not."
msgstr ""
msgid "Always"
msgstr ""
msgid "Manual"
msgstr ""
msgid "Auto"
msgstr ""
msgid "Max concurrent connections"
msgstr ""
msgid "Language"
msgstr "語言"
@@ -1303,6 +1446,10 @@ msgstr "排序記事"
msgid "Reverse sort order"
msgstr "顛倒排序順序"
#, fuzzy
msgid "Sort notebooks by"
msgstr "排序記事"
msgid "Save geo-location with notes"
msgstr "在記事中保存地理位置資訊"
@@ -1318,6 +1465,43 @@ msgstr "游標置於內文"
msgid "When creating a new note:"
msgstr "當新增記事時:"
msgid "Enable soft breaks"
msgstr ""
#, fuzzy
msgid "Enable math expressions"
msgstr "啟用加密"
msgid "Enable ==mark== syntax"
msgstr ""
msgid "Enable footnotes"
msgstr ""
msgid "Enable table of contents extension"
msgstr ""
msgid "Enable ~sub~ syntax"
msgstr ""
msgid "Enable ^sup^ syntax"
msgstr ""
msgid "Enable deflist syntax"
msgstr ""
msgid "Enable abbreviation syntax"
msgstr ""
msgid "Enable markdown emoji"
msgstr ""
msgid "Enable ++insert++ syntax"
msgstr ""
msgid "Enable multimarkdown table extension"
msgstr ""
msgid "Show tray icon"
msgstr "顯示系統匣圖示"
@@ -1385,52 +1569,6 @@ msgstr ""
"用於開啟筆記的編輯器命令 (可能包括參數)。如果沒有指明,程式將嘗試自動檢測預設"
"的編輯器。"
msgid "Show advanced options"
msgstr "顯示進階選項"
msgid "Synchronisation target"
msgstr "同步目標"
msgid ""
"The target to synchonise to. Each sync target may have additional parameters "
"which are named as `sync.NUM.NAME` (all documented below)."
msgstr ""
"要同步的目標。每個同步目標可能有附加的參數,它們被命名為 `sync.NUM.NAME` (全"
"部記錄如下)。"
msgid "Directory to synchronise with (absolute path)"
msgstr "要同步的目錄 (絕對路徑)"
msgid ""
"The path to synchronise with when file system synchronisation is enabled. "
"See `sync.target`."
msgstr "啟用檔案系統同步時要同步的路徑。請參閱 `sync.target`。"
msgid "Nextcloud WebDAV URL"
msgstr "Nextcloud WebDAV 網址"
#, javascript-format
msgid ""
"Attention: If you change this location, make sure you copy all your content "
"to it before syncing, otherwise all files will be removed! See the FAQ for "
"more details: %s"
msgstr ""
msgid "Nextcloud username"
msgstr "Nextcloud 用戶名稱"
msgid "Nextcloud password"
msgstr "Nextcloud 密碼"
msgid "WebDAV URL"
msgstr "WebDAV 網址"
msgid "WebDAV username"
msgstr "WebDAV 用戶名稱"
msgid "WebDAV password"
msgstr "WebDAV 密碼"
msgid "Custom TLS certificates"
msgstr "自訂 TLS 證書"
@@ -1447,6 +1585,20 @@ msgstr ""
msgid "Ignore TLS certificate errors"
msgstr "忽略 TLS 證書錯誤"
#, fuzzy
msgid "Enable note history"
msgstr "啟用加密"
msgid "days"
msgstr ""
#, javascript-format
msgid "%d days"
msgstr ""
msgid "Keep note history for"
msgstr ""
#, javascript-format
msgid "Invalid option value: \"%s\". Possible values are: %s."
msgstr "不正確選項值: \"%s\"。可能的值為: %s。"
@@ -1466,6 +1618,9 @@ msgstr ""
msgid "Note"
msgstr "記事本"
msgid "Plugins"
msgstr ""
#, fuzzy
msgid "Application"
msgstr "離開本程式。"
@@ -1490,6 +1645,9 @@ msgstr "Evernote 匯出檔"
msgid "Json Export Directory"
msgstr "Joplin 匯出目錄"
msgid "File"
msgstr "檔案"
msgid "Directory"
msgstr "目錄"
@@ -1513,13 +1671,12 @@ msgstr "沒有資料可匯出。"
msgid "Please specify the notebook where the notes should be imported to."
msgstr "請指定將記事匯入到的筆記本。"
msgid "Restored Notes"
msgstr ""
msgid "Items that cannot be synchronised"
msgstr "無法同步的項目"
#, javascript-format
msgid "%s (%s): %s"
msgstr "%s (%s): %s"
msgid ""
"These items will remain on the device but will not be uploaded to the sync "
"target. In order to find these items, either search for the title or the ID "
@@ -1528,6 +1685,24 @@ msgstr ""
"這些頊目將保留在設備上,但不會上載到同步目標。要尋找這些項目,請以標題或 ID "
"(在上面的括弧中顯示) 搜索。"
#, fuzzy, javascript-format
msgid "%s (%s) could not be uploaded: %s"
msgstr "無法開啟檔案: %s"
#, fuzzy, javascript-format
msgid "Item \"%s\" could not be downloaded: %s"
msgstr "無法開啟檔案: %s"
#, fuzzy
msgid "Items that cannot be decrypted"
msgstr "無法同步的項目"
msgid ""
"Joplin failed to decrypt these items multiple times, possibly because they "
"are corrupted or too large. These items will remain on the device but Joplin "
"will no longer attempt to decrypt them."
msgstr ""
msgid "Sync status (synced items / total items)"
msgstr "同步狀態 (已同步項目 / 項目總數)"
@@ -1573,18 +1748,6 @@ msgstr "您當前沒有任何筆記。通過按一下 (+) 鍵去新增一則筆
msgid "Delete these notes?"
msgstr "刪除這些記事?"
msgid "Log"
msgstr "日誌"
msgid "Export Debug Report"
msgstr "匯出除錯報告"
msgid "Encryption Config"
msgstr "加密設置"
msgid "Configuration"
msgstr "設置"
msgid "Move to notebook..."
msgstr "移動至記事本..."
@@ -1608,8 +1771,24 @@ msgstr "選擇日期"
msgid "Confirm"
msgstr "確認"
msgid "Cancel synchronisation"
msgstr "取消同步"
#, fuzzy, javascript-format
msgid "Notebook: %s"
msgstr "記事本"
#, fuzzy
msgid "Encrypted notebooks cannot be renamed"
msgstr "無法修改已加密項目"
#, fuzzy
msgid "New Notebook"
msgstr "新增記事本"
msgid "Configuration"
msgstr "設置"
#, fuzzy
msgid "All notes"
msgstr "記事"
#, fuzzy
msgid "Checking... Please wait."
@@ -1647,6 +1826,54 @@ msgstr "新增標籤:"
msgid "Type new tags or select from list"
msgstr "輸入新標籤,或在清單中選擇"
msgid "Warning"
msgstr ""
msgid ""
"In order to use file system synchronization your permission to write to "
"external storage is required."
msgstr ""
#, fuzzy
msgid "Information"
msgstr "設置"
msgid "Encryption Config"
msgstr "加密設置"
#, fuzzy
msgid "Tools"
msgstr "工具"
#, fuzzy
msgid "Sync Status"
msgstr "狀態"
msgid "Log"
msgstr "日誌"
#, fuzzy
msgid "Creating report..."
msgstr "建立新 %s..."
msgid "Export Debug Report"
msgstr "匯出除錯報告"
msgid "Fixing search index..."
msgstr ""
msgid "Fix search index"
msgstr ""
msgid ""
"Use this to rebuild the search index if there is a problem with search. It "
"may take some times depending on the number of notes."
msgstr ""
#, fuzzy
msgid "More information"
msgstr "設置"
msgid ""
"To work correctly, the app needs the following permissions. Please enable "
"them in your phone settings, in Apps > Joplin > Permissions"
@@ -1668,10 +1895,6 @@ msgstr "- 位置: 允許將地理位置資訊附加到筆記。"
msgid "Joplin website"
msgstr "Joplin 官方網站"
#, fuzzy, javascript-format
msgid "Joplin v%s"
msgstr "Joplin 官方網站"
#, javascript-format
msgid "Database v%s"
msgstr ""
@@ -1710,6 +1933,10 @@ msgstr "無法儲存記事本: %s"
msgid "Edit notebook"
msgstr "編輯記事本"
#, fuzzy
msgid "Enter notebook title"
msgstr "記事本標題:"
msgid "Show all"
msgstr "顯示全部"
@@ -1733,10 +1960,32 @@ msgstr "沒有 ID 為 %s 的項目"
msgid "The Joplin mobile app does not currently support this type of link: %s"
msgstr "Joplin 移動應用程式暫時不支援此類型的連結: %s"
#, javascript-format
msgid "Links with protocol \"%s\" are not supported"
msgstr ""
#, javascript-format
msgid "Unsupported image type: %s"
msgstr "不支援的圖像類型: %s"
#, fuzzy, javascript-format
msgid "Updated: %s"
msgstr "已更新: %d。"
msgid "View on map"
msgstr "在地圖上顯示"
msgid "Go to source URL"
msgstr ""
#, fuzzy
msgid "Attach..."
msgstr "搜尋..."
#, fuzzy
msgid "Choose an option"
msgstr "顯示進階選項"
#, fuzzy
msgid "Take photo"
msgstr "附加相片"
@@ -1756,20 +2005,18 @@ msgstr "轉換為記事"
msgid "Convert to todo"
msgstr "轉換為待辦事項"
msgid "Hide metadata"
msgstr "隱藏後設資料 (metadata)"
msgid "Show metadata"
msgstr "顯示後設資料 (metadata)"
msgid "View on map"
msgstr "在地圖上顯示"
msgid "Go to source URL"
msgid "Properties"
msgstr ""
msgid "Delete notebook"
msgstr "刪除記事本"
msgid "Add body"
msgstr ""
msgid "Edit"
msgstr "編輯"
#, fuzzy
msgid "Add title"
msgstr "標題"
msgid "Login with OneDrive"
msgstr "以 OneDrive 登錄"
@@ -1777,16 +2024,47 @@ msgstr "以 OneDrive 登錄"
msgid "Search"
msgstr "搜尋"
msgid ""
"Click on the (+) button to create a new note or notebook. Click on the side "
"menu to access your existing notebooks."
msgstr "您可以點撃 (+) 鍵去新增記事或記事本。點撃側邊欄去檢視現有的記事本。"
#~ msgid "Cancel synchronisation"
#~ msgstr "取消同步"
msgid "You currently have no notebook. Create one by clicking on (+) button."
msgstr "您當前沒有任何筆記本。通過按一下 (+) 鍵去建立一本筆記。"
#~ msgid "Hide metadata"
#~ msgstr "隱藏後設資料 (metadata)"
msgid "Welcome"
msgstr "歡迎"
#~ msgid "Show metadata"
#~ msgstr "顯示後設資料 (metadata)"
#~ msgid "Delete notebook"
#~ msgstr "刪除記事本"
#~ msgid ""
#~ "Click on the (+) button to create a new note or notebook. Click on the "
#~ "side menu to access your existing notebooks."
#~ msgstr "您可以點撃 (+) 鍵去新增記事或記事本。點撃側邊欄去檢視現有的記事本。"
#~ msgid ""
#~ "You currently have no notebook. Create one by clicking on (+) button."
#~ msgstr "您當前沒有任何筆記本。通過按一下 (+) 鍵去建立一本筆記。"
#~ msgid "Welcome"
#~ msgstr "歡迎"
#~ msgid "Separate each tag by a comma."
#~ msgstr "您可用逗號分隔每個標籤。"
#~ msgid "Some items cannot be decrypted."
#~ msgstr "有些項目不能解密。"
#~ msgid "%s (%s): %s"
#~ msgstr "%s (%s): %s"
#~ msgid ""
#~ "The path to synchronise with when file system synchronisation is enabled. "
#~ "See `sync.target`."
#~ msgstr "啟用檔案系統同步時要同步的路徑。請參閱 `sync.target`。"
#, fuzzy
#~ msgid "Joplin v%s"
#~ msgstr "Joplin 官方網站"
#~ msgid "State: %s."
#~ msgstr "狀態: %s。"

View File

@@ -1,6 +1,6 @@
{
"name": "joplin",
"version": "1.0.123",
"version": "1.0.140",
"lockfileVersion": 1,
"requires": true,
"dependencies": {
@@ -15,30 +15,23 @@
"integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q=="
},
"acorn": {
"version": "5.7.3",
"resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.3.tgz",
"integrity": "sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw=="
"version": "6.2.0",
"resolved": "https://registry.npmjs.org/acorn/-/acorn-6.2.0.tgz",
"integrity": "sha512-8oe72N3WPMjA+2zVG71Ia0nXZ8DpQH+QyyHO+p06jT8eg8FGG3FbcUIi8KziHlAfheJQZeoqbvq1mQSQHXKYLw=="
},
"acorn-globals": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-4.3.0.tgz",
"integrity": "sha512-hMtHj3s5RnuhvHPowpBYvJVj3rAar82JiDQHvGs1zO0l10ocX/xEdBShNHTJaboucJUsScghp74pH3s7EnHHQw==",
"version": "4.3.2",
"resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-4.3.2.tgz",
"integrity": "sha512-BbzvZhVtZP+Bs1J1HcwrQe8ycfO0wStkSGxuul3He3GkHOIZ6eTqOkPuw9IP1X3+IkOo4wiJmwkobzXYz4wewQ==",
"requires": {
"acorn": "^6.0.1",
"acorn-walk": "^6.0.1"
},
"dependencies": {
"acorn": {
"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.1.1",
"resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-6.1.1.tgz",
"integrity": "sha512-OtUw6JUTgxA2QoqqmrmQ7F2NYqiBPi/L2jqHyFtllhOUvXYQXf0Z1CYUinIfyT4bTCGmrA7gX9FvHA81uzCoVw=="
"version": "6.2.0",
"resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-6.2.0.tgz",
"integrity": "sha512-7evsyfH1cLOCdAzZAd43Cic04yKydNx0cF+7tiA19p1XnLLPU4dpCQOqpjqwokFe//vS0QqfqqjCS2JkiIs0cA=="
},
"ajv": {
"version": "5.5.2",
@@ -165,6 +158,11 @@
"resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
"integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k="
},
"atob": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz",
"integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg=="
},
"aws-sign2": {
"version": "0.7.0",
"resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
@@ -346,9 +344,9 @@
"integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c="
},
"color": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/color/-/color-3.0.0.tgz",
"integrity": "sha512-jCpd5+s0s0t7p3pHQKpnJ0TpQKKdleP71LWcA0aqiljpiuAkOSUFN/dyH8ZwF0hRmFlrIuRhufds1QyEP9EB+w==",
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/color/-/color-3.1.1.tgz",
"integrity": "sha512-PvUltIXRjehRKPSy89VnDWFKY58xyhTLyxIg21vwQBI6qLwZNPmC8k3C1uytIgFKEpOIzN4y32iPm8231zFHIg==",
"requires": {
"color-convert": "^1.9.1",
"color-string": "^1.5.2"
@@ -453,17 +451,35 @@
}
}
},
"css": {
"version": "2.2.4",
"resolved": "https://registry.npmjs.org/css/-/css-2.2.4.tgz",
"integrity": "sha512-oUnjmWpy0niI3x/mPL8dVEI1l7MnG3+HHyRPHf+YFSbK+svOhXpmSOcDURUh2aOCgl2grzrOPt1nHLuCVFULLw==",
"requires": {
"inherits": "^2.0.3",
"source-map": "^0.6.1",
"source-map-resolve": "^0.5.2",
"urix": "^0.1.0"
},
"dependencies": {
"source-map": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
"integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
}
}
},
"cssom": {
"version": "0.3.4",
"resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.4.tgz",
"integrity": "sha512-+7prCSORpXNeR4/fUP3rL+TzqtiFfhMvTd7uEqMdgPvLPt4+uzFUeufx5RHjGTACCargg/DiEt/moMQmvnfkog=="
"version": "0.3.8",
"resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz",
"integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg=="
},
"cssstyle": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-1.1.1.tgz",
"integrity": "sha512-364AI1l/M5TYcFH83JnOH/pSqgaNnKmYgKrm0didZMGKWjQB60dymwWy1rKUgL3J1ffdq9xVi2yGLHdSjjSNog==",
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-1.3.0.tgz",
"integrity": "sha512-wXsoRfsRfsLVNaVzoKdqvEmK/5PFaEXNspVT22Ots6K/cnJdpoDKuQFw+qlMiXnmaif1OgeC466X1zISgAOcGg==",
"requires": {
"cssom": "0.3.x"
"cssom": "~0.3.6"
}
},
"cwise-compiler": {
@@ -495,18 +511,6 @@
"abab": "^2.0.0",
"whatwg-mimetype": "^2.2.0",
"whatwg-url": "^7.0.0"
},
"dependencies": {
"whatwg-url": {
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.0.0.tgz",
"integrity": "sha512-37GeVSIJ3kn1JgKyjiYNmSLP1yzbpb29jdmwBSgkD9h40/hyrR/OifpVUndji3tmwGgD8qpw7iQu3RSbCrBpsQ==",
"requires": {
"lodash.sortby": "^4.7.0",
"tr46": "^1.0.1",
"webidl-conversions": "^4.0.2"
}
}
}
},
"debug": {
@@ -517,6 +521,11 @@
"ms": "2.0.0"
}
},
"decode-uri-component": {
"version": "0.2.0",
"resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz",
"integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU="
},
"decompress-response": {
"version": "3.3.0",
"resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz",
@@ -560,6 +569,11 @@
"resolved": "https://registry.npmjs.org/diacritics/-/diacritics-1.3.0.tgz",
"integrity": "sha1-PvqHMj67hj5mls67AILUj/PW96E="
},
"diff-match-patch": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/diff-match-patch/-/diff-match-patch-1.0.4.tgz",
"integrity": "sha512-Uv3SW8bmH9nAtHKaKSanOQmj2DnlH65fUpcrMdfdaOxUG02QQ4YGZ8AE7kKOMisF7UqvOlGKVYWRvezdncW9lg=="
},
"domexception": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/domexception/-/domexception-1.0.1.tgz",
@@ -656,9 +670,9 @@
"integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ="
},
"escodegen": {
"version": "1.11.0",
"resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.11.0.tgz",
"integrity": "sha512-IeMV45ReixHS53K/OmfKAIztN/igDHzTJUhZM3k1jMhIZWjk45SMwAtBsEXiJp3vSPmTcu6CXn7mDvFHRN66fw==",
"version": "1.11.1",
"resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.11.1.tgz",
"integrity": "sha512-JwiqFD9KdGVVpeuRa68yU3zZnBEOcPs0nKW7wZzXky8Z7tffdYUHbe11bPCV5jYlK6DVdKLWLm0f5I/QlL0Kmw==",
"requires": {
"esprima": "^3.1.3",
"estraverse": "^4.2.0",
@@ -697,9 +711,9 @@
"dev": true
},
"expand-template": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/expand-template/-/expand-template-1.1.1.tgz",
"integrity": "sha512-cebqLtV8KOZfw0UI8TEFWxtczxxC1jvyUvx6H4fyp1K1FN7A4Q+uggVUlOsI1K8AGU0rwOGqP8nCapdrw8CYQg=="
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz",
"integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg=="
},
"extend": {
"version": "3.0.1",
@@ -739,6 +753,11 @@
"resolved": "https://registry.npmjs.org/file-type/-/file-type-4.4.0.tgz",
"integrity": "sha1-G2AOX8ofvcboDApwxxyNul95BsU="
},
"file-uri-to-path": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz",
"integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw=="
},
"find-up": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz",
@@ -1427,71 +1446,24 @@
"dev": true
},
"joplin-turndown": {
"version": "4.0.11",
"resolved": "https://registry.npmjs.org/joplin-turndown/-/joplin-turndown-4.0.11.tgz",
"integrity": "sha512-2oiwWX0nKYi1NVcaprSsrXQkYdGoRtPWFmnXdWQnQW44jlgjFV38B4VrgliwX5ZMq7cbx6A9IBwfXcBL2YV2NA==",
"version": "4.0.17",
"resolved": "https://registry.npmjs.org/joplin-turndown/-/joplin-turndown-4.0.17.tgz",
"integrity": "sha512-57mw92ZOKoR77YBLUkauN1xNq1xlxOm2KaPty/jlYrkEyGotUBBvq46a6wXh6d3aM4CccGuwymSge18/9IoB3A==",
"requires": {
"css": "^2.2.4",
"html-entities": "^1.2.1",
"jsdom": "^11.9.0"
}
},
"joplin-turndown-plugin-gfm": {
"version": "1.0.7",
"resolved": "https://registry.npmjs.org/joplin-turndown-plugin-gfm/-/joplin-turndown-plugin-gfm-1.0.7.tgz",
"integrity": "sha512-z0SveNcchtWwglkO7SgvDzPnVHYk1WumD0QRcWvUchIihqXwDVlve3G8AHkIhM69LY1YdC0HCZJlSMp2spBe/g=="
},
"jpeg-js": {
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/jpeg-js/-/jpeg-js-0.1.2.tgz",
"integrity": "sha1-E1uZLAV1yYXPoPSUoyJ+0jhYPs4="
},
"js-tokens": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz",
"integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls="
},
"jsbn": {
"version": "0.1.1",
"resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
"integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=",
"optional": true
},
"jsdom": {
"version": "11.12.0",
"resolved": "https://registry.npmjs.org/jsdom/-/jsdom-11.12.0.tgz",
"integrity": "sha512-y8Px43oyiBM13Zc1z780FrfNLJCXTL40EWlty/LXUtcjykRBNgLlCjWXpfSPBl2iv+N7koQN+dvqszHZgT/Fjw==",
"requires": {
"abab": "^2.0.0",
"acorn": "^5.5.3",
"acorn-globals": "^4.1.0",
"array-equal": "^1.0.0",
"cssom": ">= 0.3.2 < 0.4.0",
"cssstyle": "^1.0.0",
"data-urls": "^1.0.0",
"domexception": "^1.0.1",
"escodegen": "^1.9.1",
"html-encoding-sniffer": "^1.0.2",
"left-pad": "^1.3.0",
"nwsapi": "^2.0.7",
"parse5": "4.0.0",
"pn": "^1.1.0",
"request": "^2.87.0",
"request-promise-native": "^1.0.5",
"sax": "^1.2.4",
"symbol-tree": "^3.2.2",
"tough-cookie": "^2.3.4",
"w3c-hr-time": "^1.0.1",
"webidl-conversions": "^4.0.2",
"whatwg-encoding": "^1.0.3",
"whatwg-mimetype": "^2.1.0",
"whatwg-url": "^6.4.1",
"ws": "^5.2.0",
"xml-name-validator": "^3.0.0"
},
"dependencies": {
"acorn": {
"version": "5.7.3",
"resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.3.tgz",
"integrity": "sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw=="
},
"ajv": {
"version": "6.7.0",
"resolved": "https://registry.npmjs.org/ajv/-/ajv-6.7.0.tgz",
"integrity": "sha512-RZXPviBTtfmtka9n9sy1N5M5b82CbxWIR6HIis4s3WQTXDJamc/0gpCWNGz6EWdWp4DOfjzJfhz/AS9zVPjjWg==",
"version": "6.10.1",
"resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.1.tgz",
"integrity": "sha512-w1YQaVGNC6t2UCPjEawK/vo/dG8OOrVtUmhBT1uJJYxbl5kU2Tj3v6LGqBcsysN1yhuCStJCCA3GqdvKY8sqXQ==",
"requires": {
"fast-deep-equal": "^2.0.1",
"fast-json-stable-stringify": "^2.0.0",
@@ -1505,9 +1477,9 @@
"integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ=="
},
"combined-stream": {
"version": "1.0.7",
"resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.7.tgz",
"integrity": "sha512-brWl9y6vOB1xYPZcpZde3N9zDByXTosAeMDo4p1wzo6UMOX4vumB+TP1RZ76sfE6Md68Q0NJSrE/gbezd4Ul+w==",
"version": "1.0.8",
"resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
"integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
"requires": {
"delayed-stream": "~1.0.0"
}
@@ -1541,22 +1513,55 @@
"har-schema": "^2.0.0"
}
},
"jsdom": {
"version": "11.12.0",
"resolved": "https://registry.npmjs.org/jsdom/-/jsdom-11.12.0.tgz",
"integrity": "sha512-y8Px43oyiBM13Zc1z780FrfNLJCXTL40EWlty/LXUtcjykRBNgLlCjWXpfSPBl2iv+N7koQN+dvqszHZgT/Fjw==",
"requires": {
"abab": "^2.0.0",
"acorn": "^5.5.3",
"acorn-globals": "^4.1.0",
"array-equal": "^1.0.0",
"cssom": ">= 0.3.2 < 0.4.0",
"cssstyle": "^1.0.0",
"data-urls": "^1.0.0",
"domexception": "^1.0.1",
"escodegen": "^1.9.1",
"html-encoding-sniffer": "^1.0.2",
"left-pad": "^1.3.0",
"nwsapi": "^2.0.7",
"parse5": "4.0.0",
"pn": "^1.1.0",
"request": "^2.87.0",
"request-promise-native": "^1.0.5",
"sax": "^1.2.4",
"symbol-tree": "^3.2.2",
"tough-cookie": "^2.3.4",
"w3c-hr-time": "^1.0.1",
"webidl-conversions": "^4.0.2",
"whatwg-encoding": "^1.0.3",
"whatwg-mimetype": "^2.1.0",
"whatwg-url": "^6.4.1",
"ws": "^5.2.0",
"xml-name-validator": "^3.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.37.0",
"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.37.0.tgz",
"integrity": "sha512-R3C4db6bgQhlIhPU48fUtdVmKnflq+hRdad7IyKhtFj06VPNVdk2RhiYL3UjQIlso8L+YxAtFkobT0VK+S/ybg=="
"version": "1.40.0",
"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.40.0.tgz",
"integrity": "sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA=="
},
"mime-types": {
"version": "2.1.21",
"resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.21.tgz",
"integrity": "sha512-3iL6DbwpyLzjR3xHSFNFeb9Nz/M8WDkX33t1GFQnFOllWk8pOrh/LSrB5OXlnlW5P9LH73X6loW/eogc+F5lJg==",
"version": "2.1.24",
"resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.24.tgz",
"integrity": "sha512-WaFHS3MCl5fapm3oLxU4eYDw77IQM2ACcxQ9RIxfaC3ooc6PFuBMGZZsYpvoXS5D5QTWPieo1jjLdAm3TBP3cQ==",
"requires": {
"mime-db": "~1.37.0"
"mime-db": "1.40.0"
}
},
"oauth-sign": {
@@ -1564,6 +1569,11 @@
"resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz",
"integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ=="
},
"parse5": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/parse5/-/parse5-4.0.0.tgz",
"integrity": "sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA=="
},
"request": {
"version": "2.88.0",
"resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz",
@@ -1603,17 +1613,56 @@
}
},
"safe-buffer": {
"version": "5.1.2",
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
"integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz",
"integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg=="
},
"uuid": {
"version": "3.3.2",
"resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz",
"integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA=="
},
"whatwg-url": {
"version": "6.5.0",
"resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-6.5.0.tgz",
"integrity": "sha512-rhRZRqx/TLJQWUpQ6bmrt2UV4f0HCQ463yQuONJqC6fO2VoEb1pTYddbe59SkYq87aoM5A3bdhMZiUiVws+fzQ==",
"requires": {
"lodash.sortby": "^4.7.0",
"tr46": "^1.0.1",
"webidl-conversions": "^4.0.2"
}
},
"ws": {
"version": "5.2.2",
"resolved": "https://registry.npmjs.org/ws/-/ws-5.2.2.tgz",
"integrity": "sha512-jaHFD6PFv6UgoIVda6qZllptQsMlDEJkTQcybzzXDYM1XO9Y8em691FGMPmM46WGyLU4z9KMgQN+qrux/nhlHA==",
"requires": {
"async-limiter": "~1.0.0"
}
}
}
},
"joplin-turndown-plugin-gfm": {
"version": "1.0.8",
"resolved": "https://registry.npmjs.org/joplin-turndown-plugin-gfm/-/joplin-turndown-plugin-gfm-1.0.8.tgz",
"integrity": "sha512-uXgq2zGvjiMl/sXG7946EGhh1pyGbZ0L/6z21LBi8D6BJgHQufmXdve/UP3zpgnhiFhfXvzGY10uNaTuDQ99iQ=="
},
"jpeg-js": {
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/jpeg-js/-/jpeg-js-0.1.2.tgz",
"integrity": "sha1-E1uZLAV1yYXPoPSUoyJ+0jhYPs4="
},
"js-tokens": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz",
"integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls="
},
"jsbn": {
"version": "0.1.1",
"resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
"integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=",
"optional": true
},
"json-schema": {
"version": "0.2.3",
"resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz",
@@ -1853,9 +1902,14 @@
"integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
},
"nan": {
"version": "2.11.0",
"resolved": "https://registry.npmjs.org/nan/-/nan-2.11.0.tgz",
"integrity": "sha512-F4miItu2rGnV2ySkXOQoA8FKz/SR2Q2sWP0sbTxNxz/tuokeC8WxOhPMcwi0qIyGtVn/rrSeLbvVkznqCdwYnw=="
"version": "2.13.2",
"resolved": "https://registry.npmjs.org/nan/-/nan-2.13.2.tgz",
"integrity": "sha512-TghvYc72wlMGMVMluVo9WRJc0mB8KxxF/gZ4YYFy7V2ZQX9l7rgbPg7vjS9mt6U5HXODVFVI2bOduCzwOMv/lw=="
},
"napi-build-utils": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.1.tgz",
"integrity": "sha512-boQj1WFgQH3v4clhu3mTNfP+vOBxorDlE8EKiMjUlLG3C4qAESnn9AxIOkFgTR2c9LtzNjPrjS60cT27ZKBhaA=="
},
"ndarray": {
"version": "1.0.18",
@@ -1876,13 +1930,28 @@
}
},
"needle": {
"version": "2.2.1",
"resolved": "https://registry.npmjs.org/needle/-/needle-2.2.1.tgz",
"integrity": "sha512-t/ZswCM9JTWjAdXS9VpvqhI2Ct2sL2MdY4fUXqGJaGBk13ge99ObqRksRTbBE56K+wxUXwwfZYOuZHifFW9q+Q==",
"version": "2.3.1",
"resolved": "https://registry.npmjs.org/needle/-/needle-2.3.1.tgz",
"integrity": "sha512-CaLXV3W8Vnbps8ZANqDGz7j4x7Yj1LW4TWF/TQuDfj7Cfx4nAPTvw98qgTevtto1oHDrh3pQkaODbqupXlsWTg==",
"requires": {
"debug": "^2.1.2",
"debug": "^4.1.0",
"iconv-lite": "^0.4.4",
"sax": "^1.2.4"
},
"dependencies": {
"debug": {
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
"integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
"requires": {
"ms": "^2.1.1"
}
},
"ms": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
"integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg=="
}
}
},
"nextgen-events": {
@@ -1899,9 +1968,9 @@
}
},
"node-abi": {
"version": "2.4.4",
"resolved": "https://registry.npmjs.org/node-abi/-/node-abi-2.4.4.tgz",
"integrity": "sha512-DQ9Mo2mf/XectC+s6+grPPRQ1Z9gI3ZbrGv6nyXRkjwT3HrE0xvtvrfnH7YHYBLgC/KLadg+h3XHnhZw1sv88A==",
"version": "2.8.0",
"resolved": "https://registry.npmjs.org/node-abi/-/node-abi-2.8.0.tgz",
"integrity": "sha512-1/aa2clS0pue0HjckL62CsbhWWU35HARvBDXcJtYKbYR7LnIutmpxmXbuDMV9kEviD2lP/wACOgWmmwljghHyQ==",
"requires": {
"semver": "^5.4.1"
}
@@ -1939,13 +2008,13 @@
}
},
"node-pre-gyp": {
"version": "0.10.2",
"resolved": "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.10.2.tgz",
"integrity": "sha512-16lql9QTqs6KsB9fl3neWyZm02KxIKdI9FlJjrB0y7eMTP5Nyz+xalwPbOlw3iw7EejllJPmlJSnY711PLD1ug==",
"version": "0.11.0",
"resolved": "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.11.0.tgz",
"integrity": "sha512-TwWAOZb0j7e9eGaf9esRx3ZcLaE5tQ2lvYy1pb5IAaG1a2e2Kv5Lms1Y4hpj+ciXJRofIxxlt5haeQ/2ANeE0Q==",
"requires": {
"detect-libc": "^1.0.2",
"mkdirp": "^0.5.1",
"needle": "^2.2.0",
"needle": "^2.2.1",
"nopt": "^4.0.1",
"npm-packlist": "^1.1.6",
"npmlog": "^4.0.2",
@@ -1953,13 +2022,6 @@
"rimraf": "^2.6.1",
"semver": "^5.3.0",
"tar": "^4"
},
"dependencies": {
"detect-libc": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz",
"integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups="
}
}
},
"noop-logger": {
@@ -1977,14 +2039,14 @@
}
},
"npm-bundled": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.0.3.tgz",
"integrity": "sha512-ByQ3oJ/5ETLyglU2+8dBObvhfWXX8dtPZDMePCahptliFX2iIuhyEszyFk401PZUNQH20vvdW5MLjJxkwU80Ow=="
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.0.6.tgz",
"integrity": "sha512-8/JCaftHwbd//k6y2rEWp6k1wxVfpFzB6t1p825+cUb7Ym2XQfhwIC5KwhrvzZRJu+LtDE585zVaS32+CGtf0g=="
},
"npm-packlist": {
"version": "1.1.10",
"resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-1.1.10.tgz",
"integrity": "sha512-AQC0Dyhzn4EiYEfIUjCdMl0JJ61I2ER9ukf/sLxJUcZHfo+VyEfz2rMJgLZSS1v30OxPQe1cN0LZA1xbcaVfWA==",
"version": "1.4.1",
"resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-1.4.1.tgz",
"integrity": "sha512-+TcdO7HJJ8peiiYhvPxsEDhF3PJFGUGRcFsGve3vxvxdcpO2Z4Z7rkosRM0kWj6LfbK/P0gu3dzk5RU1ffvFcw==",
"requires": {
"ignore-walk": "^3.0.1",
"npm-bundled": "^1.0.1"
@@ -2007,9 +2069,9 @@
"integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0="
},
"nwsapi": {
"version": "2.0.9",
"resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.0.9.tgz",
"integrity": "sha512-nlWFSCTYQcHk/6A9FFnfhKc14c3aFhfdNBXgo8Qgi9QTBu/qg3Ww+Uiz9wMzXd1T8GFxPc2QIHB6Qtf2XFryFQ=="
"version": "2.1.4",
"resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.1.4.tgz",
"integrity": "sha512-iGfd9Y6SFdTNldEy2L0GUhcarIutFmk+MPWIn9dmj8NMIup03G08uUF2KGbbmv/Ux4RT0VZJoP/sVbWA6d/VIw=="
},
"oauth-sign": {
"version": "0.8.2",
@@ -2146,11 +2208,6 @@
"data-uri-to-buffer": "0.0.3"
}
},
"parse5": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/parse5/-/parse5-4.0.0.tgz",
"integrity": "sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA=="
},
"path-exists": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
@@ -2187,21 +2244,22 @@
"integrity": "sha1-EdHhK5y2TWPjDBQ6Mw9MH1Z9qF8="
},
"prebuild-install": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-4.0.0.tgz",
"integrity": "sha512-7tayxeYboJX0RbVzdnKyGl2vhQRWr6qfClEXDhOkXjuaOKCw2q8aiuFhONRYVsG/czia7KhpykIlI2S2VaPunA==",
"version": "5.3.0",
"resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-5.3.0.tgz",
"integrity": "sha512-aaLVANlj4HgZweKttFNUVNRxDukytuIuxeK2boIMHjagNJCiVKWFsKF4tCE3ql3GbrD2tExPQ7/pwtEJcHNZeg==",
"requires": {
"detect-libc": "^1.0.3",
"expand-template": "^1.0.2",
"expand-template": "^2.0.3",
"github-from-package": "0.0.0",
"minimist": "^1.2.0",
"mkdirp": "^0.5.1",
"node-abi": "^2.2.0",
"napi-build-utils": "^1.0.1",
"node-abi": "^2.7.0",
"noop-logger": "^0.1.1",
"npmlog": "^4.0.1",
"os-homedir": "^1.0.1",
"pump": "^2.0.1",
"rc": "^1.1.6",
"rc": "^1.2.7",
"simple-get": "^2.7.0",
"tar-fs": "^1.13.0",
"tunnel-agent": "^0.6.0",
@@ -2212,6 +2270,16 @@
"version": "1.2.0",
"resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
"integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ="
},
"simple-get": {
"version": "2.8.1",
"resolved": "https://registry.npmjs.org/simple-get/-/simple-get-2.8.1.tgz",
"integrity": "sha512-lSSHRSw3mQNUGPAYRqo7xy9dhKmxFXIjLjp4KHpf99GEH2VH7C3AM+Qfx6du6jhfUi6Vm7XnbEVEf7Wb6N8jRw==",
"requires": {
"decompress-response": "^3.3.0",
"once": "^1.3.1",
"simple-concat": "^1.0.0"
}
}
}
},
@@ -2377,21 +2445,28 @@
}
},
"request-promise-core": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.1.tgz",
"integrity": "sha1-Pu4AssWqgyOc+wTFcA2jb4HNCLY=",
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.2.tgz",
"integrity": "sha512-UHYyq1MO8GsefGEt7EprS8UrXsm1TxEvFUX1IMTuSLU2Rh7fTIdFtl8xD7JiEYiWU2dl+NYAjCTksTehQUxPag==",
"requires": {
"lodash": "^4.13.1"
"lodash": "^4.17.11"
},
"dependencies": {
"lodash": {
"version": "4.17.14",
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.14.tgz",
"integrity": "sha512-mmKYbW3GLuJeX+iGP+Y7Gp1AiGHGbXHCOh/jZmrawMmsE7MS4znI3RL2FsjbqOyMayHInjOeykW7PEajUk1/xw=="
}
}
},
"request-promise-native": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.5.tgz",
"integrity": "sha1-UoF3D2jgyXGeUWP9P6tIIhX0/aU=",
"version": "1.0.7",
"resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.7.tgz",
"integrity": "sha512-rIMnbBdgNViL37nZ1b3L/VfPOpSi0TqVDQPAvO6U14lMzOLrt5nilxCQqtDKhZeDiW0/hkCXGoQjhgJd/tCh6w==",
"requires": {
"request-promise-core": "1.1.1",
"stealthy-require": "^1.1.0",
"tough-cookie": ">=2.3.3"
"request-promise-core": "1.1.2",
"stealthy-require": "^1.1.1",
"tough-cookie": "^2.3.3"
}
},
"requires-port": {
@@ -2399,6 +2474,11 @@
"resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz",
"integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8="
},
"resolve-url": {
"version": "0.2.1",
"resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz",
"integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo="
},
"retry": {
"version": "0.10.1",
"resolved": "https://registry.npmjs.org/retry/-/retry-0.10.1.tgz",
@@ -2443,50 +2523,63 @@
"integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc="
},
"sharp": {
"version": "0.20.8",
"resolved": "https://registry.npmjs.org/sharp/-/sharp-0.20.8.tgz",
"integrity": "sha512-A8NaPGWRDKpmHTi8sl2xzozYXhTQWBb/GaJ8ZPU7L/vKW8wVvd4Yq+isJ0c7p9sX5gnjPQcM3eOfHuvvnZ2fOQ==",
"version": "0.22.1",
"resolved": "https://registry.npmjs.org/sharp/-/sharp-0.22.1.tgz",
"integrity": "sha512-lXzSk/FL5b/MpWrT1pQZneKe25stVjEbl6uhhJcTULm7PhmJgKKRbTDM/vtjyUuC/RLqL2PRyC4rpKwbv3soEw==",
"requires": {
"color": "^3.0.0",
"color": "^3.1.1",
"detect-libc": "^1.0.3",
"fs-copy-file-sync": "^1.1.1",
"nan": "^2.11.0",
"nan": "^2.13.2",
"npmlog": "^4.1.2",
"prebuild-install": "^4.0.0",
"semver": "^5.5.1",
"simple-get": "^2.8.1",
"tar": "^4.4.6",
"prebuild-install": "^5.3.0",
"semver": "^6.0.0",
"simple-get": "^3.0.3",
"tar": "^4.4.8",
"tunnel-agent": "^0.6.0"
},
"dependencies": {
"chownr": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.1.tgz",
"integrity": "sha512-j38EvO5+LHX84jlo6h4UzmOwi0UgW61WRyPtJz4qaadK5eY3BTS5TY/S1Stc3Uk2lIM6TPevAlULiEJwie860g=="
},
"minipass": {
"version": "2.3.4",
"resolved": "https://registry.npmjs.org/minipass/-/minipass-2.3.4.tgz",
"integrity": "sha512-mlouk1OHlaUE8Odt1drMtG1bAJA4ZA6B/ehysgV0LUIrDHdKgo1KorZq3pK0b/7Z7LJIQ12MNM6aC+Tn6lUZ5w==",
"version": "2.3.5",
"resolved": "https://registry.npmjs.org/minipass/-/minipass-2.3.5.tgz",
"integrity": "sha512-Gi1W4k059gyRbyVUZQ4mEqLm0YIUiGYfvxhF6SIlk3ui1WVxMTGfGdQ2SInh3PDrRTVvPKgULkpJtT4RH10+VA==",
"requires": {
"safe-buffer": "^5.1.2",
"yallist": "^3.0.0"
}
},
"minizlib": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.2.1.tgz",
"integrity": "sha512-7+4oTUOWKg7AuL3vloEWekXY2/D20cevzsrNT2kGWm+39J9hGTCBv8VI5Pm5lXZ/o3/mdR4f8rflAPhnQb8mPA==",
"requires": {
"minipass": "^2.2.1"
}
},
"safe-buffer": {
"version": "5.1.2",
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
"integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
},
"semver": {
"version": "5.5.1",
"resolved": "https://registry.npmjs.org/semver/-/semver-5.5.1.tgz",
"integrity": "sha512-PqpAxfrEhlSUWge8dwIp4tZnQ25DIOthpiaHNIthsjEFQD6EvqUKUDM7L8O2rShkFccYo1VjJR0coWfNkCubRw=="
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/semver/-/semver-6.0.0.tgz",
"integrity": "sha512-0UewU+9rFapKFnlbirLi3byoOuhrSsli/z/ihNnvM24vgF+8sNBiI1LZPBSH9wJKUwaUbw+s3hToDLCXkrghrQ=="
},
"tar": {
"version": "4.4.6",
"resolved": "https://registry.npmjs.org/tar/-/tar-4.4.6.tgz",
"integrity": "sha512-tMkTnh9EdzxyfW+6GK6fCahagXsnYk6kE6S9Gr9pjVdys769+laCTbodXDhPAjzVtEBazRgP0gYqOjnk9dQzLg==",
"version": "4.4.8",
"resolved": "https://registry.npmjs.org/tar/-/tar-4.4.8.tgz",
"integrity": "sha512-LzHF64s5chPQQS0IYBn9IN5h3i98c12bo4NCO7e0sGM2llXQ3p2FGC5sdENN4cTW48O915Sh+x+EXx7XW96xYQ==",
"requires": {
"chownr": "^1.0.1",
"chownr": "^1.1.1",
"fs-minipass": "^1.2.5",
"minipass": "^2.3.3",
"minizlib": "^1.1.0",
"minipass": "^2.3.4",
"minizlib": "^1.1.1",
"mkdirp": "^0.5.0",
"safe-buffer": "^5.1.2",
"yallist": "^3.0.2"
@@ -2505,9 +2598,9 @@
"integrity": "sha1-c0TLuLbib7J9ZrL8hvn21Zl1IcY="
},
"simple-get": {
"version": "2.8.1",
"resolved": "https://registry.npmjs.org/simple-get/-/simple-get-2.8.1.tgz",
"integrity": "sha512-lSSHRSw3mQNUGPAYRqo7xy9dhKmxFXIjLjp4KHpf99GEH2VH7C3AM+Qfx6du6jhfUi6Vm7XnbEVEf7Wb6N8jRw==",
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/simple-get/-/simple-get-3.0.3.tgz",
"integrity": "sha512-Wvre/Jq5vgoz31Z9stYWPLn0PqRqmBDpFSdypAnHu5AvRVCYPRYGnvryNLiXu8GOBNDH82J2FRHUGMjjHUpXFw==",
"requires": {
"decompress-response": "^3.3.0",
"once": "^1.3.1",
@@ -2543,6 +2636,23 @@
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
"integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w="
},
"source-map-resolve": {
"version": "0.5.2",
"resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz",
"integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==",
"requires": {
"atob": "^2.1.1",
"decode-uri-component": "^0.2.0",
"resolve-url": "^0.2.1",
"source-map-url": "^0.4.0",
"urix": "^0.1.0"
}
},
"source-map-url": {
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz",
"integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM="
},
"split-skip": {
"version": "0.0.2",
"resolved": "https://registry.npmjs.org/split-skip/-/split-skip-0.0.2.tgz",
@@ -2554,18 +2664,136 @@
"integrity": "sha1-Nr54Mgr+WAH2zqPueLblqrlA6gw="
},
"sqlite3": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/sqlite3/-/sqlite3-4.0.1.tgz",
"integrity": "sha512-i8LtU2fdEGFEt4Kcs7eNjYdGmnAQ8zWlaOv6Esbq/jfVfR0Qbn/1dgVyKebrMc2zN7h3oHsqla9zq7AJ0+34ZA==",
"version": "4.0.7",
"resolved": "https://registry.npmjs.org/sqlite3/-/sqlite3-4.0.7.tgz",
"integrity": "sha512-TGEeSBB8O48bEu8KUUMqzeB22WrfTxzhIf0lFm8wLTo3a6yJBonF2sPKMYrYtOne1F1t9AHAEn+DTISq8WebQg==",
"requires": {
"nan": "~2.10.0",
"node-pre-gyp": "~0.10.1"
"nan": "^2.12.1",
"node-pre-gyp": "^0.11.0",
"request": "^2.87.0"
},
"dependencies": {
"nan": {
"version": "2.10.0",
"resolved": "https://registry.npmjs.org/nan/-/nan-2.10.0.tgz",
"integrity": "sha512-bAdJv7fBLhWC+/Bls0Oza+mvTaNQtP+1RyhhhvD95pgUJz6XM5IzgmxOkItJ9tkoCiplvAnXI1tNmmUD/eScyA=="
"ajv": {
"version": "6.10.0",
"resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.0.tgz",
"integrity": "sha512-nffhOpkymDECQyR0mnsUtoCE8RlX38G0rYP+wgLWFyZuUyuuojSSvi/+euOiQBIn63whYwYVIIH1TvE3tu4OEg==",
"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",
"integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ=="
},
"combined-stream": {
"version": "1.0.7",
"resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.7.tgz",
"integrity": "sha512-brWl9y6vOB1xYPZcpZde3N9zDByXTosAeMDo4p1wzo6UMOX4vumB+TP1RZ76sfE6Md68Q0NJSrE/gbezd4Ul+w==",
"requires": {
"delayed-stream": "~1.0.0"
}
},
"extend": {
"version": "3.0.2",
"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.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",
"mime-types": "^2.1.12"
}
},
"har-validator": {
"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": "^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.40.0",
"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.40.0.tgz",
"integrity": "sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA=="
},
"mime-types": {
"version": "2.1.24",
"resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.24.tgz",
"integrity": "sha512-WaFHS3MCl5fapm3oLxU4eYDw77IQM2ACcxQ9RIxfaC3ooc6PFuBMGZZsYpvoXS5D5QTWPieo1jjLdAm3TBP3cQ==",
"requires": {
"mime-db": "1.40.0"
}
},
"oauth-sign": {
"version": "0.9.0",
"resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz",
"integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ=="
},
"request": {
"version": "2.88.0",
"resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz",
"integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==",
"requires": {
"aws-sign2": "~0.7.0",
"aws4": "^1.8.0",
"caseless": "~0.12.0",
"combined-stream": "~1.0.6",
"extend": "~3.0.2",
"forever-agent": "~0.6.1",
"form-data": "~2.3.2",
"har-validator": "~5.1.0",
"http-signature": "~1.2.0",
"is-typedarray": "~1.0.0",
"isstream": "~0.1.2",
"json-stringify-safe": "~5.0.1",
"mime-types": "~2.1.19",
"oauth-sign": "~0.9.0",
"performance-now": "^2.1.0",
"qs": "~6.5.2",
"safe-buffer": "^5.1.2",
"tough-cookie": "~2.4.3",
"tunnel-agent": "^0.6.0",
"uuid": "^3.3.2"
}
},
"safe-buffer": {
"version": "5.1.2",
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
"integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
},
"tough-cookie": {
"version": "2.4.3",
"resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz",
"integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==",
"requires": {
"psl": "^1.1.24",
"punycode": "^1.4.1"
}
},
"uuid": {
"version": "3.3.2",
"resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz",
"integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA=="
}
}
},
@@ -2687,9 +2915,9 @@
"integrity": "sha1-Kb9hXUqnEhvdiYsi1LP5vE4qoD0="
},
"symbol-tree": {
"version": "3.2.2",
"resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.2.tgz",
"integrity": "sha1-rifbOPZgp64uHDt9G8KQgZuFGeY="
"version": "3.2.4",
"resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz",
"integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw=="
},
"syswide-cas": {
"version": "5.2.0",
@@ -2941,6 +3169,11 @@
}
}
},
"urix": {
"version": "0.1.0",
"resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz",
"integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI="
},
"url-parse": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.2.0.tgz",
@@ -3012,9 +3245,9 @@
"integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g=="
},
"whatwg-url": {
"version": "6.5.0",
"resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-6.5.0.tgz",
"integrity": "sha512-rhRZRqx/TLJQWUpQ6bmrt2UV4f0HCQ463yQuONJqC6fO2VoEb1pTYddbe59SkYq87aoM5A3bdhMZiUiVws+fzQ==",
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.0.0.tgz",
"integrity": "sha512-37GeVSIJ3kn1JgKyjiYNmSLP1yzbpb29jdmwBSgkD9h40/hyrR/OifpVUndji3tmwGgD8qpw7iQu3RSbCrBpsQ==",
"requires": {
"lodash.sortby": "^4.7.0",
"tr46": "^1.0.1",
@@ -3067,14 +3300,6 @@
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
"integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
},
"ws": {
"version": "5.2.2",
"resolved": "https://registry.npmjs.org/ws/-/ws-5.2.2.tgz",
"integrity": "sha512-jaHFD6PFv6UgoIVda6qZllptQsMlDEJkTQcybzzXDYM1XO9Y8em691FGMPmM46WGyLU4z9KMgQN+qrux/nhlHA==",
"requires": {
"async-limiter": "~1.0.0"
}
},
"xml-name-validator": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz",

View File

@@ -20,7 +20,7 @@
],
"owner": "Laurent Cozic"
},
"version": "1.0.123",
"version": "1.0.140",
"bin": {
"joplin": "./main.js"
},
@@ -33,7 +33,9 @@
"base-64": "^0.1.0",
"compare-version": "^0.1.2",
"diacritics": "^1.3.0",
"diff-match-patch": "^1.0.4",
"es6-promise-pool": "^2.5.0",
"file-uri-to-path": "^1.0.0",
"follow-redirects": "^1.2.4",
"form-data": "^2.1.4",
"fs-extra": "^5.0.0",
@@ -41,8 +43,8 @@
"html-minifier": "^3.5.15",
"image-data-uri": "^2.0.0",
"image-type": "^3.0.0",
"joplin-turndown": "^4.0.11",
"joplin-turndown-plugin-gfm": "^1.0.7",
"joplin-turndown": "^4.0.17",
"joplin-turndown-plugin-gfm": "^1.0.8",
"jssha": "^2.3.0",
"levenshtein": "^1.0.5",
"lodash": "^4.17.4",
@@ -60,9 +62,9 @@
"redux": "^3.7.2",
"sax": "^1.2.2",
"server-destroy": "^1.0.1",
"sharp": "^0.20.8",
"sharp": "^0.22.1",
"sprintf-js": "^1.1.1",
"sqlite3": "^4.0.1",
"sqlite3": "^4.0.7",
"string-padding": "^1.0.2",
"string-to-stream": "^1.1.0",
"strip-ansi": "^4.0.0",

View File

@@ -3,5 +3,4 @@ set -e
CLIENT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
bash "$CLIENT_DIR/build.sh" && node "$CLIENT_DIR/build/main.js" --profile ~/Temp/TestNotes2 --stack-trace-enabled --log-level debug --env dev "$@"
# bash $CLIENT_DIR/build.sh && NODE_PATH="$CLIENT_DIR/build/" node build/main.js --profile ~/.config/joplin --stack-trace-enabled --log-level debug "$@"
# bash "$CLIENT_DIR/build.sh" && node "$CLIENT_DIR/build/main.js" --profile ~/.config/joplin --stack-trace-enabled --log-level debug --env dev "$@"

View File

@@ -31,13 +31,17 @@ npm test tests-build/models_Folder.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_Revision.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/services_InteropService.js
npm test tests-build/services_KvStore.js
npm test tests-build/services_ResourceService.js
npm test tests-build/services_rest_Api.js
npm test tests-build/services_SearchEngine.js
npm test tests-build/services_Revision.js
npm test tests-build/StringUtils.js
npm test tests-build/TaskQueue.js
npm test tests-build/synchronizer.js
npm test tests-build/urlUtils.js

View File

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

View File

@@ -37,12 +37,22 @@ describe('HtmlToMd', function() {
const htmlPath = basePath + '/' + htmlFilename;
const mdPath = basePath + '/' + filename(htmlFilename) + '.md';
// if (htmlFilename !== 'picture.html') continue;
// if (htmlFilename !== 'mathjax_block.html') continue;
const htmlToMdOptions = {}
if (htmlFilename === 'anchor_local.html') {
// Normally the list of anchor names in the document are retrieved from the HTML code
// This is straightforward when the document is still in DOM format, as with the clipper,
// but otherwise it would need to be somehow parsed out from the HTML. Here we just
// hard code the anchors that we know are in the file.
htmlToMdOptions.anchorNames = ['first', 'second']
}
const html = await shim.fsDriver().readFile(htmlPath);
let expectedMd = await shim.fsDriver().readFile(mdPath);
let actualMd = await htmlToMd.parse('<div>' + html + '</div>', []);
let actualMd = await htmlToMd.parse('<div>' + html + '</div>', htmlToMdOptions);
if (os.EOL === '\r\n') {
expectedMd = expectedMd.replace(/\r\n/g, '\n')

View File

@@ -0,0 +1,57 @@
require('app-module-path').addPath(__dirname);
const { asyncTest, fileContentEqual, setupDatabase, revisionService, setupDatabaseAndSynchronizer, db, synchronizer, fileApi, sleep, clearDatabase, switchClient, syncTargetId, objectsEqual, checkThrowAsync } = require('test-utils.js');
const TaskQueue = require('lib/TaskQueue.js');
process.on('unhandledRejection', (reason, p) => {
console.log('Unhandled Rejection at: Promise', p, 'reason:', reason);
});
describe('TaskQueue', function() {
beforeEach(async (done) => {
await setupDatabaseAndSynchronizer(1);
await switchClient(1);
done();
});
it('should queue and execute tasks', asyncTest(async () => {
const queue = new TaskQueue();
queue.push(1, async () => { await sleep(0.5); return 'a'; });
queue.push(2, async () => { await sleep(0.5); return 'b'; });
queue.push(3, async () => { await sleep(0.5); return 'c'; });
const results = [];
results.push(await queue.waitForResult(1));
results.push(await queue.waitForResult(2));
results.push(await queue.waitForResult(3));
expect(results[0].id).toBe(1);
expect(results[0].result).toBe('a');
expect(results[1].id).toBe(2);
expect(results[1].result).toBe('b');
expect(results[2].id).toBe(3);
expect(results[2].result).toBe('c');
}));
it('should handle errors', asyncTest(async () => {
const queue = new TaskQueue();
queue.push(1, async () => { await sleep(0.5); return 'a'; });
queue.push(2, async () => { await sleep(0.5); throw new Error('e'); });
const results = [];
results.push(await queue.waitForResult(1));
results.push(await queue.waitForResult(2));
expect(results[0].id).toBe(1);
expect(results[0].result).toBe('a');
expect(results[1].id).toBe(2);
expect(!results[1].result).toBe(true);
expect(results[1].error.message).toBe('e');
}));
});

View File

@@ -25,8 +25,7 @@ describe('Encryption', function() {
beforeEach(async (done) => {
await setupDatabaseAndSynchronizer(1);
//await setupDatabaseAndSynchronizer(2);
//await switchClient(1);
await switchClient(1);
service = new EncryptionService();
BaseItem.encryptionService_ = service;
Setting.setValue('encryption.enabled', true);

View File

@@ -0,0 +1,16 @@
<ul>
<li lang="en-US">
<div>Protocols</div>
</li>
<ul type="circle">
<li lang="en-US">
<div>two common network protocols used to send data packets over a network</div>
</li>
<li lang="en-US">
<div>TCP Transmission control protocol</div>
</li>
</ul>
<li lang="en-US">
<div>Network port - a network port is a process-specific or an application-specific software construct serving as a communication endpoint, which is used by the Transport Layer protocols of Internet Protocol suite, such as UDP and TCP</div>
</li>
</ul>

View File

@@ -0,0 +1,7 @@
- Protocols
- two common network protocols used to send data packets over a network
- TCP Transmission control protocol
- Network port - a network port is a process-specific or an application-specific software construct serving as a communication endpoint, which is used by the Transport Layer protocols of Internet Protocol suite, such as UDP and TCP

View File

@@ -0,0 +1,5 @@
<img src="https://joplinapp.org/images/Icon512.png" alt="multiple
lines
are
possible
I guess"/><img src="https://joplinapp.org/images/Icon512.png" alt="This should ] be escaped"/>

View File

@@ -0,0 +1 @@
![multiple lines are possible I guess](https://joplinapp.org/images/Icon512.png)![This should \] be escaped](https://joplinapp.org/images/Icon512.png)

View File

@@ -0,0 +1,7 @@
<div>Sometimes Evernote
wraps lines inside blocks</div>
<div>Sometimes it doesn't wrap them</div>
<pre>But
careful
with
pre tags</pre>

View File

@@ -0,0 +1,6 @@
Sometimes Evernote wraps lines inside blocks
Sometimes it doesn't wrap them
But
careful
with
pre tags

View File

@@ -0,0 +1,105 @@
require('app-module-path').addPath(__dirname);
const { time } = require('lib/time-utils.js');
const { fileContentEqual, setupDatabase, setupDatabaseAndSynchronizer, db, synchronizer, fileApi, sleep, clearDatabase, switchClient, syncTargetId, objectsEqual, checkThrowAsync } = require('test-utils.js');
const htmlUtils = require('lib/htmlUtils.js');
process.on('unhandledRejection', (reason, p) => {
console.log('Unhandled Rejection at: Promise', p, 'reason:', reason);
});
describe('htmlUtils', function() {
beforeEach(async (done) => {
done();
});
it('should extract image URLs', async (done) => {
const testCases = [
['<img src="http://test.com/img.png"/>', ['http://test.com/img.png']],
['<img src="http://test.com/img.png"/> <img src="http://test.com/img2.png"/>', ['http://test.com/img.png', 'http://test.com/img2.png']],
['<img src="http://test.com/img.png" alt="testing" >', ['http://test.com/img.png']],
['nothing here', []],
['', []],
];
for (let i = 0; i < testCases.length; i++) {
const md = testCases[i][0];
const expected = testCases[i][1];
expect(htmlUtils.extractImageUrls(md).join(' ')).toBe(expected.join(' '));
}
done();
});
it('should replace image URLs', async (done) => {
const testCases = [
['<img src="http://test.com/img.png"/>', ['http://other.com/img2.png'], '<img src="http://other.com/img2.png"/>'],
['<img src="http://test.com/img.png"/> <img src="http://test.com/img2.png"/>', ['http://other.com/img2.png', 'http://other.com/img3.png'], '<img src="http://other.com/img2.png"/> <img src="http://other.com/img3.png"/>'],
['<img src="http://test.com/img.png" alt="testing" >', ['http://other.com/img.png'], '<img src="http://other.com/img.png" alt="testing" >'],
];
const callback = (urls) => {
let i = -1;
return function(src) {
i++;
return urls[i];
}
}
for (let i = 0; i < testCases.length; i++) {
const md = testCases[i][0];
const r = htmlUtils.replaceImageUrls(md, callback(testCases[i][1]));
expect(r.trim()).toBe(testCases[i][2].trim());
}
done();
});
it('should encode attributes', async (done) => {
const testCases = [
[{ a: 'one', b: 'two' }, 'a="one" b="two"'],
[{ a: 'one&two' }, 'a="one&amp;two"'],
];
for (let i = 0; i < testCases.length; i++) {
const attrs = testCases[i][0];
const expected = testCases[i][1];
expect(htmlUtils.attributesHtml(attrs)).toBe(expected);
}
done();
});
it('should prepend a base URL', async (done) => {
const testCases = [
[
'<a href="a.html">Something</a>',
'http://test.com',
'<a href="http://test.com/a.html">Something</a>',
],
[
'<a href="a.html">a</a> <a href="b.html">b</a>',
'http://test.com',
'<a href="http://test.com/a.html">a</a> <a href="http://test.com/b.html">b</a>',
],
[
'<a href="a.html">a</a> <a href="b.html">b</a>',
'http://test.com',
'<a href="http://test.com/a.html">a</a> <a href="http://test.com/b.html">b</a>',
],
];
for (let i = 0; i < testCases.length; i++) {
const html = testCases[i][0];
const baseUrl = testCases[i][1];
const expected = testCases[i][2];
expect(htmlUtils.prependBaseUrl(html, baseUrl)).toBe(expected);
}
done();
});
});

View File

@@ -0,0 +1,6 @@
<p><a href="#first">First</a></p>
<p><a href="#second">Second</a></p>
<p>Third</p>
<p><a name="first"></a>First</p>
<p><a id="second"></a>Second</p>
<p><a id="third"></a>Third</p>

View File

@@ -0,0 +1,11 @@
[First](#first)
[Second](#second)
Third
<a id="first"></a>First
<a id="second"></a>Second
Third

View File

@@ -1 +1 @@
<a href="https://joplin.cozic.net"><h1 id="joplin"><img class="title-icon" src="https://joplin.cozic.net/images/Icon512.png">oplin</h1></a>
<a href="https://joplinapp.org"><h1 id="joplin"><img class="title-icon" src="https://joplinapp.org/images/Icon512.png">oplin</h1></a>

View File

@@ -1 +1 @@
[# ![](https://joplin.cozic.net/images/Icon512.png)oplin](https://joplin.cozic.net)
[# ![](https://joplinapp.org/images/Icon512.png)oplin](https://joplinapp.org)

View File

@@ -1 +1 @@
[Some text]()
Some text

View File

@@ -1,5 +1,7 @@
def ma_fonction():
"""
C'est une super fonction
"""
pass
```
def ma_fonction():
"""
C'est une super fonction
"""
pass
```

View File

@@ -0,0 +1,2 @@
<pre style="font-family: Menlo, Monaco, Consolas, &quot;Courier New&quot;, monospace;"><strong><font color="#008080">thatsCode();</font></strong></pre>
<pre>thatsJustPre(); // In that case we do not have enough info to know if it is a codeblock or not, so we leave it as plain text</pre>

View File

@@ -0,0 +1,5 @@
```
thatsCode();
```
thatsJustPre(); // In that case we do not have enough info to know if it is a codeblock or not, so we leave it as plain text

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,5 @@
_Block formulas_ are surrounded by double dollar signs. For example, `$$x = \frac{-b \pm \sqrt{b^2 - 4ac} }{2a}$$` renders, _on a separate line_, as
$$
x = \frac{-b \pm \sqrt{b^2 - 4ac} }{2a}.
$$

View File

@@ -0,0 +1 @@
<p><em>Inline formulas</em> are surrounded by single dollar signs. For example, <code>$f(x) = ax^2 + bx + c$</code> renders as <span class="MathJax_Preview" style="color: inherit;"></span><span class="MathJax" id="MathJax-Element-2-Frame" tabindex="0" style="position: relative;" data-mathml="<math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot;><mi>f</mi><mo stretchy=&quot;false&quot;>(</mo><mi>x</mi><mo stretchy=&quot;false&quot;>)</mo><mo>=</mo><mi>a</mi><msup><mi>x</mi><mn>2</mn></msup><mo>+</mo><mi>b</mi><mi>x</mi><mo>+</mo><mi>c</mi></math>" role="presentation"><nobr aria-hidden="true"><span class="math" id="MathJax-Span-26" style="width: 9.372em; display: inline-block;"><span style="display: inline-block; position: relative; width: 8.408em; height: 0px; font-size: 111%;"><span style="position: absolute; clip: rect(1.562em, 1008.39em, 2.95em, -1000em); top: -2.583em; left: 0em;"><span class="mrow" id="MathJax-Span-27"><span class="mi" id="MathJax-Span-28" style="font-family: STIXGeneral; font-style: italic;">𝑓<span style="display: inline-block; overflow: hidden; height: 1px; width: 0.06em;"></span></span><span class="mo" id="MathJax-Span-29" style="font-family: STIXGeneral;">(</span><span class="mi" id="MathJax-Span-30" style="font-family: STIXGeneral; font-style: italic;">𝑥</span><span class="mo" id="MathJax-Span-31" style="font-family: STIXGeneral;">)</span><span class="mo" id="MathJax-Span-32" style="font-family: STIXGeneral; padding-left: 0.313em;">=</span><span class="mi" id="MathJax-Span-33" style="font-family: STIXGeneral; font-style: italic; padding-left: 0.313em;">𝑎</span><span class="msubsup" id="MathJax-Span-34"><span style="display: inline-block; position: relative; width: 0.979em; height: 0px;"><span style="position: absolute; clip: rect(3.403em, 1000.51em, 4.213em, -1000em); top: -4.024em; left: 0em;"><span class="mi" id="MathJax-Span-35" style="font-family: STIXGeneral; font-style: italic;">𝑥</span><span style="display: inline-block; width: 0px; height: 4.024em;"></span></span><span style="position: absolute; top: -4.387em; left: 0.55em;"><span class="mn" id="MathJax-Span-36" style="font-size: 70.7%; font-family: STIXGeneral;">2</span><span style="display: inline-block; width: 0px; height: 4.024em;"></span></span></span></span><span class="mo" id="MathJax-Span-37" style="font-family: STIXGeneral; padding-left: 0.25em;">+</span><span class="mi" id="MathJax-Span-38" style="font-family: STIXGeneral; font-style: italic; padding-left: 0.25em;">𝑏</span><span class="mi" id="MathJax-Span-39" style="font-family: STIXGeneral; font-style: italic;">𝑥</span><span class="mo" id="MathJax-Span-40" style="font-family: STIXGeneral; padding-left: 0.25em;">+</span><span class="mi" id="MathJax-Span-41" style="font-family: STIXGeneral; font-style: italic; padding-left: 0.25em;">𝑐</span></span><span style="display: inline-block; width: 0px; height: 2.583em;"></span></span></span><span style="display: inline-block; overflow: hidden; vertical-align: -0.274em; border-left: 0px solid; width: 0px; height: 1.274em;"></span></span></nobr><span class="MJX_Assistive_MathML" role="presentation"><math xmlns="http://www.w3.org/1998/Math/MathML"><mi>f</mi><mo stretchy="false">(</mo><mi>x</mi><mo stretchy="false">)</mo><mo>=</mo><mi>a</mi><msup><mi>x</mi><mn>2</mn></msup><mo>+</mo><mi>b</mi><mi>x</mi><mo>+</mo><mi>c</mi></math></span></span><script type="math/tex" id="MathJax-Element-2">f(x)=ax^2+bx+c</script>.</p>

View File

@@ -0,0 +1 @@
_Inline formulas_ are surrounded by single dollar signs. For example, `$f(x) = ax^2 + bx + c$` renders as $f(x)=ax^2+bx+c$.

View File

@@ -0,0 +1,42 @@
<table>
<thead>
<tr>
<th></th>
<th></th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>Official Things</strong></td>
<td></td>
</tr>
<tr>
<td><a href="https://nim-lang.org">Web Site</a></td>
<td>The project’s entry point</td>
</tr>
<tr>
<td><a href="https://github.com/nim-lang/nim">Source</a></td>
<td>The github project</td>
</tr>
<tr>
<td><a href="https://github.com/nim-lang/nimble">nimble</a></td>
<td>The nim package manager</td>
</tr>
<tr>
<td><a href="https://github.com/dom96/choosenim">choosenim</a></td>
<td>Toolchain installer</td>
</tr>
<tr>
<td>&nbsp;</td>
<td></td>
</tr>
<tr>
<td><strong>Community</strong></td>
<td></td>
</tr>
<tr>
<td><a href="https://forum.nim-lang.org">Forums</a></td>
<td>An async discussion board</td>
</tr>
</tbody>
</table>

View File

@@ -0,0 +1,9 @@
| | |
| --- | --- |
| **Official Things** | |
| [Web Site](https://nim-lang.org) | The project’s entry point |
| [Source](https://github.com/nim-lang/nim) | The github project |
| [nimble](https://github.com/nim-lang/nimble) | The nim package manager |
| [choosenim](https://github.com/dom96/choosenim) | Toolchain installer |
| **Community** | |
| [Forums](https://forum.nim-lang.org) | An async discussion board |

View File

@@ -6,4 +6,6 @@ Some text, not an image, so it should remain escaped:
But this is code so it can be unescaped:
<img src="http://test.com/image.png" />
```
<img src="http://test.com/image.png" />
```

View File

@@ -47,5 +47,20 @@ describe('models_BaseItem', function() {
expect('ignore_me' in unserialized).toBe(false);
}));
it('should not modify title when unserializing', asyncTest(async () => {
let folder1 = await Folder.save({ title: "" });
let folder2 = await Folder.save({ title: "folder1" });
let serialized1 = await Folder.serialize(folder1);
let unserialized1 = await Folder.unserialize(serialized1);
expect(unserialized1.title).toBe(folder1.title);
let serialized2 = await Folder.serialize(folder2);
let unserialized2 = await Folder.unserialize(serialized2);
expect(unserialized2.title).toBe(folder2.title);
}));
});

View File

@@ -52,4 +52,77 @@ 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);
let n2 = await Note.save({ title: 'note2', parent_id: f2.id });
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);
await Note.save({ id: n1.id, title: 'note1 MOD' });
folders = await Folder.orderByLastModified(await Folder.all(), 'desc');
expect(folders[0].id).toBe(f1.id);
expect(folders[1].id).toBe(f3.id);
expect(folders[2].id).toBe(f2.id);
let f4 = await Folder.save({ title: "folder4", parent_id: f1.id }); await sleep(0.1);
let n3 = await Note.save({ title: 'note3', parent_id: f4.id });
folders = await Folder.orderByLastModified(await Folder.all(), 'desc');
expect(folders.length).toBe(4);
expect(folders[0].id).toBe(f1.id);
expect(folders[1].id).toBe(f4.id);
expect(folders[2].id).toBe(f3.id);
expect(folders[3].id).toBe(f2.id);
}));
});

View File

@@ -1,7 +1,7 @@
require('app-module-path').addPath(__dirname);
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 { asyncTest, fileContentEqual, revisionService, setupDatabase, setupDatabaseAndSynchronizer, db, synchronizer, fileApi, sleep, clearDatabase, switchClient, syncTargetId, objectsEqual, checkThrowAsync } = require('test-utils.js');
const SearchEngine = require('lib/services/SearchEngine');
const ResourceService = require('lib/services/ResourceService');
const ItemChangeUtils = require('lib/services/ItemChangeUtils');
@@ -34,19 +34,17 @@ describe('models_ItemChange', function() {
const resourceService = new ResourceService();
await searchEngine.syncTables();
// If we run this now, it should not delete any change because
// the resource service has not yet processed the change
await ItemChangeUtils.deleteProcessedChanges();
expect(await ItemChange.lastChangeId()).toBe(1);
await resourceService.indexNoteResources();
// Now that the resource service has processed the change,
// the change can be deleted.
await ItemChangeUtils.deleteProcessedChanges();
expect(await ItemChange.lastChangeId()).toBe(1);
await revisionService().collectRevisions();
await ItemChangeUtils.deleteProcessedChanges();
expect(await ItemChange.lastChangeId()).toBe(0);
}));

View File

@@ -86,5 +86,32 @@ describe('models_Note', function() {
expect(changedNote === note1).toBe(false);
expect(!!changedNote.is_todo).toBe(false);
}));
it('should serialize and unserialize without modifying data', asyncTest(async () => {
let folder1 = await Folder.save({ title: "folder1"});
const testCases = [
[ {title: '', body:'Body and no title\nSecond line\nThird Line', parent_id: folder1.id},
'', 'Body and no title\nSecond line\nThird Line'],
[ {title: 'Note title', body:'Body and title', parent_id: folder1.id},
'Note title', 'Body and title'],
[ {title: 'Title and no body', body:'', parent_id: folder1.id},
'Title and no body', ''],
]
for (let i = 0; i < testCases.length; i++) {
const t = testCases[i];
const input = t[0];
const expectedTitle = t[1];
const expectedBody = t[1];
let note1 = await Note.save(input);
let serialized = await Note.serialize(note1);
let unserialized = await Note.unserialize( serialized);
expect(unserialized.title).toBe(input.title);
expect(unserialized.body).toBe(input.body);
}
}));
});

View File

@@ -8,10 +8,14 @@ const Resource = require('lib/models/Resource.js');
const BaseModel = require('lib/BaseModel.js');
const { shim } = require('lib/shim');
jasmine.DEFAULT_TIMEOUT_INTERVAL = 15000; // The first test is slow because the database needs to be built
process.on('unhandledRejection', (reason, p) => {
console.log('Unhandled Rejection at: Promise', p, 'reason:', reason);
});
const testImagePath = __dirname + '/../tests/support/photo.jpg';
describe('models_Resource', function() {
beforeEach(async (done) => {
@@ -23,7 +27,7 @@ describe('models_Resource', function() {
it('should have a "done" fetch_status when created locally', asyncTest(async () => {
let folder1 = await Folder.save({ title: "folder1" });
let note1 = await Note.save({ title: 'ma note', parent_id: folder1.id });
await shim.attachFileToNote(note1, __dirname + '/../tests/support/photo.jpg');
await shim.attachFileToNote(note1, testImagePath);
let resource1 = (await Resource.all())[0];
let ls = await Resource.localState(resource1);
expect(ls.fetch_status).toBe(Resource.FETCH_STATUS_DONE);
@@ -32,7 +36,7 @@ describe('models_Resource', function() {
it('should have a default local state', asyncTest(async () => {
let folder1 = await Folder.save({ title: "folder1" });
let note1 = await Note.save({ title: 'ma note', parent_id: folder1.id });
await shim.attachFileToNote(note1, __dirname + '/../tests/support/photo.jpg');
await shim.attachFileToNote(note1, testImagePath);
let resource1 = (await Resource.all())[0];
let ls = await Resource.localState(resource1);
expect(!ls.id).toBe(true);
@@ -43,7 +47,7 @@ describe('models_Resource', function() {
it('should save and delete local state', asyncTest(async () => {
let folder1 = await Folder.save({ title: "folder1" });
let note1 = await Note.save({ title: 'ma note', parent_id: folder1.id });
await shim.attachFileToNote(note1, __dirname + '/../tests/support/photo.jpg');
await shim.attachFileToNote(note1, testImagePath);
let resource1 = (await Resource.all())[0];
await Resource.setLocalState(resource1, { fetch_status: Resource.FETCH_STATUS_IDLE });
@@ -56,4 +60,31 @@ describe('models_Resource', function() {
expect(!ls.id).toBe(true);
}));
it('should resize the resource if the image is below the required dimensions', asyncTest(async () => {
let folder1 = await Folder.save({ title: "folder1" });
let note1 = await Note.save({ title: 'ma note', parent_id: folder1.id });
const previousMax = Resource.IMAGE_MAX_DIMENSION;
Resource.IMAGE_MAX_DIMENSION = 5;
await shim.attachFileToNote(note1, testImagePath);
Resource.IMAGE_MAX_DIMENSION = previousMax;
let resource1 = (await Resource.all())[0];
const originalStat = await shim.fsDriver().stat(testImagePath);
const newStat = await shim.fsDriver().stat(Resource.fullPath(resource1));
expect(newStat.size < originalStat.size).toBe(true);
}));
it('should not resize the resource if the image is below the required dimensions', asyncTest(async () => {
let folder1 = await Folder.save({ title: "folder1" });
let note1 = await Note.save({ title: 'ma note', parent_id: folder1.id });
await shim.attachFileToNote(note1, testImagePath);
let resource1 = (await Resource.all())[0];
const originalStat = await shim.fsDriver().stat(testImagePath);
const newStat = await shim.fsDriver().stat(Resource.fullPath(resource1));
expect(originalStat.size).toBe(newStat.size);
}));
});

View File

@@ -0,0 +1,104 @@
require('app-module-path').addPath(__dirname);
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 Revision = require('lib/models/Revision.js');
const BaseModel = require('lib/BaseModel.js');
const { shim } = require('lib/shim');
process.on('unhandledRejection', (reason, p) => {
console.log('Unhandled Rejection at: Promise', p, 'reason:', reason);
});
describe('models_Revision', function() {
beforeEach(async (done) => {
await setupDatabaseAndSynchronizer(1);
await switchClient(1);
done();
});
it('should create patches of text and apply it', asyncTest(async () => {
const note1 = await Note.save({ body: 'my note\nsecond line' });
const patch = Revision.createTextPatch(note1.body, 'my new note\nsecond line');
const merged = Revision.applyTextPatch(note1.body, patch);
expect(merged).toBe('my new note\nsecond line');
}));
it('should create patches of objects and apply it', asyncTest(async () => {
const oldObject = {
one: '123',
two: '456',
three: '789',
};
const newObject = {
one: '123',
three: '999',
}
const patch = Revision.createObjectPatch(oldObject, newObject);
const merged = Revision.applyObjectPatch(oldObject, patch);
expect(JSON.stringify(merged)).toBe(JSON.stringify(newObject));
}));
it('should move target revision to the top', asyncTest(async () => {
const revs = [
{ id: '123' },
{ id: '456' },
{ id: '789' },
];
let newRevs;
newRevs = Revision.moveRevisionToTop({ id: '456' }, revs);
expect(newRevs[0].id).toBe('123');
expect(newRevs[1].id).toBe('789');
expect(newRevs[2].id).toBe('456');
newRevs = Revision.moveRevisionToTop({ id: '789' }, revs);
expect(newRevs[0].id).toBe('123');
expect(newRevs[1].id).toBe('456');
expect(newRevs[2].id).toBe('789');
}));
it('should create patch stats', asyncTest(async () => {
const tests = [
{
patch: `@@ -625,16 +625,48 @@
rrupted download
+%0A- %5B %5D Fix mobile screen options`,
expected: [-0, +32],
},
{
patch: `@@ -564,17 +564,17 @@
ages%0A- %5B
-
+x
%5D Check `,
expected: [-1, +1],
},
{
patch: `@@ -1022,56 +1022,415 @@
.%0A%0A#
- How to view a note history%0A%0AWhile all the apps
+%C2%A0How does it work?%0A%0AAll the apps save a version of the modified notes every 10 minutes.
%0A%0A# `,
expected: [-(19+27+2), 17+67+4],
},
];
for (const test of tests) {
const stats = Revision.patchStats(test.patch);
expect(stats.removed).toBe(-test.expected[0]);
expect(stats.added).toBe(test.expected[1]);
}
}));
});

View File

@@ -0,0 +1,107 @@
require('app-module-path').addPath(__dirname);
const { asyncTest, fileContentEqual, setupDatabase, revisionService, setupDatabaseAndSynchronizer, db, synchronizer, fileApi, sleep, clearDatabase, switchClient, syncTargetId, objectsEqual, checkThrowAsync } = require('test-utils.js');
const KvStore = require('lib/services/KvStore.js');
process.on('unhandledRejection', (reason, p) => {
console.log('Unhandled Rejection at: Promise', p, 'reason:', reason);
});
jasmine.DEFAULT_TIMEOUT_INTERVAL = 10000;
function setupStore() {
const store = KvStore.instance();
store.setDb(db());
return store;
}
describe('services_KvStore', function() {
beforeEach(async (done) => {
await setupDatabaseAndSynchronizer(1);
await switchClient(1);
done();
});
it('should set and get values', asyncTest(async () => {
const store = setupStore();
await store.setValue('a', 123);
expect(await store.value('a')).toBe(123);
await store.setValue('a', 123);
expect(await store.countKeys()).toBe(1);
expect(await store.value('a')).toBe(123);
await store.setValue('a', 456);
expect(await store.countKeys()).toBe(1);
expect(await store.value('a')).toBe(456);
await store.setValue('b', 789);
expect(await store.countKeys()).toBe(2);
expect(await store.value('a')).toBe(456);
expect(await store.value('b')).toBe(789);
}));
it('should set and get values with the right type', asyncTest(async () => {
const store = setupStore();
await store.setValue('string', 'something');
await store.setValue('int', 123);
expect(await store.value('string')).toBe('something');
expect(await store.value('int')).toBe(123);
}));
it('should increment values', asyncTest(async () => {
const store = setupStore();
await store.setValue('int', 1);
const newValue = await store.incValue('int');
expect(newValue).toBe(2);
expect(await store.value('int')).toBe(2);
expect(await store.incValue('int2')).toBe(1);
expect(await store.countKeys()).toBe(2);
}));
it('should handle non-existent values', asyncTest(async () => {
const store = setupStore();
expect(await store.value('nope')).toBe(null);
}));
it('should delete values', asyncTest(async () => {
const store = setupStore();
await store.setValue('int', 1);
expect(await store.countKeys()).toBe(1);
await store.deleteValue('int');
expect(await store.countKeys()).toBe(0);
await store.deleteValue('int'); // That should not throw
}));
it('should increment in an atomic way', asyncTest(async () => {
const store = setupStore();
await store.setValue('int', 0);
const promises = [];
for (let i = 0; i < 20; i++) {
promises.push(store.incValue('int'));
}
await Promise.all(promises);
expect(await store.value('int')).toBe(20);
}));
it('should search by prefix', asyncTest(async () => {
const store = setupStore();
await store.setValue('testing:1', 1);
await store.setValue('testing:2', 2);
const results = await store.searchByPrefix('testing:');
expect(results.length).toBe(2);
const numbers = results.map(r => r.value).sort();
expect(numbers[0]).toBe(1);
expect(numbers[1]).toBe(2);
}));
});

View File

@@ -1,7 +1,7 @@
require('app-module-path').addPath(__dirname);
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 { asyncTest, resourceService, decryptionWorker, encryptionService, loadEncryptionMasterKey, allSyncTargetItemsEncrypted, fileContentEqual, setupDatabase, setupDatabaseAndSynchronizer, db, synchronizer, fileApi, sleep, clearDatabase, switchClient, syncTargetId, objectsEqual, checkThrowAsync } = require('test-utils.js');
const InteropService = require('lib/services/InteropService.js');
const Folder = require('lib/models/Folder.js');
const Note = require('lib/models/Note.js');
@@ -15,6 +15,7 @@ const fs = require('fs-extra');
const ArrayUtils = require('lib/ArrayUtils');
const ObjectUtils = require('lib/ObjectUtils');
const { shim } = require('lib/shim.js');
const SearchEngine = require('lib/services/SearchEngine');
process.on('unhandledRejection', (reason, p) => {
console.log('Unhandled Rejection at: Promise', p, 'reason:', reason);
@@ -37,6 +38,7 @@ describe('services_ResourceService', function() {
beforeEach(async (done) => {
await setupDatabaseAndSynchronizer(1);
await setupDatabaseAndSynchronizer(2);
await switchClient(1);
done();
});
@@ -146,4 +148,69 @@ describe('services_ResourceService', function() {
expect(before.last_seen_time).toBe(after.last_seen_time);
}));
it('should not delete resources that are associated with an encrypted note', asyncTest(async () => {
// https://github.com/laurent22/joplin/issues/1433
//
// Client 1 and client 2 have E2EE setup.
//
// - Client 1 creates note N1 and add resource R1 to it
// - Client 1 syncs
// - Client 2 syncs and get N1
// - Client 2 add resource R2 to N1
// - Client 2 syncs
// - Client 1 syncs
// - Client 1 runs resource indexer - but because N1 hasn't been decrypted yet, it found that R1 is no longer associated with any note
// - Client 1 decrypts notes, but too late
//
// Eventually R1 is deleted because service thinks that it was at some point associated with a note, but no longer.
const masterKey = await loadEncryptionMasterKey();
await encryptionService().enableEncryption(masterKey, '123456');
await encryptionService().loadMasterKeysFromSettings();
let folder1 = await Folder.save({ title: "folder1" });
let note1 = await Note.save({ title: 'ma note', parent_id: folder1.id });
await shim.attachFileToNote(note1, __dirname + '/../tests/support/photo.jpg'); // R1
await resourceService().indexNoteResources();
await synchronizer().start();
expect(await allSyncTargetItemsEncrypted()).toBe(true);
await switchClient(2);
await synchronizer().start();
await encryptionService().enableEncryption(masterKey, '123456');
await encryptionService().loadMasterKeysFromSettings();
await decryptionWorker().start();
{
const n1 = await Note.load(note1.id);
await shim.attachFileToNote(n1, __dirname + '/../tests/support/photo.jpg'); // R2
}
await synchronizer().start();
await switchClient(1);
await synchronizer().start();
await resourceService().indexNoteResources();
await resourceService().deleteOrphanResources(0); // Previously, R1 would be deleted here because it's not indexed
expect((await Resource.all()).length).toBe(2);
}));
it('should double-check if the resource is still linked before deleting it', asyncTest(async () => {
SearchEngine.instance().setDb(db()); // /!\ Note that we use the global search engine here, which we shouldn't but will work for now
let folder1 = await Folder.save({ title: "folder1" });
let note1 = await Note.save({ title: 'ma note', parent_id: folder1.id });
note1 = await shim.attachFileToNote(note1, __dirname + '/../tests/support/photo.jpg');
await resourceService().indexNoteResources();
const bodyWithResource = note1.body;
await Note.save({ id: note1.id, body: '' });
await resourceService().indexNoteResources();
await Note.save({ id: note1.id, body: bodyWithResource });
await SearchEngine.instance().syncTables();
await resourceService().deleteOrphanResources(0);
expect((await Resource.all()).length).toBe(1); // It should not have deleted the resource
const nr = (await NoteResource.all())[0];
expect(!!nr.is_associated).toBe(true); // And it should have fixed the situation by re-indexing the note content
}));
});

View File

@@ -0,0 +1,420 @@
require('app-module-path').addPath(__dirname);
const { time } = require('lib/time-utils.js');
const { asyncTest, fileContentEqual, setupDatabase, revisionService, setupDatabaseAndSynchronizer, db, synchronizer, fileApi, sleep, clearDatabase, switchClient, syncTargetId, objectsEqual, checkThrowAsync } = require('test-utils.js');
const Folder = require('lib/models/Folder.js');
const Setting = require('lib/models/Setting.js');
const Note = require('lib/models/Note.js');
const NoteTag = require('lib/models/NoteTag.js');
const ItemChange = require('lib/models/ItemChange.js');
const Tag = require('lib/models/Tag.js');
const Revision = require('lib/models/Revision.js');
const BaseModel = require('lib/BaseModel.js');
const RevisionService = require('lib/services/RevisionService.js');
const { shim } = require('lib/shim');
process.on('unhandledRejection', (reason, p) => {
console.log('Unhandled Rejection at: Promise', p, 'reason:', reason);
});
describe('services_Revision', function() {
beforeEach(async (done) => {
await setupDatabaseAndSynchronizer(1);
await switchClient(1);
Setting.setValue('revisionService.intervalBetweenRevisions', 0)
done();
});
it('should create diff and rebuild notes', asyncTest(async () => {
const service = new RevisionService();
const n1_v1 = await Note.save({ title: '', author: 'testing' });
await service.collectRevisions();
await Note.save({ id: n1_v1.id, title: 'hello', author: 'testing' });
await service.collectRevisions();
const n1_v2 = await Note.save({ id: n1_v1.id, title: 'hello welcome', author: '' });
await service.collectRevisions();
const revisions = await Revision.allByType(BaseModel.TYPE_NOTE, n1_v1.id);
expect(revisions.length).toBe(2);
expect(revisions[1].parent_id).toBe(revisions[0].id);
const rev1 = await service.revisionNote(revisions, 0);
expect(rev1.title).toBe('hello');
expect(rev1.author).toBe('testing');
const rev2 = await service.revisionNote(revisions, 1);
expect(rev2.title).toBe('hello welcome');
expect(rev2.author).toBe('');
await time.sleep(0.5);
await service.deleteOldRevisions(400);
const revisions2 = await Revision.allByType(BaseModel.TYPE_NOTE, n1_v1.id);
expect(revisions2.length).toBe(0);
}));
it('should delete old revisions (1 note, 2 rev)', asyncTest(async () => {
const service = new RevisionService();
const n1_v0 = await Note.save({ title: '' });
const n1_v1 = await Note.save({ id: n1_v0.id, title: 'hello' });
await service.collectRevisions();
await time.sleep(1);
const n1_v2 = await Note.save({ id: n1_v1.id, title: 'hello welcome' });
await service.collectRevisions();
expect((await Revision.allByType(BaseModel.TYPE_NOTE, n1_v1.id)).length).toBe(2);
await service.deleteOldRevisions(1000);
const revisions = await Revision.allByType(BaseModel.TYPE_NOTE, n1_v1.id);
expect(revisions.length).toBe(1);
const rev1 = await service.revisionNote(revisions, 0);
expect(rev1.title).toBe('hello welcome');
}));
it('should delete old revisions (1 note, 3 rev)', asyncTest(async () => {
const service = new RevisionService();
const n1_v0 = await Note.save({ title: '' });
const n1_v1 = await Note.save({ id: n1_v0.id, title: 'one' });
await service.collectRevisions();
await time.sleep(1);
const n1_v2 = await Note.save({ id: n1_v1.id, title: 'one two' });
await service.collectRevisions();
await time.sleep(1);
const n1_v3 = await Note.save({ id: n1_v1.id, title: 'one two three' });
await service.collectRevisions();
{
await service.deleteOldRevisions(2000);
const revisions = await Revision.allByType(BaseModel.TYPE_NOTE, n1_v1.id);
expect(revisions.length).toBe(2);
const rev1 = await service.revisionNote(revisions, 0);
expect(rev1.title).toBe('one two');
const rev2 = await service.revisionNote(revisions, 1);
expect(rev2.title).toBe('one two three');
}
{
await service.deleteOldRevisions(1000);
const revisions = await Revision.allByType(BaseModel.TYPE_NOTE, n1_v1.id);
expect(revisions.length).toBe(1);
const rev1 = await service.revisionNote(revisions, 0);
expect(rev1.title).toBe('one two three');
}
}));
it('should delete old revisions (2 notes, 2 rev)', asyncTest(async () => {
const service = new RevisionService();
const n1_v0 = await Note.save({ title: '' });
const n1_v1 = await Note.save({ id: n1_v0.id, title: 'note 1' });
const n2_v0 = await Note.save({ title: '' });
const n2_v1 = await Note.save({ id: n2_v0.id, title: 'note 2' });
await service.collectRevisions();
await time.sleep(1);
const n1_v2 = await Note.save({ id: n1_v1.id, title: 'note 1 (v2)' });
const n2_v2 = await Note.save({ id: n2_v1.id, title: 'note 2 (v2)' });
await service.collectRevisions();
expect((await Revision.all()).length).toBe(4);
await service.deleteOldRevisions(1000);
{
const revisions = await Revision.allByType(BaseModel.TYPE_NOTE, n1_v1.id);
expect(revisions.length).toBe(1);
const rev1 = await service.revisionNote(revisions, 0);
expect(rev1.title).toBe('note 1 (v2)');
}
{
const revisions = await Revision.allByType(BaseModel.TYPE_NOTE, n2_v1.id);
expect(revisions.length).toBe(1);
const rev1 = await service.revisionNote(revisions, 0);
expect(rev1.title).toBe('note 2 (v2)');
}
}));
it('should handle conflicts', asyncTest(async () => {
const service = new RevisionService();
// A conflict happens in this case:
// - Device 1 creates note1 (rev1)
// - Device 2 syncs and get note1
// - Device 1 modifies note1 (rev2)
// - Device 2 modifies note1 (rev3)
// When reconstructing the notes based on the revisions, we need to make sure it follow the right
// "path". For example, to reconstruct the note at rev2 it would be:
// rev1 => rev2
// To reconstruct the note at rev3 it would be:
// rev1 => rev3
// And not, for example, rev1 => rev2 => rev3
const n1_v1 = await Note.save({ title: 'hello' });
const noteId = n1_v1.id;
const rev1 = await service.createNoteRevision_(n1_v1);
const n1_v2 = await Note.save({ id: noteId, title: 'hello Paul' });
const rev2 = await service.createNoteRevision_(n1_v2, rev1.id);
const n1_v3 = await Note.save({ id: noteId, title: 'hello John' });
const rev3 = await service.createNoteRevision_(n1_v3, rev1.id);
const revisions = await Revision.allByType(BaseModel.TYPE_NOTE, noteId);
expect(revisions.length).toBe(3);
expect(revisions[1].parent_id).toBe(rev1.id);
expect(revisions[2].parent_id).toBe(rev1.id);
const revNote1 = await service.revisionNote(revisions, 0);
const revNote2 = await service.revisionNote(revisions, 1);
const revNote3 = await service.revisionNote(revisions, 2);
expect(revNote1.title).toBe('hello');
expect(revNote2.title).toBe('hello Paul');
expect(revNote3.title).toBe('hello John');
}));
it('should create a revision for notes that are older than a given interval', asyncTest(async () => {
const n1 = await Note.save({ title: 'hello' });
const noteId = n1.id;
await sleep(0.1);
// Set the interval in such a way that the note is considered an old one.
Setting.setValue('revisionService.oldNoteInterval', 50);
// A revision is created the first time a note is overwritten with new content, and
// if this note doesn't already have an existing revision.
// This is mostly to handle old notes that existed before the revision service. If these
// old notes are changed, there's a chance it's accidental or due to some bug, so we
// want to preserve a revision just in case.
{
await Note.save({ id: noteId, title: 'hello 2' });
await revisionService().collectRevisions(); // Rev for old note created + Rev for new note
const all = await Revision.allByType(BaseModel.TYPE_NOTE, noteId);
expect(all.length).toBe(2);
const revNote1 = await revisionService().revisionNote(all, 0);
const revNote2 = await revisionService().revisionNote(all, 1);
expect(revNote1.title).toBe('hello');
expect(revNote2.title).toBe('hello 2');
}
// If the note is saved a third time, we don't automatically create a revision. One
// will be created x minutes later when the service collects revisions.
{
await Note.save({ id: noteId, title: 'hello 3' });
const all = await Revision.allByType(BaseModel.TYPE_NOTE, noteId);
expect(all.length).toBe(2);
}
}));
it('should create a revision for notes that get deleted (recyle bin)', asyncTest(async () => {
const n1 = await Note.save({ title: 'hello' });
const noteId = n1.id;
await Note.delete(noteId);
await revisionService().collectRevisions();
const all = await Revision.allByType(BaseModel.TYPE_NOTE, noteId);
expect(all.length).toBe(1);
const rev1 = await revisionService().revisionNote(all, 0);
expect(rev1.title).toBe('hello');
}));
it('should not create a revision for notes that get deleted if there is already a revision', asyncTest(async () => {
const n1 = await Note.save({ title: 'hello' });
await revisionService().collectRevisions();
const noteId = n1.id;
await Note.save({ id: noteId, title: 'hello Paul' });
await revisionService().collectRevisions(); // REV 1
expect((await Revision.allByType(BaseModel.TYPE_NOTE, n1.id)).length).toBe(1);
await Note.delete(noteId);
// At this point there is no need to create a new revision for the deleted note
// because we already have the latest version as REV 1
await revisionService().collectRevisions();
expect((await Revision.allByType(BaseModel.TYPE_NOTE, n1.id)).length).toBe(1);
}));
it('should not create a revision for new note the first time they are saved', asyncTest(async () => {
const n1 = await Note.save({ title: 'hello' });
{
const revisions = await Revision.allByType(BaseModel.TYPE_NOTE, n1.id);
expect(revisions.length).toBe(0);
}
await revisionService().collectRevisions();
{
const revisions = await Revision.allByType(BaseModel.TYPE_NOTE, n1.id);
expect(revisions.length).toBe(0);
}
}));
it('should abort collecting revisions when one of them is encrypted', asyncTest(async () => {
const n1 = await Note.save({ title: 'hello' }); // CHANGE 1
await revisionService().collectRevisions();
await Note.save({ id: n1.id, title: 'hello Ringo' }); // CHANGE 2
await revisionService().collectRevisions();
await Note.save({ id: n1.id, title: 'hello George' }); // CHANGE 3
await revisionService().collectRevisions();
const revisions = await Revision.allByType(BaseModel.TYPE_NOTE, n1.id);
expect(revisions.length).toBe(2);
const encryptedRevId = revisions[0].id;
// Simulate receiving an encrypted revision
await Revision.save({ id: encryptedRevId, encryption_applied: 1 });
await Note.save({ id: n1.id, title: 'hello Paul' }); // CHANGE 4
await revisionService().collectRevisions();
// Although change 4 is a note update, check that it has not been processed
// by the collector, due to one of the revisions being encrypted.
expect(await ItemChange.lastChangeId()).toBe(4);
expect(Setting.value('revisionService.lastProcessedChangeId')).toBe(3);
// Simulate the revision being decrypted by DecryptionService
await Revision.save({ id: encryptedRevId, encryption_applied: 0 });
await revisionService().collectRevisions();
// Now that the revision has been decrypted, all the changes can be processed
expect(await ItemChange.lastChangeId()).toBe(4);
expect(Setting.value('revisionService.lastProcessedChangeId')).toBe(4);
}));
it('should not delete old revisions if one of them is still encrypted (1)', asyncTest(async () => {
// Test case 1: Two revisions and the first one is encrypted.
// Calling deleteOldRevisions() with low TTL, which means all revisions
// should be deleted, but they won't be due to the encrypted one.
const n1_v0 = await Note.save({ title: '' });
const n1_v1 = await Note.save({ id: n1_v0.id, title: 'hello' });
await revisionService().collectRevisions(); // REV 1
await time.sleep(0.1);
const n1_v2 = await Note.save({ id: n1_v1.id, title: 'hello welcome' });
await revisionService().collectRevisions(); // REV 2
await time.sleep(0.1);
expect((await Revision.all()).length).toBe(2);
const revisions = await Revision.all();
await Revision.save({ id: revisions[0].id, encryption_applied: 1 });
await revisionService().deleteOldRevisions(0);
expect((await Revision.all()).length).toBe(2);
await Revision.save({ id: revisions[0].id, encryption_applied: 0 });
await revisionService().deleteOldRevisions(0);
expect((await Revision.all()).length).toBe(0);
}));
it('should not delete old revisions if one of them is still encrypted (2)', asyncTest(async () => {
// Test case 2: Two revisions and the first one is encrypted.
// Calling deleteOldRevisions() with higher TTL, which means the oldest
// revision should be deleted, but it won't be due to the encrypted one.
const n1_v0 = await Note.save({ title: '' });
const n1_v1 = await Note.save({ id: n1_v0.id, title: 'hello' });
await revisionService().collectRevisions(); // REV 1
await time.sleep(0.5);
const n1_v2 = await Note.save({ id: n1_v1.id, title: 'hello welcome' });
await revisionService().collectRevisions(); // REV 2
expect((await Revision.all()).length).toBe(2);
const revisions = await Revision.all();
await Revision.save({ id: revisions[0].id, encryption_applied: 1 });
await revisionService().deleteOldRevisions(500);
expect((await Revision.all()).length).toBe(2);
}));
it('should not delete old revisions if one of them is still encrypted (3)', asyncTest(async () => {
// Test case 2: Two revisions and the second one is encrypted.
// Calling deleteOldRevisions() with higher TTL, which means the oldest
// revision should be deleted, but it won't be due to the encrypted one.
const n1_v0 = await Note.save({ title: '' });
const n1_v1 = await Note.save({ id: n1_v0.id, title: 'hello' });
await revisionService().collectRevisions(); // REV 1
await time.sleep(0.5);
const n1_v2 = await Note.save({ id: n1_v1.id, title: 'hello welcome' });
await revisionService().collectRevisions(); // REV 2
expect((await Revision.all()).length).toBe(2);
const revisions = await Revision.all();
await Revision.save({ id: revisions[1].id, encryption_applied: 1 });
await revisionService().deleteOldRevisions(500);
expect((await Revision.all()).length).toBe(2);
await Revision.save({ id: revisions[1].id, encryption_applied: 0 });
await revisionService().deleteOldRevisions(500);
expect((await Revision.all()).length).toBe(1);
}));
it('should not create a revision if the note has not changed', asyncTest(async () => {
const n1_v0 = await Note.save({ title: '' });
const n1_v1 = await Note.save({ id: n1_v0.id, title: 'hello' });
await revisionService().collectRevisions(); // REV 1
expect((await Revision.all()).length).toBe(1);
const n1_v2 = await Note.save({ id: n1_v0.id, title: 'hello' });
await revisionService().collectRevisions(); // Note has not changed (except its timestamp) so don't create a revision
expect((await Revision.all()).length).toBe(1);
}));
it('should preserve user update time', asyncTest(async () => {
// user_updated_time is kind of tricky and can be changed automatically in various
// places so make sure it is saved correctly with the revision
const n1_v0 = await Note.save({ title: '' });
const n1_v1 = await Note.save({ id: n1_v0.id, title: 'hello' });
await revisionService().collectRevisions(); // REV 1
expect((await Revision.all()).length).toBe(1);
const userUpdatedTime = Date.now() - 1000 * 60 * 60;
const n1_v2 = await Note.save({ id: n1_v0.id, title: 'hello', updated_time: Date.now(), user_updated_time: userUpdatedTime }, { autoTimestamp: false });
await revisionService().collectRevisions(); // Only the user timestamp has changed, but that needs to be saved
const revisions = await Revision.all();
expect(revisions.length).toBe(2);
const revNote = await revisionService().revisionNote(revisions, 1);
expect(revNote.user_updated_time).toBe(userUpdatedTime);
}));
it('should not create a revision if there is already a recent one', asyncTest(async () => {
const n1_v0 = await Note.save({ title: '' });
const n1_v1 = await Note.save({ id: n1_v0.id, title: 'hello' });
await revisionService().collectRevisions(); // REV 1
const n1_v2 = await Note.save({ id: n1_v0.id, title: 'hello 2' });
await revisionService().collectRevisions(); // REV 2
expect((await Revision.all()).length).toBe(2);
Setting.setValue('revisionService.intervalBetweenRevisions', 1000);
const n1_v3 = await Note.save({ id: n1_v0.id, title: 'hello 3' });
await revisionService().collectRevisions(); // No rev because there's already a rev that is less than 1000 ms old
expect((await Revision.all()).length).toBe(2);
}));
});

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;
@@ -204,6 +256,23 @@ describe('services_SearchEngine', function() {
expect((await engine.search('말')).length).toBe(1);
}));
it('should support field restricted queries with Chinese characters', asyncTest(async () => {
let rows;
const n1 = await Note.save({ title: "你好", body: "我是法国人" });
await engine.syncTables();
expect((await engine.search('title:你好*')).length).toBe(1);
expect((await engine.search('body:你好')).length).toBe(0);
expect((await engine.search('title:你好 body:法国人')).length).toBe(1);
expect((await engine.search('title:你好 body:bla')).length).toBe(0);
expect((await engine.search('title:你好 我是')).length).toBe(1);
expect((await engine.search('title:bla 我是')).length).toBe(0);
// For non-alpha char, only the first field is looked at, the following ones are ignored
expect((await engine.search('title:你好 title:hello')).length).toBe(1);
}));
it('should parse normal query strings', asyncTest(async () => {
let rows;
@@ -213,6 +282,7 @@ describe('services_SearchEngine', function() {
['title:abcd efgh', { _: ['efgh'], title: ['abcd'] }],
['title:abcd', { title: ['abcd'] }],
['"abcd efgh"', { _: ['abcd efgh'] }],
['title:abcd title:efgh', { title: ['abcd', 'efgh'] }],
];
for (let i = 0; i < testCases.length; i++) {
@@ -231,33 +301,6 @@ describe('services_SearchEngine', function() {
}
}));
// 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;

View File

@@ -5,9 +5,10 @@ const { fileContentEqual, setupDatabase, setupDatabaseAndSynchronizer, db, synch
const markdownUtils = require('lib/markdownUtils.js');
const Api = require('lib/services/rest/Api');
const Folder = require('lib/models/Folder');
const Resource = require('lib/models/Resource');
const Note = require('lib/models/Note');
const Tag = require('lib/models/Tag');
const Resource = require('lib/models/Resource');
const { shim } = require('lib/shim');
jasmine.DEFAULT_TIMEOUT_INTERVAL = 10000;
@@ -156,6 +157,25 @@ describe('services_rest_Api', function() {
done();
});
it('should preserve user timestamps when creating notes', async (done) => {
let response = null;
const f = await Folder.save({ title: "mon carnet" });
const updatedTime = Date.now() - 1000;
const createdTime = Date.now() - 10000;
response = await api.route('POST', 'notes', null, JSON.stringify({
parent_id: f.id,
user_updated_time: updatedTime,
user_created_time: createdTime,
}));
expect(response.user_updated_time).toBe(updatedTime);
expect(response.user_created_time).toBe(createdTime);
done();
});
it('should create notes with supplied ID', async (done) => {
let response = null;
const f = await Folder.save({ title: "mon carnet" });
@@ -170,6 +190,39 @@ describe('services_rest_Api', function() {
done();
});
it('should create todos', async (done) => {
let response = null;
const f = await Folder.save({ title: "stuff to do" });
response = await api.route('POST', 'notes', null, JSON.stringify({
title: 'testing',
parent_id: f.id,
is_todo: 1
}));
expect(response.is_todo).toBe(1);
response = await api.route('POST', 'notes', null, JSON.stringify({
title: 'testing 2',
parent_id: f.id,
is_todo: 0
}));
expect(response.is_todo).toBe(0);
response = await api.route('POST', 'notes', null, JSON.stringify({
title: 'testing 3',
parent_id: f.id,
}));
expect(response.is_todo).toBeUndefined();
response = await api.route('POST', 'notes', null, JSON.stringify({
title: 'testing 4',
parent_id: f.id,
is_todo: '1'
}));
expect(response.is_todo).toBe(1);
done();
});
it('should create folders with supplied ID', async (done) => {
const response = await api.route('POST', 'folders', null, JSON.stringify({
id: '12345678123456781234567812345678',
@@ -200,6 +253,28 @@ describe('services_rest_Api', function() {
done();
});
it('should delete resources', async (done) => {
let response = null;
const f = await Folder.save({ title: "mon carnet" });
response = await api.route('POST', 'notes', null, JSON.stringify({
title: 'testing image',
parent_id: f.id,
image_data_url: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAICAIAAABLbSncAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAANZJREFUeNoAyAA3/wFwtO3K6gUB/vz2+Prw9fj/+/r+/wBZKAAExOgF4/MC9ff+MRH6Ui4E+/0Bqc/zutj6AgT+/Pz7+vv7++nu82c4DlMqCvLs8goA/gL8/fz09fb59vXa6vzZ6vjT5fbn6voD/fwC8vX4UiT9Zi//APHyAP8ACgUBAPv5APz7BPj2+DIaC2o3E+3o6ywaC5fT6gD6/QD9/QEVf9kD+/dcLQgJA/7v8vqfwOf18wA1IAIEVycAyt//v9XvAPv7APz8LhoIAPz9Ri4OAgwARgx4W/6fVeEAAAAASUVORK5CYII="
}));
const resource = (await Resource.all())[0];
const filePath = Resource.fullPath(resource);
expect(await shim.fsDriver().exists(filePath)).toBe(true);
await api.route('DELETE', 'resources/' + resource.id);
expect(await shim.fsDriver().exists(filePath)).toBe(false);
expect(!(await Resource.load(resource.id))).toBe(true);
done();
});
it('should create notes from HTML', async (done) => {
let response = null;
const f = await Folder.save({ title: "mon carnet" });
@@ -297,4 +372,4 @@ describe('services_rest_Api', function() {
done();
});
});
});

View File

@@ -1,7 +1,7 @@
require('app-module-path').addPath(__dirname);
const { time } = require('lib/time-utils.js');
const { setupDatabase, setupDatabaseAndSynchronizer, db, synchronizer, fileApi, sleep, clearDatabase, switchClient, syncTargetId, encryptionService, loadEncryptionMasterKey, fileContentEqual, decryptionWorker, checkThrowAsync, asyncTest } = require('test-utils.js');
const { setupDatabase, allSyncTargetItemsEncrypted, kvStore, revisionService, setupDatabaseAndSynchronizer, db, synchronizer, fileApi, sleep, clearDatabase, switchClient, syncTargetId, encryptionService, loadEncryptionMasterKey, fileContentEqual, decryptionWorker, checkThrowAsync, asyncTest } = require('test-utils.js');
const { shim } = require('lib/shim.js');
const fs = require('fs-extra');
const Folder = require('lib/models/Folder.js');
@@ -13,6 +13,7 @@ const { Database } = require('lib/database.js');
const Setting = require('lib/models/Setting.js');
const MasterKey = require('lib/models/MasterKey');
const BaseItem = require('lib/models/BaseItem.js');
const Revision = require('lib/models/Revision.js');
const BaseModel = require('lib/BaseModel.js');
const SyncTargetRegistry = require('lib/SyncTargetRegistry.js');
const WelcomeUtils = require('lib/WelcomeUtils');
@@ -23,51 +24,44 @@ process.on('unhandledRejection', (reason, p) => {
jasmine.DEFAULT_TIMEOUT_INTERVAL = 60000 + 30000; // The first test is slow because the database needs to be built
async function allItems() {
async function allNotesFolders() {
let folders = await Folder.all();
let notes = await Note.all();
return folders.concat(notes);
}
async function allSyncTargetItemsEncrypted() {
async function remoteItemsByTypes(types) {
const list = await fileApi().list();
if (list.has_more) throw new Error('Not implemented!!!');
const files = list.items;
//console.info(Setting.value('resourceDir'));
let totalCount = 0;
let encryptedCount = 0;
for (let i = 0; i < files.length; i++) {
const file = files[i];
const remoteContentString = await fileApi().get(file.path);
const remoteContent = await BaseItem.unserialize(remoteContentString);
const ItemClass = BaseItem.itemClass(remoteContent);
if (!ItemClass.encryptionSupported()) continue;
totalCount++;
if (remoteContent.type_ === BaseModel.TYPE_RESOURCE) {
const content = await fileApi().get('.resource/' + remoteContent.id);
totalCount++;
if (content.substr(0, 5) === 'JED01') output = encryptedCount++;
}
if (!!remoteContent.encryption_applied) encryptedCount++;
const output = [];
for (const file of files) {
const remoteContent = await fileApi().get(file.path);
const content = await BaseItem.unserialize(remoteContent);
if (types.indexOf(content.type_) < 0) continue;
output.push(content);
}
if (!totalCount) throw new Error('No encryptable item on sync target');
return totalCount === encryptedCount;
return output;
}
async function localItemsSameAsRemote(locals, expect) {
async function remoteNotesAndFolders() {
return remoteItemsByTypes([BaseModel.TYPE_NOTE, BaseModel.TYPE_FOLDER]);
}
async function remoteNotesFoldersResources() {
return remoteItemsByTypes([BaseModel.TYPE_NOTE, BaseModel.TYPE_FOLDER, BaseModel.TYPE_RESOURCE]);
}
async function remoteResources() {
return remoteItemsByTypes([BaseModel.TYPE_RESOURCE]);
}
async function localNotesFoldersSameAsRemote(locals, expect) {
let error = null;
try {
let files = await fileApi().list();
files = files.items;
expect(locals.length).toBe(files.length);
const nf = await remoteNotesAndFolders();
expect(locals.length).toBe(nf.length);
for (let i = 0; i < locals.length; i++) {
let dbItem = locals[i];
@@ -77,12 +71,6 @@ async function localItemsSameAsRemote(locals, expect) {
expect(!!remote).toBe(true);
if (!remote) continue;
// if (syncTargetId() == SyncTargetRegistry.nameToId('filesystem')) {
// expect(remote.updated_time).toBe(Math.floor(dbItem.updated_time / 1000) * 1000);
// } else {
// expect(remote.updated_time).toBe(dbItem.updated_time);
// }
let remoteContent = await fileApi().get(path);
remoteContent = dbItem.type_ == BaseModel.TYPE_NOTE ? await Note.unserialize(remoteContent) : await Folder.unserialize(remoteContent);
@@ -114,11 +102,11 @@ describe('Synchronizer', function() {
let folder = await Folder.save({ title: "folder1" });
await Note.save({ title: "un", parent_id: folder.id });
let all = await allItems();
let all = await allNotesFolders();
await synchronizer().start();
await localItemsSameAsRemote(all, expect);
await localNotesFoldersSameAsRemote(all, expect);
}));
it('should update remote items', asyncTest(async () => {
@@ -128,10 +116,10 @@ describe('Synchronizer', function() {
await Note.save({ title: "un UPDATE", id: note.id });
let all = await allItems();
let all = await allNotesFolders();
await synchronizer().start();
await localItemsSameAsRemote(all, expect);
await localNotesFoldersSameAsRemote(all, expect);
}));
it('should create local items', asyncTest(async () => {
@@ -143,9 +131,9 @@ describe('Synchronizer', function() {
await synchronizer().start();
let all = await allItems();
let all = await allNotesFolders();
await localItemsSameAsRemote(all, expect);
await localNotesFoldersSameAsRemote(all, expect);
}));
it('should update local items', asyncTest(async () => {
@@ -170,9 +158,9 @@ describe('Synchronizer', function() {
await synchronizer().start();
let all = await allItems();
let all = await allNotesFolders();
await localItemsSameAsRemote(all, expect);
await localNotesFoldersSameAsRemote(all, expect);
}));
it('should resolve note conflicts', asyncTest(async () => {
@@ -264,11 +252,9 @@ describe('Synchronizer', function() {
await synchronizer().start();
let files = await fileApi().list();
files = files.items;
expect(files.length).toBe(1);
expect(files[0].path).toBe(Folder.systemPath(folder1));
const remotes = await remoteNotesAndFolders();
expect(remotes.length).toBe(1);
expect(remotes[0].id).toBe(folder1.id);
let deletedItems = await BaseItem.deletedItems(syncTargetId());
expect(deletedItems.length).toBe(0);
@@ -311,7 +297,7 @@ describe('Synchronizer', function() {
await switchClient(1);
context1 = await synchronizer().start({ context: context1 });
let items = await allItems();
let items = await allNotesFolders();
expect(items.length).toBe(2);
let deletedItems = await BaseItem.deletedItems(syncTargetId());
expect(deletedItems.length).toBe(0);
@@ -334,8 +320,8 @@ describe('Synchronizer', function() {
await synchronizer().start();
let all = await allItems();
await localItemsSameAsRemote(all, expect);
let all = await allNotesFolders();
await localNotesFoldersSameAsRemote(all, expect);
}));
it('should delete local folder', asyncTest(async () => {
@@ -352,8 +338,8 @@ describe('Synchronizer', function() {
await switchClient(1);
await synchronizer().start({ context: context1 });
let items = await allItems();
await localItemsSameAsRemote(items, expect);
let items = await allNotesFolders();
await localNotesFoldersSameAsRemote(items, expect);
}));
it('should resolve conflict if remote folder has been deleted, but note has been added to folder locally', asyncTest(async () => {
@@ -370,7 +356,7 @@ describe('Synchronizer', function() {
let note = await Note.save({ title: "note1", parent_id: folder1.id });
await synchronizer().start();
let items = await allItems();
let items = await allNotesFolders();
expect(items.length).toBe(1);
expect(items[0].title).toBe('note1');
expect(items[0].is_conflict).toBe(1);
@@ -392,11 +378,11 @@ describe('Synchronizer', function() {
await Note.delete(note.id);
await synchronizer().start();
let items = await allItems();
let items = await allNotesFolders();
expect(items.length).toBe(1);
expect(items[0].title).toBe('folder');
await localItemsSameAsRemote(items, expect);
await localNotesFoldersSameAsRemote(items, expect);
}));
it('should cross delete all folders', asyncTest(async () => {
@@ -425,13 +411,13 @@ describe('Synchronizer', function() {
await synchronizer().start();
let items2 = await allItems();
let items2 = await allNotesFolders();
await switchClient(1);
await synchronizer().start();
let items1 = await allItems();
let items1 = await allNotesFolders();
expect(items1.length).toBe(0);
expect(items1.length).toBe(items2.length);
@@ -494,7 +480,7 @@ describe('Synchronizer', function() {
await synchronizer().start();
let items = await allItems();
let items = await allNotesFolders();
expect(items.length).toBe(1);
}));
@@ -712,7 +698,7 @@ describe('Synchronizer', function() {
let disabledItems = await BaseItem.syncDisabledItems(syncTargetId());
expect(disabledItems.length).toBe(0);
await Note.save({ id: noteId, title: "un mod", });
synchronizer().testingHooks_ = ['rejectedByTarget'];
synchronizer().testingHooks_ = ['notesRejectedByTarget'];
await synchronizer().start();
synchronizer().testingHooks_ = [];
await synchronizer().start(); // Another sync to check that this item is now excluded from sync
@@ -865,8 +851,8 @@ describe('Synchronizer', function() {
await shim.attachFileToNote(note1, __dirname + '/../tests/support/photo.jpg');
let resource1 = (await Resource.all())[0];
let resourcePath1 = Resource.fullPath(resource1);
await synchronizer().start();
expect((await fileApi().list()).items.length).toBe(3);
await synchronizer().start();
expect((await remoteNotesFoldersResources()).length).toBe(3);
await switchClient(2);
@@ -879,7 +865,7 @@ describe('Synchronizer', function() {
expect(ls.fetch_status).toBe(Resource.FETCH_STATUS_IDLE);
const fetcher = new ResourceFetcher(() => { return synchronizer().api() });
fetcher.queueDownload(resource1_2.id);
fetcher.queueDownload_(resource1_2.id);
await fetcher.waitForAllFinished();
resource1_2 = await Resource.load(resource1.id);
@@ -908,7 +894,7 @@ describe('Synchronizer', function() {
// Simulate a failed download
get: () => { return new Promise((resolve, reject) => { reject(new Error('did not work')) }); }
} });
fetcher.queueDownload(resource1.id);
fetcher.queueDownload_(resource1.id);
await fetcher.waitForAllFinished();
resource1 = await Resource.load(resource1.id);
@@ -917,6 +903,29 @@ describe('Synchronizer', function() {
expect(ls.fetch_error).toBe('did not work');
}));
it('should set the resource file size if it is missing', asyncTest(async () => {
while (insideBeforeEach) await time.msleep(500);
let folder1 = await Folder.save({ title: "folder1" });
let note1 = await Note.save({ title: 'ma note', parent_id: folder1.id });
await shim.attachFileToNote(note1, __dirname + '/../tests/support/photo.jpg');
await synchronizer().start();
await switchClient(2);
await synchronizer().start();
let r1 = (await Resource.all())[0];
await Resource.setFileSizeOnly(r1.id, -1);
r1 = await Resource.load(r1.id);
expect(r1.size).toBe(-1);
const fetcher = new ResourceFetcher(() => { return synchronizer().api() });
fetcher.queueDownload_(r1.id);
await fetcher.waitForAllFinished();
r1 = await Resource.load(r1.id);
expect(r1.size).toBe(2720);
}));
it('should delete resources', asyncTest(async () => {
while (insideBeforeEach) await time.msleep(500);
@@ -933,11 +942,13 @@ describe('Synchronizer', function() {
let allResources = await Resource.all();
expect(allResources.length).toBe(1);
let all = await fileApi().list();
expect(all.items.length).toBe(3);
expect((await remoteNotesFoldersResources()).length).toBe(3);
await Resource.delete(resource1.id);
await synchronizer().start();
all = await fileApi().list();
expect(all.items.length).toBe(2);
expect((await remoteNotesFoldersResources()).length).toBe(2);
const remoteBlob = await fileApi().stat('.resource/' + resource1.id);
expect(!remoteBlob).toBe(true);
await switchClient(1);
@@ -966,7 +977,7 @@ describe('Synchronizer', function() {
await encryptionService().loadMasterKeysFromSettings();
const fetcher = new ResourceFetcher(() => { return synchronizer().api() });
fetcher.queueDownload(resource1.id);
fetcher.queueDownload_(resource1.id);
await fetcher.waitForAllFinished();
let resource1_2 = (await Resource.all())[0];
@@ -1030,6 +1041,33 @@ describe('Synchronizer', function() {
expect(allEncrypted).toBe(false);
}));
it('should set the resource file size after decryption', asyncTest(async () => {
Setting.setValue('encryption.enabled', true);
const masterKey = await loadEncryptionMasterKey();
let folder1 = await Folder.save({ title: "folder1" });
let note1 = await Note.save({ title: 'ma note', parent_id: folder1.id });
await shim.attachFileToNote(note1, __dirname + '/../tests/support/photo.jpg');
let resource1 = (await Resource.all())[0];
await Resource.setFileSizeOnly(resource1.id, -1);
let resourcePath1 = Resource.fullPath(resource1);
await synchronizer().start();
await switchClient(2);
await synchronizer().start();
Setting.setObjectKey('encryption.passwordCache', masterKey.id, '123456');
await encryptionService().loadMasterKeysFromSettings();
const fetcher = new ResourceFetcher(() => { return synchronizer().api() });
fetcher.queueDownload_(resource1.id);
await fetcher.waitForAllFinished();
await decryptionWorker().start();
const resource1_2 = await Resource.load(resource1.id);
expect(resource1_2.size).toBe(2720);
}));
it('should encrypt remote resources after encryption has been enabled', asyncTest(async () => {
while (insideBeforeEach) await time.msleep(100);
@@ -1068,11 +1106,11 @@ describe('Synchronizer', function() {
it('should create remote items with UTF-8 content', asyncTest(async () => {
let folder = await Folder.save({ title: "Fahrräder" });
await Note.save({ title: "Fahrräder", body: "Fahrräder", parent_id: folder.id });
let all = await allItems();
let all = await allNotesFolders();
await synchronizer().start();
await localItemsSameAsRemote(all, expect);
await localNotesFoldersSameAsRemote(all, expect);
}));
it("should update remote items but not pull remote changes", asyncTest(async () => {
@@ -1090,7 +1128,7 @@ describe('Synchronizer', function() {
await Note.save({ title: "un UPDATE", id: note.id });
await synchronizer().start({ syncSteps: ["update_remote"] });
let all = await allItems();
let all = await allNotesFolders();
expect(all.length).toBe(2);
await switchClient(2);
@@ -1100,11 +1138,8 @@ describe('Synchronizer', function() {
expect(note2.title).toBe("un UPDATE");
}));
it("should sync Welcome notebook and not duplicate it", asyncTest(async () => {
// Create the Welcome items on two separate clients and verify
// that they appear only once (due to having hard-coded IDs), that they are not duplicated.
Setting.setConstant('env', 'prod');
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();
@@ -1114,7 +1149,7 @@ describe('Synchronizer', function() {
await WelcomeUtils.createWelcomeItems();
const beforeFolderCount = (await Folder.all()).length;
const beforeNoteCount = (await Note.all()).length;
expect(beforeFolderCount >= 1).toBe(true);
expect(beforeFolderCount === 1).toBe(true);
expect(beforeNoteCount > 1).toBe(true);
await synchronizer().start();
@@ -1122,8 +1157,8 @@ describe('Synchronizer', function() {
const afterFolderCount = (await Folder.all()).length;
const afterNoteCount = (await Note.all()).length;
expect(afterFolderCount).toBe(beforeFolderCount);
expect(afterNoteCount).toBe(beforeNoteCount);
expect(afterFolderCount).toBe(beforeFolderCount * 2);
expect(afterNoteCount).toBe(beforeNoteCount * 2);
// Changes to the Welcome items should be synced to all clients
@@ -1136,8 +1171,312 @@ describe('Synchronizer', function() {
await synchronizer().start();
const f1_1 = (await Folder.all())[0];
const f1_1 = await Folder.load(f1.id);
expect(f1_1.title).toBe('Welcome MOD');
}));
it("should not save revisions when updating a note via sync", asyncTest(async () => {
// When a note is updated, a revision of the original is created.
// Here, on client 1, the note is updated for the first time, however since it is
// via sync, we don't create a revision - that revision has already been created on client
// 2 and is going to be synced.
const n1 = await Note.save({ title: 'testing' });
await synchronizer().start();
await switchClient(2);
await synchronizer().start();
await Note.save({ id: n1.id, title: 'mod from client 2' });
await revisionService().collectRevisions();
const allRevs1 = await Revision.allByType(BaseModel.TYPE_NOTE, n1.id);
expect(allRevs1.length).toBe(1);
await synchronizer().start();
await switchClient(1);
await synchronizer().start();
const allRevs2 = await Revision.allByType(BaseModel.TYPE_NOTE, n1.id);
expect(allRevs2.length).toBe(1);
expect(allRevs2[0].id).toBe(allRevs1[0].id);
}));
it("should not save revisions when deleting a note via sync", asyncTest(async () => {
const n1 = await Note.save({ title: 'testing' });
await synchronizer().start();
await switchClient(2);
await synchronizer().start();
await Note.delete(n1.id);
await revisionService().collectRevisions(); // REV 1
{
const allRevs = await Revision.allByType(BaseModel.TYPE_NOTE, n1.id);
expect(allRevs.length).toBe(1);
}
await synchronizer().start();
await switchClient(1);
await synchronizer().start(); // The local note gets deleted here, however a new rev is *not* created
{
const allRevs = await Revision.allByType(BaseModel.TYPE_NOTE, n1.id);
expect(allRevs.length).toBe(1);
}
const notes = await Note.all();
expect(notes.length).toBe(0);
}));
it("should not save revisions when an item_change has been generated as a result of a sync", asyncTest(async () => {
// When a note is modified an item_change object is going to be created. This
// is used for example to tell the search engine, when note should be indexed. It is
// also used by the revision service to tell what note should get a new revision.
// When a note is modified via sync, this item_change object is also created. The issue
// is that we don't want to create revisions for these particular item_changes, because
// such revision has already been created on another client (whatever client initially
// modified the note), and that rev is going to be synced.
//
// So in the end we need to make sure that we don't create these unecessary additional revisions.
const n1 = await Note.save({ title: 'testing' });
await synchronizer().start();
await switchClient(2);
await synchronizer().start();
await Note.save({ id: n1.id, title: 'mod from client 2' });
await revisionService().collectRevisions();
await synchronizer().start();
await switchClient(1);
await synchronizer().start();
{
const allRevs = await Revision.allByType(BaseModel.TYPE_NOTE, n1.id);
expect(allRevs.length).toBe(1);
}
await revisionService().collectRevisions();
{
const allRevs = await Revision.allByType(BaseModel.TYPE_NOTE, n1.id);
expect(allRevs.length).toBe(1);
}
}));
it("should handle case when new rev is created on client, then older rev arrives later via sync", asyncTest(async () => {
// - C1 creates note 1
// - C1 modifies note 1 - REV1 created
// - C1 sync
// - C2 sync
// - C2 receives note 1
// - C2 modifies note 1 - REV2 created (but not based on REV1)
// - C2 receives REV1
//
// In that case, we need to make sure that REV1 and REV2 are both valid and can be retrieved.
// Even though REV1 was created before REV2, REV2 is *not* based on REV1. This is not ideal
// due to unecessary data being saved, but a possible edge case and we simply need to check
// all the data is valid.
const n1 = await Note.save({ title: 'note' });
await Note.save({ id: n1.id, title: 'note REV1' });
await revisionService().collectRevisions(); // REV1
expect((await Revision.allByType(BaseModel.TYPE_NOTE, n1.id)).length).toBe(1);
await synchronizer().start();
await switchClient(2);
synchronizer().testingHooks_ = ['skipRevisions'];
await synchronizer().start();
synchronizer().testingHooks_ = [];
await Note.save({ id: n1.id, title: 'note REV2' });
await revisionService().collectRevisions(); // REV2
expect((await Revision.allByType(BaseModel.TYPE_NOTE, n1.id)).length).toBe(1);
await synchronizer().start(); // Sync the rev that had been skipped above with skipRevisions
const revisions = await Revision.allByType(BaseModel.TYPE_NOTE, n1.id);
expect(revisions.length).toBe(2);
expect((await revisionService().revisionNote(revisions, 0)).title).toBe('note REV1');
expect((await revisionService().revisionNote(revisions, 1)).title).toBe('note REV2');
}));
it("should not download resources over the limit", asyncTest(async () => {
const note1 = await Note.save({ title: 'note' });
await shim.attachFileToNote(note1, __dirname + '/../tests/support/photo.jpg');
await synchronizer().start();
await switchClient(2);
const previousMax = synchronizer().maxResourceSize_;
synchronizer().maxResourceSize_ = 1;
await synchronizer().start();
synchronizer().maxResourceSize_ = previousMax;
const syncItems = await BaseItem.allSyncItems(syncTargetId());
expect(syncItems.length).toBe(2);
expect(syncItems[1].item_location).toBe(BaseItem.SYNC_ITEM_LOCATION_REMOTE);
expect(syncItems[1].sync_disabled).toBe(1);
}));
it("should not upload a resource if it has not been fetched yet", asyncTest(async () => {
// In some rare cases, the synchronizer might try to upload a resource even though it
// doesn't have the resource file. It can happen in this situation:
// - C1 create resource
// - C1 sync
// - C2 sync
// - C2 resource metadata is received but ResourceFetcher hasn't downloaded the file yet
// - C2 enables E2EE - all the items are marked for forced sync
// - C2 sync
// The synchronizer will try to upload the resource, even though it doesn't have the file,
// so we need to make sure it doesn't. But also that once it gets the file, the resource
// does get uploaded.
const note1 = await Note.save({ title: 'note' });
await shim.attachFileToNote(note1, __dirname + '/../tests/support/photo.jpg');
const resource = (await Resource.all())[0];
await Resource.setLocalState(resource.id, { fetch_status: Resource.FETCH_STATUS_IDLE });
await synchronizer().start();
expect((await remoteResources()).length).toBe(0);
await Resource.setLocalState(resource.id, { fetch_status: Resource.FETCH_STATUS_DONE });
await synchronizer().start();
expect((await remoteResources()).length).toBe(1);
}));
it('should decrypt the resource metadata, but not try to decrypt the file, if it is not present', asyncTest(async () => {
const note1 = await Note.save({ title: 'note' });
await shim.attachFileToNote(note1, __dirname + '/../tests/support/photo.jpg');
const masterKey = await loadEncryptionMasterKey();
await encryptionService().enableEncryption(masterKey, '123456');
await encryptionService().loadMasterKeysFromSettings();
await synchronizer().start();
expect(await allSyncTargetItemsEncrypted()).toBe(true);
await switchClient(2);
await synchronizer().start();
Setting.setObjectKey('encryption.passwordCache', masterKey.id, '123456');
await encryptionService().loadMasterKeysFromSettings();
await decryptionWorker().start();
let resource = (await Resource.all())[0];
expect(!!resource.encryption_applied).toBe(false);
expect(!!resource.encryption_blob_encrypted).toBe(true);
const resourceFetcher = new ResourceFetcher(() => { return synchronizer().api() });
await resourceFetcher.start();
await resourceFetcher.waitForAllFinished();
const ls = await Resource.localState(resource);
expect(ls.fetch_status).toBe(Resource.FETCH_STATUS_DONE);
await decryptionWorker().start();
resource = (await Resource.all())[0];
expect(!!resource.encryption_blob_encrypted).toBe(false);
}));
it('should not create revisions when item is modified as a result of decryption', asyncTest(async () => {
// Handle this scenario:
// - C1 creates note
// - C1 never changes it
// - E2EE is enabled
// - C1 sync
// - More than one week later (as defined by oldNoteCutOffDate_), C2 sync
// - C2 enters master password and note gets decrypted
//
// Technically at this point the note is modified (from encrypted to non-encrypted) and thus a ItemChange
// object is created. The note is also older than oldNoteCutOffDate. However, this should not lead to the
// creation of a revision because that change was not the result of a user action.
// I guess that's the general rule - changes that come from user actions should result in revisions,
// while automated changes (sync, decryption) should not.
const dateInPast = revisionService().oldNoteCutOffDate_() - 1000;
const note1 = await Note.save({ title: 'ma note', updated_time: dateInPast, created_time: dateInPast }, { autoTimestamp: false });
const masterKey = await loadEncryptionMasterKey();
await encryptionService().enableEncryption(masterKey, '123456');
await encryptionService().loadMasterKeysFromSettings();
await synchronizer().start();
await switchClient(2);
await synchronizer().start();
Setting.setObjectKey('encryption.passwordCache', masterKey.id, '123456');
await encryptionService().loadMasterKeysFromSettings();
await decryptionWorker().start();
await revisionService().collectRevisions();
expect((await Revision.all()).length).toBe(0);
}));
it('should stop trying to decrypt item after a few attempts', asyncTest(async () => {
let hasThrown;
const note = await Note.save({ title: 'ma note' });
const masterKey = await loadEncryptionMasterKey();
await encryptionService().enableEncryption(masterKey, '123456');
await encryptionService().loadMasterKeysFromSettings();
await synchronizer().start();
await switchClient(2);
await synchronizer().start();
// First, simulate a broken note and check that the decryption worker
// gives up decrypting after a number of tries. This is mainly relevant
// for data that crashes the mobile application - we don't want to keep
// decrypting these.
const encryptedNote = await Note.load(note.id);
const goodCipherText = encryptedNote.encryption_cipher_text;
await Note.save({ id: note.id, encryption_cipher_text: 'doesntlookright' });
Setting.setObjectKey('encryption.passwordCache', masterKey.id, '123456');
await encryptionService().loadMasterKeysFromSettings();
hasThrown = await checkThrowAsync(async () => await decryptionWorker().start({ errorHandler: 'throw' }));
expect(hasThrown).toBe(true);
hasThrown = await checkThrowAsync(async () => await decryptionWorker().start({ errorHandler: 'throw' }));
expect(hasThrown).toBe(true);
// Third time, an error is logged and no error is thrown
hasThrown = await checkThrowAsync(async () => await decryptionWorker().start({ errorHandler: 'throw' }));
expect(hasThrown).toBe(false);
const disabledItems = await decryptionWorker().decryptionDisabledItems();
expect(disabledItems.length).toBe(1);
expect(disabledItems[0].id).toBe(note.id);
expect((await kvStore().all()).length).toBe(1);
await kvStore().clear();
// Now check that if it fails once but succeed the second time, the note
// is correctly decrypted and the counters are cleared.
hasThrown = await checkThrowAsync(async () => await decryptionWorker().start({ errorHandler: 'throw' }));
expect(hasThrown).toBe(true);
await Note.save({ id: note.id, encryption_cipher_text: goodCipherText });
hasThrown = await checkThrowAsync(async () => await decryptionWorker().start({ errorHandler: 'throw' }));
expect(hasThrown).toBe(false);
const decryptedNote = await Note.load(note.id);
expect(decryptedNote.title).toBe('ma note');
expect((await kvStore().all()).length).toBe(0);
expect((await decryptionWorker().decryptionDisabledItems()).length).toBe(0);
}));
});

View File

@@ -8,6 +8,7 @@ const ItemChange = require('lib/models/ItemChange.js');
const Resource = require('lib/models/Resource.js');
const Tag = require('lib/models/Tag.js');
const NoteTag = require('lib/models/NoteTag.js');
const Revision = require('lib/models/Revision.js');
const { Logger } = require('lib/logger.js');
const Setting = require('lib/models/Setting.js');
const MasterKey = require('lib/models/MasterKey');
@@ -30,13 +31,19 @@ const SyncTargetNextcloud = require('lib/SyncTargetNextcloud.js');
const SyncTargetDropbox = require('lib/SyncTargetDropbox.js');
const EncryptionService = require('lib/services/EncryptionService.js');
const DecryptionWorker = require('lib/services/DecryptionWorker.js');
const ResourceService = require('lib/services/ResourceService.js');
const RevisionService = require('lib/services/RevisionService.js');
const KvStore = require('lib/services/KvStore.js');
const WebDavApi = require('lib/WebDavApi');
const DropboxApi = require('lib/DropboxApi');
let databases_ = [];
let synchronizers_ = [];
let encryptionServices_ = [];
let revisionServices_ = [];
let decryptionWorkers_ = [];
let resourceServices_ = [];
let kvStores_ = [];
let fileApi_ = null;
let currentClient_ = 1;
@@ -69,6 +76,11 @@ const sleepTime = syncTargetId_ == SyncTargetRegistry.nameToId('filesystem') ? 1
console.info('Testing with sync target: ' + SyncTargetRegistry.idToName(syncTargetId_));
const dbLogger = new Logger();
dbLogger.addTarget('console');
dbLogger.addTarget('file', { path: logDir + '/log.txt' });
dbLogger.setLevel(Logger.LEVEL_WARN);
const logger = new Logger();
logger.addTarget('console');
logger.addTarget('file', { path: logDir + '/log.txt' });
@@ -80,6 +92,7 @@ BaseItem.loadClass('Resource', Resource);
BaseItem.loadClass('Tag', Tag);
BaseItem.loadClass('NoteTag', NoteTag);
BaseItem.loadClass('MasterKey', MasterKey);
BaseItem.loadClass('Revision', Revision);
Setting.setConstant('appId', 'net.cozic.joplin-cli');
Setting.setConstant('appType', 'cli');
@@ -102,6 +115,8 @@ function sleep(n) {
}
async function switchClient(id) {
if (!databases_[id]) throw new Error('Call setupDatabaseAndSynchronizer(' + id + ') first!!');
await time.msleep(sleepTime); // Always leave a little time so that updated_time properties don't overlap
await Setting.saveAll();
@@ -111,9 +126,11 @@ async function switchClient(id) {
Note.db_ = databases_[id];
BaseItem.db_ = databases_[id];
Setting.db_ = databases_[id];
Resource.db_ = databases_[id];
BaseItem.encryptionService_ = encryptionServices_[id];
Resource.encryptionService_ = encryptionServices_[id];
BaseItem.revisionService_ = revisionServices_[id];
Setting.setConstant('resourceDir', resourceDir(id));
@@ -125,21 +142,29 @@ async function clearDatabase(id = null) {
await ItemChange.waitForAllSaved();
let queries = [
'DELETE FROM notes',
'DELETE FROM folders',
'DELETE FROM resources',
'DELETE FROM tags',
'DELETE FROM note_tags',
'DELETE FROM master_keys',
'DELETE FROM item_changes',
'DELETE FROM note_resources',
'DELETE FROM settings',
'DELETE FROM deleted_items',
'DELETE FROM sync_items',
'DELETE FROM notes_normalized',
const tableNames = [
'notes',
'folders',
'resources',
'tags',
'note_tags',
'master_keys',
'item_changes',
'note_resources',
'settings',
'deleted_items',
'sync_items',
'notes_normalized',
'revisions',
'key_values',
];
const queries = [];
for (const n of tableNames) {
queries.push('DELETE FROM ' + n);
queries.push('DELETE FROM sqlite_sequence WHERE name="' + n + '"'); // Reset autoincremented IDs
}
await databases_[id].transactionExecBatch(queries);
}
@@ -164,6 +189,7 @@ async function setupDatabase(id = null) {
};
databases_[id] = new JoplinDatabase(new DatabaseDriverNode());
databases_[id].setLogger(dbLogger);
await databases_[id].open({ name: filePath });
BaseModel.db_ = databases_[id];
@@ -196,8 +222,11 @@ async function setupDatabaseAndSynchronizer(id = null) {
}
encryptionServices_[id] = new EncryptionService();
revisionServices_[id] = new RevisionService();
decryptionWorkers_[id] = new DecryptionWorker();
decryptionWorkers_[id].setEncryptionService(encryptionServices_[id]);
resourceServices_[id] = new ResourceService();
kvStores_[id] = new KvStore();
await fileApi().clearRoot();
}
@@ -217,9 +246,28 @@ function encryptionService(id = null) {
return encryptionServices_[id];
}
function kvStore(id = null) {
if (id === null) id = currentClient_;
const o = kvStores_[id];
o.setDb(db(id));
return o;
}
function revisionService(id = null) {
if (id === null) id = currentClient_;
return revisionServices_[id];
}
function decryptionWorker(id = null) {
if (id === null) id = currentClient_;
return decryptionWorkers_[id];
const o = decryptionWorkers_[id];
o.setKvStore(kvStore(id));
return o;
}
function resourceService(id = null) {
if (id === null) id = currentClient_;
return resourceServices_[id];
}
async function loadEncryptionMasterKey(id = null, useExisting = false) {
@@ -314,4 +362,34 @@ function asyncTest(callback) {
}
}
module.exports = { setupDatabase, setupDatabaseAndSynchronizer, db, synchronizer, fileApi, sleep, clearDatabase, switchClient, syncTargetId, objectsEqual, checkThrowAsync, encryptionService, loadEncryptionMasterKey, fileContentEqual, decryptionWorker, asyncTest };
async function allSyncTargetItemsEncrypted() {
const list = await fileApi().list();
const files = list.items;
let totalCount = 0;
let encryptedCount = 0;
for (let i = 0; i < files.length; i++) {
const file = files[i];
const remoteContentString = await fileApi().get(file.path);
const remoteContent = await BaseItem.unserialize(remoteContentString);
const ItemClass = BaseItem.itemClass(remoteContent);
if (!ItemClass.encryptionSupported()) continue;
totalCount++;
if (remoteContent.type_ === BaseModel.TYPE_RESOURCE) {
const content = await fileApi().get('.resource/' + remoteContent.id);
totalCount++;
if (content.substr(0, 5) === 'JED01') output = encryptedCount++;
}
if (!!remoteContent.encryption_applied) encryptedCount++;
}
if (!totalCount) throw new Error('No encryptable item on sync target');
return totalCount === encryptedCount;
}
module.exports = { kvStore, resourceService, allSyncTargetItemsEncrypted, setupDatabase, revisionService, setupDatabaseAndSynchronizer, db, synchronizer, fileApi, sleep, clearDatabase, switchClient, syncTargetId, objectsEqual, checkThrowAsync, encryptionService, loadEncryptionMasterKey, fileContentEqual, decryptionWorker, asyncTest };

View File

@@ -30,6 +30,7 @@ describe('urlUtils', function() {
expect(urlUtils.prependBaseUrl('mailto:emailme@example.com', 'http://example.com')).toBe('mailto:emailme@example.com');
expect(urlUtils.prependBaseUrl('javascript:var%20testing=true', 'http://example.com')).toBe('javascript:var%20testing=true');
expect(urlUtils.prependBaseUrl('http://alreadyabsolute.com', 'http://example.com')).toBe('http://alreadyabsolute.com');
expect(urlUtils.prependBaseUrl('#local-anchor', 'http://example.com')).toBe('#local-anchor');
done();
});

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