1
0
mirror of https://github.com/laurent22/joplin.git synced 2025-08-30 20:39:46 +02:00

Compare commits

...

85 Commits

Author SHA1 Message Date
Laurent Cozic
a72ab67473 CLI v1.0.139 2019-06-05 18:09:10 +01:00
Laurent Cozic
90fbfec914 Update translations 2019-06-05 18:07:11 +01:00
Germán Martín
49ef023a90 Complete Spanish translation (#1613)
* Complete Spanish translation

Add missing translations

* Fix translation

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

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

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

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

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

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

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

Providing translation for Persian language

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

* Make needToBeFetched calls to return the right number of resources

* All: Improved handling of resource downloading and decryption

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

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

* Renamed setting to sync.resourceDownloadMode

* Download resources when changing setting

* tweaks

* removed duplicate cs

* Better report resource download progress

* Make sure resource cache is properly cleared when needed

* Also handle manual download for non-image resources

* More improvements to logic when downloading and decrypting resources
2019-05-22 15:56:07 +01:00
Laurent Cozic
6bcbedd6a4 CLI v1.0.137 2019-05-19 12:05:02 +01:00
Laurent Cozic
4c935b78f9 Removed log statement 2019-05-19 12:04:09 +01:00
Laurent Cozic
94cddda6d0 Removed temp files 2019-05-19 11:22:00 +01:00
Laurent Cozic
1924ea062c CLI v1.0.136 2019-05-19 11:20:17 +01:00
Laurent Cozic
07e88b2eeb All: Handle missing resource blob when setting resource size 2019-05-19 11:18:44 +01:00
Laurent Cozic
e4a08c29d7 Desktop, Mobile: Improved: Gray out checkboxes that have been ticked inside notes 2019-05-17 22:41:30 +01:00
Laurent Cozic
d60afcaabe Fixed merge 2019-05-16 17:36:02 +00:00
Laurent Cozic
1a091460ca All: Fixed: Prevent app from trying to upload resource it has not downloaded yet 2019-05-16 17:34:16 +00:00
Laurent Cozic
8ebaa7f6eb All: Put back "Fetched items" message during sync 2019-05-15 08:14:36 +01:00
Laurent Cozic
e2a64e21a2 Electron release v1.0.153 2019-05-14 22:23:47 +01:00
Laurent Cozic
78ddd22f09 Log more revision information to allow debugging issues 2019-05-14 22:23:34 +01:00
Laurent Cozic
c546b7076a Fixed doc 2019-05-14 22:02:47 +01:00
Laurent Cozic
0e2bb5d784 Desktop: Improved: When opening a note using Goto Anything, open all its parent notebooks too 2019-05-14 00:11:27 +01:00
Laurent Cozic
5c069c38f5 CLI v1.0.135 2019-05-13 23:59:27 +01:00
Laurent Cozic
451b9c0ae9 CLI v1.0.133 2019-05-13 23:55:53 +01:00
Laurent Cozic
047897621a Fix CLI build script 2019-05-13 23:52:12 +01:00
Laurent Cozic
52e5cec585 Update website 2019-05-13 23:41:31 +01:00
Laurent Cozic
bc98b65efa Update website 2019-05-13 23:23:57 +01:00
Laurent Cozic
9250e77862 Added link to CLI changelog 2019-05-13 23:23:42 +01:00
Laurent Cozic
cd69e71945 Forgot to publish in publish script 2019-05-13 23:20:25 +01:00
Laurent Cozic
e705e6e990 CLI v1.0.129 2019-05-13 23:18:57 +01:00
Laurent Cozic
4638f11c5e Created CLI release script with changelog auto-generation 2019-05-13 23:18:44 +01:00
Laurent Cozic
9de7c15e93 CLI v1.0.128 2019-05-13 22:53:08 +01:00
Laurent Cozic
61736546b4 Updated translations 2019-05-13 22:52:42 +01:00
Laurent Cozic
82b6dd23a7 CLI v1.0.127 2019-05-13 10:11:10 +01:00
Laurent Cozic
64427f0160 iOS 10.0.34 2019-05-13 10:10:37 +01:00
Laurent Cozic
cbf47cb9ee Android release v1.0.252 2019-05-13 09:53:50 +01:00
171 changed files with 8643 additions and 1506 deletions

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

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

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,26 +1,42 @@
# 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.
# 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):

View File

@@ -643,6 +643,9 @@ msgstr "أخف %s"
msgid "Quit"
msgstr "إغلاق"
msgid "Close Window"
msgstr ""
msgid "&Edit"
msgstr "ت&حرير"
@@ -703,6 +706,9 @@ msgstr "موقع الويب و التوثيق"
msgid "Make a donation"
msgstr "تبرَّع"
msgid "Toggle development tools"
msgstr ""
#, javascript-format
msgid "Open %s"
msgstr "افتح %s"
@@ -809,12 +815,12 @@ msgstr ""
msgid "Notes and settings are stored in: %s"
msgstr "الملاحظات و الإعدادات مخزّنة في: %s"
msgid "Browse..."
msgstr "استعراض..."
msgid "Check synchronisation configuration"
msgstr "فحص ضبط المزامنة"
msgid "Browse..."
msgstr "استعراض..."
msgid "Apply"
msgstr "تطبيق"
@@ -954,8 +960,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 "ضبط كلمة المرور"
@@ -974,9 +981,33 @@ msgstr "المكان"
msgid "URL"
msgstr "عنوان URL"
#, fuzzy
msgid "Note History"
msgstr "قائمة ملاحظات"
msgid "Previous versions of this note"
msgstr ""
msgid "Note properties"
msgstr "خصائص الملاحظة"
#, javascript-format
msgid "The note \"%s\" has been successfully restored to the notebook \"%s\"."
msgstr ""
#, fuzzy
msgid "This note has no history"
msgstr "جرى تعديل هذه الملاحظة:"
msgid "Restore"
msgstr ""
#, javascript-format
msgid ""
"Click \"%s\" to restore the note. It will be copied in the notebook named "
"\"%s\". The current version of the note will not be replaced or modified."
msgstr ""
msgid "Open..."
msgstr "فتح..."
@@ -1127,8 +1158,8 @@ msgid "Decrypting items: %d/%d"
msgstr "فك تشفير العناصر: %d/%d"
#, javascript-format
msgid "Fetching resources: %d"
msgstr "جلب الموارد: %d"
msgid "Fetching resources: %d/%d"
msgstr "جلب الموارد: %d/%d"
msgid "Please select where the sync status should be exported to"
msgstr "فضلاً اختر أين سيتم تصدير حالة المزامنة"
@@ -1283,6 +1314,10 @@ msgstr "قيد التقدم"
msgid "Synchronisation is already in progress. State: %s"
msgstr "المزامنة قيد التقدم بالفعل. الحال: %s"
msgid ""
"Unknown item type downloaded - please upgrade Joplin to the latest version"
msgstr ""
msgid "Encrypted"
msgstr "مشفّر"
@@ -1495,6 +1530,24 @@ msgstr ""
"الوجهة المستهدفة المزامنة إليها. كل وجهة مزامنة مستهدفة قد يكون لها معلمات "
"إضافية تكون مسماة بـ `sync.NUM.NAME` (جميعها موثقة أدناه)."
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 "Directory to synchronise with (absolute path)"
msgstr "الدليل الذي تتم المزامنة معه (المسار المطلق)"
@@ -1533,6 +1586,20 @@ msgstr ""
msgid "Ignore TLS certificate errors"
msgstr "تجاهل أخطاء شهادات TLS"
#, fuzzy
msgid "Enable note history"
msgstr "تفعيل التشفير"
msgid "days"
msgstr ""
#, javascript-format
msgid "%d days"
msgstr ""
msgid "Keep note history for"
msgstr ""
#, javascript-format
msgid "Invalid option value: \"%s\". Possible values are: %s."
msgstr "قيمة خيار غير صحيحة: \"%s\". القيم الممكنة هي: %s."
@@ -1602,12 +1669,19 @@ msgstr "لا يوجد بيانات للتصدير."
msgid "Please specify the notebook where the notes should be imported to."
msgstr "فضلاً حدّد دفتر الملاحظات الذي ترغب استيراد الملاحظات إليه."
msgid "Restored Notes"
msgstr ""
msgid "Items that cannot be synchronised"
msgstr "العناصر التي لا يمكن مزامنتها"
#, javascript-format
msgid "%s (%s): %s"
msgstr "%s (%s): %s"
#, 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 "
@@ -1880,9 +1954,11 @@ msgstr "ليس لديك دفاتر ملاحظات حالياً. أنشئ واح
msgid "Welcome"
msgstr "مرحباً"
#, fuzzy
#~ msgid "This note has no history"
#~ msgstr "جرى تعديل هذه الملاحظة:"
#~ msgid "Some items cannot be decrypted."
#~ msgstr "لا يمكن فك تشفير بعض العناصر."
#~ msgid "%s (%s): %s"
#~ msgstr "%s (%s): %s"
#~ msgid ""
#~ "The path to synchronise with when file system synchronisation is enabled. "

View File

@@ -668,6 +668,9 @@ msgstr "Amaga %s"
msgid "Quit"
msgstr "Surt"
msgid "Close Window"
msgstr ""
#, fuzzy
msgid "&Edit"
msgstr "Edita"
@@ -735,6 +738,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"
@@ -844,12 +850,12 @@ msgstr ""
msgid "Notes and settings are stored in: %s"
msgstr "Les notes i la configuració es desen a: %s"
msgid "Browse..."
msgstr ""
msgid "Check synchronisation configuration"
msgstr "Comprova la configuració de la sincronització"
msgid "Browse..."
msgstr ""
msgid "Apply"
msgstr ""
@@ -992,8 +998,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"
@@ -1013,9 +1020,33 @@ msgstr ""
msgid "URL"
msgstr ""
#, fuzzy
msgid "Note History"
msgstr "Blocs de notes"
msgid "Previous versions of this note"
msgstr ""
msgid "Note properties"
msgstr ""
#, javascript-format
msgid "The note \"%s\" has been successfully restored to the notebook \"%s\"."
msgstr ""
#, fuzzy
msgid "This note has no history"
msgstr "Aquesta nota s'ha modificat:"
msgid "Restore"
msgstr ""
#, javascript-format
msgid ""
"Click \"%s\" to restore the note. It will be copied in the notebook named "
"\"%s\". The current version of the note will not be replaced or modified."
msgstr ""
msgid "Open..."
msgstr "Obre..."
@@ -1164,11 +1195,11 @@ msgstr "Blocs de notes"
#, fuzzy, javascript-format
msgid "Decrypting items: %d/%d"
msgstr "Elements obtinguts: %d/%d."
msgstr "Elements obtinguts: %d/%d"
#, fuzzy, javascript-format
msgid "Fetching resources: %d"
msgstr "Recursos: %d."
msgid "Fetching resources: %d/%d"
msgstr "Recursos: %d/%d"
msgid "Please select where the sync status should be exported to"
msgstr "Seleccioneu on s'hauria d'exportar l'estat de la sincronització"
@@ -1326,6 +1357,10 @@ msgstr "En progés"
msgid "Synchronisation is already in progress. State: %s"
msgstr "La sincronització ja és en procés. Estat: %s"
msgid ""
"Unknown item type downloaded - please upgrade Joplin to the latest version"
msgstr ""
msgid "Encrypted"
msgstr "Xifrat"
@@ -1538,6 +1573,24 @@ 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 "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 "Directory to synchronise with (absolute path)"
msgstr "Directori on es farà la sincronització (camí absolut)"
@@ -1572,6 +1625,20 @@ msgstr ""
msgid "Ignore TLS certificate errors"
msgstr ""
#, fuzzy
msgid "Enable note history"
msgstr "Activa el xifratge"
msgid "days"
msgstr ""
#, javascript-format
msgid "%d days"
msgstr ""
msgid "Keep note history for"
msgstr ""
#, javascript-format
msgid "Invalid option value: \"%s\". Possible values are: %s."
msgstr "El valor de l'opció no és vàlid: «%s». Els valors possibles són: %s."
@@ -1646,12 +1713,19 @@ msgstr "No hi ha dades per exportar."
msgid "Please specify the notebook where the notes should be imported to."
msgstr "Indiqueu el bloc de notes on s'haurien d'importar les notes."
msgid "Restored Notes"
msgstr ""
msgid "Items that cannot be synchronised"
msgstr "Elements que no s'han pogut sincronitzar"
#, javascript-format
msgid "%s (%s): %s"
msgstr "%s (%s): %s"
#, 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 "
@@ -1930,9 +2004,11 @@ msgstr ""
msgid "Welcome"
msgstr "Benvingut"
#, fuzzy
#~ msgid "This note has no history"
#~ msgstr "Aquesta nota s'ha modificat:"
#~ msgid "Some items cannot be decrypted."
#~ msgstr "Alguns elements no s'han pogut desxifrar."
#~ msgid "%s (%s): %s"
#~ msgstr "%s (%s): %s"
#~ msgid ""
#~ "The path to synchronise with when file system synchronisation is enabled. "

View File

@@ -15,8 +15,6 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: Poedit 2.0.6\n"
"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
"POT-Creation-Date: \n"
"PO-Revision-Date: \n"
msgid "To delete a tag, untag the associated notes."
msgstr "Pro smazání tagu jej odeberte od přiřazených poznámek."
@@ -653,6 +651,9 @@ msgstr "Schovat %s"
msgid "Quit"
msgstr "Ukončit"
msgid "Close Window"
msgstr ""
#, fuzzy
msgid "&Edit"
msgstr "Upravit"
@@ -718,6 +719,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"
@@ -827,12 +831,12 @@ msgstr ""
msgid "Notes and settings are stored in: %s"
msgstr "Poznámky a nastavení uloženo v: %s"
msgid "Browse..."
msgstr "Procházet..."
msgid "Check synchronisation configuration"
msgstr "Zkontrolujte nastavení synchronizace"
msgid "Browse..."
msgstr "Procházet..."
msgid "Apply"
msgstr "Použít"
@@ -971,8 +975,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"
@@ -990,9 +995,33 @@ msgstr "Lokace"
msgid "URL"
msgstr "URL"
#, fuzzy
msgid "Note History"
msgstr "Seznam položek"
msgid "Previous versions of this note"
msgstr ""
msgid "Note properties"
msgstr "Nastavení poznámek"
#, javascript-format
msgid "The note \"%s\" has been successfully restored to the notebook \"%s\"."
msgstr ""
#, fuzzy
msgid "This note has no history"
msgstr "Poznámka byla upravena:"
msgid "Restore"
msgstr ""
#, javascript-format
msgid ""
"Click \"%s\" to restore the note. It will be copied in the notebook named "
"\"%s\". The current version of the note will not be replaced or modified."
msgstr ""
msgid "Open..."
msgstr "Otevřít..."
@@ -1142,8 +1171,8 @@ msgid "Decrypting items: %d/%d"
msgstr "Rozšifrované položky: %d/%d"
#, javascript-format
msgid "Fetching resources: %d"
msgstr "Stahování zdrojů: %d"
msgid "Fetching resources: %d/%d"
msgstr "Stahování zdrojů: %d/%d"
msgid "Please select where the sync status should be exported to"
msgstr "Prosím vyberte, kam má být stav synchronizace exportován"
@@ -1303,6 +1332,10 @@ msgstr "Probíhá"
msgid "Synchronisation is already in progress. State: %s"
msgstr "Synchronizace již probíhá. Stav: %s"
msgid ""
"Unknown item type downloaded - please upgrade Joplin to the latest version"
msgstr ""
msgid "Encrypted"
msgstr "Zašifrováno"
@@ -1515,6 +1548,24 @@ msgstr ""
"Cíl synchronizace. Každý cíl může mít další parametry ve formátu `sync.NUM."
"NAME` (dokumentace níže)."
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 "Directory to synchronise with (absolute path)"
msgstr "Složka k synchronizaci (absolutní cesta)"
@@ -1553,6 +1604,20 @@ msgstr ""
msgid "Ignore TLS certificate errors"
msgstr "Ignorovat chyby TLS certifikátu"
#, fuzzy
msgid "Enable note history"
msgstr "Povolit poznámky pod čarou"
msgid "days"
msgstr ""
#, javascript-format
msgid "%d days"
msgstr ""
msgid "Keep note history for"
msgstr ""
#, javascript-format
msgid "Invalid option value: \"%s\". Possible values are: %s."
msgstr "Neplatná hodnota: \"%s\". Přípustné hodnoty jsou: %s."
@@ -1622,12 +1687,19 @@ msgstr "Nic k exportování."
msgid "Please specify the notebook where the notes should be imported to."
msgstr "Prosím specifikujte sešit, do kterého mají být poznámky importovány."
msgid "Restored Notes"
msgstr ""
msgid "Items that cannot be synchronised"
msgstr "Položky jež nelze synchronizovat"
#, javascript-format
msgid "%s (%s): %s"
msgstr "%s (%s): %s"
#, 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 "
@@ -1905,9 +1977,11 @@ msgstr "Nemáte žádný zápisník. Vytvořte jeden kliknutím na tlačítko (+
msgid "Welcome"
msgstr "Vítejte"
#, fuzzy
#~ msgid "This note has no history"
#~ msgstr "Poznámka byla upravena:"
#~ msgid "Some items cannot be decrypted."
#~ msgstr "Některé položky nelze rozšifrovat."
#~ msgid "%s (%s): %s"
#~ msgstr "%s (%s): %s"
#~ msgid ""
#~ "The path to synchronise with when file system synchronisation is enabled. "

View File

@@ -655,6 +655,9 @@ msgstr "Skjul %s"
msgid "Quit"
msgstr "Afslut"
msgid "Close Window"
msgstr ""
#, fuzzy
msgid "&Edit"
msgstr "Ret"
@@ -722,6 +725,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"
@@ -824,12 +830,12 @@ msgstr ""
msgid "Notes and settings are stored in: %s"
msgstr "Noter og indstillinger er gemt i: %s"
msgid "Browse..."
msgstr ""
msgid "Check synchronisation configuration"
msgstr "Check synkroniserings Indstillinger"
msgid "Browse..."
msgstr ""
msgid "Apply"
msgstr ""
@@ -973,8 +979,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"
@@ -992,9 +999,33 @@ msgstr ""
msgid "URL"
msgstr ""
#, fuzzy
msgid "Note History"
msgstr "Notesbøger"
msgid "Previous versions of this note"
msgstr ""
msgid "Note properties"
msgstr ""
#, javascript-format
msgid "The note \"%s\" has been successfully restored to the notebook \"%s\"."
msgstr ""
#, fuzzy
msgid "This note has no history"
msgstr "Denne note er ændret:"
msgid "Restore"
msgstr ""
#, javascript-format
msgid ""
"Click \"%s\" to restore the note. It will be copied in the notebook named "
"\"%s\". The current version of the note will not be replaced or modified."
msgstr ""
msgid "Open..."
msgstr "Åben..."
@@ -1140,11 +1171,11 @@ msgstr "Notesbøger"
#, fuzzy, javascript-format
msgid "Decrypting items: %d/%d"
msgstr "Hentede emner: %d/%d."
msgstr "Hentede emner: %d/%d"
#, fuzzy, javascript-format
msgid "Fetching resources: %d"
msgstr "Ressourcer: %d."
msgid "Fetching resources: %d/%d"
msgstr "Ressourcer: %d/%d"
msgid "Please select where the sync status should be exported to"
msgstr "Vælg hvor sync status skal eksporteres til"
@@ -1303,6 +1334,10 @@ msgstr "I gang"
msgid "Synchronisation is already in progress. State: %s"
msgstr "Synkronisering er allerede i gang: Tilstand: %s"
msgid ""
"Unknown item type downloaded - please upgrade Joplin to the latest version"
msgstr ""
msgid "Encrypted"
msgstr "Krypteret"
@@ -1520,6 +1555,24 @@ msgstr ""
"Synkroniserings mål. Hver synk. mål kan have ekstra parametre som navngives "
"som `sync.NUM.NAME` (se dokumentation herunder)."
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 "Directory to synchronise with (absolute path)"
msgstr "Mappe der skal synkroniseres med (absolut sti)"
@@ -1554,6 +1607,20 @@ msgstr ""
msgid "Ignore TLS certificate errors"
msgstr ""
#, fuzzy
msgid "Enable note history"
msgstr "Start kryptering"
msgid "days"
msgstr ""
#, javascript-format
msgid "%d days"
msgstr ""
msgid "Keep note history for"
msgstr ""
#, javascript-format
msgid "Invalid option value: \"%s\". Possible values are: %s."
msgstr "Ulovlig værdi: \"%s\". Mulige valg er: %s."
@@ -1628,12 +1695,19 @@ msgstr "Der er ingen data at eksportere."
msgid "Please specify the notebook where the notes should be imported to."
msgstr "Angiv hvilken notesbog, noter skal importeres til."
msgid "Restored Notes"
msgstr ""
msgid "Items that cannot be synchronised"
msgstr "Emner kan ikke synkroniseres"
#, javascript-format
msgid "%s (%s): %s"
msgstr "%s (%s): %s"
#, 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 "
@@ -1905,9 +1979,11 @@ msgstr "Du har ingen notesbøger. Opret en ved at klikke på (+) knappen."
msgid "Welcome"
msgstr "Velkommen"
#, fuzzy
#~ msgid "This note has no history"
#~ msgstr "Denne note er ændret:"
#~ msgid "Some items cannot be decrypted."
#~ msgstr "Nogle emner kan ikke krypteres."
#~ msgid "%s (%s): %s"
#~ msgstr "%s (%s): %s"
#~ msgid ""
#~ "The path to synchronise with when file system synchronisation is enabled. "

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."
@@ -674,6 +674,9 @@ msgstr "%s ausblenden"
msgid "Quit"
msgstr "Verlassen"
msgid "Close Window"
msgstr "Fenster schließen"
msgid "&Edit"
msgstr "&Bearbeiten"
@@ -734,6 +737,9 @@ msgstr "Webseite und Dokumentation"
msgid "Make a donation"
msgstr "Spenden"
msgid "Toggle development tools"
msgstr ""
#, javascript-format
msgid "Open %s"
msgstr "Öffne %s"
@@ -846,12 +852,12 @@ msgstr ""
msgid "Notes and settings are stored in: %s"
msgstr "Notizen und Einstellungen werden gespeichert in: %s"
msgid "Browse..."
msgstr "Durchsuche..."
msgid "Check synchronisation configuration"
msgstr "Überprüfen der Synchronisationseinstellungen"
msgid "Browse..."
msgstr "Durchsuche..."
msgid "Apply"
msgstr "Anwenden"
@@ -995,8 +1001,9 @@ 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."
#, fuzzy
msgid "One or more master keys need a password."
msgstr "Master-Passwort eingeben:"
msgid "Set the password"
msgstr "Setze ein Passwort"
@@ -1018,9 +1025,35 @@ msgstr "Standort"
msgid "URL"
msgstr "URL"
msgid "Note History"
msgstr "Notizen-Verlauf"
msgid "Previous versions of this note"
msgstr "Vorherige Version von dieser Notiz"
msgid "Note properties"
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."
msgid "This note has no history"
msgstr "Diese Notiz hat keinen Verlauf"
msgid "Restore"
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..."
@@ -1173,8 +1206,8 @@ msgid "Decrypting items: %d/%d"
msgstr "Entschlüsselte Objekte: %d/%d"
#, javascript-format
msgid "Fetching resources: %d"
msgstr "Ressourcen abrufen: %d"
msgid "Fetching resources: %d/%d"
msgstr "Ressourcen abrufen: %d/%d"
msgid "Please select where the sync status should be exported to"
msgstr ""
@@ -1332,6 +1365,10 @@ msgstr "In Bearbeitung"
msgid "Synchronisation is already in progress. State: %s"
msgstr "Synchronisation ist bereits im Gange. Status: %s"
msgid ""
"Unknown item type downloaded - please upgrade Joplin to the latest version"
msgstr "Unbekannter Eintrags-Typ heruntergeladen - bitte aktualisiere Joplin"
msgid "Encrypted"
msgstr "Verschlüsselt"
@@ -1547,6 +1584,28 @@ msgstr ""
"kann zusätzliche Parameter haben, die als `sync.NUM.NAME` (alle unten "
"dokumentiert) bezeichnet werden."
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 "Directory to synchronise with (absolute path)"
msgstr "Verzeichnis mit dem synchronisiert werden soll (absoluter Pfad)"
@@ -1586,6 +1645,19 @@ msgstr ""
msgid "Ignore TLS certificate errors"
msgstr "Ignoriere TLS-Zertifikatfehler"
msgid "Enable note history"
msgstr "Aktiviere Notizen-Verlauf"
msgid "days"
msgstr "Tage"
#, javascript-format
msgid "%d days"
msgstr "%d Tage"
msgid "Keep note history for"
msgstr "Speicher Notizen-Verlauf für"
#, javascript-format
msgid "Invalid option value: \"%s\". Possible values are: %s."
msgstr "Ungültiger Optionswert: \"%s\". Mögliche Werte sind: %s."
@@ -1658,12 +1730,19 @@ msgid "Please specify the notebook where the notes should be imported to."
msgstr ""
"Bitte wähle aus, wohin der Synchronisations-Status exportiert werden soll."
msgid "Restored Notes"
msgstr "Wiederhergestellte Notizen"
msgid "Items that cannot be synchronised"
msgstr "Objekte können nicht synchronisiert werden"
#, javascript-format
msgid "%s (%s): %s"
msgstr "%s (%s): %s"
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 ""
"These items will remain on the device but will not be uploaded to the sync "
@@ -1948,9 +2027,11 @@ msgstr ""
msgid "Welcome"
msgstr "Willkommen"
#, fuzzy
#~ msgid "This note has no history"
#~ msgstr "Diese Notiz wurde verändert:"
#~ msgid "Some items cannot be decrypted."
#~ msgstr "Einige Objekte können nicht entschlüsselt werden."
#~ msgid "%s (%s): %s"
#~ msgstr "%s (%s): %s"
#~ msgid "Table of contents"
#~ msgstr "Inhaltsverzeichnis"

View File

@@ -583,6 +583,9 @@ msgstr ""
msgid "Quit"
msgstr ""
msgid "Close Window"
msgstr ""
msgid "&Edit"
msgstr ""
@@ -643,6 +646,9 @@ msgstr ""
msgid "Make a donation"
msgstr ""
msgid "Toggle development tools"
msgstr ""
#, javascript-format
msgid "Open %s"
msgstr ""
@@ -744,10 +750,10 @@ msgstr ""
msgid "Notes and settings are stored in: %s"
msgstr ""
msgid "Browse..."
msgid "Check synchronisation configuration"
msgstr ""
msgid "Check synchronisation configuration"
msgid "Browse..."
msgstr ""
msgid "Apply"
@@ -875,7 +881,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"
@@ -894,9 +900,31 @@ msgstr ""
msgid "URL"
msgstr ""
msgid "Note History"
msgstr ""
msgid "Previous versions of this note"
msgstr ""
msgid "Note properties"
msgstr ""
#, javascript-format
msgid "The note \"%s\" has been successfully restored to the notebook \"%s\"."
msgstr ""
msgid "This note has no history"
msgstr ""
msgid "Restore"
msgstr ""
#, javascript-format
msgid ""
"Click \"%s\" to restore the note. It will be copied in the notebook named "
"\"%s\". The current version of the note will not be replaced or modified."
msgstr ""
msgid "Open..."
msgstr ""
@@ -1043,7 +1071,7 @@ msgid "Decrypting items: %d/%d"
msgstr ""
#, javascript-format
msgid "Fetching resources: %d"
msgid "Fetching resources: %d/%d"
msgstr ""
msgid "Please select where the sync status should be exported to"
@@ -1191,6 +1219,10 @@ msgstr ""
msgid "Synchronisation is already in progress. State: %s"
msgstr ""
msgid ""
"Unknown item type downloaded - please upgrade Joplin to the latest version"
msgstr ""
msgid "Encrypted"
msgstr ""
@@ -1391,6 +1423,24 @@ msgid ""
"which are named as `sync.NUM.NAME` (all documented below)."
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 "Directory to synchronise with (absolute path)"
msgstr ""
@@ -1425,6 +1475,19 @@ msgstr ""
msgid "Ignore TLS certificate errors"
msgstr ""
msgid "Enable note history"
msgstr ""
msgid "days"
msgstr ""
#, javascript-format
msgid "%d days"
msgstr ""
msgid "Keep note history for"
msgstr ""
#, javascript-format
msgid "Invalid option value: \"%s\". Possible values are: %s."
msgstr ""
@@ -1492,11 +1555,18 @@ msgstr ""
msgid "Please specify the notebook where the notes should be imported to."
msgstr ""
msgid "Restored Notes"
msgstr ""
msgid "Items that cannot be synchronised"
msgstr ""
#, javascript-format
msgid "%s (%s): %s"
msgid "%s (%s) could not be uploaded: %s"
msgstr ""
#, javascript-format
msgid "Item \"%s\" could not be downloaded: %s"
msgstr ""
msgid ""

View File

@@ -589,6 +589,9 @@ msgstr ""
msgid "Quit"
msgstr ""
msgid "Close Window"
msgstr ""
msgid "&Edit"
msgstr ""
@@ -649,6 +652,9 @@ msgstr ""
msgid "Make a donation"
msgstr ""
msgid "Toggle development tools"
msgstr ""
#, javascript-format
msgid "Open %s"
msgstr ""
@@ -752,12 +758,12 @@ msgstr ""
msgid "Notes and settings are stored in: %s"
msgstr ""
msgid "Browse..."
msgstr ""
msgid "Check synchronisation configuration"
msgstr "Check synchronization configuration"
msgid "Browse..."
msgstr ""
msgid "Apply"
msgstr ""
@@ -893,7 +899,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"
@@ -912,9 +918,31 @@ msgstr ""
msgid "URL"
msgstr ""
msgid "Note History"
msgstr ""
msgid "Previous versions of this note"
msgstr ""
msgid "Note properties"
msgstr ""
#, javascript-format
msgid "The note \"%s\" has been successfully restored to the notebook \"%s\"."
msgstr ""
msgid "This note has no history"
msgstr ""
msgid "Restore"
msgstr ""
#, javascript-format
msgid ""
"Click \"%s\" to restore the note. It will be copied in the notebook named "
"\"%s\". The current version of the note will not be replaced or modified."
msgstr ""
msgid "Open..."
msgstr ""
@@ -1061,7 +1089,7 @@ msgid "Decrypting items: %d/%d"
msgstr ""
#, javascript-format
msgid "Fetching resources: %d"
msgid "Fetching resources: %d/%d"
msgstr ""
msgid "Please select where the sync status should be exported to"
@@ -1211,6 +1239,10 @@ msgstr ""
msgid "Synchronisation is already in progress. State: %s"
msgstr "Synchronization is already in progress. State: %s"
msgid ""
"Unknown item type downloaded - please upgrade Joplin to the latest version"
msgstr ""
msgid "Encrypted"
msgstr ""
@@ -1416,6 +1448,24 @@ msgstr ""
"The target to synchonize to. Each sync target may have additional parameters "
"which are named as `sync.NUM.NAME` (all documented below)."
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 "Directory to synchronise with (absolute path)"
msgstr "Directory to synchronize with (absolute path)"
@@ -1450,6 +1500,19 @@ msgstr ""
msgid "Ignore TLS certificate errors"
msgstr ""
msgid "Enable note history"
msgstr ""
msgid "days"
msgstr ""
#, javascript-format
msgid "%d days"
msgstr ""
msgid "Keep note history for"
msgstr ""
#, javascript-format
msgid "Invalid option value: \"%s\". Possible values are: %s."
msgstr ""
@@ -1517,11 +1580,18 @@ msgstr ""
msgid "Please specify the notebook where the notes should be imported to."
msgstr ""
msgid "Restored Notes"
msgstr ""
msgid "Items that cannot be synchronised"
msgstr "Items that cannot be synchronized"
#, javascript-format
msgid "%s (%s): %s"
msgid "%s (%s) could not be uploaded: %s"
msgstr ""
#, javascript-format
msgid "Item \"%s\" could not be downloaded: %s"
msgstr ""
msgid ""

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:"
@@ -641,7 +643,7 @@ msgid "About Joplin"
msgstr "Acerca de Joplin"
msgid "Preferences..."
msgstr ""
msgstr "Preferencias..."
msgid "Check for updates..."
msgstr "Comprobar actualizaciones..."
@@ -662,6 +664,9 @@ msgstr "Oculta %s"
msgid "Quit"
msgstr "Salir"
msgid "Close Window"
msgstr "Cerrar Ventana"
msgid "&Edit"
msgstr "&Editar"
@@ -722,6 +727,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"
@@ -825,17 +833,19 @@ 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"
msgstr "Las notas y los ajustes se guardan en: %s"
msgid "Browse..."
msgstr "Explorar..."
msgid "Check synchronisation configuration"
msgstr "Comprobar sincronización"
msgid "Browse..."
msgstr "Explorar..."
msgid "Apply"
msgstr "Aplicar"
@@ -976,8 +986,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"
@@ -995,9 +1006,35 @@ msgstr "Localización"
msgid "URL"
msgstr "URL"
msgid "Note History"
msgstr ""
"Historial\n"
" de notas"
msgid "Previous versions of this note"
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 "La nota \"%s\" se ha restaurado correctamente en la libreta \"%s\"."
msgid "This note has no history"
msgstr "Esta nota no dispone de historial"
msgid "Restore"
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..."
@@ -1149,8 +1186,8 @@ msgid "Decrypting items: %d/%d"
msgstr "Descifrando elementos: %d/%d"
#, javascript-format
msgid "Fetching resources: %d"
msgstr "Obteniendo refuersos: %d"
msgid "Fetching resources: %d/%d"
msgstr "Obteniendo refuersos: %d/%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"
@@ -1189,9 +1226,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"
@@ -1305,6 +1344,12 @@ msgstr "En progreso"
msgid "Synchronisation is already in progress. State: %s"
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"
@@ -1382,7 +1427,6 @@ msgstr "Ordenar notas por"
msgid "Reverse sort order"
msgstr "Invierte el orden"
#, fuzzy
msgid "Sort notebooks by"
msgstr "Ordenar notas por"
@@ -1402,41 +1446,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"
@@ -1523,6 +1566,28 @@ msgstr ""
"tener parámetros adicionales los cuales son llamados como `sync.NUM.NAME` "
"(todos abajo documentados)."
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 "Directory to synchronise with (absolute path)"
msgstr "Directorio con el que sincronizarse (ruta completa)"
@@ -1562,6 +1627,19 @@ msgstr ""
msgid "Ignore TLS certificate errors"
msgstr "Ignorar errores en certificados TLS"
msgid "Enable note history"
msgstr "Habilitar historial de notas"
msgid "days"
msgstr "días"
#, javascript-format
msgid "%d days"
msgstr "%d días"
msgid "Keep note history for"
msgstr "Mantener historial de la nota durante"
#, javascript-format
msgid "Invalid option value: \"%s\". Possible values are: %s."
msgstr "Opción inválida: «%s». Los valores posibles son: %s."
@@ -1579,7 +1657,7 @@ msgid "Note"
msgstr "Nota"
msgid "Plugins"
msgstr ""
msgstr "Plugins"
msgid "Application"
msgstr "Aplicación"
@@ -1631,12 +1709,19 @@ msgstr "No hay datos para exportar."
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 "Notas restauradas"
msgid "Items that cannot be synchronised"
msgstr "Elementos que no se pueden sincronizar"
#, javascript-format
msgid "%s (%s): %s"
msgstr "%s (%s): %s"
#, 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"
msgid ""
"These items will remain on the device but will not be uploaded to the sync "
@@ -1917,9 +2002,11 @@ msgstr ""
msgid "Welcome"
msgstr "Bienvenido"
#, fuzzy
#~ msgid "This note has no history"
#~ msgstr "Esta nota ha sido modificada:"
#~ msgid "Some items cannot be decrypted."
#~ msgstr "No se han podido descifrar algunos elementos."
#~ msgid "%s (%s): %s"
#~ msgstr "%s (%s): %s"
#~ msgid ""
#~ "The path to synchronise with when file system synchronisation is enabled. "

View File

@@ -663,6 +663,9 @@ msgstr ""
msgid "Quit"
msgstr "Irten"
msgid "Close Window"
msgstr ""
#, fuzzy
msgid "&Edit"
msgstr "Editatu"
@@ -729,6 +732,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"
@@ -832,13 +838,13 @@ msgstr ""
msgid "Notes and settings are stored in: %s"
msgstr "Oharrak eta ezarpenak hemen daude gordeta: %s"
msgid "Browse..."
msgstr ""
#, fuzzy
msgid "Check synchronisation configuration"
msgstr "Sinkronizazioa utzi"
msgid "Browse..."
msgstr ""
msgid "Apply"
msgstr ""
@@ -981,8 +987,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"
@@ -1000,9 +1007,33 @@ msgstr ""
msgid "URL"
msgstr ""
#, fuzzy
msgid "Note History"
msgstr "Koadernoak"
msgid "Previous versions of this note"
msgstr ""
msgid "Note properties"
msgstr ""
#, javascript-format
msgid "The note \"%s\" has been successfully restored to the notebook \"%s\"."
msgstr ""
#, fuzzy
msgid "This note has no history"
msgstr "Ohar hau mugitua izan da:"
msgid "Restore"
msgstr ""
#, javascript-format
msgid ""
"Click \"%s\" to restore the note. It will be copied in the notebook named "
"\"%s\". The current version of the note will not be replaced or modified."
msgstr ""
msgid "Open..."
msgstr ""
@@ -1152,11 +1183,11 @@ msgstr "Koadernoak"
#, fuzzy, javascript-format
msgid "Decrypting items: %d/%d"
msgstr "Itemak eskuratuta: %d%d."
msgstr "Itemak eskuratuta: %d/%d"
#, fuzzy, javascript-format
msgid "Fetching resources: %d"
msgstr "Baliabideak: %d."
msgid "Fetching resources: %d/%d"
msgstr "Baliabideak: %d/%d"
#, fuzzy
msgid "Please select where the sync status should be exported to"
@@ -1316,6 +1347,10 @@ msgstr ""
msgid "Synchronisation is already in progress. State: %s"
msgstr "Sinkronizazioa hasita dago. Egoera: %s"
msgid ""
"Unknown item type downloaded - please upgrade Joplin to the latest version"
msgstr ""
msgid "Encrypted"
msgstr "Zifratuta"
@@ -1537,6 +1572,24 @@ msgstr ""
"parametro gehigarriak, horrela izendatuta `sync.NUM.NAME` (dena beherago "
"dokumentatuta)."
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 "Directory to synchronise with (absolute path)"
msgstr "Sinkronizatzeko direktorioa (bide-izena osorik)"
@@ -1574,6 +1627,20 @@ msgstr ""
msgid "Ignore TLS certificate errors"
msgstr ""
#, fuzzy
msgid "Enable note history"
msgstr "Zifratua gaitu"
msgid "days"
msgstr ""
#, javascript-format
msgid "%d days"
msgstr ""
msgid "Keep note history for"
msgstr ""
#, javascript-format
msgid "Invalid option value: \"%s\". Possible values are: %s."
msgstr "Balio aukera baliogabea: \"%s\". Litezkeen balioak: %s."
@@ -1649,12 +1716,19 @@ msgstr ""
msgid "Please specify the notebook where the notes should be imported to."
msgstr "Aukeratu nora esportatu sinkronizazioaren egoera, mesedez"
msgid "Restored Notes"
msgstr ""
msgid "Items that cannot be synchronised"
msgstr "Itemok ezin sinkronizatu"
#, javascript-format
msgid "%s (%s): %s"
msgstr "%s (%s): %s"
#, fuzzy, javascript-format
msgid "%s (%s) could not be uploaded: %s"
msgstr "Koadernoa ezin gorde daiteke: %s"
#, fuzzy, javascript-format
msgid "Item \"%s\" could not be downloaded: %s"
msgstr "Koadernoa ezin gorde daiteke: %s"
msgid ""
"These items will remain on the device but will not be uploaded to the sync "
@@ -1926,9 +2000,11 @@ msgstr "Oraindik ez duzu koadernorik. Sortu bat (+) botoian sakatuta."
msgid "Welcome"
msgstr "Ongi etorri!"
#, fuzzy
#~ msgid "This note has no history"
#~ msgstr "Ohar hau mugitua izan da:"
#~ msgid "Some items cannot be decrypted."
#~ msgstr "Zenbait item ezin dira deszifratu."
#~ msgid "%s (%s): %s"
#~ msgstr "%s (%s): %s"
#~ msgid ""
#~ "The path to synchronise with when file system synchronisation is enabled. "

1854
CliClient/locales/fa.po Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -659,6 +659,9 @@ msgstr "Cacher %s"
msgid "Quit"
msgstr "Quitter"
msgid "Close Window"
msgstr "Fermer la fenêtre"
msgid "&Edit"
msgstr "&Édition"
@@ -719,6 +722,9 @@ msgstr "Documentation en ligne"
msgid "Make a donation"
msgstr "Faire un don"
msgid "Toggle development tools"
msgstr ""
#, javascript-format
msgid "Open %s"
msgstr "Ouvrir %s"
@@ -830,12 +836,12 @@ msgstr ""
msgid "Notes and settings are stored in: %s"
msgstr "Les notes et paramètres se trouve dans : %s"
msgid "Browse..."
msgstr "Parcourir…"
msgid "Check synchronisation configuration"
msgstr "Vérifier config synchronisation"
msgid "Browse..."
msgstr "Parcourir…"
msgid "Apply"
msgstr "Appliquer"
@@ -980,8 +986,9 @@ 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."
#, fuzzy
msgid "One or more master keys need a password."
msgstr "Entrer le mot de passe maître :"
msgid "Set the password"
msgstr "Définir le mot de passe"
@@ -1002,9 +1009,34 @@ msgstr "Lieu"
msgid "URL"
msgstr "URL"
msgid "Note History"
msgstr "Historique des notes"
msgid "Previous versions of this note"
msgstr "Versions précédentes de cette note"
msgid "Note properties"
msgstr "Propriétés de la note"
#, javascript-format
msgid "The note \"%s\" has been successfully restored to the notebook \"%s\"."
msgstr "La note \"%s\" a été restaurée dans le carnet \"%s\"."
msgid "This note has no history"
msgstr "Cette note n'a pas d'historique"
msgid "Restore"
msgstr "Restaurer"
#, javascript-format
msgid ""
"Click \"%s\" to restore the note. It will be copied in the notebook named "
"\"%s\". The current version of the note will not be replaced or modified."
msgstr ""
"Cliquez sur \"%s\" pour restaurer cette note. Elle sera copiée dans le "
"carnet \"%s\". La version actuelle de la note ne sera pas replacée ou "
"modifiée."
msgid "Open..."
msgstr "Ouvrir..."
@@ -1158,8 +1190,8 @@ msgid "Decrypting items: %d/%d"
msgstr "Déchiffrement des objets : %d/%d"
#, javascript-format
msgid "Fetching resources: %d"
msgstr "Tél. ressources : %d"
msgid "Fetching resources: %d/%d"
msgstr "Tél. ressources : %d/%d"
msgid "Please select where the sync status should be exported to"
msgstr ""
@@ -1317,6 +1349,10 @@ msgstr "En cours"
msgid "Synchronisation is already in progress. State: %s"
msgstr "La synchronisation est déjà en cours. État : %s"
msgid ""
"Unknown item type downloaded - please upgrade Joplin to the latest version"
msgstr "Objet inconnu téléchargé - veuillez mettre Joplin à jour"
msgid "Encrypted"
msgstr "Chiffré"
@@ -1531,6 +1567,28 @@ msgstr ""
"avoir des paramètres supplémentaires sous le nom `sync.NUM.NOM` (documentés "
"ci-dessous)."
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\", elle sont téléchargée 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 "Directory to synchronise with (absolute path)"
msgstr "Répertoire avec lequel synchroniser (chemin absolu)"
@@ -1570,6 +1628,19 @@ msgstr ""
msgid "Ignore TLS certificate errors"
msgstr "Ignorer les erreurs de certificats TLS"
msgid "Enable note history"
msgstr "Activer l'historique des notes"
msgid "days"
msgstr "jours"
#, javascript-format
msgid "%d days"
msgstr "%d jours"
msgid "Keep note history for"
msgstr "Garder l'historique des notes pour"
#, javascript-format
msgid "Invalid option value: \"%s\". Possible values are: %s."
msgstr "Option invalide: \"%s\". Les valeurs possibles sont : %s."
@@ -1639,12 +1710,19 @@ msgstr "Il n'y a pas de données à exporter."
msgid "Please specify the notebook where the notes should be imported to."
msgstr "Veuillez sélectionner le carnet où les notes doivent être importées."
msgid "Restored Notes"
msgstr "Notes restaurées"
msgid "Items that cannot be synchronised"
msgstr "Objets qui ne peuvent pas être synchronisés"
#, javascript-format
msgid "%s (%s): %s"
msgstr "%s (%s) : %s"
msgid "%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 ""
"These items will remain on the device but will not be uploaded to the sync "
@@ -1927,9 +2005,11 @@ msgstr ""
msgid "Welcome"
msgstr "Bienvenue"
#, fuzzy
#~ msgid "This note has no history"
#~ msgstr "Cette note a été modifiée :"
#~ msgid "Some items cannot be decrypted."
#~ msgstr "Certains objets ne peuvent être déchiffrés."
#~ msgid "%s (%s): %s"
#~ msgstr "%s (%s) : %s"
#~ msgid "Table of contents"
#~ msgstr "Table des matières"

View File

@@ -655,6 +655,9 @@ msgstr "Ocultar %s"
msgid "Quit"
msgstr "Saír"
msgid "Close Window"
msgstr ""
#, fuzzy
msgid "&Edit"
msgstr "Edtar"
@@ -722,6 +725,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"
@@ -824,12 +830,12 @@ msgstr ""
msgid "Notes and settings are stored in: %s"
msgstr "As notas e axustes gardáronse en: %s"
msgid "Browse..."
msgstr ""
msgid "Check synchronisation configuration"
msgstr "Comprobar a configuración da sincronización"
msgid "Browse..."
msgstr ""
msgid "Apply"
msgstr ""
@@ -970,8 +976,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"
@@ -989,9 +996,33 @@ msgstr ""
msgid "URL"
msgstr ""
#, fuzzy
msgid "Note History"
msgstr "Cadernos"
msgid "Previous versions of this note"
msgstr ""
msgid "Note properties"
msgstr ""
#, javascript-format
msgid "The note \"%s\" has been successfully restored to the notebook \"%s\"."
msgstr ""
#, fuzzy
msgid "This note has no history"
msgstr "Esta nota foi modificada:"
msgid "Restore"
msgstr ""
#, javascript-format
msgid ""
"Click \"%s\" to restore the note. It will be copied in the notebook named "
"\"%s\". The current version of the note will not be replaced or modified."
msgstr ""
msgid "Open..."
msgstr "Abrir…"
@@ -1140,11 +1171,11 @@ msgstr "Cadernos"
#, fuzzy, javascript-format
msgid "Decrypting items: %d/%d"
msgstr "Elementos obtidos: %d/%d."
msgstr "Elementos obtidos: %d/%d"
#, fuzzy, javascript-format
msgid "Fetching resources: %d"
msgstr "Recursos: %d."
msgid "Fetching resources: %d/%d"
msgstr "Recursos: %d/%d"
msgid "Please select where the sync status should be exported to"
msgstr "Seleccione onde exportar o estado da sincronización"
@@ -1303,6 +1334,10 @@ msgstr "En proceso"
msgid "Synchronisation is already in progress. State: %s"
msgstr "A sincronización xa está en proceso. Estado: %s"
msgid ""
"Unknown item type downloaded - please upgrade Joplin to the latest version"
msgstr ""
msgid "Encrypted"
msgstr "Cifrado"
@@ -1520,6 +1555,24 @@ msgstr ""
"Destino co que sincronizar. Cada destino da sincronización pode ter "
"parámetros adicionais que se chaman «sync.NUM.NAME» (documentados arriba)."
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 "Directory to synchronise with (absolute path)"
msgstr "Cartafol a sincronizar con (ruta absoluta)"
@@ -1554,6 +1607,20 @@ msgstr ""
msgid "Ignore TLS certificate errors"
msgstr ""
#, fuzzy
msgid "Enable note history"
msgstr "Activar cifrado"
msgid "days"
msgstr ""
#, javascript-format
msgid "%d days"
msgstr ""
msgid "Keep note history for"
msgstr ""
#, javascript-format
msgid "Invalid option value: \"%s\". Possible values are: %s."
msgstr "Valor incorrecto de opción: «%s». Os valores posíbeis son: %s."
@@ -1628,12 +1695,19 @@ msgstr "Non hai datos para exportar."
msgid "Please specify the notebook where the notes should be imported to."
msgstr "Indique o caderno ao que importar as notas."
msgid "Restored Notes"
msgstr ""
msgid "Items that cannot be synchronised"
msgstr "Elementos que non se poden sincronizar"
#, javascript-format
msgid "%s (%s): %s"
msgstr "%s (%s): %s"
#, 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 "
@@ -1905,9 +1979,11 @@ msgstr "Non ten cadernos actualmente. Cree un premendo no botón (+)."
msgid "Welcome"
msgstr "Benvido/a"
#, fuzzy
#~ msgid "This note has no history"
#~ msgstr "Esta nota foi modificada:"
#~ msgid "Some items cannot be decrypted."
#~ msgstr "Non é posíbel descifrar algúns elementos."
#~ msgid "%s (%s): %s"
#~ msgstr "%s (%s): %s"
#~ msgid ""
#~ "The path to synchronise with when file system synchronisation is enabled. "

View File

@@ -660,6 +660,9 @@ msgstr ""
msgid "Quit"
msgstr "Izađi"
msgid "Close Window"
msgstr ""
#, fuzzy
msgid "&Edit"
msgstr "Uredi"
@@ -727,6 +730,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"
@@ -830,13 +836,13 @@ msgstr ""
msgid "Notes and settings are stored in: %s"
msgstr "Bilješke i postavke su pohranjene u: %s"
msgid "Browse..."
msgstr ""
#, fuzzy
msgid "Check synchronisation configuration"
msgstr "Prekini sinkronizaciju"
msgid "Browse..."
msgstr ""
msgid "Apply"
msgstr ""
@@ -967,9 +973,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 ""
@@ -987,9 +992,33 @@ msgstr ""
msgid "URL"
msgstr ""
#, fuzzy
msgid "Note History"
msgstr "Bilježnice"
msgid "Previous versions of this note"
msgstr ""
msgid "Note properties"
msgstr ""
#, javascript-format
msgid "The note \"%s\" has been successfully restored to the notebook \"%s\"."
msgstr ""
#, fuzzy
msgid "This note has no history"
msgstr "Bilješka je promijenjena:"
msgid "Restore"
msgstr ""
#, javascript-format
msgid ""
"Click \"%s\" to restore the note. It will be copied in the notebook named "
"\"%s\". The current version of the note will not be replaced or modified."
msgstr ""
msgid "Open..."
msgstr ""
@@ -1139,11 +1168,11 @@ msgstr "Bilježnice"
#, fuzzy, javascript-format
msgid "Decrypting items: %d/%d"
msgstr "Stvorene lokalne stavke: %d."
msgstr "Stvorene lokalne stavke: %d/%d"
#, fuzzy, javascript-format
msgid "Fetching resources: %d"
msgstr "Resursi: %d."
msgid "Fetching resources: %d/%d"
msgstr "Resursi: %d/%d"
msgid "Please select where the sync status should be exported to"
msgstr "Odaberi lokaciju za izvoz statusa sinkronizacije"
@@ -1299,6 +1328,10 @@ msgstr ""
msgid "Synchronisation is already in progress. State: %s"
msgstr "Sinkronizacija je već u toku. Stanje: %s"
msgid ""
"Unknown item type downloaded - please upgrade Joplin to the latest version"
msgstr ""
msgid "Encrypted"
msgstr ""
@@ -1516,6 +1549,24 @@ msgid ""
"which are named as `sync.NUM.NAME` (all documented below)."
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 "Directory to synchronise with (absolute path)"
msgstr "Direktorij za sinkroniziranje (apsolutna putanja)"
@@ -1550,6 +1601,20 @@ msgstr ""
msgid "Ignore TLS certificate errors"
msgstr ""
#, fuzzy
msgid "Enable note history"
msgstr "Bilješka je promijenjena:"
msgid "days"
msgstr ""
#, javascript-format
msgid "%d days"
msgstr ""
msgid "Keep note history for"
msgstr ""
#, javascript-format
msgid "Invalid option value: \"%s\". Possible values are: %s."
msgstr "Nevažeća vrijednost: \"%s\". Moguće vrijednosti su: %s."
@@ -1625,12 +1690,19 @@ msgstr ""
msgid "Please specify the notebook where the notes should be imported to."
msgstr "Odaberi lokaciju za izvoz statusa sinkronizacije"
msgid "Restored Notes"
msgstr ""
msgid "Items that cannot be synchronised"
msgstr "Stavke koje se ne mogu sinkronizirati"
#, fuzzy, javascript-format
msgid "%s (%s): %s"
msgstr "%s %s (%s)"
msgid "%s (%s) could not be uploaded: %s"
msgstr "Bilježnicu nije moguće snimiti: %s"
#, fuzzy, javascript-format
msgid "Item \"%s\" could not be downloaded: %s"
msgstr "Bilježnicu nije moguće snimiti: %s"
msgid ""
"These items will remain on the device but will not be uploaded to the sync "
@@ -1902,8 +1974,12 @@ msgid "Welcome"
msgstr "Dobro došli"
#, fuzzy
#~ msgid "This note has no history"
#~ msgstr "Bilješka je promijenjena:"
#~ msgid "Some items cannot be decrypted."
#~ msgstr "Neke stavke se ne mogu sinkronizirati."
#, fuzzy
#~ msgid "%s (%s): %s"
#~ msgstr "%s %s (%s)"
#~ msgid ""
#~ "The path to synchronise with when file system synchronisation is enabled. "

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\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."
@@ -591,18 +591,16 @@ msgid "Exporting to \"%s\" as \"%s\" format. Please wait..."
msgstr "Esportazione da \"%s\" come formato \"%s\". Si prega di attendere..."
msgid "Sidebar"
msgstr ""
msgstr "Barra laterale"
msgid "Note list"
msgstr ""
msgstr "Lista delle note"
#, fuzzy
msgid "Note title"
msgstr "Titolo del Taccuino:"
msgstr "Titolo della nota"
#, fuzzy
msgid "Note body"
msgstr "Taccuini"
msgstr "Corpo della nota"
#, javascript-format
msgid "Importing from \"%s\" as \"%s\" format. Please wait..."
@@ -639,18 +637,17 @@ msgstr "Opzioni Web Clipper"
msgid "%s %s (%s, %s)"
msgstr "%s %s (%s, %s)"
#, fuzzy
msgid "&File"
msgstr "File"
msgstr "&File"
msgid "About Joplin"
msgstr "Informazione su Joplin"
msgid "Preferences..."
msgstr ""
msgstr "Preferenze..."
msgid "Check for updates..."
msgstr "Controlla aggiornamenti ..."
msgstr "Controlla aggiornamenti..."
msgid "Import"
msgstr "Importa"
@@ -668,9 +665,11 @@ msgstr "Nascondi %s"
msgid "Quit"
msgstr "Esci"
#, fuzzy
msgid "Close Window"
msgstr "Chiudi finestra"
msgid "&Edit"
msgstr "Modifica"
msgstr "&Modifica"
msgid "Copy"
msgstr "Copia"
@@ -691,7 +690,7 @@ msgid "Italic"
msgstr "Corsivo"
msgid "Link"
msgstr ""
msgstr "Link"
msgid "Insert Date Time"
msgstr "Inserisci data e ora"
@@ -705,9 +704,8 @@ msgstr "Cerca in tutte le note"
msgid "Search in current note"
msgstr "Cerca nella nota corrente"
#, fuzzy
msgid "&View"
msgstr "Vista"
msgstr "&Vista"
msgid "Toggle sidebar"
msgstr "Attiva / disattiva barra laterale"
@@ -715,17 +713,14 @@ msgstr "Attiva / disattiva barra laterale"
msgid "Toggle editor layout"
msgstr "Attiva / disattiva il layout dell'editor"
#, fuzzy
msgid "Focus"
msgstr "Focus sul testo"
msgstr "Focus"
#, fuzzy
msgid "&Tools"
msgstr "Strumenti"
msgstr "&Strumenti"
#, fuzzy
msgid "&Help"
msgstr "Aiuto"
msgstr "&Aiuto"
msgid "Website and documentation"
msgstr "Sito web e documentazione"
@@ -733,6 +728,9 @@ msgstr "Sito web e documentazione"
msgid "Make a donation"
msgstr "Fai una donazione"
msgid "Toggle development tools"
msgstr ""
#, javascript-format
msgid "Open %s"
msgstr "Aprire %s"
@@ -758,11 +756,11 @@ msgstr "È disponibile un aggiornamento, vuoi scaricarlo ora?"
#, javascript-format
msgid "Your version: %s"
msgstr ""
msgstr "Tua versione: %s"
#, javascript-format
msgid "New version: %s"
msgstr ""
msgstr "Nuova versione: %s"
msgid "Yes"
msgstr "Sì"
@@ -771,7 +769,7 @@ msgid "No"
msgstr "No"
msgid "Token has been copied to the clipboard!"
msgstr ""
msgstr "Il token è stato copiato negli appunti!"
msgid "The web clipper service is enabled and set to auto-start."
msgstr ""
@@ -822,31 +820,32 @@ msgstr "Passaggio 2: installare l'estensione"
msgid "Download and install the relevant extension for your browser:"
msgstr "Scarica e installa l'estensione adatta per il tuo browser:"
#, fuzzy
msgid "Advanced options"
msgstr "Mostra opzioni avanzate"
msgstr "Opzioni avanzate"
msgid "Authorisation token:"
msgstr ""
msgstr "Token autorizzativo:"
msgid "Copy token"
msgstr ""
msgstr "Copia token"
msgid ""
"This authorisation token is only needed to allow third-party applications to "
"access Joplin."
msgstr ""
"Il token autorizzativo è necessario solo per permettere ad applicazioni di "
"terze parti di accedere a Joplin."
#, javascript-format
msgid "Notes and settings are stored in: %s"
msgstr "Le note e le impostazioni sono memorizzate in: %s"
msgid "Browse..."
msgstr ""
msgid "Check synchronisation configuration"
msgstr "Controlla la configurazione della sincronizzazione"
msgid "Browse..."
msgstr "Naviga..."
msgid "Apply"
msgstr "Applica"
@@ -942,9 +941,8 @@ msgstr "Stato"
msgid "Encryption is:"
msgstr "La crittografia è:"
#, fuzzy
msgid "Usage"
msgstr "Uso: %s"
msgstr "Uso"
msgid "Back"
msgstr "Indietro"
@@ -990,8 +988,9 @@ msgstr "Alcuni elementi non possono essere sincronizzati."
msgid "View them now"
msgstr "Mostrali ora"
msgid "Some items cannot be decrypted."
msgstr "Alcuni elementi non possono essere decodificati."
#, fuzzy
msgid "One or more master keys need a password."
msgstr "Inserisci password principale:"
msgid "Set the password"
msgstr "Imposta la password"
@@ -1006,16 +1005,41 @@ msgstr ""
"\"."
msgid "Location"
msgstr ""
msgstr "Posizione"
msgid "URL"
msgstr ""
msgstr "URL"
msgid "Note History"
msgstr "Cronologia nota"
msgid "Previous versions of this note"
msgstr "Versione precedente di questa nota"
msgid "Note properties"
msgstr "Proprietà della nota"
#, javascript-format
msgid "The note \"%s\" has been successfully restored to the notebook \"%s\"."
msgstr "La nota \"%s\" è stata ripristinata con successo nel taccuino \"%s\"."
msgid "This note has no history"
msgstr "Questa nota non ha cronologia"
msgid "Restore"
msgstr "Ripristina"
#, 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 ""
"Clicca \"%s\" per ripristinare la nota. Verrà copiata nel taccuino "
"denominato \"%s\". La versione corrente della nota non verrà sostituita o "
"modificata."
msgid "Open..."
msgstr "Apri ..."
msgstr "Apri..."
#, javascript-format
msgid "This file could not be opened: %s"
@@ -1046,7 +1070,7 @@ msgstr ""
"modificare la nota."
msgid "Only one note can be printed or exported to PDF at a time."
msgstr ""
msgstr "Solo una nota alla volta può essere stampata o esportata come PDF."
msgid "strong text"
msgstr "Testo grasseto"
@@ -1100,12 +1124,11 @@ msgstr "Fare clic per interrompere le modifiche esterne"
msgid "Watching..."
msgstr "Osservare..."
#, fuzzy
msgid "to-do"
msgstr "Nuovo \"Cose-da-fare\""
msgstr "\"Cose-da-fare\""
msgid "note"
msgstr "Nota"
msgstr "nota"
#, javascript-format
msgid "Creating new %s..."
@@ -1135,18 +1158,19 @@ msgstr "Opzioni di crittografia"
msgid "Clipper Options"
msgstr "Opzioni 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 ""
"Eliminare taccuino? Anche tutte le note e cartelle di questo taccuino "
"saranno cancellati."
"Eliminare taccuino \"%s\"?\n"
"\n"
"Anche tutte le note e cartelle di questo taccuino saranno cancellati."
#, fuzzy, javascript-format
#, javascript-format
msgid "Remove tag \"%s\" from all notes?"
msgstr "Rimuovere questa etichetta da tutte le note?"
msgstr "Rimuovere l’etichetta \"%s\" da tutte le note?"
msgid "Remove this search from the sidebar?"
msgstr "Rimuovere questa ricerca dalla barra laterale?"
@@ -1165,8 +1189,8 @@ msgid "Decrypting items: %d/%d"
msgstr "Decrittografia Elementi: %d/%d"
#, fuzzy, javascript-format
msgid "Fetching resources: %d"
msgstr "Risorse: %d."
msgid "Fetching resources: %d/%d"
msgstr "Risorse: %d/%d"
msgid "Please select where the sync status should be exported to"
msgstr ""
@@ -1193,13 +1217,13 @@ msgstr "Converti in \"Cose-da-fare\""
msgid "Copy Markdown link"
msgstr "Copia il link Markdown"
#, fuzzy, javascript-format
#, javascript-format
msgid "Delete note \"%s\"?"
msgstr "Eliminare il taccuino \"%s\"?"
msgstr "Eliminare la nota \"%s\"?"
#, fuzzy, javascript-format
#, javascript-format
msgid "Delete these %d notes?"
msgstr "Cancellare queste note?"
msgstr "Cancellare queste %d note?"
msgid ""
"Type a note title to jump to it. Or type # followed by a tag name, or @ "
@@ -1321,6 +1345,10 @@ msgstr "In corso"
msgid "Synchronisation is already in progress. State: %s"
msgstr "La sincronizzazione è già in corso. Stato: %s"
msgid ""
"Unknown item type downloaded - please upgrade Joplin to the latest version"
msgstr ""
msgid "Encrypted"
msgstr "Crittografato"
@@ -1328,10 +1356,10 @@ msgid "Encrypted items cannot be modified"
msgstr "Gli elementi crittografati non possono essere modificati"
msgid "title"
msgstr "Titolo"
msgstr "titolo"
msgid "updated date"
msgstr "Data di aggiornamento"
msgstr "data di aggiornamento"
msgid "Conflicts"
msgstr "Conflitti"
@@ -1344,7 +1372,7 @@ msgid "Notebooks cannot be named \"%s\", which is a reserved title."
msgstr "I blocchi non possono essere chiamati \"%s\". È un titolo riservato."
msgid "created date"
msgstr "Data di creazione"
msgstr "data di creazione"
msgid "This note does not have geolocation information."
msgstr "Questa nota non ha informazione sulla geolocalizzazione."
@@ -1394,9 +1422,8 @@ msgstr "Ordina le note per"
msgid "Reverse sort order"
msgstr "Inverti l'ordine"
#, fuzzy
msgid "Sort notebooks by"
msgstr "Ordina le note per"
msgstr "Ordina i taccuini per"
msgid "Save geo-location with notes"
msgstr "Salva geolocalizzazione con le note"
@@ -1416,15 +1443,14 @@ msgstr "Quando si crea una nuova nota:"
msgid "Enable soft breaks"
msgstr ""
#, fuzzy
msgid "Enable math expressions"
msgstr "Attiva Crittografia"
msgstr "Attiva espressioni matematiche"
msgid "Enable ==mark== syntax"
msgstr ""
msgid "Enable footnotes"
msgstr ""
msgstr "Attiva note a piè pagina"
msgid "Enable table of contents extension"
msgstr ""
@@ -1534,6 +1560,24 @@ msgstr ""
"Ogni target di sincronizzazione può avere parametri aggiuntivi denominati "
"come `sync.NUM.NAME` (tutti documentati di seguito)."
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 "Sempre"
msgid "Manual"
msgstr "Manuale"
msgid "Auto"
msgstr "Auto"
msgid "Directory to synchronise with (absolute path)"
msgstr "Cartella da sincronizzare con (percorso assoluto)"
@@ -1573,31 +1617,40 @@ msgstr ""
msgid "Ignore TLS certificate errors"
msgstr "Ignora gli errori del certificato TLS"
msgid "Enable note history"
msgstr "Attiva cronologia della nota"
msgid "days"
msgstr "giorni"
#, javascript-format
msgid "%d days"
msgstr "%d giorni"
msgid "Keep note history for"
msgstr ""
#, javascript-format
msgid "Invalid option value: \"%s\". Possible values are: %s."
msgstr "Opzione non valida: \"%s\". I valori possibili sono: %s."
#, fuzzy
msgid "General"
msgstr "Opzioni Generali"
msgstr "Generale"
#, fuzzy
msgid "Synchronisation"
msgstr "Stato di sincronizzazione"
msgstr "Sincronizzazione"
msgid "Appearance"
msgstr ""
msgstr "Apparenza"
#, fuzzy
msgid "Note"
msgstr "Taccuini"
msgstr "Nota"
msgid "Plugins"
msgstr ""
#, fuzzy
msgid "Application"
msgstr "Esci dall'applicazione."
msgstr "Applicazione"
#, javascript-format
msgid "The tag \"%s\" already exists. Please choose a different name."
@@ -1646,12 +1699,19 @@ msgstr "Non ci sono dati da esportare."
msgid "Please specify the notebook where the notes should be imported to."
msgstr "Si prega di specificare il Taccuino in cui importare le note."
msgid "Restored Notes"
msgstr "Ripristina note"
msgid "Items that cannot be synchronised"
msgstr "Elementi che non possono essere sincronizzati"
#, javascript-format
msgid "%s (%s): %s"
msgstr "%s (%s): %s"
msgid "%s (%s) could not be uploaded: %s"
msgstr "%s (%s) non può essere caricato: %s"
#, javascript-format
msgid "Item \"%s\" could not be downloaded: %s"
msgstr "Elemento \"%s\" non può essere scaricato: %s"
msgid ""
"These items will remain on the device but will not be uploaded to the sync "
@@ -1699,7 +1759,7 @@ msgid "Permission to use camera"
msgstr "Permesso di usare la fotocamera"
msgid "Your permission to use your camera is required."
msgstr ""
msgstr "E’ richiesto il permesso di usare la fotocamera."
msgid "There are currently no notes. Create one by clicking on the (+) button."
msgstr "Al momento non ci sono note. Creane una cliccando sul bottone (+)."
@@ -1729,9 +1789,8 @@ msgstr "Spostare le note %d sul Taccuino \"%s\"?"
msgid "Press to set the decryption password."
msgstr "Premere per impostare la password di decrittografia."
#, fuzzy
msgid "Clear alarm"
msgstr "Imposta Allarme"
msgstr "Rimuovi Allarme"
msgid "Save alarm"
msgstr "Salva Allarme"
@@ -1745,22 +1804,20 @@ msgstr "Conferma"
msgid "Cancel synchronisation"
msgstr "Cancella la sincronizzazione"
#, fuzzy
msgid "Checking... Please wait."
msgstr "Cancellazione... Attendere per favore."
msgstr "Controllo... Attendere per favore."
#, fuzzy
msgid "Success! Synchronisation configuration appears to be correct."
msgstr "Controlla la configurazione della sincronizzazione"
msgstr ""
"Successo! La configurazione della sincronizzazione sembra essere corretta."
msgid ""
"Error. Please check that URL, username, password, etc. are correct and that "
"the sync target is accessible. The reported error was:"
msgstr ""
#, fuzzy
msgid "The application has been authorised!"
msgstr "L'applicazione è stata autorizzata con successo."
msgstr "L'applicazione è stata autorizzata con successo!"
#, javascript-format
msgid ""
@@ -1771,9 +1828,9 @@ msgid ""
"Please try again."
msgstr ""
#, fuzzy, javascript-format
#, javascript-format
msgid "Decrypted items: %s / %s"
msgstr "Decrittografia Elementi: %d/%d"
msgstr "Elementi decriptati: %s / %s"
msgid "New tags:"
msgstr "Nuovi tag:"
@@ -1930,9 +1987,11 @@ msgstr ""
msgid "Welcome"
msgstr "Benvenuto"
#, fuzzy
#~ msgid "This note has no history"
#~ msgstr "Questa note è stata modificata:"
#~ msgid "Some items cannot be decrypted."
#~ msgstr "Alcuni elementi non possono essere decodificati."
#~ msgid "%s (%s): %s"
#~ msgstr "%s (%s): %s"
#~ msgid ""
#~ "The path to synchronise with when file system synchronisation is enabled. "

View File

@@ -650,6 +650,9 @@ msgstr "%s を隠す"
msgid "Quit"
msgstr "終了"
msgid "Close Window"
msgstr ""
#, fuzzy
msgid "&Edit"
msgstr "編集"
@@ -715,6 +718,9 @@ msgstr "Webサイトとドキュメント"
msgid "Make a donation"
msgstr "寄付する"
msgid "Toggle development tools"
msgstr ""
#, javascript-format
msgid "Open %s"
msgstr "%s を開く"
@@ -823,12 +829,12 @@ msgstr ""
msgid "Notes and settings are stored in: %s"
msgstr "ノートと設定は次の場所に保存されます: %s"
msgid "Browse..."
msgstr ""
msgid "Check synchronisation configuration"
msgstr "同期の設定を確認する"
msgid "Browse..."
msgstr ""
msgid "Apply"
msgstr "適用"
@@ -970,8 +976,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 "パスワードの設定"
@@ -989,9 +996,33 @@ msgstr "場所"
msgid "URL"
msgstr "URL"
#, fuzzy
msgid "Note History"
msgstr "ノートブック"
msgid "Previous versions of this note"
msgstr ""
msgid "Note properties"
msgstr "ノートのプロパティ"
#, javascript-format
msgid "The note \"%s\" has been successfully restored to the notebook \"%s\"."
msgstr ""
#, fuzzy
msgid "This note has no history"
msgstr "ノートは変更されています:"
msgid "Restore"
msgstr ""
#, javascript-format
msgid ""
"Click \"%s\" to restore the note. It will be copied in the notebook named "
"\"%s\". The current version of the note will not be replaced or modified."
msgstr ""
msgid "Open..."
msgstr "開く..."
@@ -1142,8 +1173,8 @@ msgid "Decrypting items: %d/%d"
msgstr "復号中のアイテム: %d/%d"
#, javascript-format
msgid "Fetching resources: %d"
msgstr "取得中のリソース: %d"
msgid "Fetching resources: %d/%d"
msgstr "取得中のリソース: %d/%d"
msgid "Please select where the sync status should be exported to"
msgstr "同期状況の出力先を選択してください"
@@ -1298,6 +1329,10 @@ msgstr "実行中"
msgid "Synchronisation is already in progress. State: %s"
msgstr "同期作業はすでに実行中です。状態: %s"
msgid ""
"Unknown item type downloaded - please upgrade Joplin to the latest version"
msgstr ""
msgid "Encrypted"
msgstr "暗号化済"
@@ -1513,6 +1548,24 @@ msgstr ""
"同期する先です。いずれの同期先も `sync.NUM.NAME` のように追加のパラメーターを"
"持つことができるでしょう(すべてのドキュメントは下にあります)。"
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 "Directory to synchronise with (absolute path)"
msgstr "同期先のディレクトリ(絶対パス)"
@@ -1551,6 +1604,20 @@ msgstr ""
msgid "Ignore TLS certificate errors"
msgstr "TLS証明書のエラーを無視"
#, fuzzy
msgid "Enable note history"
msgstr "暗号化を有効にする"
msgid "days"
msgstr ""
#, javascript-format
msgid "%d days"
msgstr ""
msgid "Keep note history for"
msgstr ""
#, javascript-format
msgid "Invalid option value: \"%s\". Possible values are: %s."
msgstr "無効な設定値: \"%s\"。有効な値は: %sです。"
@@ -1624,12 +1691,19 @@ msgstr "エクスポートするデータがありません。"
msgid "Please specify the notebook where the notes should be imported to."
msgstr "ノートをどのノートブックにインポートするのか指定してください。"
msgid "Restored Notes"
msgstr ""
msgid "Items that cannot be synchronised"
msgstr "同期ができなかったアイテム"
#, javascript-format
msgid "%s (%s): %s"
msgstr "%s (%s): %s"
#, 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 "
@@ -1908,9 +1982,11 @@ msgstr ""
msgid "Welcome"
msgstr "ようこそ"
#, fuzzy
#~ msgid "This note has no history"
#~ msgstr "ノートは変更されています:"
#~ msgid "Some items cannot be decrypted."
#~ msgstr "いくつかの項目は復号されませんでした。"
#~ msgid "%s (%s): %s"
#~ msgstr "%s (%s): %s"
#~ msgid ""
#~ "The path to synchronise with when file system synchronisation is enabled. "

View File

@@ -583,6 +583,9 @@ msgstr ""
msgid "Quit"
msgstr ""
msgid "Close Window"
msgstr ""
msgid "&Edit"
msgstr ""
@@ -643,6 +646,9 @@ msgstr ""
msgid "Make a donation"
msgstr ""
msgid "Toggle development tools"
msgstr ""
#, javascript-format
msgid "Open %s"
msgstr ""
@@ -744,10 +750,10 @@ msgstr ""
msgid "Notes and settings are stored in: %s"
msgstr ""
msgid "Browse..."
msgid "Check synchronisation configuration"
msgstr ""
msgid "Check synchronisation configuration"
msgid "Browse..."
msgstr ""
msgid "Apply"
@@ -875,7 +881,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"
@@ -894,9 +900,31 @@ msgstr ""
msgid "URL"
msgstr ""
msgid "Note History"
msgstr ""
msgid "Previous versions of this note"
msgstr ""
msgid "Note properties"
msgstr ""
#, javascript-format
msgid "The note \"%s\" has been successfully restored to the notebook \"%s\"."
msgstr ""
msgid "This note has no history"
msgstr ""
msgid "Restore"
msgstr ""
#, javascript-format
msgid ""
"Click \"%s\" to restore the note. It will be copied in the notebook named "
"\"%s\". The current version of the note will not be replaced or modified."
msgstr ""
msgid "Open..."
msgstr ""
@@ -1043,7 +1071,7 @@ msgid "Decrypting items: %d/%d"
msgstr ""
#, javascript-format
msgid "Fetching resources: %d"
msgid "Fetching resources: %d/%d"
msgstr ""
msgid "Please select where the sync status should be exported to"
@@ -1191,6 +1219,10 @@ msgstr ""
msgid "Synchronisation is already in progress. State: %s"
msgstr ""
msgid ""
"Unknown item type downloaded - please upgrade Joplin to the latest version"
msgstr ""
msgid "Encrypted"
msgstr ""
@@ -1391,6 +1423,24 @@ msgid ""
"which are named as `sync.NUM.NAME` (all documented below)."
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 "Directory to synchronise with (absolute path)"
msgstr ""
@@ -1425,6 +1475,19 @@ msgstr ""
msgid "Ignore TLS certificate errors"
msgstr ""
msgid "Enable note history"
msgstr ""
msgid "days"
msgstr ""
#, javascript-format
msgid "%d days"
msgstr ""
msgid "Keep note history for"
msgstr ""
#, javascript-format
msgid "Invalid option value: \"%s\". Possible values are: %s."
msgstr ""
@@ -1492,11 +1555,18 @@ msgstr ""
msgid "Please specify the notebook where the notes should be imported to."
msgstr ""
msgid "Restored Notes"
msgstr ""
msgid "Items that cannot be synchronised"
msgstr ""
#, javascript-format
msgid "%s (%s): %s"
msgid "%s (%s) could not be uploaded: %s"
msgstr ""
#, javascript-format
msgid "Item \"%s\" could not be downloaded: %s"
msgstr ""
msgid ""

View File

@@ -647,6 +647,9 @@ msgstr "%s 숨기기"
msgid "Quit"
msgstr "종료"
msgid "Close Window"
msgstr ""
#, fuzzy
msgid "&Edit"
msgstr "편집"
@@ -712,6 +715,9 @@ msgstr "웹사이트 및 각종 문서"
msgid "Make a donation"
msgstr "기부하기"
msgid "Toggle development tools"
msgstr ""
#, javascript-format
msgid "Open %s"
msgstr "%s 열기"
@@ -819,12 +825,12 @@ msgstr ""
msgid "Notes and settings are stored in: %s"
msgstr "노트와 설정값이 다음에 저장되었습니다: %s"
msgid "Browse..."
msgstr ""
msgid "Check synchronisation configuration"
msgstr "동기화 설정 확인"
msgid "Browse..."
msgstr ""
msgid "Apply"
msgstr "적용"
@@ -964,8 +970,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 "암호 설정"
@@ -983,9 +990,33 @@ msgstr "위치"
msgid "URL"
msgstr "URL"
#, fuzzy
msgid "Note History"
msgstr "노트북"
msgid "Previous versions of this note"
msgstr ""
msgid "Note properties"
msgstr "노트 속성"
#, javascript-format
msgid "The note \"%s\" has been successfully restored to the notebook \"%s\"."
msgstr ""
#, fuzzy
msgid "This note has no history"
msgstr "노트가 변경되었습니다:"
msgid "Restore"
msgstr ""
#, javascript-format
msgid ""
"Click \"%s\" to restore the note. It will be copied in the notebook named "
"\"%s\". The current version of the note will not be replaced or modified."
msgstr ""
msgid "Open..."
msgstr "열기..."
@@ -1136,8 +1167,8 @@ msgid "Decrypting items: %d/%d"
msgstr "복호화 항목: %d/%d"
#, javascript-format
msgid "Fetching resources: %d"
msgstr "리소스 가져오는 중: %d."
msgid "Fetching resources: %d/%d"
msgstr "리소스 가져오는 중: %d/%d"
msgid "Please select where the sync status should be exported to"
msgstr "동기화 상태를 내보낼 대상을 선택하세요"
@@ -1292,6 +1323,10 @@ msgstr "진행 중"
msgid "Synchronisation is already in progress. State: %s"
msgstr "동기화가 이미 진행되고 있습니다. 상태: %s"
msgid ""
"Unknown item type downloaded - please upgrade Joplin to the latest version"
msgstr ""
msgid "Encrypted"
msgstr "암호화됨"
@@ -1505,6 +1540,24 @@ msgstr ""
"동기화를 할 대상을 선택합니다. 각각의 동기화 대상은 `sync.NUM.NAME` 형식으로 "
"된 추가적인 매개 변수를 포함할 수 있습니다(아래에 문서화되어 있습니다)."
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 "Directory to synchronise with (absolute path)"
msgstr "동기화를 할 폴더 (절대적 경로)"
@@ -1543,6 +1596,20 @@ msgstr ""
msgid "Ignore TLS certificate errors"
msgstr "TLS 인증서 오류 무시"
#, fuzzy
msgid "Enable note history"
msgstr "암호화 사용"
msgid "days"
msgstr ""
#, javascript-format
msgid "%d days"
msgstr ""
msgid "Keep note history for"
msgstr ""
#, javascript-format
msgid "Invalid option value: \"%s\". Possible values are: %s."
msgstr "올바르지 않은 옵션 값: \"%s\". 가능한 값은 다음과 같습니다: \"%s\"."
@@ -1616,12 +1683,19 @@ msgstr "내보낼 데이터가 없습니다."
msgid "Please specify the notebook where the notes should be imported to."
msgstr "노트를 가져와서 저장할 노트북을 지정하세요."
msgid "Restored Notes"
msgstr ""
msgid "Items that cannot be synchronised"
msgstr "동기화를 할 수 없는 항목"
#, javascript-format
msgid "%s (%s): %s"
msgstr "%s (%s): %s"
#, 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 "
@@ -1897,9 +1971,11 @@ msgstr "노트북이 없습니다. (+) 버튼을 눌러 새로 만드세요."
msgid "Welcome"
msgstr "환영합니다"
#, fuzzy
#~ msgid "This note has no history"
#~ msgstr "노트가 변경되었습니다:"
#~ msgid "Some items cannot be decrypted."
#~ msgstr "일부 항목들은 암호화할 수 없습니다."
#~ msgid "%s (%s): %s"
#~ msgstr "%s (%s): %s"
#~ msgid ""
#~ "The path to synchronise with when file system synchronisation is enabled. "

View File

@@ -650,6 +650,9 @@ msgstr "Skjul %s"
msgid "Quit"
msgstr "Avslutt"
msgid "Close Window"
msgstr ""
msgid "&Edit"
msgstr "&Rediger"
@@ -710,6 +713,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"
@@ -818,12 +824,12 @@ msgstr ""
msgid "Notes and settings are stored in: %s"
msgstr "Notater og innstillinger er lagret i: %s"
msgid "Browse..."
msgstr "Utforsk..."
msgid "Check synchronisation configuration"
msgstr "Sjekk synkroniseringskonfigurasjon"
msgid "Browse..."
msgstr "Utforsk..."
msgid "Apply"
msgstr "Bruk"
@@ -967,8 +973,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"
@@ -987,9 +994,33 @@ msgstr "Lokasjon"
msgid "URL"
msgstr "URL"
#, fuzzy
msgid "Note History"
msgstr "Notatliste"
msgid "Previous versions of this note"
msgstr ""
msgid "Note properties"
msgstr "Notategenskaper"
#, javascript-format
msgid "The note \"%s\" has been successfully restored to the notebook \"%s\"."
msgstr ""
#, fuzzy
msgid "This note has no history"
msgstr "Dette notatet har blitt endret:"
msgid "Restore"
msgstr ""
#, javascript-format
msgid ""
"Click \"%s\" to restore the note. It will be copied in the notebook named "
"\"%s\". The current version of the note will not be replaced or modified."
msgstr ""
msgid "Open..."
msgstr "Åpne..."
@@ -1141,7 +1172,7 @@ msgid "Decrypting items: %d/%d"
msgstr "Dekrypterer elementer: %d/%d"
#, javascript-format
msgid "Fetching resources: %d"
msgid "Fetching resources: %d/%d"
msgstr "Henter ressurser: %d"
msgid "Please select where the sync status should be exported to"
@@ -1297,6 +1328,10 @@ msgstr "Pågår"
msgid "Synchronisation is already in progress. State: %s"
msgstr "Synkronisering pågår allerede. Status: %s"
msgid ""
"Unknown item type downloaded - please upgrade Joplin to the latest version"
msgstr ""
msgid "Encrypted"
msgstr "Kryptert"
@@ -1514,6 +1549,24 @@ msgstr ""
"Målet å synkronisere til. Hvert synkroniseringsmål kan ha tilleggsparametere "
"som er navngitt som `sync.NUM.NAME` (dokumentert nedenfor)."
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 "Directory to synchronise with (absolute path)"
msgstr "Katalog å synkronisere med (absolutt sti)"
@@ -1552,6 +1605,20 @@ msgstr ""
msgid "Ignore TLS certificate errors"
msgstr "Ignorer TLS-sertifikatfeil"
#, fuzzy
msgid "Enable note history"
msgstr "Liste over innhold"
msgid "days"
msgstr ""
#, javascript-format
msgid "%d days"
msgstr ""
msgid "Keep note history for"
msgstr ""
#, javascript-format
msgid "Invalid option value: \"%s\". Possible values are: %s."
msgstr "Ugyldig verdi: \"%s\". Mulige verdier er: %s."
@@ -1621,12 +1688,19 @@ msgstr "Det er ingen data for eksportering."
msgid "Please specify the notebook where the notes should be imported to."
msgstr "Velg notatbok som notatene skal importeres til."
msgid "Restored Notes"
msgstr ""
msgid "Items that cannot be synchronised"
msgstr "Elementer som ikke vil synkronisere"
#, javascript-format
msgid "%s (%s): %s"
msgstr "%s (%s): %s"
#, 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 "
@@ -1902,9 +1976,11 @@ msgstr "Du har enda ingen notatbok. Opprett en ved å klikke på (+)-knappen."
msgid "Welcome"
msgstr "Velkommen"
#, fuzzy
#~ msgid "This note has no history"
#~ msgstr "Dette notatet har blitt endret:"
#~ msgid "Some items cannot be decrypted."
#~ msgstr "Noen elementer kan ikke dekrypteres."
#~ msgid "%s (%s): %s"
#~ msgstr "%s (%s): %s"
#~ msgid "Table of contents"
#~ msgstr "Liste over innhold"

View File

@@ -665,6 +665,9 @@ msgstr ""
msgid "Quit"
msgstr "Stop"
msgid "Close Window"
msgstr ""
#, fuzzy
msgid "&Edit"
msgstr "Bewerk"
@@ -731,6 +734,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"
@@ -834,13 +840,13 @@ msgstr ""
msgid "Notes and settings are stored in: %s"
msgstr "Notities en instellingen zijn opgeslaan in %s"
msgid "Browse..."
msgstr ""
#, fuzzy
msgid "Check synchronisation configuration"
msgstr "Annuleer synchronisatie"
msgid "Browse..."
msgstr ""
msgid "Apply"
msgstr ""
@@ -983,8 +989,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"
@@ -1004,9 +1011,33 @@ msgstr ""
msgid "URL"
msgstr ""
#, fuzzy
msgid "Note History"
msgstr "Notitieboeken"
msgid "Previous versions of this note"
msgstr ""
msgid "Note properties"
msgstr ""
#, javascript-format
msgid "The note \"%s\" has been successfully restored to the notebook \"%s\"."
msgstr ""
#, fuzzy
msgid "This note has no history"
msgstr "Deze notitie werd aangepast:"
msgid "Restore"
msgstr ""
#, javascript-format
msgid ""
"Click \"%s\" to restore the note. It will be copied in the notebook named "
"\"%s\". The current version of the note will not be replaced or modified."
msgstr ""
msgid "Open..."
msgstr ""
@@ -1157,11 +1188,11 @@ msgstr "Notitieboeken"
#, fuzzy, javascript-format
msgid "Decrypting items: %d/%d"
msgstr "Opgehaalde items: %d/%d."
msgstr "Opgehaalde items: %d/%d"
#, fuzzy, javascript-format
msgid "Fetching resources: %d"
msgstr "Middelen: %d."
msgid "Fetching resources: %d/%d"
msgstr "Middelen: %d/%d"
msgid "Please select where the sync status should be exported to"
msgstr "Selecteer waar de synchronisatie status naar geëxporteerd moet worden"
@@ -1320,6 +1351,10 @@ msgstr ""
msgid "Synchronisation is already in progress. State: %s"
msgstr "Synchronisatie is reeds bezig. Status: %s"
msgid ""
"Unknown item type downloaded - please upgrade Joplin to the latest version"
msgstr ""
msgid "Encrypted"
msgstr "Versleuteld"
@@ -1539,6 +1574,24 @@ msgid ""
"which are named as `sync.NUM.NAME` (all documented below)."
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 "Directory to synchronise with (absolute path)"
msgstr "Folder om mee te synchroniseren (absolute pad)"
@@ -1575,6 +1628,20 @@ msgstr ""
msgid "Ignore TLS certificate errors"
msgstr ""
#, fuzzy
msgid "Enable note history"
msgstr "Schakel encryptie in"
msgid "days"
msgstr ""
#, javascript-format
msgid "%d days"
msgstr ""
msgid "Keep note history for"
msgstr ""
#, javascript-format
msgid "Invalid option value: \"%s\". Possible values are: %s."
msgstr "Ongeldige optie: \"%s\". Geldige waarden zijn: %s."
@@ -1650,12 +1717,19 @@ msgstr ""
msgid "Please specify the notebook where the notes should be imported to."
msgstr "Selecteer waar de synchronisatie status naar geëxporteerd moet worden"
msgid "Restored Notes"
msgstr ""
msgid "Items that cannot be synchronised"
msgstr "Items die niet gesynchroniseerd kunnen worden"
#, javascript-format
msgid "%s (%s): %s"
msgstr "%s (%s): %s"
#, 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 "
@@ -1931,9 +2005,11 @@ msgstr ""
msgid "Welcome"
msgstr "Welkom"
#, fuzzy
#~ msgid "This note has no history"
#~ msgstr "Deze notitie werd aangepast:"
#~ msgid "Some items cannot be decrypted."
#~ msgstr "Sommige items kunnen niet gedecodeerd worden."
#~ msgid "%s (%s): %s"
#~ msgstr "%s (%s): %s"
#~ msgid ""
#~ "The path to synchronise with when file system synchronisation is enabled. "

View File

@@ -664,6 +664,9 @@ msgstr "%s verbergen"
msgid "Quit"
msgstr "Afsluiten"
msgid "Close Window"
msgstr ""
#, fuzzy
msgid "&Edit"
msgstr "Bewerken"
@@ -731,6 +734,9 @@ msgstr "Website en documentatie"
msgid "Make a donation"
msgstr "Doneren"
msgid "Toggle development tools"
msgstr ""
#, javascript-format
msgid "Open %s"
msgstr "%s openen"
@@ -839,12 +845,12 @@ msgstr ""
msgid "Notes and settings are stored in: %s"
msgstr "Notities en instellingen worden opgeslagen in: %s"
msgid "Browse..."
msgstr ""
msgid "Check synchronisation configuration"
msgstr "Synchronisatieconfiguratie controleren"
msgid "Browse..."
msgstr ""
msgid "Apply"
msgstr "Toepassen"
@@ -989,8 +995,9 @@ msgstr "Sommige items kunnen niet worden gesynchroniseerd."
msgid "View them now"
msgstr "Items tonen"
msgid "Some items cannot be decrypted."
msgstr "Sommige items kunnen niet worden ontsleuteled."
#, fuzzy
msgid "One or more master keys need a password."
msgstr "Voer het hoofdwachtwoord in:"
msgid "Set the password"
msgstr "Wachtwoord instellen"
@@ -1012,9 +1019,33 @@ msgstr ""
msgid "URL"
msgstr ""
#, fuzzy
msgid "Note History"
msgstr "Notitieboeken"
msgid "Previous versions of this note"
msgstr ""
msgid "Note properties"
msgstr ""
#, javascript-format
msgid "The note \"%s\" has been successfully restored to the notebook \"%s\"."
msgstr ""
#, fuzzy
msgid "This note has no history"
msgstr "Deze notitie is bewerkt:"
msgid "Restore"
msgstr ""
#, javascript-format
msgid ""
"Click \"%s\" to restore the note. It will be copied in the notebook named "
"\"%s\". The current version of the note will not be replaced or modified."
msgstr ""
msgid "Open..."
msgstr "Openen..."
@@ -1165,8 +1196,8 @@ msgid "Decrypting items: %d/%d"
msgstr "Bezig met ontsleutelen van items: %d/%d"
#, fuzzy, javascript-format
msgid "Fetching resources: %d"
msgstr "Bronnen: %d."
msgid "Fetching resources: %d/%d"
msgstr "Bronnen: %d/%d"
msgid "Please select where the sync status should be exported to"
msgstr "Kies waar de synchronisatiestatus naar moet worden geëxporteerd"
@@ -1323,6 +1354,10 @@ msgstr "Bezig"
msgid "Synchronisation is already in progress. State: %s"
msgstr "De synchronisatie loopt al. Status: %s"
msgid ""
"Unknown item type downloaded - please upgrade Joplin to the latest version"
msgstr ""
msgid "Encrypted"
msgstr "Versleuteld"
@@ -1535,6 +1570,24 @@ msgstr ""
"argumenten bevatten, welke `sync.NUM.NAME` worden genoemd (wordt hieronder "
"uitgelegd)."
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 "Directory to synchronise with (absolute path)"
msgstr "Map waarnaar gesynchroniseerd moet worden (absoluut pad)"
@@ -1574,6 +1627,20 @@ msgstr ""
msgid "Ignore TLS certificate errors"
msgstr "TLS-certificaatfouten negeren"
#, fuzzy
msgid "Enable note history"
msgstr "Versleuteling inschakelen"
msgid "days"
msgstr ""
#, javascript-format
msgid "%d days"
msgstr ""
msgid "Keep note history for"
msgstr ""
#, javascript-format
msgid "Invalid option value: \"%s\". Possible values are: %s."
msgstr "Ongeldige optie: \"%s\". Geldige waarden zijn: %s."
@@ -1649,12 +1716,19 @@ msgid "Please specify the notebook where the notes should be imported to."
msgstr ""
"Geef het notitieboek op waar de notities naar moeten worden geïmporteerd."
msgid "Restored Notes"
msgstr ""
msgid "Items that cannot be synchronised"
msgstr "Items die niet kunnen worden gesynchroniseerd"
#, javascript-format
msgid "%s (%s): %s"
msgstr "%s (%s): %s"
#, fuzzy, javascript-format
msgid "%s (%s) could not be uploaded: %s"
msgstr "Dit bestand kan niet worden geopend: %s"
#, fuzzy, javascript-format
msgid "Item \"%s\" could not be downloaded: %s"
msgstr "Dit bestand kan niet worden geopend: %s"
msgid ""
"These items will remain on the device but will not be uploaded to the sync "
@@ -1934,9 +2008,11 @@ msgstr ""
msgid "Welcome"
msgstr "Welkom"
#, fuzzy
#~ msgid "This note has no history"
#~ msgstr "Deze notitie is bewerkt:"
#~ msgid "Some items cannot be decrypted."
#~ msgstr "Sommige items kunnen niet worden ontsleuteled."
#~ msgid "%s (%s): %s"
#~ msgstr "%s (%s): %s"
#~ msgid ""
#~ "The path to synchronise with when file system synchronisation is enabled. "

2011
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:"
@@ -584,18 +583,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..."
@@ -632,15 +629,14 @@ msgstr "Opções do Web clipper"
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..."
@@ -661,9 +657,11 @@ msgstr "Ocultar %s"
msgid "Quit"
msgstr "Sair"
#, fuzzy
msgid "Close Window"
msgstr "Fechar Janela"
msgid "&Edit"
msgstr "Editar"
msgstr "&Editar"
msgid "Copy"
msgstr "Copiar"
@@ -684,7 +682,7 @@ msgid "Italic"
msgstr "Itálico"
msgid "Link"
msgstr ""
msgstr "Link"
msgid "Insert Date Time"
msgstr "Inserir Data e Hora"
@@ -698,9 +696,8 @@ 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"
@@ -708,17 +705,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"
@@ -726,6 +720,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"
@@ -744,18 +741,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"
@@ -835,12 +832,12 @@ msgstr ""
msgid "Notes and settings are stored in: %s"
msgstr "Notas e configurações estão armazenadas em: %s"
msgid "Browse..."
msgstr ""
msgid "Check synchronisation configuration"
msgstr "Verificar a configuração da sincronização"
msgid "Browse..."
msgstr "Navegar..."
msgid "Apply"
msgstr "Aplicar"
@@ -934,9 +931,8 @@ msgstr "Status"
msgid "Encryption is:"
msgstr "Encriptação está:"
#, fuzzy
msgid "Usage"
msgstr "Uso: %s"
msgstr "Uso"
msgid "Back"
msgstr "Voltar"
@@ -983,8 +979,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"
@@ -1002,9 +999,33 @@ msgstr "Localização"
msgid "URL"
msgstr "URL"
msgid "Note History"
msgstr "Histórico da Nota"
msgid "Previous versions of this note"
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 "A nota \"%s\" foi restaurada com sucesso no caderno \"%s\"."
msgid "This note has no history"
msgstr "Esta nota não tem histórico"
msgid "Restore"
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..."
@@ -1037,7 +1058,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"
@@ -1125,18 +1146,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?"
@@ -1154,8 +1176,8 @@ msgstr "Cadernos"
msgid "Decrypting items: %d/%d"
msgstr "Decriptando itens: %d/%d"
#, javascript-format
msgid "Fetching resources: %d"
#, fuzzy, javascript-format
msgid "Fetching resources: %d/%d"
msgstr "Buscando recursos: %d"
msgid "Please select where the sync status should be exported to"
@@ -1185,21 +1207,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"
@@ -1313,6 +1337,12 @@ msgstr "Em andamento"
msgid "Synchronisation is already in progress. State: %s"
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"
@@ -1390,7 +1420,6 @@ msgstr "Ordenar notas por"
msgid "Reverse sort order"
msgstr "Inverter ordem de classificação"
#, fuzzy
msgid "Sort notebooks by"
msgstr "Ordenar notas por"
@@ -1410,41 +1439,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"
@@ -1484,11 +1512,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"
@@ -1529,6 +1557,24 @@ 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 "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 "Directory to synchronise with (absolute path)"
msgstr "Diretório para sincronizar (caminho absoluto)"
@@ -1568,31 +1614,40 @@ msgstr ""
msgid "Ignore TLS certificate errors"
msgstr "Ignorar erros de certificados TLS"
msgid "Enable note history"
msgstr "Habilitar histórico de notas"
msgid "days"
msgstr "dias"
#, javascript-format
msgid "%d days"
msgstr "%d dias"
msgid "Keep note history for"
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."
@@ -1642,12 +1697,19 @@ msgid "Please specify the notebook where the notes should be imported to."
msgstr ""
"Por favor, especifique o caderno para onde as notas deveriam ser importadas."
msgid "Restored Notes"
msgstr "Notas restauradas"
msgid "Items that cannot be synchronised"
msgstr "Os itens não podem ser sincronizados"
#, javascript-format
msgid "%s (%s): %s"
msgstr "%s (%s): %s"
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"
msgid ""
"These items will remain on the device but will not be uploaded to the sync "
@@ -1809,18 +1871,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"
@@ -1928,9 +1989,11 @@ msgstr "Você não possui cadernos. Crie um clicando no botão (+)."
msgid "Welcome"
msgstr "Bem-vindo"
#, fuzzy
#~ msgid "This note has no history"
#~ msgstr "Esta nota foi modificada:"
#~ msgid "Some items cannot be decrypted."
#~ msgstr "Alguns itens não podem ser decriptados."
#~ msgid "%s (%s): %s"
#~ msgstr "%s (%s): %s"
#~ msgid ""
#~ "The path to synchronise with when file system synchronisation is enabled. "

View File

@@ -599,6 +599,9 @@ msgstr "Ascundeți %s"
msgid "Quit"
msgstr "Ieșiți"
msgid "Close Window"
msgstr ""
#, fuzzy
msgid "&Edit"
msgstr "Editați"
@@ -665,6 +668,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"
@@ -767,10 +773,10 @@ msgstr ""
msgid "Notes and settings are stored in: %s"
msgstr ""
msgid "Browse..."
msgid "Check synchronisation configuration"
msgstr ""
msgid "Check synchronisation configuration"
msgid "Browse..."
msgstr ""
msgid "Apply"
@@ -899,8 +905,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"
@@ -918,9 +924,33 @@ msgstr ""
msgid "URL"
msgstr ""
#, fuzzy
msgid "Note History"
msgstr "Caiete de notițe"
msgid "Previous versions of this note"
msgstr ""
msgid "Note properties"
msgstr ""
#, javascript-format
msgid "The note \"%s\" has been successfully restored to the notebook \"%s\"."
msgstr ""
#, fuzzy
msgid "This note has no history"
msgstr "Această notiță a fost modificată:"
msgid "Restore"
msgstr ""
#, javascript-format
msgid ""
"Click \"%s\" to restore the note. It will be copied in the notebook named "
"\"%s\". The current version of the note will not be replaced or modified."
msgstr ""
msgid "Open..."
msgstr "Deschideți..."
@@ -1067,8 +1097,8 @@ msgid "Decrypting items: %d/%d"
msgstr "Se decriptează itemi: %d/%d"
#, fuzzy, javascript-format
msgid "Fetching resources: %d"
msgstr "Resurse: %d."
msgid "Fetching resources: %d/%d"
msgstr "Resurse: %d/%d"
msgid "Please select where the sync status should be exported to"
msgstr ""
@@ -1218,6 +1248,10 @@ msgstr "În progres"
msgid "Synchronisation is already in progress. State: %s"
msgstr ""
msgid ""
"Unknown item type downloaded - please upgrade Joplin to the latest version"
msgstr ""
msgid "Encrypted"
msgstr "Criptat"
@@ -1421,6 +1455,24 @@ msgid ""
"which are named as `sync.NUM.NAME` (all documented below)."
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 "Directory to synchronise with (absolute path)"
msgstr ""
@@ -1455,6 +1507,20 @@ msgstr ""
msgid "Ignore TLS certificate errors"
msgstr "Ignoră erorile de certificat TLS"
#, fuzzy
msgid "Enable note history"
msgstr "Activați criptarea"
msgid "days"
msgstr ""
#, javascript-format
msgid "%d days"
msgstr ""
msgid "Keep note history for"
msgstr ""
#, javascript-format
msgid "Invalid option value: \"%s\". Possible values are: %s."
msgstr ""
@@ -1526,12 +1592,19 @@ msgstr "Nu există date de exportat."
msgid "Please specify the notebook where the notes should be imported to."
msgstr ""
msgid "Restored Notes"
msgstr ""
msgid "Items that cannot be synchronised"
msgstr "Itemii nu pot fi sincronizați"
#, javascript-format
msgid "%s (%s): %s"
msgstr "%s (%s): %s"
#, fuzzy, javascript-format
msgid "%s (%s) could not be uploaded: %s"
msgstr "Acest fișier nu a putut fi deschis: %s"
#, fuzzy, javascript-format
msgid "Item \"%s\" could not be downloaded: %s"
msgstr "Acest fișier nu a putut fi deschis: %s"
msgid ""
"These items will remain on the device but will not be uploaded to the sync "
@@ -1797,9 +1870,11 @@ msgstr ""
msgid "Welcome"
msgstr "Bine ați venit"
#, fuzzy
#~ msgid "This note has no history"
#~ msgstr "Această notiță a fost modificată:"
#~ msgid "Some items cannot be decrypted."
#~ msgstr "Câțiva itemi nu pot fi descriptați."
#~ msgid "%s (%s): %s"
#~ msgstr "%s (%s): %s"
#, fuzzy
#~ msgid "Joplin v%s"

View File

@@ -663,6 +663,9 @@ msgstr "Скрыть %s"
msgid "Quit"
msgstr "Выход"
msgid "Close Window"
msgstr ""
msgid "&Edit"
msgstr "&Правка"
@@ -723,6 +726,9 @@ msgstr "Сайт и документация"
msgid "Make a donation"
msgstr "Сделать пожертвование"
msgid "Toggle development tools"
msgstr ""
#, javascript-format
msgid "Open %s"
msgstr "Открыть %s"
@@ -831,12 +837,12 @@ msgstr ""
msgid "Notes and settings are stored in: %s"
msgstr "Заметки и настройки сохранены в: %s"
msgid "Browse..."
msgstr "Обзор..."
msgid "Check synchronisation configuration"
msgstr "Проверить настройки синхронизации"
msgid "Browse..."
msgstr "Обзор..."
msgid "Apply"
msgstr "Применить"
@@ -980,8 +986,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 "Установить пароль"
@@ -999,9 +1006,33 @@ msgstr "Местоположение"
msgid "URL"
msgstr "URL"
#, fuzzy
msgid "Note History"
msgstr "Список заметок"
msgid "Previous versions of this note"
msgstr ""
msgid "Note properties"
msgstr "Свойства заметки"
#, javascript-format
msgid "The note \"%s\" has been successfully restored to the notebook \"%s\"."
msgstr ""
#, fuzzy
msgid "This note has no history"
msgstr "Эта заметка была изменена:"
msgid "Restore"
msgstr ""
#, javascript-format
msgid ""
"Click \"%s\" to restore the note. It will be copied in the notebook named "
"\"%s\". The current version of the note will not be replaced or modified."
msgstr ""
msgid "Open..."
msgstr "Открыть..."
@@ -1153,8 +1184,8 @@ msgid "Decrypting items: %d/%d"
msgstr "Расшифровано элементов: %d/%d"
#, javascript-format
msgid "Fetching resources: %d"
msgstr "Получение ресурсов: %d"
msgid "Fetching resources: %d/%d"
msgstr "Получение ресурсов: %d/%d"
msgid "Please select where the sync status should be exported to"
msgstr ""
@@ -1310,6 +1341,10 @@ msgstr "Выполнение"
msgid "Synchronisation is already in progress. State: %s"
msgstr "Синхронизация уже выполняется. Состояние: %s"
msgid ""
"Unknown item type downloaded - please upgrade Joplin to the latest version"
msgstr ""
msgid "Encrypted"
msgstr "Зашифровано"
@@ -1527,6 +1562,24 @@ msgstr ""
"Цель синхронизации. Каждая цель синхронизации может иметь дополнительные "
"параметры, именованные как `sync.NUM.NAME` (все документировано ниже)."
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 "Directory to synchronise with (absolute path)"
msgstr "Каталог синхронизации (абсолютный путь)"
@@ -1566,6 +1619,20 @@ msgstr ""
msgid "Ignore TLS certificate errors"
msgstr "Игнорировать ошибки сертификата TLS"
#, fuzzy
msgid "Enable note history"
msgstr "Включить шифрование"
msgid "days"
msgstr ""
#, javascript-format
msgid "%d days"
msgstr ""
msgid "Keep note history for"
msgstr ""
#, javascript-format
msgid "Invalid option value: \"%s\". Possible values are: %s."
msgstr "Неверное значение параметра: \"%s\". Доступные значения: %s."
@@ -1636,12 +1703,19 @@ msgid "Please specify the notebook where the notes should be imported to."
msgstr ""
"Пожалуйста, укажите блокнот, в который должны быть импортированы заметки."
msgid "Restored Notes"
msgstr ""
msgid "Items that cannot be synchronised"
msgstr "Элементы, которые не могут быть синхронизированы"
#, javascript-format
msgid "%s (%s): %s"
msgstr "%s (%s): %s"
#, 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 "
@@ -1921,9 +1995,11 @@ msgstr "У вас сейчас нет блокнота. Создайте его
msgid "Welcome"
msgstr "Добро пожаловать"
#, fuzzy
#~ msgid "This note has no history"
#~ msgstr "Эта заметка была изменена:"
#~ msgid "Some items cannot be decrypted."
#~ msgstr "Некоторые элементы не могут быть расшифрованы."
#~ msgid "%s (%s): %s"
#~ msgstr "%s (%s): %s"
#~ msgid ""
#~ "The path to synchronise with when file system synchronisation is enabled. "

View File

@@ -661,6 +661,9 @@ msgstr "Skrij %s"
msgid "Quit"
msgstr "Izhod"
msgid "Close Window"
msgstr ""
#, fuzzy
msgid "&Edit"
msgstr "Uredi"
@@ -728,6 +731,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"
@@ -830,12 +836,12 @@ msgstr ""
msgid "Notes and settings are stored in: %s"
msgstr "Zabeležke in nastavitve so shranjene v: %s"
msgid "Browse..."
msgstr ""
msgid "Check synchronisation configuration"
msgstr "Preveri nastavitve sinhronizacije"
msgid "Browse..."
msgstr ""
msgid "Apply"
msgstr ""
@@ -980,8 +986,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"
@@ -1003,9 +1010,33 @@ msgstr ""
msgid "URL"
msgstr ""
#, fuzzy
msgid "Note History"
msgstr "Beležnice"
msgid "Previous versions of this note"
msgstr ""
msgid "Note properties"
msgstr ""
#, javascript-format
msgid "The note \"%s\" has been successfully restored to the notebook \"%s\"."
msgstr ""
#, fuzzy
msgid "This note has no history"
msgstr "Ta zabeležka je bila spremenjena:"
msgid "Restore"
msgstr ""
#, javascript-format
msgid ""
"Click \"%s\" to restore the note. It will be copied in the notebook named "
"\"%s\". The current version of the note will not be replaced or modified."
msgstr ""
msgid "Open..."
msgstr "Odpri..."
@@ -1155,11 +1186,11 @@ msgstr "Beležnice"
#, fuzzy, javascript-format
msgid "Decrypting items: %d/%d"
msgstr "Preneseni predmeti: %d/%d."
msgstr "Preneseni predmeti: %d/%d"
#, fuzzy, javascript-format
msgid "Fetching resources: %d"
msgstr "Viri: %d."
msgid "Fetching resources: %d/%d"
msgstr "Viri: %d/%d"
msgid "Please select where the sync status should be exported to"
msgstr "Prosim izberite, kam želite izvoziti sinhronizacijski status"
@@ -1318,6 +1349,10 @@ msgstr "V postopku"
msgid "Synchronisation is already in progress. State: %s"
msgstr "Sinhronizacija je že v postopku. Stanje: %s"
msgid ""
"Unknown item type downloaded - please upgrade Joplin to the latest version"
msgstr ""
msgid "Encrypted"
msgstr "Enkriptirano"
@@ -1535,6 +1570,24 @@ msgstr ""
"Ciljno sinhronizacijsko mesto. Vsak sinhronizacijski cilj ima lahko dodatne "
"parametre imenovano kot `sync.NUM.NAME` (vse je dokumentirano spodaj)."
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 "Directory to synchronise with (absolute path)"
msgstr "Mesto ciljne sinhronizacije (absolutna pot)"
@@ -1569,6 +1622,20 @@ msgstr ""
msgid "Ignore TLS certificate errors"
msgstr ""
#, fuzzy
msgid "Enable note history"
msgstr "Omogoči enkripcijo"
msgid "days"
msgstr ""
#, javascript-format
msgid "%d days"
msgstr ""
msgid "Keep note history for"
msgstr ""
#, javascript-format
msgid "Invalid option value: \"%s\". Possible values are: %s."
msgstr "Neveljavna vrednost: \"%s\". Možne vrednosti so : %s."
@@ -1643,12 +1710,19 @@ msgstr "Ni datotek za izvoz."
msgid "Please specify the notebook where the notes should be imported to."
msgstr "Prosim navedite beležnico, kamor želite uvoziti zabeležke."
msgid "Restored Notes"
msgstr ""
msgid "Items that cannot be synchronised"
msgstr "Predmeti ne morejo biti sinhronizirani"
#, javascript-format
msgid "%s (%s): %s"
msgstr "%s (%s): %s"
#, 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 "
@@ -1920,9 +1994,11 @@ msgstr "Trenutno nimate nobene beležnice. Ustvarite jo s klikom na (+) gumb."
msgid "Welcome"
msgstr "Dobrodošli"
#, fuzzy
#~ msgid "This note has no history"
#~ msgstr "Ta zabeležka je bila spremenjena:"
#~ msgid "Some items cannot be decrypted."
#~ msgstr "Nekateri predmeti ne morejo biti dekriptirani."
#~ msgid "%s (%s): %s"
#~ msgstr "%s (%s): %s"
#~ msgid ""
#~ "The path to synchronise with when file system synchronisation is enabled. "

View File

@@ -665,6 +665,9 @@ msgstr "Dölj %s"
msgid "Quit"
msgstr "Avsluta"
msgid "Close Window"
msgstr ""
#, fuzzy
msgid "&Edit"
msgstr "Redigera"
@@ -729,6 +732,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"
@@ -837,12 +843,12 @@ msgstr ""
msgid "Notes and settings are stored in: %s"
msgstr "Anteckningar och inställningar lagras i: %s"
msgid "Browse..."
msgstr "Bläddra..."
msgid "Check synchronisation configuration"
msgstr "Kontrollera synkroniseringskonfigurationen"
msgid "Browse..."
msgstr "Bläddra..."
msgid "Apply"
msgstr "Tillämpa"
@@ -986,8 +992,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"
@@ -1007,9 +1014,33 @@ msgstr "Plats"
msgid "URL"
msgstr "URL"
#, fuzzy
msgid "Note History"
msgstr "Anteckningsboken"
msgid "Previous versions of this note"
msgstr ""
msgid "Note properties"
msgstr "Anteckningens egenskaper"
#, javascript-format
msgid "The note \"%s\" has been successfully restored to the notebook \"%s\"."
msgstr ""
#, fuzzy
msgid "This note has no history"
msgstr "Denna anteckning har ändrats:"
msgid "Restore"
msgstr ""
#, javascript-format
msgid ""
"Click \"%s\" to restore the note. It will be copied in the notebook named "
"\"%s\". The current version of the note will not be replaced or modified."
msgstr ""
msgid "Open..."
msgstr "Öppna..."
@@ -1161,8 +1192,8 @@ msgid "Decrypting items: %d/%d"
msgstr "Dekrypterar objekt: %d/%d"
#, javascript-format
msgid "Fetching resources: %d"
msgstr "Hämtar resurser: %d"
msgid "Fetching resources: %d/%d"
msgstr "Hämtar resurser: %d/%d"
msgid "Please select where the sync status should be exported to"
msgstr "Välj vart synkroniseringstillståndet ska exporteras till"
@@ -1319,6 +1350,10 @@ msgstr "Pågår"
msgid "Synchronisation is already in progress. State: %s"
msgstr "Synkronisering pågår redan. Tillstånd: %s"
msgid ""
"Unknown item type downloaded - please upgrade Joplin to the latest version"
msgstr ""
msgid "Encrypted"
msgstr "Krypterad"
@@ -1536,6 +1571,24 @@ msgstr ""
"Målet att synkronisera till. Varje synkroniseringsmål kan ha ytterligare "
"parametrar som heter `sync.NUM.NAME` (alla dokumenterade nedan)."
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 "Directory to synchronise with (absolute path)"
msgstr "Katalog för att synkronisera med (absolut sökväg)"
@@ -1575,6 +1628,20 @@ msgstr ""
msgid "Ignore TLS certificate errors"
msgstr "Ignorera TLS-certifikatfel"
#, fuzzy
msgid "Enable note history"
msgstr "Aktivera kryptering"
msgid "days"
msgstr ""
#, javascript-format
msgid "%d days"
msgstr ""
msgid "Keep note history for"
msgstr ""
#, javascript-format
msgid "Invalid option value: \"%s\". Possible values are: %s."
msgstr "Ogiltigt inställningsvärde: \"%s\". Möjliga värden är: %s."
@@ -1645,12 +1712,19 @@ msgstr "Det finns ingen data att exportera."
msgid "Please specify the notebook where the notes should be imported to."
msgstr "Ange anteckningsboken som anteckningarna ska importeras till."
msgid "Restored Notes"
msgstr ""
msgid "Items that cannot be synchronised"
msgstr "Objekt som inte kan synkroniseras"
#, javascript-format
msgid "%s (%s): %s"
msgstr "%s (%s): %s"
#, 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 "
@@ -1936,9 +2010,11 @@ msgstr ""
msgid "Welcome"
msgstr "Välkommen"
#, fuzzy
#~ msgid "This note has no history"
#~ msgstr "Denna anteckning har ändrats:"
#~ msgid "Some items cannot be decrypted."
#~ msgstr "Några objekt kan inte dekrypteras."
#~ msgid "%s (%s): %s"
#~ msgstr "%s (%s): %s"
#~ msgid ""
#~ "The path to synchronise with when file system synchronisation is enabled. "

View File

@@ -632,6 +632,9 @@ msgstr "Gizle %s"
msgid "Quit"
msgstr "Çıkış"
msgid "Close Window"
msgstr ""
#, fuzzy
msgid "&Edit"
msgstr "Düzenle"
@@ -696,6 +699,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"
@@ -805,12 +811,12 @@ msgstr ""
msgid "Notes and settings are stored in: %s"
msgstr "Notlar ve ayarlar şu konumda saklanır: %s"
msgid "Browse..."
msgstr "Bul..."
msgid "Check synchronisation configuration"
msgstr "Senkronizasyon yapılandırmasını kontrol et"
msgid "Browse..."
msgstr "Bul..."
msgid "Apply"
msgstr "Uygula"
@@ -955,8 +961,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"
@@ -976,9 +983,33 @@ msgstr "Konum"
msgid "URL"
msgstr "URL"
#, fuzzy
msgid "Note History"
msgstr "Not listesi"
msgid "Previous versions of this note"
msgstr ""
msgid "Note properties"
msgstr "Not özellikleri"
#, javascript-format
msgid "The note \"%s\" has been successfully restored to the notebook \"%s\"."
msgstr ""
#, fuzzy
msgid "This note has no history"
msgstr "Bu not değiştirildi:"
msgid "Restore"
msgstr ""
#, javascript-format
msgid ""
"Click \"%s\" to restore the note. It will be copied in the notebook named "
"\"%s\". The current version of the note will not be replaced or modified."
msgstr ""
msgid "Open..."
msgstr "Aç..."
@@ -1130,8 +1161,8 @@ msgid "Decrypting items: %d/%d"
msgstr "Şifresi çözülenler: %d/%d"
#, javascript-format
msgid "Fetching resources: %d"
msgstr "Kaynaklar alınıyor: %d"
msgid "Fetching resources: %d/%d"
msgstr "Kaynaklar alınıyor: %d/%d"
msgid "Please select where the sync status should be exported to"
msgstr "Lütfen senkronizasyon durumunun nereye aktarılacağını seçin"
@@ -1288,6 +1319,10 @@ msgstr "Devam etmekte"
msgid "Synchronisation is already in progress. State: %s"
msgstr "Senkronizasyon zaten devam ediyor. Durum: %s"
msgid ""
"Unknown item type downloaded - please upgrade Joplin to the latest version"
msgstr ""
msgid "Encrypted"
msgstr "Şifrelenmiş"
@@ -1503,6 +1538,24 @@ 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 "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 "Directory to synchronise with (absolute path)"
msgstr "Eşitlenecek dizin (kesin yol)"
@@ -1542,6 +1595,20 @@ msgstr ""
msgid "Ignore TLS certificate errors"
msgstr "TLS sertifikası hatalarını yoksay"
#, fuzzy
msgid "Enable note history"
msgstr "Şifrelemeyi etkinleştir"
msgid "days"
msgstr ""
#, javascript-format
msgid "%d days"
msgstr ""
msgid "Keep note history for"
msgstr ""
#, javascript-format
msgid "Invalid option value: \"%s\". Possible values are: %s."
msgstr "Geçersiz seçenek değeri: \"%s\". Mümkün değerler: %s."
@@ -1611,12 +1678,19 @@ msgstr "Çıkartılacak veri bulunmuyor."
msgid "Please specify the notebook where the notes should be imported to."
msgstr "Lütfen notların alınacağı not defterini belirtin."
msgid "Restored Notes"
msgstr ""
msgid "Items that cannot be synchronised"
msgstr "Senkronize edilemeyen öğeler"
#, javascript-format
msgid "%s (%s): %s"
msgstr "%s (%s): %s"
#, 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 "
@@ -1895,9 +1969,11 @@ msgstr ""
msgid "Welcome"
msgstr "Hoşgeldiniz"
#, fuzzy
#~ msgid "This note has no history"
#~ msgstr "Bu not değiştirildi:"
#~ msgid "Some items cannot be decrypted."
#~ msgstr "Bazı öğelerin şifresi çözülemez."
#~ msgid "%s (%s): %s"
#~ msgstr "%s (%s): %s"
#~ msgid ""
#~ "The path to synchronise with when file system synchronisation is enabled. "

View File

@@ -47,7 +47,7 @@ msgid "y"
msgstr "是"
msgid "Cancelling background synchronisation... Please wait."
msgstr "正在取消后台同步... 请稍候。"
msgstr "正在取消后台同步……请稍候。"
#, javascript-format
msgid "No such command: %s"
@@ -601,7 +601,7 @@ msgid "About Joplin"
msgstr "关于 Joplin"
msgid "Preferences..."
msgstr ""
msgstr "偏好……"
msgid "Check for updates..."
msgstr "检查更新..."
@@ -622,6 +622,9 @@ msgstr "隐藏 %s"
msgid "Quit"
msgstr "退出"
msgid "Close Window"
msgstr "关闭窗口"
msgid "&Edit"
msgstr "编辑 (&E)"
@@ -682,6 +685,9 @@ msgstr "网站与文档"
msgid "Make a donation"
msgstr "捐赠"
msgid "Toggle development tools"
msgstr ""
#, javascript-format
msgid "Open %s"
msgstr "打开 %s"
@@ -785,12 +791,12 @@ msgstr "该授权令牌仅用于允许第三方应用程序访问 Joplin。"
msgid "Notes and settings are stored in: %s"
msgstr "笔记与设置文件储存在:%s"
msgid "Browse..."
msgstr "浏览..."
msgid "Check synchronisation configuration"
msgstr "检查同步配置"
msgid "Browse..."
msgstr "浏览..."
msgid "Apply"
msgstr "应用"
@@ -925,8 +931,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 "设置密码"
@@ -944,9 +951,33 @@ msgstr "位置"
msgid "URL"
msgstr "URL"
msgid "Note History"
msgstr "笔记历史"
msgid "Previous versions of this note"
msgstr "此笔记的早期版本"
msgid "Note properties"
msgstr "笔记属性"
#, javascript-format
msgid "The note \"%s\" has been successfully restored to the notebook \"%s\"."
msgstr "笔记\"%s\"已成功恢复到笔记本\"%s\"中。"
msgid "This note has no history"
msgstr "此笔记没有历史记录"
msgid "Restore"
msgstr "恢复"
#, javascript-format
msgid ""
"Click \"%s\" to restore the note. It will be copied in the notebook named "
"\"%s\". The current version of the note will not be replaced or modified."
msgstr ""
"单击 \"%s\" 以恢复笔记。它将会被复制到名为 \"%s\" 的笔记本中。笔记的当前版本"
"不会被替换或修改。"
msgid "Open..."
msgstr "打开…"
@@ -1096,8 +1127,8 @@ msgid "Decrypting items: %d/%d"
msgstr "正在解密项目:%d/%d"
#, javascript-format
msgid "Fetching resources: %d"
msgstr "正在获取资源:%d"
msgid "Fetching resources: %d/%d"
msgstr "正在获取资源:%d/%d"
msgid "Please select where the sync status should be exported to"
msgstr "请选择同步状态的导出位置"
@@ -1136,9 +1167,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"
@@ -1249,6 +1282,10 @@ msgstr "正在进行"
msgid "Synchronisation is already in progress. State: %s"
msgstr "已经在同步。状态:%s"
msgid ""
"Unknown item type downloaded - please upgrade Joplin to the latest version"
msgstr "已下载项目为未知类型,请将 Joplin 升级到最新版本"
msgid "Encrypted"
msgstr "已加密"
@@ -1342,45 +1379,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 "显示托盘图标"
@@ -1462,6 +1495,24 @@ msgid ""
msgstr ""
"所同步的目标。每个同步目标都可能有名为 `sync.NUM.NAME` 的附加参数(见下文)。"
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 "Directory to synchronise with (absolute path)"
msgstr "待同步的目录(绝对路径)。"
@@ -1499,6 +1550,19 @@ msgstr ""
msgid "Ignore TLS certificate errors"
msgstr "忽略 TLS 证书错误"
msgid "Enable note history"
msgstr "启用笔记历史"
msgid "days"
msgstr ""
#, javascript-format
msgid "%d days"
msgstr ""
msgid "Keep note history for"
msgstr ""
#, javascript-format
msgid "Invalid option value: \"%s\". Possible values are: %s."
msgstr "无效的选项值:\"%s\"。可用值有:%s。"
@@ -1516,7 +1580,7 @@ msgid "Note"
msgstr "笔记"
msgid "Plugins"
msgstr ""
msgstr "插件"
msgid "Application"
msgstr "应用程序"
@@ -1566,12 +1630,19 @@ msgstr "没有可导出的数据。"
msgid "Please specify the notebook where the notes should be imported to."
msgstr "请指定导入笔记的目标笔记本。"
msgid "Restored Notes"
msgstr "已恢复的笔记"
msgid "Items that cannot be synchronised"
msgstr "无法同步项目"
#, javascript-format
msgid "%s (%s): %s"
msgstr "%s (%s): %s"
msgid "%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 ""
"These items will remain on the device but will not be uploaded to the sync "
@@ -1842,9 +1913,11 @@ msgstr "您目前未有笔记本。点击 (+) 按钮创建。"
msgid "Welcome"
msgstr "欢迎"
#, fuzzy
#~ msgid "This note has no history"
#~ msgstr "该笔记已被修改:"
#~ msgid "Some items cannot be decrypted."
#~ msgstr "一些项目无法被解密。"
#~ msgid "%s (%s): %s"
#~ msgstr "%s (%s): %s"
#~ msgid "Table of contents"
#~ msgstr "目录"

View File

@@ -627,6 +627,9 @@ msgstr "隱藏 %s"
msgid "Quit"
msgstr "結束"
msgid "Close Window"
msgstr ""
#, fuzzy
msgid "&Edit"
msgstr "編輯"
@@ -694,6 +697,9 @@ msgstr "官方網站及線上說明"
msgid "Make a donation"
msgstr "捐助"
msgid "Toggle development tools"
msgstr ""
#, javascript-format
msgid "Open %s"
msgstr "開啟 %s"
@@ -798,12 +804,12 @@ msgstr ""
msgid "Notes and settings are stored in: %s"
msgstr "所有記事和設置均儲存於: %s"
msgid "Browse..."
msgstr ""
msgid "Check synchronisation configuration"
msgstr "檢測同步設置"
msgid "Browse..."
msgstr ""
msgid "Apply"
msgstr "套用"
@@ -939,8 +945,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 "設置密碼"
@@ -958,9 +965,33 @@ msgstr ""
msgid "URL"
msgstr ""
#, fuzzy
msgid "Note History"
msgstr "記事本"
msgid "Previous versions of this note"
msgstr ""
msgid "Note properties"
msgstr ""
#, javascript-format
msgid "The note \"%s\" has been successfully restored to the notebook \"%s\"."
msgstr ""
#, fuzzy
msgid "This note has no history"
msgstr "此記事已被修改:"
msgid "Restore"
msgstr ""
#, javascript-format
msgid ""
"Click \"%s\" to restore the note. It will be copied in the notebook named "
"\"%s\". The current version of the note will not be replaced or modified."
msgstr ""
msgid "Open..."
msgstr "開啟..."
@@ -1107,8 +1138,8 @@ msgid "Decrypting items: %d/%d"
msgstr "正在解密項目: %d/%d 項"
#, fuzzy, javascript-format
msgid "Fetching resources: %d"
msgstr "資源: %d"
msgid "Fetching resources: %d/%d"
msgstr "資源: %d/%d"
msgid "Please select where the sync status should be exported to"
msgstr "請選擇將同步狀態導出到的位置"
@@ -1262,6 +1293,10 @@ msgstr "進行中"
msgid "Synchronisation is already in progress. State: %s"
msgstr "同步已在進行中。狀態: %s"
msgid ""
"Unknown item type downloaded - please upgrade Joplin to the latest version"
msgstr ""
msgid "Encrypted"
msgstr "已加密"
@@ -1471,6 +1506,24 @@ msgstr ""
"要同步的目標。每個同步目標可能有附加的參數,它們被命名為 `sync.NUM.NAME` (全"
"部記錄如下)。"
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 "Directory to synchronise with (absolute path)"
msgstr "要同步的目錄 (絕對路徑)"
@@ -1508,6 +1561,20 @@ msgstr ""
msgid "Ignore TLS certificate errors"
msgstr "忽略 TLS 證書錯誤"
#, fuzzy
msgid "Enable note history"
msgstr "啟用加密"
msgid "days"
msgstr ""
#, javascript-format
msgid "%d days"
msgstr ""
msgid "Keep note history for"
msgstr ""
#, javascript-format
msgid "Invalid option value: \"%s\". Possible values are: %s."
msgstr "不正確選項值: \"%s\"。可能的值為: %s。"
@@ -1580,12 +1647,19 @@ msgstr "沒有資料可匯出。"
msgid "Please specify the notebook where the notes should be imported to."
msgstr "請指定將記事匯入到的筆記本。"
msgid "Restored Notes"
msgstr ""
msgid "Items that cannot be synchronised"
msgstr "無法同步的項目"
#, javascript-format
msgid "%s (%s): %s"
msgstr "%s (%s): %s"
#, 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 "
@@ -1854,9 +1928,11 @@ msgstr "您當前沒有任何筆記本。通過按一下 (+) 鍵去建立一本
msgid "Welcome"
msgstr "歡迎"
#, fuzzy
#~ msgid "This note has no history"
#~ msgstr "此記事已被修改:"
#~ msgid "Some items cannot be decrypted."
#~ msgstr "有些項目不能解密。"
#~ msgid "%s (%s): %s"
#~ msgstr "%s (%s): %s"
#~ msgid ""
#~ "The path to synchronise with when file system synchronisation is enabled. "

View File

@@ -1,6 +1,6 @@
{
"name": "joplin",
"version": "1.0.126",
"version": "1.0.139",
"lockfileVersion": 1,
"requires": true,
"dependencies": {

View File

@@ -20,7 +20,7 @@
],
"owner": "Laurent Cozic"
},
"version": "1.0.126",
"version": "1.0.139",
"bin": {
"joplin": "./main.js"
},

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

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

@@ -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);
@@ -970,7 +974,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 +1057,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 +1170,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 +1319,101 @@ 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);
}));
});

