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

Compare commits

...

299 Commits

Author SHA1 Message Date
Laurent Cozic
fcfee36c8c Android release v1.0.291 2019-07-28 18:32:33 +02:00
Laurent Cozic
1d3d3b99bb Tools: Allow creating multiple Android releases 2019-07-28 18:31:31 +02:00
Laurent Cozic
2f80bf9647 Android release v1.0.290 2019-07-28 18:29:07 +02:00
Laurent Cozic
675a4c795f Android release v1.0.289 2019-07-28 18:22:33 +02:00
Laurent Cozic
ed3361df57 Merge branch 'master' of github.com:laurent22/joplin 2019-07-28 18:22:33 +02:00
Laurent Cozic
87396572e4 Tools: Allow creating multiple Android releases 2019-07-28 18:19:41 +02:00
Woosuk Park
143b610291 Korean Language Support (#1769)
* Korean Language Support

Korean Language 100% Translated, but something is roughted. soon fix it ;)

* some improved

Some Improved

* Improve v2

some polished

* Ok, now Completed

For Now, Completed Polish(Change Respect of Users, and several fixing & polishing) + 100% Translated. Ready to Shipping
2019-07-26 23:18:47 -04:00
Laurent Cozic
c952c4591f Android release v1.0.284 2019-07-26 23:11:08 +02:00
Laurent Cozic
e418701e68 Mobile: Fixes #1764 (maybe): Upgrading React-Native to 0.59.10 to try to fix crash in certain Samsung phone due to 64-bit version
See also:

https://github.com/facebook/react-native/issues/24261#issuecomment-514332549
2019-07-26 23:08:11 +02:00
Laurent Cozic
6fc0ee3062 Android release v1.0.283 2019-07-26 21:26:24 +02:00
Laurent Cozic
7b42d7d2c8 Mobile: Fixed freeze when last notebook was the conflict one and there are no longer any conflicted notes 2019-07-26 21:23:18 +02:00
Mr. Traduttore
eb083ae925 [Mobile/Desktop] Changed cancel, directory and delete translations (ITALIAN) (#1759)
* Changed cancel and delete translation (ITALIAN)

Changed cancel from "cancellare" to "annullare" (whic is used more to express the cancelling operations) and delete from "cancellare" to "eliminare". I think that doing this will help people understanding what is the main task of these option since they use the same verbs in the current translation.

* Update it_IT.po
2019-07-22 14:15:11 +01:00
Helmut K. C. Tessarek
905e65365f Update en_US.po 2019-07-22 06:28:04 -04:00
Helmut K. C. Tessarek
a0c04c0e6a Update de_DE.po 2019-07-22 06:27:55 -04:00
Laurent Cozic
635baa5b6f Updated translations 2019-07-22 00:02:25 +00:00
Laurent Cozic
7591b614c5 typos 2019-07-21 22:27:13 +00:00
Helmut K. C. Tessarek
5b5ec682c0 Update en_US.po 2019-07-21 22:18:35 -04:00
Helmut K. C. Tessarek
b0a80ddf65 Update de_DE.po 2019-07-21 22:17:25 -04:00
Laurent Cozic
893531f8c7 Desktop: Make depthColor theme property optional 2019-07-21 17:30:36 +01:00
Shane Kilkelly
3d498e7a75 Desktop: Add solarized themes to desktop client (#1733) 2019-07-21 17:27:42 +01:00
Laurent Cozic
45ad201132 Mobile: Fixed colour of placeholder text in dark theme 2019-07-21 17:16:15 +01:00
Laurent Cozic
6e64b950ca Merge branch 'master' of github.com:laurent22/joplin 2019-07-21 17:05:09 +01:00
Laurent Cozic
6d4e67769c Desktop: Fixed Back button icon on Config screen 2019-07-21 16:49:53 +01:00
Laurent Cozic
3aa0394062 Mobile: Fixes #1684: Trying to fix problem when attaching file that contains spaces in name 2019-07-21 14:39:52 +01:00
Laurent Cozic
b65767a43c Mobile: Fixes #1746: Populate note side menu when swiping right 2019-07-21 14:11:30 +01:00
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
294 changed files with 26124 additions and 7775 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

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

View File

@@ -59,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,28 +1,63 @@
# 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. 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 spend too much 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 are always welcome.
Finally, when submitting a pull request, don't forget to [test your code](#unit-tests).
# 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

@@ -378,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) {

View File

@@ -517,6 +517,10 @@ msgstr "أكتب `joplin help` لمعلومات الاستخدام."
msgid "Fatal error:"
msgstr "خطأ فادح:"
#, javascript-format
msgid "All potential ports are in use - please report the issue at %s"
msgstr ""
msgid ""
"The application has been authorised - you may now close this browser tab."
msgstr "تم التصريح للتطبيق - يمكنك الآن إغلاق تبويب المستعرض هذا."
@@ -611,6 +615,27 @@ 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)"
@@ -627,6 +652,9 @@ msgstr ""
msgid "Check for updates..."
msgstr "البحث جارٍ عن تحديثات..."
msgid "Templates"
msgstr ""
msgid "Import"
msgstr "استيراد"
@@ -670,12 +698,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 "البحث في كل الملاحظات"
@@ -706,6 +740,9 @@ msgstr "موقع الويب و التوثيق"
msgid "Make a donation"
msgstr "تبرَّع"
msgid "Toggle development tools"
msgstr ""
#, javascript-format
msgid "Open %s"
msgstr "افتح %s"
@@ -933,9 +970,6 @@ msgstr "عنوان دفتر الملاحظات:"
msgid "Add or remove tags:"
msgstr "إضافة أو حذف وسوم:"
msgid "Separate each tag by a comma."
msgstr ""
msgid "Rename notebook:"
msgstr "إعادة تسمية دفتر الملاحظات:"
@@ -945,6 +979,9 @@ msgstr "إعادة تسمية الوسم:"
msgid "Set alarm:"
msgstr "ضبط منبّه:"
msgid "Template file:"
msgstr ""
msgid "Layout"
msgstr "تخطيط"
@@ -957,8 +994,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 "ضبط كلمة المرور"
@@ -981,6 +1019,9 @@ msgstr "عنوان URL"
msgid "Note History"
msgstr "قائمة ملاحظات"
msgid "Markup"
msgstr ""
msgid "Previous versions of this note"
msgstr ""
@@ -1052,9 +1093,6 @@ msgstr "إدراج ارتباط تشعبي"
msgid "Attach file"
msgstr "إرفاق ملف"
msgid "Tags"
msgstr "وسوم"
msgid "Set alarm"
msgstr "ضبط منبّه"
@@ -1065,9 +1103,6 @@ msgstr "في: %s"
msgid "Hyperlink"
msgstr "ارتباط تشعبي"
msgid "Code"
msgstr "رمز"
msgid "Numbered List"
msgstr "قائمة مرقّمة"
@@ -1146,20 +1181,12 @@ msgstr "حذف"
msgid "Rename"
msgstr "إعادة تسمية"
msgid "Notebooks"
msgstr "دفاتر ملاحظات"
#, javascript-format
msgid "Decrypting items: %d/%d"
msgstr "فك تشفير العناصر: %d/%d"
#, javascript-format
msgid "Fetching resources: %d"
msgstr "جلب الموارد: %d"
msgid "Please select where the sync status should be exported to"
msgstr "فضلاً اختر أين سيتم تصدير حالة المزامنة"
msgid "Retry"
msgstr ""
msgid "Add or remove tags"
msgstr "إضافة أو حذف وسوم"
@@ -1359,6 +1386,58 @@ msgstr ""
"تنبيه: إذا غيرت هذا المكان ، تأكد من نسخ كافة المحتويات لديك إليه قبل البدء "
"بالمزامنة ، وإلا فسيتم حذف كل الملفات! أنظر الأسئلة المتكررة لتفاصيل أكثر: %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 "عنوان URL لـ Nextcloud WebDAV"
msgid "Nextcloud username"
msgstr "اسم مستخدم Nextcloud"
msgid "Nextcloud password"
msgstr "كلمة مرور Nextcloud"
msgid "WebDAV URL"
msgstr "عنوان URL لـ 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 "اللغة"
@@ -1377,6 +1456,12 @@ msgstr "فاتحة"
msgid "Dark"
msgstr "غامقة"
msgid "Solarized Light"
msgstr ""
msgid "Solarized Dark"
msgstr ""
msgid "Uncompleted to-dos on top"
msgstr "قوائم المهام غير المكتملة في الأعلى"
@@ -1513,40 +1598,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 "Nextcloud WebDAV URL"
msgstr "عنوان URL لـ Nextcloud WebDAV"
msgid "Nextcloud username"
msgstr "اسم مستخدم Nextcloud"
msgid "Nextcloud password"
msgstr "كلمة مرور Nextcloud"
msgid "WebDAV URL"
msgstr "عنوان URL لـ WebDAV"
msgid "WebDAV username"
msgstr "اسم مستخدم WebDAV"
msgid "WebDAV password"
msgstr "كلمة مرور WebDAV"
msgid "Custom TLS certificates"
msgstr "شهادات TLS خاصة"
@@ -1653,14 +1704,6 @@ msgstr ""
msgid "Items that cannot be synchronised"
msgstr "العناصر التي لا يمكن مزامنتها"
#, 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"
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 "
@@ -1670,6 +1713,24 @@ msgstr ""
"تجد هذه العناصر ، عليك إما البحث عن العنوان أو المعرِّف (وهو معروض أعلاه بين "
"قوسين)."
#, 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 "حالة المزامنة (العناصر المنجزة / إجمالي العناصر)"
@@ -1715,18 +1776,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 "النقل إلى دفتر ملاحظات..."
@@ -1749,8 +1798,35 @@ 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 "الضبط"
#, javascript-format
msgid "Decrypting items: %d/%d"
msgstr "فك تشفير العناصر: %d/%d"
#, javascript-format
msgid "Fetching resources: %d/%d"
msgstr "جلب الموارد: %d/%d"
#, fuzzy
msgid "All notes"
msgstr "ملاحظة"
msgid "Notebooks"
msgstr "دفاتر ملاحظات"
msgid "Checking... Please wait."
msgstr "التحقق جارٍ... فضلاً انتظر."
@@ -1790,6 +1866,54 @@ msgstr "وسوم جديدة:"
msgid "Type new tags or select from list"
msgstr "أكتب وسوماً جديدة أو اخترها من القائمة"
msgid "Warning"
msgstr ""
msgid ""
"In order to use file system synchronisation 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 a long time 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"
@@ -1850,6 +1974,10 @@ msgstr "لم يتم حفظ دفتر الملاحظات: %s"
msgid "Edit notebook"
msgstr "تحرير دفتر الملاحظات"
#, fuzzy
msgid "Enter notebook title"
msgstr "عنوان دفتر الملاحظات:"
msgid "Show all"
msgstr "إظهار الكل"
@@ -1873,10 +2001,32 @@ msgstr "لا يوجد عنصر بالمعرّف %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 "التقاط صورة"
@@ -1895,23 +2045,19 @@ msgstr "تحويل إلى ملاحظة"
msgid "Convert to todo"
msgstr "تحويل إلى قائمة مهام"
msgid "Hide metadata"
msgstr "إخفاء البيانات الوصفية"
#, fuzzy
msgid "Properties"
msgstr "خصائص الملاحظة"
msgid "Show metadata"
msgstr "إظهار البيانات الوصفية"
msgid "View on map"
msgstr "عرض على الخريطة"
msgid "Go to source URL"
msgstr "الذهاب إلى عنوان URL المصدر"
msgid "Add body"
msgstr ""
msgid "Edit"
msgstr "تحرير"
msgid "Delete notebook"
msgstr "حذف دفتر الملاحظات"
#, fuzzy
msgid "Add title"
msgstr "العنوان"
msgid "Login with OneDrive"
msgstr "تسجيل الدخول عبر OneDrive"
@@ -1919,18 +2065,38 @@ 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 "Some items cannot be decrypted."
#~ msgstr "لا يمكن فك تشفير بعض العناصر."
#~ msgid "%s (%s): %s"
#~ msgstr "%s (%s): %s"

2145
CliClient/locales/bg_BG.po Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -534,6 +534,10 @@ msgstr "Escriviu «joplin help» per a obtenir informació d'ús."
msgid "Fatal error:"
msgstr "Error fatal:"
#, javascript-format
msgid "All potential ports are in use - please report the issue at %s"
msgstr ""
msgid ""
"The application has been authorised - you may now close this browser tab."
msgstr ""
@@ -635,6 +639,26 @@ 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)"
@@ -652,6 +676,9 @@ msgstr ""
msgid "Check for updates..."
msgstr "Comprova les actualitzacions..."
msgid "Templates"
msgstr ""
msgid "Import"
msgstr "Importació"
@@ -697,12 +724,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"
@@ -738,6 +771,9 @@ msgstr "Lloc web i documentació"
msgid "Make a donation"
msgstr "Donatius"
msgid "Toggle development tools"
msgstr ""
#, javascript-format
msgid "Open %s"
msgstr "Obre %s"
@@ -971,9 +1007,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:"
@@ -983,6 +1016,9 @@ msgstr "Canvia el nom de l'etiqueta:"
msgid "Set alarm:"
msgstr "Estableix una alarma:"
msgid "Template file:"
msgstr ""
msgid "Layout"
msgstr "Disposició"
@@ -995,8 +1031,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"
@@ -1020,6 +1057,9 @@ msgstr ""
msgid "Note History"
msgstr "Blocs de notes"
msgid "Markup"
msgstr ""
msgid "Previous versions of this note"
msgstr ""
@@ -1092,9 +1132,6 @@ msgstr ""
msgid "Attach file"
msgstr "Adjunta un fitxer"
msgid "Tags"
msgstr "Etiquetes"
msgid "Set alarm"
msgstr "Estableix una alarma"
@@ -1105,9 +1142,6 @@ msgstr "A: %s"
msgid "Hyperlink"
msgstr ""
msgid "Code"
msgstr ""
msgid "Numbered List"
msgstr ""
@@ -1186,20 +1220,12 @@ msgstr "Suprimeix"
msgid "Rename"
msgstr "Canvia el nom"
msgid "Notebooks"
msgstr "Blocs de notes"
#, fuzzy, javascript-format
msgid "Decrypting items: %d/%d"
msgstr "Elements obtinguts: %d/%d."
#, fuzzy, javascript-format
msgid "Fetching resources: %d"
msgstr "Recursos: %d."
msgid "Please select where the sync status should be exported to"
msgstr "Seleccioneu on s'hauria d'exportar l'estat de la sincronització"
msgid "Retry"
msgstr ""
msgid "Add or remove tags"
msgstr "Afegeix o suprimeix etiquetes"
@@ -1400,6 +1426,58 @@ msgid ""
"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"
@@ -1418,6 +1496,12 @@ msgstr "Clar"
msgid "Dark"
msgstr "Fosc"
msgid "Solarized Light"
msgstr ""
msgid "Solarized Dark"
msgstr ""
msgid "Uncompleted to-dos on top"
msgstr "Les tasques pendents sense finalitzar a la part superior"
@@ -1556,40 +1640,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 "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 "Custom TLS certificates"
msgstr ""
@@ -1697,14 +1747,6 @@ msgstr ""
msgid "Items that cannot be synchronised"
msgstr "Elements que no s'han pogut sincronitzar"
#, 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"
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 "
@@ -1714,6 +1756,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)"
@@ -1759,18 +1819,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..."
@@ -1794,8 +1842,35 @@ 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, javascript-format
msgid "Decrypting items: %d/%d"
msgstr "Elements obtinguts: %d/%d"
#, fuzzy, javascript-format
msgid "Fetching resources: %d/%d"
msgstr "Recursos: %d/%d"
#, fuzzy
msgid "All notes"
msgstr "nota"
msgid "Notebooks"
msgstr "Blocs de notes"
#, fuzzy
msgid "Checking... Please wait."
@@ -1833,6 +1908,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 synchronisation 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 a long time 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"
@@ -1897,6 +2020,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"
@@ -1921,10 +2048,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"
@@ -1944,23 +2093,18 @@ msgstr "Converteix a nota"
msgid "Convert to todo"
msgstr "Converteix a llistat de tasques pendents"
msgid "Hide metadata"
msgstr "Amaga les metadades"
msgid "Properties"
msgstr ""
msgid "Show metadata"
msgstr "Mostra les metadades"
msgid "View on map"
msgstr "Mostra-ho al mapa"
msgid "Go to source URL"
msgid "Add body"
msgstr ""
msgid "Edit"
msgstr "Edita"
msgid "Delete notebook"
msgstr "Suprimeix el bloc de notes"
#, fuzzy
msgid "Add title"
msgstr "títol"
msgid "Login with OneDrive"
msgstr "Inicia sessió amb OneDrive"
@@ -1968,19 +2112,38 @@ 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"

View File

@@ -523,6 +523,10 @@ msgstr "Zadejte `joplin help` pro nápovědu."
msgid "Fatal error:"
msgstr "Fatální chyba:"
#, javascript-format
msgid "All potential ports are in use - please report the issue at %s"
msgstr ""
msgid ""
"The application has been authorised - you may now close this browser tab."
msgstr "Aplikace byla autorizována, tento tab můžete zavřít."
@@ -618,6 +622,27 @@ msgstr "Nastavení šifrování"
msgid "Web clipper options"
msgstr "Web clipper volby"
msgid "Create note from template"
msgstr ""
msgid "Create to-do from template"
msgstr ""
#, fuzzy
msgid "Insert template"
msgstr "Vložit datum a čas"
#, fuzzy
msgid "Open template directory"
msgstr "Složka pro export"
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)"
@@ -635,6 +660,9 @@ msgstr "Nastavení..."
msgid "Check for updates..."
msgstr "Zkontrolovat updaty..."
msgid "Templates"
msgstr ""
msgid "Import"
msgstr "Import"
@@ -679,12 +707,18 @@ msgstr "Kurzíva"
msgid "Link"
msgstr "Odkaz"
msgid "Code"
msgstr "Kód"
msgid "Insert Date Time"
msgstr "Vložit datum a čas"
msgid "Edit in external editor"
msgstr "Upravit externím editorem"
msgid "Tags"
msgstr "Tagy"
msgid "Search in all the notes"
msgstr "Hledat ve všech poznámkách"
@@ -719,6 +753,9 @@ msgstr "Web a dokumentace"
msgid "Make a donation"
msgstr "Přispět"
msgid "Toggle development tools"
msgstr ""
#, javascript-format
msgid "Open %s"
msgstr "Otevřít %s"
@@ -948,9 +985,6 @@ msgstr "Název zápisníku:"
msgid "Add or remove tags:"
msgstr "Přidat či odebrat tagy:"
msgid "Separate each tag by a comma."
msgstr "Tagy oddělujte čárkami."
msgid "Rename notebook:"
msgstr "Přejmenovat zápisník:"
@@ -960,6 +994,9 @@ msgstr "Přejmenovat tag:"
msgid "Set alarm:"
msgstr "Nastavit alarm:"
msgid "Template file:"
msgstr ""
msgid "Layout"
msgstr "Layout"
@@ -972,8 +1009,9 @@ msgstr "Některé položky nelze synchronizovat."
msgid "View them now"
msgstr "Zobrazit"
msgid "Some items cannot be decrypted."
msgstr "Některé položky nelze rozšifrovat."
#, fuzzy
msgid "One or more master keys need a password."
msgstr "Zadejte master heslo:"
msgid "Set the password"
msgstr "Nastavit heslo"
@@ -995,6 +1033,9 @@ msgstr "URL"
msgid "Note History"
msgstr "Seznam položek"
msgid "Markup"
msgstr ""
msgid "Previous versions of this note"
msgstr ""
@@ -1066,9 +1107,6 @@ msgstr "Vložit odkaz"
msgid "Attach file"
msgstr "Přiložit soubor"
msgid "Tags"
msgstr "Tagy"
msgid "Set alarm"
msgstr "Nastavit alarm"
@@ -1079,9 +1117,6 @@ msgstr "%s: %s"
msgid "Hyperlink"
msgstr "Odkaz"
msgid "Code"
msgstr "Kód"
msgid "Numbered List"
msgstr "Číslovanáý seznam"
@@ -1159,20 +1194,12 @@ msgstr "Smazat"
msgid "Rename"
msgstr "Přejmenovat"
msgid "Notebooks"
msgstr "Zápisníky"
#, javascript-format
msgid "Decrypting items: %d/%d"
msgstr "Rozšifrované položky: %d/%d"
#, javascript-format
msgid "Fetching resources: %d"
msgstr "Stahování zdrojů: %d"
msgid "Please select where the sync status should be exported to"
msgstr "Prosím vyberte, kam má být stav synchronizace exportován"
msgid "Retry"
msgstr ""
msgid "Add or remove tags"
msgstr "Přidat či odebrat tagy"
@@ -1378,6 +1405,58 @@ msgstr ""
"jste do něj zkopírovali veškerý obsah, jinak budou všechny soubory "
"odstraněny! Další podrobnosti naleznete v FAQ: % s"
msgid "Synchronisation target"
msgstr "Cíl synchronizace"
msgid ""
"The target to synchonise to. Each sync target may have additional parameters "
"which are named as `sync.NUM.NAME` (all documented below)."
msgstr ""
"Cíl synchronizace. Každý cíl může mít další parametry ve formátu `sync.NUM."
"NAME` (dokumentace níže)."
msgid "Directory to synchronise with (absolute path)"
msgstr "Složka k synchronizaci (absolutní cesta)"
msgid "Nextcloud WebDAV URL"
msgstr "Nextcloud WebDAV URL"
msgid "Nextcloud username"
msgstr "Nextcloud uživatelské jméno"
msgid "Nextcloud password"
msgstr "Nextcloud heslo"
msgid "WebDAV URL"
msgstr "WebDAV URL"
msgid "WebDAV username"
msgstr "WebDAV uživatelské jméno"
msgid "WebDAV password"
msgstr "WebDAV heslo"
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 "Jazyk"
@@ -1396,6 +1475,12 @@ msgstr "Světlý"
msgid "Dark"
msgstr "Tmavý"
msgid "Solarized Light"
msgstr ""
msgid "Solarized Dark"
msgstr ""
msgid "Uncompleted to-dos on top"
msgstr "Nedokončené to-do listy nahoře"
@@ -1531,40 +1616,6 @@ msgstr ""
"Editor ve kterém budou otvírány poznámky. Pokud není specifikováno, aplikace "
"se pokusí o autodetekci defaultního editoru."
msgid "Show advanced options"
msgstr "Ukázat pokročilé volby"
msgid "Synchronisation target"
msgstr "Cíl synchronizace"
msgid ""
"The target to synchonise to. Each sync target may have additional parameters "
"which are named as `sync.NUM.NAME` (all documented below)."
msgstr ""
"Cíl synchronizace. Každý cíl může mít další parametry ve formátu `sync.NUM."
"NAME` (dokumentace níže)."
msgid "Directory to synchronise with (absolute path)"
msgstr "Složka k synchronizaci (absolutní cesta)"
msgid "Nextcloud WebDAV URL"
msgstr "Nextcloud WebDAV URL"
msgid "Nextcloud username"
msgstr "Nextcloud uživatelské jméno"
msgid "Nextcloud password"
msgstr "Nextcloud heslo"
msgid "WebDAV URL"
msgstr "WebDAV URL"
msgid "WebDAV username"
msgstr "WebDAV uživatelské jméno"
msgid "WebDAV password"
msgstr "WebDAV heslo"
msgid "Custom TLS certificates"
msgstr "Vlastní TLS certifikát"
@@ -1671,14 +1722,6 @@ msgstr ""
msgid "Items that cannot be synchronised"
msgstr "Položky jež nelze synchronizovat"
#, fuzzy, javascript-format
msgid "%s (%s) could not be uploaded: %s"
msgstr "Soubor se nepodařilo otevřít: %s"
#, fuzzy, javascript-format
msgid "Item \"%s\" could not be downloaded: %s"
msgstr "Soubor se nepodařilo otevřít: %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 "
@@ -1688,6 +1731,24 @@ msgstr ""
"synchronizace. Pro přístup k těmto souborům hledejte jejich název nebo ID (v "
"hranatých závorkách)."
#, fuzzy, javascript-format
msgid "%s (%s) could not be uploaded: %s"
msgstr "Soubor se nepodařilo otevřít: %s"
#, fuzzy, javascript-format
msgid "Item \"%s\" could not be downloaded: %s"
msgstr "Soubor se nepodařilo otevřít: %s"
#, fuzzy
msgid "Items that cannot be decrypted"
msgstr "Položky jež nelze synchronizovat"
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 "Stav synchronizace (synchronizováno / celkem)"
@@ -1733,18 +1794,6 @@ msgstr "Nemáte žádné poznámky. Vytvořte jednu kliknutím na tlačítko (+)
msgid "Delete these notes?"
msgstr "Smazat tyto poznámky?"
msgid "Log"
msgstr "Log"
msgid "Export Debug Report"
msgstr "Exportovat Debug Report"
msgid "Encryption Config"
msgstr "Nastavení šifrování"
msgid "Configuration"
msgstr "Nastavení"
msgid "Move to notebook..."
msgstr "Přesunout do zápisníku..."
@@ -1767,8 +1816,35 @@ msgstr "Vybrat datum"
msgid "Confirm"
msgstr "Potvrdit"
msgid "Cancel synchronisation"
msgstr "Zrušit synchronizaci"
#, fuzzy, javascript-format
msgid "Notebook: %s"
msgstr "Zápisníky"
#, fuzzy
msgid "Encrypted notebooks cannot be renamed"
msgstr "Nelze editovat zašifrovanou položku"
#, fuzzy
msgid "New Notebook"
msgstr "Nový zápisník"
msgid "Configuration"
msgstr "Nastavení"
#, javascript-format
msgid "Decrypting items: %d/%d"
msgstr "Rozšifrované položky: %d/%d"
#, javascript-format
msgid "Fetching resources: %d/%d"
msgstr "Stahování zdrojů: %d/%d"
#, fuzzy
msgid "All notes"
msgstr "poznámka"
msgid "Notebooks"
msgstr "Zápisníky"
#, fuzzy
msgid "Checking... Please wait."
@@ -1811,6 +1887,54 @@ msgstr "Nové tagy:"
msgid "Type new tags or select from list"
msgstr "Zadejte nové tagy, nebo vyberte existující ze seznamu"
msgid "Warning"
msgstr ""
msgid ""
"In order to use file system synchronisation your permission to write to "
"external storage is required."
msgstr ""
#, fuzzy
msgid "Information"
msgstr "Nastavení"
msgid "Encryption Config"
msgstr "Nastavení šifrování"
#, fuzzy
msgid "Tools"
msgstr "Nástroje"
#, fuzzy
msgid "Sync Status"
msgstr "Status"
msgid "Log"
msgstr "Log"
#, fuzzy
msgid "Creating report..."
msgstr "Vytvářím %s..."
msgid "Export Debug Report"
msgstr "Exportovat Debug Report"
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 a long time depending on the number of notes."
msgstr ""
#, fuzzy
msgid "More information"
msgstr "Nastavení"
msgid ""
"To work correctly, the app needs the following permissions. Please enable "
"them in your phone settings, in Apps > Joplin > Permissions"
@@ -1873,6 +1997,10 @@ msgstr "Nebylo možné uložit zápisník: %s"
msgid "Edit notebook"
msgstr "Upravit zápisník"
#, fuzzy
msgid "Enter notebook title"
msgstr "Název zápisníku:"
msgid "Show all"
msgstr "Zobrazit vše"
@@ -1896,10 +2024,32 @@ msgstr "Nenalezena položka s ID %s"
msgid "The Joplin mobile app does not currently support this type of link: %s"
msgstr "Mobilní aplikace Joplin aktuálně nepodporuje tento typ odkazu:% s"
#, javascript-format
msgid "Links with protocol \"%s\" are not supported"
msgstr ""
#, javascript-format
msgid "Unsupported image type: %s"
msgstr "Nepodporovaný formát obrázku: %s"
#, fuzzy, javascript-format
msgid "Updated: %s"
msgstr "Upraveno: %d."
msgid "View on map"
msgstr "Zobrazit na map+"
msgid "Go to source URL"
msgstr "Jít na zdrojovou URL"
#, fuzzy
msgid "Attach..."
msgstr "Hledat..."
#, fuzzy
msgid "Choose an option"
msgstr "Ukázat pokročilé volby"
msgid "Take photo"
msgstr "Přiložit foto"
@@ -1918,23 +2068,19 @@ msgstr "Konvertovat na poznámku"
msgid "Convert to todo"
msgstr "Konvertovat na todo"
msgid "Hide metadata"
msgstr "Schovat metadata"
#, fuzzy
msgid "Properties"
msgstr "Nastavení poznámek"
msgid "Show metadata"
msgstr "Zobrazit metadata"
msgid "View on map"
msgstr "Zobrazit na map+"
msgid "Go to source URL"
msgstr "Jít na zdrojovou URL"
msgid "Add body"
msgstr ""
msgid "Edit"
msgstr "Upravit"
msgid "Delete notebook"
msgstr "Smazat zápisník"
#, fuzzy
msgid "Add title"
msgstr "bez názvu"
msgid "Login with OneDrive"
msgstr "Přihlásit se pomocí OneDrive"
@@ -1942,18 +2088,41 @@ msgstr "Přihlásit se pomocí OneDrive"
msgid "Search"
msgstr "Hledání"
msgid ""
"Click on the (+) button to create a new note or notebook. Click on the side "
"menu to access your existing notebooks."
msgstr ""
"Vytvořte novou poznámku či zápisník kliknutím na tlačítko (+). Pro přístup k "
"existujícím zápisníkům použijte postranní menu."
#, fuzzy
#~ msgid "Permission to write to external storage"
#~ msgstr "Oprávnění použít kameru"
msgid "You currently have no notebook. Create one by clicking on (+) button."
msgstr "Nemáte žádný zápisník. Vytvořte jeden kliknutím na tlačítko (+)."
#~ msgid "Cancel synchronisation"
#~ msgstr "Zrušit synchronizaci"
msgid "Welcome"
msgstr "Vítejte"
#~ msgid "Hide metadata"
#~ msgstr "Schovat metadata"
#~ msgid "Show metadata"
#~ msgstr "Zobrazit metadata"
#~ msgid "Delete notebook"
#~ msgstr "Smazat zápisník"
#~ msgid ""
#~ "Click on the (+) button to create a new note or notebook. Click on the "
#~ "side menu to access your existing notebooks."
#~ msgstr ""
#~ "Vytvořte novou poznámku či zápisník kliknutím na tlačítko (+). Pro "
#~ "přístup k existujícím zápisníkům použijte postranní menu."
#~ msgid ""
#~ "You currently have no notebook. Create one by clicking on (+) button."
#~ msgstr "Nemáte žádný zápisník. Vytvořte jeden kliknutím na tlačítko (+)."
#~ msgid "Welcome"
#~ msgstr "Vítejte"
#~ msgid "Separate each tag by a comma."
#~ msgstr "Tagy oddělujte čárkami."
#~ msgid "Some items cannot be decrypted."
#~ msgstr "Některé položky nelze rozšifrovat."
#~ msgid "%s (%s): %s"
#~ msgstr "%s (%s): %s"

View File

@@ -525,6 +525,10 @@ msgstr "Tast `Joplin help` for alm. info."
msgid "Fatal error:"
msgstr "Kritisk fejl:"
#, javascript-format
msgid "All potential ports are in use - please report the issue at %s"
msgstr ""
msgid ""
"The application has been authorised - you may now close this browser tab."
msgstr "Denne app er godkendt - du kan nu lukke dette faneblad."
@@ -622,6 +626,26 @@ 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)"
@@ -639,6 +663,9 @@ msgstr ""
msgid "Check for updates..."
msgstr "Checker om der er opdateringer.."
msgid "Templates"
msgstr ""
msgid "Import"
msgstr "Importer"
@@ -684,12 +711,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"
@@ -725,6 +758,9 @@ msgstr "Joplins hjemmeside og dokumentation"
msgid "Make a donation"
msgstr "Giv en donation"
msgid "Toggle development tools"
msgstr ""
#, javascript-format
msgid "Open %s"
msgstr "Åben %s"
@@ -950,9 +986,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:"
@@ -963,6 +996,9 @@ msgstr "Omdøb"
msgid "Set alarm:"
msgstr "Indstil alarm:"
msgid "Template file:"
msgstr ""
msgid "Layout"
msgstr "Layout"
@@ -976,8 +1012,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"
@@ -999,6 +1036,9 @@ msgstr ""
msgid "Note History"
msgstr "Notesbøger"
msgid "Markup"
msgstr ""
msgid "Previous versions of this note"
msgstr ""
@@ -1069,9 +1109,6 @@ msgstr ""
msgid "Attach file"
msgstr "Vedhæft fil"
msgid "Tags"
msgstr "Mærker"
msgid "Set alarm"
msgstr "Indstil alarm"
@@ -1082,9 +1119,6 @@ msgstr "%s: %s"
msgid "Hyperlink"
msgstr ""
msgid "Code"
msgstr ""
msgid "Numbered List"
msgstr ""
@@ -1162,20 +1196,12 @@ msgstr "Slet"
msgid "Rename"
msgstr "Omdøb"
msgid "Notebooks"
msgstr "Notesbøger"
#, fuzzy, javascript-format
msgid "Decrypting items: %d/%d"
msgstr "Hentede emner: %d/%d."
#, fuzzy, javascript-format
msgid "Fetching resources: %d"
msgstr "Ressourcer: %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"
@@ -1381,6 +1407,58 @@ msgid ""
"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"
@@ -1399,6 +1477,12 @@ msgstr "Lyst"
msgid "Dark"
msgstr "Mørkt"
msgid "Solarized Light"
msgstr ""
msgid "Solarized Dark"
msgstr ""
msgid "Uncompleted to-dos on top"
msgstr "Ufærdige opgaver øverst"
@@ -1538,40 +1622,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 "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 "Custom TLS certificates"
msgstr ""
@@ -1679,14 +1729,6 @@ msgstr ""
msgid "Items that cannot be synchronised"
msgstr "Emner kan ikke synkroniseres"
#, 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"
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 "
@@ -1696,6 +1738,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)"
@@ -1741,18 +1801,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..."
@@ -1777,8 +1825,35 @@ 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, javascript-format
msgid "Decrypting items: %d/%d"
msgstr "Hentede emner: %d/%d"
#, fuzzy, javascript-format
msgid "Fetching resources: %d/%d"
msgstr "Ressourcer: %d/%d"
#, fuzzy
msgid "All notes"
msgstr "note"
msgid "Notebooks"
msgstr "Notesbøger"
#, fuzzy
msgid "Checking... Please wait."
@@ -1816,6 +1891,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 synchronisation 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 a long time 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"
@@ -1874,6 +1997,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"
@@ -1897,10 +2024,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"
@@ -1920,23 +2069,18 @@ msgstr "Konverter til note"
msgid "Convert to todo"
msgstr "Konverter til opgave"
msgid "Hide metadata"
msgstr "Skjul metadata"
msgid "Properties"
msgstr ""
msgid "Show metadata"
msgstr "Vis metadata"
msgid "View on map"
msgstr "Vis på kort"
msgid "Go to source URL"
msgid "Add body"
msgstr ""
msgid "Edit"
msgstr "Ret"
msgid "Delete notebook"
msgstr "Slet notesbog"
#, fuzzy
msgid "Add title"
msgstr "Samlet"
msgid "Login with OneDrive"
msgstr "Log på med OneDrive"
@@ -1944,18 +2088,37 @@ 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"

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.2.3\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
msgid "To delete a tag, untag the associated notes."
@@ -544,6 +544,12 @@ msgstr "Gib `joplin help` ein um die Nutzungsstatistik anzuzeigen."
msgid "Fatal error:"
msgstr "Schwerwiegender Fehler:"
#, javascript-format
msgid "All potential ports are in use - please report the issue at %s"
msgstr ""
"Alle potentielle Port-Nummern sind in Verwendung - bitte melde dieses "
"Problem auf %s"
msgid ""
"The application has been authorised - you may now close this browser tab."
msgstr ""
@@ -597,7 +603,7 @@ msgstr ""
#, javascript-format
msgid "Exporting to \"%s\" as \"%s\" format. Please wait..."
msgstr "Exportiere „%s“ ins „%s“ Format. Bitte warten..."
msgstr "Exportiere „%s“ ins „%s“-Format. Bitte warten..."
msgid "Sidebar"
msgstr "Seitenleiste"
@@ -606,14 +612,14 @@ msgid "Note list"
msgstr "Notizen-Liste"
msgid "Note title"
msgstr "Notiz Titel"
msgstr "Notiz-Titel"
msgid "Note body"
msgstr "Notiz Text"
msgstr "Notiz-Text"
#, javascript-format
msgid "Importing from \"%s\" as \"%s\" format. Please wait..."
msgstr "Importiere „%s“ ins „%s“ Format. Bitte warten..."
msgstr "Importiere „%s“ als „%s“-Format. Bitte warten..."
msgid "PDF File"
msgstr "PDF-Datei"
@@ -642,6 +648,25 @@ msgstr "Verschlüsselungsoptionen"
msgid "Web clipper options"
msgstr "Web-Clipper Optionen"
msgid "Create note from template"
msgstr "Erstelle Notiz von Vorlage"
msgid "Create to-do from template"
msgstr "Erstelle To-Do von Vorlage"
msgid "Insert template"
msgstr "Vorlage einfügen"
msgid "Open template directory"
msgstr "Öffne Vorlagen Verzeichnis"
msgid "Refresh templates"
msgstr "Aktualisiere Vorlagen"
#, javascript-format
msgid "Revision: %s (%s)"
msgstr "Revision: %s (%s)"
#, javascript-format
msgid "%s %s (%s, %s)"
msgstr "%s %s (%s, %s)"
@@ -658,6 +683,9 @@ msgstr "Einstellungen..."
msgid "Check for updates..."
msgstr "Überprüfe auf Aktualisierungen..."
msgid "Templates"
msgstr "Vorlagen"
msgid "Import"
msgstr "Importieren"
@@ -675,7 +703,7 @@ msgid "Quit"
msgstr "Verlassen"
msgid "Close Window"
msgstr ""
msgstr "Fenster schließen"
msgid "&Edit"
msgstr "&Bearbeiten"
@@ -701,12 +729,18 @@ msgstr "Kursiv"
msgid "Link"
msgstr "Link"
msgid "Code"
msgstr "Code"
msgid "Insert Date Time"
msgstr "Datum / Uhrzeit einfügen"
msgid "Edit in external editor"
msgstr "Im externen Editor bearbeiten"
msgid "Tags"
msgstr "Schlagwörter"
msgid "Search in all the notes"
msgstr "Alle Notizen durchsuchen"
@@ -737,6 +771,9 @@ msgstr "Webseite und Dokumentation"
msgid "Make a donation"
msgstr "Spenden"
msgid "Toggle development tools"
msgstr "Entwicklerwerkzeuge ein-/ausschalten"
#, javascript-format
msgid "Open %s"
msgstr "Öffne %s"
@@ -974,9 +1011,6 @@ msgstr "Notizbuch-Titel:"
msgid "Add or remove tags:"
msgstr "Schlagwörter hinzufügen oder entfernen:"
msgid "Separate each tag by a comma."
msgstr "Trenne jedes Schlagwort mit einem Komma."
msgid "Rename notebook:"
msgstr "Notizbuch umbenennen:"
@@ -986,6 +1020,9 @@ msgstr "Schlagwort umbenennen:"
msgid "Set alarm:"
msgstr "Alarm erstellen:"
msgid "Template file:"
msgstr "Vorlagen-Datei:"
msgid "Layout"
msgstr "Layout"
@@ -998,8 +1035,8 @@ msgstr "Manche Objekte können nicht synchronisiert werden."
msgid "View them now"
msgstr "Zeige sie jetzt an"
msgid "Some items cannot be decrypted."
msgstr "Einige Objekte können nicht entschlüsselt werden."
msgid "One or more master keys need a password."
msgstr "Mindestens ein Hauptschlüssel benötigt ein Passwort."
msgid "Set the password"
msgstr "Setze ein Passwort"
@@ -1021,12 +1058,14 @@ msgstr "Standort"
msgid "URL"
msgstr "URL"
#, fuzzy
msgid "Note History"
msgstr "Notizen-Liste"
msgstr "Notizen-Verlauf"
msgid "Markup"
msgstr "Markup"
msgid "Previous versions of this note"
msgstr ""
msgstr "Vorherige Version von dieser Notiz"
msgid "Note properties"
msgstr "Notiz-Eigenschaften"
@@ -1034,19 +1073,22 @@ msgstr "Notiz-Eigenschaften"
#, javascript-format
msgid "The note \"%s\" has been successfully restored to the notebook \"%s\"."
msgstr ""
"Die Notiz \"%s\" wurde erfolgreich wiederhergestellt und ist im Notizbuch "
"\"%s\" verfügbar."
#, fuzzy
msgid "This note has no history"
msgstr "Diese Notiz wurde verändert:"
msgstr "Diese Notiz hat keinen Verlauf"
msgid "Restore"
msgstr ""
msgstr "Wiederherstellen"
#, 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 ""
"Klicke \"%s\" um die Notiz wiederherzustellen. Sie wird in das Notizbuch \"%s"
"\" kopiert. Die aktuelle Version der Notiz wird nicht ersetzt oder verändert."
msgid "Open..."
msgstr "Öffne..."
@@ -1098,9 +1140,6 @@ msgstr "Weblink einfügen"
msgid "Attach file"
msgstr "Datei anhängen"
msgid "Tags"
msgstr "Schlagwörter"
msgid "Set alarm"
msgstr "Alarm erstellen"
@@ -1111,9 +1150,6 @@ msgstr "In: %s"
msgid "Hyperlink"
msgstr "Weblink"
msgid "Code"
msgstr "Code"
msgid "Numbered List"
msgstr "Nummerierte Liste"
@@ -1192,21 +1228,13 @@ msgstr "Löschen"
msgid "Rename"
msgstr "Umbenennen"
msgid "Notebooks"
msgstr "Notizbücher"
#, javascript-format
msgid "Decrypting items: %d/%d"
msgstr "Entschlüsselte Objekte: %d/%d"
#, javascript-format
msgid "Fetching resources: %d"
msgstr "Ressourcen abrufen: %d"
msgid "Please select where the sync status should be exported to"
msgstr ""
"Bitte wähle aus, wohin der Synchronisations-Status exportiert werden soll"
msgid "Retry"
msgstr "Erneut versuchen"
msgid "Add or remove tags"
msgstr "Schlagwörter hinzufügen oder entfernen"
@@ -1361,7 +1389,7 @@ msgstr "Synchronisation ist bereits im Gange. Status: %s"
msgid ""
"Unknown item type downloaded - please upgrade Joplin to the latest version"
msgstr ""
msgstr "Unbekannter Eintrags-Typ heruntergeladen - bitte aktualisiere Joplin"
msgid "Encrypted"
msgstr "Verschlüsselt"
@@ -1410,6 +1438,63 @@ msgstr ""
"neuen Ablageort kopiert hast, sonst werden alle Dateien gelöscht! Lies auch "
"die FAQs hierzu: %s"
msgid "Synchronisation target"
msgstr "Synchronisationsziel"
msgid ""
"The target to synchonise to. Each sync target may have additional parameters "
"which are named as `sync.NUM.NAME` (all documented below)."
msgstr ""
"Das Ziel, mit dem synchronisiert werden soll. Jedes Synchronisationsziel "
"kann zusätzliche Parameter haben, die als `sync.NUM.NAME` (alle unten "
"dokumentiert) bezeichnet werden."
msgid "Directory to synchronise with (absolute path)"
msgstr "Verzeichnis mit dem synchronisiert werden soll (absoluter Pfad)"
msgid "Nextcloud WebDAV URL"
msgstr "Nextcloud WebDAV-URL"
msgid "Nextcloud username"
msgstr "Nextcloud-Benutzername"
msgid "Nextcloud password"
msgstr "Nextcloud-Passwort"
msgid "WebDAV URL"
msgstr "WebDAV-URL"
msgid "WebDAV username"
msgstr "WebDAV-Benutzername"
msgid "WebDAV password"
msgstr "WebDAV-Passwort"
msgid "Attachment download behaviour"
msgstr "Verhalten für das Herunterladen von Anhängen"
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 ""
"Im \"Manuell\" Modus werden die Anhänge nur heruntergeladen wenn Du auf sie "
"klickst. Bei \"Automatisch\" werden sie heruntergeladen sobald die Notiz "
"geöffnet wird. Bei \"Immer\" werden die Anhänge heruntergeladen egal ob die "
"Notiz geöffnet wird oder nicht."
msgid "Always"
msgstr "Immer"
msgid "Manual"
msgstr "Manuell"
msgid "Auto"
msgstr "Automatisch"
msgid "Max concurrent connections"
msgstr "Maximale Anzahl an gleichzeitigen Verbindungen"
msgid "Language"
msgstr "Sprache"
@@ -1428,6 +1513,12 @@ msgstr "Hell"
msgid "Dark"
msgstr "Dunkel"
msgid "Solarized Light"
msgstr "Solarized Hell"
msgid "Solarized Dark"
msgstr "Solarized Dunkel"
msgid "Uncompleted to-dos on top"
msgstr "Zeige unvollständige To-Dos an oberster Stelle"
@@ -1564,41 +1655,6 @@ msgstr ""
"Der Editor, mit dem Notizen geöffnet werden. Wenn keiner ausgewählt wurde, "
"wird Joplin versuchen den Standardeditor zu erkennen."
msgid "Show advanced options"
msgstr "Erweiterte Optionen anzeigen"
msgid "Synchronisation target"
msgstr "Synchronisationsziel"
msgid ""
"The target to synchonise to. Each sync target may have additional parameters "
"which are named as `sync.NUM.NAME` (all documented below)."
msgstr ""
"Das Ziel, mit dem synchronisiert werden soll. Jedes Synchronisationsziel "
"kann zusätzliche Parameter haben, die als `sync.NUM.NAME` (alle unten "
"dokumentiert) bezeichnet werden."
msgid "Directory to synchronise with (absolute path)"
msgstr "Verzeichnis mit dem synchronisiert werden soll (absoluter Pfad)"
msgid "Nextcloud WebDAV URL"
msgstr "Nextcloud WebDAV-URL"
msgid "Nextcloud username"
msgstr "Nextcloud-Benutzername"
msgid "Nextcloud password"
msgstr "Nextcloud-Passwort"
msgid "WebDAV URL"
msgstr "WebDAV-URL"
msgid "WebDAV username"
msgstr "WebDAV-Benutzername"
msgid "WebDAV password"
msgstr "WebDAV-Passwort"
msgid "Custom TLS certificates"
msgstr "Benutzerdefinierte TLS-Zertifikate"
@@ -1617,19 +1673,18 @@ msgstr ""
msgid "Ignore TLS certificate errors"
msgstr "Ignoriere TLS-Zertifikatfehler"
#, fuzzy
msgid "Enable note history"
msgstr "Aktiviere Fußnoten"
msgstr "Aktiviere Notizen-Verlauf"
msgid "days"
msgstr ""
msgstr "Tage"
#, javascript-format
msgid "%d days"
msgstr ""
msgstr "%d Tage"
msgid "Keep note history for"
msgstr ""
msgstr "Speicher Notizen-Verlauf für"
#, javascript-format
msgid "Invalid option value: \"%s\". Possible values are: %s."
@@ -1704,19 +1759,11 @@ msgstr ""
"Bitte wähle aus, wohin der Synchronisations-Status exportiert werden soll."
msgid "Restored Notes"
msgstr ""
msgstr "Wiederhergestellte Notizen"
msgid "Items that cannot be synchronised"
msgstr "Objekte können nicht synchronisiert werden"
#, fuzzy, javascript-format
msgid "%s (%s) could not be uploaded: %s"
msgstr "Dieses Notizbuch konnte nicht geöffnet werden: %s"
#, fuzzy, javascript-format
msgid "Item \"%s\" could not be downloaded: %s"
msgstr "Dieses Notizbuch konnte nicht geöffnet werden: %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 "
@@ -1726,6 +1773,27 @@ msgstr ""
"Synchronisationsziel hochgeladen. Um diese Objekte zu finden, suchst du "
"entweder nach dem Titel oder der ID (die oben in Klammern angezeigt wird)."
#, javascript-format
msgid "%s (%s) could not be uploaded: %s"
msgstr "%s (%s) konnte nicht hochgeladen werden: %s"
#, javascript-format
msgid "Item \"%s\" could not be downloaded: %s"
msgstr "Eintrag \"%s\" konnte nicht heruntergeladen werden: %s"
msgid "Items that cannot be decrypted"
msgstr "Objekte, die nicht entschlüsselt werden konnten"
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 konnte diese Objekte trotz mehrfacher Versuche nicht entschlüsseln, "
"weil sie wahrscheinlich entweder kaputt oder zu groß sind. Diese Objekte "
"bleiben auf dem Gerat, aber Joplin wird nicht mehr versuchen sie zu "
"entschlüsseln."
msgid "Sync status (synced items / total items)"
msgstr "Synchronisationsstatus (synchronisierte Objekte / gesamte Objekte)"
@@ -1773,18 +1841,6 @@ msgstr ""
msgid "Delete these notes?"
msgstr "Sollen diese Notizen gelöscht werden?"
msgid "Log"
msgstr "Protokoll"
msgid "Export Debug Report"
msgstr "Fehlerbericht exportieren"
msgid "Encryption Config"
msgstr "Verschlüsselungskonfiguration"
msgid "Configuration"
msgstr "Konfiguration"
msgid "Move to notebook..."
msgstr "In Notizbuch verschieben..."
@@ -1807,8 +1863,32 @@ msgstr "Datum auswählen"
msgid "Confirm"
msgstr "Bestätigen"
msgid "Cancel synchronisation"
msgstr "Synchronisation abbrechen"
#, javascript-format
msgid "Notebook: %s"
msgstr "Notizbuch: %s"
msgid "Encrypted notebooks cannot be renamed"
msgstr "Verschlüsselte Notizbücher können nicht umbenannt werden"
msgid "New Notebook"
msgstr "Neues Notizbuch"
msgid "Configuration"
msgstr "Konfiguration"
#, javascript-format
msgid "Decrypting items: %d/%d"
msgstr "Entschlüsselte Objekte: %d/%d"
#, javascript-format
msgid "Fetching resources: %d/%d"
msgstr "Ressourcen abrufen: %d/%d"
msgid "All notes"
msgstr "Alle Notizen"
msgid "Notebooks"
msgstr "Notizbücher"
msgid "Checking... Please wait."
msgstr "Überprüfe… Bitte warten."
@@ -1851,6 +1931,54 @@ msgstr "Neue Schlagwörter:"
msgid "Type new tags or select from list"
msgstr "Neues Schlagwort eingeben oder aus der Liste auswählen"
msgid "Warning"
msgstr "Warnung"
msgid ""
"In order to use file system synchronisation your permission to write to "
"external storage is required."
msgstr ""
"Deine Erlaubnis auf externen Speicher zu schreiben ist notwendig um "
"Synchronisation mit dem Dateisystem zu verwenden."
msgid "Information"
msgstr "Information"
msgid "Encryption Config"
msgstr "Verschlüsselungskonfiguration"
msgid "Tools"
msgstr "Werkzeuge"
msgid "Sync Status"
msgstr "Synchronisationsstatus"
msgid "Log"
msgstr "Protokoll"
msgid "Creating report..."
msgstr "Erstelle Bericht..."
msgid "Export Debug Report"
msgstr "Fehlerbericht exportieren"
msgid "Fixing search index..."
msgstr "Repariere Such-Index..."
msgid "Fix search index"
msgstr "Repariere Such-Index"
msgid ""
"Use this to rebuild the search index if there is a problem with search. It "
"may take a long time depending on the number of notes."
msgstr ""
"Verwende das um den Such-Index wiederherzustellen, wenn es ein Problem mit "
"der Suche gibt. Je nachdem wieviele Notizen es gibt, kann dieser Prozess "
"etwas dauern."
msgid "More information"
msgstr "Weitere Information"
msgid ""
"To work correctly, the app needs the following permissions. Please enable "
"them in your phone settings, in Apps > Joplin > Permissions"
@@ -1914,6 +2042,9 @@ msgstr "Dieses Notizbuch konnte nicht gespeichert werden: %s"
msgid "Edit notebook"
msgstr "Notizbuch bearbeiten"
msgid "Enter notebook title"
msgstr "Notizbuch-Titel eingeben"
msgid "Show all"
msgstr "Zeige Alles"
@@ -1938,10 +2069,30 @@ msgid "The Joplin mobile app does not currently support this type of link: %s"
msgstr ""
"Die Joplin Handy-Applikation unterstützt derzeit diese Art von Link nicht: %s"
#, javascript-format
msgid "Links with protocol \"%s\" are not supported"
msgstr "Verweise mit dem Protokoll \"%s\" sind nicht unterstützt"
#, javascript-format
msgid "Unsupported image type: %s"
msgstr "Nicht unterstütztes Fotoformat: %s"
#, javascript-format
msgid "Updated: %s"
msgstr "Aktualisiert: %s"
msgid "View on map"
msgstr "Auf der Karte anzeigen"
msgid "Go to source URL"
msgstr "Zur Quell-URL gehen"
msgid "Attach..."
msgstr "Anhängen..."
msgid "Choose an option"
msgstr "Wähle eine Option"
msgid "Take photo"
msgstr "Foto aufnehmen"
@@ -1960,23 +2111,17 @@ msgstr "In eine Notiz umwandeln"
msgid "Convert to todo"
msgstr "In ein To-Do umwandeln"
msgid "Hide metadata"
msgstr "Metadaten verstecken"
msgid "Properties"
msgstr "Eigenschaften"
msgid "Show metadata"
msgstr "Metadaten anzeigen"
msgid "View on map"
msgstr "Auf der Karte anzeigen"
msgid "Go to source URL"
msgstr "Zur Quell-URL gehen"
msgid "Add body"
msgstr "Text hinzufügen"
msgid "Edit"
msgstr "Bearbeiten"
msgid "Delete notebook"
msgstr "Notizbuch löschen"
msgid "Add title"
msgstr "Titel hinzufügen"
msgid "Login with OneDrive"
msgstr "Mit OneDrive anmelden"
@@ -1984,21 +2129,44 @@ msgstr "Mit OneDrive anmelden"
msgid "Search"
msgstr "Suchen"
msgid ""
"Click on the (+) button to create a new note or notebook. Click on the side "
"menu to access your existing notebooks."
msgstr ""
"Drücke auf die (+)-Schaltfläche, um eine neue Notiz oder ein neues Notizbuch "
"zu erstellen. Tippe auf die Seitenleiste, um auf deine existierenden "
"Notizbücher zuzugreifen."
#, fuzzy
#~ msgid "Permission to write to external storage"
#~ msgstr "Berechtigung zur Verwendung der Kamera"
msgid "You currently have no notebook. Create one by clicking on (+) button."
msgstr ""
"Du hast noch kein Notizbuch angelegt. Erstelle eines, indem du auf den (+) "
"Knopf drückst."
#~ msgid "Cancel synchronisation"
#~ msgstr "Synchronisation abbrechen"
msgid "Welcome"
msgstr "Willkommen"
#~ msgid "Hide metadata"
#~ msgstr "Metadaten verstecken"
#~ msgid "Show metadata"
#~ msgstr "Metadaten anzeigen"
#~ msgid "Delete notebook"
#~ msgstr "Notizbuch löschen"
#~ msgid ""
#~ "Click on the (+) button to create a new note or notebook. Click on the "
#~ "side menu to access your existing notebooks."
#~ msgstr ""
#~ "Drücke auf die (+)-Schaltfläche, um eine neue Notiz oder ein neues "
#~ "Notizbuch zu erstellen. Tippe auf die Seitenleiste, um auf deine "
#~ "existierenden Notizbücher zuzugreifen."
#~ msgid ""
#~ "You currently have no notebook. Create one by clicking on (+) button."
#~ msgstr ""
#~ "Du hast noch kein Notizbuch angelegt. Erstelle eines, indem du auf den "
#~ "(+) Knopf drückst."
#~ msgid "Welcome"
#~ msgstr "Willkommen"
#~ msgid "Separate each tag by a comma."
#~ msgstr "Trenne jedes Schlagwort mit einem Komma."
#~ msgid "Some items cannot be decrypted."
#~ msgstr "Einige Objekte können nicht entschlüsselt werden."
#~ msgid "%s (%s): %s"
#~ msgstr "%s (%s): %s"
@@ -2019,9 +2187,6 @@ msgstr "Willkommen"
#~ msgid "Remove?"
#~ msgstr "Löschen?"
#~ msgid "Delete notes?"
#~ msgstr "Notizen löschen?"
#~ msgid "State: %s."
#~ msgstr "Status: %s."

View File

@@ -470,6 +470,10 @@ msgstr ""
msgid "Fatal error:"
msgstr ""
#, javascript-format
msgid "All potential ports are in use - please report the issue at %s"
msgstr ""
msgid ""
"The application has been authorised - you may now close this browser tab."
msgstr ""
@@ -551,6 +555,25 @@ 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 ""
@@ -567,6 +590,9 @@ msgstr ""
msgid "Check for updates..."
msgstr ""
msgid "Templates"
msgstr ""
msgid "Import"
msgstr ""
@@ -610,12 +636,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 ""
@@ -646,6 +678,9 @@ msgstr ""
msgid "Make a donation"
msgstr ""
msgid "Toggle development tools"
msgstr ""
#, javascript-format
msgid "Open %s"
msgstr ""
@@ -854,9 +889,6 @@ msgstr ""
msgid "Add or remove tags:"
msgstr ""
msgid "Separate each tag by a comma."
msgstr ""
msgid "Rename notebook:"
msgstr ""
@@ -866,6 +898,9 @@ msgstr ""
msgid "Set alarm:"
msgstr ""
msgid "Template file:"
msgstr ""
msgid "Layout"
msgstr ""
@@ -878,7 +913,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"
@@ -900,6 +935,9 @@ msgstr ""
msgid "Note History"
msgstr ""
msgid "Markup"
msgstr ""
msgid "Previous versions of this note"
msgstr ""
@@ -969,9 +1007,6 @@ msgstr ""
msgid "Attach file"
msgstr ""
msgid "Tags"
msgstr ""
msgid "Set alarm"
msgstr ""
@@ -982,9 +1017,6 @@ msgstr ""
msgid "Hyperlink"
msgstr ""
msgid "Code"
msgstr ""
msgid "Numbered List"
msgstr ""
@@ -1060,20 +1092,12 @@ msgstr ""
msgid "Rename"
msgstr ""
msgid "Notebooks"
msgstr ""
#, javascript-format
msgid "Decrypting items: %d/%d"
msgstr ""
#, javascript-format
msgid "Fetching resources: %d"
msgstr ""
msgid "Please select where the sync status should be exported to"
msgstr ""
msgid "Retry"
msgstr ""
msgid "Add or remove tags"
msgstr ""
@@ -1263,6 +1287,56 @@ msgid ""
"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 ""
@@ -1281,6 +1355,12 @@ msgstr ""
msgid "Dark"
msgstr ""
msgid "Solarized Light"
msgstr ""
msgid "Solarized Dark"
msgstr ""
msgid "Uncompleted to-dos on top"
msgstr ""
@@ -1409,38 +1489,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 "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 "Custom TLS certificates"
msgstr ""
@@ -1540,6 +1588,12 @@ msgstr ""
msgid "Items that cannot be synchronised"
msgstr ""
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 ""
#, javascript-format
msgid "%s (%s) could not be uploaded: %s"
msgstr ""
@@ -1548,10 +1602,13 @@ msgstr ""
msgid "Item \"%s\" could not be downloaded: %s"
msgstr ""
msgid "Items that cannot be decrypted"
msgstr ""
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)."
"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)"
@@ -1599,18 +1656,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 ""
@@ -1633,7 +1678,31 @@ 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 ""
#, javascript-format
msgid "Decrypting items: %d/%d"
msgstr ""
#, javascript-format
msgid "Fetching resources: %d/%d"
msgstr ""
msgid "All notes"
msgstr ""
msgid "Notebooks"
msgstr ""
msgid "Checking... Please wait."
@@ -1669,6 +1738,49 @@ msgstr ""
msgid "Type new tags or select from list"
msgstr ""
msgid "Warning"
msgstr ""
msgid ""
"In order to use file system synchronisation 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 a long time 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"
@@ -1726,6 +1838,9 @@ msgstr ""
msgid "Edit notebook"
msgstr ""
msgid "Enter notebook title"
msgstr ""
msgid "Show all"
msgstr ""
@@ -1749,10 +1864,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 ""
@@ -1771,22 +1906,16 @@ msgstr ""
msgid "Convert to todo"
msgstr ""
msgid "Hide metadata"
msgid "Properties"
msgstr ""
msgid "Show metadata"
msgstr ""
msgid "View on map"
msgstr ""
msgid "Go to source URL"
msgid "Add body"
msgstr ""
msgid "Edit"
msgstr ""
msgid "Delete notebook"
msgid "Add title"
msgstr ""
msgid "Login with OneDrive"
@@ -1794,14 +1923,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

@@ -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.2.3\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
msgid "To delete a tag, untag the associated notes."
@@ -475,6 +475,10 @@ msgstr ""
msgid "Fatal error:"
msgstr ""
#, javascript-format
msgid "All potential ports are in use - please report the issue at %s"
msgstr ""
msgid ""
"The application has been authorised - you may now close this browser tab."
msgstr ""
@@ -557,6 +561,25 @@ 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 ""
@@ -573,6 +596,9 @@ msgstr ""
msgid "Check for updates..."
msgstr ""
msgid "Templates"
msgstr ""
msgid "Import"
msgstr ""
@@ -616,12 +642,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 "Search in all notes"
@@ -652,6 +684,9 @@ msgstr ""
msgid "Make a donation"
msgstr ""
msgid "Toggle development tools"
msgstr ""
#, javascript-format
msgid "Open %s"
msgstr ""
@@ -872,9 +907,6 @@ msgstr ""
msgid "Add or remove tags:"
msgstr ""
msgid "Separate each tag by a comma."
msgstr ""
msgid "Rename notebook:"
msgstr ""
@@ -884,6 +916,9 @@ msgstr ""
msgid "Set alarm:"
msgstr ""
msgid "Template file:"
msgstr ""
msgid "Layout"
msgstr ""
@@ -896,7 +931,7 @@ msgstr "Some items cannot be synchronized."
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"
@@ -918,6 +953,9 @@ msgstr ""
msgid "Note History"
msgstr ""
msgid "Markup"
msgstr ""
msgid "Previous versions of this note"
msgstr ""
@@ -987,9 +1025,6 @@ msgstr ""
msgid "Attach file"
msgstr ""
msgid "Tags"
msgstr ""
msgid "Set alarm"
msgstr ""
@@ -1000,9 +1035,6 @@ msgstr ""
msgid "Hyperlink"
msgstr ""
msgid "Code"
msgstr ""
msgid "Numbered List"
msgstr ""
@@ -1078,20 +1110,12 @@ msgstr ""
msgid "Rename"
msgstr ""
msgid "Notebooks"
msgstr ""
#, javascript-format
msgid "Decrypting items: %d/%d"
msgstr ""
#, javascript-format
msgid "Fetching resources: %d"
msgstr ""
msgid "Please select where the sync status should be exported to"
msgstr ""
msgid "Retry"
msgstr ""
msgid "Add or remove tags"
msgstr ""
@@ -1283,6 +1307,58 @@ msgid ""
"more details: %s"
msgstr ""
msgid "Synchronisation target"
msgstr "Synchronization target"
msgid ""
"The target to synchonise to. Each sync target may have additional parameters "
"which are named as `sync.NUM.NAME` (all documented below)."
msgstr ""
"The target to synchonize to. Each sync target may have additional parameters "
"which are named as `sync.NUM.NAME` (all documented below)."
msgid "Directory to synchronise with (absolute path)"
msgstr "Directory to synchronize with (absolute path)"
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 "Attachment download behavior"
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 ""
@@ -1301,6 +1377,12 @@ msgstr ""
msgid "Dark"
msgstr ""
msgid "Solarized Light"
msgstr ""
msgid "Solarized Dark"
msgstr ""
msgid "Uncompleted to-dos on top"
msgstr ""
@@ -1432,40 +1514,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 "Synchronization target"
msgid ""
"The target to synchonise to. Each sync target may have additional parameters "
"which are named as `sync.NUM.NAME` (all documented below)."
msgstr ""
"The target to synchonize to. Each sync target may have additional parameters "
"which are named as `sync.NUM.NAME` (all documented below)."
msgid "Directory to synchronise with (absolute path)"
msgstr "Directory to synchronize with (absolute path)"
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 "Custom TLS certificates"
msgstr ""
@@ -1565,6 +1613,12 @@ msgstr ""
msgid "Items that cannot be synchronised"
msgstr "Items that cannot be synchronized"
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 ""
#, javascript-format
msgid "%s (%s) could not be uploaded: %s"
msgstr ""
@@ -1573,10 +1627,13 @@ msgstr ""
msgid "Item \"%s\" could not be downloaded: %s"
msgstr ""
msgid "Items that cannot be decrypted"
msgstr ""
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)."
"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)"
@@ -1606,7 +1663,7 @@ msgid "%s: %d notes"
msgstr ""
msgid "Coming alarms"
msgstr ""
msgstr "Scheduled alarms"
#, javascript-format
msgid "On %s: %s"
@@ -1624,18 +1681,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 ""
@@ -1658,8 +1703,32 @@ msgstr ""
msgid "Confirm"
msgstr ""
msgid "Cancel synchronisation"
msgstr "Cancel synchronization"
#, javascript-format
msgid "Notebook: %s"
msgstr ""
msgid "Encrypted notebooks cannot be renamed"
msgstr ""
msgid "New Notebook"
msgstr ""
msgid "Configuration"
msgstr ""
#, javascript-format
msgid "Decrypting items: %d/%d"
msgstr ""
#, javascript-format
msgid "Fetching resources: %d/%d"
msgstr ""
msgid "All notes"
msgstr ""
msgid "Notebooks"
msgstr ""
msgid "Checking... Please wait."
msgstr ""
@@ -1699,6 +1768,49 @@ msgstr ""
msgid "Type new tags or select from list"
msgstr ""
msgid "Warning"
msgstr ""
msgid ""
"In order to use file system synchronisation 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 a long time 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"
@@ -1758,6 +1870,9 @@ msgstr ""
msgid "Edit notebook"
msgstr ""
msgid "Enter notebook title"
msgstr ""
msgid "Show all"
msgstr ""
@@ -1781,10 +1896,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 ""
@@ -1803,22 +1938,16 @@ msgstr ""
msgid "Convert to todo"
msgstr ""
msgid "Hide metadata"
msgid "Properties"
msgstr ""
msgid "Show metadata"
msgstr ""
msgid "View on map"
msgstr ""
msgid "Go to source URL"
msgid "Add body"
msgstr ""
msgid "Edit"
msgstr ""
msgid "Delete notebook"
msgid "Add title"
msgstr ""
msgid "Login with OneDrive"
@@ -1827,13 +1956,5 @@ 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 ""
#~ msgid "Cancel synchronisation"
#~ msgstr "Cancel synchronization"

View File

@@ -1,9 +1,11 @@
# Joplin translation to Spanish (Spain)
# Copyright (C) 2017 Lucas Vieites
# Copyright (C) 2019 Andros Fenollosa
# Copyright (C) 2019 Germán Martín
# This file is distributed under the same license as the Joplin-CLI package.
# Lucas Vieites <lucas.vieites@gmail.com>, 2017.
# Andros Fenollosa <andros@fenollosa.email>, 2019.
# Germán Martín <gmag11@gmail.com>, 2019.
#
msgid ""
msgstr ""
@@ -15,7 +17,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.2.3\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Poedit-SourceCharset: UTF-8\n"
@@ -132,8 +134,8 @@ msgid ""
"Manages E2EE configuration. Commands are `enable`, `disable`, `decrypt`, "
"`status`, `decrypt-file` and `target-status`."
msgstr ""
"Maneja la configuración E2EE. Comandos disponibles `enable`, `disable`, "
"`decrypt`, `status` y `target-status`."
"Maneja la configuración E2EE. Los comandos disponibles son: `enable`, "
"`disable`, `decrypt`, `status` y `target-status`."
msgid "Enter master password:"
msgstr "Introduzca la contraseña maestra:"
@@ -531,6 +533,10 @@ msgstr "Escriba `joplin help` para mostrar información de uso."
msgid "Fatal error:"
msgstr "Error fatal:"
#, javascript-format
msgid "All potential ports are in use - please report the issue at %s"
msgstr ""
msgid ""
"The application has been authorised - you may now close this browser tab."
msgstr ""
@@ -630,6 +636,27 @@ msgstr "Opciones de cifrado"
msgid "Web clipper options"
msgstr "Opciones de recorte web"
msgid "Create note from template"
msgstr ""
msgid "Create to-do from template"
msgstr ""
#, fuzzy
msgid "Insert template"
msgstr "Introduce fecha"
#, fuzzy
msgid "Open template directory"
msgstr "Directorio para exportar de 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)"
@@ -641,11 +668,14 @@ msgid "About Joplin"
msgstr "Acerca de Joplin"
msgid "Preferences..."
msgstr ""
msgstr "Preferencias..."
msgid "Check for updates..."
msgstr "Comprobar actualizaciones..."
msgid "Templates"
msgstr ""
msgid "Import"
msgstr "Importar"
@@ -663,7 +693,7 @@ msgid "Quit"
msgstr "Salir"
msgid "Close Window"
msgstr ""
msgstr "Cerrar Ventana"
msgid "&Edit"
msgstr "&Editar"
@@ -689,12 +719,18 @@ msgstr "Cursiva"
msgid "Link"
msgstr "Enlace"
msgid "Code"
msgstr "Código"
msgid "Insert Date Time"
msgstr "Introduce fecha"
msgid "Edit in external editor"
msgstr "Editar con un editor externo"
msgid "Tags"
msgstr "Etiquetas"
msgid "Search in all the notes"
msgstr "Buscar en todas las notas"
@@ -725,6 +761,9 @@ msgstr "Sitio web y documentación"
msgid "Make a donation"
msgstr "Hacer una donación"
msgid "Toggle development tools"
msgstr ""
#, javascript-format
msgid "Open %s"
msgstr "Abrir %s"
@@ -828,6 +867,8 @@ msgid ""
"This authorisation token is only needed to allow third-party applications to "
"access Joplin."
msgstr ""
"Este token de autorización se necesita solamente para permitir a "
"aplicaciones de terceros acceder a Joplin."
#, javascript-format
msgid "Notes and settings are stored in: %s"
@@ -955,9 +996,6 @@ msgstr "Título de libreta:"
msgid "Add or remove tags:"
msgstr "Agregar o borrar etiquetas:"
msgid "Separate each tag by a comma."
msgstr "Separar cada etiqueta por una coma."
msgid "Rename notebook:"
msgstr "Renombrar libreta:"
@@ -967,6 +1005,9 @@ msgstr "Renombrar etiqueta:"
msgid "Set alarm:"
msgstr "Ajustar alarma:"
msgid "Template file:"
msgstr ""
msgid "Layout"
msgstr "Diseño"
@@ -979,8 +1020,9 @@ msgstr "No se han podido sincronizar algunos de los elementos."
msgid "View them now"
msgstr "Verlos ahora"
msgid "Some items cannot be decrypted."
msgstr "No se han podido descifrar algunos elementos."
#, fuzzy
msgid "One or more master keys need a password."
msgstr "Introduzca la contraseña maestra:"
msgid "Set the password"
msgstr "Establecer la contraseña"
@@ -998,32 +1040,37 @@ msgstr "Localización"
msgid "URL"
msgstr "URL"
#, fuzzy
msgid "Note History"
msgstr "Lista de notas"
msgstr ""
"Historial\n"
" de notas"
msgid "Markup"
msgstr ""
msgid "Previous versions of this note"
msgstr ""
msgstr "Versiones anteriores de esta nota"
msgid "Note properties"
msgstr "Propiedades de nota"
#, javascript-format
msgid "The note \"%s\" has been successfully restored to the notebook \"%s\"."
msgstr ""
msgstr "La nota \"%s\" se ha restaurado correctamente en la libreta \"%s\"."
#, fuzzy
msgid "This note has no history"
msgstr "Esta nota ha sido modificada:"
msgstr "Esta nota no dispone de historial"
msgid "Restore"
msgstr ""
msgstr "Restaurar"
#, 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 ""
"Pulse \"%s\" para restaurar la nota. Se copiará en la libreta \"%s\". La "
"versión actual de la nota no se reemplazará ni se modificará."
msgid "Open..."
msgstr "Abrir..."
@@ -1074,9 +1121,6 @@ msgstr "Insertar hipervínculo"
msgid "Attach file"
msgstr "Adjuntar archivo"
msgid "Tags"
msgstr "Etiquetas"
msgid "Set alarm"
msgstr "Establecer alarma"
@@ -1087,9 +1131,6 @@ msgstr "En: %s"
msgid "Hyperlink"
msgstr "Hipervínculo"
msgid "Code"
msgstr "Código"
msgid "Numbered List"
msgstr "Lista numerada"
@@ -1168,20 +1209,12 @@ msgstr "Eliminar"
msgid "Rename"
msgstr "Renombrar"
msgid "Notebooks"
msgstr "Libretas"
#, javascript-format
msgid "Decrypting items: %d/%d"
msgstr "Descifrando elementos: %d/%d"
#, javascript-format
msgid "Fetching resources: %d"
msgstr "Obteniendo refuersos: %d"
msgid "Please select where the sync status should be exported to"
msgstr "Seleccione a dónde se debería exportar el estado de sincronización"
msgid "Retry"
msgstr ""
msgid "Add or remove tags"
msgstr "Añadir o borrar etiquetas"
@@ -1216,9 +1249,11 @@ msgid ""
"Type a note title to jump to it. Or type # followed by a tag name, or @ "
"followed by a notebook name."
msgstr ""
"Escriba el título de una nota para abrirla. O escriba # seguido de un nombre "
"de etiqueta, o @ seguido del nombre de una libreta."
msgid "Goto Anything..."
msgstr ""
msgstr "Ir a..."
#, javascript-format
msgid "Usage: %s"
@@ -1335,6 +1370,8 @@ msgstr "La sincronización ya está en progreso. Estado: %s"
msgid ""
"Unknown item type downloaded - please upgrade Joplin to the latest version"
msgstr ""
"Se ha descargado un elemento de tipo desconocido - actualice Joplin a la "
"última versión"
msgid "Encrypted"
msgstr "Cifrado"
@@ -1383,6 +1420,63 @@ msgstr ""
"antes de sincronizarlo, de lo contrario todos los archivos serán eliminados. "
"Consulte las preguntas frecuentes para obtener más detalles: %s"
msgid "Synchronisation target"
msgstr "Destino de 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 ""
"El destino de la sincronización. Cada destino de la sincronización puede "
"tener parámetros adicionales los cuales son llamados como `sync.NUM.NAME` "
"(todos abajo documentados)."
msgid "Directory to synchronise with (absolute path)"
msgstr "Directorio con el que sincronizarse (ruta completa)"
msgid "Nextcloud WebDAV URL"
msgstr "Servidor WebDAV de Nextcloud"
msgid "Nextcloud username"
msgstr "Usuario de Nextcloud"
msgid "Nextcloud password"
msgstr "Contraseña de Nextcloud"
msgid "WebDAV URL"
msgstr "Servidor WebDAV"
msgid "WebDAV username"
msgstr "Usuario de WebDAV"
msgid "WebDAV password"
msgstr "Contraseña de WebDAV"
msgid "Attachment download behaviour"
msgstr "Comportamiento de descarga de adjuntos"
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 modo \"Manual\", los archivos adjuntos se descargan solamente al pulsar "
"sobre ellos. En modo \"Auto\", se descargan cuando se abre la nota. En modo "
"\"Always\", se descargan todos los archivos adjuntos aunque la nota no esté "
"abierta."
msgid "Always"
msgstr "Siempre"
msgid "Manual"
msgstr "Manual"
msgid "Auto"
msgstr "Automático"
msgid "Max concurrent connections"
msgstr ""
msgid "Language"
msgstr "Idioma"
@@ -1401,6 +1495,12 @@ msgstr "Claro"
msgid "Dark"
msgstr "Oscuro"
msgid "Solarized Light"
msgstr ""
msgid "Solarized Dark"
msgstr ""
msgid "Uncompleted to-dos on top"
msgstr "Mostrar tareas incompletas al inicio de las listas"
@@ -1413,7 +1513,6 @@ msgstr "Ordenar notas por"
msgid "Reverse sort order"
msgstr "Invierte el orden"
#, fuzzy
msgid "Sort notebooks by"
msgstr "Ordenar notas por"
@@ -1433,41 +1532,40 @@ msgid "When creating a new note:"
msgstr "Cuando se crear una nota nueva:"
msgid "Enable soft breaks"
msgstr ""
msgstr "Activar saltos de línea"
#, fuzzy
msgid "Enable math expressions"
msgstr "Habilitar cifrado"
msgstr "Habilitar expresiones matemáticas"
msgid "Enable ==mark== syntax"
msgstr ""
msgstr "Activar sintaxis ==mark=="
msgid "Enable footnotes"
msgstr ""
msgstr "Activar notas al pie"
msgid "Enable table of contents extension"
msgstr ""
msgstr "Activar extensión de tabla de contenidos"
msgid "Enable ~sub~ syntax"
msgstr ""
msgstr "Activar sintaxis ~sub~"
msgid "Enable ^sup^ syntax"
msgstr ""
msgstr "Activar sintaxis ^sup^"
msgid "Enable deflist syntax"
msgstr ""
msgstr "Activar sintaxis Deflist"
msgid "Enable abbreviation syntax"
msgstr ""
msgstr "Activar sintaxis de abreviaturas"
msgid "Enable markdown emoji"
msgstr ""
msgstr "Activa sintaxis de emojis"
msgid "Enable ++insert++ syntax"
msgstr ""
msgstr "Activar sintaxis ++insert++"
msgid "Enable multimarkdown table extension"
msgstr ""
msgstr "Activar extensión de tablas multimarkdown"
msgid "Show tray icon"
msgstr "Mostrar icono en la bandeja"
@@ -1540,41 +1638,6 @@ msgstr ""
"una nota. Si no se provee ninguno se intentará auto detectar el editor por "
"defecto."
msgid "Show advanced options"
msgstr "Mostrar opciones avanzadas"
msgid "Synchronisation target"
msgstr "Destino de 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 ""
"El destino de la sincronización. Cada destino de la sincronización puede "
"tener parámetros adicionales los cuales son llamados como `sync.NUM.NAME` "
"(todos abajo documentados)."
msgid "Directory to synchronise with (absolute path)"
msgstr "Directorio con el que sincronizarse (ruta completa)"
msgid "Nextcloud WebDAV URL"
msgstr "Servidor WebDAV de Nextcloud"
msgid "Nextcloud username"
msgstr "Usuario de Nextcloud"
msgid "Nextcloud password"
msgstr "Contraseña de Nextcloud"
msgid "WebDAV URL"
msgstr "Servidor WebDAV"
msgid "WebDAV username"
msgstr "Usuario de WebDAV"
msgid "WebDAV password"
msgstr "Contraseña de WebDAV"
msgid "Custom TLS certificates"
msgstr "Certificados TLS personalizados"
@@ -1593,19 +1656,18 @@ msgstr ""
msgid "Ignore TLS certificate errors"
msgstr "Ignorar errores en certificados TLS"
#, fuzzy
msgid "Enable note history"
msgstr "Habilitar cifrado"
msgstr "Habilitar historial de notas"
msgid "days"
msgstr ""
msgstr "días"
#, javascript-format
msgid "%d days"
msgstr ""
msgstr "%d días"
msgid "Keep note history for"
msgstr ""
msgstr "Mantener historial de la nota durante"
#, javascript-format
msgid "Invalid option value: \"%s\". Possible values are: %s."
@@ -1624,7 +1686,7 @@ msgid "Note"
msgstr "Nota"
msgid "Plugins"
msgstr ""
msgstr "Plugins"
msgid "Application"
msgstr "Aplicación"
@@ -1677,19 +1739,11 @@ msgid "Please specify the notebook where the notes should be imported to."
msgstr "Por favor especifique la libreta donde las notas deben ser importadas."
msgid "Restored Notes"
msgstr ""
msgstr "Notas restauradas"
msgid "Items that cannot be synchronised"
msgstr "Elementos que no se pueden sincronizar"
#, fuzzy, javascript-format
msgid "%s (%s) could not be uploaded: %s"
msgstr "No se ha podido abrir este archivo: %s"
#, fuzzy, javascript-format
msgid "Item \"%s\" could not be downloaded: %s"
msgstr "No se ha podido abrir este archivo: %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 "
@@ -1699,6 +1753,24 @@ msgstr ""
"destino de sincronización. Para encontrar dichos elementos busca en el "
"título o en el ID (el cual se muestra arriba entre corchetes)."
#, fuzzy, javascript-format
msgid "%s (%s) could not be uploaded: %s"
msgstr "No se ha podido subir el archivo %s (%s): %s"
#, fuzzy, javascript-format
msgid "Item \"%s\" could not be downloaded: %s"
msgstr "No se ha podido abrir el archivo %s (%s): %s"
#, fuzzy
msgid "Items that cannot be decrypted"
msgstr "Elementos que no se pueden 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 de sincronización (elementos sincronizados/elementos totales)"
@@ -1744,18 +1816,6 @@ msgstr "No hay notas. Cree una pulsando en el botón (+)."
msgid "Delete these notes?"
msgstr "¿Desea borrar estas notas?"
msgid "Log"
msgstr "Log"
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 a la libreta..."
@@ -1778,8 +1838,35 @@ msgstr "Seleccione fecha"
msgid "Confirm"
msgstr "Confirmar"
msgid "Cancel synchronisation"
msgstr "Cancelar sincronización"
#, fuzzy, javascript-format
msgid "Notebook: %s"
msgstr "Libretas"
#, fuzzy
msgid "Encrypted notebooks cannot be renamed"
msgstr "Los elementos cifrados no pueden ser modificados"
#, fuzzy
msgid "New Notebook"
msgstr "Nueva libreta"
msgid "Configuration"
msgstr "Configuración"
#, javascript-format
msgid "Decrypting items: %d/%d"
msgstr "Descifrando elementos: %d/%d"
#, javascript-format
msgid "Fetching resources: %d/%d"
msgstr "Obteniendo refuersos: %d/%d"
#, fuzzy
msgid "All notes"
msgstr "¿Desea eliminar notas?"
msgid "Notebooks"
msgstr "Libretas"
msgid "Checking... Please wait."
msgstr "Comprobando... Por favor espere."
@@ -1821,6 +1908,54 @@ msgstr "Nuevas etiquetas:"
msgid "Type new tags or select from list"
msgstr "Escriba nuevas etiquetas o seleccionelas de la lista"
msgid "Warning"
msgstr ""
msgid ""
"In order to use file system synchronisation 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 "&Herramientas"
#, fuzzy
msgid "Sync Status"
msgstr "Estado"
msgid "Log"
msgstr "Log"
#, fuzzy
msgid "Creating report..."
msgstr "Creando nuevo %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 a long time 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"
@@ -1885,6 +2020,10 @@ msgstr "No se ha podido guardar esta libreta: %s"
msgid "Edit notebook"
msgstr "Editar libreta"
#, fuzzy
msgid "Enter notebook title"
msgstr "Título de libreta:"
msgid "Show all"
msgstr "Mostrar todo"
@@ -1909,10 +2048,32 @@ msgid "The Joplin mobile app does not currently support this type of link: %s"
msgstr ""
"La aplicación móvil de Joplin no soporta actualmente este tipo de enlace: %s"
#, javascript-format
msgid "Links with protocol \"%s\" are not supported"
msgstr ""
#, javascript-format
msgid "Unsupported image type: %s"
msgstr "Tipo de imagen no soportado: %s"
#, fuzzy, javascript-format
msgid "Updated: %s"
msgstr "Actualizado: %d."
msgid "View on map"
msgstr "Ver en un mapa"
msgid "Go to source URL"
msgstr "Ir a origen URL"
#, fuzzy
msgid "Attach..."
msgstr "Buscar..."
#, fuzzy
msgid "Choose an option"
msgstr "Mostrar opciones avanzadas"
msgid "Take photo"
msgstr "Tomar foto"
@@ -1931,23 +2092,19 @@ msgstr "Convertir a nota"
msgid "Convert to todo"
msgstr "Convertir a lista de tareas"
msgid "Hide metadata"
msgstr "Ocultar metadatos"
#, fuzzy
msgid "Properties"
msgstr "Propiedades de nota"
msgid "Show metadata"
msgstr "Mostrar metadatos"
msgid "View on map"
msgstr "Ver en un mapa"
msgid "Go to source URL"
msgstr "Ir a origen URL"
msgid "Add body"
msgstr ""
msgid "Edit"
msgstr "Editar"
msgid "Delete notebook"
msgstr "Borrar libreta"
#, fuzzy
msgid "Add title"
msgstr "título"
msgid "Login with OneDrive"
msgstr "Acceder con OneDrive"
@@ -1955,19 +2112,42 @@ 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 ""
"Pulse en el botón (+) para crear una nueva nota o libreta. Pulse en el menú "
"lateral para acceder a las libretas existentes."
#, fuzzy
#~ msgid "Permission to write to external storage"
#~ msgstr "Permiso para usar tu cámara"
msgid "You currently have no notebook. Create one by clicking on (+) button."
msgstr ""
"No hay ninguna libreta. Cree una nueva libreta pulsando en el botón (+)."
#~ msgid "Cancel synchronisation"
#~ msgstr "Cancelar sincronización"
msgid "Welcome"
msgstr "Bienvenido"
#~ msgid "Hide metadata"
#~ msgstr "Ocultar metadatos"
#~ msgid "Show metadata"
#~ msgstr "Mostrar metadatos"
#~ msgid "Delete notebook"
#~ msgstr "Borrar libreta"
#~ msgid ""
#~ "Click on the (+) button to create a new note or notebook. Click on the "
#~ "side menu to access your existing notebooks."
#~ msgstr ""
#~ "Pulse en el botón (+) para crear una nueva nota o libreta. Pulse en el "
#~ "menú lateral para acceder a las libretas existentes."
#~ msgid ""
#~ "You currently have no notebook. Create one by clicking on (+) button."
#~ msgstr ""
#~ "No hay ninguna libreta. Cree una nueva libreta pulsando en el botón (+)."
#~ msgid "Welcome"
#~ msgstr "Bienvenido"
#~ msgid "Separate each tag by a comma."
#~ msgstr "Separar cada etiqueta por una coma."
#~ msgid "Some items cannot be decrypted."
#~ msgstr "No se han podido descifrar algunos elementos."
#~ msgid "%s (%s): %s"
#~ msgstr "%s (%s): %s"
@@ -1985,9 +2165,6 @@ msgstr "Bienvenido"
#~ msgid "Remove?"
#~ msgstr "¿Borrar?"
#~ msgid "Delete notes?"
#~ msgstr "¿Desea eliminar notas?"
#~ msgid "State: %s."
#~ msgstr "Estado: «%s»."

View File

@@ -529,6 +529,10 @@ msgstr "Erakutsi erabilera datuak."
msgid "Fatal error:"
msgstr "Aio! Agur! :_( "
#, javascript-format
msgid "All potential ports are in use - please report the issue at %s"
msgstr ""
msgid ""
"The application has been authorised - you may now close this browser tab."
msgstr "Aplikazioak baimena hartu du - Orain fitxa hau zarratu dezakezu."
@@ -629,6 +633,25 @@ 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)"
@@ -646,6 +669,9 @@ msgstr ""
msgid "Check for updates..."
msgstr ""
msgid "Templates"
msgstr ""
msgid "Import"
msgstr "Inportatu"
@@ -692,12 +718,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"
@@ -732,6 +764,9 @@ msgstr "Web orria eta dokumentazioa (en)"
msgid "Make a donation"
msgstr "Web orria eta dokumentazioa (en)"
msgid "Toggle development tools"
msgstr ""
#, fuzzy, javascript-format
msgid "Open %s"
msgstr "On %s: %s"
@@ -958,9 +993,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:"
@@ -971,6 +1003,9 @@ msgstr "Berrizendatu"
msgid "Set alarm:"
msgstr "Ezarri alarma:"
msgid "Template file:"
msgstr ""
msgid "Layout"
msgstr "Diseinua"
@@ -984,8 +1019,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"
@@ -1007,6 +1043,9 @@ msgstr ""
msgid "Note History"
msgstr "Koadernoak"
msgid "Markup"
msgstr ""
msgid "Previous versions of this note"
msgstr ""
@@ -1078,9 +1117,6 @@ msgstr ""
msgid "Attach file"
msgstr "Erantsi fitxategia"
msgid "Tags"
msgstr "Etiketak"
msgid "Set alarm"
msgstr "Ezarri alarma"
@@ -1091,9 +1127,6 @@ msgstr "%s: %s"
msgid "Hyperlink"
msgstr ""
msgid "Code"
msgstr ""
msgid "Numbered List"
msgstr ""
@@ -1174,21 +1207,13 @@ msgstr "Ezabatu"
msgid "Rename"
msgstr "Berrizendatu"
msgid "Notebooks"
msgstr "Koadernoak"
#, fuzzy, javascript-format
msgid "Decrypting items: %d/%d"
msgstr "Itemak eskuratuta: %d%d."
#, fuzzy, javascript-format
msgid "Fetching resources: %d"
msgstr "Baliabideak: %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"
@@ -1395,6 +1420,62 @@ msgid ""
"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"
@@ -1413,6 +1494,12 @@ msgstr "Argia"
msgid "Dark"
msgstr "Iluna"
msgid "Solarized Light"
msgstr ""
msgid "Solarized Dark"
msgstr ""
#, fuzzy
msgid "Uncompleted to-dos on top"
msgstr "Bete gabeko zereginak erakutsi zerrendaren goiko partean"
@@ -1554,44 +1641,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 "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 "Custom TLS certificates"
msgstr ""
@@ -1700,6 +1749,14 @@ msgstr ""
msgid "Items that cannot be synchronised"
msgstr "Itemok ezin sinkronizatu"
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 ""
"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"
@@ -1708,13 +1765,15 @@ msgstr "Koadernoa ezin gorde daiteke: %s"
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 ""
"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)."
"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 ""
"Itemok gailuan geratuko dira baina ez dira sinkronizatuko. Horiek aurkitzeko "
"bilaketak egin titulu edo goiko parentesien arteko IDaren arabera."
msgid "Sync status (synced items / total items)"
msgstr "Sinkronizazio egoera (sinkronizatutako itemak/itemak guztira)"
@@ -1761,18 +1820,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"
@@ -1797,8 +1844,35 @@ 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, javascript-format
msgid "Decrypting items: %d/%d"
msgstr "Itemak eskuratuta: %d/%d"
#, fuzzy, javascript-format
msgid "Fetching resources: %d/%d"
msgstr "Baliabideak: %d/%d"
#, fuzzy
msgid "All notes"
msgstr "Ohar berria"
msgid "Notebooks"
msgstr "Koadernoak"
#, fuzzy
msgid "Checking... Please wait."
@@ -1836,6 +1910,54 @@ msgstr ""
msgid "Type new tags or select from list"
msgstr ""
msgid "Warning"
msgstr ""
msgid ""
"In order to use file system synchronisation 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 a long time 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"
@@ -1895,6 +2017,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 ""
@@ -1918,10 +2044,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"
@@ -1941,23 +2089,18 @@ msgstr "Oharra bihurtu"
msgid "Convert to todo"
msgstr "Zeregina bihurtu"
msgid "Hide metadata"
msgstr "Ezkutatu metadatuak"
msgid "Properties"
msgstr ""
msgid "Show metadata"
msgstr "Erakutsi metadatuak"
msgid "View on map"
msgstr "Ikusi mapan"
msgid "Go to source URL"
msgid "Add body"
msgstr ""
msgid "Edit"
msgstr "Editatu"
msgid "Delete notebook"
msgstr "Ezabatu koadernoa"
#, fuzzy
msgid "Add title"
msgstr "Titulu gabekoa"
msgid "Login with OneDrive"
msgstr "Login with OneDrive"
@@ -1965,18 +2108,37 @@ 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"

1991
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."
@@ -530,6 +530,12 @@ msgstr "Tapez `Joplin help` pour afficher l'aide."
msgid "Fatal error:"
msgstr "Erreur fatale :"
#, javascript-format
msgid "All potential ports are in use - please report the issue at %s"
msgstr ""
"Tous les ports sont en cours d'utilisation. Veuillez signaler ce problème "
"sur %s"
msgid ""
"The application has been authorised - you may now close this browser tab."
msgstr "Le logiciel a été autorisé. Vous pouvez maintenant fermer cet onglet."
@@ -627,6 +633,25 @@ 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)"
@@ -643,6 +668,9 @@ msgstr "Préférences…"
msgid "Check for updates..."
msgstr "Vérifier les mises à jour..."
msgid "Templates"
msgstr "Modèles"
msgid "Import"
msgstr "Importer"
@@ -660,7 +688,7 @@ msgid "Quit"
msgstr "Quitter"
msgid "Close Window"
msgstr ""
msgstr "Fermer la fenêtre"
msgid "&Edit"
msgstr "&Édition"
@@ -686,12 +714,18 @@ 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"
@@ -722,6 +756,9 @@ msgstr "Documentation en ligne"
msgid "Make a donation"
msgstr "Faire un don"
msgid "Toggle development tools"
msgstr "Monter/Cacher les outils de développement"
#, javascript-format
msgid "Open %s"
msgstr "Ouvrir %s"
@@ -959,9 +996,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 :"
@@ -971,6 +1005,10 @@ msgstr "Renommer étiquette :"
msgid "Set alarm:"
msgstr "Régler alarme :"
#, fuzzy
msgid "Template file:"
msgstr "Modèles"
msgid "Layout"
msgstr "Disposition"
@@ -983,8 +1021,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"
@@ -1005,32 +1043,36 @@ msgstr "Lieu"
msgid "URL"
msgstr "URL"
#, fuzzy
msgid "Note History"
msgstr "Liste de notes"
msgstr "Historique des notes"
msgid "Markup"
msgstr ""
msgid "Previous versions of this note"
msgstr ""
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 ""
msgstr "La note \"%s\" a été restaurée dans le carnet \"%s\"."
#, fuzzy
msgid "This note has no history"
msgstr "Cette note a été modifiée :"
msgstr "Cette note n'a pas d'historique"
msgid "Restore"
msgstr ""
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..."
@@ -1083,9 +1125,6 @@ msgstr "Insérer lien"
msgid "Attach file"
msgstr "Attacher un fichier"
msgid "Tags"
msgstr "Étiquettes"
msgid "Set alarm"
msgstr "Régler alarme"
@@ -1096,9 +1135,6 @@ msgstr "Dans : %s"
msgid "Hyperlink"
msgstr "Lien"
msgid "Code"
msgstr "Code"
msgid "Numbered List"
msgstr "Liste numérotée"
@@ -1177,21 +1213,13 @@ msgstr "Supprimer"
msgid "Rename"
msgstr "Renommer"
msgid "Notebooks"
msgstr "Carnets"
#, javascript-format
msgid "Decrypting items: %d/%d"
msgstr "Déchiffrement des objets : %d/%d"
#, javascript-format
msgid "Fetching resources: %d"
msgstr "Tél. ressources : %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"
@@ -1346,7 +1374,7 @@ msgstr "La synchronisation est déjà en cours. État : %s"
msgid ""
"Unknown item type downloaded - please upgrade Joplin to the latest version"
msgstr ""
msgstr "Objet inconnu téléchargé - veuillez mettre Joplin à jour"
msgid "Encrypted"
msgstr "Chiffré"
@@ -1394,6 +1422,63 @@ msgstr ""
"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"
@@ -1412,6 +1497,12 @@ msgstr "Clair"
msgid "Dark"
msgstr "Sombre"
msgid "Solarized Light"
msgstr ""
msgid "Solarized Dark"
msgstr ""
msgid "Uncompleted to-dos on top"
msgstr "Tâches non-terminées en haut"
@@ -1548,41 +1639,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 "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 "Custom TLS certificates"
msgstr "Certificats TLS personnalisés"
@@ -1601,19 +1657,18 @@ msgstr ""
msgid "Ignore TLS certificate errors"
msgstr "Ignorer les erreurs de certificats TLS"
#, fuzzy
msgid "Enable note history"
msgstr "Activer les notes de bas de page"
msgstr "Activer l'historique des notes"
msgid "days"
msgstr ""
msgstr "jours"
#, javascript-format
msgid "%d days"
msgstr ""
msgstr "%d jours"
msgid "Keep note history for"
msgstr ""
msgstr "Garder l'historique des notes pour"
#, javascript-format
msgid "Invalid option value: \"%s\". Possible values are: %s."
@@ -1685,19 +1740,11 @@ 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 ""
msgstr "Notes restaurées"
msgid "Items that cannot be synchronised"
msgstr "Objets qui ne peuvent pas être synchronisés"
#, fuzzy, javascript-format
msgid "%s (%s) could not be uploaded: %s"
msgstr "Ce fichier n'a pas pu être ouvert : %s"
#, fuzzy, javascript-format
msgid "Item \"%s\" could not be downloaded: %s"
msgstr "Ce fichier n'a pas pu être ouvert : %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 "
@@ -1707,6 +1754,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)"
@@ -1754,18 +1821,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..."
@@ -1788,8 +1843,32 @@ 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"
#, javascript-format
msgid "Decrypting items: %d/%d"
msgstr "Déchiffrement des objets : %d/%d"
#, javascript-format
msgid "Fetching resources: %d/%d"
msgstr "Tél. ressources : %d/%d"
msgid "All notes"
msgstr "Toutes les notes"
msgid "Notebooks"
msgstr "Carnets"
msgid "Checking... Please wait."
msgstr "Vérification... Veuillez attendre."
@@ -1831,6 +1910,55 @@ 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"
#, fuzzy
msgid ""
"In order to use file system synchronisation 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"
#, fuzzy
msgid ""
"Use this to rebuild the search index if there is a problem with search. It "
"may take a long time 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"
@@ -1894,6 +2022,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"
@@ -1918,10 +2049,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"
@@ -1940,23 +2091,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 "View on map"
msgstr "Voir sur carte"
msgid "Go to source URL"
msgstr "Aller à l'URL source"
msgid "Add body"
msgstr "Ajoutez le contenu"
msgid "Edit"
msgstr "Édition"
msgid "Delete notebook"
msgstr "Supprimer le carnet"
msgid "Add title"
msgstr "Ajoutez le titre"
msgid "Login with OneDrive"
msgstr "Se connecter à OneDrive"
@@ -1964,20 +2109,49 @@ 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 "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"
@@ -1998,9 +2172,6 @@ msgstr "Bienvenue"
#~ msgid "Remove?"
#~ msgstr "Supprimer ?"
#~ msgid "Delete notes?"
#~ msgstr "Supprimer les notes ?"
#~ msgid "State: %s."
#~ msgstr "État : %s."
@@ -2279,11 +2450,6 @@ msgstr "Bienvenue"
#~ msgid "use <notebook>"
#~ msgstr "Nouveau carnet"
#~ msgid "All potential ports are in use - please report the issue at %s"
#~ msgstr ""
#~ "Tous les ports sont en cours d'utilisation. Veuillez signaler ce problème "
#~ "sur %s"
#~ msgid "Synchronizing with directory \"%s\""
#~ msgstr "Synchronisation avec dossier \"%s\""

View File

@@ -524,6 +524,10 @@ msgstr "Escriba «joplin help» para obter información do uso."
msgid "Fatal error:"
msgstr "Erro fatal:"
#, javascript-format
msgid "All potential ports are in use - please report the issue at %s"
msgstr ""
msgid ""
"The application has been authorised - you may now close this browser tab."
msgstr "O aplicativo foi autorizado. Xa pode pechar esta lapela do navegador."
@@ -622,6 +626,26 @@ 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)"
@@ -639,6 +663,9 @@ msgstr ""
msgid "Check for updates..."
msgstr "Buscar actualizacións…"
msgid "Templates"
msgstr ""
msgid "Import"
msgstr "Importar"
@@ -684,12 +711,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"
@@ -725,6 +758,9 @@ msgstr "Sitio web e documentación"
msgid "Make a donation"
msgstr "Doar"
msgid "Toggle development tools"
msgstr ""
#, javascript-format
msgid "Open %s"
msgstr "Abrir %s"
@@ -948,9 +984,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:"
@@ -961,6 +994,9 @@ msgstr "Renomear"
msgid "Set alarm:"
msgstr "Estabelecer alarma:"
msgid "Template file:"
msgstr ""
msgid "Layout"
msgstr "Disposición"
@@ -973,8 +1009,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"
@@ -996,6 +1033,9 @@ msgstr ""
msgid "Note History"
msgstr "Cadernos"
msgid "Markup"
msgstr ""
msgid "Previous versions of this note"
msgstr ""
@@ -1068,9 +1108,6 @@ msgstr ""
msgid "Attach file"
msgstr "Anexar un ficheiro"
msgid "Tags"
msgstr "Etiquetas"
msgid "Set alarm"
msgstr "Estabelecer alarma"
@@ -1081,9 +1118,6 @@ msgstr "%s: %s"
msgid "Hyperlink"
msgstr ""
msgid "Code"
msgstr ""
msgid "Numbered List"
msgstr ""
@@ -1162,20 +1196,12 @@ msgstr "Eliminar"
msgid "Rename"
msgstr "Renomear"
msgid "Notebooks"
msgstr "Cadernos"
#, fuzzy, javascript-format
msgid "Decrypting items: %d/%d"
msgstr "Elementos obtidos: %d/%d."
#, fuzzy, javascript-format
msgid "Fetching resources: %d"
msgstr "Recursos: %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"
@@ -1381,6 +1407,58 @@ msgid ""
"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"
@@ -1399,6 +1477,12 @@ msgstr "Claro"
msgid "Dark"
msgstr "Escuro"
msgid "Solarized Light"
msgstr ""
msgid "Solarized Dark"
msgstr ""
msgid "Uncompleted to-dos on top"
msgstr "Tarefas sen completar arriba"
@@ -1538,40 +1622,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 "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 "Custom TLS certificates"
msgstr ""
@@ -1679,14 +1729,6 @@ msgstr ""
msgid "Items that cannot be synchronised"
msgstr "Elementos que non se poden sincronizar"
#, 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"
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 "
@@ -1696,6 +1738,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)"
@@ -1741,18 +1801,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..."
@@ -1777,8 +1825,35 @@ 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, javascript-format
msgid "Decrypting items: %d/%d"
msgstr "Elementos obtidos: %d/%d"
#, fuzzy, javascript-format
msgid "Fetching resources: %d/%d"
msgstr "Recursos: %d/%d"
#, fuzzy
msgid "All notes"
msgstr "nota"
msgid "Notebooks"
msgstr "Cadernos"
#, fuzzy
msgid "Checking... Please wait."
@@ -1816,6 +1891,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 synchronisation 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 a long time 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"
@@ -1874,6 +1997,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"
@@ -1897,10 +2024,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"
@@ -1920,23 +2069,18 @@ msgstr "Converter para nota"
msgid "Convert to todo"
msgstr "Converter para tarefa"
msgid "Hide metadata"
msgstr "Ocultar metadados"
msgid "Properties"
msgstr ""
msgid "Show metadata"
msgstr "Mostrar metadatos"
msgid "View on map"
msgstr "Ver no mapa"
msgid "Go to source URL"
msgid "Add body"
msgstr ""
msgid "Edit"
msgstr "Edtar"
msgid "Delete notebook"
msgstr "Eliminar caderno"
#, fuzzy
msgid "Add title"
msgstr "Sen título"
msgid "Login with OneDrive"
msgstr "Acceder con OneDrive"
@@ -1944,18 +2088,37 @@ 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"

View File

@@ -530,6 +530,10 @@ msgstr "Prikazuje informacije o korištenju."
msgid "Fatal error:"
msgstr "Fatalna greška:"
#, javascript-format
msgid "All potential ports are in use - please report the issue at %s"
msgstr ""
msgid ""
"The application has been authorised - you may now close this browser tab."
msgstr "Aplikacija je autorizirana - smiješ zatvoriti karticu preglednika."
@@ -626,6 +630,25 @@ 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)"
@@ -643,6 +666,9 @@ msgstr ""
msgid "Check for updates..."
msgstr ""
msgid "Templates"
msgstr ""
msgid "Import"
msgstr "Uvoz"
@@ -689,12 +715,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"
@@ -730,6 +762,9 @@ msgstr "Website i dokumentacija"
msgid "Make a donation"
msgstr "Website i dokumentacija"
msgid "Toggle development tools"
msgstr ""
#, fuzzy, javascript-format
msgid "Open %s"
msgstr "On %s: %s"
@@ -944,9 +979,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,6 +989,9 @@ msgstr "Preimenuj"
msgid "Set alarm:"
msgstr "Postavi upozorenje:"
msgid "Template file:"
msgstr ""
msgid "Layout"
msgstr "Izgled"
@@ -970,9 +1005,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 ""
@@ -994,6 +1028,9 @@ msgstr ""
msgid "Note History"
msgstr "Bilježnice"
msgid "Markup"
msgstr ""
msgid "Previous versions of this note"
msgstr ""
@@ -1065,9 +1102,6 @@ msgstr ""
msgid "Attach file"
msgstr "Priloži datoteku"
msgid "Tags"
msgstr "Oznake"
msgid "Set alarm"
msgstr "Postavi upozorenje"
@@ -1078,9 +1112,6 @@ msgstr "%s: %s"
msgid "Hyperlink"
msgstr ""
msgid "Code"
msgstr ""
msgid "Numbered List"
msgstr ""
@@ -1161,20 +1192,12 @@ msgstr "Obriši"
msgid "Rename"
msgstr "Preimenuj"
msgid "Notebooks"
msgstr "Bilježnice"
#, fuzzy, javascript-format
msgid "Decrypting items: %d/%d"
msgstr "Stvorene lokalne stavke: %d."
#, fuzzy, javascript-format
msgid "Fetching resources: %d"
msgstr "Resursi: %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"
@@ -1378,6 +1401,56 @@ msgid ""
"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"
@@ -1396,6 +1469,12 @@ msgstr "Svijetla"
msgid "Dark"
msgstr "Tamna"
msgid "Solarized Light"
msgstr ""
msgid "Solarized Dark"
msgstr ""
#, fuzzy
msgid "Uncompleted to-dos on top"
msgstr "Prikaži nezavršene zadatke na vrhu liste"
@@ -1536,38 +1615,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 "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 "Custom TLS certificates"
msgstr ""
@@ -1676,6 +1723,12 @@ msgstr ""
msgid "Items that cannot be synchronised"
msgstr "Stavke koje se ne mogu sinkronizirati"
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"
@@ -1684,10 +1737,14 @@ msgstr "Bilježnicu nije moguće snimiti: %s"
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 ""
"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)."
"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)"
@@ -1735,18 +1792,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..."
@@ -1771,8 +1816,35 @@ 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, javascript-format
msgid "Decrypting items: %d/%d"
msgstr "Stvorene lokalne stavke: %d/%d"
#, fuzzy, javascript-format
msgid "Fetching resources: %d/%d"
msgstr "Resursi: %d/%d"
#, fuzzy
msgid "All notes"
msgstr "Nova bilješka"
msgid "Notebooks"
msgstr "Bilježnice"
#, fuzzy
msgid "Checking... Please wait."
@@ -1810,6 +1882,54 @@ msgstr ""
msgid "Type new tags or select from list"
msgstr ""
msgid "Warning"
msgstr ""
msgid ""
"In order to use file system synchronisation 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 a long time 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"
@@ -1870,6 +1990,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 ""
@@ -1893,10 +2017,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"
@@ -1916,23 +2062,18 @@ msgstr "Pretvori u bilješku"
msgid "Convert to todo"
msgstr "Pretvori u zadatak"
msgid "Hide metadata"
msgstr "Sakrij metapodatke"
msgid "Properties"
msgstr ""
msgid "Show metadata"
msgstr "Prikaži metapodatke"
msgid "View on map"
msgstr "Vidi na karti"
msgid "Go to source URL"
msgid "Add body"
msgstr ""
msgid "Edit"
msgstr "Uredi"
msgid "Delete notebook"
msgstr "Obriši bilježnicu"
#, fuzzy
msgid "Add title"
msgstr "Nenaslovljen"
msgid "Login with OneDrive"
msgstr "Prijavi se u OneDrive"
@@ -1940,18 +2081,38 @@ 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"

File diff suppressed because it is too large Load Diff

View File

@@ -517,6 +517,10 @@ msgstr "`joplin help`を実行して使い方を表示します。"
msgid "Fatal error:"
msgstr "致命的なエラー:"
#, javascript-format
msgid "All potential ports are in use - please report the issue at %s"
msgstr ""
msgid ""
"The application has been authorised - you may now close this browser tab."
msgstr "アプリケーションは認証されました - ブラウザを閉じてもかまいません。"
@@ -617,6 +621,27 @@ 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)"
@@ -634,6 +659,9 @@ msgstr ""
msgid "Check for updates..."
msgstr "アップデートのチェック..."
msgid "Templates"
msgstr ""
msgid "Import"
msgstr "インポート"
@@ -678,12 +706,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 "すべてのノートを検索"
@@ -718,6 +752,9 @@ msgstr "Webサイトとドキュメント"
msgid "Make a donation"
msgstr "寄付する"
msgid "Toggle development tools"
msgstr ""
#, javascript-format
msgid "Open %s"
msgstr "%s を開く"
@@ -949,9 +986,6 @@ msgstr "ノートブックの題名:"
msgid "Add or remove tags:"
msgstr "タグの追加・削除:"
msgid "Separate each tag by a comma."
msgstr "それぞれのタグをカンマ(,)で区切ってください。"
msgid "Rename notebook:"
msgstr "ノートブックの名前を変更:"
@@ -961,6 +995,9 @@ msgstr "タグの変更:"
msgid "Set alarm:"
msgstr "アラームをセット:"
msgid "Template file:"
msgstr ""
msgid "Layout"
msgstr "レイアウト"
@@ -973,8 +1010,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 "パスワードの設定"
@@ -996,6 +1034,9 @@ msgstr "URL"
msgid "Note History"
msgstr "ノートブック"
msgid "Markup"
msgstr ""
msgid "Previous versions of this note"
msgstr ""
@@ -1068,9 +1109,6 @@ msgstr "ハイパーリンクの挿入"
msgid "Attach file"
msgstr "ファイルを添付する"
msgid "Tags"
msgstr "タグ"
msgid "Set alarm"
msgstr "アラームをセット"
@@ -1081,9 +1119,6 @@ msgstr "内: %s"
msgid "Hyperlink"
msgstr "ハイパーリンク"
msgid "Code"
msgstr "コード"
msgid "Numbered List"
msgstr "番号つきリスト"
@@ -1161,20 +1196,12 @@ msgstr "削除"
msgid "Rename"
msgstr "名前の変更"
msgid "Notebooks"
msgstr "ノートブック"
#, javascript-format
msgid "Decrypting items: %d/%d"
msgstr "復号中のアイテム: %d/%d"
#, javascript-format
msgid "Fetching resources: %d"
msgstr "取得中のリソース: %d"
msgid "Please select where the sync status should be exported to"
msgstr "同期状況の出力先を選択してください"
msgid "Retry"
msgstr ""
msgid "Add or remove tags"
msgstr "タグの追加と削除"
@@ -1377,6 +1404,58 @@ 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 "言語"
@@ -1395,6 +1474,12 @@ msgstr "明るい"
msgid "Dark"
msgstr "暗い"
msgid "Solarized Light"
msgstr ""
msgid "Solarized Dark"
msgstr ""
msgid "Uncompleted to-dos on top"
msgstr "未完のToDoをリストの上部に表示"
@@ -1531,40 +1616,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 "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 "Custom TLS certificates"
msgstr "TLS証明書のカスタマイズ"
@@ -1675,14 +1726,6 @@ msgstr ""
msgid "Items that cannot be synchronised"
msgstr "同期ができなかったアイテム"
#, 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"
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 "
@@ -1692,6 +1735,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 "同期状況 (同期済/総数)"
@@ -1737,18 +1798,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 "ノートブックへ移動..."
@@ -1771,8 +1820,35 @@ 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 "設定"
#, javascript-format
msgid "Decrypting items: %d/%d"
msgstr "復号中のアイテム: %d/%d"
#, javascript-format
msgid "Fetching resources: %d/%d"
msgstr "取得中のリソース: %d/%d"
#, fuzzy
msgid "All notes"
msgstr "ノート"
msgid "Notebooks"
msgstr "ノートブック"
msgid "Checking... Please wait."
msgstr "確認中...お待ちください。"
@@ -1814,6 +1890,54 @@ msgstr "新しいタグ:"
msgid "Type new tags or select from list"
msgstr "新しいタグを入力するか、リストから選択してください"
msgid "Warning"
msgstr ""
msgid ""
"In order to use file system synchronisation 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 a long time 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"
@@ -1876,6 +2000,10 @@ msgstr "ノートブックは保存できませんでした:%s"
msgid "Edit notebook"
msgstr "ノートブックの編集"
#, fuzzy
msgid "Enter notebook title"
msgstr "ノートブックの題名:"
msgid "Show all"
msgstr "すべて表示"
@@ -1899,10 +2027,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 "写真を撮影する"
@@ -1921,23 +2071,19 @@ msgstr "ノートに変換"
msgid "Convert to todo"
msgstr "ToDoに変換"
msgid "Hide metadata"
msgstr "メタデータを隠す"
#, fuzzy
msgid "Properties"
msgstr "ノートのプロパティ"
msgid "Show metadata"
msgstr "メタデータを表示"
msgid "View on map"
msgstr "地図上に表示"
msgid "Go to source URL"
msgstr "ソースURLに行く"
msgid "Add body"
msgstr ""
msgid "Edit"
msgstr "編集"
msgid "Delete notebook"
msgstr "ノートブックを削除"
#, fuzzy
msgid "Add title"
msgstr "タイトル"
msgid "Login with OneDrive"
msgstr "OneDriveログイン"
@@ -1945,20 +2091,43 @@ 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"

View File

@@ -470,6 +470,10 @@ msgstr ""
msgid "Fatal error:"
msgstr ""
#, javascript-format
msgid "All potential ports are in use - please report the issue at %s"
msgstr ""
msgid ""
"The application has been authorised - you may now close this browser tab."
msgstr ""
@@ -551,6 +555,25 @@ 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 ""
@@ -567,6 +590,9 @@ msgstr ""
msgid "Check for updates..."
msgstr ""
msgid "Templates"
msgstr ""
msgid "Import"
msgstr ""
@@ -610,12 +636,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 ""
@@ -646,6 +678,9 @@ msgstr ""
msgid "Make a donation"
msgstr ""
msgid "Toggle development tools"
msgstr ""
#, javascript-format
msgid "Open %s"
msgstr ""
@@ -854,9 +889,6 @@ msgstr ""
msgid "Add or remove tags:"
msgstr ""
msgid "Separate each tag by a comma."
msgstr ""
msgid "Rename notebook:"
msgstr ""
@@ -866,6 +898,9 @@ msgstr ""
msgid "Set alarm:"
msgstr ""
msgid "Template file:"
msgstr ""
msgid "Layout"
msgstr ""
@@ -878,7 +913,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"
@@ -900,6 +935,9 @@ msgstr ""
msgid "Note History"
msgstr ""
msgid "Markup"
msgstr ""
msgid "Previous versions of this note"
msgstr ""
@@ -969,9 +1007,6 @@ msgstr ""
msgid "Attach file"
msgstr ""
msgid "Tags"
msgstr ""
msgid "Set alarm"
msgstr ""
@@ -982,9 +1017,6 @@ msgstr ""
msgid "Hyperlink"
msgstr ""
msgid "Code"
msgstr ""
msgid "Numbered List"
msgstr ""
@@ -1060,20 +1092,12 @@ msgstr ""
msgid "Rename"
msgstr ""
msgid "Notebooks"
msgstr ""
#, javascript-format
msgid "Decrypting items: %d/%d"
msgstr ""
#, javascript-format
msgid "Fetching resources: %d"
msgstr ""
msgid "Please select where the sync status should be exported to"
msgstr ""
msgid "Retry"
msgstr ""
msgid "Add or remove tags"
msgstr ""
@@ -1263,6 +1287,56 @@ msgid ""
"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 ""
@@ -1281,6 +1355,12 @@ msgstr ""
msgid "Dark"
msgstr ""
msgid "Solarized Light"
msgstr ""
msgid "Solarized Dark"
msgstr ""
msgid "Uncompleted to-dos on top"
msgstr ""
@@ -1409,38 +1489,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 "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 "Custom TLS certificates"
msgstr ""
@@ -1540,6 +1588,12 @@ msgstr ""
msgid "Items that cannot be synchronised"
msgstr ""
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 ""
#, javascript-format
msgid "%s (%s) could not be uploaded: %s"
msgstr ""
@@ -1548,10 +1602,13 @@ msgstr ""
msgid "Item \"%s\" could not be downloaded: %s"
msgstr ""
msgid "Items that cannot be decrypted"
msgstr ""
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)."
"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)"
@@ -1599,18 +1656,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 ""
@@ -1633,7 +1678,31 @@ 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 ""
#, javascript-format
msgid "Decrypting items: %d/%d"
msgstr ""
#, javascript-format
msgid "Fetching resources: %d/%d"
msgstr ""
msgid "All notes"
msgstr ""
msgid "Notebooks"
msgstr ""
msgid "Checking... Please wait."
@@ -1669,6 +1738,49 @@ msgstr ""
msgid "Type new tags or select from list"
msgstr ""
msgid "Warning"
msgstr ""
msgid ""
"In order to use file system synchronisation 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 a long time 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"
@@ -1726,6 +1838,9 @@ msgstr ""
msgid "Edit notebook"
msgstr ""
msgid "Enter notebook title"
msgstr ""
msgid "Show all"
msgstr ""
@@ -1749,10 +1864,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 ""
@@ -1771,22 +1906,16 @@ msgstr ""
msgid "Convert to todo"
msgstr ""
msgid "Hide metadata"
msgid "Properties"
msgstr ""
msgid "Show metadata"
msgstr ""
msgid "View on map"
msgstr ""
msgid "Go to source URL"
msgid "Add body"
msgstr ""
msgid "Edit"
msgstr ""
msgid "Delete notebook"
msgid "Add title"
msgstr ""
msgid "Login with OneDrive"
@@ -1794,14 +1923,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 ""

File diff suppressed because it is too large Load Diff

View File

@@ -522,6 +522,10 @@ msgstr "Skriv `joplin help` for brukerinformasjon."
msgid "Fatal error:"
msgstr "Kritisk feil:"
#, javascript-format
msgid "All potential ports are in use - please report the issue at %s"
msgstr ""
msgid ""
"The application has been authorised - you may now close this browser tab."
msgstr "Applikasjonen er autorisert - du kan nå lukke denne nettleserenfanen."
@@ -618,6 +622,27 @@ msgstr "Krypteringsvalg"
msgid "Web clipper options"
msgstr "Web Clipper-innstillinger"
msgid "Create note from template"
msgstr ""
msgid "Create to-do from template"
msgstr ""
#, fuzzy
msgid "Insert template"
msgstr "Sett inn dato/tid"
#, fuzzy
msgid "Open template directory"
msgstr "Joplin-eksportert katalog"
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)"
@@ -634,6 +659,9 @@ msgstr ""
msgid "Check for updates..."
msgstr "Se etter oppdatering..."
msgid "Templates"
msgstr ""
msgid "Import"
msgstr "Importer"
@@ -677,12 +705,18 @@ msgstr "Kursiv"
msgid "Link"
msgstr "Lenke"
msgid "Code"
msgstr "Kode"
msgid "Insert Date Time"
msgstr "Sett inn dato/tid"
msgid "Edit in external editor"
msgstr "Rediger i ekstern editor"
msgid "Tags"
msgstr "Merkelapper"
msgid "Search in all the notes"
msgstr "Søk i alle notater"
@@ -713,6 +747,9 @@ msgstr "Nettsted og dokumentasjon"
msgid "Make a donation"
msgstr "Gi et bidrag"
msgid "Toggle development tools"
msgstr ""
#, javascript-format
msgid "Open %s"
msgstr "Åpne %s"
@@ -946,9 +983,6 @@ msgstr "Tittel på notatbok:"
msgid "Add or remove tags:"
msgstr "Legge til eller fjern merkelapper:"
msgid "Separate each tag by a comma."
msgstr "Separer hver merkelapp med komma."
msgid "Rename notebook:"
msgstr "Gi nytt navn til notatbok:"
@@ -958,6 +992,9 @@ msgstr "Gi nytt navn til merkelapp:"
msgid "Set alarm:"
msgstr "Angi alarm:"
msgid "Template file:"
msgstr ""
msgid "Layout"
msgstr "Visning"
@@ -970,8 +1007,9 @@ msgstr "Noen elementer kan ikke synkroniseres."
msgid "View them now"
msgstr "Vis nå"
msgid "Some items cannot be decrypted."
msgstr "Noen elementer kan ikke dekrypteres."
#, fuzzy
msgid "One or more master keys need a password."
msgstr "Skriv inn masterpassordet:"
msgid "Set the password"
msgstr "Sett passord"
@@ -994,6 +1032,9 @@ msgstr "URL"
msgid "Note History"
msgstr "Notatliste"
msgid "Markup"
msgstr ""
msgid "Previous versions of this note"
msgstr ""
@@ -1065,9 +1106,6 @@ msgstr "Sett inn hyperlenke"
msgid "Attach file"
msgstr "Legg ved fil"
msgid "Tags"
msgstr "Merkelapper"
msgid "Set alarm"
msgstr "Angi alarm"
@@ -1078,9 +1116,6 @@ msgstr "I: %s"
msgid "Hyperlink"
msgstr "Hyperlenke"
msgid "Code"
msgstr "Kode"
msgid "Numbered List"
msgstr "Nummerert liste"
@@ -1160,20 +1195,12 @@ msgstr "Slett"
msgid "Rename"
msgstr "Gi nytt navn"
msgid "Notebooks"
msgstr "Notatbøker"
#, javascript-format
msgid "Decrypting items: %d/%d"
msgstr "Dekrypterer elementer: %d/%d"
#, javascript-format
msgid "Fetching resources: %d"
msgstr "Henter ressurser: %d"
msgid "Please select where the sync status should be exported to"
msgstr "Velg hvor synkroniseringsstatusen skal eksporteres til"
msgid "Retry"
msgstr ""
msgid "Add or remove tags"
msgstr "Legg til eller fjern merkelapper"
@@ -1374,6 +1401,58 @@ msgstr ""
"innhold dit før du synkroniserer. Hvis ikke blir alle filer fjernet! Se FAQ "
"for flere detaljer: %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 å synkronisere til. Hvert synkroniseringsmål kan ha tilleggsparametere "
"som er navngitt som `sync.NUM.NAME` (dokumentert nedenfor)."
msgid "Directory to synchronise with (absolute path)"
msgstr "Katalog å synkronisere med (absolutt sti)"
msgid "Nextcloud WebDAV URL"
msgstr "Nextcloud WebDAV-URL"
msgid "Nextcloud username"
msgstr "Nextcloud-brukernavn"
msgid "Nextcloud password"
msgstr "Nextcloud-passord"
msgid "WebDAV URL"
msgstr "WebDAV-URL"
msgid "WebDAV username"
msgstr "WebDAV-brukernavn"
msgid "WebDAV password"
msgstr "WebDAV-passord"
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"
@@ -1392,6 +1471,12 @@ msgstr "Lys"
msgid "Dark"
msgstr "Mørk"
msgid "Solarized Light"
msgstr ""
msgid "Solarized Dark"
msgstr ""
msgid "Uncompleted to-dos on top"
msgstr "Uferdige gjøremål på topp"
@@ -1532,40 +1617,6 @@ msgstr ""
"Teksteditor som skal brukes til å åpne et notat. Hvis det ikke er satt vil "
"den prøve å automatisk velge standardprogram."
msgid "Show advanced options"
msgstr "Vis avanserte innstillinger"
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 å synkronisere til. Hvert synkroniseringsmål kan ha tilleggsparametere "
"som er navngitt som `sync.NUM.NAME` (dokumentert nedenfor)."
msgid "Directory to synchronise with (absolute path)"
msgstr "Katalog å synkronisere med (absolutt sti)"
msgid "Nextcloud WebDAV URL"
msgstr "Nextcloud WebDAV-URL"
msgid "Nextcloud username"
msgstr "Nextcloud-brukernavn"
msgid "Nextcloud password"
msgstr "Nextcloud-passord"
msgid "WebDAV URL"
msgstr "WebDAV-URL"
msgid "WebDAV username"
msgstr "WebDAV-brukernavn"
msgid "WebDAV password"
msgstr "WebDAV-passord"
msgid "Custom TLS certificates"
msgstr "Egendefinerte TLS-sertifikater"
@@ -1672,14 +1723,6 @@ msgstr ""
msgid "Items that cannot be synchronised"
msgstr "Elementer som ikke vil synkronisere"
#, fuzzy, javascript-format
msgid "%s (%s) could not be uploaded: %s"
msgstr "Filen kunne ikke åpnes: %s"
#, fuzzy, javascript-format
msgid "Item \"%s\" could not be downloaded: %s"
msgstr "Filen kunne ikke åpnes: %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 "
@@ -1689,6 +1732,24 @@ msgstr ""
"synkroniseringsmålet. For å finne disse elementene, enten søk etter tittel "
"eller ID (som vises i parentes over)."
#, fuzzy, javascript-format
msgid "%s (%s) could not be uploaded: %s"
msgstr "Filen kunne ikke åpnes: %s"
#, fuzzy, javascript-format
msgid "Item \"%s\" could not be downloaded: %s"
msgstr "Filen kunne ikke åpnes: %s"
#, fuzzy
msgid "Items that cannot be decrypted"
msgstr "Elementer som ikke vil synkronisere"
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 "Synkroniseringsstatus (synkroniserte elementer / totale elementer)"
@@ -1734,18 +1795,6 @@ msgstr "Det finnes enda ingen notater. Lag en ved å klikke på (+)-knappen."
msgid "Delete these notes?"
msgstr "Slett disse notatene?"
msgid "Log"
msgstr "Logg"
msgid "Export Debug Report"
msgstr "Eksporter feilsøkingsrapport"
msgid "Encryption Config"
msgstr "Krypteringsinnstillinger"
msgid "Configuration"
msgstr "Konfigurasjon"
msgid "Move to notebook..."
msgstr "Flytt til notatbok..."
@@ -1768,8 +1817,35 @@ msgstr "Velg dato"
msgid "Confirm"
msgstr "Bekreft"
msgid "Cancel synchronisation"
msgstr "Avbryt synkronisering"
#, fuzzy, javascript-format
msgid "Notebook: %s"
msgstr "Notatbøker"
#, fuzzy
msgid "Encrypted notebooks cannot be renamed"
msgstr "Krypterte elementer kan ikke modifiseres"
#, fuzzy
msgid "New Notebook"
msgstr "Ny notatbok"
msgid "Configuration"
msgstr "Konfigurasjon"
#, javascript-format
msgid "Decrypting items: %d/%d"
msgstr "Dekrypterer elementer: %d/%d"
#, javascript-format
msgid "Fetching resources: %d/%d"
msgstr "Henter ressurser: %d"
#, fuzzy
msgid "All notes"
msgstr "notat"
msgid "Notebooks"
msgstr "Notatbøker"
msgid "Checking... Please wait."
msgstr "Sjekker… Vennligst vent."
@@ -1811,6 +1887,54 @@ msgstr "Nye merkelapper:"
msgid "Type new tags or select from list"
msgstr "Skriv inn nye merkelapper eller velg fra listen"
msgid "Warning"
msgstr ""
msgid ""
"In order to use file system synchronisation your permission to write to "
"external storage is required."
msgstr ""
#, fuzzy
msgid "Information"
msgstr "Konfigurasjon"
msgid "Encryption Config"
msgstr "Krypteringsinnstillinger"
#, fuzzy
msgid "Tools"
msgstr "&Verktøy"
#, fuzzy
msgid "Sync Status"
msgstr "Status"
msgid "Log"
msgstr "Logg"
#, fuzzy
msgid "Creating report..."
msgstr "Oppretter nytt %s..."
msgid "Export Debug Report"
msgstr "Eksporter feilsøkingsrapport"
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 a long time depending on the number of notes."
msgstr ""
#, fuzzy
msgid "More information"
msgstr "Konfigurasjon"
msgid ""
"To work correctly, the app needs the following permissions. Please enable "
"them in your phone settings, in Apps > Joplin > Permissions"
@@ -1872,6 +1996,10 @@ msgstr "Denne notatboken kunne ikke lagres: %s"
msgid "Edit notebook"
msgstr "Rediger notatbok"
#, fuzzy
msgid "Enter notebook title"
msgstr "Tittel på notatbok:"
msgid "Show all"
msgstr "Vis alle"
@@ -1895,10 +2023,32 @@ msgstr "Ingen elementer med ID %s"
msgid "The Joplin mobile app does not currently support this type of link: %s"
msgstr "Joplins mobilapp støtter for tiden ikke denne type linker: %s"
#, javascript-format
msgid "Links with protocol \"%s\" are not supported"
msgstr ""
#, javascript-format
msgid "Unsupported image type: %s"
msgstr "Bildetypen er ikke støttet: %s"
#, fuzzy, javascript-format
msgid "Updated: %s"
msgstr "Oppdatert: %d."
msgid "View on map"
msgstr "Vis på kart"
msgid "Go to source URL"
msgstr "Gå til kilde-URL"
#, fuzzy
msgid "Attach..."
msgstr "Søk..."
#, fuzzy
msgid "Choose an option"
msgstr "Vis avanserte innstillinger"
msgid "Take photo"
msgstr "Ta bilde"
@@ -1917,23 +2067,19 @@ msgstr "Konverter til notat"
msgid "Convert to todo"
msgstr "Konverter til gjøremål"
msgid "Hide metadata"
msgstr "Skjul metadata"
#, fuzzy
msgid "Properties"
msgstr "Notategenskaper"
msgid "Show metadata"
msgstr "Vis metadata"
msgid "View on map"
msgstr "Vis på kart"
msgid "Go to source URL"
msgstr "Gå til kilde-URL"
msgid "Add body"
msgstr ""
msgid "Edit"
msgstr "Rediger"
msgid "Delete notebook"
msgstr "Slett notatbok"
#, fuzzy
msgid "Add title"
msgstr "tittel"
msgid "Login with OneDrive"
msgstr "Innlogging med OneDrive"
@@ -1941,18 +2087,41 @@ msgstr "Innlogging 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 ""
"Klikk på (+)-knappen for å lage et nytt notat eller en ny notatbok. Klikk på "
"sidepanelet for tilgang til dine eksisterende notatbøker."
#, fuzzy
#~ msgid "Permission to write to external storage"
#~ msgstr "Tillatelse til å bruke kamera"
msgid "You currently have no notebook. Create one by clicking on (+) button."
msgstr "Du har enda ingen notatbok. Opprett en ved å klikke på (+)-knappen."
#~ msgid "Cancel synchronisation"
#~ msgstr "Avbryt synkronisering"
msgid "Welcome"
msgstr "Velkommen"
#~ msgid "Hide metadata"
#~ msgstr "Skjul metadata"
#~ msgid "Show metadata"
#~ msgstr "Vis metadata"
#~ msgid "Delete notebook"
#~ msgstr "Slett notatbok"
#~ msgid ""
#~ "Click on the (+) button to create a new note or notebook. Click on the "
#~ "side menu to access your existing notebooks."
#~ msgstr ""
#~ "Klikk på (+)-knappen for å lage et nytt notat eller en ny notatbok. Klikk "
#~ "på sidepanelet for tilgang til dine eksisterende notatbøker."
#~ msgid ""
#~ "You currently have no notebook. Create one by clicking on (+) button."
#~ msgstr "Du har enda ingen notatbok. Opprett en ved å klikke på (+)-knappen."
#~ msgid "Welcome"
#~ msgstr "Velkommen"
#~ msgid "Separate each tag by a comma."
#~ msgstr "Separer hver merkelapp med komma."
#~ msgid "Some items cannot be decrypted."
#~ msgstr "Noen elementer kan ikke dekrypteres."
#~ msgid "%s (%s): %s"
#~ msgstr "%s (%s): %s"

View File

@@ -531,6 +531,10 @@ msgstr "Toont gebruiksinformatie."
msgid "Fatal error:"
msgstr "Fatale fout:"
#, javascript-format
msgid "All potential ports are in use - please report the issue at %s"
msgstr ""
msgid ""
"The application has been authorised - you may now close this browser tab."
msgstr "De applicatie is geauthenticeerd - U kan deze tab sluiten."
@@ -631,6 +635,25 @@ 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)"
@@ -648,6 +671,9 @@ msgstr ""
msgid "Check for updates..."
msgstr ""
msgid "Templates"
msgstr ""
msgid "Import"
msgstr "Importeer"
@@ -694,12 +720,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"
@@ -734,6 +766,9 @@ msgstr "Website en documentatie"
msgid "Make a donation"
msgstr "Website en documentatie"
msgid "Toggle development tools"
msgstr ""
#, fuzzy, javascript-format
msgid "Open %s"
msgstr "Op %s: %s"
@@ -960,9 +995,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:"
@@ -973,6 +1005,9 @@ msgstr "Hernoem"
msgid "Set alarm:"
msgstr "Stel melding in:"
msgid "Template file:"
msgstr ""
msgid "Layout"
msgstr "Layout"
@@ -986,8 +1021,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"
@@ -1011,6 +1047,9 @@ msgstr ""
msgid "Note History"
msgstr "Notitieboeken"
msgid "Markup"
msgstr ""
msgid "Previous versions of this note"
msgstr ""
@@ -1082,9 +1121,6 @@ msgstr ""
msgid "Attach file"
msgstr "Voeg bestand toe"
msgid "Tags"
msgstr "Tags"
msgid "Set alarm"
msgstr "Zet melding"
@@ -1095,9 +1131,6 @@ msgstr "%s: %s"
msgid "Hyperlink"
msgstr ""
msgid "Code"
msgstr ""
msgid "Numbered List"
msgstr ""
@@ -1179,20 +1212,12 @@ msgstr "Verwijderen"
msgid "Rename"
msgstr "Hernoem"
msgid "Notebooks"
msgstr "Notitieboeken"
#, fuzzy, javascript-format
msgid "Decrypting items: %d/%d"
msgstr "Opgehaalde items: %d/%d."
#, fuzzy, javascript-format
msgid "Fetching resources: %d"
msgstr "Middelen: %d."
msgid "Please select where the sync status should be exported to"
msgstr "Selecteer waar de synchronisatie status naar geëxporteerd moet worden"
msgid "Retry"
msgstr ""
msgid "Add or remove tags"
msgstr "Voeg tag toe of verwijder tag"
@@ -1400,6 +1425,58 @@ msgid ""
"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"
@@ -1418,6 +1495,12 @@ msgstr "Licht"
msgid "Dark"
msgstr "Donker"
msgid "Solarized Light"
msgstr ""
msgid "Solarized Dark"
msgstr ""
#, fuzzy
msgid "Uncompleted to-dos on top"
msgstr "Toon onvoltooide to-do's aan de top van de lijsten"
@@ -1559,40 +1642,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 "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 "Custom TLS certificates"
msgstr ""
@@ -1701,14 +1750,6 @@ msgstr ""
msgid "Items that cannot be synchronised"
msgstr "Items die niet gesynchroniseerd kunnen worden"
#, 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"
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 "
@@ -1718,6 +1759,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)"
@@ -1764,18 +1823,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..."
@@ -1800,8 +1847,35 @@ 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, javascript-format
msgid "Decrypting items: %d/%d"
msgstr "Opgehaalde items: %d/%d"
#, fuzzy, javascript-format
msgid "Fetching resources: %d/%d"
msgstr "Middelen: %d/%d"
#, fuzzy
msgid "All notes"
msgstr "Nieuwe notitie"
msgid "Notebooks"
msgstr "Notitieboeken"
#, fuzzy
msgid "Checking... Please wait."
@@ -1839,6 +1913,54 @@ msgstr ""
msgid "Type new tags or select from list"
msgstr ""
msgid "Warning"
msgstr ""
msgid ""
"In order to use file system synchronisation 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 a long time 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"
@@ -1898,6 +2020,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 ""
@@ -1921,10 +2047,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"
@@ -1944,23 +2092,18 @@ msgstr "Converteer naar notitie"
msgid "Convert to todo"
msgstr "Converteer naar to-do"
msgid "Hide metadata"
msgstr "Verberg metadata"
msgid "Properties"
msgstr ""
msgid "Show metadata"
msgstr "Toon metadata"
msgid "View on map"
msgstr "Toon op de kaart"
msgid "Go to source URL"
msgid "Add body"
msgstr ""
msgid "Edit"
msgstr "Bewerk"
msgid "Delete notebook"
msgstr "Verwijder notitieboek"
#, fuzzy
msgid "Add title"
msgstr "Untitled"
msgid "Login with OneDrive"
msgstr "Log in met OneDrive"
@@ -1968,20 +2111,39 @@ 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"

File diff suppressed because it is too large Load Diff

2160
CliClient/locales/pl_PL.po Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -14,7 +14,7 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: Poedit 2.2.1\n"
"X-Generator: Poedit 2.0.7\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
msgid "To delete a tag, untag the associated notes."
@@ -124,13 +124,12 @@ msgstr "Marca uma tarefa como feita."
msgid "Note is not a to-do: \"%s\""
msgstr "Nota não é uma tarefa: \"%s\""
#, fuzzy
msgid ""
"Manages E2EE configuration. Commands are `enable`, `disable`, `decrypt`, "
"`status`, `decrypt-file` and `target-status`."
msgstr ""
"Gerencia a configuração E2EE. Os comandos são `enable`, `disable`, "
"`decrypt`, `status` e `target-status`."
"`decrypt`, `status`, `decrypt-file` e `target-status`."
msgid "Enter master password:"
msgstr "Entre a senha master:"
@@ -528,6 +527,10 @@ msgstr "Digite 'joplin help' para informações de uso."
msgid "Fatal error:"
msgstr "Erro fatal:"
#, javascript-format
msgid "All potential ports are in use - please report the issue at %s"
msgstr ""
msgid ""
"The application has been authorised - you may now close this browser tab."
msgstr ""
@@ -584,18 +587,16 @@ msgid "Exporting to \"%s\" as \"%s\" format. Please wait..."
msgstr "Exportando para \"%s\" com o formato \"%s\". Por favor, aguarde..."
msgid "Sidebar"
msgstr ""
msgstr "Barra Lateral"
msgid "Note list"
msgstr ""
msgstr "Lista de notas"
#, fuzzy
msgid "Note title"
msgstr "Título do caderno:"
msgstr "Título da Nota:"
#, fuzzy
msgid "Note body"
msgstr "Cadernos"
msgstr "Corpo da Nota"
#, javascript-format
msgid "Importing from \"%s\" as \"%s\" format. Please wait..."
@@ -628,23 +629,46 @@ msgstr "Opções de Encriptação"
msgid "Web clipper options"
msgstr "Opções do Web clipper"
msgid "Create note from template"
msgstr ""
msgid "Create to-do from template"
msgstr ""
#, fuzzy
msgid "Insert template"
msgstr "Inserir Data e Hora"
#, fuzzy
msgid "Open template directory"
msgstr "Diretório de Exportação 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 "Arquivo"
msgstr "&Arquivo"
msgid "About Joplin"
msgstr "Sobre o Joplin"
msgid "Preferences..."
msgstr ""
msgstr "Preferências..."
msgid "Check for updates..."
msgstr "Verificar atualizações..."
msgid "Templates"
msgstr ""
msgid "Import"
msgstr "Importar"
@@ -662,11 +686,10 @@ msgid "Quit"
msgstr "Sair"
msgid "Close Window"
msgstr ""
msgstr "Fechar Janela"
#, fuzzy
msgid "&Edit"
msgstr "Editar"
msgstr "&Editar"
msgid "Copy"
msgstr "Copiar"
@@ -687,7 +710,10 @@ msgid "Italic"
msgstr "Itálico"
msgid "Link"
msgstr ""
msgstr "Link"
msgid "Code"
msgstr "Código"
msgid "Insert Date Time"
msgstr "Inserir Data e Hora"
@@ -695,15 +721,17 @@ msgstr "Inserir Data e Hora"
msgid "Edit in external editor"
msgstr "Editar com editor externo"
msgid "Tags"
msgstr "Tags"
msgid "Search in all the notes"
msgstr "Pesquisar em todas as notas"
msgid "Search in current note"
msgstr "Pesquisar na nota atual"
#, fuzzy
msgid "&View"
msgstr "Visualizar"
msgstr "&Visualizar"
msgid "Toggle sidebar"
msgstr "Alternar barra lateral"
@@ -711,17 +739,14 @@ msgstr "Alternar barra lateral"
msgid "Toggle editor layout"
msgstr "Alternar layout do editor"
#, fuzzy
msgid "Focus"
msgstr "Focar no corpo"
msgstr "Focar"
#, fuzzy
msgid "&Tools"
msgstr "Ferramentas"
msgstr "&Ferramentas"
#, fuzzy
msgid "&Help"
msgstr "Ajuda"
msgstr "&Ajuda"
msgid "Website and documentation"
msgstr "Website e documentação"
@@ -729,6 +754,9 @@ msgstr "Website e documentação"
msgid "Make a donation"
msgstr "Fazer uma doação"
msgid "Toggle development tools"
msgstr ""
#, javascript-format
msgid "Open %s"
msgstr "Abrir %s"
@@ -747,18 +775,18 @@ msgstr "A versão atual está atualizada."
#, javascript-format
msgid "%s (pre-release)"
msgstr ""
msgstr "%s (pre-release)"
msgid "An update is available, do you want to download it now?"
msgstr "Uma atualização está disponível, você quer baixar agora?"
#, javascript-format
msgid "Your version: %s"
msgstr ""
msgstr "Sua versão: %s"
#, javascript-format
msgid "New version: %s"
msgstr ""
msgstr "Nova versão: %s"
msgid "Yes"
msgstr "Sim"
@@ -842,7 +870,7 @@ msgid "Check synchronisation configuration"
msgstr "Verificar a configuração da sincronização"
msgid "Browse..."
msgstr ""
msgstr "Navegar..."
msgid "Apply"
msgstr "Aplicar"
@@ -937,9 +965,8 @@ msgstr "Status"
msgid "Encryption is:"
msgstr "Encriptação está:"
#, fuzzy
msgid "Usage"
msgstr "Uso: %s"
msgstr "Uso"
msgid "Back"
msgstr "Voltar"
@@ -962,9 +989,6 @@ msgstr "Título do caderno:"
msgid "Add or remove tags:"
msgstr "Adicionar ou remover tags:"
msgid "Separate each tag by a comma."
msgstr "Separe cada tag por vírgula."
msgid "Rename notebook:"
msgstr "Renomear caderno:"
@@ -974,6 +998,9 @@ msgstr "Renomear tag:"
msgid "Set alarm:"
msgstr "Definir alarme:"
msgid "Template file:"
msgstr ""
msgid "Layout"
msgstr "Layout"
@@ -986,8 +1013,9 @@ msgstr "Alguns itens não podem ser sincronizados."
msgid "View them now"
msgstr "Visualizar agora"
msgid "Some items cannot be decrypted."
msgstr "Alguns itens não podem ser decriptados."
#, fuzzy
msgid "One or more master keys need a password."
msgstr "Entre a senha master:"
msgid "Set the password"
msgstr "Configurar a senha"
@@ -1005,32 +1033,35 @@ msgstr "Localização"
msgid "URL"
msgstr "URL"
#, fuzzy
msgid "Note History"
msgstr "Cadernos"
msgstr "Histórico da Nota"
msgid "Markup"
msgstr ""
msgid "Previous versions of this note"
msgstr ""
msgstr "Versões anteriores desta nota"
msgid "Note properties"
msgstr "Propriedades da nota"
#, javascript-format
msgid "The note \"%s\" has been successfully restored to the notebook \"%s\"."
msgstr ""
msgstr "A nota \"%s\" foi restaurada com sucesso no caderno \"%s\"."
#, fuzzy
msgid "This note has no history"
msgstr "Esta nota foi modificada:"
msgstr "Esta nota não tem histórico"
msgid "Restore"
msgstr ""
msgstr "Restaurar"
#, 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 ""
"Clique \"%s\" para restaurar a nota. Ela será copiada no caderno com nomes "
"\"%s\". A versão atual da nota não será substituída ou modificada."
msgid "Open..."
msgstr "Abrir..."
@@ -1064,7 +1095,7 @@ msgstr ""
"e edite a nota."
msgid "Only one note can be printed or exported to PDF at a time."
msgstr ""
msgstr "Só uma nota pode ser impressa ou exportada para PDF de cada vez."
msgid "strong text"
msgstr "texto forte"
@@ -1081,9 +1112,6 @@ msgstr "Inserir Hiperlink"
msgid "Attach file"
msgstr "Anexar arquivo"
msgid "Tags"
msgstr "Tags"
msgid "Set alarm"
msgstr "Definir alarme"
@@ -1094,9 +1122,6 @@ msgstr "Em: %s"
msgid "Hyperlink"
msgstr "Hiperlink"
msgid "Code"
msgstr "Código"
msgid "Numbered List"
msgstr "Lista numerada"
@@ -1152,18 +1177,19 @@ msgstr "Opções de Encriptação"
msgid "Clipper Options"
msgstr "Opções do clipper"
#, fuzzy, javascript-format
#, javascript-format
msgid ""
"Delete notebook \"%s\"?\n"
"\n"
"All notes and sub-notebooks within this notebook will also be deleted."
msgstr ""
"Excluir o caderno? Todas as notas e sub-cadernos dentro deste também serão "
"excluídas."
"Excluir o caderno\"%s\"?\n"
"\n"
"Todas as notas e sub-cadernos dentro deste também serão excluídos."
#, fuzzy, javascript-format
#, javascript-format
msgid "Remove tag \"%s\" from all notes?"
msgstr "Remover esta tag de todas as notas?"
msgstr "Remover a tag \"%s\" de todas as notas?"
msgid "Remove this search from the sidebar?"
msgstr "Remover essa pesquisa da barra lateral?"
@@ -1174,22 +1200,14 @@ msgstr "Excluir"
msgid "Rename"
msgstr "Renomear"
msgid "Notebooks"
msgstr "Cadernos"
#, javascript-format
msgid "Decrypting items: %d/%d"
msgstr "Decriptando itens: %d/%d"
#, javascript-format
msgid "Fetching resources: %d"
msgstr "Buscando recursos: %d"
msgid "Please select where the sync status should be exported to"
msgstr ""
"Favor selecionar o local para onde o status de sincronia deveria ser "
"exportado"
msgid "Retry"
msgstr ""
msgid "Add or remove tags"
msgstr "Adicionar ou remover tags"
@@ -1212,21 +1230,23 @@ msgstr "Alternar para o tipo Tarefa"
msgid "Copy Markdown link"
msgstr "Copiar link de Markdown"
#, fuzzy, javascript-format
#, javascript-format
msgid "Delete note \"%s\"?"
msgstr "Apagar o caderno \"%s\"?"
msgstr "Apagar a nota \"%s\"?"
#, fuzzy, javascript-format
#, javascript-format
msgid "Delete these %d notes?"
msgstr "Excluir estas notas?"
msgstr "Excluir estas %d notas?"
msgid ""
"Type a note title to jump to it. Or type # followed by a tag name, or @ "
"followed by a notebook name."
msgstr ""
"Digite um título de nota para pular pra ela. Ou digite # seguido por um nome "
"de tag, ou @ seguido por um nome de caderno."
msgid "Goto Anything..."
msgstr ""
msgstr "Ir para qualquer coisa..."
#, javascript-format
msgid "Usage: %s"
@@ -1343,6 +1363,8 @@ msgstr "Sincronização já em andamento. Estado: %s"
msgid ""
"Unknown item type downloaded - please upgrade Joplin to the latest version"
msgstr ""
"Tipo de item desconhecido baixado - por favor, atualize o Joplin para a "
"última versão"
msgid "Encrypted"
msgstr "Encriptado"
@@ -1391,6 +1413,58 @@ msgstr ""
"conteúdo para lá antes de sincronizar, do contrário todos os seus arquivos "
"serão removidos! Veja o FAQ para mais detalhes: %s"
msgid "Synchronisation target"
msgstr "Alvo de sincronização"
msgid ""
"The target to synchonise to. Each sync target may have additional parameters "
"which are named as `sync.NUM.NAME` (all documented below)."
msgstr ""
"O alvo para onde sincronizar. Cada alvo pode ter parâmetros adicionais que "
"são nomeados como `sync.NUM.NAME` (todos documentados abaixo)."
msgid "Directory to synchronise with (absolute path)"
msgstr "Diretório para sincronizar (caminho absoluto)"
msgid "Nextcloud WebDAV URL"
msgstr "Nextcloud WebDAV URL"
msgid "Nextcloud username"
msgstr "Usuário da Nextcloud"
msgid "Nextcloud password"
msgstr "Senha da Nextcloud"
msgid "WebDAV URL"
msgstr "WebDAV URL"
msgid "WebDAV username"
msgstr "Usuário do WebDAV"
msgid "WebDAV password"
msgstr "Senha 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"
@@ -1409,6 +1483,12 @@ msgstr "Light"
msgid "Dark"
msgstr "Dark"
msgid "Solarized Light"
msgstr ""
msgid "Solarized Dark"
msgstr ""
msgid "Uncompleted to-dos on top"
msgstr "Mostrar tarefas incompletas no topo"
@@ -1421,7 +1501,6 @@ msgstr "Ordenar notas por"
msgid "Reverse sort order"
msgstr "Inverter ordem de classificação"
#, fuzzy
msgid "Sort notebooks by"
msgstr "Ordenar notas por"
@@ -1441,41 +1520,40 @@ msgid "When creating a new note:"
msgstr "Quando criar uma nota nova:"
msgid "Enable soft breaks"
msgstr ""
msgstr "Habilitar soft breaks"
#, fuzzy
msgid "Enable math expressions"
msgstr "Habilitar encriptação"
msgstr "Habilitar expressões matemáticas"
msgid "Enable ==mark== syntax"
msgstr ""
msgstr "Habilitar sintaxe ==marcador== "
msgid "Enable footnotes"
msgstr ""
msgstr "Habilitar notas de rodapé"
msgid "Enable table of contents extension"
msgstr ""
msgstr "Habilitar extensão de tabela de conteúdo"
msgid "Enable ~sub~ syntax"
msgstr ""
msgstr "Habilitar sintaxe ~sub~"
msgid "Enable ^sup^ syntax"
msgstr ""
msgstr "Habilitar sintaxe ^sup^ "
msgid "Enable deflist syntax"
msgstr ""
msgstr "Habilitar sintaxe de deflist "
msgid "Enable abbreviation syntax"
msgstr ""
msgstr "Habilitar sintaxe de abreviações"
msgid "Enable markdown emoji"
msgstr ""
msgstr "Habilitar emojis em markdown "
msgid "Enable ++insert++ syntax"
msgstr ""
msgstr "Habilitar sintaxe ++inserir++ "
msgid "Enable multimarkdown table extension"
msgstr ""
msgstr "Habilitar extensão de tabela de multimarkdown "
msgid "Show tray icon"
msgstr "Exibir tray icon"
@@ -1515,11 +1593,11 @@ msgid "Automatically update the application"
msgstr "Atualizar automaticamente o aplicativo"
msgid "Get pre-releases when checking for updates"
msgstr ""
msgstr "Obter pre-releases quando for checar atualizações"
#, javascript-format
msgid "See the pre-release page for more details: %s"
msgstr ""
msgstr "Ver página de pre-release para mais detalhes: %s"
msgid "Synchronisation interval"
msgstr "Intervalo de sincronização"
@@ -1547,40 +1625,6 @@ msgstr ""
"nota. Se nenhum for indicado, ele tentará detectar automaticamente o editor "
"padrão."
msgid "Show advanced options"
msgstr "Mostrar opções avançadas"
msgid "Synchronisation target"
msgstr "Alvo de sincronização"
msgid ""
"The target to synchonise to. Each sync target may have additional parameters "
"which are named as `sync.NUM.NAME` (all documented below)."
msgstr ""
"O alvo para onde sincronizar. Cada alvo pode ter parâmetros adicionais que "
"são nomeados como `sync.NUM.NAME` (todos documentados abaixo)."
msgid "Directory to synchronise with (absolute path)"
msgstr "Diretório para sincronizar (caminho absoluto)"
msgid "Nextcloud WebDAV URL"
msgstr "Nextcloud WebDAV URL"
msgid "Nextcloud username"
msgstr "Usuário da Nextcloud"
msgid "Nextcloud password"
msgstr "Senha da Nextcloud"
msgid "WebDAV URL"
msgstr "WebDAV URL"
msgid "WebDAV username"
msgstr "Usuário do WebDAV"
msgid "WebDAV password"
msgstr "Senha do WebDAV"
msgid "Custom TLS certificates"
msgstr "Certificados TLS customizados"
@@ -1599,45 +1643,40 @@ msgstr ""
msgid "Ignore TLS certificate errors"
msgstr "Ignorar erros de certificados TLS"
#, fuzzy
msgid "Enable note history"
msgstr "Habilitar encriptação"
msgstr "Habilitar histórico de notas"
msgid "days"
msgstr ""
msgstr "dias"
#, javascript-format
msgid "%d days"
msgstr ""
msgstr "%d dias"
msgid "Keep note history for"
msgstr ""
msgstr "Manter histórico de nota por"
#, javascript-format
msgid "Invalid option value: \"%s\". Possible values are: %s."
msgstr "Valor da opção inválida: \"%s\". Os valores possíveis são: %s."
#, fuzzy
msgid "General"
msgstr "Opções Gerais"
msgstr "Geral"
#, fuzzy
msgid "Synchronisation"
msgstr "Status de sincronização"
msgstr "Sincronização"
msgid "Appearance"
msgstr ""
msgstr "Aparência"
#, fuzzy
msgid "Note"
msgstr "Cadernos"
msgstr "Nota"
msgid "Plugins"
msgstr ""
msgstr "Plugins"
#, fuzzy
msgid "Application"
msgstr "Localização"
msgstr "Aplicação"
#, javascript-format
msgid "The tag \"%s\" already exists. Please choose a different name."
@@ -1688,19 +1727,11 @@ msgstr ""
"Por favor, especifique o caderno para onde as notas deveriam ser importadas."
msgid "Restored Notes"
msgstr ""
msgstr "Notas restauradas"
msgid "Items that cannot be synchronised"
msgstr "Os itens não podem ser sincronizados"
#, fuzzy, javascript-format
msgid "%s (%s) could not be uploaded: %s"
msgstr "Este arquivo não pôde ser aberto: %s"
#, fuzzy, javascript-format
msgid "Item \"%s\" could not be downloaded: %s"
msgstr "Este arquivo não pôde ser aberto: %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 "
@@ -1710,6 +1741,24 @@ msgstr ""
"sincronização. Para encontrar esses itens, ou pesquise pelo título ou pelo "
"ID (que é exibido nos colchetes acima)"
#, javascript-format
msgid "%s (%s) could not be uploaded: %s"
msgstr "%s (%s) não pôde ser enviado: %s"
#, javascript-format
msgid "Item \"%s\" could not be downloaded: %s"
msgstr "Item \"%s\" não pôde ser baixado: %s"
#, fuzzy
msgid "Items that cannot be decrypted"
msgstr "Os itens não podem ser sincronizados"
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 de sincronização (sincronizados / totais)"
@@ -1755,18 +1804,6 @@ msgstr "Atualmente, não há notas. Crie uma, clicando no botão (+)."
msgid "Delete these notes?"
msgstr "Excluir estas notas?"
msgid "Log"
msgstr "Log"
msgid "Export Debug Report"
msgstr "Exportar Relatório de Debug"
msgid "Encryption Config"
msgstr "Configuração de Encriptação"
msgid "Configuration"
msgstr "Configuração"
msgid "Move to notebook..."
msgstr "Mover para o caderno..."
@@ -1789,8 +1826,35 @@ msgstr "Selecionar data"
msgid "Confirm"
msgstr "Confirmar"
msgid "Cancel synchronisation"
msgstr "Cancelar sincronização"
#, fuzzy, javascript-format
msgid "Notebook: %s"
msgstr "Cadernos"
#, fuzzy
msgid "Encrypted notebooks cannot be renamed"
msgstr "Itens encriptados não podem ser modificados"
#, fuzzy
msgid "New Notebook"
msgstr "Novo caderno"
msgid "Configuration"
msgstr "Configuração"
#, javascript-format
msgid "Decrypting items: %d/%d"
msgstr "Decriptando itens: %d/%d"
#, fuzzy, javascript-format
msgid "Fetching resources: %d/%d"
msgstr "Buscando recursos: %d"
#, fuzzy
msgid "All notes"
msgstr "Excluir notas?"
msgid "Notebooks"
msgstr "Cadernos"
msgid "Checking... Please wait."
msgstr "Verificando... Por favor aguarde."
@@ -1833,6 +1897,54 @@ msgstr "Novas tags:"
msgid "Type new tags or select from list"
msgstr "Digite novsa tags, ou selecione da lista"
msgid "Warning"
msgstr ""
msgid ""
"In order to use file system synchronisation your permission to write to "
"external storage is required."
msgstr ""
#, fuzzy
msgid "Information"
msgstr "Configuração"
msgid "Encryption Config"
msgstr "Configuração de Encriptação"
#, fuzzy
msgid "Tools"
msgstr "&Ferramentas"
#, fuzzy
msgid "Sync Status"
msgstr "Status"
msgid "Log"
msgstr "Log"
#, fuzzy
msgid "Creating report..."
msgstr "Criando novo %s..."
msgid "Export Debug Report"
msgstr "Exportar Relatório de Debug"
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 a long time depending on the number of notes."
msgstr ""
#, fuzzy
msgid "More information"
msgstr "Configuração"
msgid ""
"To work correctly, the app needs the following permissions. Please enable "
"them in your phone settings, in Apps > Joplin > Permissions"
@@ -1861,18 +1973,17 @@ msgstr "Site do Joplin"
#, javascript-format
msgid "Database v%s"
msgstr ""
msgstr "Banco de dados v%s"
#, fuzzy, javascript-format
#, javascript-format
msgid "FTS enabled: %d"
msgstr "Para excluir: %d"
msgstr "FTS habilitado: %d"
msgid "Login with Dropbox"
msgstr "Login com Dropbox"
#, fuzzy
msgid "Enter code here"
msgstr "Entrar no modo de linha de comando"
msgstr "Entre o código aqui"
#, javascript-format
msgid "Master Key %s"
@@ -1898,6 +2009,10 @@ msgstr "O caderno não pôde ser salvo: %s"
msgid "Edit notebook"
msgstr "Editar caderno"
#, fuzzy
msgid "Enter notebook title"
msgstr "Título do caderno:"
msgid "Show all"
msgstr "Exibir tudo"
@@ -1921,10 +2036,32 @@ msgstr "Nenhum item com ID %s"
msgid "The Joplin mobile app does not currently support this type of link: %s"
msgstr "O app mobile do Joplin não suporta, atualmente, esse tipo de link: %s"
#, javascript-format
msgid "Links with protocol \"%s\" are not supported"
msgstr ""
#, javascript-format
msgid "Unsupported image type: %s"
msgstr "Tipo de imagem não suportada: %s"
#, fuzzy, javascript-format
msgid "Updated: %s"
msgstr "Atualizado: %d."
msgid "View on map"
msgstr "Ver no mapa"
msgid "Go to source URL"
msgstr "Ir para a URL de origem"
#, fuzzy
msgid "Attach..."
msgstr "Pesquisar..."
#, fuzzy
msgid "Choose an option"
msgstr "Mostrar opções avançadas"
msgid "Take photo"
msgstr "Tirar foto"
@@ -1943,23 +2080,19 @@ msgstr "Converter para nota"
msgid "Convert to todo"
msgstr "Converter para tarefa"
msgid "Hide metadata"
msgstr "Ocultar metadados"
#, fuzzy
msgid "Properties"
msgstr "Propriedades da nota"
msgid "Show metadata"
msgstr "Exibir metadados"
msgid "View on map"
msgstr "Ver no mapa"
msgid "Go to source URL"
msgstr "Ir para a URL de origem"
msgid "Add body"
msgstr ""
msgid "Edit"
msgstr "Editar"
msgid "Delete notebook"
msgstr "Excluir caderno"
#, fuzzy
msgid "Add title"
msgstr "título"
msgid "Login with OneDrive"
msgstr "Login com OneDrive"
@@ -1967,18 +2100,41 @@ msgstr "Login com OneDrive"
msgid "Search"
msgstr "Procurar"
msgid ""
"Click on the (+) button to create a new note or notebook. Click on the side "
"menu to access your existing notebooks."
msgstr ""
"Clique no botão (+) para criar uma nova nota ou caderno. Clique no menu "
"lateral para acessar seus cadernos existentes."
#, fuzzy
#~ msgid "Permission to write to external storage"
#~ msgstr "Permissão para utilizar sua câmera"
msgid "You currently have no notebook. Create one by clicking on (+) button."
msgstr "Você não possui cadernos. Crie um clicando no botão (+)."
#~ msgid "Cancel synchronisation"
#~ msgstr "Cancelar sincronização"
msgid "Welcome"
msgstr "Bem-vindo"
#~ msgid "Hide metadata"
#~ msgstr "Ocultar metadados"
#~ msgid "Show metadata"
#~ msgstr "Exibir metadados"
#~ msgid "Delete notebook"
#~ msgstr "Excluir caderno"
#~ msgid ""
#~ "Click on the (+) button to create a new note or notebook. Click on the "
#~ "side menu to access your existing notebooks."
#~ msgstr ""
#~ "Clique no botão (+) para criar uma nova nota ou caderno. Clique no menu "
#~ "lateral para acessar seus cadernos existentes."
#~ msgid ""
#~ "You currently have no notebook. Create one by clicking on (+) button."
#~ msgstr "Você não possui cadernos. Crie um clicando no botão (+)."
#~ msgid "Welcome"
#~ msgstr "Bem-vindo"
#~ msgid "Separate each tag by a comma."
#~ msgstr "Separe cada tag por vírgula."
#~ msgid "Some items cannot be decrypted."
#~ msgstr "Alguns itens não podem ser decriptados."
#~ msgid "%s (%s): %s"
#~ msgstr "%s (%s): %s"
@@ -1994,9 +2150,6 @@ msgstr "Bem-vindo"
#~ msgid "Joplin v%s"
#~ msgstr "Site do Joplin"
#~ msgid "Delete notes?"
#~ msgstr "Excluir notas?"
#~ msgid "State: %s."
#~ msgstr "Estado: \"%s\"."

View File

@@ -476,6 +476,10 @@ msgstr "Tastați `joplin help` pentru informații de utilizare."
msgid "Fatal error:"
msgstr "Eroare fatală:"
#, javascript-format
msgid "All potential ports are in use - please report the issue at %s"
msgstr ""
msgid ""
"The application has been authorised - you may now close this browser tab."
msgstr ""
@@ -566,6 +570,25 @@ 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)"
@@ -583,6 +606,9 @@ msgstr ""
msgid "Check for updates..."
msgstr "Verificați actualizările..."
msgid "Templates"
msgstr ""
msgid "Import"
msgstr "Importați"
@@ -628,12 +654,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"
@@ -668,6 +700,9 @@ msgstr "Website și documentație"
msgid "Make a donation"
msgstr "Faceți o donație"
msgid "Toggle development tools"
msgstr ""
#, javascript-format
msgid "Open %s"
msgstr "Deschideți %s"
@@ -878,9 +913,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:"
@@ -890,6 +922,9 @@ msgstr "Redenumiți eticheta:"
msgid "Set alarm:"
msgstr "Setați alarma:"
msgid "Template file:"
msgstr ""
msgid "Layout"
msgstr ""
@@ -902,8 +937,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"
@@ -925,6 +960,9 @@ msgstr ""
msgid "Note History"
msgstr "Caiete de notițe"
msgid "Markup"
msgstr ""
msgid "Previous versions of this note"
msgstr ""
@@ -995,9 +1033,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"
@@ -1008,9 +1043,6 @@ msgstr "În: %s"
msgid "Hyperlink"
msgstr "Hyperlink"
msgid "Code"
msgstr "Cod"
msgid "Numbered List"
msgstr "Listă numerotată"
@@ -1086,20 +1118,12 @@ msgstr "Ștergeți"
msgid "Rename"
msgstr "Redenumiți"
msgid "Notebooks"
msgstr "Caiete de notițe"
#, javascript-format
msgid "Decrypting items: %d/%d"
msgstr "Se decriptează itemi: %d/%d"
#, fuzzy, javascript-format
msgid "Fetching resources: %d"
msgstr "Resurse: %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"
@@ -1292,6 +1316,56 @@ msgid ""
"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ă"
@@ -1310,6 +1384,12 @@ msgstr "Deschisă"
msgid "Dark"
msgstr "Închisă"
msgid "Solarized Light"
msgstr ""
msgid "Solarized Dark"
msgstr ""
msgid "Uncompleted to-dos on top"
msgstr ""
@@ -1441,38 +1521,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 "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 "Custom TLS certificates"
msgstr "Certificate TLS cusomizate"
@@ -1577,6 +1625,12 @@ msgstr ""
msgid "Items that cannot be synchronised"
msgstr "Itemii nu pot fi sincronizați"
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"
@@ -1585,10 +1639,14 @@ msgstr "Acest fișier nu a putut fi deschis: %s"
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 ""
"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)."
"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)"
@@ -1636,18 +1694,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..."
@@ -1671,8 +1717,35 @@ 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"
#, javascript-format
msgid "Decrypting items: %d/%d"
msgstr "Se decriptează itemi: %d/%d"
#, fuzzy, javascript-format
msgid "Fetching resources: %d/%d"
msgstr "Resurse: %d/%d"
#, fuzzy
msgid "All notes"
msgstr "notiță"
msgid "Notebooks"
msgstr "Caiete de notițe"
#, fuzzy
msgid "Checking... Please wait."
@@ -1708,6 +1781,54 @@ msgstr "Etichete noi:"
msgid "Type new tags or select from list"
msgstr ""
msgid "Warning"
msgstr ""
msgid ""
"In order to use file system synchronisation 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 a long time 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"
@@ -1765,6 +1886,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"
@@ -1788,10 +1913,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"
@@ -1811,23 +1958,18 @@ msgstr ""
msgid "Convert to todo"
msgstr ""
msgid "Hide metadata"
msgstr "Ascundeți metadatele"
msgid "Properties"
msgstr ""
msgid "Show metadata"
msgstr "Afișați metadatele"
msgid "View on map"
msgstr "Vizualizați pe hartă"
msgid "Go to source URL"
msgid "Add body"
msgstr ""
msgid "Edit"
msgstr "Editați"
msgid "Delete notebook"
msgstr "Ștergeți caiet de notițe"
#, fuzzy
msgid "Add title"
msgstr "titlu"
# vezi context
msgid "Login with OneDrive"
@@ -1836,18 +1978,32 @@ 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"

View File

@@ -534,6 +534,10 @@ msgstr "Введите `joplin help` для получения информац
msgid "Fatal error:"
msgstr "Фатальная ошибка:"
#, javascript-format
msgid "All potential ports are in use - please report the issue at %s"
msgstr ""
msgid ""
"The application has been authorised - you may now close this browser tab."
msgstr "Приложение авторизовано — можно закрыть вкладку браузера."
@@ -631,6 +635,27 @@ 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 "Каталог экспорта 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)"
@@ -647,6 +672,9 @@ msgstr ""
msgid "Check for updates..."
msgstr "Проверить обновления..."
msgid "Templates"
msgstr ""
msgid "Import"
msgstr "Импорт"
@@ -690,12 +718,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 "Поиск во всех заметках"
@@ -726,6 +760,9 @@ msgstr "Сайт и документация"
msgid "Make a donation"
msgstr "Сделать пожертвование"
msgid "Toggle development tools"
msgstr ""
#, javascript-format
msgid "Open %s"
msgstr "Открыть %s"
@@ -959,9 +996,6 @@ msgstr "Название блокнота:"
msgid "Add or remove tags:"
msgstr "Добавить или удалить метки:"
msgid "Separate each tag by a comma."
msgstr "Разделяйте каждую метку запятой."
msgid "Rename notebook:"
msgstr "Переименовать блокнот:"
@@ -971,6 +1005,9 @@ msgstr "Переименовать метку:"
msgid "Set alarm:"
msgstr "Установить напоминание:"
msgid "Template file:"
msgstr ""
msgid "Layout"
msgstr "Разметка"
@@ -983,8 +1020,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 "Установить пароль"
@@ -1006,6 +1044,9 @@ msgstr "URL"
msgid "Note History"
msgstr "Список заметок"
msgid "Markup"
msgstr ""
msgid "Previous versions of this note"
msgstr ""
@@ -1079,9 +1120,6 @@ msgstr "Вставить гиперссылку"
msgid "Attach file"
msgstr "Прикрепить файл"
msgid "Tags"
msgstr "Метки"
msgid "Set alarm"
msgstr "Установить напоминание"
@@ -1092,9 +1130,6 @@ msgstr "В: %s"
msgid "Hyperlink"
msgstr "Гиперссылка"
msgid "Code"
msgstr "Код"
msgid "Numbered List"
msgstr "Нумерованный список"
@@ -1172,21 +1207,13 @@ msgstr "Удалить"
msgid "Rename"
msgstr "Переименовать"
msgid "Notebooks"
msgstr "Блокноты"
#, javascript-format
msgid "Decrypting items: %d/%d"
msgstr "Расшифровано элементов: %d/%d"
#, javascript-format
msgid "Fetching resources: %d"
msgstr "Получение ресурсов: %d"
msgid "Please select where the sync status should be exported to"
msgstr ""
"Пожалуйста, выберите, куда должен быть экспортирован статус синхронизации"
msgid "Retry"
msgstr ""
msgid "Add or remove tags"
msgstr "Добавить или удалить метки"
@@ -1388,6 +1415,58 @@ 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 "Язык"
@@ -1406,6 +1485,12 @@ msgstr "Светлая"
msgid "Dark"
msgstr "Темная"
msgid "Solarized Light"
msgstr ""
msgid "Solarized Dark"
msgstr ""
msgid "Uncompleted to-dos on top"
msgstr "Незавершенные задачи сверху"
@@ -1545,40 +1630,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 "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 "Custom TLS certificates"
msgstr "Пользовательские сертификаты TLS"
@@ -1687,14 +1738,6 @@ msgstr ""
msgid "Items that cannot be synchronised"
msgstr "Элементы, которые не могут быть синхронизированы"
#, 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"
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 "
@@ -1704,6 +1747,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 "Статус синхронизации (синхронизировано / всего)"
@@ -1749,18 +1810,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 "Переместить в блокнот..."
@@ -1783,8 +1832,35 @@ 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 "Конфигурация"
#, javascript-format
msgid "Decrypting items: %d/%d"
msgstr "Расшифровано элементов: %d/%d"
#, javascript-format
msgid "Fetching resources: %d/%d"
msgstr "Получение ресурсов: %d/%d"
#, fuzzy
msgid "All notes"
msgstr "заметка"
msgid "Notebooks"
msgstr "Блокноты"
msgid "Checking... Please wait."
msgstr "Проверка... Пожалуйста, подождите."
@@ -1826,6 +1902,54 @@ msgstr "Новые метки:"
msgid "Type new tags or select from list"
msgstr "Введите новые метки или выберите из списка"
msgid "Warning"
msgstr ""
msgid ""
"In order to use file system synchronisation 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 a long time 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"
@@ -1889,6 +2013,10 @@ msgstr "Блокнот не может быть сохранен: %s"
msgid "Edit notebook"
msgstr "Редактировать блокнот"
#, fuzzy
msgid "Enter notebook title"
msgstr "Название блокнота:"
msgid "Show all"
msgstr "Показать все"
@@ -1914,10 +2042,32 @@ 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 "Сделать фото"
@@ -1936,23 +2086,19 @@ msgstr "Преобразовать в заметку"
msgid "Convert to todo"
msgstr "Преобразовать в задачу"
msgid "Hide metadata"
msgstr "Скрыть метаданные"
#, fuzzy
msgid "Properties"
msgstr "Свойства заметки"
msgid "Show metadata"
msgstr "Показать метаданные"
msgid "View on map"
msgstr "Посмотреть на карте"
msgid "Go to source URL"
msgstr "Перейти к исходному URL"
msgid "Add body"
msgstr ""
msgid "Edit"
msgstr "Правка"
msgid "Delete notebook"
msgstr "Удалить блокнот"
#, fuzzy
msgid "Add title"
msgstr "заголовок"
msgid "Login with OneDrive"
msgstr "Войти с OneDrive"
@@ -1960,18 +2106,41 @@ 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"

View File

@@ -529,6 +529,10 @@ msgstr "Vtipkajte `joplin help` za informacije o uporabi."
msgid "Fatal error:"
msgstr "Usodna napaka:"
#, javascript-format
msgid "All potential ports are in use - please report the issue at %s"
msgstr ""
msgid ""
"The application has been authorised - you may now close this browser tab."
msgstr "Aplikacija je bila avtorizirana - lahko zaprete zavihek v brskalniku."
@@ -628,6 +632,26 @@ 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)"
@@ -645,6 +669,9 @@ msgstr ""
msgid "Check for updates..."
msgstr "Preverjanje za posodobitvami..."
msgid "Templates"
msgstr ""
msgid "Import"
msgstr "Uvozi"
@@ -690,12 +717,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"
@@ -731,6 +764,9 @@ msgstr "Spletna stran in dokumentacija"
msgid "Make a donation"
msgstr "Doniraj"
msgid "Toggle development tools"
msgstr ""
#, javascript-format
msgid "Open %s"
msgstr "Odpri %s"
@@ -957,9 +993,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:"
@@ -970,6 +1003,9 @@ msgstr "Preimenuj"
msgid "Set alarm:"
msgstr "Nastavi alarm:"
msgid "Template file:"
msgstr ""
msgid "Layout"
msgstr "Izgled"
@@ -983,8 +1019,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"
@@ -1010,6 +1047,9 @@ msgstr ""
msgid "Note History"
msgstr "Beležnice"
msgid "Markup"
msgstr ""
msgid "Previous versions of this note"
msgstr ""
@@ -1082,9 +1122,6 @@ msgstr ""
msgid "Attach file"
msgstr "Pripni datoteko"
msgid "Tags"
msgstr "Oznake"
msgid "Set alarm"
msgstr "Nastavi alarm"
@@ -1095,9 +1132,6 @@ msgstr "%s: %s"
msgid "Hyperlink"
msgstr ""
msgid "Code"
msgstr ""
msgid "Numbered List"
msgstr ""
@@ -1177,20 +1211,12 @@ msgstr "Izbriši"
msgid "Rename"
msgstr "Preimenuj"
msgid "Notebooks"
msgstr "Beležnice"
#, fuzzy, javascript-format
msgid "Decrypting items: %d/%d"
msgstr "Preneseni predmeti: %d/%d."
#, fuzzy, javascript-format
msgid "Fetching resources: %d"
msgstr "Viri: %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"
@@ -1396,6 +1422,58 @@ msgid ""
"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"
@@ -1414,6 +1492,12 @@ msgstr "Svetlo"
msgid "Dark"
msgstr "Temno"
msgid "Solarized Light"
msgstr ""
msgid "Solarized Dark"
msgstr ""
msgid "Uncompleted to-dos on top"
msgstr "Premakni nedokončane sezname opravil na vrh"
@@ -1553,40 +1637,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 "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 "Custom TLS certificates"
msgstr ""
@@ -1694,14 +1744,6 @@ msgstr ""
msgid "Items that cannot be synchronised"
msgstr "Predmeti ne morejo biti sinhronizirani"
#, 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"
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 "
@@ -1711,6 +1753,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)"
@@ -1756,18 +1816,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..."
@@ -1792,8 +1840,35 @@ 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, javascript-format
msgid "Decrypting items: %d/%d"
msgstr "Preneseni predmeti: %d/%d"
#, fuzzy, javascript-format
msgid "Fetching resources: %d/%d"
msgstr "Viri: %d/%d"
#, fuzzy
msgid "All notes"
msgstr "zabeležka"
msgid "Notebooks"
msgstr "Beležnice"
#, fuzzy
msgid "Checking... Please wait."
@@ -1831,6 +1906,54 @@ msgstr ""
msgid "Type new tags or select from list"
msgstr ""
msgid "Warning"
msgstr ""
msgid ""
"In order to use file system synchronisation 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 a long time 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"
@@ -1889,6 +2012,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"
@@ -1912,10 +2039,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"
@@ -1935,23 +2084,18 @@ msgstr "Pretvori v zabeležko"
msgid "Convert to todo"
msgstr "Pretvori v za narediti"
msgid "Hide metadata"
msgstr "Skrij meta podatke"
msgid "Properties"
msgstr ""
msgid "Show metadata"
msgstr "Prikaži meta podatke"
msgid "View on map"
msgstr "Prikaži na zemljevidu"
msgid "Go to source URL"
msgid "Add body"
msgstr ""
msgid "Edit"
msgstr "Uredi"
msgid "Delete notebook"
msgstr "Izbriši beležnico"
#, fuzzy
msgid "Add title"
msgstr "Neimenovano"
msgid "Login with OneDrive"
msgstr "Prijavi se z OneDrive"
@@ -1959,18 +2103,38 @@ 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"

2141
CliClient/locales/sr_RS.po Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -535,6 +535,10 @@ msgstr "Skriv `joplin help` för användningsinformation."
msgid "Fatal error:"
msgstr "Allvarligt fel:"
#, javascript-format
msgid "All potential ports are in use - please report the issue at %s"
msgstr ""
msgid ""
"The application has been authorised - you may now close this browser tab."
msgstr "Programmet har godkänts - du kan nu stänga den här webbläsarfliken."
@@ -632,6 +636,27 @@ 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)"
@@ -649,6 +674,9 @@ msgstr ""
msgid "Check for updates..."
msgstr "Sök efter uppdateringar..."
msgid "Templates"
msgstr ""
msgid "Import"
msgstr "Importera"
@@ -693,12 +721,18 @@ 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"
@@ -732,6 +766,9 @@ msgstr "Webbplats och dokumentation"
msgid "Make a donation"
msgstr "Gör en donation"
msgid "Toggle development tools"
msgstr ""
#, javascript-format
msgid "Open %s"
msgstr "Öppna %s"
@@ -965,9 +1002,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:"
@@ -977,6 +1011,9 @@ msgstr "Byt namn på tagg:"
msgid "Set alarm:"
msgstr "Ställ in alarm:"
msgid "Template file:"
msgstr ""
msgid "Layout"
msgstr "Layout"
@@ -989,8 +1026,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"
@@ -1014,6 +1052,9 @@ msgstr "URL"
msgid "Note History"
msgstr "Anteckningsboken"
msgid "Markup"
msgstr ""
msgid "Previous versions of this note"
msgstr ""
@@ -1087,9 +1128,6 @@ msgstr "Infoga hyperlänk"
msgid "Attach file"
msgstr "Bifoga fil"
msgid "Tags"
msgstr "Taggar"
msgid "Set alarm"
msgstr "Sätt alarm"
@@ -1100,9 +1138,6 @@ msgstr "I: %s"
msgid "Hyperlink"
msgstr "Hyperlänk"
msgid "Code"
msgstr "Kod"
msgid "Numbered List"
msgstr "Numrerad lista"
@@ -1180,20 +1215,12 @@ msgstr "Ta bort"
msgid "Rename"
msgstr "Byt namn"
msgid "Notebooks"
msgstr "Anteckningsböcker"
#, javascript-format
msgid "Decrypting items: %d/%d"
msgstr "Dekrypterar objekt: %d/%d"
#, javascript-format
msgid "Fetching resources: %d"
msgstr "Hämtar resurser: %d"
msgid "Please select where the sync status should be exported to"
msgstr "Välj vart synkroniseringstillståndet ska exporteras till"
msgid "Retry"
msgstr ""
msgid "Add or remove tags"
msgstr "Lägg till eller ta bort taggar"
@@ -1397,6 +1424,58 @@ msgstr ""
"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"
@@ -1415,6 +1494,12 @@ msgstr "Ljus"
msgid "Dark"
msgstr "Mörk"
msgid "Solarized Light"
msgstr ""
msgid "Solarized Dark"
msgstr ""
msgid "Uncompleted to-dos on top"
msgstr "Inte slutförda att-göra högst upp"
@@ -1554,40 +1639,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 "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 "Custom TLS certificates"
msgstr "Anpassade TLS-certifikat"
@@ -1696,14 +1747,6 @@ msgstr ""
msgid "Items that cannot be synchronised"
msgstr "Objekt som inte kan synkroniseras"
#, 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"
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 "
@@ -1713,6 +1756,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)"
@@ -1760,18 +1821,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..."
@@ -1794,8 +1843,35 @@ 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"
#, javascript-format
msgid "Decrypting items: %d/%d"
msgstr "Dekrypterar objekt: %d/%d"
#, javascript-format
msgid "Fetching resources: %d/%d"
msgstr "Hämtar resurser: %d/%d"
#, fuzzy
msgid "All notes"
msgstr "anteckning"
msgid "Notebooks"
msgstr "Anteckningsböcker"
msgid "Checking... Please wait."
msgstr "Kontrollerar... vänta."
@@ -1837,6 +1913,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 synchronisation 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 a long time 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"
@@ -1902,6 +2026,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"
@@ -1926,10 +2054,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"
@@ -1948,23 +2098,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 "View on map"
msgstr "Visa på karta"
msgid "Go to source URL"
msgstr "Gå till källans URL"
msgid "Add body"
msgstr ""
msgid "Edit"
msgstr "Redigera"
msgid "Delete notebook"
msgstr "Ta bort anteckningsbok"
#, fuzzy
msgid "Add title"
msgstr "titel"
msgid "Login with OneDrive"
msgstr "Logga in med OneDrive"
@@ -1972,21 +2118,44 @@ 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"

View File

@@ -501,6 +501,10 @@ msgstr "Kullanım bilgisi için `joplin help` yazın."
msgid "Fatal error:"
msgstr "Büyük hata:"
#, javascript-format
msgid "All potential ports are in use - please report the issue at %s"
msgstr ""
msgid ""
"The application has been authorised - you may now close this browser tab."
msgstr ""
@@ -599,6 +603,27 @@ msgstr "Şifreleme seçenekleri"
msgid "Web clipper options"
msgstr "Web alıntılama ayarları"
msgid "Create note from template"
msgstr ""
msgid "Create to-do from template"
msgstr ""
#, fuzzy
msgid "Insert template"
msgstr "Tarih Ekle"
#, fuzzy
msgid "Open template directory"
msgstr "Joplin Dizin Dışa Aktarım"
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)"
@@ -616,6 +641,9 @@ msgstr ""
msgid "Check for updates..."
msgstr "Güncellemeleri kontrol et..."
msgid "Templates"
msgstr ""
msgid "Import"
msgstr "İçe aktar"
@@ -660,12 +688,18 @@ msgstr "İtalik"
msgid "Link"
msgstr "Bağlantı"
msgid "Code"
msgstr "Kod"
msgid "Insert Date Time"
msgstr "Tarih Ekle"
msgid "Edit in external editor"
msgstr "Başka editörde düzenle"
msgid "Tags"
msgstr "Etiketler"
msgid "Search in all the notes"
msgstr "Tüm notlarda ara"
@@ -699,6 +733,9 @@ msgstr "Web sitesi ve dökümanlar"
msgid "Make a donation"
msgstr "Bağış yapın"
msgid "Toggle development tools"
msgstr ""
#, javascript-format
msgid "Open %s"
msgstr "Aç %s"
@@ -934,9 +971,6 @@ msgstr "Not defteri başlığı:"
msgid "Add or remove tags:"
msgstr "Etiket ekle veya kaldır:"
msgid "Separate each tag by a comma."
msgstr "Her etiketi virgülle ayırın."
msgid "Rename notebook:"
msgstr "Not defterini yeniden adlandır:"
@@ -946,6 +980,9 @@ msgstr "Etiketi yeniden adlandır:"
msgid "Set alarm:"
msgstr "Alarm kur:"
msgid "Template file:"
msgstr ""
msgid "Layout"
msgstr "Düzen"
@@ -958,8 +995,9 @@ msgstr "Bazı öğeler senkronize edilemiyor."
msgid "View them now"
msgstr "Şimdi onları görüntüle"
msgid "Some items cannot be decrypted."
msgstr "Bazı öğelerin şifresi çözülemez."
#, fuzzy
msgid "One or more master keys need a password."
msgstr "Ana şifreyi girin:"
msgid "Set the password"
msgstr "Şifreyi ayarla"
@@ -983,6 +1021,9 @@ msgstr "URL"
msgid "Note History"
msgstr "Not listesi"
msgid "Markup"
msgstr ""
msgid "Previous versions of this note"
msgstr ""
@@ -1057,9 +1098,6 @@ msgstr "Köprü ekle"
msgid "Attach file"
msgstr "Dosya ekle"
msgid "Tags"
msgstr "Etiketler"
msgid "Set alarm"
msgstr "Alarm kur"
@@ -1070,9 +1108,6 @@ msgstr "İçinde: %s"
msgid "Hyperlink"
msgstr "Köprü"
msgid "Code"
msgstr "Kod"
msgid "Numbered List"
msgstr "Numaralı liste"
@@ -1149,20 +1184,12 @@ msgstr "Sil"
msgid "Rename"
msgstr "Yeniden adlandır"
msgid "Notebooks"
msgstr "Not defterleri"
#, javascript-format
msgid "Decrypting items: %d/%d"
msgstr "Şifresi çözülenler: %d/%d"
#, javascript-format
msgid "Fetching resources: %d"
msgstr "Kaynaklar alınıyor: %d"
msgid "Please select where the sync status should be exported to"
msgstr "Lütfen senkronizasyon durumunun nereye aktarılacağını seçin"
msgid "Retry"
msgstr ""
#, fuzzy
msgid "Add or remove tags"
msgstr "Etiket ekle veya kaldır"
@@ -1365,6 +1392,58 @@ msgstr ""
"kopyaladığınızdan emin olun, aksi takdirde tüm dosyalar kaldırılır! Daha "
"fazla bilgi için SSS bölümüne bakın: %s"
msgid "Synchronisation target"
msgstr "Senkronizasyon hedefi"
msgid ""
"The target to synchonise to. Each sync target may have additional parameters "
"which are named as `sync.NUM.NAME` (all documented below)."
msgstr ""
"Senkronize edilecek hedef. Her senkronizasyon hedefi, `sync.NUM.NAME` olarak "
"adlandırılan ek parametrelere sahip olabilir (tümü aşağıda belgelenmiştir)."
msgid "Directory to synchronise with (absolute path)"
msgstr "Eşitlenecek dizin (kesin yol)"
msgid "Nextcloud WebDAV URL"
msgstr "Nextcloud WebDAV URL"
msgid "Nextcloud username"
msgstr "Nextcloud kullanıcı adı"
msgid "Nextcloud password"
msgstr "Nextcloud şifresi"
msgid "WebDAV URL"
msgstr "WebDAV URL"
msgid "WebDAV username"
msgstr "WebDAV kullanıcı adı"
msgid "WebDAV password"
msgstr "WebDAV şifresi"
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 "Dil"
@@ -1383,6 +1462,12 @@ msgstr "Aydınlık"
msgid "Dark"
msgstr "Karanlık"
msgid "Solarized Light"
msgstr ""
msgid "Solarized Dark"
msgstr ""
msgid "Uncompleted to-dos on top"
msgstr "Tamamlanmamış yap-list yukarıda"
@@ -1521,40 +1606,6 @@ msgstr ""
"Editör komutu (argüman içerebilir) not açmak için kullanılacaktır. Eğer "
"sağlanmadıysa, varsayılan düzenleyiciyi otomatik olarak algılamaya çalışır."
msgid "Show advanced options"
msgstr "Gelişmiş ayarları göster"
msgid "Synchronisation target"
msgstr "Senkronizasyon hedefi"
msgid ""
"The target to synchonise to. Each sync target may have additional parameters "
"which are named as `sync.NUM.NAME` (all documented below)."
msgstr ""
"Senkronize edilecek hedef. Her senkronizasyon hedefi, `sync.NUM.NAME` olarak "
"adlandırılan ek parametrelere sahip olabilir (tümü aşağıda belgelenmiştir)."
msgid "Directory to synchronise with (absolute path)"
msgstr "Eşitlenecek dizin (kesin yol)"
msgid "Nextcloud WebDAV URL"
msgstr "Nextcloud WebDAV URL"
msgid "Nextcloud username"
msgstr "Nextcloud kullanıcı adı"
msgid "Nextcloud password"
msgstr "Nextcloud şifresi"
msgid "WebDAV URL"
msgstr "WebDAV URL"
msgid "WebDAV username"
msgstr "WebDAV kullanıcı adı"
msgid "WebDAV password"
msgstr "WebDAV şifresi"
msgid "Custom TLS certificates"
msgstr "Özel TLS sertifikaları"
@@ -1662,14 +1713,6 @@ msgstr ""
msgid "Items that cannot be synchronised"
msgstr "Senkronize edilemeyen öğeler"
#, fuzzy, javascript-format
msgid "%s (%s) could not be uploaded: %s"
msgstr "Bu dosya açılamadı: %s"
#, fuzzy, javascript-format
msgid "Item \"%s\" could not be downloaded: %s"
msgstr "Bu dosya açılamadı: %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 "
@@ -1679,6 +1722,24 @@ msgstr ""
"bulmak için, başlığı veya kimliği aratın (yukarıdaki parantez içerisinde "
"görüntülenir)."
#, fuzzy, javascript-format
msgid "%s (%s) could not be uploaded: %s"
msgstr "Bu dosya açılamadı: %s"
#, fuzzy, javascript-format
msgid "Item \"%s\" could not be downloaded: %s"
msgstr "Bu dosya açılamadı: %s"
#, fuzzy
msgid "Items that cannot be decrypted"
msgstr "Senkronize edilemeyen öğeler"
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 "Senkronizasyon durumu (senkronize öğeler / toplam öğeler)"
@@ -1724,18 +1785,6 @@ msgstr "Şu anda not yok. (+) butonuna tıklayarak bir tane oluşturun."
msgid "Delete these notes?"
msgstr "Bu notlar silinsin mi?"
msgid "Log"
msgstr "Log"
msgid "Export Debug Report"
msgstr "Hata Ayıklama Raporunu Dışa Aktar"
msgid "Encryption Config"
msgstr "Yapılandırmayı şifrele"
msgid "Configuration"
msgstr "Yapılandırma"
msgid "Move to notebook..."
msgstr "Not defterine taşı..."
@@ -1758,8 +1807,35 @@ msgstr "Tarih seç"
msgid "Confirm"
msgstr "Onayla"
msgid "Cancel synchronisation"
msgstr "Senkronizasyonu iptal et"
#, fuzzy, javascript-format
msgid "Notebook: %s"
msgstr "Not defterleri"
#, fuzzy
msgid "Encrypted notebooks cannot be renamed"
msgstr "Şifrelenmiş öğeler değiştirilemez"
#, fuzzy
msgid "New Notebook"
msgstr "Yeni not defteri"
msgid "Configuration"
msgstr "Yapılandırma"
#, javascript-format
msgid "Decrypting items: %d/%d"
msgstr "Şifresi çözülenler: %d/%d"
#, javascript-format
msgid "Fetching resources: %d/%d"
msgstr "Kaynaklar alınıyor: %d/%d"
#, fuzzy
msgid "All notes"
msgstr "not"
msgid "Notebooks"
msgstr "Not defterleri"
msgid "Checking... Please wait."
msgstr "Kontrol ediliyor... Lütfen bekleyin."
@@ -1801,6 +1877,54 @@ msgstr "Yeni etiketler:"
msgid "Type new tags or select from list"
msgstr "Yeni etiketler yazın veya listeden seçin"
msgid "Warning"
msgstr ""
msgid ""
"In order to use file system synchronisation your permission to write to "
"external storage is required."
msgstr ""
#, fuzzy
msgid "Information"
msgstr "Yapılandırma"
msgid "Encryption Config"
msgstr "Yapılandırmayı şifrele"
#, fuzzy
msgid "Tools"
msgstr "Araçlar"
#, fuzzy
msgid "Sync Status"
msgstr "Durum"
msgid "Log"
msgstr "Log"
#, fuzzy
msgid "Creating report..."
msgstr "Yeni %s oluşturuluyor..."
msgid "Export Debug Report"
msgstr "Hata Ayıklama Raporunu Dışa Aktar"
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 a long time depending on the number of notes."
msgstr ""
#, fuzzy
msgid "More information"
msgstr "Yapılandırma"
msgid ""
"To work correctly, the app needs the following permissions. Please enable "
"them in your phone settings, in Apps > Joplin > Permissions"
@@ -1863,6 +1987,10 @@ msgstr "Not defteri kaydedilemedi: %s"
msgid "Edit notebook"
msgstr "Not defterini düzenle"
#, fuzzy
msgid "Enter notebook title"
msgstr "Not defteri başlığı:"
msgid "Show all"
msgstr "Tümünü göster"
@@ -1887,10 +2015,32 @@ msgid "The Joplin mobile app does not currently support this type of link: %s"
msgstr ""
"Joplin mobil uygulaması şu anda bu tür bir bağlantıyı desteklemiyor: %s"
#, javascript-format
msgid "Links with protocol \"%s\" are not supported"
msgstr ""
#, javascript-format
msgid "Unsupported image type: %s"
msgstr "Desteklenmeyen resim türü: %s"
#, fuzzy, javascript-format
msgid "Updated: %s"
msgstr "Güncellenme: %d."
msgid "View on map"
msgstr "Haritada gör"
msgid "Go to source URL"
msgstr "URL kaynağına git"
#, fuzzy
msgid "Attach..."
msgstr "Ara..."
#, fuzzy
msgid "Choose an option"
msgstr "Gelişmiş ayarları göster"
msgid "Take photo"
msgstr "Fotoğraf çek"
@@ -1909,23 +2059,19 @@ msgstr "Nota çevir"
msgid "Convert to todo"
msgstr "Yapılacak olarak çevir"
msgid "Hide metadata"
msgstr "Metadata'yı gizle"
#, fuzzy
msgid "Properties"
msgstr "Not özellikleri"
msgid "Show metadata"
msgstr "Metadata'yı göster"
msgid "View on map"
msgstr "Haritada gör"
msgid "Go to source URL"
msgstr "URL kaynağına git"
msgid "Add body"
msgstr ""
msgid "Edit"
msgstr "Düzenle"
msgid "Delete notebook"
msgstr "Not defterini sil"
#, fuzzy
msgid "Add title"
msgstr "başlık"
msgid "Login with OneDrive"
msgstr "OneDrive ile giriş yapın"
@@ -1933,19 +2079,42 @@ msgstr "OneDrive ile giriş yapın"
msgid "Search"
msgstr "Arama"
msgid ""
"Click on the (+) button to create a new note or notebook. Click on the side "
"menu to access your existing notebooks."
msgstr ""
"Yeni bir not veya not defteri oluşturmak için (+) düğmesine tıklayın. Mevcut "
"not defterlerinize erişmek için yandaki menüye tıklayın."
#, fuzzy
#~ msgid "Permission to write to external storage"
#~ msgstr "Kamera kullanımı için izin"
msgid "You currently have no notebook. Create one by clicking on (+) button."
msgstr ""
"Şu anda not defteriniz yok. (+) butonuna tıklayarak bir tane oluşturun."
#~ msgid "Cancel synchronisation"
#~ msgstr "Senkronizasyonu iptal et"
msgid "Welcome"
msgstr "Hoşgeldiniz"
#~ msgid "Hide metadata"
#~ msgstr "Metadata'yı gizle"
#~ msgid "Show metadata"
#~ msgstr "Metadata'yı göster"
#~ msgid "Delete notebook"
#~ msgstr "Not defterini sil"
#~ msgid ""
#~ "Click on the (+) button to create a new note or notebook. Click on the "
#~ "side menu to access your existing notebooks."
#~ msgstr ""
#~ "Yeni bir not veya not defteri oluşturmak için (+) düğmesine tıklayın. "
#~ "Mevcut not defterlerinize erişmek için yandaki menüye tıklayın."
#~ msgid ""
#~ "You currently have no notebook. Create one by clicking on (+) button."
#~ msgstr ""
#~ "Şu anda not defteriniz yok. (+) butonuna tıklayarak bir tane oluşturun."
#~ msgid "Welcome"
#~ msgstr "Hoşgeldiniz"
#~ msgid "Separate each tag by a comma."
#~ msgstr "Her etiketi virgülle ayırın."
#~ msgid "Some items cannot be decrypted."
#~ msgstr "Bazı öğelerin şifresi çözülemez."
#~ msgid "%s (%s): %s"
#~ msgstr "%s (%s): %s"

View File

@@ -22,7 +22,7 @@ msgid "Please select the note or notebook to be deleted first."
msgstr "请先选择需要删除的笔记或笔记本。"
msgid "Press Ctrl+D or type \"exit\" to exit the application"
msgstr "按 Ctrl+D 或输入 \"exit\" 退出程序"
msgstr "按 Ctrl+D 或输入exit退出程序"
#, javascript-format
msgid "More than one item match \"%s\". Please narrow down your query."
@@ -47,7 +47,7 @@ msgid "y"
msgstr "是"
msgid "Cancelling background synchronisation... Please wait."
msgstr "正在取消后台同步... 请稍候。"
msgstr "正在取消后台同步……请稍候。"
#, javascript-format
msgid "No such command: %s"
@@ -55,7 +55,7 @@ msgstr "不存在该命令:%s"
#, javascript-format
msgid "The command \"%s\" is only available in GUI mode"
msgstr "命令 \"%s\" 仅在GUI模式下可用"
msgstr "命令“%s”仅在 GUI 模式下可用"
msgid "Cannot change encrypted item"
msgstr "无法更改加密项目"
@@ -80,7 +80,7 @@ msgstr "将选定文件添加到笔记中。"
#, javascript-format
msgid "Cannot find \"%s\"."
msgstr "无法找到 \"%s\"。"
msgstr "无法找到“%s”。"
msgid "Displays the given note."
msgstr "显示选定笔记。"
@@ -119,7 +119,7 @@ msgstr "标记待办事项为完成。"
#, javascript-format
msgid "Note is not a to-do: \"%s\""
msgstr "笔记非待办事项:\"%s\""
msgstr "笔记非待办事项:“%s”"
msgid ""
"Manages E2EE configuration. Commands are `enable`, `disable`, `decrypt`, "
@@ -237,7 +237,7 @@ msgid ""
msgstr "通过方向键与 page up/down 键来滚动列表与文本区域(包含此控制台)。"
msgid "To maximise/minimise the console, press \"tc\"."
msgstr "按 \"TC\" 最大化/最小化控制台。"
msgstr "按“TC”最大化/最小化控制台。"
msgid "To enter command line mode, press \":\""
msgstr "按“:”键进入命令行模式"
@@ -314,7 +314,7 @@ msgstr ""
"待办事项。"
msgid "Either \"text\" or \"json\""
msgstr "\"text\" 或 \"json\""
msgstr "text”或“json"
msgid ""
"Use long list format. Format is ID, NOTE_COUNT (for notebook), DATE, "
@@ -418,8 +418,8 @@ msgid ""
"taking place, you may delete the lock file at \"%s\" and resume the "
"operation."
msgstr ""
"锁定文件已被保存。如果您确认当前未在进行任何同步,可删除锁定文件 \"%s\" 后继"
"续上一部操作。"
"锁定文件已被保存。如果您确认当前未在进行任何同步,可删除锁定文件“%s”后继续上"
"一部操作。"
#, javascript-format
msgid "Synchronisation target: %s (%s)"
@@ -442,13 +442,13 @@ msgid ""
"[tag] from [note], or to list the notes associated with [tag]. The command "
"`tag list` can be used to list all the tags (use -l for long option)."
msgstr ""
"<tag-command> 可以是 \"add\"、\"remove\" 或者 \"list\", 用于从 [note] 中赋值"
"或删除 [tag],或者列出与 [tag] 相关的笔记。`tag list` 命令可以用于列出所有的"
"标签(对于过长选项请使用 -l 参数)。"
"<tag-command> 可以是“add”、“remove”或者“list, 用于从 [note] 中赋值或删除 "
"[tag],或者列出与 [tag] 相关的笔记。`tag list` 命令可以用于列出所有的标签(对"
"于过长选项请使用 -l 参数)。"
#, javascript-format
msgid "Invalid command: \"%s\""
msgstr "无效命令:\"%s\""
msgstr "无效命令:“%s”"
msgid ""
"<todo-command> can either be \"toggle\" or \"clear\". Use \"toggle\" to "
@@ -456,9 +456,9 @@ msgid ""
"target is a regular note it will be converted to a to-do). Use \"clear\" to "
"convert the to-do back to a regular note."
msgstr ""
"<todo-command> 可以是 \"toggle\" 或者 \"clear\"。使用 \"toggle\" 命令来切换待"
"办事项的完成状态(若目标为普通笔记则将会转换成待办事项)。使用 \"clear\" 命令"
"来把待办事项转换到普通笔记。"
"<todo-command> 可以是toggle”或者“clear。使用toggle命令来切换待办事项的完"
"成状态(若目标为普通笔记则将会转换成待办事项)。使用clear”命令来把待办事项转"
"换到普通笔记。"
msgid "Marks a to-do as non-completed."
msgstr "标记待办事项为未完成。"
@@ -499,6 +499,10 @@ msgstr "输入 `joplin help` 获取用量信息。"
msgid "Fatal error:"
msgstr "严重错误:"
#, javascript-format
msgid "All potential ports are in use - please report the issue at %s"
msgstr ""
msgid ""
"The application has been authorised - you may now close this browser tab."
msgstr "授权成功 - 您可以关闭此页面了。"
@@ -513,9 +517,9 @@ msgid ""
"any files outside this directory nor to any other personal data. No data "
"will be shared with any third party."
msgstr ""
"请在浏览器中打开以下链接激活该应用程序。该应用会建立 \"Apps/Joplin\" 文件目"
"录,并只会读写该目录中的文件。它没有任何权限访问此目录以外的任何文件或个人信"
"息。也不会与第三方分享任何数据。"
"请在浏览器中打开以下链接激活该应用程序。该应用会建立Apps/Joplin”文件目录,并"
"只会读写该目录中的文件。它没有任何权限访问此目录以外的任何文件或个人信息。也"
"不会与第三方分享任何数据。"
msgid "Search:"
msgstr "搜索:"
@@ -545,7 +549,7 @@ msgstr ""
#, javascript-format
msgid "Exporting to \"%s\" as \"%s\" format. Please wait..."
msgstr "从 \"%s\" 导出,导出格式为 \"%s\"。请稍等…"
msgstr "从“%s”导出,导出格式为“%s”。请稍等…"
msgid "Sidebar"
msgstr "边栏"
@@ -561,7 +565,7 @@ msgstr "笔记正文"
#, javascript-format
msgid "Importing from \"%s\" as \"%s\" format. Please wait..."
msgstr "从 \"%s\" 导入,导入格式为 \"%s\" 。请稍等…"
msgstr "从“%s”导入,导入格式为“%s”。请稍等…"
msgid "PDF File"
msgstr "PDF 文件"
@@ -590,6 +594,27 @@ 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 "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)"
@@ -601,11 +626,14 @@ msgid "About Joplin"
msgstr "关于 Joplin"
msgid "Preferences..."
msgstr ""
msgstr "偏好……"
msgid "Check for updates..."
msgstr "检查更新..."
msgid "Templates"
msgstr ""
msgid "Import"
msgstr "导入"
@@ -623,7 +651,7 @@ msgid "Quit"
msgstr "退出"
msgid "Close Window"
msgstr ""
msgstr "关闭窗口"
msgid "&Edit"
msgstr "编辑 (&E)"
@@ -649,12 +677,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 "在所有笔记内搜索"
@@ -685,6 +719,9 @@ msgstr "网站与文档"
msgid "Make a donation"
msgstr "捐赠"
msgid "Toggle development tools"
msgstr "切换开发者工具"
#, javascript-format
msgid "Open %s"
msgstr "打开 %s"
@@ -890,7 +927,7 @@ msgstr "返回"
#, javascript-format
msgid ""
"New notebook \"%s\" will be created and file \"%s\" will be imported into it"
msgstr "将新建的笔记本“%s”,并将文件 \"%s\" 导入其中"
msgstr "将新建的笔记本“%s”,并将文件“%s”导入其中"
msgid "Please create a notebook first."
msgstr "请先创建笔记本。"
@@ -904,9 +941,6 @@ msgstr "笔记本标题:"
msgid "Add or remove tags:"
msgstr "添加或删除标签:"
msgid "Separate each tag by a comma."
msgstr "用半角逗号“,”分开每个标签。"
msgid "Rename notebook:"
msgstr "重命名笔记本:"
@@ -916,6 +950,9 @@ msgstr "重命名标签:"
msgid "Set alarm:"
msgstr "设置提醒:"
msgid "Template file:"
msgstr ""
msgid "Layout"
msgstr "布局"
@@ -928,18 +965,18 @@ msgstr "一些项目无法被同步。"
msgid "View them now"
msgstr "立刻查看"
msgid "Some items cannot be decrypted."
msgstr "一些项目无法被解密。"
msgid "One or more master keys need a password."
msgstr "一个或多个主密钥需要密码。"
msgid "Set the password"
msgstr "设置密码"
msgid "No notes in here. Create one by clicking on \"New note\"."
msgstr "此处没有任何笔记。点击\"新建笔记\"创建。"
msgstr "此处没有任何笔记。点击新建笔记创建。"
msgid ""
"There is currently no notebook. Create one by clicking on \"New notebook\"."
msgstr "此处没有任何笔记本。点击\"新建笔记本\"创建。"
msgstr "此处没有任何笔记本。点击新建笔记本创建。"
msgid "Location"
msgstr "位置"
@@ -947,32 +984,35 @@ msgstr "位置"
msgid "URL"
msgstr "URL"
#, fuzzy
msgid "Note History"
msgstr "笔记列表"
msgstr "笔记历史"
msgid "Markup"
msgstr ""
msgid "Previous versions of this note"
msgstr ""
msgstr "此笔记的早期版本"
msgid "Note properties"
msgstr "笔记属性"
#, javascript-format
msgid "The note \"%s\" has been successfully restored to the notebook \"%s\"."
msgstr ""
msgstr "笔记“%s”已成功恢复到笔记本“%s”中。"
#, fuzzy
msgid "This note has no history"
msgstr "笔记已被修改:"
msgstr "笔记没有历史记录"
msgid "Restore"
msgstr ""
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 ""
"单击“%s”以恢复笔记。它将会被复制到名为“%s”的笔记本中。笔记的当前版本不会被替"
"换或修改。"
msgid "Open..."
msgstr "打开…"
@@ -1021,9 +1061,6 @@ msgstr "插入超链接"
msgid "Attach file"
msgstr "附加文件"
msgid "Tags"
msgstr "标签"
msgid "Set alarm"
msgstr "设置提醒"
@@ -1034,9 +1071,6 @@ msgstr "在: %s"
msgid "Hyperlink"
msgstr "超链接"
msgid "Code"
msgstr "代码"
msgid "Numbered List"
msgstr "有序列表"
@@ -1115,20 +1149,12 @@ msgstr "删除"
msgid "Rename"
msgstr "重命名"
msgid "Notebooks"
msgstr "笔记本"
#, javascript-format
msgid "Decrypting items: %d/%d"
msgstr "正在解密项目:%d/%d"
#, javascript-format
msgid "Fetching resources: %d"
msgstr "正在获取资源:%d"
msgid "Please select where the sync status should be exported to"
msgstr "请选择同步状态的导出位置"
msgid "Retry"
msgstr "重试"
msgid "Add or remove tags"
msgstr "添加或删除标签"
@@ -1163,9 +1189,11 @@ 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 ""
msgstr "转到某处……"
#, javascript-format
msgid "Usage: %s"
@@ -1278,7 +1306,7 @@ msgstr "已经在同步。状态:%s"
msgid ""
"Unknown item type downloaded - please upgrade Joplin to the latest version"
msgstr ""
msgstr "已下载项目为未知类型,请将 Joplin 升级到最新版本"
msgid "Encrypted"
msgstr "已加密"
@@ -1300,7 +1328,7 @@ msgstr "无法移动笔记本到该位置"
#, javascript-format
msgid "Notebooks cannot be named \"%s\", which is a reserved title."
msgstr "笔记本无法被命名为 \"%s\",这个标题被留作他用。"
msgstr "笔记本无法被命名为“%s”,这个标题被留作他用。"
msgid "created date"
msgstr "创建日期"
@@ -1325,6 +1353,59 @@ 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 "语言"
@@ -1343,6 +1424,12 @@ msgstr "明亮"
msgid "Dark"
msgstr "深邃"
msgid "Solarized Light"
msgstr ""
msgid "Solarized Dark"
msgstr ""
msgid "Uncompleted to-dos on top"
msgstr "将未完成的待办事项置顶"
@@ -1373,45 +1460,41 @@ msgstr "聚焦正文"
msgid "When creating a new note:"
msgstr "当新建笔记时:"
#, fuzzy
msgid "Enable soft breaks"
msgstr "目录"
msgstr ""
#, fuzzy
msgid "Enable math expressions"
msgstr "启用加密"
msgstr "启用数学表达式"
msgid "Enable ==mark== syntax"
msgstr ""
msgstr "启用 ==mark== 句法"
#, fuzzy
msgid "Enable footnotes"
msgstr "目录"
msgstr "启用脚注"
#, fuzzy
msgid "Enable table of contents extension"
msgstr "目录"
msgstr "启用目录扩展"
msgid "Enable ~sub~ syntax"
msgstr ""
msgstr "启用 ~sub~ 句法"
msgid "Enable ^sup^ syntax"
msgstr ""
msgstr "启用 ^sup^ 句法"
msgid "Enable deflist syntax"
msgstr ""
msgstr "启用术语表句法"
msgid "Enable abbreviation syntax"
msgstr ""
msgstr "启用缩写句法"
msgid "Enable markdown emoji"
msgstr ""
msgstr "启用 markdown emoji"
msgid "Enable ++insert++ syntax"
msgstr ""
msgstr "启用 ++insert++ 句法"
msgid "Enable multimarkdown table extension"
msgstr ""
msgstr "启用 multimarkdown 表格扩展"
msgid "Show tray icon"
msgstr "显示托盘图标"
@@ -1481,39 +1564,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 "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 "Custom TLS certificates"
msgstr "自定义 TLS 证书"
@@ -1530,9 +1580,8 @@ msgstr ""
msgid "Ignore TLS certificate errors"
msgstr "忽略 TLS 证书错误"
#, fuzzy
msgid "Enable note history"
msgstr "目录"
msgstr "启用笔记历史"
msgid "days"
msgstr ""
@@ -1542,11 +1591,11 @@ msgid "%d days"
msgstr ""
msgid "Keep note history for"
msgstr ""
msgstr "保留笔记历史记录"
#, javascript-format
msgid "Invalid option value: \"%s\". Possible values are: %s."
msgstr "无效的选项值:\"%s\"。可用值有:%s。"
msgstr "无效的选项值:“%s”。可用值有:%s。"
msgid "General"
msgstr "通用选项"
@@ -1561,14 +1610,14 @@ msgid "Note"
msgstr "笔记"
msgid "Plugins"
msgstr ""
msgstr "插件"
msgid "Application"
msgstr "应用程序"
#, javascript-format
msgid "The tag \"%s\" already exists. Please choose a different name."
msgstr "标签 \"%s\" 已存在。请选择一个不同的名称。"
msgstr "标签“%s”已存在。请选择一个不同的名称。"
msgid "Joplin Export File"
msgstr "Joplin 导出文件"
@@ -1593,7 +1642,7 @@ msgstr "文件目录"
#, javascript-format
msgid "Cannot load \"%s\" module for format \"%s\""
msgstr "无法加载 \"%s\" 模块用于读取 \"%s\" 格式"
msgstr "无法加载“%s”模块用于读取“%s”格式"
#, javascript-format
msgid "Please specify import format for %s"
@@ -1603,7 +1652,7 @@ msgstr "请指定 %s 的导入格式"
msgid ""
"This item is currently encrypted: %s \"%s\". Please wait for all items to be "
"decrypted and try again."
msgstr "该项目当前已加密:%s \"%s\"。请等待所有项目解密后再重试。"
msgstr "该项目当前已加密:%s“%s”。请等待所有项目解密后再重试。"
msgid "There is no data to export."
msgstr "没有可导出的数据。"
@@ -1612,19 +1661,11 @@ msgid "Please specify the notebook where the notes should be imported to."
msgstr "请指定导入笔记的目标笔记本。"
msgid "Restored Notes"
msgstr ""
msgstr "已恢复的笔记"
msgid "Items that cannot be synchronised"
msgstr "无法同步项目"
#, 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"
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 "
@@ -1633,6 +1674,25 @@ msgstr ""
"这些项目将只保存在本设备上,不会上传到同步目标。若需查找这些项目,请搜索标题"
"或 ID(显示在上方括号中)。"
#, javascript-format
msgid "%s (%s) could not be uploaded: %s"
msgstr "%s (%s) 无法上传到:%s"
#, javascript-format
msgid "Item \"%s\" could not be downloaded: %s"
msgstr "项目“%s”无法从 %s 中下载"
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 ""
"Joplin 多次解密这些项目均已失败,可能是它们太大或已经损坏导致的。这些项目会保"
"留再设备上,但 Joplin 不会再尝试对它们进行解密。"
msgid "Sync status (synced items / total items)"
msgstr "同步状态(已同步项目/项目总数)"
@@ -1678,18 +1738,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 "移动到笔记本..."
@@ -1712,8 +1760,35 @@ 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 "配置"
#, javascript-format
msgid "Decrypting items: %d/%d"
msgstr "正在解密项目:%d/%d"
#, javascript-format
msgid "Fetching resources: %d/%d"
msgstr "正在获取资源:%d/%d"
#, fuzzy
msgid "All notes"
msgstr "笔记"
msgid "Notebooks"
msgstr "笔记本"
msgid "Checking... Please wait."
msgstr "正在检查... 请稍候。"
@@ -1755,6 +1830,53 @@ msgstr "新建标签:"
msgid "Type new tags or select from list"
msgstr "输入新的标签或从列表中选择"
msgid "Warning"
msgstr ""
msgid ""
"In order to use file system synchronisation your permission to write to "
"external storage is required."
msgstr ""
#, fuzzy
msgid "Information"
msgstr "更多信息"
msgid "Encryption Config"
msgstr "加密配置"
#, fuzzy
msgid "Tools"
msgstr "工具 (&T)"
#, 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 a long time 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"
@@ -1814,6 +1936,10 @@ msgstr "该笔记本无法保存:%s"
msgid "Edit notebook"
msgstr "编辑笔记本"
#, fuzzy
msgid "Enter notebook title"
msgstr "笔记本标题:"
msgid "Show all"
msgstr "显示全部"
@@ -1837,10 +1963,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 "不支持“%s”协议链接"
#, 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 "拍照"
@@ -1859,23 +2007,19 @@ msgstr "转换为笔记"
msgid "Convert to todo"
msgstr "转换为待办事项"
msgid "Hide metadata"
msgstr "隐藏元数据"
#, fuzzy
msgid "Properties"
msgstr "笔记属性"
msgid "Show metadata"
msgstr "显示元数据"
msgid "View on map"
msgstr "查看地图"
msgid "Go to source URL"
msgstr "定位到源 URL"
msgid "Add body"
msgstr ""
msgid "Edit"
msgstr "编辑"
msgid "Delete notebook"
msgstr "删除笔记本"
#, fuzzy
msgid "Add title"
msgstr "标题"
msgid "Login with OneDrive"
msgstr "通过 OneDrive 登录"
@@ -1883,16 +2027,39 @@ 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"

View File

@@ -501,6 +501,10 @@ msgstr "鍵入 `joplin help` 檢視使用說明。"
msgid "Fatal error:"
msgstr "嚴重錯誤:"
#, javascript-format
msgid "All potential ports are in use - please report the issue at %s"
msgstr ""
msgid ""
"The application has been authorised - you may now close this browser tab."
msgstr "應用程式已取得權限 - 您現在可以關閉此瀏覽器分頁。"
@@ -594,6 +598,27 @@ 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)"
@@ -611,6 +636,9 @@ msgstr ""
msgid "Check for updates..."
msgstr "檢查更新..."
msgid "Templates"
msgstr ""
msgid "Import"
msgstr "匯入"
@@ -656,12 +684,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 "在所有記事中搜尋"
@@ -697,6 +731,9 @@ msgstr "官方網站及線上說明"
msgid "Make a donation"
msgstr "捐助"
msgid "Toggle development tools"
msgstr ""
#, javascript-format
msgid "Open %s"
msgstr "開啟 %s"
@@ -918,9 +955,6 @@ msgstr "記事本標題:"
msgid "Add or remove tags:"
msgstr "新增或移除標籤:"
msgid "Separate each tag by a comma."
msgstr "您可用逗號分隔每個標籤。"
msgid "Rename notebook:"
msgstr "重新命名記事本:"
@@ -930,6 +964,9 @@ msgstr "重新命名標籤:"
msgid "Set alarm:"
msgstr "設置提醒:"
msgid "Template file:"
msgstr ""
msgid "Layout"
msgstr "頁面佈局"
@@ -942,8 +979,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 "設置密碼"
@@ -965,6 +1003,9 @@ msgstr ""
msgid "Note History"
msgstr "記事本"
msgid "Markup"
msgstr ""
msgid "Previous versions of this note"
msgstr ""
@@ -1035,9 +1076,6 @@ msgstr "插入超連結"
msgid "Attach file"
msgstr "附加檔案"
msgid "Tags"
msgstr "標籤"
msgid "Set alarm"
msgstr "設置提醒"
@@ -1048,9 +1086,6 @@ msgstr "在: %s"
msgid "Hyperlink"
msgstr "超連結"
msgid "Code"
msgstr "引言"
msgid "Numbered List"
msgstr "編號清單"
@@ -1126,20 +1161,12 @@ msgstr "刪除"
msgid "Rename"
msgstr "重新命名"
msgid "Notebooks"
msgstr "記事本"
#, javascript-format
msgid "Decrypting items: %d/%d"
msgstr "正在解密項目: %d/%d 項"
#, fuzzy, javascript-format
msgid "Fetching resources: %d"
msgstr "資源: %d。"
msgid "Please select where the sync status should be exported to"
msgstr "請選擇將同步狀態導出到的位置"
msgid "Retry"
msgstr ""
msgid "Add or remove tags"
msgstr "新增或移除標籤"
@@ -1336,6 +1363,58 @@ msgid ""
"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 "語言"
@@ -1354,6 +1433,12 @@ msgstr "光亮"
msgid "Dark"
msgstr "暗黑"
msgid "Solarized Light"
msgstr ""
msgid "Solarized Dark"
msgstr ""
msgid "Uncompleted to-dos on top"
msgstr "最上方顯示未完成的待辦事項"
@@ -1489,40 +1574,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 "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 "Custom TLS certificates"
msgstr "自訂 TLS 證書"
@@ -1631,6 +1682,14 @@ msgstr ""
msgid "Items that cannot be synchronised"
msgstr "無法同步的項目"
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 ""
"這些頊目將保留在設備上,但不會上載到同步目標。要尋找這些項目,請以標題或 ID "
"(在上面的括弧中顯示) 搜索。"
#, fuzzy, javascript-format
msgid "%s (%s) could not be uploaded: %s"
msgstr "無法開啟檔案: %s"
@@ -1639,13 +1698,15 @@ msgstr "無法開啟檔案: %s"
msgid "Item \"%s\" could not be downloaded: %s"
msgstr "無法開啟檔案: %s"
#, fuzzy
msgid "Items that cannot be decrypted"
msgstr "無法同步的項目"
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)."
"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 ""
"這些頊目將保留在設備上,但不會上載到同步目標。要尋找這些項目,請以標題或 ID "
"(在上面的括弧中顯示) 搜索。"
msgid "Sync status (synced items / total items)"
msgstr "同步狀態 (已同步項目 / 項目總數)"
@@ -1692,18 +1753,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 "移動至記事本..."
@@ -1727,8 +1776,35 @@ 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 "設置"
#, javascript-format
msgid "Decrypting items: %d/%d"
msgstr "正在解密項目: %d/%d 項"
#, fuzzy, javascript-format
msgid "Fetching resources: %d/%d"
msgstr "資源: %d/%d"
#, fuzzy
msgid "All notes"
msgstr "記事"
msgid "Notebooks"
msgstr "記事本"
#, fuzzy
msgid "Checking... Please wait."
@@ -1766,6 +1842,54 @@ msgstr "新增標籤:"
msgid "Type new tags or select from list"
msgstr "輸入新標籤,或在清單中選擇"
msgid "Warning"
msgstr ""
msgid ""
"In order to use file system synchronisation 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 a long time 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"
@@ -1825,6 +1949,10 @@ msgstr "無法儲存記事本: %s"
msgid "Edit notebook"
msgstr "編輯記事本"
#, fuzzy
msgid "Enter notebook title"
msgstr "記事本標題:"
msgid "Show all"
msgstr "顯示全部"
@@ -1848,10 +1976,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 "附加相片"
@@ -1871,23 +2021,18 @@ msgstr "轉換為記事"
msgid "Convert to todo"
msgstr "轉換為待辦事項"
msgid "Hide metadata"
msgstr "隱藏後設資料 (metadata)"
msgid "Properties"
msgstr ""
msgid "Show metadata"
msgstr "顯示後設資料 (metadata)"
msgid "View on map"
msgstr "在地圖上顯示"
msgid "Go to source URL"
msgid "Add body"
msgstr ""
msgid "Edit"
msgstr "編輯"
msgid "Delete notebook"
msgstr "刪除記事本"
#, fuzzy
msgid "Add title"
msgstr "標題"
msgid "Login with OneDrive"
msgstr "以 OneDrive 登錄"
@@ -1895,16 +2040,35 @@ 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"

View File

@@ -1,6 +1,6 @@
{
"name": "joplin",
"version": "1.0.128",
"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",
@@ -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",
@@ -661,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",
@@ -1437,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.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
},
"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",
@@ -1515,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"
}
@@ -1551,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": {
@@ -1574,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",
@@ -1613,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",
@@ -2030,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",
@@ -2169,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",
@@ -2411,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": {
@@ -2433,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",
@@ -2590,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",
@@ -2852,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",
@@ -3106,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",
@@ -3177,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",
@@ -3232,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.128",
"version": "1.0.140",
"bin": {
"joplin": "./main.js"
},
@@ -43,7 +43,7 @@
"html-minifier": "^3.5.15",
"image-data-uri": "^2.0.0",
"image-type": "^3.0.0",
"joplin-turndown": "^4.0.11",
"joplin-turndown": "^4.0.17",
"joplin-turndown-plugin-gfm": "^1.0.8",
"jssha": "^2.3.0",
"levenshtein": "^1.0.5",

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

@@ -36,10 +36,12 @@ 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 !== 'list5.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

@@ -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 @@
[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

@@ -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

@@ -68,4 +68,37 @@ describe('models_Revision', function() {
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

@@ -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, allSyncTargetItemsEncrypted, revisionService, 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');
@@ -53,6 +53,10 @@ 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 {
@@ -861,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);
@@ -890,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);
@@ -916,7 +920,7 @@ describe('Synchronizer', function() {
expect(r1.size).toBe(-1);
const fetcher = new ResourceFetcher(() => { return synchronizer().api() });
fetcher.queueDownload(r1.id);
fetcher.queueDownload_(r1.id);
await fetcher.waitForAllFinished();
r1 = await Resource.load(r1.id);
expect(r1.size).toBe(2720);
@@ -943,6 +947,9 @@ describe('Synchronizer', function() {
await synchronizer().start();
expect((await remoteNotesFoldersResources()).length).toBe(2);
const remoteBlob = await fileApi().stat('.resource/' + resource1.id);
expect(!remoteBlob).toBe(true);
await switchClient(1);
expect(await shim.fsDriver().exists(resourcePath1)).toBe(true);
@@ -970,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];
@@ -1053,7 +1060,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();
await decryptionWorker().start();
@@ -1166,11 +1173,6 @@ describe('Synchronizer', function() {
const f1_1 = await Folder.load(f1.id);
expect(f1_1.title).toBe('Welcome MOD');
// Now check that it created the duplicate tag
const tags = await Tag.modelSelectAll('SELECT * FROM tags WHERE title = "organising"');
expect(tags.length).toBe(2);
}));
it("should not save revisions when updating a note via sync", asyncTest(async () => {
@@ -1320,4 +1322,161 @@ describe('Synchronizer', function() {
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

@@ -33,6 +33,7 @@ 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');
@@ -42,6 +43,7 @@ let encryptionServices_ = [];
let revisionServices_ = [];
let decryptionWorkers_ = [];
let resourceServices_ = [];
let kvStores_ = [];
let fileApi_ = null;
let currentClient_ = 1;
@@ -74,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' });
@@ -149,6 +156,7 @@ async function clearDatabase(id = null) {
'sync_items',
'notes_normalized',
'revisions',
'key_values',
];
const queries = [];
@@ -181,7 +189,7 @@ async function setupDatabase(id = null) {
};
databases_[id] = new JoplinDatabase(new DatabaseDriverNode());
databases_[id].setLogger(logger);
databases_[id].setLogger(dbLogger);
await databases_[id].open({ name: filePath });
BaseModel.db_ = databases_[id];
@@ -218,6 +226,7 @@ async function setupDatabaseAndSynchronizer(id = null) {
decryptionWorkers_[id] = new DecryptionWorker();
decryptionWorkers_[id].setEncryptionService(encryptionServices_[id]);
resourceServices_[id] = new ResourceService();
kvStores_[id] = new KvStore();
await fileApi().clearRoot();
}
@@ -237,6 +246,13 @@ 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];
@@ -244,7 +260,9 @@ function revisionService(id = null) {
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) {
@@ -374,4 +392,4 @@ async function allSyncTargetItemsEncrypted() {
return totalCount === encryptedCount;
}
module.exports = { resourceService, allSyncTargetItemsEncrypted, setupDatabase, revisionService, setupDatabaseAndSynchronizer, db, synchronizer, fileApi, sleep, clearDatabase, switchClient, syncTargetId, objectsEqual, checkThrowAsync, encryptionService, loadEncryptionMasterKey, fileContentEqual, decryptionWorker, asyncTest };
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();
});

View File

@@ -23,11 +23,12 @@ window.joplinEnv = function() {
return env_;
}
async function browserCaptureVisibleTabs(windowId, options) {
if (browserSupportsPromises_) return browser_.tabs.captureVisibleTab(windowId, { format: 'jpeg' });
async function browserCaptureVisibleTabs(windowId) {
const options = { format: 'jpeg' };
if (browserSupportsPromises_) return browser_.tabs.captureVisibleTab(windowId, options);
return new Promise((resolve, reject) => {
browser_.tabs.captureVisibleTab(windowId, { format: 'jpeg' }, (image) => {
browser_.tabs.captureVisibleTab(windowId, options, (image) => {
resolve(image);
});
});
@@ -56,7 +57,7 @@ browser_.runtime.onMessage.addListener(async (command) => {
const zoom = await browserGetZoom();
const imageDataUrl = await browserCaptureVisibleTabs(null, { format: 'jpeg' });
const imageDataUrl = await browserCaptureVisibleTabs(null);
content = Object.assign({}, command.content);
content.image_data_url = imageDataUrl;

View File

@@ -19,7 +19,7 @@
const protocol = url.toLowerCase().split(':')[0];
if (['http', 'https', 'file'].indexOf(protocol) >= 0) return url;
if (url.indexOf('//')) {
if (url.indexOf('//') === 0) {
return location.protocol + url;
} else if (url[0] === '/') {
return location.protocol + '//' + location.host + url;
@@ -34,8 +34,20 @@
return document.title.trim();
}
function pageLocationOrigin() {
// location.origin normally returns the protocol + domain + port (eg. https://example.com:8080)
// but for file:// protocol this is browser dependant and in particular Firefox returns "null"
// in this case.
if (location.protocol === 'file:') {
return 'file://';
} else {
return location.origin;
}
}
function baseUrl() {
let output = location.origin + location.pathname;
let output = pageLocationOrigin() + location.pathname;
if (output[output.length - 1] !== '/') {
output = output.split('/');
output.pop();
@@ -49,43 +61,174 @@
const output = {};
for (let i = 0; i < images.length; i++) {
const img = images[i];
const src = forceAbsoluteUrls ? absoluteUrl(img.src) : img.src;
output[src] = {
if (img.classList && img.classList.contains('joplin-clipper-hidden')) continue;
let src = imageSrc(img);
src = forceAbsoluteUrls ? absoluteUrl(src) : src;
if (!output[src]) output[src] = [];
output[src].push({
width: img.width,
height: img.height,
naturalWidth: img.naturalWidth,
naturalHeight: img.naturalHeight,
};
});
}
return output;
}
function getAnchorNames(element) {
const anchors = element.getElementsByTagName('a');
const output = [];
for (let i = 0; i < anchors.length; i++) {
const anchor = anchors[i];
if (anchor.id) {
output.push(anchor.id);
} else if (anchor.name) {
output.push(anchor.name);
}
}
return output;
}
// In general we should use currentSrc because that's the image that's currently displayed,
// especially within <picture> tags or with srcset. In these cases there can be multiple
// sources and the best one is probably the one being displayed, thus currentSrc.
function imageSrc(image) {
if (image.currentSrc) return image.currentSrc;
return image.src;
}
// Cleans up element by removing all its invisible children (which we don't want to render as Markdown)
function cleanUpElement(element, imageSizes) {
// And hard-code the image dimensions so that the information can be used by the clipper server to
// display them at the right sizes in the notes.
function cleanUpElement(convertToMarkup, element, imageSizes, imageIndexes) {
const childNodes = element.childNodes;
const hiddenNodes = [];
for (let i = 0; i < childNodes.length; i++) {
const node = childNodes[i];
const nodeName = node.nodeName.toLowerCase();
let isVisible = node.nodeType === 1 ? window.getComputedStyle(node).display !== 'none' : true;
if (isVisible && ['input', 'textarea', 'script', 'noscript', 'style', 'select', 'option', 'button'].indexOf(node.nodeName.toLowerCase()) >= 0) isVisible = false;
const isHidden = node && node.classList && node.classList.contains('joplin-clipper-hidden');
if (!isVisible) {
element.removeChild(node);
if (isHidden) {
hiddenNodes.push(node);
} else {
if (node.nodeName.toLowerCase() === 'img') {
node.src = absoluteUrl(node.src);
const imageSize = imageSizes[node.src];
if (imageSize) {
// If the data-joplin-clipper-value has been set earlier, create a new DIV element
// to replace the input or text area, so that it can be exported.
if (node.getAttribute && node.getAttribute('data-joplin-clipper-value')) {
const div = document.createElement('div');
div.innerText = node.getAttribute('data-joplin-clipper-value');
node.parentNode.insertBefore(div, node.nextSibling);
element.removeChild(node);
}
if (nodeName === 'img') {
const src = absoluteUrl(imageSrc(node));
node.setAttribute('src', src);
if (!(src in imageIndexes)) imageIndexes[src] = 0;
const imageSize = imageSizes[src][imageIndexes[src]];
imageIndexes[src]++;
if (imageSize && convertToMarkup === 'markdown') {
node.width = imageSize.width;
node.height = imageSize.height;
}
}
cleanUpElement(node, imageSizes);
cleanUpElement(convertToMarkup, node, imageSizes, imageIndexes);
}
}
for (const hiddenNode of hiddenNodes) {
if (!hiddenNode.parentNode) continue;
hiddenNode.parentNode.removeChild(hiddenNode);
}
}
// When we clone the document before cleaning it, we lose some of the information that might have been set via CSS or
// JavaScript, in particular whether an element was hidden or not. This function pre-process the document by
// adding a "joplin-clipper-hidden" class to all currently hidden elements in the current document.
// This class is then used in cleanUpElement() on the cloned document to find an element should be visible or not.
function preProcessDocument(element) {
const childNodes = element.childNodes;
for (let i = childNodes.length - 1; i >= 0; i--) {
const node = childNodes[i];
const nodeName = node.nodeName.toLowerCase();
const nodeParent = node.parentNode;
const nodeParentName = nodeParent ? nodeParent.nodeName.toLowerCase() : '';
let isVisible = node.nodeType === 1 ? window.getComputedStyle(node).display !== 'none' : true;
if (isVisible && ['script', 'noscript', 'style', 'select', 'option', 'button'].indexOf(nodeName) >= 0) isVisible = false;
// If it's a text input or a textarea and it has a value, save
// that value to data-joplin-clipper-value. This is then used
// when cleaning up the document to export the value.
if (['input', 'textarea'].indexOf(nodeName) >= 0) {
isVisible = !!node.value;
if (nodeName === 'input' && node.getAttribute('type') !== 'text') isVisible = false;
if (isVisible) node.setAttribute('data-joplin-clipper-value', node.value);
}
if (nodeName === 'script') {
const a = node.getAttribute('type');
if (a && a.toLowerCase().indexOf('math/tex') >= 0) isVisible = true;
}
if (nodeName === 'source' && nodeParentName === 'picture') {
isVisible = false
}
if (node.nodeType === 8) { // Comments are just removed since we can't add a class
node.parentNode.removeChild(node);
} else if (!isVisible) {
node.classList.add('joplin-clipper-hidden');
} else {
preProcessDocument(node);
}
}
}
// This sets the PRE elements computed style to the style attribute, so that
// the info can be exported and later processed by the htmlToMd converter
// to detect code blocks.
function hardcodePreStyles(doc) {
const preElements = doc.getElementsByTagName('pre');
for (const preElement of preElements) {
const fontFamily = getComputedStyle(preElement).getPropertyValue('font-family');
const fontFamilyArray = fontFamily.split(',').map(f => f.toLowerCase().trim());
if (fontFamilyArray.indexOf('monospace') >= 0) {
preElement.style.fontFamily = fontFamily;
}
}
}
// Given a document, return a <style> tag that contains all the styles
// required to render the page. Not currently used but could be as an
// option to clip pages as HTML.
function getStyleSheets(doc) {
const output = [];
for (var i=0; i<doc.styleSheets.length; i++) {
var sheet = doc.styleSheets[i];
try {
for (const cssRule of sheet.cssRules) {
output.push({ type: 'text', value: cssRule.cssText });
}
} catch (error) {
// Calling sheet.cssRules will throw a CORS error on Chrome if the stylesheet is on a different domain.
// In that case, we skip it and add it to the list of stylesheet URLs. These URls will be downloaded
// by the desktop application, since it doesn't have CORS restrictions.
console.info('Could not retrieve stylesheet now:', sheet.href);
console.info('It will downloaded by the main application.');
console.info(error);
output.push({ type: 'url', value: sheet.href });
}
}
return output;
}
function documentForReadability() {
@@ -117,16 +260,22 @@
async function prepareCommandResponse(command) {
console.info('Got command: ' + command.name);
const clippedContentResponse = (title, html, imageSizes) => {
const convertToMarkup = command.preProcessFor ? command.preProcessFor : 'markdown';
const clippedContentResponse = (title, html, imageSizes, anchorNames, stylesheets) => {
return {
name: 'clippedContent',
title: title,
html: html,
base_url: baseUrl(),
url: location.origin + location.pathname + location.search,
url: pageLocationOrigin() + location.pathname + location.search,
parent_id: command.parent_id,
tags: command.tags || '',
image_sizes: imageSizes,
anchor_names: anchorNames,
source_command: Object.assign({}, command),
convert_to: convertToMarkup,
stylesheets: stylesheets,
};
}
@@ -143,27 +292,38 @@
response.warning = 'Could not retrieve simplified version of page - full page has been saved instead.';
return response;
}
return clippedContentResponse(article.title, article.body, getImageSizes(document));
return clippedContentResponse(article.title, article.body, getImageSizes(document), getAnchorNames(document));
} else if (command.name === "isProbablyReaderable") {
const ok = isProbablyReaderable(documentForReadability());
console.info('isProbablyReaderable', ok);
return { name: 'isProbablyReaderable', value: ok };
} else if (command.name === "completePageHtml") {
hardcodePreStyles(document);
preProcessDocument(document);
// Because cleanUpElement is going to modify the DOM and remove elements we don't want to work
// directly on the document, so we make a copy of it first.
const cleanDocument = document.body.cloneNode(true);
const imageSizes = getImageSizes(document, true);
cleanUpElement(cleanDocument, imageSizes);
return clippedContentResponse(pageTitle(), cleanDocument.innerHTML, imageSizes);
const imageIndexes = {};
cleanUpElement(convertToMarkup, cleanDocument, imageSizes, imageIndexes);
const stylesheets = convertToMarkup === 'html' ? getStyleSheets(document) : null;
return clippedContentResponse(pageTitle(), cleanDocument.innerHTML, imageSizes, getAnchorNames(document), stylesheets);
} else if (command.name === "selectedHtml") {
const range = window.getSelection().getRangeAt(0);
const container = document.createElement('div');
container.appendChild(range.cloneContents());
return clippedContentResponse(pageTitle(), container.innerHTML, getImageSizes(document));
hardcodePreStyles(document);
preProcessDocument(document);
const range = window.getSelection().getRangeAt(0);
const container = document.createElement('div');
container.appendChild(range.cloneContents());
const imageSizes = getImageSizes(document, true);
const imageIndexes = {};
cleanUpElement(convertToMarkup, container, imageSizes, imageIndexes);
return clippedContentResponse(pageTitle(), container.innerHTML, getImageSizes(document), getAnchorNames(document));
} else if (command.name === 'screenshot') {
@@ -265,7 +425,7 @@
const content = {
title: pageTitle(),
crop_rect: selectionArea,
url: location.origin + location.pathname,
url: pageLocationOrigin() + location.pathname,
parent_id: command.parent_id,
tags: command.tags,
};
@@ -286,8 +446,8 @@
} else if (command.name === "pageUrl") {
let url = location.origin + location.pathname + location.search;
return clippedContentResponse(pageTitle(), url, getImageSizes(document));
let url = pageLocationOrigin() + location.pathname + location.search;
return clippedContentResponse(pageTitle(), url, getImageSizes(document), getAnchorNames(document));
} else {
throw new Error('Unknown command: ' + JSON.stringify(command));

View File

@@ -1,7 +1,7 @@
{
"manifest_version": 2,
"name": "Joplin Web Clipper [DEV]",
"version": "1.0.14",
"version": "1.0.17",
"description": "Capture and save web pages and screenshots from your browser to Joplin.",
"homepage_url": "https://joplinapp.org",
"content_security_policy": "script-src 'self' 'unsafe-eval'; object-src 'self'",

View File

@@ -1,6 +1,6 @@
.App {
width: 400px;
height: 600px;
overflow-x: hidden;
overflow-y: hidden;
display: flex;

View File

@@ -7,6 +7,20 @@ import led_orange from './led_orange.png';
const { connect } = require('react-redux');
const { bridge } = require('./bridge');
function commandUserString(command) {
const s = [];
if (command.name === 'simplifiedPageHtml') s.push('Simplified page');
if (command.name === 'completePageHtml') s.push('Complete page');
if (command.name === 'selectedHtml') s.push('Selection');
if (command.name === 'pageUrl') s.push('URL only');
const p = command.preProcessFor ? command.preProcessFor : 'markdown';
s.push('(' + p + ')');
return s.join(' ');
}
class PreviewComponent extends React.PureComponent {
constructor() {
@@ -16,6 +30,8 @@ class PreviewComponent extends React.PureComponent {
}
componentDidMount() {
if (!this.bodyRef.current) return;
// Because the text size is made twice smaller with CSS, we need
// to also reduce the size of the images
const imgs = this.bodyRef.current.getElementsByTagName('img');
@@ -28,14 +44,23 @@ class PreviewComponent extends React.PureComponent {
render() {
return (
<div className="Preview">
<a className={"Confirm Button"} onClick={this.props.onConfirmClick}>Confirm</a>
<h2>Preview:</h2>
<h2>Title:</h2>
<input className={"Title"} value={this.props.title} onChange={this.props.onTitleChange}/>
<div className={"BodyWrapper"}>
<div className={"Body"} ref={this.bodyRef} dangerouslySetInnerHTML={{__html: this.props.body_html}}></div>
</div>
<p><span>Type:</span> {commandUserString(this.props.command)}</p>
<a className={"Confirm Button"} onClick={this.props.onConfirmClick}>Confirm</a>
</div>
);
// return (
// <div className="Preview">
// <a className={"Confirm Button"} onClick={this.props.onConfirmClick}>Confirm</a>
// <h2>Preview:</h2>
// <input className={"Title"} value={this.props.title} onChange={this.props.onTitleChange}/>
// <div className={"BodyWrapper"}>
// <div className={"Body"} ref={this.bodyRef} dangerouslySetInnerHTML={{__html: this.props.body_html}}></div>
// </div>
// </div>
// );
}
}
@@ -74,6 +99,14 @@ class AppComponent extends Component {
this.clipComplete_click = () => {
bridge().sendCommandToActiveTab({
name: 'completePageHtml',
preProcessFor: 'markdown',
});
}
this.clipCompleteHtml_click = () => {
bridge().sendCommandToActiveTab({
name: 'completePageHtml',
preProcessFor: 'html',
});
}
@@ -249,6 +282,7 @@ class AppComponent extends Component {
title={content.title}
body_html={content.body_html}
onTitleChange={this.contentTitle_change}
command={content.source_command}
/>
}
@@ -350,6 +384,7 @@ class AppComponent extends Component {
<ul>
<li><a className="Button" onClick={this.clipSimplified_click} title={simplifiedPageButtonTooltip}>{simplifiedPageButtonLabel}</a></li>
<li><a className="Button" onClick={this.clipComplete_click}>Clip complete page</a></li>
<li><a className="Button" onClick={this.clipCompleteHtml_click}>Clip complete page (HTML) (Beta)</a></li>
<li><a className="Button" onClick={this.clipSelection_click}>Clip selection</a></li>
<li><a className="Button" onClick={this.clipScreenshot_click}>Clip screenshot</a></li>
<li><a className="Button" onClick={this.clipUrl_click}>Clip URL</a></li>

View File

@@ -34,6 +34,10 @@ class Bridge {
parent_id: command.parent_id,
tags: command.tags || '',
image_sizes: command.image_sizes || {},
anchor_names: command.anchor_names || [],
source_command: command.source_command,
convert_to: command.convert_to,
stylesheets: command.stylesheets,
};
this.dispatch({ type: 'CLIPPED_CONTENT_SET', content: content });

View File

@@ -26,11 +26,13 @@ const ResourceService = require('lib/services/ResourceService');
const ClipperServer = require('lib/ClipperServer');
const ExternalEditWatcher = require('lib/services/ExternalEditWatcher');
const { bridge } = require('electron').remote.require('./bridge');
const { shell } = require('electron');
const Menu = bridge().Menu;
const MenuItem = bridge().MenuItem;
const PluginManager = require('lib/services/PluginManager');
const RevisionService = require('lib/services/RevisionService');
const MigrationService = require('lib/services/MigrationService');
const TemplateUtils = require('lib/TemplateUtils');
const pluginClasses = [
require('./plugins/GotoAnything.min'),
@@ -50,6 +52,7 @@ const appDefaultState = Object.assign({}, defaultState, {
windowContentSize: bridge().windowContentSize(),
watchedNoteFiles: [],
lastEditorScrollPercents: {},
noteDevToolsVisible: false,
});
class Application extends BaseApplication {
@@ -187,6 +190,12 @@ class Application extends BaseApplication {
newState.lastEditorScrollPercents = newPercents;
break;
case 'NOTE_DEVTOOLS_TOGGLE':
newState = Object.assign({}, state);
newState.noteDevToolsVisible = !newState.noteDevToolsVisible;
break;
}
} catch (error) {
error.message = 'In reducer: ' + error.message + ' Action: ' + JSON.stringify(action);
@@ -202,7 +211,7 @@ class Application extends BaseApplication {
// The bridge runs within the main process, with its own instance of locale.js
// so it needs to be set too here.
bridge().setLocale(Setting.value('locale'));
this.refreshMenu();
await this.refreshMenu();
}
if (action.type == 'SETTING_UPDATE_ONE' && action.key == 'showTrayIcon' || action.type == 'SETTING_UPDATE_ALL') {
@@ -232,13 +241,17 @@ class Application extends BaseApplication {
Setting.setValue('sidebarVisibility', newState.sidebarVisibility);
}
if (action.type.indexOf('NOTE_SELECT') === 0 || action.type.indexOf('FOLDER_SELECT') === 0) {
this.updateMenuItemStates();
}
return result;
}
refreshMenu() {
async refreshMenu() {
const screen = this.lastMenuScreen_;
this.lastMenuScreen_ = null;
this.updateMenu(screen);
await this.updateMenu(screen);
}
focusElement_(target) {
@@ -249,7 +262,7 @@ class Application extends BaseApplication {
});
}
updateMenu(screen) {
async updateMenu(screen) {
if (this.lastMenuScreen_ === screen) return;
const sortNoteFolderItems = (type) => {
@@ -317,6 +330,7 @@ class Application extends BaseApplication {
const exportItems = [];
const preferencesItems = [];
const toolsItemsFirst = [];
const templateItems = [];
const ioService = new InteropService();
const ioModules = ioService.modules();
for (let i = 0; i < ioModules.length; i++) {
@@ -493,6 +507,57 @@ class Application extends BaseApplication {
screens: ['Main'],
});
const templateDirExists = await shim.fsDriver().exists(Setting.value('templateDir'));
templateItems.push({
label: _('Create note from template'),
visible: templateDirExists,
click: () => {
this.dispatch({
type: 'WINDOW_COMMAND',
name: 'selectTemplate',
noteType: 'note',
});
}
}, {
label: _('Create to-do from template'),
visible: templateDirExists,
click: () => {
this.dispatch({
type: 'WINDOW_COMMAND',
name: 'selectTemplate',
noteType: 'todo',
});
}
}, {
label: _('Insert template'),
visible: templateDirExists,
accelerator: 'CommandOrControl+Alt+I',
click: () => {
this.dispatch({
type: 'WINDOW_COMMAND',
name: 'selectTemplate',
});
}
}, {
label: _('Open template directory'),
click: () => {
const templateDir = Setting.value('templateDir');
if (!templateDirExists) shim.fsDriver().mkdir(templateDir);
shell.openItem(templateDir);
}
}, {
label: _('Refresh templates'),
click: async () => {
const templates = await TemplateUtils.loadTemplates(Setting.value('templateDir'));
this.store().dispatch({
type: 'TEMPLATE_UPDATE_ALL',
templates: templates
});
}
});
const toolsItems = toolsItemsFirst.concat(preferencesItems);
function _checkForUpdates(ctx) {
@@ -501,12 +566,20 @@ class Application extends BaseApplication {
function _showAbout() {
const p = packageInfo;
let gitInfo = '';
if ("git" in p) {
gitInfo = _('Revision: %s (%s)', p.git.hash, p.git.branch);
}
let message = [
p.description,
'',
'Copyright © 2016-2019 Laurent Cozic',
_('%s %s (%s, %s)', p.name, p.version, Setting.value('env'), process.platform),
];
if (!!gitInfo) {
message.push("\n" + gitInfo);
console.info(gitInfo);
}
bridge().showInfoMessageBox(message.join('\n'), {
icon: bridge().electronApp().buildDir() + '/icons/32x32.png',
});
@@ -544,6 +617,13 @@ class Application extends BaseApplication {
shim.isMac() ? noItem : newNotebookItem, {
type: 'separator',
visible: shim.isMac() ? false : true
}, {
label: _('Templates'),
visible: shim.isMac() ? false : true,
submenu: templateItems,
}, {
type: 'separator',
visible: shim.isMac() ? false : true
}, {
label: _('Import'),
visible: shim.isMac() ? false : true,
@@ -594,6 +674,11 @@ class Application extends BaseApplication {
platforms: ['darwin'],
accelerator: 'Command+W',
selector: 'performClose:',
}, {
type: 'separator',
}, {
label: _('Templates'),
submenu: templateItems,
}, {
type: 'separator',
}, {
@@ -611,20 +696,25 @@ class Application extends BaseApplication {
const rootMenus = {
edit: {
id: 'edit',
label: _('&Edit'),
submenu: [{
id: 'edit:copy',
label: _('Copy'),
role: 'copy',
accelerator: 'CommandOrControl+C',
}, {
id: 'edit:cut',
label: _('Cut'),
role: 'cut',
accelerator: 'CommandOrControl+X',
}, {
id: 'edit:paste',
label: _('Paste'),
role: 'paste',
accelerator: 'CommandOrControl+V',
}, {
id: 'edit:selectAll',
label: _('Select all'),
role: 'selectall',
accelerator: 'CommandOrControl+A',
@@ -632,6 +722,7 @@ class Application extends BaseApplication {
type: 'separator',
screens: ['Main'],
}, {
id: 'edit:bold',
label: _('Bold'),
screens: ['Main'],
accelerator: 'CommandOrControl+B',
@@ -642,6 +733,7 @@ class Application extends BaseApplication {
});
},
}, {
id: 'edit:italic',
label: _('Italic'),
screens: ['Main'],
accelerator: 'CommandOrControl+I',
@@ -652,6 +744,7 @@ class Application extends BaseApplication {
});
},
}, {
id: 'edit:link',
label: _('Link'),
screens: ['Main'],
accelerator: 'CommandOrControl+K',
@@ -661,10 +754,22 @@ class Application extends BaseApplication {
name: 'textLink',
});
},
}, {
id: 'edit:code',
label: _('Code'),
screens: ['Main'],
accelerator: 'CommandOrControl+`',
click: () => {
this.dispatch({
type: 'WINDOW_COMMAND',
name: 'textCode',
});
},
}, {
type: 'separator',
screens: ['Main'],
}, {
id: 'edit:insertDateTime',
label: _('Insert Date Time'),
screens: ['Main'],
accelerator: 'CommandOrControl+Shift+T',
@@ -678,6 +783,7 @@ class Application extends BaseApplication {
type: 'separator',
screens: ['Main'],
}, {
id: 'edit:commandStartExternalEditing',
label: _('Edit in external editor'),
screens: ['Main'],
accelerator: 'CommandOrControl+E',
@@ -687,20 +793,37 @@ class Application extends BaseApplication {
name: 'commandStartExternalEditing',
});
},
}, {
id: 'edit:setTags',
label: _('Tags'),
screens: ['Main'],
accelerator: 'CommandOrControl+Alt+T',
click: () => {
const selectedNoteIds = this.store().getState().selectedNoteIds;
if (selectedNoteIds.length !== 1) return;
this.dispatch({
type: 'WINDOW_COMMAND',
name: 'setTags',
noteId: selectedNoteIds[0],
});
},
}, {
type: 'separator',
screens: ['Main'],
}, {
id: 'edit:focusSearch',
label: _('Search in all the notes'),
screens: ['Main'],
accelerator: shim.isMac() ? 'Shift+Command+F' : 'F6',
click: () => {
this.dispatch({
type: 'WINDOW_COMMAND',
name: 'focus_search',
name: 'focusSearch',
});
},
}, {
id: 'edit:showLocalSearch',
label: _('Search in current note'),
screens: ['Main'],
accelerator: 'CommandOrControl+F',
@@ -787,6 +910,17 @@ class Application extends BaseApplication {
label: _('Check for updates...'),
visible: shim.isMac() ? false : true,
click: () => _checkForUpdates(this)
}, {
type: 'separator',
screens: ['Main'],
}, {
label: _('Toggle development tools'),
visible: true,
click: () => {
this.dispatch({
type: 'NOTE_DEVTOOLS_TOGGLE',
});
},
}, {
type: 'separator',
visible: shim.isMac() ? false : true,
@@ -806,6 +940,24 @@ class Application extends BaseApplication {
rootMenus.file = rootMenuFile;
}
// It seems the "visible" property of separators is ignored by Electron, making
// it display separators that we want hidden. So this function iterates through
// them and remove them completely.
const cleanUpSeparators = items => {
const output = [];
for (const item of items) {
if ('visible' in item && item.type === 'separator' && !item.visible) continue;
output.push(item);
}
return output;
}
for (const key in rootMenus) {
if (!rootMenus.hasOwnProperty(key)) continue;
if (!rootMenus[key].submenu) continue;
rootMenus[key].submenu = cleanUpSeparators(rootMenus[key].submenu);
}
const pluginMenuItems = PluginManager.instance().menuItems();
for (const item of pluginMenuItems) {
let itemParent = rootMenus[item.parent] ? rootMenus[item.parent] : 'tools';
@@ -868,6 +1020,20 @@ class Application extends BaseApplication {
this.lastMenuScreen_ = screen;
}
async updateMenuItemStates() {
if (!this.lastMenuScreen_) return;
if (!this.store()) return;
const selectedNoteIds = this.store().getState().selectedNoteIds;
const note = selectedNoteIds.length === 1 ? await Note.load(selectedNoteIds[0]) : null;
for (const itemId of ['copy', 'paste', 'cut', 'selectAll', 'bold', 'italic', 'link', 'code', 'insertDateTime', 'commandStartExternalEditing', 'setTags', 'showLocalSearch']) {
const menuItem = Menu.getApplicationMenu().getMenuItemById('edit:' + itemId);
if (!menuItem) continue;
menuItem.enabled = !!note && note.markup_language === Note.MARKUP_LANGUAGE_MARKDOWN;
}
}
updateTray() {
const app = bridge().electronApp();
@@ -981,6 +1147,13 @@ class Application extends BaseApplication {
css: cssString
});
const templates = await TemplateUtils.loadTemplates(Setting.value('templateDir'));
this.store().dispatch({
type: 'TEMPLATE_UPDATE_ALL',
templates: templates
});
// Note: Auto-update currently doesn't work in Linux: it downloads the update
// but then doesn't install it on exit.
if (shim.isWindows() || shim.isMac()) {
@@ -1036,9 +1209,12 @@ class Application extends BaseApplication {
RevisionService.instance().runInBackground();
this.updateMenuItemStates();
// Make it available to the console window - useful to call revisionService.collectRevisions()
window.revisionService = RevisionService.instance();
window.migrationService = MigrationService.instance();
window.decryptionWorker = DecryptionWorker.instance();
}
}

View File

@@ -1,4 +1,5 @@
const fs = require('fs-extra');
const execSync = require('child_process').execSync;
// Electron Builder strip off certain important keys from package.json, which we need, in particular build.appId
// so this script is used to preserve the keys that we need.
@@ -16,6 +17,19 @@ const appId = packageInfo.build.appId;
delete packageInfo.build;
packageInfo.build = { appId: appId };
let branch;
let hash;
try {
branch = execSync('git rev-parse --abbrev-ref HEAD').toString().trim();
hash = execSync('git log --pretty="%h" -1').toString().trim();
}
catch(err) {
console.warn("Could not get git info", err);
}
if (typeof branch !== 'undefined' && typeof hash !== 'undefined') {
packageInfo.git = { branch: branch, hash: hash };
}
let fileContent = "// Auto-generated by compile-package-info.js\n// Do not change directly\nconst packageInfo = " + JSON.stringify(packageInfo, null, 4) + ';';
fileContent += "\n";
fileContent += "module.exports = packageInfo;";

View File

@@ -47,7 +47,7 @@ convertJsx(__dirname + '/plugins');
const libContent = [
fs.readFileSync(basePath + '/ReactNativeClient/lib/string-utils-common.js', 'utf8'),
fs.readFileSync(basePath + '/ReactNativeClient/lib/markJsUtils.js', 'utf8'),
fs.readFileSync(basePath + '/ReactNativeClient/lib/MdToHtml/webviewLib.js', 'utf8'),
fs.readFileSync(basePath + '/ReactNativeClient/lib/renderers/webviewLib.js', 'utf8'),
];
fs.writeFileSync(__dirname + '/gui/note-viewer/lib.js', libContent.join('\n'), 'utf8');

View File

@@ -355,7 +355,7 @@ class ConfigScreenComponent extends React.Component {
return (
<div style={style}>
<div style={buttonBarStyle}>
<button onClick={() => {this.onCancelClick()}} style={buttonStyle}>{'⬅ ' + _('Cancel')}</button>
<button onClick={() => {this.onCancelClick()}} style={buttonStyle}><i style={theme.buttonIconStyle} className={"fa fa-chevron-left"}></i>{_('Cancel')}</button>
<button disabled={!hasChanges} onClick={() => {this.onSaveClick()}} style={buttonStyleApprove}>{_('OK')}</button>
<button disabled={!hasChanges} onClick={() => {this.onApplyClick()}} style={buttonStyleApprove}>{_('Apply')}</button>
</div>

View File

@@ -35,8 +35,7 @@ class HeaderComponent extends React.Component {
};
this.search_onClear = (event) => {
this.setState({ searchQuery: '' });
triggerOnQuery('');
this.resetSearch();
if (this.searchElement_) this.searchElement_.focus();
}
@@ -56,6 +55,17 @@ class HeaderComponent extends React.Component {
this.setState({ showSearchUsageLink: false });
}, 5000);
}
this.search_keyDown = event => {
if (event.keyCode === 27) { // ESCAPE
this.resetSearch();
}
}
this.resetSearch = () => {
this.setState({ searchQuery: '' });
triggerOnQuery('');
}
this.searchUsageLink_click = event => {
bridge().openExternal('https://joplinapp.org/#searching');
@@ -68,6 +78,12 @@ class HeaderComponent extends React.Component {
}
}
componentDidUpdate(prevProps) {
if(prevProps.notesParentType !== this.props.notesParentType && this.props.notesParentType !== 'Search' && this.state.searchQuery) {
this.resetSearch();
}
}
componentWillUnmount() {
if (this.hideSearchUsageLinkIID_) {
clearTimeout(this.hideSearchUsageLinkIID_);
@@ -80,7 +96,7 @@ class HeaderComponent extends React.Component {
let commandProcessed = true;
if (command.name === 'focus_search' && this.searchElement_) {
if (command.name === 'focusSearch' && this.searchElement_) {
this.searchElement_.focus();
} else {
commandProcessed = false;
@@ -121,14 +137,17 @@ class HeaderComponent extends React.Component {
opacity: isEnabled ? 1 : 0.4,
});
const title = options.title ? options.title : '';
return <a
className={classes.join(' ')}
style={finalStyle}
key={key}
href="#"
title={title}
onClick={() => { if (isEnabled) options.onClick() }}
>
{icon}{options.title ? options.title : ''}
{icon}<span className="title">{title}</span>
</a>
}
@@ -190,6 +209,7 @@ class HeaderComponent extends React.Component {
ref={elem => this.searchElement_ = elem}
onFocus={this.search_onFocus}
onBlur={this.search_onBlur}
onKeyDown={this.search_keyDown}
/>
<a
href="#"
@@ -257,6 +277,7 @@ const mapStateToProps = (state) => {
return {
theme: state.settings.theme,
windowCommand: state.windowCommand,
notesParentType: state.notesParentType,
};
};

View File

@@ -52,7 +52,7 @@ class ItemList extends React.Component {
makeItemIndexVisible(itemIndex) {
const top = Math.min(this.props.items.length - 1, this.state.topItemIndex + 1);
const bottom = Math.max(0, this.state.bottomItemIndex - 1)
const bottom = Math.max(0, this.state.bottomItemIndex)
if (itemIndex >= top && itemIndex <= bottom) return;

View File

@@ -74,12 +74,13 @@ class MainScreenComponent extends React.Component {
async doCommand(command) {
if (!command) return;
const createNewNote = async (title, isTodo) => {
const createNewNote = async (template, isTodo) => {
const folderId = Setting.value('activeFolderId');
if (!folderId) return;
const newNote = {
parent_id: folderId,
template: template,
is_todo: isTodo ? 1 : 0,
};
@@ -94,17 +95,15 @@ class MainScreenComponent extends React.Component {
if (command.name === 'newNote') {
if (!this.props.folders.length) {
bridge().showErrorMessageBox(_('Please create a notebook first.'));
return;
} else {
await createNewNote(null, false);
}
await createNewNote(null, false);
} else if (command.name === 'newTodo') {
if (!this.props.folders.length) {
bridge().showErrorMessageBox(_('Please create a notebook first'));
return;
} else {
await createNewNote(null, true);
}
await createNewNote(null, true);
} else if (command.name === 'newNotebook') {
this.setState({
promptOptions: {
@@ -132,16 +131,19 @@ class MainScreenComponent extends React.Component {
});
} else if (command.name === 'setTags') {
const tags = await Tag.tagsByNoteId(command.noteId);
const tagTitles = tags.map((a) => { return a.title }).sort();
const noteTags = tags.map((a) => { return {value: a.id, label: a.title } }).sort((a, b) => { return a.label.localeCompare(b.label); });
const allTags = await Tag.allWithNotes();
const tagSuggestions = allTags.map((a) => { return {value: a.id, label: a.title } });
this.setState({
promptOptions: {
label: _('Add or remove tags:'),
description: _('Separate each tag by a comma.'),
value: tagTitles.join(', '),
inputType: 'tags',
value: noteTags,
autocomplete: tagSuggestions,
onClose: async (answer) => {
if (answer !== null) {
const tagTitles = answer.split(',').map((a) => { return a.trim() });
const tagTitles = answer.map((a) => { return a.label.trim() });
await Tag.setNoteTagsByTitles(command.noteId, tagTitles);
}
this.setState({ promptOptions: null });
@@ -150,47 +152,47 @@ class MainScreenComponent extends React.Component {
});
} else if (command.name === 'renameFolder') {
const folder = await Folder.load(command.id);
if (!folder) return;
this.setState({
promptOptions: {
label: _('Rename notebook:'),
value: folder.title,
onClose: async (answer) => {
if (answer !== null) {
try {
folder.title = answer;
await Folder.save(folder, { fields: ['title'], userSideValidation: true });
} catch (error) {
bridge().showErrorMessageBox(error.message);
if (folder) {
this.setState({
promptOptions: {
label: _('Rename notebook:'),
value: folder.title,
onClose: async (answer) => {
if (answer !== null) {
try {
folder.title = answer;
await Folder.save(folder, { fields: ['title'], userSideValidation: true });
} catch (error) {
bridge().showErrorMessageBox(error.message);
}
}
this.setState({ promptOptions: null });
}
this.setState({ promptOptions: null });
}
},
});
},
});
}
} else if (command.name === 'renameTag') {
const tag = await Tag.load(command.id);
if(!tag) return;
this.setState({
promptOptions: {
label: _('Rename tag:'),
value: tag.title,
onClose: async (answer) => {
if (answer !== null) {
try {
tag.title = answer;
await Tag.save(tag, { fields: ['title'], userSideValidation: true });
} catch (error) {
bridge().showErrorMessageBox(error.message);
if (tag) {
this.setState({
promptOptions: {
label: _('Rename tag:'),
value: tag.title,
onClose: async (answer) => {
if (answer !== null) {
try {
tag.title = answer;
await Tag.save(tag, { fields: ['title'], userSideValidation: true });
} catch (error) {
bridge().showErrorMessageBox(error.message);
}
}
this.setState({promptOptions: null });
}
this.setState({promptOptions: null });
}
}
})
})
}
} else if (command.name === 'search') {
if (!this.searchId_) this.searchId_ = uuid.create();
@@ -271,6 +273,30 @@ class MainScreenComponent extends React.Component {
eventManager.emit('alarmChange', { noteId: note.id });
}
this.setState({ promptOptions: null });
}
},
});
} else if (command.name === 'selectTemplate') {
this.setState({
promptOptions: {
label: _('Template file:'),
inputType: 'dropdown',
value: this.props.templates[0], // Need to start with some value
autocomplete: this.props.templates,
onClose: async (answer) => {
if (answer) {
if (command.noteType === 'note' || command.noteType === 'todo') {
createNewNote(answer.value, command.noteType === 'todo');
} else {
this.props.dispatch({
type: 'WINDOW_COMMAND',
name: 'insertTemplate',
value: answer.value,
});
}
}
this.setState({ promptOptions: null });
}
},
@@ -448,7 +474,7 @@ class MainScreenComponent extends React.Component {
if (this.props.hasDisabledSyncItems) {
msg = <span>{_('Some items cannot be synchronised.')} <a href="#" onClick={() => { onViewDisabledItemsClick() }}>{_('View them now')}</a></span>
} else if (this.props.showMissingMasterKeyMessage) {
msg = <span>{_('Some items cannot be decrypted.')} <a href="#" onClick={() => { onViewMasterKeysClick() }}>{_('Set the password')}</a></span>
msg = <span>{_('One or more master keys need a password.')} <a href="#" onClick={() => { onViewMasterKeysClick() }}>{_('Set the password')}</a></span>
}
messageComp = (
@@ -496,7 +522,7 @@ class MainScreenComponent extends React.Component {
<VerticalResizer style={styles.verticalResizer} onDrag={this.sidebar_onDrag}/>
<NoteList style={styles.noteList} />
<VerticalResizer style={styles.verticalResizer} onDrag={this.noteList_onDrag}/>
<NoteText style={styles.noteText} visiblePanes={this.props.noteVisiblePanes} />
<NoteText style={styles.noteText} visiblePanes={this.props.noteVisiblePanes} noteDevToolsVisible={this.props.noteDevToolsVisible}/>
{pluginDialog}
</div>
@@ -521,6 +547,8 @@ const mapStateToProps = (state) => {
noteListWidth: state.settings['style.noteList.width'],
selectedNoteId: state.selectedNoteIds.length === 1 ? state.selectedNoteIds[0] : null,
plugins: state.plugins,
noteDevToolsVisible: state.noteDevToolsVisible,
templates: state.templates,
};
};

View File

@@ -33,6 +33,7 @@ class NotePropertiesDialog extends React.Component {
location: _('Location'),
source_url: _('URL'),
revisionsLink: _('Note History'),
markup_language: _('Markup'),
};
}
@@ -82,6 +83,7 @@ class NotePropertiesDialog extends React.Component {
}
formNote.revisionsLink = note.id;
formNote.markup_language = Note.markupLanguageToLabel(note.markup_language);
formNote.id = note.id;
return formNote;
@@ -292,7 +294,7 @@ class NotePropertiesDialog extends React.Component {
controlComp = <div style={Object.assign({}, theme.textStyle, {display: 'inline-block'})}>{displayedValue}</div>
}
if (key !== 'id' && key !== 'revisionsLink') {
if (['id', 'revisionsLink', 'markup_language'].indexOf(key) < 0) {
editCompHandler = () => {this.editPropertyButtonClick(key, value)};
editCompIcon = 'fa-edit';
}

View File

@@ -9,7 +9,7 @@ const Revision = require('lib/models/Revision');
const Setting = require('lib/models/Setting');
const RevisionService = require('lib/services/RevisionService');
const shared = require('lib/components/shared/note-screen-shared.js');
const MdToHtml = require('lib/MdToHtml');
const MarkupToHtml = require('lib/renderers/MarkupToHtml');
const { time } = require('lib/time-utils.js');
const ReactTooltip = require('react-tooltip');
const { substrWithEllipsis } = require('lib/string-utils');
@@ -92,6 +92,7 @@ class NoteRevisionViewerComponent extends React.PureComponent {
async reloadNote() {
let noteBody = '';
let markupLanguage = Note.MARKUP_LANGUAGE_MARKDOWN;
if (!this.state.revisions.length || !this.state.currentRevId) {
noteBody = _('This note has no history');
this.setState({ note: null });
@@ -100,16 +101,17 @@ class NoteRevisionViewerComponent extends React.PureComponent {
const note = await RevisionService.instance().revisionNote(this.state.revisions, revIndex);
if (!note) return;
noteBody = note.body;
markupLanguage = note.markup_language;
this.setState({ note: note });
}
const theme = themeStyle(this.props.theme);
const mdToHtml = new MdToHtml({
const markupToHtml = new MarkupToHtml({
resourceBaseUrl: 'file://' + Setting.value('resourceDir') + '/',
});
const result = mdToHtml.render(noteBody, theme, {
const result = markupToHtml.render(markupLanguage, noteBody, theme, {
codeTheme: theme.codeThemeCss,
userCss: this.props.customCss ? this.props.customCss : '',
resources: await shared.attachedResources(noteBody),
@@ -126,10 +128,12 @@ class NoteRevisionViewerComponent extends React.PureComponent {
const revs = this.state.revisions.slice().reverse();
for (let i = 0; i < revs.length; i++) {
const rev = revs[i];
const stats = Revision.revisionPatchStatsText(rev);
revisionListItems.push(<option
key={rev.id}
value={rev.id}
>{time.formatMsToLocal(rev.item_updated_time)}</option>);
>{time.formatMsToLocal(rev.item_updated_time) + ' (' + stats + ')'}</option>);
}
const restoreButtonTitle = _('Restore');

View File

@@ -12,7 +12,7 @@ const TagList = require('./TagList.min.js');
const { connect } = require('react-redux');
const { _ } = require('lib/locale.js');
const { reg } = require('lib/registry.js');
const MdToHtml = require('lib/MdToHtml');
const MarkupToHtml = require('lib/renderers/MarkupToHtml');
const shared = require('lib/components/shared/note-screen-shared.js');
const { bridge } = require('electron').remote.require('./bridge');
const { themeStyle } = require('../theme.js');
@@ -36,14 +36,18 @@ const ResourceFetcher = require('lib/services/ResourceFetcher');
const { toSystemSlashes, safeFilename } = require('lib/path-utils');
const { clipboard } = require('electron');
const SearchEngine = require('lib/services/SearchEngine');
const DecryptionWorker = require('lib/services/DecryptionWorker');
const ModelCache = require('lib/services/ModelCache');
const NoteTextViewer = require('./NoteTextViewer.min');
const NoteRevisionViewer = require('./NoteRevisionViewer.min');
const TemplateUtils = require('lib/TemplateUtils');
require('brace/mode/markdown');
// https://ace.c9.io/build/kitchen-sink.html
// https://highlightjs.org/static/demo/
require('brace/theme/chrome');
require('brace/theme/solarized_light');
require('brace/theme/solarized_dark');
require('brace/theme/twilight');
const NOTE_TAG_BAR_FEATURE_ENABLED = false;
@@ -61,8 +65,6 @@ class NoteTextComponent extends React.Component {
this.state = {
note: null,
noteMetadata: '',
showNoteMetadata: false,
folder: null,
lastSavedNote: null,
isLoading: true,
@@ -72,6 +74,7 @@ class NoteTextComponent extends React.Component {
newNote: null,
noteTags: [],
showRevisions: false,
loading: false,
// If the current note was just created, and the title has never been
// changed by the user, this variable contains that note ID. Used
@@ -96,6 +99,7 @@ class NoteTextComponent extends React.Component {
this.lastSetMarkers_ = '';
this.lastSetMarkersOptions_ = {};
this.selectionRange_ = null;
this.lastComponentUpdateNoteId_ = null;
this.noteSearchBar_ = React.createRef();
// Complicated but reliable method to get editor content height
@@ -226,14 +230,13 @@ class NoteTextComponent extends React.Component {
}
}
this.resourceFetcher_downloadComplete = async (resource) => {
this.refreshResource = async (event) => {
if (!this.state.note || !this.state.note.body) return;
const resourceIds = await Note.linkedResourceIds(this.state.note.body);
if (resourceIds.indexOf(resource.id) >= 0) {
// this.mdToHtml().clearCache();
if (resourceIds.indexOf(event.id) >= 0) {
shared.clearResourceCache();
this.lastSetHtml_ = '';
this.scheduleHtmlUpdate();
//this.updateHtml(this.state.note.body);
}
}
@@ -327,12 +330,12 @@ class NoteTextComponent extends React.Component {
}
}
mdToHtml() {
if (this.mdToHtml_) return this.mdToHtml_;
this.mdToHtml_ = new MdToHtml({
markupToHtml() {
if (this.markupToHtml_) return this.markupToHtml_;
this.markupToHtml_ = new MarkupToHtml({
resourceBaseUrl: 'file://' + Setting.value('resourceDir') + '/',
});
return this.mdToHtml_;
return this.markupToHtml_;
}
async componentWillMount() {
@@ -357,30 +360,58 @@ class NoteTextComponent extends React.Component {
this.lastLoadedNoteId_ = note ? note.id : null;
this.updateHtml(note && note.body ? note.body : '');
this.updateHtml(note ? note.markup_language : null, note && note.body ? note.body : '');
eventManager.on('alarmChange', this.onAlarmChange_);
eventManager.on('noteTypeToggle', this.onNoteTypeToggle_);
eventManager.on('todoToggle', this.onTodoToggle_);
ResourceFetcher.instance().on('downloadComplete', this.resourceFetcher_downloadComplete);
shared.installResourceHandling(this.refreshResource);
ExternalEditWatcher.instance().on('noteChange', this.externalEditWatcher_noteChange);
}
componentWillUnmount() {
this.saveIfNeeded();
this.mdToHtml_ = null;
this.markupToHtml_ = null;
eventManager.removeListener('alarmChange', this.onAlarmChange_);
eventManager.removeListener('noteTypeToggle', this.onNoteTypeToggle_);
eventManager.removeListener('todoToggle', this.onTodoToggle_);
ResourceFetcher.instance().off('downloadComplete', this.resourceFetcher_downloadComplete);
shared.uninstallResourceHandling(this.refreshResource);
ExternalEditWatcher.instance().off('noteChange', this.externalEditWatcher_noteChange);
}
async saveIfNeeded(saveIfNewNote = false) {
componentDidUpdate(prevProps) {
if (this.webviewRef() && this.props.noteDevToolsVisible !== this.webviewRef().isDevToolsOpened()) {
if (this.props.noteDevToolsVisible) {
this.webviewRef().openDevTools();
} else {
this.webviewRef().closeDevTools();
}
}
const currentNoteId = this.state.note ? this.state.note.id : null;
if (this.lastComponentUpdateNoteId_ !== currentNoteId && this.editor_) {
const undoManager = this.editor_.editor.getSession().getUndoManager();
undoManager.reset();
this.editor_.editor.getSession().setUndoManager(undoManager);
this.lastComponentUpdateNoteId_ = currentNoteId;
}
}
webviewRef() {
if (!this.webviewRef_.current || !this.webviewRef_.current.wrappedInstance) return null;
if (!this.webviewRef_.current.wrappedInstance.domReady()) return null;
return this.webviewRef_.current.wrappedInstance;
}
async saveIfNeeded(saveIfNewNote = false, options = {}) {
if (this.state.loading) return;
const forceSave = saveIfNewNote && (this.state.note && !this.state.note.id);
if (this.scheduleSaveTimeout_) clearTimeout(this.scheduleSaveTimeout_);
@@ -388,7 +419,7 @@ class NoteTextComponent extends React.Component {
if (!forceSave) {
if (!shared.isModified(this)) return;
}
await shared.saveNoteButton_press(this);
await shared.saveNoteButton_press(this, null, options);
ExternalEditWatcher.instance().updateNoteFile(this.state.note);
}
@@ -431,19 +462,29 @@ class NoteTextComponent extends React.Component {
await this.saveIfNeeded();
const defer = () => {
this.setState({ loading: false });
}
this.setState({ loading: true });
const previousNote = this.state.note ? Object.assign({}, this.state.note) : null;
const stateNoteId = this.state.note ? this.state.note.id : null;
let noteId = null;
let note = null;
let newNote = null;
let loadingNewNote = true;
let parentFolder = null;
let noteTags = [];
let scrollPercent = 0;
if (props.newNote) {
note = Object.assign({}, props.newNote);
// assign new note and prevent body from being null
note = Object.assign({}, props.newNote, {body: ''});
this.lastLoadedNoteId_ = null;
if (note.template)
note.body = TemplateUtils.render(note.template);
} else {
noteId = props.noteId;
@@ -454,18 +495,18 @@ class NoteTextComponent extends React.Component {
noteTags = await Tag.tagsByNoteId(noteId);
this.lastLoadedNoteId_ = noteId;
note = noteId ? await Note.load(noteId) : null;
if (noteId !== this.lastLoadedNoteId_) return; // Race condition - current note was changed while this one was loading
if (options.noReloadIfLocalChanges && this.isModified()) return;
if (noteId !== this.lastLoadedNoteId_) return defer(); // Race condition - current note was changed while this one was loading
if (options.noReloadIfLocalChanges && this.isModified()) return defer();
// If the note hasn't been changed, exit now
if (this.state.note && note) {
let diff = Note.diffObjects(this.state.note, note);
delete diff.type_;
if (!Object.getOwnPropertyNames(diff).length) return;
if (!Object.getOwnPropertyNames(diff).length) return defer();
}
}
this.mdToHtml_ = null;
this.markupToHtml_ = null;
// If we are loading nothing (noteId == null), make sure to
// set webviewReady to false too because the webview component
@@ -474,6 +515,8 @@ class NoteTextComponent extends React.Component {
// Scroll back to top when loading new note
if (loadingNewNote) {
shared.clearResourceCache();
this.editorMaxScrollTop_ = 0;
// HACK: To go around a bug in Ace editor, we first set the scroll position to 1
@@ -497,22 +540,6 @@ class NoteTextComponent extends React.Component {
}
if (this.editor_) {
// Calling setValue here does two things:
// 1. It sets the initial value as recorded by the undo manager. If we were to set it instead to "" and wait for the render
// phase to set the value, the initial value would still be "", which means pressing "undo" on a note that has just loaded
// would clear it.
// 2. It resets the undo manager - fixes https://github.com/laurent22/joplin/issues/355
// Note: calling undoManager.reset() doesn't work
try {
this.editor_.editor.getSession().setValue(note && note.body? note.body : '');
} catch (error) {
if (error.message === "Cannot read property 'match' of undefined") {
// The internals of Ace Editor throws an exception when creating a new note,
// but that can be ignored.
} else {
console.error(error);
}
}
this.editor_.editor.clearSelection();
this.editor_.editor.moveCursorTo(0,0);
@@ -521,6 +548,11 @@ class NoteTextComponent extends React.Component {
this.setViewerPercentScroll(scrollPercent ? scrollPercent : 0);
}, 10);
}
if (note && note.body && Setting.value('sync.resourceDownloadMode') === 'auto') {
const resourceIds = await Note.linkedResourceIds(note.body);
await ResourceFetcher.instance().markForDownload(resourceIds);
}
}
if (note) {
@@ -572,7 +604,9 @@ class NoteTextComponent extends React.Component {
// if (newState.note) await shared.refreshAttachedResources(this, newState.note.body);
this.updateHtml(newState.note ? newState.note.body : '');
await this.updateHtml(newState.note ? newState.note.markup_language : null, newState.note ? newState.note.body : '');
defer();
}
async componentWillReceiveProps(nextProps) {
@@ -619,10 +653,6 @@ class NoteTextComponent extends React.Component {
return false;
}
refreshNoteMetadata(force = null) {
return shared.refreshNoteMetadata(this, force);
}
async noteRevisionViewer_onBack() {
this.setState({ showRevisions: false });
@@ -641,17 +671,13 @@ class NoteTextComponent extends React.Component {
this.scheduleSave();
}
showMetadata_onPress() {
shared.showMetadata_onPress(this);
}
async webview_ipcMessage(event) {
const msg = event.channel ? event.channel : '';
const args = event.args;
const args = event.args;
const arg0 = args && args.length >= 1 ? args[0] : null;
const arg1 = args && args.length >= 2 ? args[1] : null;
console.info('Got ipc-message: ' + msg, args);
if (msg !== 'percentScroll') console.info('Got ipc-message: ' + msg, args);
if (msg.indexOf('checkboxclick:') === 0) {
// Ugly hack because setting the body here will make the scrollbar
@@ -662,10 +688,18 @@ class NoteTextComponent extends React.Component {
const newBody = shared.toggleCheckbox(msg, this.state.note.body);
this.saveOneProperty('body', newBody);
} else if (msg.indexOf('error:') === 0) {
const s = msg.split(':');
s.splice(0, 1);
reg.logger().error(s.join(':'));
} else if (msg === 'setMarkerCount') {
const ls = Object.assign({}, this.state.localSearch);
ls.resultCount = arg0;
this.setState({ localSearch: ls });
} else if (msg.indexOf('markForDownload:') === 0) {
const s = msg.split(':');
if (s.length < 2) throw new Error('Invalid message: ' + msg);
ResourceFetcher.instance().markForDownload(s[1]);
} else if (msg === 'percentScroll') {
this.ignoreNextEditorScroll_ = true;
this.setEditorPercentScroll(arg0);
@@ -740,7 +774,6 @@ class NoteTextComponent extends React.Component {
// When using the file:// protocol, openExternal doesn't work (does nothing) with URL-encoded paths
require('electron').shell.openExternal(urlDecode(msg));
} else {
console.info('OPEN URL');
require('electron').shell.openExternal(msg);
}
} else if (msg.indexOf('#') === 0) {
@@ -831,7 +864,7 @@ class NoteTextComponent extends React.Component {
this.editor_.editor.renderer.on('afterRender', this.onAfterEditorRender_);
const cancelledKeys = [];
const letters = ['F', 'T', 'P', 'Q', 'L', ',', 'G'];
const letters = ['F', 'T', 'P', 'Q', 'L', ',', 'G', 'K'];
for (let i = 0; i < letters.length; i++) {
const l = letters[i];
cancelledKeys.push('Ctrl+' + l);
@@ -908,12 +941,20 @@ class NoteTextComponent extends React.Component {
}
}
async updateHtml(body = null, options = null) {
async updateHtml(markupLanguage = null, body = null, options = null) {
if (!options) options = {};
if (!('useCustomCss' in options)) options.useCustomCss = true;
let bodyToRender = body;
if (bodyToRender === null) bodyToRender = this.state.note && this.state.note.body ? this.state.note.body : '';
if (bodyToRender === null) {
bodyToRender = this.state.note && this.state.note.body ? this.state.note.body : '';
markupLanguage = this.state.note ? this.state.note.markup_language : Note.MARKUP_LANGUAGE_MARKDOWN;
}
if (!markupLanguage) markupLanguage = Note.MARKUP_LANGUAGE_MARKDOWN;
const resources = await shared.attachedResources(bodyToRender);
const theme = themeStyle(this.props.theme);
@@ -921,7 +962,8 @@ class NoteTextComponent extends React.Component {
codeTheme: theme.codeThemeCss,
postMessageSyntax: 'ipcProxySendToHost',
userCss: options.useCustomCss ? this.props.customCss : '',
resources: await shared.attachedResources(bodyToRender),
resources: resources,
codeHighlightCacheKey: this.state.note ? this.state.note.id : null,
};
let bodyHtml = '';
@@ -930,10 +972,10 @@ class NoteTextComponent extends React.Component {
if (!bodyToRender.trim() && visiblePanes.indexOf('viewer') >= 0 && visiblePanes.indexOf('editor') < 0) {
// Fixes https://github.com/laurent22/joplin/issues/217
bodyToRender = '*' + _('This note has no content. Click on "%s" to toggle the editor and edit the note.', _('Layout')) + '*';
bodyToRender = '<i>' + _('This note has no content. Click on "%s" to toggle the editor and edit the note.', _('Layout')) + '</i>';
}
const result = this.mdToHtml().render(bodyToRender, theme, mdOptions);
const result = this.markupToHtml().render(markupLanguage, bodyToRender, theme, mdOptions);
this.setState({
bodyHtml: result.html,
@@ -987,6 +1029,10 @@ class NoteTextComponent extends React.Component {
fn = this.commandStartExternalEditing;
} else if (command.name === 'showLocalSearch') {
fn = this.commandShowLocalSearch;
} else if (command.name === 'textCode') {
fn = this.commandTextCode;
} else if (command.name === 'insertTemplate') {
fn = () => { return this.commandTemplate(command.value); };
}
}
@@ -1054,7 +1100,7 @@ class NoteTextComponent extends React.Component {
lastSavedNote: Object.assign({}, note),
});
this.updateHtml(note.body);
this.updateHtml(note.markup_language, note.body);
} catch (error) {
reg.logger().error(error);
bridge().showErrorMessageBox(error.message);
@@ -1083,13 +1129,13 @@ class NoteTextComponent extends React.Component {
const previousTheme = Setting.value('theme');
Setting.setValue('theme', Setting.THEME_LIGHT);
this.lastSetHtml_ = '';
await this.updateHtml(tempBody, { useCustomCss: false });
await this.updateHtml(this.state.note.markup_language, tempBody, { useCustomCss: false });
this.forceUpdate();
const restoreSettings = async () => {
Setting.setValue('theme', previousTheme);
this.lastSetHtml_ = '';
await this.updateHtml(previousBody);
await this.updateHtml(this.state.note.markup_language, previousBody);
this.forceUpdate();
}
@@ -1138,6 +1184,9 @@ class NoteTextComponent extends React.Component {
async commandStartExternalEditing() {
try {
await this.saveIfNeeded(true, {
autoTitle: false,
});
await ExternalEditWatcher.instance().openAndWatch(this.state.note);
} catch (error) {
bridge().showErrorMessageBox(_('Error opening note in editor: %s', error.message));
@@ -1321,6 +1370,10 @@ class NoteTextComponent extends React.Component {
this.wrapSelectionWithStrings('`', '`');
}
commandTemplate(value) {
this.wrapSelectionWithStrings(TemplateUtils.render(value));
}
addListItem(string1, string2 = '', defaultText = '') {
const currentLine = this.selectionRangeCurrentLine();
let newLine = '\n'
@@ -1380,6 +1433,8 @@ class NoteTextComponent extends React.Component {
}
createToolbarItems(note) {
const markupLanguage = note.markup_language;
const toolbarItems = [];
if (note && this.state.folder && ['Search', 'Tag'].includes(this.props.notesParentType)) {
toolbarItems.push({
@@ -1392,7 +1447,6 @@ class NoteTextComponent extends React.Component {
noteId: note.id,
});
},
// enabled: false,
});
}
@@ -1415,83 +1469,85 @@ class NoteTextComponent extends React.Component {
});
}
toolbarItems.push({
tooltip: _('Bold'),
iconName: 'fa-bold',
onClick: () => { return this.commandTextBold(); },
});
if (note.markup_language === Note.MARKUP_LANGUAGE_MARKDOWN) {
toolbarItems.push({
tooltip: _('Bold'),
iconName: 'fa-bold',
onClick: () => { return this.commandTextBold(); },
});
toolbarItems.push({
tooltip: _('Italic'),
iconName: 'fa-italic',
onClick: () => { return this.commandTextItalic(); },
});
toolbarItems.push({
tooltip: _('Italic'),
iconName: 'fa-italic',
onClick: () => { return this.commandTextItalic(); },
});
toolbarItems.push({
type: 'separator',
});
toolbarItems.push({
type: 'separator',
});
toolbarItems.push({
tooltip: _('Hyperlink'),
iconName: 'fa-link',
onClick: () => { return this.commandTextLink(); },
});
toolbarItems.push({
tooltip: _('Hyperlink'),
iconName: 'fa-link',
onClick: () => { return this.commandTextLink(); },
});
toolbarItems.push({
tooltip: _('Code'),
iconName: 'fa-code',
onClick: () => { return this.commandTextCode(); },
});
toolbarItems.push({
tooltip: _('Code'),
iconName: 'fa-code',
onClick: () => { return this.commandTextCode(); },
});
toolbarItems.push({
tooltip: _('Attach file'),
iconName: 'fa-paperclip',
onClick: () => { return this.commandAttachFile(); },
});
toolbarItems.push({
tooltip: _('Attach file'),
iconName: 'fa-paperclip',
onClick: () => { return this.commandAttachFile(); },
});
toolbarItems.push({
type: 'separator',
});
toolbarItems.push({
type: 'separator',
});
toolbarItems.push({
tooltip: _('Numbered List'),
iconName: 'fa-list-ol',
onClick: () => { return this.commandTextListOl(); },
});
toolbarItems.push({
tooltip: _('Numbered List'),
iconName: 'fa-list-ol',
onClick: () => { return this.commandTextListOl(); },
});
toolbarItems.push({
tooltip: _('Bulleted List'),
iconName: 'fa-list-ul',
onClick: () => { return this.commandTextListUl(); },
});
toolbarItems.push({
tooltip: _('Bulleted List'),
iconName: 'fa-list-ul',
onClick: () => { return this.commandTextListUl(); },
});
toolbarItems.push({
tooltip: _('Checkbox'),
iconName: 'fa-check-square',
onClick: () => { return this.commandTextCheckbox(); },
});
toolbarItems.push({
tooltip: _('Checkbox'),
iconName: 'fa-check-square',
onClick: () => { return this.commandTextCheckbox(); },
});
toolbarItems.push({
tooltip: _('Heading'),
iconName: 'fa-header',
onClick: () => { return this.commandTextHeading(); },
});
toolbarItems.push({
tooltip: _('Heading'),
iconName: 'fa-header',
onClick: () => { return this.commandTextHeading(); },
});
toolbarItems.push({
tooltip: _('Horizontal Rule'),
iconName: 'fa-ellipsis-h',
onClick: () => { return this.commandTextHorizontalRule(); },
});
toolbarItems.push({
tooltip: _('Horizontal Rule'),
iconName: 'fa-ellipsis-h',
onClick: () => { return this.commandTextHorizontalRule(); },
});
toolbarItems.push({
tooltip: _('Insert Date Time'),
iconName: 'fa-calendar-plus-o',
onClick: () => { return this.commandDateTime(); },
});
toolbarItems.push({
tooltip: _('Insert Date Time'),
iconName: 'fa-calendar-plus-o',
onClick: () => { return this.commandDateTime(); },
});
toolbarItems.push({
type: 'separator',
});
toolbarItems.push({
type: 'separator',
});
}
if (note && this.props.watchedNoteFiles.indexOf(note.id) >= 0) {
toolbarItems.push({
@@ -1607,6 +1663,7 @@ class NoteTextComponent extends React.Component {
const style = this.props.style;
const note = this.state.note;
const body = note && note.body ? note.body : '';
const markupLanguage = note ? note.markup_language : Note.MARKUP_LANGUAGE_MARKDOWN;
const theme = themeStyle(this.props.theme);
const visiblePanes = this.props.visiblePanes || ['editor', 'viewer'];
const isTodo = note && !!note.is_todo;
@@ -1664,6 +1721,7 @@ class NoteTextComponent extends React.Component {
backgroundColor: theme.backgroundColor,
border: '1px solid',
borderColor: theme.dividerColor,
fontSize: theme.fontSize,
};
const toolbarStyle = {
@@ -1741,6 +1799,7 @@ class NoteTextComponent extends React.Component {
if (htmlHasChanged) {
let options = {
cssFiles: this.state.lastRenderCssFiles,
downloadResources: Setting.value('sync.resourceDownloadMode'),
};
this.webviewRef_.current.wrappedInstance.send('setHtml', html, options);
this.lastSetHtml_ = html;
@@ -1756,6 +1815,7 @@ class NoteTextComponent extends React.Component {
accuracy: 'partially',
}]
markerOptions.selectedIndex = this.state.localSearch.selectedIndex;
markerOptions.separateWordSearch = false;
} else {
const search = BaseModel.byId(this.props.searches, this.props.selectedSearchId);
if (search) {
@@ -1813,7 +1873,7 @@ class NoteTextComponent extends React.Component {
delete editorRootStyle.fontSize;
const editor = <AceEditor
value={body}
mode="markdown"
mode={markupLanguage === Note.MARKUP_LANGUAGE_HTML ? 'text' : 'markdown'}
theme={editorRootStyle.editorTheme}
style={editorRootStyle}
width={editorStyle.width + 'px'}
@@ -1879,7 +1939,6 @@ const mapStateToProps = (state) => {
itemType: state.selectedItemType,
folders: state.folders,
theme: state.settings.theme,
showAdvancedOptions: state.settings.showAdvancedOptions,
syncStarted: state.syncStarted,
newNote: state.newNote,
windowCommand: state.windowCommand,
@@ -1890,6 +1949,7 @@ const mapStateToProps = (state) => {
customCss: state.customCss,
lastEditorScrollPercents: state.lastEditorScrollPercents,
historyNotes: state.historyNotes,
templates: state.templates,
};
};

View File

@@ -9,6 +9,7 @@ class NoteTextViewerComponent extends React.Component {
super();
this.initialized_ = false;
this.domReady_ = false;
this.webviewRef_ = React.createRef();
this.webviewListeners_ = null;
@@ -18,6 +19,7 @@ class NoteTextViewerComponent extends React.Component {
}
webview_domReady(event) {
this.domReady_ = true;
if (this.props.onDomReady) this.props.onDomReady(event);
}
@@ -25,6 +27,10 @@ class NoteTextViewerComponent extends React.Component {
if (this.props.onIpcMessage) this.props.onIpcMessage(event);
}
domReady() {
return this.domReady_;
}
initWebview() {
const wv = this.webviewRef_.current;
@@ -65,6 +71,9 @@ class NoteTextViewerComponent extends React.Component {
const fn = this.webviewListeners_[n];
wv.removeEventListener(n, fn);
}
this.initialized_ = false;
this.domReady_ = false;
}
tryInit() {
@@ -116,6 +125,14 @@ class NoteTextViewerComponent extends React.Component {
return this.webviewRef_.current.openDevTools();
}
closeDevTools() {
return this.webviewRef_.current.closeDevTools();
}
isDevToolsOpened() {
return this.webviewRef_.current.isDevToolsOpened();
}
// ----------------------------------------------------------------
// Wrap WebView functions (END)
// ----------------------------------------------------------------

View File

@@ -5,9 +5,18 @@ const moment = require('moment');
const { themeStyle } = require('../theme.js');
const { time } = require('lib/time-utils.js');
const Datetime = require('react-datetime');
const CreatableSelect = require('react-select/lib/Creatable').default;
const Select = require('react-select').default;
const makeAnimated = require('react-select/lib/animated').default;
class PromptDialog extends React.Component {
constructor() {
super();
this.answerInput_ = React.createRef();
}
componentWillMount() {
this.setState({
visible: false,
@@ -28,7 +37,7 @@ class PromptDialog extends React.Component {
}
componentDidUpdate() {
if (this.focusInput_ && this.answerInput_) this.answerInput_.focus();
if (this.focusInput_ && this.answerInput_.current) this.answerInput_.current.focus();
this.focusInput_ = false;
}
@@ -53,15 +62,16 @@ class PromptDialog extends React.Component {
height: height - paddingTop,
backgroundColor: 'rgba(0,0,0,0.6)',
display: visible ? 'flex' : 'none',
alignItems: 'flex-start',
justifyContent: 'center',
paddingTop: paddingTop + 'px',
alignItems: 'flex-start',
justifyContent: 'center',
paddingTop: paddingTop + 'px',
};
this.styles_.promptDialog = {
backgroundColor: theme.backgroundColor,
padding: 16,
display: 'inline-block',
maxWidth: width * 0.5,
boxShadow: '6px 6px 20px rgba(0,0,0,0.5)',
};
@@ -80,7 +90,7 @@ class PromptDialog extends React.Component {
fontSize: theme.fontSize,
color: theme.color,
fontFamily: theme.fontFamily,
verticalAlign: 'top',
verticalAlign: 'middle',
};
this.styles_.input = {
@@ -92,6 +102,53 @@ class PromptDialog extends React.Component {
borderColor: theme.dividerColor,
};
this.styles_.select = {
control: (provided) => (Object.assign(provided, {
minWidth: width * 0.2,
maxWidth: width * 0.5,
})),
input: (provided) => (Object.assign(provided, {
minWidth: '20px',
color: theme.color,
})),
menu: (provided) => (Object.assign(provided, {
color: theme.color,
fontFamily: theme.fontFamily,
backgroundColor: theme.backgroundColor,
})),
option: (provided) => (Object.assign(provided, {
color: theme.color,
fontFamily: theme.fontFamily,
})),
multiValueLabel: (provided) => (Object.assign(provided, {
fontFamily: theme.fontFamily,
})),
multiValueRemove: (provided) => (Object.assign(provided, {
color: theme.color,
})),
};
this.styles_.selectTheme = (tagTheme) => (Object.assign(tagTheme, {
borderRadius: 2,
colors: Object.assign(tagTheme.colors, {
primary: theme.raisedBackgroundColor,
primary25: theme.raisedBackgroundColor,
neutral0: theme.backgroundColor,
neutral5: theme.backgroundColor,
neutral10: theme.raisedBackgroundColor,
neutral20: theme.raisedBackgroundColor,
neutral30: theme.raisedBackgroundColor,
neutral40: theme.color,
neutral50: theme.color,
neutral60: theme.color,
neutral70: theme.color,
neutral80: theme.color,
neutral90: theme.color,
danger: theme.backgroundColor,
dangerLight: theme.colorError2,
}),
}));
this.styles_.desc = Object.assign({}, theme.textStyle, {
marginTop: 10,
});
@@ -135,9 +192,19 @@ class PromptDialog extends React.Component {
this.setState({ answer: momentObject });
}
const onSelectChange = (newValue) => {
this.setState({ answer: newValue });
this.focusInput_ = true;
}
const onKeyDown = (event) => {
if (event.key === 'Enter') {
onClose(true);
if (this.props.inputType !== 'tags' && this.props.inputType !== 'dropdown') {
onClose(true);
} else if (this.answerInput_.current && !this.answerInput_.current.state.menuIsOpen) {
// The menu will be open if the user is selecting a new item
onClose(true);
}
} else if (event.key === 'Escape') {
onClose(false);
}
@@ -155,10 +222,38 @@ class PromptDialog extends React.Component {
timeFormat={time.timeFormat()}
onChange={(momentObject) => onDateTimeChange(momentObject)}
/>
} else if (this.props.inputType === 'tags') {
inputComp = <CreatableSelect
styles={styles.select}
theme={styles.selectTheme}
ref={this.answerInput_}
value={this.state.answer}
placeholder=""
components={makeAnimated()}
isMulti={true}
isClearable={false}
backspaceRemovesValue={true}
options={this.props.autocomplete}
onChange={onSelectChange}
onKeyDown={(event) => onKeyDown(event)}
/>
} else if (this.props.inputType === 'dropdown') {
inputComp = <Select
styles={styles.select}
theme={styles.selectTheme}
ref={this.answerInput_}
components={makeAnimated()}
value={this.props.answer}
defaultValue={this.props.defaultValue}
isClearable={false}
options={this.props.autocomplete}
onChange={onSelectChange}
onKeyDown={(event) => onKeyDown(event)}
/>
} else {
inputComp = <input
style={styles.input}
ref={input => this.answerInput_ = input}
ref={this.answerInput_}
value={this.state.answer}
type="text"
onChange={(event) => onChange(event)}

View File

@@ -103,7 +103,7 @@ class SideBarComponent extends React.Component {
};
}
style() {
style(depth) {
const theme = themeStyle(this.props.theme);
const itemHeight = 25;
@@ -118,6 +118,8 @@ class SideBarComponent extends React.Component {
// paddingLeft: 14,
display: "flex",
alignItems: "stretch",
// Allow 3 levels of color depth
backgroundColor: !theme.depthColor ? '#00000000' : theme.depthColor.replace('OPACITY', Math.min(depth * 0.1, 0.3)),
},
listItem: {
fontFamily: theme.fontFamily,
@@ -417,7 +419,7 @@ class SideBarComponent extends React.Component {
const itemTitle = Folder.displayTitle(folder);
let containerStyle = Object.assign({}, this.style().listItemContainer);
let containerStyle = Object.assign({}, this.style(depth).listItemContainer);
if (selected) containerStyle = Object.assign(containerStyle, this.style().listItemSelected);
let expandLinkStyle = Object.assign({}, this.style().listItemExpandIcon);
@@ -714,7 +716,7 @@ class SideBarComponent extends React.Component {
let resourceFetcherText = '';
if (this.props.resourceFetcher && this.props.resourceFetcher.toFetchCount) {
resourceFetcherText = _('Fetching resources: %d', this.props.resourceFetcher.toFetchCount);
resourceFetcherText = _('Fetching resources: %d/%d', this.props.resourceFetcher.fetchingCount, this.props.resourceFetcher.toFetchCount);
}
let lines = Synchronizer.reportToLines(this.props.syncReport);

View File

@@ -48,6 +48,7 @@ class StatusScreenComponent extends React.Component {
const style = this.props.style;
const headerStyle = Object.assign({}, theme.headerStyle, { width: style.width });
const retryStyle = Object.assign({}, theme.urlStyle, {marginLeft: 5});
const containerPadding = 10;
@@ -60,16 +61,34 @@ class StatusScreenComponent extends React.Component {
return <h2 key={'section_' + key} style={theme.h2Style}>{title}</h2>
}
function renderSectionHtml(key, section) {
const renderSectionHtml = (key, section) => {
let itemsHtml = [];
itemsHtml.push(renderSectionTitleHtml(section.title, section.title));
for (let n in section.body) {
if (!section.body.hasOwnProperty(n)) continue;
let text = section.body[n];
let item = section.body[n];
let text = '';
let retryLink = null;
if (typeof item === 'object') {
if (item.canRetry) {
const onClick = async () => {
await item.retryHandler();
this.resfreshScreen();
}
retryLink = <a href="#" onClick={onClick} style={retryStyle}>{_('Retry')}</a>;
}
text = item.text;
} else {
text = item;
}
if (!text) text = '\xa0';
itemsHtml.push(<div style={theme.textStyle} key={'item_' + n}>{text}</div>);
itemsHtml.push(<div style={theme.textStyle} key={'item_' + n}><span>{text}</span>{retryLink}</div>);
}
return (

View File

@@ -9,10 +9,15 @@
}
#content {
/* Needs this in case the content contains elements with absolute positioning */
/* Without this they would just stay at a fixed position when scrolling */
position: relative;
overflow-y: auto;
height: 100%;
padding-left: 10px;
padding-right: 10px;
/* Note: the height is set via updateBodyHeight(). Setting it here to 100% */
/* won't work with some pages due to the position: relative */
}
mark {
@@ -38,277 +43,291 @@
<script src="./lib.js"></script>
<script>
const contentElement = document.getElementById('content');
const ipc = {};
window.addEventListener('message', (event) => {
// Here we only deal with messages that are sent from the main Electro process to the webview.
if (!event.data || event.data.target !== 'webview') return;
const callName = event.data.name;
const callData = event.data.data;
if (!ipc[callName]) {
console.warn('Missing IPC function:', event.data);
} else {
ipc[callName](callData);
}
});
const loadedCssFiles_ = {};
function loadCssFiles(cssFiles) {
for (let i = 0; i < cssFiles.length; i++) {
const f = cssFiles[i];
if (loadedCssFiles_[f]) continue;
const link = document.createElement('link');
link.rel = 'stylesheet';
link.href = f;
document.getElementById('styleContainer').appendChild(link);
}
}
// Note: the scroll position source of truth is "percentScroll_". This is easier to manage than scrollTop because
// the scrollTop value depends on the images being loaded or not. For example, if the scrollTop is saved while
// images are being displayed then restored while images are being reloaded, the new scrollTop might be changed
// so that it is not greater than contentHeight. On the other hand, with percentScroll it is possible to restore
// it at any time knowing that it's not going to be changed because the content height has changed.
// To restore percentScroll the "checkScrollIID" interval is used. It constantly resets the scroll position during
// one second after the content has been updated.
//
// ignoreNextScroll is used to differentiate between scroll event from the users and those that are the result
// of programmatically changing scrollTop. We only want to respond to events initiated by the user.
let percentScroll_ = 0;
let checkScrollIID_ = null;
function setPercentScroll(percent) {
percentScroll_ = percent;
contentElement.scrollTop = percentScroll_ * maxScrollTop();
}
function percentScroll() {
return percentScroll_;
}
function restorePercentScroll() {
setPercentScroll(percentScroll_);
}
ipc.setHtml = (event) => {
const html = event.html;
markJsHackMarkerInserted_ = false;
updateBodyHeight();
contentElement.innerHTML = html;
let previousContentHeight = contentElement.scrollHeight;
let startTime = Date.now();
restorePercentScroll();
if (!checkScrollIID_) {
checkScrollIID_ = setInterval(() => {
const h = contentElement.scrollHeight;
if (h !== previousContentHeight) {
previousContentHeight = h;
restorePercentScroll();
}
if (Date.now() - startTime >= 1000) {
clearInterval(checkScrollIID_);
checkScrollIID_ = null;
}
}, 1);
}
loadCssFiles(event.options.cssFiles);
}
let ignoreNextScrollEvent = false;
ipc.setPercentScroll = (event) => {
const percent = event.percent;
if (checkScrollIID_) {
clearInterval(checkScrollIID_);
checkScrollIID_ = null;
}
ignoreNextScrollEvent = true;
setPercentScroll(percent);
}
// HACK for Mark.js bug - https://github.com/julmot/mark.js/issues/127
let markJsHackMarkerInserted_ = false;
function addMarkJsSpaceHack(document) {
if (markJsHackMarkerInserted_) return;
const prepareElementsForMarkJs = (elements, type) => {
// const markJsHackMarker_ = '&#8203; &#8203;'
const markJsHackMarker_ = ' ';
for (let i = 0; i < elements.length; i++) {
if (!type) {
elements[i].innerHTML = elements[i].innerHTML + markJsHackMarker_;
} else if (type === 'insertBefore') {
elements[i].insertAdjacentHTML('beforeBegin', markJsHackMarker_);
}
}
}
prepareElementsForMarkJs(document.getElementsByTagName('p'));
prepareElementsForMarkJs(document.getElementsByTagName('div'));
prepareElementsForMarkJs(document.getElementsByTagName('br'), 'insertBefore');
markJsHackMarkerInserted_ = true;
}
let mark_ = null;
let markSelectedElement_ = null;
function setMarkers(keywords, options = null) {
if (!options) options = {};
// TODO: Add support for scriptType on mobile and CLI
if (!mark_) {
mark_ = new Mark(document.getElementById('content'), {
exclude: ['img'],
acrossElements: true,
});
}
addMarkJsSpaceHack(document);
mark_.unmark()
if (markSelectedElement_) markSelectedElement_.classList.remove('mark-selected');
let selectedElement = null;
let elementIndex = 0;
const onEachElement = (element) => {
if (!('selectedIndex' in options)) return;
if (('selectedIndex' in options) && elementIndex === options.selectedIndex) {
markSelectedElement_ = element;
element.classList.add('mark-selected');
selectedElement = element;
}
elementIndex++;
}
for (let i = 0; i < keywords.length; i++) {
let keyword = keywords[i];
markJsUtils.markKeyword(mark_, keyword, {
pregQuote: pregQuote,
replaceRegexDiacritics: replaceRegexDiacritics,
}, {
each: onEachElement,
});
}
ipcProxySendToHost('setMarkerCount', elementIndex);
if (selectedElement) selectedElement.scrollIntoView();
}
let markLoaded_ = false;
ipc.setMarkers = (event) => {
const keywords = event.keywords;
const options = event.options;
if (!keywords.length && !markLoaded_) return;
if (!markLoaded_) {
const script = document.createElement('script');
script.onload = function() {
setMarkers(keywords, options);
};
script.src = '../../node_modules/mark.js/dist/mark.min.js';
document.getElementById('markScriptContainer').appendChild(script);
markLoaded_ = true;
} else {
setMarkers(keywords, options);
}
}
function maxScrollTop() {
return Math.max(0, contentElement.scrollHeight - contentElement.clientHeight);
}
// The body element needs to have a fixed height for the content to be scrollable
function updateBodyHeight() {
document.getElementById('body').style.height = window.innerHeight + 'px';
}
const ipcProxySendToHost = (methodName, arg) => {
window.postMessage({ target: 'main', name: methodName, args: [ arg ] }, '*');
}
contentElement.addEventListener('scroll', function(e) {
if (ignoreNextScrollEvent) {
ignoreNextScrollEvent = false;
return;
}
const m = maxScrollTop();
const percent = m ? contentElement.scrollTop / m : 0;
setPercentScroll(percent);
ipcProxySendToHost('percentScroll', percent);
});
try {
const contentElement = document.getElementById('content');
document.addEventListener('contextmenu', function(event) {
let element = event.target;
const ipc = {};
// To handle right clicks on resource icons
if (element && !element.getAttribute('data-resource-id')) element = element.parentElement;
window.addEventListener('message', webviewLib.logEnabledEventHandler(event => {
// Here we only deal with messages that are sent from the main Electro process to the webview.
if (!event.data || event.data.target !== 'webview') return;
if (element && element.getAttribute('data-resource-id')) {
ipcProxySendToHost('contextMenu', {
type: element.getAttribute('src') ? 'image' : 'resource',
resourceId: element.getAttribute('data-resource-id'),
});
} else {
const selectedText = window.getSelection().toString();
const callName = event.data.name;
const callData = event.data.data;
if (selectedText) {
ipcProxySendToHost('contextMenu', {
type: 'text',
textToCopy: selectedText,
});
} else if (event.target.getAttribute('href')) {
ipcProxySendToHost('contextMenu', {
type: 'link',
textToCopy: event.target.getAttribute('href'),
});
if (!ipc[callName]) {
console.warn('Missing IPC function:', event.data);
} else {
ipc[callName](callData);
}
}));
const loadedCssFiles_ = {};
function loadCssFiles(cssFiles) {
for (let i = 0; i < cssFiles.length; i++) {
const f = cssFiles[i];
if (loadedCssFiles_[f]) continue;
const link = document.createElement('link');
link.rel = 'stylesheet';
link.href = f;
document.getElementById('styleContainer').appendChild(link);
}
}
});
webviewLib.initialize({
postMessage: ipcProxySendToHost,
});
// Note: the scroll position source of truth is "percentScroll_". This is easier to manage than scrollTop because
// the scrollTop value depends on the images being loaded or not. For example, if the scrollTop is saved while
// images are being displayed then restored while images are being reloaded, the new scrollTop might be changed
// so that it is not greater than contentHeight. On the other hand, with percentScroll it is possible to restore
// it at any time knowing that it's not going to be changed because the content height has changed.
// To restore percentScroll the "checkScrollIID" interval is used. It constantly resets the scroll position during
// one second after the content has been updated.
//
// ignoreNextScroll is used to differentiate between scroll event from the users and those that are the result
// of programmatically changing scrollTop. We only want to respond to events initiated by the user.
// Disable drag and drop otherwise it's possible to drop a URL
// on it and it will open in the view as a website.
document.addEventListener('drop', function(e) {
e.preventDefault();
e.stopPropagation();
});
document.addEventListener('dragover', function(e) {
e.preventDefault();
e.stopPropagation();
});
document.addEventListener('dragover', function(e) {
e.preventDefault();
});
let percentScroll_ = 0;
let checkScrollIID_ = null;
function setPercentScroll(percent) {
percentScroll_ = percent;
contentElement.scrollTop = percentScroll_ * maxScrollTop();
}
function percentScroll() {
return percentScroll_;
}
function restorePercentScroll() {
setPercentScroll(percentScroll_);
}
ipc.setHtml = (event) => {
const html = event.html;
markJsHackMarkerInserted_ = false;
updateBodyHeight();
contentElement.innerHTML = html;
let previousContentHeight = contentElement.scrollHeight;
let startTime = Date.now();
restorePercentScroll();
if (!checkScrollIID_) {
checkScrollIID_ = setInterval(() => {
const h = contentElement.scrollHeight;
if (h !== previousContentHeight) {
previousContentHeight = h;
restorePercentScroll();
}
if (Date.now() - startTime >= 1000) {
clearInterval(checkScrollIID_);
checkScrollIID_ = null;
}
}, 1);
}
loadCssFiles(event.options.cssFiles);
if (event.options.downloadResources === 'manual') {
webviewLib.setupResourceManualDownload();
}
}
let ignoreNextScrollEvent = false;
ipc.setPercentScroll = (event) => {
const percent = event.percent;
if (checkScrollIID_) {
clearInterval(checkScrollIID_);
checkScrollIID_ = null;
}
ignoreNextScrollEvent = true;
setPercentScroll(percent);
}
// HACK for Mark.js bug - https://github.com/julmot/mark.js/issues/127
let markJsHackMarkerInserted_ = false;
function addMarkJsSpaceHack(document) {
if (markJsHackMarkerInserted_) return;
const prepareElementsForMarkJs = (elements, type) => {
// const markJsHackMarker_ = '&#8203; &#8203;'
const markJsHackMarker_ = ' ';
for (let i = 0; i < elements.length; i++) {
if (!type) {
elements[i].innerHTML = elements[i].innerHTML + markJsHackMarker_;
} else if (type === 'insertBefore') {
elements[i].insertAdjacentHTML('beforeBegin', markJsHackMarker_);
}
}
}
prepareElementsForMarkJs(document.getElementsByTagName('p'));
prepareElementsForMarkJs(document.getElementsByTagName('div'));
prepareElementsForMarkJs(document.getElementsByTagName('br'), 'insertBefore');
markJsHackMarkerInserted_ = true;
}
let mark_ = null;
let markSelectedElement_ = null;
function setMarkers(keywords, options = null) {
if (!options) options = {};
// TODO: Add support for scriptType on mobile and CLI
if (!mark_) {
mark_ = new Mark(document.getElementById('content'), {
exclude: ['img'],
acrossElements: true,
});
}
addMarkJsSpaceHack(document);
mark_.unmark()
if (markSelectedElement_) markSelectedElement_.classList.remove('mark-selected');
let selectedElement = null;
let elementIndex = 0;
const onEachElement = (element) => {
if (!('selectedIndex' in options)) return;
if (('selectedIndex' in options) && elementIndex === options.selectedIndex) {
markSelectedElement_ = element;
element.classList.add('mark-selected');
selectedElement = element;
}
elementIndex++;
}
const markKeywordOptions = {
each: onEachElement,
};
if ('separateWordSearch' in options) markKeywordOptions.separateWordSearch = options.separateWordSearch;
for (let i = 0; i < keywords.length; i++) {
let keyword = keywords[i];
markJsUtils.markKeyword(mark_, keyword, {
pregQuote: pregQuote,
replaceRegexDiacritics: replaceRegexDiacritics,
}, markKeywordOptions);
}
ipcProxySendToHost('setMarkerCount', elementIndex);
if (selectedElement) selectedElement.scrollIntoView();
}
let markLoaded_ = false;
ipc.setMarkers = (event) => {
const keywords = event.keywords;
const options = event.options;
if (!keywords.length && !markLoaded_) return;
if (!markLoaded_) {
const script = document.createElement('script');
script.onload = function() {
setMarkers(keywords, options);
};
script.src = '../../node_modules/mark.js/dist/mark.min.js';
document.getElementById('markScriptContainer').appendChild(script);
markLoaded_ = true;
} else {
setMarkers(keywords, options);
}
}
function maxScrollTop() {
return Math.max(0, contentElement.scrollHeight - contentElement.clientHeight);
}
// The body element needs to have a fixed height for the content to be scrollable
function updateBodyHeight() {
document.getElementById('body').style.height = window.innerHeight + 'px';
document.getElementById('content').style.height = window.innerHeight + 'px';
}
contentElement.addEventListener('scroll', webviewLib.logEnabledEventHandler(e => {
if (ignoreNextScrollEvent) {
ignoreNextScrollEvent = false;
return;
}
const m = maxScrollTop();
const percent = m ? contentElement.scrollTop / m : 0;
setPercentScroll(percent);
ipcProxySendToHost('percentScroll', percent);
}));
document.addEventListener('contextmenu', webviewLib.logEnabledEventHandler(event => {
let element = event.target;
// To handle right clicks on resource icons
if (element && !element.getAttribute('data-resource-id')) element = element.parentElement;
if (element && element.getAttribute('data-resource-id')) {
ipcProxySendToHost('contextMenu', {
type: element.getAttribute('src') ? 'image' : 'resource',
resourceId: element.getAttribute('data-resource-id'),
});
} else {
const selectedText = window.getSelection().toString();
if (selectedText) {
ipcProxySendToHost('contextMenu', {
type: 'text',
textToCopy: selectedText,
});
} else if (event.target.getAttribute('href')) {
ipcProxySendToHost('contextMenu', {
type: 'link',
textToCopy: event.target.getAttribute('href'),
});
}
}
}));
webviewLib.initialize({
postMessage: ipcProxySendToHost,
});
// Disable drag and drop otherwise it's possible to drop a URL
// on it and it will open in the view as a website.
document.addEventListener('drop', webviewLib.logEnabledEventHandler(e => {
e.preventDefault();
e.stopPropagation();
}));
document.addEventListener('dragover', webviewLib.logEnabledEventHandler(e => {
e.preventDefault();
e.stopPropagation();
}));
document.addEventListener('dragover', webviewLib.logEnabledEventHandler(e => {
e.preventDefault();
}));
window.addEventListener('resize', webviewLib.logEnabledEventHandler(() => {
updateBodyHeight();
}));
window.addEventListener('resize', function() {
updateBodyHeight();
});
updateBodyHeight();
} catch (error) {
ipcProxySendToHost('error:' + JSON.stringify(webviewLib.cloneError(error)));
throw error;
}
</script>
</body>

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

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