View File

@@ -74,6 +74,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' });
@@ -181,7 +186,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];

View File

@@ -50,6 +50,7 @@ const appDefaultState = Object.assign({}, defaultState, {
windowContentSize: bridge().windowContentSize(),
watchedNoteFiles: [],
lastEditorScrollPercents: {},
noteDevToolsVisible: false,
});
class Application extends BaseApplication {
@@ -187,6 +188,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);
@@ -787,6 +794,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 +824,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';

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_);
@@ -190,6 +206,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 +274,7 @@ const mapStateToProps = (state) => {
return {
theme: state.settings.theme,
windowCommand: state.windowCommand,
notesParentType: state.notesParentType,
};
};

View File

@@ -448,7 +448,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 +496,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 +521,7 @@ const mapStateToProps = (state) => {
noteListWidth: state.settings['style.noteList.width'],
selectedNoteId: state.selectedNoteIds.length === 1 ? state.selectedNoteIds[0] : null,
plugins: state.plugins,
noteDevToolsVisible: state.noteDevToolsVisible,
};
};

View File

@@ -126,10 +126,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

@@ -36,6 +36,7 @@ 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');
@@ -226,14 +227,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);
}
}
@@ -363,7 +363,8 @@ class NoteTextComponent extends React.Component {
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);
}
@@ -376,10 +377,27 @@ class NoteTextComponent extends React.Component {
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);
}
componentDidUpdate(prevProps) {
if (this.webviewRef() && this.props.noteDevToolsVisible !== this.webviewRef().isDevToolsOpened()) {
if (this.props.noteDevToolsVisible) {
this.webviewRef().openDevTools();
} else {
this.webviewRef().closeDevTools();
}
}
}
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) {
const forceSave = saveIfNewNote && (this.state.note && !this.state.note.id);
@@ -474,6 +492,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
@@ -521,6 +541,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) {
@@ -647,7 +672,7 @@ class NoteTextComponent extends React.Component {
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;
@@ -662,10 +687,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 +773,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) {
@@ -864,6 +896,9 @@ class NoteTextComponent extends React.Component {
}
return output;
}
//fixes #1426 but this is an Ace issue, so it can be removed if ace/brace is updated.
this.editor_.editor.getSession().getMode().$quotes = {'"': '"', "'": "'", "`": "`"};
// Disable Markdown auto-completion (eg. auto-adding a dash after a line with a dash.
// https://github.com/ajaxorg/ace/issues/2754
@@ -1741,6 +1776,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;

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

@@ -714,7 +714,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

@@ -38,277 +38,286 @@
<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++;
}
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';
}
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

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -8,6 +8,7 @@ locales['de_DE'] = require('./de_DE.json');
locales['en_US'] = require('./en_US.json');
locales['es_ES'] = require('./es_ES.json');
locales['eu'] = require('./eu.json');
locales['fa'] = require('./fa.json');
locales['fr_FR'] = require('./fr_FR.json');
locales['gl_ES'] = require('./gl_ES.json');
locales['hr_HR'] = require('./hr_HR.json');
@@ -17,6 +18,7 @@ locales['ko'] = require('./ko.json');
locales['nb_NO'] = require('./nb_NO.json');
locales['nl_BE'] = require('./nl_BE.json');
locales['nl_NL'] = require('./nl_NL.json');
locales['pl_PL'] = require('./pl_PL.json');
locales['pt_BR'] = require('./pt_BR.json');
locales['ro'] = require('./ro.json');
locales['ru_RU'] = require('./ru_RU.json');

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -1,6 +1,6 @@
{
"name": "Joplin",
"version": "1.0.152",
"version": "1.0.158",
"lockfileVersion": 1,
"requires": true,
"dependencies": {
@@ -3933,31 +3933,23 @@
"integrity": "sha1-RqGqlHEFrtgYiXjgoBYXnkBPQsc="
},
"markdown-it-multimd-table": {
"version": "3.1.3",
"resolved": "https://registry.npmjs.org/markdown-it-multimd-table/-/markdown-it-multimd-table-3.1.3.tgz",
"integrity": "sha1-l5Jr4N87WWdhGEZM5D0C03nKNNw=",
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/markdown-it-multimd-table/-/markdown-it-multimd-table-3.2.0.tgz",
"integrity": "sha512-dBtYHVtyAnoWslzYLYDh0d9jX2/qroyMIsJ1BjFdIcLgZjzqBIBGwZ1j3AaaWh+IIfe3KVm5Irqn5Uzadm5kQA==",
"requires": {
"markdown-it": "^5.0.3"
"markdown-it": "^8.4.2"
},
"dependencies": {
"linkify-it": {
"version": "1.2.4",
"resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-1.2.4.tgz",
"integrity": "sha1-B3NSbDF8j9E71TTuHRgP+Iq/iBo=",
"requires": {
"uc.micro": "^1.0.1"
}
},
"markdown-it": {
"version": "5.1.0",
"resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-5.1.0.tgz",
"integrity": "sha1-JShrhGW6xJbz8bd+7VRGQ+m9cY0=",
"version": "8.4.2",
"resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-8.4.2.tgz",
"integrity": "sha512-GcRz3AWTqSUphY3vsUqQSFMbgR38a4Lh3GWlHRh/7MRwz8mcu9n2IO7HOh+bXHrR9kOPDl5RNCaEsrneb+xhHQ==",
"requires": {
"argparse": "~1.0.3",
"argparse": "^1.0.7",
"entities": "~1.1.1",
"linkify-it": "~1.2.0",
"mdurl": "~1.0.1",
"uc.micro": "^1.0.0"
"linkify-it": "^2.0.0",
"mdurl": "^1.0.1",
"uc.micro": "^1.0.5"
}
}
}

View File

@@ -1,6 +1,6 @@
{
"name": "Joplin",
"version": "1.0.152",
"version": "1.0.158",
"description": "Joplin for Desktop",
"main": "main.js",
"scripts": {
@@ -117,7 +117,7 @@
"markdown-it-ins": "^2.0.0",
"markdown-it-katex": "^2.0.3",
"markdown-it-mark": "^2.0.0",
"markdown-it-multimd-table": "^3.1.3",
"markdown-it-multimd-table": "^3.2.0",
"markdown-it-sub": "^1.0.0",
"markdown-it-sup": "^1.0.0",
"markdown-it-toc-done-right": "^3.0.1",

View File

@@ -193,13 +193,25 @@ class Dialog extends React.PureComponent {
}
}
gotoItem(item) {
async gotoItem(item) {
this.props.dispatch({
pluginName: PLUGIN_NAME,
type: 'PLUGIN_DIALOG_SET',
open: false,
});
if (this.state.listType === BaseModel.TYPE_NOTE || this.state.listType === BaseModel.TYPE_FOLDER) {
const folderPath = await Folder.folderPath(this.props.folders, item.parent_id);
for (const folder of folderPath) {
this.props.dispatch({
type: "FOLDER_SET_COLLAPSED",
id: folder.id,
collapsed: false,
});
}
}
if (this.state.listType === BaseModel.TYPE_NOTE) {
this.props.dispatch({
type: "FOLDER_AND_NOTE_SELECT",

3
ElectronClient/package-lock.json generated Normal file
View File

@@ -0,0 +1,3 @@
{
"lockfileVersion": 1
}

View File

@@ -37,7 +37,7 @@ if [[ ! -e ~/.joplin/VERSION ]] || [[ $(< ~/.joplin/VERSION) != "$version" ]]; t
echo 'Downloading Joplin...'
# Delete previous version (in future versions joplin.desktop shouldn't exist)
rm -f ~/.joplin/*.AppImage ~/.local/share/applications/joplin.desktop ~/.local/share/applications/appimagekit-joplin.desktop ~/.joplin/VERSION
rm -f ~/.joplin/*.AppImage ~/.local/share/applications/joplin.desktop ~/.joplin/VERSION
# Creates the folder where the binary will be stored
mkdir -p ~/.joplin/
@@ -78,7 +78,10 @@ if [[ ! -e ~/.joplin/VERSION ]] || [[ $(< ~/.joplin/VERSION) != "$version" ]]; t
(cd $TMPDIR && ~/.joplin/Joplin.AppImage --appimage-extract joplin.desktop &> /dev/null)
APPIMAGE_VERSION=$(grep "^X-AppImage-BuildId=" $TMPDIR/squashfs-root/joplin.desktop | head -n 1 | cut -d " " -f 1)
rm -rf $TMPDIR/squashfs-root
# Only delete the desktop file if it will be replaced
rm -f ~/.local/share/applications/appimagekit-joplin.desktop
# On some systems this directory doesn't exist by default
mkdir -p ~/.local/share/applications
echo -e "[Desktop Entry]\nEncoding=UTF-8\nName=Joplin\nComment=Joplin for Desktop\nExec=/home/$USER/.joplin/Joplin.AppImage\nIcon=/home/$USER/.joplin/Icon512.png\nStartupWMClass=Joplin\nType=Application\nCategories=Application;\n$APPIMAGE_VERSION" >> ~/.local/share/applications/appimagekit-joplin.desktop
echo "${COLOR_GREEN}OK${COLOR_RESET}"

View File

@@ -20,15 +20,15 @@ Three types of applications are available: for the **desktop** (Windows, macOS a
Operating System | Download | Alternative
-----------------|--------|-------------------
Windows (32 and 64-bit) | <a href='https://github.com/laurent22/joplin/releases/download/v1.0.151/Joplin-Setup-1.0.151.exe'><img alt='Get it on Windows' width="134px" src='https://joplinapp.org/images/BadgeWindows.png'/></a> | Or get the <a href='https://github.com/laurent22/joplin/releases/download/v1.0.151/JoplinPortable.exe'>Portable version</a><br><br>The [portable application](https://en.wikipedia.org/wiki/Portable_application) allows installing the software on a portable device such as a USB key. Simply copy the file JoplinPortable.exe in any directory on that USB key ; the application will then create a directory called "JoplinProfile" next to the executable file.
macOS | <a href='https://github.com/laurent22/joplin/releases/download/v1.0.151/Joplin-1.0.151.dmg'><img alt='Get it on macOS' width="134px" src='https://joplinapp.org/images/BadgeMacOS.png'/></a> | You can also use Homebrew: `brew cask install joplin`
Linux | <a href='https://github.com/laurent22/joplin/releases/download/v1.0.151/Joplin-1.0.151-x86_64.AppImage'><img alt='Get it on Linux' width="134px" src='https://joplinapp.org/images/BadgeLinux.png'/></a> | An Arch Linux package [is also available](#terminal-application).<br><br>If it works with your distribution (it has been tested on Ubuntu, Fedora, Gnome and Mint), the recommended way is to use this script as it will handle the desktop icon too:<br><br> `wget -O - https://raw.githubusercontent.com/laurent22/joplin/master/Joplin_install_and_update.sh | bash`
Windows (32 and 64-bit) | <a href='https://github.com/laurent22/joplin/releases/download/v1.0.152/Joplin-Setup-1.0.152.exe'><img alt='Get it on Windows' width="134px" src='https://joplinapp.org/images/BadgeWindows.png'/></a> | Or get the <a href='https://github.com/laurent22/joplin/releases/download/v1.0.152/JoplinPortable.exe'>Portable version</a><br><br>The [portable application](https://en.wikipedia.org/wiki/Portable_application) allows installing the software on a portable device such as a USB key. Simply copy the file JoplinPortable.exe in any directory on that USB key ; the application will then create a directory called "JoplinProfile" next to the executable file.
macOS | <a href='https://github.com/laurent22/joplin/releases/download/v1.0.152/Joplin-1.0.152.dmg'><img alt='Get it on macOS' width="134px" src='https://joplinapp.org/images/BadgeMacOS.png'/></a> | You can also use Homebrew: `brew cask install joplin`
Linux | <a href='https://github.com/laurent22/joplin/releases/download/v1.0.152/Joplin-1.0.152-x86_64.AppImage'><img alt='Get it on Linux' width="134px" src='https://joplinapp.org/images/BadgeLinux.png'/></a> | An Arch Linux package [is also available](#terminal-application).<br><br>If it works with your distribution (it has been tested on Ubuntu, Fedora, Gnome and Mint), the recommended way is to use this script as it will handle the desktop icon too:<br><br> `wget -O - https://raw.githubusercontent.com/laurent22/joplin/master/Joplin_install_and_update.sh \| bash`
## Mobile applications
Operating System | Download | Alt. Download
-----------------|----------|----------------
Android | <a href='https://play.google.com/store/apps/details?id=net.cozic.joplin&utm_source=GitHub&utm_campaign=README&pcampaignid=MKT-Other-global-all-co-prtnr-py-PartBadge-Mar2515-1'><img alt='Get it on Google Play' height="40px" src='https://joplinapp.org/images/BadgeAndroid.png'/></a> | or [Download APK File](https://github.com/laurent22/joplin-android/releases/download/android-v1.0.251/joplin-v1.0.251.apk)
Android | <a href='https://play.google.com/store/apps/details?id=net.cozic.joplin&utm_source=GitHub&utm_campaign=README&pcampaignid=MKT-Other-global-all-co-prtnr-py-PartBadge-Mar2515-1'><img alt='Get it on Google Play' height="40px" src='https://joplinapp.org/images/BadgeAndroid.png'/></a> | or [Download APK File](https://github.com/laurent22/joplin-android/releases/download/android-v1.0.255/joplin-v1.0.255.apk)
iOS | <a href='https://itunes.apple.com/us/app/joplin/id1315599797'><img alt='Get it on the App Store' height="40px" src='https://joplinapp.org/images/BadgeIOS.png'/></a> | -
## Terminal application
@@ -59,7 +59,7 @@ The Web Clipper is a browser extension that allows you to save web pages and scr
- Support
- [Joplin Forum](https://discourse.joplin.cozic.net)
- [Joplin Forum](https://discourse.joplinapp.org)
- [How to enable end-to-end encryption](https://github.com/laurent22/joplin/blob/master/readme/e2ee.md)
- [End-to-end encryption spec](https://github.com/laurent22/joplin/blob/master/readme/spec.md)
- [How to enable debug mode](https://github.com/laurent22/joplin/blob/master/readme/debugging.md)
@@ -68,7 +68,8 @@ The Web Clipper is a browser extension that allows you to save web pages and scr
- About
- [Changelog](https://github.com/laurent22/joplin/blob/master/readme/changelog.md)
- [Changelog (Desktop App)](https://github.com/laurent22/joplin/blob/master/readme/changelog.md)
- [Changelog (CLI App)](https://github.com/laurent22/joplin/blob/master/readme/changelog_cli.md)
- [Stats](https://github.com/laurent22/joplin/blob/master/readme/stats.md)
- [Donate](https://github.com/laurent22/joplin/blob/master/readme/donate.md)
<!-- TOC -->
@@ -78,6 +79,7 @@ The Web Clipper is a browser extension that allows you to save web pages and scr
- Desktop, mobile and terminal applications.
- [Web Clipper](https://github.com/laurent22/joplin/blob/master/readme/clipper.md) for Firefox and Chrome.
- End To End Encryption (E2EE)
- Note history (revisions)
- Synchronisation with various services, including NextCloud, Dropbox, WebDAV and OneDrive.
- Import Enex files (Evernote export format) and Markdown files.
- Export JEX files (Joplin Export format) and raw files.
@@ -123,7 +125,7 @@ In general the way to import notes from any application into Joplin is to conver
* Standard Notes: Please see [this tutorial](https://programadorwebvalencia.com/migrate-notes-from-standard-notes-to-joplin/)
* Tomboy Notes: Export the notes to ENEX files [as described here](https://askubuntu.com/questions/243691/how-can-i-export-my-tomboy-notes-into-evernote/608551) for example, and import these ENEX files into Joplin.
* OneNote: First [import the notes from OneNote into Evernote](https://discussion.evernote.com/topic/107736-is-there-a-way-to-import-from-onenote-into-evernote-on-the-mac/). Then export the ENEX file from Evernote and import it into Joplin.
* NixNote: Synchronise with Evernote, then export the ENEX files and import them into Joplin. More info [in this thread](https://discourse.joplin.cozic.net/t/import-from-nixnote/183/3).
* NixNote: Synchronise with Evernote, then export the ENEX files and import them into Joplin. More info [in this thread](https://discourse.joplinapp.org/t/import-from-nixnote/183/3).
# Exporting
@@ -193,6 +195,14 @@ Joplin supports end-to-end encryption (E2EE) on all the applications. E2EE is a
For a more technical description, mostly relevant for development or to review the method being used, please see the [Encryption specification](https://joplinapp.org/spec/).
# Note history
The Joplin applications automatically save previous versions of your notes at regular intervals. These versions are synced across devices and can be viewed from the desktop application. To do so, click on the "Information" button on a note, then click on "Previous version of this note". From this screen you can view the previous versions of the note as well as restore any of them.
This feature can be disabled from the "Note history" section in the settings, and it is also possible to change for how long the history of a note is saved.
More information about this feature in the [announcement post](https://www.patreon.com/posts/note-history-now-27083082).
# External text editor
Joplin notes can be opened and edited using an external editor of your choice. It can be a simple text editor like Notepad++ or Sublime Text or an actual Markdown editor like Typora. In that case, images will also be displayed within the editor. To open the note in an external editor, click on the icon in the toolbar or press Ctrl+E (or Cmd+E). Your default text editor will be used to open the note. If needed, you can also specify the editor directly in the General Options, under "Text editor command".
@@ -323,8 +333,8 @@ Please see the [donation page](https://joplinapp.org/donate/) for information on
# Community
- For general discussion about Joplin, user support, software development questions, and to discuss new features, go to the [Joplin Forum](https://discourse.joplin.cozic.net/). It is possible to login with your GitHub account.
- Also see here for information about [the latest releases and general news](https://discourse.joplin.cozic.net/c/news).
- For general discussion about Joplin, user support, software development questions, and to discuss new features, go to the [Joplin Forum](https://discourse.joplinapp.org/). It is possible to login with your GitHub account.
- Also see here for information about [the latest releases and general news](https://discourse.joplinapp.org/c/news).
- For bug reports and feature requests, go to the [GitHub Issue Tracker](https://github.com/laurent22/joplin/issues).
- The latest news are posted [on the Patreon page](https://www.patreon.com/joplin).
@@ -350,32 +360,34 @@ Current translations:
<!-- LOCALE-TABLE-AUTO-GENERATED -->
&nbsp; | Language | Po File | Last translator | Percent done
---|---|---|---|---
![](https://joplinapp.org/images/flags/country-4x3/arableague.png) | Arabic | [ar](https://github.com/laurent22/joplin/blob/master/CliClient/locales/ar.po) | عبد الناصر سعيد (as@althobaity.com) | 95%
![](https://joplinapp.org/images/flags/es/basque_country.png) | Basque | [eu](https://github.com/laurent22/joplin/blob/master/CliClient/locales/eu.po) | juan.abasolo@ehu.eus | 54%
![](https://joplinapp.org/images/flags/es/catalonia.png) | Catalan | [ca](https://github.com/laurent22/joplin/blob/master/CliClient/locales/ca.po) | jmontane, 2018 | 78%
![](https://joplinapp.org/images/flags/country-4x3/hr.png) | Croatian | [hr_HR](https://github.com/laurent22/joplin/blob/master/CliClient/locales/hr_HR.po) | Hrvoje Mandić (trbuhom@net.hr) | 44%
![](https://joplinapp.org/images/flags/country-4x3/cz.png) | Czech | [cs_CZ](https://github.com/laurent22/joplin/blob/master/CliClient/locales/cs_CZ.po) | Lukas Helebrandt (lukas@aiya.cz) | 69%
![](https://joplinapp.org/images/flags/country-4x3/dk.png) | Dansk | [da_DK](https://github.com/laurent22/joplin/blob/master/CliClient/locales/da_DK.po) | Morten Juhl-Johansen Zölde-Fejér (mjjzf@syntaktisk. | 70%
![](https://joplinapp.org/images/flags/country-4x3/de.png) | Deutsch | [de_DE](https://github.com/laurent22/joplin/blob/master/CliClient/locales/de_DE.po) | Michael Sonntag (ms@editorei.de) | 100%
![](https://joplinapp.org/images/flags/country-4x3/arableague.png) | Arabic | [ar](https://github.com/laurent22/joplin/blob/master/CliClient/locales/ar.po) | عبد الناصر سعيد (as@althobaity.com) | 91%
![](https://joplinapp.org/images/flags/es/basque_country.png) | Basque | [eu](https://github.com/laurent22/joplin/blob/master/CliClient/locales/eu.po) | juan.abasolo@ehu.eus | 52%
![](https://joplinapp.org/images/flags/es/catalonia.png) | Catalan | [ca](https://github.com/laurent22/joplin/blob/master/CliClient/locales/ca.po) | jmontane, 2018 | 74%
![](https://joplinapp.org/images/flags/country-4x3/hr.png) | Croatian | [hr_HR](https://github.com/laurent22/joplin/blob/master/CliClient/locales/hr_HR.po) | Hrvoje Mandić (trbuhom@net.hr) | 42%
![](https://joplinapp.org/images/flags/country-4x3/cz.png) | Czech | [cs_CZ](https://github.com/laurent22/joplin/blob/master/CliClient/locales/cs_CZ.po) | Lukas Helebrandt (lukas@aiya.cz) | 92%
![](https://joplinapp.org/images/flags/country-4x3/dk.png) | Dansk | [da_DK](https://github.com/laurent22/joplin/blob/master/CliClient/locales/da_DK.po) | Morten Juhl-Johansen Zölde-Fejér (mjjzf@syntaktisk. | 67%
![](https://joplinapp.org/images/flags/country-4x3/de.png) | Deutsch | [de_DE](https://github.com/laurent22/joplin/blob/master/CliClient/locales/de_DE.po) | Michael Sonntag (ms@editorei.de) | 99%
![](https://joplinapp.org/images/flags/country-4x3/gb.png) | English (UK) | [en_GB](https://github.com/laurent22/joplin/blob/master/CliClient/locales/en_GB.po) | | 100%
![](https://joplinapp.org/images/flags/country-4x3/us.png) | English (US) | [en_US](https://github.com/laurent22/joplin/blob/master/CliClient/locales/en_US.po) | | 100%
![](https://joplinapp.org/images/flags/country-4x3/es.png) | Español | [es_ES](https://github.com/laurent22/joplin/blob/master/CliClient/locales/es_ES.po) | Andros Fenollosa (andros@fenollosa.email) | 96%
![](https://joplinapp.org/images/flags/country-4x3/fr.png) | Français | [fr_FR](https://github.com/laurent22/joplin/blob/master/CliClient/locales/fr_FR.po) | Laurent Cozic | 100%
![](https://joplinapp.org/images/flags/es/galicia.png) | Galician | [gl_ES](https://github.com/laurent22/joplin/blob/master/CliClient/locales/gl_ES.po) | Marcos Lans (marcoslansgarza@gmail.com) | 69%
![](https://joplinapp.org/images/flags/country-4x3/it.png) | Italiano | [it_IT](https://github.com/laurent22/joplin/blob/master/CliClient/locales/it_IT.po) | | 86%
![](https://joplinapp.org/images/flags/country-4x3/be.png) | Nederlands | [nl_BE](https://github.com/laurent22/joplin/blob/master/CliClient/locales/nl_BE.po) | | 55%
![](https://joplinapp.org/images/flags/country-4x3/nl.png) | Nederlands | [nl_NL](https://github.com/laurent22/joplin/blob/master/CliClient/locales/nl_NL.po) | Heimen Stoffels (vistausss@outlook.com) | 83%
![](https://joplinapp.org/images/flags/country-4x3/no.png) | Norwegian | [nb_NO](https://github.com/laurent22/joplin/blob/master/CliClient/locales/nb_NO.po) | Mats Estensen (code@mxe.no) | 96%
![](https://joplinapp.org/images/flags/country-4x3/br.png) | Português (Brasil) | [pt_BR](https://github.com/laurent22/joplin/blob/master/CliClient/locales/pt_BR.po) | Renato Nunes Bastos (rnbastos@gmail.com) | 90%
![](https://joplinapp.org/images/flags/country-4x3/ro.png) | Română | [ro](https://github.com/laurent22/joplin/blob/master/CliClient/locales/ro.po) | | 54%
![](https://joplinapp.org/images/flags/country-4x3/si.png) | Slovenian | [sl_SI](https://github.com/laurent22/joplin/blob/master/CliClient/locales/sl_SI.po) | | 68%
![](https://joplinapp.org/images/flags/country-4x3/se.png) | Svenska | [sv](https://github.com/laurent22/joplin/blob/master/CliClient/locales/sv.po) | Jonatan Nyberg (jonatan@autistici.org) | 93%
![](https://joplinapp.org/images/flags/country-4x3/tr.png) | Türkçe | [tr_TR](https://github.com/laurent22/joplin/blob/master/CliClient/locales/tr_TR.po) | Zorbey Doğangüneş (zorbeyd@gmail.com) | 90%
![](https://joplinapp.org/images/flags/country-4x3/ru.png) | Русский | [ru_RU](https://github.com/laurent22/joplin/blob/master/CliClient/locales/ru_RU.po) | Artyom Karlov (artyom.karlov@gmail.com) | 96%
![](https://joplinapp.org/images/flags/country-4x3/cn.png) | 中文 (简体) | [zh_CN](https://github.com/laurent22/joplin/blob/master/CliClient/locales/zh_CN.po) | | 96%
![](https://joplinapp.org/images/flags/country-4x3/tw.png) | 中文 (繁體) | [zh_TW](https://github.com/laurent22/joplin/blob/master/CliClient/locales/zh_TW.po) | penguinsam (samliu@gmail.com) | 83%
![](https://joplinapp.org/images/flags/country-4x3/jp.png) | 日本語 | [ja_JP](https://github.com/laurent22/joplin/blob/master/CliClient/locales/ja_JP.po) | AWASHIRO Ikuya (ikunya@gmail.com) | 90%
![](https://joplinapp.org/images/flags/country-4x3/kr.png) | 한국말 | [ko](https://github.com/laurent22/joplin/blob/master/CliClient/locales/ko.po) | | 92%
![](https://joplinapp.org/images/flags/country-4x3/es.png) | Español | [es_ES](https://github.com/laurent22/joplin/blob/master/CliClient/locales/es_ES.po) | Andros Fenollosa (andros@fenollosa.email) | 99%
![](https://joplinapp.org/images/flags/country-4x3/fr.png) | Français | [fr_FR](https://github.com/laurent22/joplin/blob/master/CliClient/locales/fr_FR.po) | Laurent Cozic | 99%
![](https://joplinapp.org/images/flags/es/galicia.png) | Galician | [gl_ES](https://github.com/laurent22/joplin/blob/master/CliClient/locales/gl_ES.po) | Marcos Lans (marcoslansgarza@gmail.com) | 66%
![](https://joplinapp.org/images/flags/country-4x3/it.png) | Italiano | [it_IT](https://github.com/laurent22/joplin/blob/master/CliClient/locales/it_IT.po) | | 93%
![](https://joplinapp.org/images/flags/country-4x3/be.png) | Nederlands | [nl_BE](https://github.com/laurent22/joplin/blob/master/CliClient/locales/nl_BE.po) | | 52%
![](https://joplinapp.org/images/flags/country-4x3/nl.png) | Nederlands | [nl_NL](https://github.com/laurent22/joplin/blob/master/CliClient/locales/nl_NL.po) | Heimen Stoffels (vistausss@outlook.com) | 80%
![](https://joplinapp.org/images/flags/country-4x3/no.png) | Norwegian | [nb_NO](https://github.com/laurent22/joplin/blob/master/CliClient/locales/nb_NO.po) | Mats Estensen (code@mxe.no) | 92%
![](https://joplinapp.org/images/flags/country-4x3/ir.png) | Persian | [fa](https://github.com/laurent22/joplin/blob/master/CliClient/locales/fa.po) | Mehrad Mahmoudian (mehrad@mahmoudian.me) | 50%
![](https://joplinapp.org/images/flags/country-4x3/pl.png) | Polski | [pl_PL](https://github.com/laurent22/joplin/blob/master/CliClient/locales/pl_PL.po) | | 98%
![](https://joplinapp.org/images/flags/country-4x3/br.png) | Português (Brasil) | [pt_BR](https://github.com/laurent22/joplin/blob/master/CliClient/locales/pt_BR.po) | Renato Nunes Bastos (rnbastos@gmail.com) | 98%
![](https://joplinapp.org/images/flags/country-4x3/ro.png) | Română | [ro](https://github.com/laurent22/joplin/blob/master/CliClient/locales/ro.po) | | 52%
![](https://joplinapp.org/images/flags/country-4x3/si.png) | Slovenian | [sl_SI](https://github.com/laurent22/joplin/blob/master/CliClient/locales/sl_SI.po) | | 65%
![](https://joplinapp.org/images/flags/country-4x3/se.png) | Svenska | [sv](https://github.com/laurent22/joplin/blob/master/CliClient/locales/sv.po) | Jonatan Nyberg (jonatan@autistici.org) | 89%
![](https://joplinapp.org/images/flags/country-4x3/tr.png) | Türkçe | [tr_TR](https://github.com/laurent22/joplin/blob/master/CliClient/locales/tr_TR.po) | Zorbey Doğangüneş (zorbeyd@gmail.com) | 86%
![](https://joplinapp.org/images/flags/country-4x3/ru.png) | Русский | [ru_RU](https://github.com/laurent22/joplin/blob/master/CliClient/locales/ru_RU.po) | Artyom Karlov (artyom.karlov@gmail.com) | 92%
![](https://joplinapp.org/images/flags/country-4x3/cn.png) | 中文 (简体) | [zh_CN](https://github.com/laurent22/joplin/blob/master/CliClient/locales/zh_CN.po) | | 97%
![](https://joplinapp.org/images/flags/country-4x3/tw.png) | 中文 (繁體) | [zh_TW](https://github.com/laurent22/joplin/blob/master/CliClient/locales/zh_TW.po) | penguinsam (samliu@gmail.com) | 80%
![](https://joplinapp.org/images/flags/country-4x3/jp.png) | 日本語 | [ja_JP](https://github.com/laurent22/joplin/blob/master/CliClient/locales/ja_JP.po) | AWASHIRO Ikuya (ikunya@gmail.com) | 86%
![](https://joplinapp.org/images/flags/country-4x3/kr.png) | 한국말 | [ko](https://github.com/laurent22/joplin/blob/master/CliClient/locales/ko.po) | | 88%
<!-- LOCALE-TABLE-AUTO-GENERATED -->
# Known bugs

View File

@@ -90,8 +90,8 @@ android {
applicationId "net.cozic.joplin"
minSdkVersion rootProject.ext.minSdkVersion
targetSdkVersion rootProject.ext.targetSdkVersion
versionCode 2097487
versionName "1.0.251"
versionCode 2097494
versionName "1.0.258"
ndk {
abiFilters "armeabi-v7a", "x86"
}

View File

@@ -17,11 +17,11 @@
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleShortVersionString</key>
<string>10.0.33</string>
<string>10.0.34</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
<string>33</string>
<string>34</string>
<key>LSRequiresIPhoneOS</key>
<true/>
<key>NSAppTransportSecurity</key>

View File

@@ -59,6 +59,8 @@ class BaseApplication {
// be derived from the state and not set directly since that would make the
// state and UI out of sync.
this.currentFolder_ = null;
this.decryptionWorker_resourceMetadataButNotBlobDecrypted = this.decryptionWorker_resourceMetadataButNotBlobDecrypted.bind(this);
}
logger() {
@@ -279,6 +281,25 @@ class BaseApplication {
}
}
resourceFetcher_downloadComplete(event) {
if (event.encrypted) {
DecryptionWorker.instance().scheduleStart();
}
}
async decryptionWorker_resourceMetadataButNotBlobDecrypted(event) {
this.scheduleAutoAddResources();
}
scheduleAutoAddResources() {
if (this.scheduleAutoAddResourcesIID_) return;
this.scheduleAutoAddResourcesIID_ = setTimeout(() => {
this.scheduleAutoAddResourcesIID_ = null;
ResourceFetcher.instance().autoAddResources();
}, 1000);
}
reducerActionToString(action) {
let o = [action.type];
if ('id' in action) o.push(action.id);
@@ -308,7 +329,7 @@ class BaseApplication {
}
async generalMiddleware(store, next, action) {
this.logger().debug('Reducer action', this.reducerActionToString(action));
// this.logger().debug('Reducer action', this.reducerActionToString(action));
const result = next(action);
const newState = store.getState();
@@ -426,7 +447,7 @@ class BaseApplication {
}
if (this.hasGui() && action.type === 'SYNC_CREATED_RESOURCE') {
ResourceFetcher.instance().queueDownload(action.id);
ResourceFetcher.instance().autoAddResources();
}
if (refreshFolders) {
@@ -561,6 +582,8 @@ class BaseApplication {
this.database_.setLogger(this.dbLogger_);
await this.database_.open({ name: profileDir + '/database.sqlite' });
// if (Setting.value('env') === 'dev') await this.database_.clearForTesting();
reg.setDb(this.database_);
BaseModel.db_ = this.database_;
@@ -600,9 +623,11 @@ class BaseApplication {
DecryptionWorker.instance().setLogger(this.logger_);
DecryptionWorker.instance().setEncryptionService(EncryptionService.instance());
await EncryptionService.instance().loadMasterKeysFromSettings();
DecryptionWorker.instance().on('resourceMetadataButNotBlobDecrypted', this.decryptionWorker_resourceMetadataButNotBlobDecrypted);
ResourceFetcher.instance().setFileApi(() => { return reg.syncTarget().fileApi() });
ResourceFetcher.instance().setLogger(this.logger_);
ResourceFetcher.instance().on('downloadComplete', this.resourceFetcher_downloadComplete);
ResourceFetcher.instance().start();
SearchEngine.instance().setDb(reg.db());

View File

@@ -20,18 +20,18 @@ const rules = {
const setupLinkify = require('./MdToHtml/setupLinkify');
const hljs = require('highlight.js');
const markdownItAnchor = require('markdown-it-anchor');
const markdownItToc = require('markdown-it-toc-done-right');
// The keys must match the corresponding entry in Setting.js
const plugins = {
mark: require('markdown-it-mark'),
footnote: require('markdown-it-footnote'),
sub: require('markdown-it-sub'),
sup: require('markdown-it-sup'),
deflist: require('markdown-it-deflist'),
abbr: require('markdown-it-abbr'),
emoji: require('markdown-it-emoji'),
insert: require('markdown-it-ins'),
multitable: require('markdown-it-multimd-table'),
mark: {module: require('markdown-it-mark')},
footnote: {module: require('markdown-it-footnote')},
sub: {module: require('markdown-it-sub')},
sup: {module: require('markdown-it-sup')},
deflist: {module: require('markdown-it-deflist')},
abbr: {module: require('markdown-it-abbr')},
emoji: {module: require('markdown-it-emoji')},
insert: {module: require('markdown-it-ins')},
multitable: {module: require('markdown-it-multimd-table'), options: { enableMultilineRows: true, enableRowspan: true }},
toc: {module: require('markdown-it-toc-done-right'), options: { listType: 'ul' }},
};
class MdToHtml {
@@ -129,12 +129,10 @@ class MdToHtml {
markdownIt.use(rules.highlight_keywords(context, ruleOptions));
markdownIt.use(rules.code_inline(context, ruleOptions));
markdownIt.use(markdownItAnchor)
if (Setting.value('markdown.plugin.toc'))
markdownIt.use(markdownItToc, { listType: 'ul' })
for (let key in plugins) {
if (Setting.value('markdown.plugin.' + key))
markdownIt.use(plugins[key]);
markdownIt.use(plugins[key].module, plugins[key].options);
}
setupLinkify(markdownIt);

View File

@@ -19,6 +19,9 @@ module.exports = function(style, options) {
font-family: ` + fontFamily + `;
padding-bottom: ` + options.paddingBottom + `;
}
strong {
color: ` + style.colorBright + `
}
::-webkit-scrollbar {
width: 7px;
height: 7px;
@@ -161,6 +164,29 @@ module.exports = function(style, options) {
color: black;
}
.not-loaded-resource img {
width: 1.15em;
height: 1.15em;
background: white;
padding: 2px !important;
border-radius: 2px;
box-shadow: 0 1px 3px #000000aa;
}
a.not-loaded-resource img {
margin-right: .2em;
}
a.not-loaded-resource {
display: flex;
flex-direction: row;
align-items: center;
}
.checkbox-label-checked {
opacity: 0.5;
}
@media print {
body {
height: auto !important;

View File

@@ -32,7 +32,16 @@ function createPrefixTokens(Token, id, checked, label, postMessageSyntax, source
// in calling code.
const lineIndex = sourceToken.map && sourceToken.map.length ? sourceToken.map[0] : 99999999;
const checkedString = checked ? 'checked' : 'unchecked';
const js = postMessageSyntax + "('checkboxclick:" + checkedString + ':' + lineIndex + "'); return true;";
const labelId = 'cb-label-' + id;
const js = `
${postMessageSyntax}('checkboxclick:${checkedString}:${lineIndex}');
const label = document.getElementById("${labelId}");
label.classList.remove(this.checked ? 'checkbox-label-unchecked' : 'checkbox-label-checked');
label.classList.add(this.checked ? 'checkbox-label-checked' : 'checkbox-label-unchecked');
return true;
`;
token = new Token('checkbox_input', 'input', 0);
token.attrs = [
@@ -44,7 +53,11 @@ function createPrefixTokens(Token, id, checked, label, postMessageSyntax, source
tokens.push(token);
token = new Token('label_open', 'label', 1);
token.attrs = [['for', id]];
token.attrs = [
['id', labelId],
['for', id],
['class', 'checkbox-label-' + checkedString],
];
tokens.push(token);
if (label) {

View File

@@ -5,8 +5,14 @@ const utils = require('../utils');
function renderImageHtml(before, src, after, ruleOptions) {
const resourceId = Resource.urlToId(src);
const resource = ruleOptions.resources[resourceId];
if (!resource) return '<div>' + utils.loaderImage() + '</div>';
const result = ruleOptions.resources[resourceId];
const resource = result ? result.item : null;
const resourceStatus = utils.resourceStatus(result);
if (resourceStatus !== 'ready') {
const icon = utils.resourceStatusImage(resourceStatus);
return '<div class="not-loaded-resource resource-status-' + resourceStatus + '" data-resource-id="' + resourceId + '">' + '<img src="data:image/svg+xml;utf8,' + htmlentities(icon) + '"/>' + '</div>';
}
const mime = resource.mime ? resource.mime.toLowerCase() : '';
if (Resource.isSupportedImageMimeType(mime)) {

View File

@@ -14,8 +14,14 @@ function installRule(markdownIt, mdOptions, ruleOptions) {
if (!Resource.isResourceUrl(src)) return defaultRender(tokens, idx, options, env, self);
const resourceId = Resource.urlToId(src);
const resource = ruleOptions.resources[resourceId];
if (!resource) return '<div>' + utils.loaderImage() + '</div>';
const result = ruleOptions.resources[resourceId];
const resource = result ? result.item : null;
const resourceStatus = utils.resourceStatus(result);
if (resourceStatus !== 'ready') {
const icon = utils.resourceStatusImage(resourceStatus);
return '<div class="not-loaded-resource resource-status-' + resourceStatus + '" data-resource-id="' + resourceId + '">' + '<img src="data:image/svg+xml;utf8,' + htmlentities(icon) + '"/>' + '</div>';
}
const mime = resource.mime ? resource.mime.toLowerCase() : '';
if (Resource.isSupportedImageMimeType(mime)) {

View File

@@ -18,9 +18,19 @@ function installRule(markdownIt, mdOptions, ruleOptions) {
let hrefAttr = '#';
if (isResourceUrl) {
const resourceId = Resource.pathToId(href);
href = "joplin://" + resourceId;
resourceIdAttr = "data-resource-id='" + resourceId + "'";
icon = '<span class="resource-icon"></span>';
const result = ruleOptions.resources[resourceId];
const resource = result ? result.item : null;
const resourceStatus = utils.resourceStatus(result);
if (result && resourceStatus !== 'ready') {
const icon = utils.resourceStatusFile(resourceStatus);
return '<a class="not-loaded-resource resource-status-' + resourceStatus + '" data-resource-id="' + resourceId + '">' + '<img src="data:image/svg+xml;utf8,' + htmlentities(icon) + '"/>';
} else {
href = "joplin://" + resourceId;
resourceIdAttr = "data-resource-id='" + resourceId + "'";
icon = '<span class="resource-icon"></span>';
}
} else {
// If the link is a plain URL (as opposed to a resource link), set the href to the actual
// link. This allows the link to be exported too when exporting to PDF.
@@ -29,7 +39,6 @@ function installRule(markdownIt, mdOptions, ruleOptions) {
let js = ruleOptions.postMessageSyntax + "(" + JSON.stringify(href) + "); return false;";
if (hrefAttr.indexOf('#') === 0 && href.indexOf('#') === 0) js = ''; // If it's an internal anchor, don't add any JS since the webview is going to handle navigating to the right place
// if (js) hrefAttr = '#';
return "<a data-from-md " + resourceIdAttr + " title='" + htmlentities(title) + "' href='" + hrefAttr + "' onclick='" + js + "'>" + icon;
};
}

View File

@@ -1,14 +1,94 @@
module.exports = {
getAttr: function(attrs, name, defaultValue = null) {
for (let i = 0; i < attrs.length; i++) {
if (attrs[i][0] === name) return attrs[i].length > 1 ? attrs[i][1] : null;
const Resource = require('lib/models/Resource.js');
const utils = {};
utils.getAttr = function(attrs, name, defaultValue = null) {
for (let i = 0; i < attrs.length; i++) {
if (attrs[i][0] === name) return attrs[i].length > 1 ? attrs[i][1] : null;
}
return defaultValue;
}
utils.notDownloadedResource = function() {
return `
<svg width="1700" height="1536" xmlns="http://www.w3.org/2000/svg">
<path d="M1280 1344c0-35-29-64-64-64s-64 29-64 64 29 64 64 64 64-29 64-64zm256 0c0-35-29-64-64-64s-64 29-64 64 29 64 64 64 64-29 64-64zm128-224v320c0 53-43 96-96 96H96c-53 0-96-43-96-96v-320c0-53 43-96 96-96h465l135 136c37 36 85 56 136 56s99-20 136-56l136-136h464c53 0 96 43 96 96zm-325-569c10 24 5 52-14 70l-448 448c-12 13-29 19-45 19s-33-6-45-19L339 621c-19-18-24-46-14-70 10-23 33-39 59-39h256V64c0-35 29-64 64-64h256c35 0 64 29 64 64v448h256c26 0 49 16 59 39z"/>
</svg>
`;
}
utils.notDownloadedImage = function() {
// https://github.com/ForkAwesome/Fork-Awesome/blob/master/src/icons/svg/file-image-o.svg
// Height changed to 1795
return `
<svg width="1925" height="1792" xmlns="http://www.w3.org/2000/svg">
<path d="M640 576c0 106-86 192-192 192s-192-86-192-192 86-192 192-192 192 86 192 192zm1024 384v448H256v-192l320-320 160 160 512-512zm96-704H160c-17 0-32 15-32 32v1216c0 17 15 32 32 32h1600c17 0 32-15 32-32V288c0-17-15-32-32-32zm160 32v1216c0 88-72 160-160 160H160c-88 0-160-72-160-160V288c0-88 72-160 160-160h1600c88 0 160 72 160 160z"/>
</svg>
`;
}
utils.notDownloadedFile = function() {
// https://github.com/ForkAwesome/Fork-Awesome/blob/master/src/icons/svg/file-o.svg
return `
<svg width="1925" height="1792" xmlns="http://www.w3.org/2000/svg">
<path d="M1468 380c37 37 68 111 68 164v1152c0 53-43 96-96 96H96c-53 0-96-43-96-96V96C0 43 43 0 96 0h896c53 0 127 31 164 68zm-444-244v376h376c-6-17-15-34-22-41l-313-313c-7-7-24-16-41-22zm384 1528V640H992c-53 0-96-43-96-96V128H128v1536h1280z"/>
</svg>
`;
}
utils.errorImage = function() {
// https://github.com/ForkAwesome/Fork-Awesome/blob/master/src/icons/svg/times-circle.svg
return `
<svg width="1795" height="1795" xmlns="http://www.w3.org/2000/svg">
<path d="M1149 1122c0-17-7-33-19-45L949 896l181-181c12-12 19-28 19-45s-7-34-19-46l-90-90c-12-12-29-19-46-19s-33 7-45 19L768 715 587 534c-12-12-28-19-45-19s-34 7-46 19l-90 90c-12 12-19 29-19 46s7 33 19 45l181 181-181 181c-12 12-19 28-19 45s7 34 19 46l90 90c12 12 29 19 46 19s33-7 45-19l181-181 181 181c12 12 28 19 45 19s34-7 46-19l90-90c12-12 19-29 19-46zm387-226c0 424-344 768-768 768S0 1320 0 896s344-768 768-768 768 344 768 768z"/>
</svg>
`;
}
utils.loaderImage = function() {
// https://github.com/ForkAwesome/Fork-Awesome/blob/master/src/icons/svg/hourglass-half.svg
return `
<svg width="1536" height="1790" xmlns="http://www.w3.org/2000/svg">
<path d="M1408 128c0 370-177 638-373 768 196 130 373 398 373 768h96c18 0 32 14 32 32v64c0 18-14 32-32 32H32c-18 0-32-14-32-32v-64c0-18 14-32 32-32h96c0-370 177-638 373-768-196-130-373-398-373-768H32c-18 0-32-14-32-32V32C0 14 14 0 32 0h1472c18 0 32 14 32 32v64c0 18-14 32-32 32h-96zm-128 0H256c0 146 33 275 85 384h854c52-109 85-238 85-384zm-57 1216c-74-193-207-330-340-384H653c-133 54-266 191-340 384h910z"/>
</svg>
`;
}
utils.resourceStatusImage = function(state) {
if (state === 'notDownloaded') return utils.notDownloadedResource();
return utils.resourceStatusFile(state);
}
utils.resourceStatusFile = function(state) {
if (state === 'notDownloaded') return utils.notDownloadedResource();
if (state === 'downloading') return utils.loaderImage();
if (state === 'encrypted') return utils.loaderImage();
if (state === 'error') return utils.errorImage();
throw new Error('Unknown state: ' + state);
}
utils.resourceStatus = function(resourceInfo, localState) {
let resourceStatus = 'ready';
if (resourceInfo) {
const resource = resourceInfo.item;
const localState = resourceInfo.localState;
if (localState.fetch_status === Resource.FETCH_STATUS_IDLE) {
resourceStatus = 'notDownloaded';
} else if (localState.fetch_status === Resource.FETCH_STATUS_STARTED) {
resourceStatus = 'downloading';
} else if (localState.fetch_status === Resource.FETCH_STATUS_DONE) {
if (resource.encryption_blob_encrypted || resource.encryption_applied) {
resourceStatus = 'encrypted';
}
}
return defaultValue;
},
} else {
resourceStatus = 'notDownloaded';
}
loaderImage: function() {
return '<?xml version="1.0" encoding="UTF-8" standalone="no"?><svg xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.0" width="16px" height="16px" viewBox="0 0 128 128" xml:space="preserve"><g><circle cx="16" cy="64" r="16" fill="#000000" fill-opacity="1"/><circle cx="16" cy="64" r="16" fill="#555555" fill-opacity="0.67" transform="rotate(45,64,64)"/><circle cx="16" cy="64" r="16" fill="#949494" fill-opacity="0.42" transform="rotate(90,64,64)"/><circle cx="16" cy="64" r="16" fill="#cccccc" fill-opacity="0.2" transform="rotate(135,64,64)"/><circle cx="16" cy="64" r="16" fill="#e1e1e1" fill-opacity="0.12" transform="rotate(180,64,64)"/><circle cx="16" cy="64" r="16" fill="#e1e1e1" fill-opacity="0.12" transform="rotate(225,64,64)"/><circle cx="16" cy="64" r="16" fill="#e1e1e1" fill-opacity="0.12" transform="rotate(270,64,64)"/><circle cx="16" cy="64" r="16" fill="#e1e1e1" fill-opacity="0.12" transform="rotate(315,64,64)"/><animateTransform attributeName="transform" type="rotate" values="0 64 64;315 64 64;270 64 64;225 64 64;180 64 64;135 64 64;90 64 64;45 64 64" calcMode="discrete" dur="720ms" repeatCount="indefinite"></animateTransform></g></svg>';
},
return resourceStatus;
}
};
module.exports = utils;

View File

@@ -1,7 +1,33 @@
const webviewLib = {};
let manualDownloadResourceElements = [];
webviewLib.onUnloadedResourceClick = function(event) {
const resourceId = event.currentTarget.getAttribute('data-resource-id');
webviewLib.options_.postMessage('markForDownload:' + resourceId);
}
webviewLib.setupResourceManualDownload = function() {
for (const element of manualDownloadResourceElements) {
element.style.cursor = 'default';
element.removeEventListener('click', webviewLib.onUnloadedResourceClick);
}
manualDownloadResourceElements = [];
const elements = document.getElementsByClassName('resource-status-notDownloaded');
for (const element of elements) {
element.style.cursor = 'pointer';
element.addEventListener('click', webviewLib.onUnloadedResourceClick);
manualDownloadResourceElements.push(element);
}
}
webviewLib.handleInternalLink = function(event, anchorNode) {
const href = anchorNode.getAttribute('href');
if (!href) return false;
if (href.indexOf('#') === 0) {
event.preventDefault();
let old_hash = location.hash;
@@ -18,6 +44,7 @@ webviewLib.handleInternalLink = function(event, anchorNode) {
setTimeout(function() { location.hash = old_hash; }, 10);
return true;
}
return false;
}
@@ -36,6 +63,24 @@ webviewLib.getParentAnchorElement = function(element) {
}
}
webviewLib.cloneError = function(error) {
return {
message: error.message,
stack: error.stack
};
}
webviewLib.logEnabledEventHandler = function(fn) {
return function(event) {
try {
return fn(event);
} catch (error) {
webviewLib.options_.postMessage('error:' + JSON.stringify(webviewLib.cloneError(error)));
throw error;
}
}
}
webviewLib.initialize = function(options) {
webviewLib.options_ = options;
}
@@ -52,9 +97,8 @@ document.addEventListener('click', function(event) {
// as Katex.
if (!anchor.hasAttribute('data-from-md')) {
if (webviewLib.handleInternalLink(event, anchor)) return;
event.preventDefault();
webviewLib.options_.postMessage(anchor.getAttribute('href'));
if (anchor.getAttribute('href')) webviewLib.options_.postMessage(anchor.getAttribute('href'));
return;
}
@@ -63,3 +107,4 @@ document.addEventListener('click', function(event) {
if (webviewLib.handleInternalLink(event, anchor)) return;
}
});

View File

@@ -104,11 +104,19 @@ class NoteBodyViewer extends Component {
let result = this.mdToHtml_.render(bodyToRender, this.props.webViewStyle, mdOptions);
let html = result.html;
const resourceDownloadMode = Setting.value('sync.resourceDownloadMode');
const injectedJs = [this.mdToHtml_.injectedJavaScript()];
injectedJs.push(shim.injectedJs('webviewLib'));
injectedJs.push('webviewLib.initialize({ postMessage: postMessage });');
console.info(injectedJs);
injectedJs.push('webviewLib.initialize({ postMessage: msg => { return postMessage(msg); } });');
injectedJs.push(`
const readyStateCheckInterval = setInterval(function() {
if (document.readyState === "complete") {
clearInterval(readyStateCheckInterval);
if ("${resourceDownloadMode}" === "manual") webviewLib.setupResourceManualDownload();
}
}, 10);
`);
html = `
<!DOCTYPE html>
@@ -169,12 +177,15 @@ class NoteBodyViewer extends Component {
onMessage={(event) => {
let msg = event.nativeEvent.data;
console.info('Got IPC message: ', msg);
if (msg.indexOf('checkboxclick:') === 0) {
const newBody = shared.toggleCheckbox(msg, this.props.note.body);
if (this.props.onCheckboxChange) this.props.onCheckboxChange(newBody);
} else if (msg.indexOf('bodyscroll:') === 0) {
//msg = msg.split(':');
//this.bodyScrollTop_ = Number(msg[1]);
} else if (msg.indexOf('markForDownload:') === 0) {
msg = msg.split(':');
const resourceId = msg[1];
if (this.props.onMarkForDownload) this.props.onMarkForDownload({ resourceId: resourceId });
} else {
this.props.onJoplinLinkClick(msg);
}

View File

@@ -66,12 +66,21 @@ class ConfigScreenComponent extends BaseScreenComponent {
color: theme.color,
fontSize: theme.fontSize,
flex: 1,
paddingRight: 5,
},
descriptionText: {
color: theme.color,
fontSize: theme.fontSize,
flex: 1,
},
settingDescriptionText: {
color: theme.color,
fontSize: theme.fontSize,
flex: 1,
paddingLeft: theme.marginLeft,
paddingRight: theme.marginRight,
paddingBottom: theme.marginBottom,
},
permissionText: {
color: theme.color,
fontSize: theme.fontSize,
@@ -84,10 +93,13 @@ class ConfigScreenComponent extends BaseScreenComponent {
},
}
// if (Platform.OS === 'ios') {
styles.settingControl.borderBottomWidth = 1;
styles.settingControl.borderBottomColor = theme.strongDividerColor;
// }
styles.settingContainerNoBottomBorder = Object.assign({}, styles.settingContainer, {
borderBottomWidth: 0,
paddingBottom: theme.marginBottom / 2,
});
styles.settingControl.borderBottomWidth = 1;
styles.settingControl.borderBottomColor = theme.strongDividerColor;
styles.switchSettingText = Object.assign({}, styles.settingText);
styles.switchSettingText.width = '80%';
@@ -121,6 +133,7 @@ class ConfigScreenComponent extends BaseScreenComponent {
}
const md = Setting.settingMetadata(key);
const settingDescription = md.description ? md.description() : '';
if (md.isEnum) {
value = value.toString();
@@ -132,27 +145,33 @@ class ConfigScreenComponent extends BaseScreenComponent {
items.push({ label: settingOptions[k], value: k.toString() });
}
const descriptionComp = !settingDescription ? null : <Text style={this.styles().settingDescriptionText}>{settingDescription}</Text>
const containerStyle = !settingDescription ? this.styles().settingContainer : this.styles().settingContainerNoBottomBorder;
return (
<View key={key} style={this.styles().settingContainer}>
<Text key="label" style={this.styles().settingText}>{md.label()}</Text>
<Dropdown
key="control"
style={this.styles().settingControl}
items={items}
selectedValue={value}
itemListStyle={{
backgroundColor: theme.backgroundColor,
}}
headerStyle={{
color: theme.color,
fontSize: theme.fontSize,
}}
itemStyle={{
color: theme.color,
fontSize: theme.fontSize,
}}
onValueChange={(itemValue, itemIndex) => { updateSettingValue(key, itemValue); }}
/>
<View style={{flexDirection:'column', borderBottomWidth: 1, borderBottomColor: theme.dividerColor}}>
<View key={key} style={containerStyle}>
<Text key="label" style={this.styles().settingText}>{md.label()}</Text>
<Dropdown
key="control"
style={this.styles().settingControl}
items={items}
selectedValue={value}
itemListStyle={{
backgroundColor: theme.backgroundColor,
}}
headerStyle={{
color: theme.color,
fontSize: theme.fontSize,
}}
itemStyle={{
color: theme.color,
fontSize: theme.fontSize,
}}
onValueChange={(itemValue, itemIndex) => { updateSettingValue(key, itemValue); }}
/>
</View>
{descriptionComp}
</View>
);
} else if (md.type == Setting.TYPE_BOOL) {

View File

@@ -164,10 +164,11 @@ class NoteScreenComponent extends BaseScreenComponent {
}
}
this.resourceFetcher_downloadComplete = async (resource) => {
this.refreshResource = async (resource) => {
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.refs.noteBodyViewer) {
shared.clearResourceCache();
const attachedResources = await shared.attachedResources(this.state.note.body);
this.setState({ noteResources: attachedResources }, () => {
this.refs.noteBodyViewer.rebuildMd();
@@ -178,6 +179,7 @@ class NoteScreenComponent extends BaseScreenComponent {
this.takePhoto_onPress = this.takePhoto_onPress.bind(this);
this.cameraView_onPhoto = this.cameraView_onPhoto.bind(this);
this.cameraView_onCancel = this.cameraView_onCancel.bind(this);
this.onMarkForDownload = this.onMarkForDownload.bind(this);
}
styles() {
@@ -235,13 +237,23 @@ class NoteScreenComponent extends BaseScreenComponent {
BackButtonService.addHandler(this.backHandler);
NavService.addHandler(this.navHandler);
ResourceFetcher.instance().on('downloadComplete', this.resourceFetcher_downloadComplete);
shared.clearResourceCache();
shared.installResourceHandling(this.refreshResource);
await shared.initState(this);
if (this.state.note && this.state.note.body && Setting.value('sync.resourceDownloadMode') === 'auto') {
const resourceIds = await Note.linkedResourceIds(this.state.note.body);
await ResourceFetcher.instance().markForDownload(resourceIds);
}
this.refreshNoteMetadata();
}
onMarkForDownload(event) {
ResourceFetcher.instance().markForDownload(event.resourceId);
}
refreshNoteMetadata(force = null) {
return shared.refreshNoteMetadata(this, force);
}
@@ -250,7 +262,7 @@ class NoteScreenComponent extends BaseScreenComponent {
BackButtonService.removeHandler(this.backHandler);
NavService.removeHandler(this.navHandler);
ResourceFetcher.instance().off('downloadComplete', this.resourceFetcher_downloadComplete);
shared.uninstallResourceHandling(this.refreshResource);
if (Platform.OS !== 'ios' && this.state.fromShare) {
ShareExtension.close();
@@ -626,6 +638,7 @@ class NoteScreenComponent extends BaseScreenComponent {
highlightedKeywords={keywords}
theme={this.props.theme}
onCheckboxChange={(newBody) => { onCheckboxChange(newBody) }}
onMarkForDownload={this.onMarkForDownload}
onLoadEnd={() => {
setTimeout(() => {
this.setState({ HACK_webviewLoadingState: 1 });

View File

@@ -3,6 +3,8 @@ const Folder = require('lib/models/Folder.js');
const BaseModel = require('lib/BaseModel.js');
const Note = require('lib/models/Note.js');
const Resource = require('lib/models/Resource.js');
const ResourceFetcher = require('lib/services/ResourceFetcher.js');
const DecryptionWorker = require('lib/services/DecryptionWorker.js');
const Setting = require('lib/models/Setting.js');
const Mutex = require('async-mutex').Mutex;
@@ -154,7 +156,11 @@ shared.noteComponent_change = function(comp, propName, propValue) {
comp.setState(newState);
}
const resourceCache_ = {};
let resourceCache_ = {};
shared.clearResourceCache = function() {
resourceCache_ = {};
}
shared.attachedResources = async function(noteBody) {
if (!noteBody) return {};
@@ -163,14 +169,20 @@ shared.attachedResources = async function(noteBody) {
const output = {};
for (let i = 0; i < resourceIds.length; i++) {
const id = resourceIds[i];
if (resourceCache_[id]) {
output[id] = resourceCache_[id];
} else {
const resource = await Resource.load(id);
const isReady = await Resource.isReady(resource);
if (!isReady) continue;
resourceCache_[id] = resource;
output[id] = resource;
const localState = await Resource.localState(resource);
const o = {
item: resource,
localState: localState,
};
resourceCache_[id] = o;
output[id] = o;
}
}
@@ -269,4 +281,16 @@ shared.toggleCheckbox = function(ipcMessage, noteBody) {
return newBody.join('\n')
}
shared.installResourceHandling = function(refreshResourceHandler) {
ResourceFetcher.instance().on('downloadComplete', refreshResourceHandler);
ResourceFetcher.instance().on('downloadStarted', refreshResourceHandler);
DecryptionWorker.instance().on('resourceDecrypted', refreshResourceHandler);
}
shared.uninstallResourceHandling = function(refreshResourceHandler) {
ResourceFetcher.instance().off('downloadComplete', refreshResourceHandler);
ResourceFetcher.instance().off('downloadStarted', refreshResourceHandler);
DecryptionWorker.instance().off('resourceDecrypted', refreshResourceHandler);
}
module.exports = shared;

View File

@@ -1,6 +1,7 @@
const Setting = require('lib/models/Setting');
const Tag = require('lib/models/Tag');
const { reg } = require('lib/registry.js');
const ResourceFetcher = require('lib/services/ResourceFetcher');
const reduxSharedMiddleware = async function(store, next, action) {
const newState = store.getState();
@@ -15,6 +16,10 @@ const reduxSharedMiddleware = async function(store, next, action) {
reg.resetSyncTarget();
}
if (action.type === 'SETTING_UPDATE_ONE' && action.key === 'sync.resourceDownloadMode') {
ResourceFetcher.instance().autoAddResources();
}
if (action.type == 'NOTE_DELETE') {
refreshTags = true;
}

View File

@@ -207,13 +207,13 @@ class SideMenuContentComponent extends 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 fullReport = [];
if (syncReportText) fullReport.push(syncReportText);
// if (fullReport.length) fullReport.push('');
if (resourceFetcherText) lines.push(resourceFetcherText);
if (resourceFetcherText) fullReport.push(resourceFetcherText);
if (decryptionReportText) fullReport.push(decryptionReportText);
while (fullReport.length < 12) fullReport.push(''); // Add blank lines so that height of report text is fixed and doesn't affect scrolling

View File

@@ -309,11 +309,21 @@ function isImageMimeType(m) {
return imageMimeTypes.indexOf(m) >= 0;
}
function tagAttributeToMdText(attr) {
// HTML attributes may contain newlines so remove them.
// https://github.com/laurent22/joplin/issues/1583
if (!attr) return '';
attr = attr.replace(/[\n\r]+/g, ' ');
attr = attr.replace(/\]/g, '\\]');
return attr;
}
function addResourceTag(lines, resource, alt = "") {
// Note: refactor to use Resource.markdownTag
let tagAlt = alt == "" ? resource.alt : alt;
if (!tagAlt) tagAlt = '';
tagAlt = tagAttributeToMdText(tagAlt);
if (isImageMimeType(resource.mime)) {
lines.push("![");
lines.push(tagAlt);
@@ -516,7 +526,7 @@ function enexXmlToMdArray(stream, resources) {
} else if (n == 'img') {
if (nodeAttributes.src) { // Many (most?) img tags don't have no source associated, especially when they were imported from HTML
let s = '![';
if (nodeAttributes.alt) s += nodeAttributes.alt;
if (nodeAttributes.alt) s += tagAttributeToMdText(nodeAttributes.alt);
s += '](' + nodeAttributes.src + ')';
section.lines.push(s);
}

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