You've already forked joplin
mirror of
https://github.com/laurent22/joplin.git
synced 2025-08-27 20:29:45 +02:00
Compare commits
97 Commits
cli-v1.0.1
...
android-v1
Author | SHA1 | Date | |
---|---|---|---|
|
7c6c7f34ba | ||
|
0d65edd0e8 | ||
|
d57520c66a | ||
|
fa28ae1433 | ||
|
0acf9823e5 | ||
|
799ad5f1da | ||
|
9f6b3ccf40 | ||
|
df714c357d | ||
|
de5fdc84f8 | ||
|
b5b228af15 | ||
|
7a85628f46 | ||
|
075e76fc4b | ||
|
172a98fed4 | ||
|
409bdd7b78 | ||
|
d012c689e1 | ||
|
89ec0629e6 | ||
|
b3475ae195 | ||
|
a72ab67473 | ||
|
90fbfec914 | ||
|
49ef023a90 | ||
|
64bfd74f18 | ||
|
655e35056e | ||
|
a13ba63ab8 | ||
|
e2e00d4c87 | ||
|
159dc44f6c | ||
|
8fe2091926 | ||
|
c362c38dc0 | ||
|
316a52bbc2 | ||
|
0de9f6f944 | ||
|
3ba021fdd9 | ||
|
04c6579f2c | ||
|
bc7bd456a7 | ||
|
6d7511efbb | ||
|
a0fb99d78f | ||
|
685a52c2c5 | ||
|
fc77419ca1 | ||
|
bab3a12e92 | ||
|
21f0b90f48 | ||
|
83682ab513 | ||
|
7b987b5a8f | ||
|
cb5aa425c8 | ||
|
dd222381dd | ||
|
d7210811f6 | ||
|
3a43cfeebf | ||
|
31e33c6628 | ||
|
875f8d6997 | ||
|
aaaf27af6e | ||
|
43624ffa75 | ||
|
996b6623f1 | ||
|
613041b806 | ||
|
ff1d01a864 | ||
|
bcbbe10bf8 | ||
|
3de0abfc84 | ||
|
133fd03469 | ||
|
4f97c5c017 | ||
|
2d8fbac58c | ||
|
95f7ac4a4a | ||
|
6a56a6ccf0 | ||
|
1eb8df9fa6 | ||
|
485b4baebb | ||
|
5590d887c9 | ||
|
d00bfa997e | ||
|
1a8590e9b9 | ||
|
5a978977df | ||
|
5d763c7e6c | ||
|
050b089e72 | ||
|
733ea4027c | ||
|
10500c78b1 | ||
|
0040cc02a2 | ||
|
74afd20f0c | ||
|
dc9bde2184 | ||
|
5243ea7eb2 | ||
|
7d93492658 | ||
|
c6b56345f5 | ||
|
8a6fe20a69 | ||
|
6bcbedd6a4 | ||
|
4c935b78f9 | ||
|
94cddda6d0 | ||
|
1924ea062c | ||
|
07e88b2eeb | ||
|
e4a08c29d7 | ||
|
d60afcaabe | ||
|
1a091460ca | ||
|
8ebaa7f6eb | ||
|
e2a64e21a2 | ||
|
78ddd22f09 | ||
|
c546b7076a | ||
|
0e2bb5d784 | ||
|
5c069c38f5 | ||
|
451b9c0ae9 | ||
|
047897621a | ||
|
52e5cec585 | ||
|
bc98b65efa | ||
|
9250e77862 | ||
|
cd69e71945 | ||
|
e705e6e990 | ||
|
4638f11c5e |
5
.github/FUNDING.yml
vendored
Normal file
5
.github/FUNDING.yml
vendored
Normal file
@@ -0,0 +1,5 @@
|
||||
# These are supported funding model platforms
|
||||
|
||||
github: laurent22
|
||||
patreon: joplin
|
||||
custom: https://joplinapp.org/donate/
|
2
BUILD.md
2
BUILD.md
@@ -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
|
||||
|
@@ -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):
|
||||
|
||||
|
@@ -706,6 +706,9 @@ msgstr "موقع الويب و التوثيق"
|
||||
msgid "Make a donation"
|
||||
msgstr "تبرَّع"
|
||||
|
||||
msgid "Toggle development tools"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Open %s"
|
||||
msgstr "افتح %s"
|
||||
@@ -933,9 +936,6 @@ msgstr "عنوان دفتر الملاحظات:"
|
||||
msgid "Add or remove tags:"
|
||||
msgstr "إضافة أو حذف وسوم:"
|
||||
|
||||
msgid "Separate each tag by a comma."
|
||||
msgstr ""
|
||||
|
||||
msgid "Rename notebook:"
|
||||
msgstr "إعادة تسمية دفتر الملاحظات:"
|
||||
|
||||
@@ -957,8 +957,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 "ضبط كلمة المرور"
|
||||
@@ -1154,12 +1155,15 @@ msgid "Decrypting items: %d/%d"
|
||||
msgstr "فك تشفير العناصر: %d/%d"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Fetching resources: %d"
|
||||
msgstr "جلب الموارد: %d"
|
||||
msgid "Fetching resources: %d/%d"
|
||||
msgstr "جلب الموارد: %d/%d"
|
||||
|
||||
msgid "Please select where the sync status should be exported to"
|
||||
msgstr "فضلاً اختر أين سيتم تصدير حالة المزامنة"
|
||||
|
||||
msgid "Retry"
|
||||
msgstr ""
|
||||
|
||||
msgid "Add or remove tags"
|
||||
msgstr "إضافة أو حذف وسوم"
|
||||
|
||||
@@ -1359,6 +1363,58 @@ msgstr ""
|
||||
"تنبيه: إذا غيرت هذا المكان ، تأكد من نسخ كافة المحتويات لديك إليه قبل البدء "
|
||||
"بالمزامنة ، وإلا فسيتم حذف كل الملفات! أنظر الأسئلة المتكررة لتفاصيل أكثر: %s"
|
||||
|
||||
msgid "Synchronisation target"
|
||||
msgstr "وجهة المزامنة"
|
||||
|
||||
msgid ""
|
||||
"The target to synchonise to. Each sync target may have additional parameters "
|
||||
"which are named as `sync.NUM.NAME` (all documented below)."
|
||||
msgstr ""
|
||||
"الوجهة المستهدفة المزامنة إليها. كل وجهة مزامنة مستهدفة قد يكون لها معلمات "
|
||||
"إضافية تكون مسماة بـ `sync.NUM.NAME` (جميعها موثقة أدناه)."
|
||||
|
||||
msgid "Directory to synchronise with (absolute path)"
|
||||
msgstr "الدليل الذي تتم المزامنة معه (المسار المطلق)"
|
||||
|
||||
msgid "Nextcloud WebDAV URL"
|
||||
msgstr "عنوان URL لـ Nextcloud WebDAV"
|
||||
|
||||
msgid "Nextcloud username"
|
||||
msgstr "اسم مستخدم Nextcloud"
|
||||
|
||||
msgid "Nextcloud password"
|
||||
msgstr "كلمة مرور Nextcloud"
|
||||
|
||||
msgid "WebDAV URL"
|
||||
msgstr "عنوان URL لـ WebDAV"
|
||||
|
||||
msgid "WebDAV username"
|
||||
msgstr "اسم مستخدم WebDAV"
|
||||
|
||||
msgid "WebDAV password"
|
||||
msgstr "كلمة مرور WebDAV"
|
||||
|
||||
msgid "Attachment download behaviour"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"In \"Manual\" mode, attachments are downloaded only when you click on them. "
|
||||
"In \"Auto\", they are downloaded when you open the note. In \"Always\", all "
|
||||
"the attachments are downloaded whether you open the note or not."
|
||||
msgstr ""
|
||||
|
||||
msgid "Always"
|
||||
msgstr ""
|
||||
|
||||
msgid "Manual"
|
||||
msgstr ""
|
||||
|
||||
msgid "Auto"
|
||||
msgstr ""
|
||||
|
||||
msgid "Max concurrent connections"
|
||||
msgstr ""
|
||||
|
||||
msgid "Language"
|
||||
msgstr "اللغة"
|
||||
|
||||
@@ -1516,37 +1572,6 @@ msgstr ""
|
||||
msgid "Show advanced options"
|
||||
msgstr "إظهار خيارات متقدمة"
|
||||
|
||||
msgid "Synchronisation target"
|
||||
msgstr "وجهة المزامنة"
|
||||
|
||||
msgid ""
|
||||
"The target to synchonise to. Each sync target may have additional parameters "
|
||||
"which are named as `sync.NUM.NAME` (all documented below)."
|
||||
msgstr ""
|
||||
"الوجهة المستهدفة المزامنة إليها. كل وجهة مزامنة مستهدفة قد يكون لها معلمات "
|
||||
"إضافية تكون مسماة بـ `sync.NUM.NAME` (جميعها موثقة أدناه)."
|
||||
|
||||
msgid "Directory to synchronise with (absolute path)"
|
||||
msgstr "الدليل الذي تتم المزامنة معه (المسار المطلق)"
|
||||
|
||||
msgid "Nextcloud WebDAV URL"
|
||||
msgstr "عنوان URL لـ Nextcloud WebDAV"
|
||||
|
||||
msgid "Nextcloud username"
|
||||
msgstr "اسم مستخدم Nextcloud"
|
||||
|
||||
msgid "Nextcloud password"
|
||||
msgstr "كلمة مرور Nextcloud"
|
||||
|
||||
msgid "WebDAV URL"
|
||||
msgstr "عنوان URL لـ WebDAV"
|
||||
|
||||
msgid "WebDAV username"
|
||||
msgstr "اسم مستخدم WebDAV"
|
||||
|
||||
msgid "WebDAV password"
|
||||
msgstr "كلمة مرور WebDAV"
|
||||
|
||||
msgid "Custom TLS certificates"
|
||||
msgstr "شهادات TLS خاصة"
|
||||
|
||||
@@ -1653,14 +1678,6 @@ msgstr ""
|
||||
msgid "Items that cannot be synchronised"
|
||||
msgstr "العناصر التي لا يمكن مزامنتها"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "%s (%s) could not be uploaded: %s"
|
||||
msgstr "لم نتمكن من فتح هذا الملف: %s"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Item \"%s\" could not be downloaded: %s"
|
||||
msgstr "لم نتمكن من فتح هذا الملف: %s"
|
||||
|
||||
msgid ""
|
||||
"These items will remain on the device but will not be uploaded to the sync "
|
||||
"target. In order to find these items, either search for the title or the ID "
|
||||
@@ -1670,6 +1687,24 @@ msgstr ""
|
||||
"تجد هذه العناصر ، عليك إما البحث عن العنوان أو المعرِّف (وهو معروض أعلاه بين "
|
||||
"قوسين)."
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "%s (%s) could not be uploaded: %s"
|
||||
msgstr "لم نتمكن من فتح هذا الملف: %s"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Item \"%s\" could not be downloaded: %s"
|
||||
msgstr "لم نتمكن من فتح هذا الملف: %s"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Items that cannot be decrypted"
|
||||
msgstr "العناصر التي لا يمكن مزامنتها"
|
||||
|
||||
msgid ""
|
||||
"Joplin failed to decrypt these items multiple times, possibly because they "
|
||||
"are corrupted or too large. These items will remain on the device but Joplin "
|
||||
"will no longer attempt to decrypt them."
|
||||
msgstr ""
|
||||
|
||||
msgid "Sync status (synced items / total items)"
|
||||
msgstr "حالة المزامنة (العناصر المنجزة / إجمالي العناصر)"
|
||||
|
||||
@@ -1790,6 +1825,10 @@ msgstr "وسوم جديدة:"
|
||||
msgid "Type new tags or select from list"
|
||||
msgstr "أكتب وسوماً جديدة أو اخترها من القائمة"
|
||||
|
||||
#, fuzzy
|
||||
msgid "More information"
|
||||
msgstr "الضبط"
|
||||
|
||||
msgid ""
|
||||
"To work correctly, the app needs the following permissions. Please enable "
|
||||
"them in your phone settings, in Apps > Joplin > Permissions"
|
||||
@@ -1932,6 +1971,9 @@ msgstr "ليس لديك دفاتر ملاحظات حالياً. أنشئ واح
|
||||
msgid "Welcome"
|
||||
msgstr "مرحباً"
|
||||
|
||||
#~ msgid "Some items cannot be decrypted."
|
||||
#~ msgstr "لا يمكن فك تشفير بعض العناصر."
|
||||
|
||||
#~ msgid "%s (%s): %s"
|
||||
#~ msgstr "%s (%s): %s"
|
||||
|
||||
|
@@ -738,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"
|
||||
@@ -971,9 +974,6 @@ msgstr "Títol del bloc de notes:"
|
||||
msgid "Add or remove tags:"
|
||||
msgstr "Afegeix o suprimeix etiquetes:"
|
||||
|
||||
msgid "Separate each tag by a comma."
|
||||
msgstr "Separeu les etiquetes amb comes."
|
||||
|
||||
msgid "Rename notebook:"
|
||||
msgstr "Canvia el nom del bloc de notes:"
|
||||
|
||||
@@ -995,8 +995,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"
|
||||
@@ -1191,15 +1192,18 @@ msgstr "Blocs de notes"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Decrypting items: %d/%d"
|
||||
msgstr "Elements obtinguts: %d/%d."
|
||||
msgstr "Elements obtinguts: %d/%d"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Fetching resources: %d"
|
||||
msgstr "Recursos: %d."
|
||||
msgid "Fetching resources: %d/%d"
|
||||
msgstr "Recursos: %d/%d"
|
||||
|
||||
msgid "Please select where the sync status should be exported to"
|
||||
msgstr "Seleccioneu on s'hauria d'exportar l'estat de la sincronització"
|
||||
|
||||
msgid "Retry"
|
||||
msgstr ""
|
||||
|
||||
msgid "Add or remove tags"
|
||||
msgstr "Afegeix o suprimeix etiquetes"
|
||||
|
||||
@@ -1400,6 +1404,58 @@ msgid ""
|
||||
"more details: %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Synchronisation target"
|
||||
msgstr "Objectiu de sincronització"
|
||||
|
||||
msgid ""
|
||||
"The target to synchonise to. Each sync target may have additional parameters "
|
||||
"which are named as `sync.NUM.NAME` (all documented below)."
|
||||
msgstr ""
|
||||
"L'objectiu on se sincronitzarà. Cada objectiu pot tenir paràmetres "
|
||||
"addicionals que s'anomenen com a «sync.NUM.NAME» (es documenten a sota)."
|
||||
|
||||
msgid "Directory to synchronise with (absolute path)"
|
||||
msgstr "Directori on es farà la sincronització (camí absolut)"
|
||||
|
||||
msgid "Nextcloud WebDAV URL"
|
||||
msgstr "URL del Nextcloud WebDAV"
|
||||
|
||||
msgid "Nextcloud username"
|
||||
msgstr "Nom d'usuari del Nextcloud"
|
||||
|
||||
msgid "Nextcloud password"
|
||||
msgstr "Contrasenya del Nextcloud"
|
||||
|
||||
msgid "WebDAV URL"
|
||||
msgstr "URL de WebDAV"
|
||||
|
||||
msgid "WebDAV username"
|
||||
msgstr "Nom d'usuari WebDAV"
|
||||
|
||||
msgid "WebDAV password"
|
||||
msgstr "Contrasenya de WebDAV"
|
||||
|
||||
msgid "Attachment download behaviour"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"In \"Manual\" mode, attachments are downloaded only when you click on them. "
|
||||
"In \"Auto\", they are downloaded when you open the note. In \"Always\", all "
|
||||
"the attachments are downloaded whether you open the note or not."
|
||||
msgstr ""
|
||||
|
||||
msgid "Always"
|
||||
msgstr ""
|
||||
|
||||
msgid "Manual"
|
||||
msgstr ""
|
||||
|
||||
msgid "Auto"
|
||||
msgstr ""
|
||||
|
||||
msgid "Max concurrent connections"
|
||||
msgstr ""
|
||||
|
||||
msgid "Language"
|
||||
msgstr "Llengua"
|
||||
|
||||
@@ -1559,37 +1615,6 @@ msgstr ""
|
||||
msgid "Show advanced options"
|
||||
msgstr "Mostra les opcions avançades"
|
||||
|
||||
msgid "Synchronisation target"
|
||||
msgstr "Objectiu de sincronització"
|
||||
|
||||
msgid ""
|
||||
"The target to synchonise to. Each sync target may have additional parameters "
|
||||
"which are named as `sync.NUM.NAME` (all documented below)."
|
||||
msgstr ""
|
||||
"L'objectiu on se sincronitzarà. Cada objectiu pot tenir paràmetres "
|
||||
"addicionals que s'anomenen com a «sync.NUM.NAME» (es documenten a sota)."
|
||||
|
||||
msgid "Directory to synchronise with (absolute path)"
|
||||
msgstr "Directori on es farà la sincronització (camí absolut)"
|
||||
|
||||
msgid "Nextcloud WebDAV URL"
|
||||
msgstr "URL del Nextcloud WebDAV"
|
||||
|
||||
msgid "Nextcloud username"
|
||||
msgstr "Nom d'usuari del Nextcloud"
|
||||
|
||||
msgid "Nextcloud password"
|
||||
msgstr "Contrasenya del Nextcloud"
|
||||
|
||||
msgid "WebDAV URL"
|
||||
msgstr "URL de WebDAV"
|
||||
|
||||
msgid "WebDAV username"
|
||||
msgstr "Nom d'usuari WebDAV"
|
||||
|
||||
msgid "WebDAV password"
|
||||
msgstr "Contrasenya de WebDAV"
|
||||
|
||||
msgid "Custom TLS certificates"
|
||||
msgstr ""
|
||||
|
||||
@@ -1697,14 +1722,6 @@ msgstr ""
|
||||
msgid "Items that cannot be synchronised"
|
||||
msgstr "Elements que no s'han pogut sincronitzar"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "%s (%s) could not be uploaded: %s"
|
||||
msgstr "No s'ha pogut desar el bloc de notes: %s"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Item \"%s\" could not be downloaded: %s"
|
||||
msgstr "No s'ha pogut desar el bloc de notes: %s"
|
||||
|
||||
msgid ""
|
||||
"These items will remain on the device but will not be uploaded to the sync "
|
||||
"target. In order to find these items, either search for the title or the ID "
|
||||
@@ -1714,6 +1731,24 @@ msgstr ""
|
||||
"destinació de sincronització. Per a poder trobar aquests elements, podeu "
|
||||
"cercar pel títol o la ID (que es mostra entre claus a sobre)."
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "%s (%s) could not be uploaded: %s"
|
||||
msgstr "No s'ha pogut desar el bloc de notes: %s"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Item \"%s\" could not be downloaded: %s"
|
||||
msgstr "No s'ha pogut desar el bloc de notes: %s"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Items that cannot be decrypted"
|
||||
msgstr "Elements que no s'han pogut sincronitzar"
|
||||
|
||||
msgid ""
|
||||
"Joplin failed to decrypt these items multiple times, possibly because they "
|
||||
"are corrupted or too large. These items will remain on the device but Joplin "
|
||||
"will no longer attempt to decrypt them."
|
||||
msgstr ""
|
||||
|
||||
msgid "Sync status (synced items / total items)"
|
||||
msgstr "Estat de la sincronització (element sinc. / elements totals)"
|
||||
|
||||
@@ -1833,6 +1868,10 @@ msgstr "Etiquetes noves:"
|
||||
msgid "Type new tags or select from list"
|
||||
msgstr "Escriviu etiquetes noves o seleccioneu-ne de la llista"
|
||||
|
||||
#, fuzzy
|
||||
msgid "More information"
|
||||
msgstr "Configuració"
|
||||
|
||||
msgid ""
|
||||
"To work correctly, the app needs the following permissions. Please enable "
|
||||
"them in your phone settings, in Apps > Joplin > Permissions"
|
||||
@@ -1982,6 +2021,12 @@ msgstr ""
|
||||
msgid "Welcome"
|
||||
msgstr "Benvingut"
|
||||
|
||||
#~ msgid "Separate each tag by a comma."
|
||||
#~ msgstr "Separeu les etiquetes amb comes."
|
||||
|
||||
#~ msgid "Some items cannot be decrypted."
|
||||
#~ msgstr "Alguns elements no s'han pogut desxifrar."
|
||||
|
||||
#~ msgid "%s (%s): %s"
|
||||
#~ msgstr "%s (%s): %s"
|
||||
|
||||
|
@@ -719,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"
|
||||
@@ -948,9 +951,6 @@ msgstr "Název zápisníku:"
|
||||
msgid "Add or remove tags:"
|
||||
msgstr "Přidat či odebrat tagy:"
|
||||
|
||||
msgid "Separate each tag by a comma."
|
||||
msgstr "Tagy oddělujte čárkami."
|
||||
|
||||
msgid "Rename notebook:"
|
||||
msgstr "Přejmenovat zápisník:"
|
||||
|
||||
@@ -972,8 +972,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"
|
||||
@@ -1167,12 +1168,15 @@ 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"
|
||||
|
||||
msgid "Retry"
|
||||
msgstr ""
|
||||
|
||||
msgid "Add or remove tags"
|
||||
msgstr "Přidat či odebrat tagy"
|
||||
|
||||
@@ -1378,6 +1382,58 @@ msgstr ""
|
||||
"jste do něj zkopírovali veškerý obsah, jinak budou všechny soubory "
|
||||
"odstraněny! Další podrobnosti naleznete v FAQ: % s"
|
||||
|
||||
msgid "Synchronisation target"
|
||||
msgstr "Cíl synchronizace"
|
||||
|
||||
msgid ""
|
||||
"The target to synchonise to. Each sync target may have additional parameters "
|
||||
"which are named as `sync.NUM.NAME` (all documented below)."
|
||||
msgstr ""
|
||||
"Cíl synchronizace. Každý cíl může mít další parametry ve formátu `sync.NUM."
|
||||
"NAME` (dokumentace níže)."
|
||||
|
||||
msgid "Directory to synchronise with (absolute path)"
|
||||
msgstr "Složka k synchronizaci (absolutní cesta)"
|
||||
|
||||
msgid "Nextcloud WebDAV URL"
|
||||
msgstr "Nextcloud WebDAV URL"
|
||||
|
||||
msgid "Nextcloud username"
|
||||
msgstr "Nextcloud uživatelské jméno"
|
||||
|
||||
msgid "Nextcloud password"
|
||||
msgstr "Nextcloud heslo"
|
||||
|
||||
msgid "WebDAV URL"
|
||||
msgstr "WebDAV URL"
|
||||
|
||||
msgid "WebDAV username"
|
||||
msgstr "WebDAV uživatelské jméno"
|
||||
|
||||
msgid "WebDAV password"
|
||||
msgstr "WebDAV heslo"
|
||||
|
||||
msgid "Attachment download behaviour"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"In \"Manual\" mode, attachments are downloaded only when you click on them. "
|
||||
"In \"Auto\", they are downloaded when you open the note. In \"Always\", all "
|
||||
"the attachments are downloaded whether you open the note or not."
|
||||
msgstr ""
|
||||
|
||||
msgid "Always"
|
||||
msgstr ""
|
||||
|
||||
msgid "Manual"
|
||||
msgstr ""
|
||||
|
||||
msgid "Auto"
|
||||
msgstr ""
|
||||
|
||||
msgid "Max concurrent connections"
|
||||
msgstr ""
|
||||
|
||||
msgid "Language"
|
||||
msgstr "Jazyk"
|
||||
|
||||
@@ -1534,37 +1590,6 @@ msgstr ""
|
||||
msgid "Show advanced options"
|
||||
msgstr "Ukázat pokročilé volby"
|
||||
|
||||
msgid "Synchronisation target"
|
||||
msgstr "Cíl synchronizace"
|
||||
|
||||
msgid ""
|
||||
"The target to synchonise to. Each sync target may have additional parameters "
|
||||
"which are named as `sync.NUM.NAME` (all documented below)."
|
||||
msgstr ""
|
||||
"Cíl synchronizace. Každý cíl může mít další parametry ve formátu `sync.NUM."
|
||||
"NAME` (dokumentace níže)."
|
||||
|
||||
msgid "Directory to synchronise with (absolute path)"
|
||||
msgstr "Složka k synchronizaci (absolutní cesta)"
|
||||
|
||||
msgid "Nextcloud WebDAV URL"
|
||||
msgstr "Nextcloud WebDAV URL"
|
||||
|
||||
msgid "Nextcloud username"
|
||||
msgstr "Nextcloud uživatelské jméno"
|
||||
|
||||
msgid "Nextcloud password"
|
||||
msgstr "Nextcloud heslo"
|
||||
|
||||
msgid "WebDAV URL"
|
||||
msgstr "WebDAV URL"
|
||||
|
||||
msgid "WebDAV username"
|
||||
msgstr "WebDAV uživatelské jméno"
|
||||
|
||||
msgid "WebDAV password"
|
||||
msgstr "WebDAV heslo"
|
||||
|
||||
msgid "Custom TLS certificates"
|
||||
msgstr "Vlastní TLS certifikát"
|
||||
|
||||
@@ -1671,14 +1696,6 @@ msgstr ""
|
||||
msgid "Items that cannot be synchronised"
|
||||
msgstr "Položky jež nelze synchronizovat"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "%s (%s) could not be uploaded: %s"
|
||||
msgstr "Soubor se nepodařilo otevřít: %s"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Item \"%s\" could not be downloaded: %s"
|
||||
msgstr "Soubor se nepodařilo otevřít: %s"
|
||||
|
||||
msgid ""
|
||||
"These items will remain on the device but will not be uploaded to the sync "
|
||||
"target. In order to find these items, either search for the title or the ID "
|
||||
@@ -1688,6 +1705,24 @@ msgstr ""
|
||||
"synchronizace. Pro přístup k těmto souborům hledejte jejich název nebo ID (v "
|
||||
"hranatých závorkách)."
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "%s (%s) could not be uploaded: %s"
|
||||
msgstr "Soubor se nepodařilo otevřít: %s"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Item \"%s\" could not be downloaded: %s"
|
||||
msgstr "Soubor se nepodařilo otevřít: %s"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Items that cannot be decrypted"
|
||||
msgstr "Položky jež nelze synchronizovat"
|
||||
|
||||
msgid ""
|
||||
"Joplin failed to decrypt these items multiple times, possibly because they "
|
||||
"are corrupted or too large. These items will remain on the device but Joplin "
|
||||
"will no longer attempt to decrypt them."
|
||||
msgstr ""
|
||||
|
||||
msgid "Sync status (synced items / total items)"
|
||||
msgstr "Stav synchronizace (synchronizováno / celkem)"
|
||||
|
||||
@@ -1811,6 +1846,10 @@ msgstr "Nové tagy:"
|
||||
msgid "Type new tags or select from list"
|
||||
msgstr "Zadejte nové tagy, nebo vyberte existující ze seznamu"
|
||||
|
||||
#, fuzzy
|
||||
msgid "More information"
|
||||
msgstr "Nastavení"
|
||||
|
||||
msgid ""
|
||||
"To work correctly, the app needs the following permissions. Please enable "
|
||||
"them in your phone settings, in Apps > Joplin > Permissions"
|
||||
@@ -1955,6 +1994,12 @@ msgstr "Nemáte žádný zápisník. Vytvořte jeden kliknutím na tlačítko (+
|
||||
msgid "Welcome"
|
||||
msgstr "Vítejte"
|
||||
|
||||
#~ msgid "Separate each tag by a comma."
|
||||
#~ msgstr "Tagy oddělujte čárkami."
|
||||
|
||||
#~ msgid "Some items cannot be decrypted."
|
||||
#~ msgstr "Některé položky nelze rozšifrovat."
|
||||
|
||||
#~ msgid "%s (%s): %s"
|
||||
#~ msgstr "%s (%s): %s"
|
||||
|
||||
|
@@ -725,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"
|
||||
@@ -950,9 +953,6 @@ msgstr "Notesbogs titel:"
|
||||
msgid "Add or remove tags:"
|
||||
msgstr "Tilføj eller slet mærker:"
|
||||
|
||||
msgid "Separate each tag by a comma."
|
||||
msgstr "Adskil hver mærke med komma."
|
||||
|
||||
msgid "Rename notebook:"
|
||||
msgstr "Omdøb notesbog:"
|
||||
|
||||
@@ -976,8 +976,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"
|
||||
@@ -1167,15 +1168,18 @@ msgstr "Notesbøger"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Decrypting items: %d/%d"
|
||||
msgstr "Hentede emner: %d/%d."
|
||||
msgstr "Hentede emner: %d/%d"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Fetching resources: %d"
|
||||
msgstr "Ressourcer: %d."
|
||||
msgid "Fetching resources: %d/%d"
|
||||
msgstr "Ressourcer: %d/%d"
|
||||
|
||||
msgid "Please select where the sync status should be exported to"
|
||||
msgstr "Vælg hvor sync status skal eksporteres til"
|
||||
|
||||
msgid "Retry"
|
||||
msgstr ""
|
||||
|
||||
msgid "Add or remove tags"
|
||||
msgstr "Tilføj eller slet mærker"
|
||||
|
||||
@@ -1381,6 +1385,58 @@ msgid ""
|
||||
"more details: %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Synchronisation target"
|
||||
msgstr "Synkroniserings mål"
|
||||
|
||||
msgid ""
|
||||
"The target to synchonise to. Each sync target may have additional parameters "
|
||||
"which are named as `sync.NUM.NAME` (all documented below)."
|
||||
msgstr ""
|
||||
"Synkroniserings mål. Hver synk. mål kan have ekstra parametre som navngives "
|
||||
"som `sync.NUM.NAME` (se dokumentation herunder)."
|
||||
|
||||
msgid "Directory to synchronise with (absolute path)"
|
||||
msgstr "Mappe der skal synkroniseres med (absolut sti)"
|
||||
|
||||
msgid "Nextcloud WebDAV URL"
|
||||
msgstr "Nextcloud WebDAV URL"
|
||||
|
||||
msgid "Nextcloud username"
|
||||
msgstr "Nextcloud brugernavn"
|
||||
|
||||
msgid "Nextcloud password"
|
||||
msgstr "Nextcloud kodeord"
|
||||
|
||||
msgid "WebDAV URL"
|
||||
msgstr "WebDAV URL"
|
||||
|
||||
msgid "WebDAV username"
|
||||
msgstr "WebDAV brugernavn"
|
||||
|
||||
msgid "WebDAV password"
|
||||
msgstr "WebDAV kodeord"
|
||||
|
||||
msgid "Attachment download behaviour"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"In \"Manual\" mode, attachments are downloaded only when you click on them. "
|
||||
"In \"Auto\", they are downloaded when you open the note. In \"Always\", all "
|
||||
"the attachments are downloaded whether you open the note or not."
|
||||
msgstr ""
|
||||
|
||||
msgid "Always"
|
||||
msgstr ""
|
||||
|
||||
msgid "Manual"
|
||||
msgstr ""
|
||||
|
||||
msgid "Auto"
|
||||
msgstr ""
|
||||
|
||||
msgid "Max concurrent connections"
|
||||
msgstr ""
|
||||
|
||||
msgid "Language"
|
||||
msgstr "Sprog"
|
||||
|
||||
@@ -1541,37 +1597,6 @@ msgstr ""
|
||||
msgid "Show advanced options"
|
||||
msgstr "Vis avancerede indstillinger"
|
||||
|
||||
msgid "Synchronisation target"
|
||||
msgstr "Synkroniserings mål"
|
||||
|
||||
msgid ""
|
||||
"The target to synchonise to. Each sync target may have additional parameters "
|
||||
"which are named as `sync.NUM.NAME` (all documented below)."
|
||||
msgstr ""
|
||||
"Synkroniserings mål. Hver synk. mål kan have ekstra parametre som navngives "
|
||||
"som `sync.NUM.NAME` (se dokumentation herunder)."
|
||||
|
||||
msgid "Directory to synchronise with (absolute path)"
|
||||
msgstr "Mappe der skal synkroniseres med (absolut sti)"
|
||||
|
||||
msgid "Nextcloud WebDAV URL"
|
||||
msgstr "Nextcloud WebDAV URL"
|
||||
|
||||
msgid "Nextcloud username"
|
||||
msgstr "Nextcloud brugernavn"
|
||||
|
||||
msgid "Nextcloud password"
|
||||
msgstr "Nextcloud kodeord"
|
||||
|
||||
msgid "WebDAV URL"
|
||||
msgstr "WebDAV URL"
|
||||
|
||||
msgid "WebDAV username"
|
||||
msgstr "WebDAV brugernavn"
|
||||
|
||||
msgid "WebDAV password"
|
||||
msgstr "WebDAV kodeord"
|
||||
|
||||
msgid "Custom TLS certificates"
|
||||
msgstr ""
|
||||
|
||||
@@ -1679,14 +1704,6 @@ msgstr ""
|
||||
msgid "Items that cannot be synchronised"
|
||||
msgstr "Emner kan ikke synkroniseres"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "%s (%s) could not be uploaded: %s"
|
||||
msgstr "Notesbogen kan ikke gemmes: %s"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Item \"%s\" could not be downloaded: %s"
|
||||
msgstr "Notesbogen kan ikke gemmes: %s"
|
||||
|
||||
msgid ""
|
||||
"These items will remain on the device but will not be uploaded to the sync "
|
||||
"target. In order to find these items, either search for the title or the ID "
|
||||
@@ -1696,6 +1713,24 @@ msgstr ""
|
||||
"For at finde disse emner; enten søg efter titel eller ID (som er vist i "
|
||||
"klammer herover)"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "%s (%s) could not be uploaded: %s"
|
||||
msgstr "Notesbogen kan ikke gemmes: %s"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Item \"%s\" could not be downloaded: %s"
|
||||
msgstr "Notesbogen kan ikke gemmes: %s"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Items that cannot be decrypted"
|
||||
msgstr "Emner kan ikke synkroniseres"
|
||||
|
||||
msgid ""
|
||||
"Joplin failed to decrypt these items multiple times, possibly because they "
|
||||
"are corrupted or too large. These items will remain on the device but Joplin "
|
||||
"will no longer attempt to decrypt them."
|
||||
msgstr ""
|
||||
|
||||
msgid "Sync status (synced items / total items)"
|
||||
msgstr "Synk status (synk' emner / emner i alt)"
|
||||
|
||||
@@ -1816,6 +1851,10 @@ msgstr "Nye tags:"
|
||||
msgid "Type new tags or select from list"
|
||||
msgstr "Indtast nye tags eller vælg fra listen"
|
||||
|
||||
#, fuzzy
|
||||
msgid "More information"
|
||||
msgstr "Indstillinger"
|
||||
|
||||
msgid ""
|
||||
"To work correctly, the app needs the following permissions. Please enable "
|
||||
"them in your phone settings, in Apps > Joplin > Permissions"
|
||||
@@ -1957,6 +1996,12 @@ msgstr "Du har ingen notesbøger. Opret en ved at klikke på (+) knappen."
|
||||
msgid "Welcome"
|
||||
msgstr "Velkommen"
|
||||
|
||||
#~ msgid "Separate each tag by a comma."
|
||||
#~ msgstr "Adskil hver mærke med komma."
|
||||
|
||||
#~ msgid "Some items cannot be decrypted."
|
||||
#~ msgstr "Nogle emner kan ikke krypteres."
|
||||
|
||||
#~ msgid "%s (%s): %s"
|
||||
#~ msgstr "%s (%s): %s"
|
||||
|
||||
|
@@ -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."
|
||||
@@ -675,7 +675,7 @@ msgid "Quit"
|
||||
msgstr "Verlassen"
|
||||
|
||||
msgid "Close Window"
|
||||
msgstr ""
|
||||
msgstr "Fenster schließen"
|
||||
|
||||
msgid "&Edit"
|
||||
msgstr "&Bearbeiten"
|
||||
@@ -737,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"
|
||||
@@ -974,9 +977,6 @@ msgstr "Notizbuch-Titel:"
|
||||
msgid "Add or remove tags:"
|
||||
msgstr "Schlagwörter hinzufügen oder entfernen:"
|
||||
|
||||
msgid "Separate each tag by a comma."
|
||||
msgstr "Trenne jedes Schlagwort mit einem Komma."
|
||||
|
||||
msgid "Rename notebook:"
|
||||
msgstr "Notizbuch umbenennen:"
|
||||
|
||||
@@ -998,8 +998,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"
|
||||
@@ -1021,12 +1022,11 @@ msgstr "Standort"
|
||||
msgid "URL"
|
||||
msgstr "URL"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Note History"
|
||||
msgstr "Notizen-Liste"
|
||||
msgstr "Notizen-Verlauf"
|
||||
|
||||
msgid "Previous versions of this note"
|
||||
msgstr ""
|
||||
msgstr "Vorherige Version von dieser Notiz"
|
||||
|
||||
msgid "Note properties"
|
||||
msgstr "Notiz-Eigenschaften"
|
||||
@@ -1034,19 +1034,22 @@ msgstr "Notiz-Eigenschaften"
|
||||
#, javascript-format
|
||||
msgid "The note \"%s\" has been successfully restored to the notebook \"%s\"."
|
||||
msgstr ""
|
||||
"Die Notiz \"%s\" wurde erfolgreich wiederhergestellt und ist im Notizbuch "
|
||||
"\"%s\" verfügbar."
|
||||
|
||||
#, fuzzy
|
||||
msgid "This note has no history"
|
||||
msgstr "Diese Notiz wurde verändert:"
|
||||
msgstr "Diese Notiz hat keinen Verlauf"
|
||||
|
||||
msgid "Restore"
|
||||
msgstr ""
|
||||
msgstr "Wiederherstellen"
|
||||
|
||||
#, javascript-format
|
||||
msgid ""
|
||||
"Click \"%s\" to restore the note. It will be copied in the notebook named "
|
||||
"\"%s\". The current version of the note will not be replaced or modified."
|
||||
msgstr ""
|
||||
"Klicke \"%s\" um die Notiz wiederherzustellen. Sie wird in das Notizbuch \"%s"
|
||||
"\" kopiert. Die aktuelle Version der Notiz wird nicht ersetzt oder verändert."
|
||||
|
||||
msgid "Open..."
|
||||
msgstr "Öffne..."
|
||||
@@ -1200,13 +1203,16 @@ 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 ""
|
||||
"Bitte wähle aus, wohin der Synchronisations-Status exportiert werden soll"
|
||||
|
||||
msgid "Retry"
|
||||
msgstr ""
|
||||
|
||||
msgid "Add or remove tags"
|
||||
msgstr "Schlagwörter hinzufügen oder entfernen"
|
||||
|
||||
@@ -1361,7 +1367,7 @@ msgstr "Synchronisation ist bereits im Gange. Status: %s"
|
||||
|
||||
msgid ""
|
||||
"Unknown item type downloaded - please upgrade Joplin to the latest version"
|
||||
msgstr ""
|
||||
msgstr "Unbekannter Eintrags-Typ heruntergeladen - bitte aktualisiere Joplin"
|
||||
|
||||
msgid "Encrypted"
|
||||
msgstr "Verschlüsselt"
|
||||
@@ -1410,6 +1416,63 @@ msgstr ""
|
||||
"neuen Ablageort kopiert hast, sonst werden alle Dateien gelöscht! Lies auch "
|
||||
"die FAQs hierzu: %s"
|
||||
|
||||
msgid "Synchronisation target"
|
||||
msgstr "Synchronisationsziel"
|
||||
|
||||
msgid ""
|
||||
"The target to synchonise to. Each sync target may have additional parameters "
|
||||
"which are named as `sync.NUM.NAME` (all documented below)."
|
||||
msgstr ""
|
||||
"Das Ziel, mit dem synchronisiert werden soll. Jedes Synchronisationsziel "
|
||||
"kann zusätzliche Parameter haben, die als `sync.NUM.NAME` (alle unten "
|
||||
"dokumentiert) bezeichnet werden."
|
||||
|
||||
msgid "Directory to synchronise with (absolute path)"
|
||||
msgstr "Verzeichnis mit dem synchronisiert werden soll (absoluter Pfad)"
|
||||
|
||||
msgid "Nextcloud WebDAV URL"
|
||||
msgstr "Nextcloud WebDAV-URL"
|
||||
|
||||
msgid "Nextcloud username"
|
||||
msgstr "Nextcloud-Benutzername"
|
||||
|
||||
msgid "Nextcloud password"
|
||||
msgstr "Nextcloud-Passwort"
|
||||
|
||||
msgid "WebDAV URL"
|
||||
msgstr "WebDAV-URL"
|
||||
|
||||
msgid "WebDAV username"
|
||||
msgstr "WebDAV-Benutzername"
|
||||
|
||||
msgid "WebDAV password"
|
||||
msgstr "WebDAV-Passwort"
|
||||
|
||||
msgid "Attachment download behaviour"
|
||||
msgstr "Verhalten für das Herunterladen von Anhängen"
|
||||
|
||||
msgid ""
|
||||
"In \"Manual\" mode, attachments are downloaded only when you click on them. "
|
||||
"In \"Auto\", they are downloaded when you open the note. In \"Always\", all "
|
||||
"the attachments are downloaded whether you open the note or not."
|
||||
msgstr ""
|
||||
"Im \"Manuell\" Modus werden die Anhänge nur heruntergeladen wenn Du auf sie "
|
||||
"klickst. Bei \"Automatisch\" werden sie heruntergeladen sobald die Notiz "
|
||||
"geöffnet wird. Bei \"Immer\" werden die Anhänge heruntergeladen egal ob die "
|
||||
"Notiz geöffnet wird oder nicht."
|
||||
|
||||
msgid "Always"
|
||||
msgstr "Immer"
|
||||
|
||||
msgid "Manual"
|
||||
msgstr "Manuell"
|
||||
|
||||
msgid "Auto"
|
||||
msgstr "Automatisch"
|
||||
|
||||
msgid "Max concurrent connections"
|
||||
msgstr ""
|
||||
|
||||
msgid "Language"
|
||||
msgstr "Sprache"
|
||||
|
||||
@@ -1567,38 +1630,6 @@ msgstr ""
|
||||
msgid "Show advanced options"
|
||||
msgstr "Erweiterte Optionen anzeigen"
|
||||
|
||||
msgid "Synchronisation target"
|
||||
msgstr "Synchronisationsziel"
|
||||
|
||||
msgid ""
|
||||
"The target to synchonise to. Each sync target may have additional parameters "
|
||||
"which are named as `sync.NUM.NAME` (all documented below)."
|
||||
msgstr ""
|
||||
"Das Ziel, mit dem synchronisiert werden soll. Jedes Synchronisationsziel "
|
||||
"kann zusätzliche Parameter haben, die als `sync.NUM.NAME` (alle unten "
|
||||
"dokumentiert) bezeichnet werden."
|
||||
|
||||
msgid "Directory to synchronise with (absolute path)"
|
||||
msgstr "Verzeichnis mit dem synchronisiert werden soll (absoluter Pfad)"
|
||||
|
||||
msgid "Nextcloud WebDAV URL"
|
||||
msgstr "Nextcloud WebDAV-URL"
|
||||
|
||||
msgid "Nextcloud username"
|
||||
msgstr "Nextcloud-Benutzername"
|
||||
|
||||
msgid "Nextcloud password"
|
||||
msgstr "Nextcloud-Passwort"
|
||||
|
||||
msgid "WebDAV URL"
|
||||
msgstr "WebDAV-URL"
|
||||
|
||||
msgid "WebDAV username"
|
||||
msgstr "WebDAV-Benutzername"
|
||||
|
||||
msgid "WebDAV password"
|
||||
msgstr "WebDAV-Passwort"
|
||||
|
||||
msgid "Custom TLS certificates"
|
||||
msgstr "Benutzerdefinierte TLS-Zertifikate"
|
||||
|
||||
@@ -1617,19 +1648,18 @@ msgstr ""
|
||||
msgid "Ignore TLS certificate errors"
|
||||
msgstr "Ignoriere TLS-Zertifikatfehler"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Enable note history"
|
||||
msgstr "Aktiviere Fußnoten"
|
||||
msgstr "Aktiviere Notizen-Verlauf"
|
||||
|
||||
msgid "days"
|
||||
msgstr ""
|
||||
msgstr "Tage"
|
||||
|
||||
#, javascript-format
|
||||
msgid "%d days"
|
||||
msgstr ""
|
||||
msgstr "%d Tage"
|
||||
|
||||
msgid "Keep note history for"
|
||||
msgstr ""
|
||||
msgstr "Speicher Notizen-Verlauf für"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Invalid option value: \"%s\". Possible values are: %s."
|
||||
@@ -1704,19 +1734,11 @@ msgstr ""
|
||||
"Bitte wähle aus, wohin der Synchronisations-Status exportiert werden soll."
|
||||
|
||||
msgid "Restored Notes"
|
||||
msgstr ""
|
||||
msgstr "Wiederhergestellte Notizen"
|
||||
|
||||
msgid "Items that cannot be synchronised"
|
||||
msgstr "Objekte können nicht synchronisiert werden"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "%s (%s) could not be uploaded: %s"
|
||||
msgstr "Dieses Notizbuch konnte nicht geöffnet werden: %s"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Item \"%s\" could not be downloaded: %s"
|
||||
msgstr "Dieses Notizbuch konnte nicht geöffnet werden: %s"
|
||||
|
||||
msgid ""
|
||||
"These items will remain on the device but will not be uploaded to the sync "
|
||||
"target. In order to find these items, either search for the title or the ID "
|
||||
@@ -1726,6 +1748,24 @@ msgstr ""
|
||||
"Synchronisationsziel hochgeladen. Um diese Objekte zu finden, suchst du "
|
||||
"entweder nach dem Titel oder der ID (die oben in Klammern angezeigt wird)."
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s (%s) could not be uploaded: %s"
|
||||
msgstr "%s (%s) konnte nicht hochgeladen werden: %s"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Item \"%s\" could not be downloaded: %s"
|
||||
msgstr "Eintrag \"%s\" konnte nicht heruntergeladen werden: %s"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Items that cannot be decrypted"
|
||||
msgstr "Objekte können nicht synchronisiert werden"
|
||||
|
||||
msgid ""
|
||||
"Joplin failed to decrypt these items multiple times, possibly because they "
|
||||
"are corrupted or too large. These items will remain on the device but Joplin "
|
||||
"will no longer attempt to decrypt them."
|
||||
msgstr ""
|
||||
|
||||
msgid "Sync status (synced items / total items)"
|
||||
msgstr "Synchronisationsstatus (synchronisierte Objekte / gesamte Objekte)"
|
||||
|
||||
@@ -1851,6 +1891,10 @@ msgstr "Neue Schlagwörter:"
|
||||
msgid "Type new tags or select from list"
|
||||
msgstr "Neues Schlagwort eingeben oder aus der Liste auswählen"
|
||||
|
||||
#, fuzzy
|
||||
msgid "More information"
|
||||
msgstr "Konfiguration"
|
||||
|
||||
msgid ""
|
||||
"To work correctly, the app needs the following permissions. Please enable "
|
||||
"them in your phone settings, in Apps > Joplin > Permissions"
|
||||
@@ -2000,6 +2044,12 @@ msgstr ""
|
||||
msgid "Welcome"
|
||||
msgstr "Willkommen"
|
||||
|
||||
#~ msgid "Separate each tag by a comma."
|
||||
#~ msgstr "Trenne jedes Schlagwort mit einem Komma."
|
||||
|
||||
#~ msgid "Some items cannot be decrypted."
|
||||
#~ msgstr "Einige Objekte können nicht entschlüsselt werden."
|
||||
|
||||
#~ msgid "%s (%s): %s"
|
||||
#~ msgstr "%s (%s): %s"
|
||||
|
||||
|
@@ -646,6 +646,9 @@ msgstr ""
|
||||
msgid "Make a donation"
|
||||
msgstr ""
|
||||
|
||||
msgid "Toggle development tools"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Open %s"
|
||||
msgstr ""
|
||||
@@ -854,9 +857,6 @@ msgstr ""
|
||||
msgid "Add or remove tags:"
|
||||
msgstr ""
|
||||
|
||||
msgid "Separate each tag by a comma."
|
||||
msgstr ""
|
||||
|
||||
msgid "Rename notebook:"
|
||||
msgstr ""
|
||||
|
||||
@@ -878,7 +878,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"
|
||||
@@ -1068,12 +1068,15 @@ msgid "Decrypting items: %d/%d"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Fetching resources: %d"
|
||||
msgid "Fetching resources: %d/%d"
|
||||
msgstr ""
|
||||
|
||||
msgid "Please select where the sync status should be exported to"
|
||||
msgstr ""
|
||||
|
||||
msgid "Retry"
|
||||
msgstr ""
|
||||
|
||||
msgid "Add or remove tags"
|
||||
msgstr ""
|
||||
|
||||
@@ -1263,6 +1266,56 @@ msgid ""
|
||||
"more details: %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Synchronisation target"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"The target to synchonise to. Each sync target may have additional parameters "
|
||||
"which are named as `sync.NUM.NAME` (all documented below)."
|
||||
msgstr ""
|
||||
|
||||
msgid "Directory to synchronise with (absolute path)"
|
||||
msgstr ""
|
||||
|
||||
msgid "Nextcloud WebDAV URL"
|
||||
msgstr ""
|
||||
|
||||
msgid "Nextcloud username"
|
||||
msgstr ""
|
||||
|
||||
msgid "Nextcloud password"
|
||||
msgstr ""
|
||||
|
||||
msgid "WebDAV URL"
|
||||
msgstr ""
|
||||
|
||||
msgid "WebDAV username"
|
||||
msgstr ""
|
||||
|
||||
msgid "WebDAV password"
|
||||
msgstr ""
|
||||
|
||||
msgid "Attachment download behaviour"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"In \"Manual\" mode, attachments are downloaded only when you click on them. "
|
||||
"In \"Auto\", they are downloaded when you open the note. In \"Always\", all "
|
||||
"the attachments are downloaded whether you open the note or not."
|
||||
msgstr ""
|
||||
|
||||
msgid "Always"
|
||||
msgstr ""
|
||||
|
||||
msgid "Manual"
|
||||
msgstr ""
|
||||
|
||||
msgid "Auto"
|
||||
msgstr ""
|
||||
|
||||
msgid "Max concurrent connections"
|
||||
msgstr ""
|
||||
|
||||
msgid "Language"
|
||||
msgstr ""
|
||||
|
||||
@@ -1412,35 +1465,6 @@ msgstr ""
|
||||
msgid "Show advanced options"
|
||||
msgstr ""
|
||||
|
||||
msgid "Synchronisation target"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"The target to synchonise to. Each sync target may have additional parameters "
|
||||
"which are named as `sync.NUM.NAME` (all documented below)."
|
||||
msgstr ""
|
||||
|
||||
msgid "Directory to synchronise with (absolute path)"
|
||||
msgstr ""
|
||||
|
||||
msgid "Nextcloud WebDAV URL"
|
||||
msgstr ""
|
||||
|
||||
msgid "Nextcloud username"
|
||||
msgstr ""
|
||||
|
||||
msgid "Nextcloud password"
|
||||
msgstr ""
|
||||
|
||||
msgid "WebDAV URL"
|
||||
msgstr ""
|
||||
|
||||
msgid "WebDAV username"
|
||||
msgstr ""
|
||||
|
||||
msgid "WebDAV password"
|
||||
msgstr ""
|
||||
|
||||
msgid "Custom TLS certificates"
|
||||
msgstr ""
|
||||
|
||||
@@ -1540,6 +1564,12 @@ msgstr ""
|
||||
msgid "Items that cannot be synchronised"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"These items will remain on the device but will not be uploaded to the sync "
|
||||
"target. In order to find these items, either search for the title or the ID "
|
||||
"(which is displayed in brackets above)."
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s (%s) could not be uploaded: %s"
|
||||
msgstr ""
|
||||
@@ -1548,10 +1578,13 @@ msgstr ""
|
||||
msgid "Item \"%s\" could not be downloaded: %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Items that cannot be decrypted"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"These items will remain on the device but will not be uploaded to the sync "
|
||||
"target. In order to find these items, either search for the title or the ID "
|
||||
"(which is displayed in brackets above)."
|
||||
"Joplin failed to decrypt these items multiple times, possibly because they "
|
||||
"are corrupted or too large. These items will remain on the device but Joplin "
|
||||
"will no longer attempt to decrypt them."
|
||||
msgstr ""
|
||||
|
||||
msgid "Sync status (synced items / total items)"
|
||||
@@ -1669,6 +1702,9 @@ msgstr ""
|
||||
msgid "Type new tags or select from list"
|
||||
msgstr ""
|
||||
|
||||
msgid "More information"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"To work correctly, the app needs the following permissions. Please enable "
|
||||
"them in your phone settings, in Apps > Joplin > Permissions"
|
||||
|
@@ -652,6 +652,9 @@ msgstr ""
|
||||
msgid "Make a donation"
|
||||
msgstr ""
|
||||
|
||||
msgid "Toggle development tools"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Open %s"
|
||||
msgstr ""
|
||||
@@ -872,9 +875,6 @@ msgstr ""
|
||||
msgid "Add or remove tags:"
|
||||
msgstr ""
|
||||
|
||||
msgid "Separate each tag by a comma."
|
||||
msgstr ""
|
||||
|
||||
msgid "Rename notebook:"
|
||||
msgstr ""
|
||||
|
||||
@@ -896,7 +896,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"
|
||||
@@ -1086,12 +1086,15 @@ msgid "Decrypting items: %d/%d"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Fetching resources: %d"
|
||||
msgid "Fetching resources: %d/%d"
|
||||
msgstr ""
|
||||
|
||||
msgid "Please select where the sync status should be exported to"
|
||||
msgstr ""
|
||||
|
||||
msgid "Retry"
|
||||
msgstr ""
|
||||
|
||||
msgid "Add or remove tags"
|
||||
msgstr ""
|
||||
|
||||
@@ -1283,6 +1286,58 @@ msgid ""
|
||||
"more details: %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Synchronisation target"
|
||||
msgstr "Synchronization target"
|
||||
|
||||
msgid ""
|
||||
"The target to synchonise to. Each sync target may have additional parameters "
|
||||
"which are named as `sync.NUM.NAME` (all documented below)."
|
||||
msgstr ""
|
||||
"The target to synchonize to. Each sync target may have additional parameters "
|
||||
"which are named as `sync.NUM.NAME` (all documented below)."
|
||||
|
||||
msgid "Directory to synchronise with (absolute path)"
|
||||
msgstr "Directory to synchronize with (absolute path)"
|
||||
|
||||
msgid "Nextcloud WebDAV URL"
|
||||
msgstr ""
|
||||
|
||||
msgid "Nextcloud username"
|
||||
msgstr ""
|
||||
|
||||
msgid "Nextcloud password"
|
||||
msgstr ""
|
||||
|
||||
msgid "WebDAV URL"
|
||||
msgstr ""
|
||||
|
||||
msgid "WebDAV username"
|
||||
msgstr ""
|
||||
|
||||
msgid "WebDAV password"
|
||||
msgstr ""
|
||||
|
||||
msgid "Attachment download behaviour"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"In \"Manual\" mode, attachments are downloaded only when you click on them. "
|
||||
"In \"Auto\", they are downloaded when you open the note. In \"Always\", all "
|
||||
"the attachments are downloaded whether you open the note or not."
|
||||
msgstr ""
|
||||
|
||||
msgid "Always"
|
||||
msgstr ""
|
||||
|
||||
msgid "Manual"
|
||||
msgstr ""
|
||||
|
||||
msgid "Auto"
|
||||
msgstr ""
|
||||
|
||||
msgid "Max concurrent connections"
|
||||
msgstr ""
|
||||
|
||||
msgid "Language"
|
||||
msgstr ""
|
||||
|
||||
@@ -1435,37 +1490,6 @@ msgstr ""
|
||||
msgid "Show advanced options"
|
||||
msgstr ""
|
||||
|
||||
msgid "Synchronisation target"
|
||||
msgstr "Synchronization target"
|
||||
|
||||
msgid ""
|
||||
"The target to synchonise to. Each sync target may have additional parameters "
|
||||
"which are named as `sync.NUM.NAME` (all documented below)."
|
||||
msgstr ""
|
||||
"The target to synchonize to. Each sync target may have additional parameters "
|
||||
"which are named as `sync.NUM.NAME` (all documented below)."
|
||||
|
||||
msgid "Directory to synchronise with (absolute path)"
|
||||
msgstr "Directory to synchronize with (absolute path)"
|
||||
|
||||
msgid "Nextcloud WebDAV URL"
|
||||
msgstr ""
|
||||
|
||||
msgid "Nextcloud username"
|
||||
msgstr ""
|
||||
|
||||
msgid "Nextcloud password"
|
||||
msgstr ""
|
||||
|
||||
msgid "WebDAV URL"
|
||||
msgstr ""
|
||||
|
||||
msgid "WebDAV username"
|
||||
msgstr ""
|
||||
|
||||
msgid "WebDAV password"
|
||||
msgstr ""
|
||||
|
||||
msgid "Custom TLS certificates"
|
||||
msgstr ""
|
||||
|
||||
@@ -1565,6 +1589,12 @@ msgstr ""
|
||||
msgid "Items that cannot be synchronised"
|
||||
msgstr "Items that cannot be synchronized"
|
||||
|
||||
msgid ""
|
||||
"These items will remain on the device but will not be uploaded to the sync "
|
||||
"target. In order to find these items, either search for the title or the ID "
|
||||
"(which is displayed in brackets above)."
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s (%s) could not be uploaded: %s"
|
||||
msgstr ""
|
||||
@@ -1573,10 +1603,14 @@ msgstr ""
|
||||
msgid "Item \"%s\" could not be downloaded: %s"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Items that cannot be decrypted"
|
||||
msgstr "Items that cannot be synchronized"
|
||||
|
||||
msgid ""
|
||||
"These items will remain on the device but will not be uploaded to the sync "
|
||||
"target. In order to find these items, either search for the title or the ID "
|
||||
"(which is displayed in brackets above)."
|
||||
"Joplin failed to decrypt these items multiple times, possibly because they "
|
||||
"are corrupted or too large. These items will remain on the device but Joplin "
|
||||
"will no longer attempt to decrypt them."
|
||||
msgstr ""
|
||||
|
||||
msgid "Sync status (synced items / total items)"
|
||||
@@ -1699,6 +1733,9 @@ msgstr ""
|
||||
msgid "Type new tags or select from list"
|
||||
msgstr ""
|
||||
|
||||
msgid "More information"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"To work correctly, the app needs the following permissions. Please enable "
|
||||
"them in your phone settings, in Apps > Joplin > Permissions"
|
||||
|
@@ -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..."
|
||||
@@ -663,7 +665,7 @@ msgid "Quit"
|
||||
msgstr "Salir"
|
||||
|
||||
msgid "Close Window"
|
||||
msgstr ""
|
||||
msgstr "Cerrar Ventana"
|
||||
|
||||
msgid "&Edit"
|
||||
msgstr "&Editar"
|
||||
@@ -725,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"
|
||||
@@ -828,6 +833,8 @@ msgid ""
|
||||
"This authorisation token is only needed to allow third-party applications to "
|
||||
"access Joplin."
|
||||
msgstr ""
|
||||
"Este token de autorización se necesita solamente para permitir a "
|
||||
"aplicaciones de terceros acceder a Joplin."
|
||||
|
||||
#, javascript-format
|
||||
msgid "Notes and settings are stored in: %s"
|
||||
@@ -955,9 +962,6 @@ msgstr "Título de libreta:"
|
||||
msgid "Add or remove tags:"
|
||||
msgstr "Agregar o borrar etiquetas:"
|
||||
|
||||
msgid "Separate each tag by a comma."
|
||||
msgstr "Separar cada etiqueta por una coma."
|
||||
|
||||
msgid "Rename notebook:"
|
||||
msgstr "Renombrar libreta:"
|
||||
|
||||
@@ -979,8 +983,9 @@ msgstr "No se han podido sincronizar algunos de los elementos."
|
||||
msgid "View them now"
|
||||
msgstr "Verlos ahora"
|
||||
|
||||
msgid "Some items cannot be decrypted."
|
||||
msgstr "No se han podido descifrar algunos elementos."
|
||||
#, fuzzy
|
||||
msgid "One or more master keys need a password."
|
||||
msgstr "Introduzca la contraseña maestra:"
|
||||
|
||||
msgid "Set the password"
|
||||
msgstr "Establecer la contraseña"
|
||||
@@ -998,32 +1003,34 @@ msgstr "Localización"
|
||||
msgid "URL"
|
||||
msgstr "URL"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Note History"
|
||||
msgstr "Lista de notas"
|
||||
msgstr ""
|
||||
"Historial\n"
|
||||
" de notas"
|
||||
|
||||
msgid "Previous versions of this note"
|
||||
msgstr ""
|
||||
msgstr "Versiones anteriores de esta nota"
|
||||
|
||||
msgid "Note properties"
|
||||
msgstr "Propiedades de nota"
|
||||
|
||||
#, javascript-format
|
||||
msgid "The note \"%s\" has been successfully restored to the notebook \"%s\"."
|
||||
msgstr ""
|
||||
msgstr "La nota \"%s\" se ha restaurado correctamente en la libreta \"%s\"."
|
||||
|
||||
#, fuzzy
|
||||
msgid "This note has no history"
|
||||
msgstr "Esta nota ha sido modificada:"
|
||||
msgstr "Esta nota no dispone de historial"
|
||||
|
||||
msgid "Restore"
|
||||
msgstr ""
|
||||
msgstr "Restaurar"
|
||||
|
||||
#, javascript-format
|
||||
msgid ""
|
||||
"Click \"%s\" to restore the note. It will be copied in the notebook named "
|
||||
"\"%s\". The current version of the note will not be replaced or modified."
|
||||
msgstr ""
|
||||
"Pulse \"%s\" para restaurar la nota. Se copiará en la libreta \"%s\". La "
|
||||
"versión actual de la nota no se reemplazará ni se modificará."
|
||||
|
||||
msgid "Open..."
|
||||
msgstr "Abrir..."
|
||||
@@ -1176,12 +1183,15 @@ 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"
|
||||
|
||||
msgid "Retry"
|
||||
msgstr ""
|
||||
|
||||
msgid "Add or remove tags"
|
||||
msgstr "Añadir o borrar etiquetas"
|
||||
|
||||
@@ -1216,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"
|
||||
@@ -1335,6 +1347,8 @@ msgstr "La sincronización ya está en progreso. Estado: %s"
|
||||
msgid ""
|
||||
"Unknown item type downloaded - please upgrade Joplin to the latest version"
|
||||
msgstr ""
|
||||
"Se ha descargado un elemento de tipo desconocido - actualice Joplin a la "
|
||||
"última versión"
|
||||
|
||||
msgid "Encrypted"
|
||||
msgstr "Cifrado"
|
||||
@@ -1383,6 +1397,63 @@ msgstr ""
|
||||
"antes de sincronizarlo, de lo contrario todos los archivos serán eliminados. "
|
||||
"Consulte las preguntas frecuentes para obtener más detalles: %s"
|
||||
|
||||
msgid "Synchronisation target"
|
||||
msgstr "Destino de sincronización"
|
||||
|
||||
msgid ""
|
||||
"The target to synchonise to. Each sync target may have additional parameters "
|
||||
"which are named as `sync.NUM.NAME` (all documented below)."
|
||||
msgstr ""
|
||||
"El destino de la sincronización. Cada destino de la sincronización puede "
|
||||
"tener parámetros adicionales los cuales son llamados como `sync.NUM.NAME` "
|
||||
"(todos abajo documentados)."
|
||||
|
||||
msgid "Directory to synchronise with (absolute path)"
|
||||
msgstr "Directorio con el que sincronizarse (ruta completa)"
|
||||
|
||||
msgid "Nextcloud WebDAV URL"
|
||||
msgstr "Servidor WebDAV de Nextcloud"
|
||||
|
||||
msgid "Nextcloud username"
|
||||
msgstr "Usuario de Nextcloud"
|
||||
|
||||
msgid "Nextcloud password"
|
||||
msgstr "Contraseña de Nextcloud"
|
||||
|
||||
msgid "WebDAV URL"
|
||||
msgstr "Servidor WebDAV"
|
||||
|
||||
msgid "WebDAV username"
|
||||
msgstr "Usuario de WebDAV"
|
||||
|
||||
msgid "WebDAV password"
|
||||
msgstr "Contraseña de WebDAV"
|
||||
|
||||
msgid "Attachment download behaviour"
|
||||
msgstr "Comportamiento de descarga de adjuntos"
|
||||
|
||||
msgid ""
|
||||
"In \"Manual\" mode, attachments are downloaded only when you click on them. "
|
||||
"In \"Auto\", they are downloaded when you open the note. In \"Always\", all "
|
||||
"the attachments are downloaded whether you open the note or not."
|
||||
msgstr ""
|
||||
"En modo \"Manual\", los archivos adjuntos se descargan solamente al pulsar "
|
||||
"sobre ellos. En modo \"Auto\", se descargan cuando se abre la nota. En modo "
|
||||
"\"Always\", se descargan todos los archivos adjuntos aunque la nota no esté "
|
||||
"abierta."
|
||||
|
||||
msgid "Always"
|
||||
msgstr "Siempre"
|
||||
|
||||
msgid "Manual"
|
||||
msgstr "Manual"
|
||||
|
||||
msgid "Auto"
|
||||
msgstr "Automático"
|
||||
|
||||
msgid "Max concurrent connections"
|
||||
msgstr ""
|
||||
|
||||
msgid "Language"
|
||||
msgstr "Idioma"
|
||||
|
||||
@@ -1413,7 +1484,6 @@ msgstr "Ordenar notas por"
|
||||
msgid "Reverse sort order"
|
||||
msgstr "Invierte el orden"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Sort notebooks by"
|
||||
msgstr "Ordenar notas por"
|
||||
|
||||
@@ -1433,41 +1503,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"
|
||||
@@ -1543,38 +1612,6 @@ msgstr ""
|
||||
msgid "Show advanced options"
|
||||
msgstr "Mostrar opciones avanzadas"
|
||||
|
||||
msgid "Synchronisation target"
|
||||
msgstr "Destino de sincronización"
|
||||
|
||||
msgid ""
|
||||
"The target to synchonise to. Each sync target may have additional parameters "
|
||||
"which are named as `sync.NUM.NAME` (all documented below)."
|
||||
msgstr ""
|
||||
"El destino de la sincronización. Cada destino de la sincronización puede "
|
||||
"tener parámetros adicionales los cuales son llamados como `sync.NUM.NAME` "
|
||||
"(todos abajo documentados)."
|
||||
|
||||
msgid "Directory to synchronise with (absolute path)"
|
||||
msgstr "Directorio con el que sincronizarse (ruta completa)"
|
||||
|
||||
msgid "Nextcloud WebDAV URL"
|
||||
msgstr "Servidor WebDAV de Nextcloud"
|
||||
|
||||
msgid "Nextcloud username"
|
||||
msgstr "Usuario de Nextcloud"
|
||||
|
||||
msgid "Nextcloud password"
|
||||
msgstr "Contraseña de Nextcloud"
|
||||
|
||||
msgid "WebDAV URL"
|
||||
msgstr "Servidor WebDAV"
|
||||
|
||||
msgid "WebDAV username"
|
||||
msgstr "Usuario de WebDAV"
|
||||
|
||||
msgid "WebDAV password"
|
||||
msgstr "Contraseña de WebDAV"
|
||||
|
||||
msgid "Custom TLS certificates"
|
||||
msgstr "Certificados TLS personalizados"
|
||||
|
||||
@@ -1593,19 +1630,18 @@ msgstr ""
|
||||
msgid "Ignore TLS certificate errors"
|
||||
msgstr "Ignorar errores en certificados TLS"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Enable note history"
|
||||
msgstr "Habilitar cifrado"
|
||||
msgstr "Habilitar historial de notas"
|
||||
|
||||
msgid "days"
|
||||
msgstr ""
|
||||
msgstr "días"
|
||||
|
||||
#, javascript-format
|
||||
msgid "%d days"
|
||||
msgstr ""
|
||||
msgstr "%d días"
|
||||
|
||||
msgid "Keep note history for"
|
||||
msgstr ""
|
||||
msgstr "Mantener historial de la nota durante"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Invalid option value: \"%s\". Possible values are: %s."
|
||||
@@ -1624,7 +1660,7 @@ msgid "Note"
|
||||
msgstr "Nota"
|
||||
|
||||
msgid "Plugins"
|
||||
msgstr ""
|
||||
msgstr "Plugins"
|
||||
|
||||
msgid "Application"
|
||||
msgstr "Aplicación"
|
||||
@@ -1677,19 +1713,11 @@ msgid "Please specify the notebook where the notes should be imported to."
|
||||
msgstr "Por favor especifique la libreta donde las notas deben ser importadas."
|
||||
|
||||
msgid "Restored Notes"
|
||||
msgstr ""
|
||||
msgstr "Notas restauradas"
|
||||
|
||||
msgid "Items that cannot be synchronised"
|
||||
msgstr "Elementos que no se pueden sincronizar"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "%s (%s) could not be uploaded: %s"
|
||||
msgstr "No se ha podido abrir este archivo: %s"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Item \"%s\" could not be downloaded: %s"
|
||||
msgstr "No se ha podido abrir este archivo: %s"
|
||||
|
||||
msgid ""
|
||||
"These items will remain on the device but will not be uploaded to the sync "
|
||||
"target. In order to find these items, either search for the title or the ID "
|
||||
@@ -1699,6 +1727,24 @@ msgstr ""
|
||||
"destino de sincronización. Para encontrar dichos elementos busca en el "
|
||||
"título o en el ID (el cual se muestra arriba entre corchetes)."
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "%s (%s) could not be uploaded: %s"
|
||||
msgstr "No se ha podido subir el archivo %s (%s): %s"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Item \"%s\" could not be downloaded: %s"
|
||||
msgstr "No se ha podido abrir el archivo %s (%s): %s"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Items that cannot be decrypted"
|
||||
msgstr "Elementos que no se pueden sincronizar"
|
||||
|
||||
msgid ""
|
||||
"Joplin failed to decrypt these items multiple times, possibly because they "
|
||||
"are corrupted or too large. These items will remain on the device but Joplin "
|
||||
"will no longer attempt to decrypt them."
|
||||
msgstr ""
|
||||
|
||||
msgid "Sync status (synced items / total items)"
|
||||
msgstr "Estado de sincronización (elementos sincronizados/elementos totales)"
|
||||
|
||||
@@ -1821,6 +1867,10 @@ msgstr "Nuevas etiquetas:"
|
||||
msgid "Type new tags or select from list"
|
||||
msgstr "Escriba nuevas etiquetas o seleccionelas de la lista"
|
||||
|
||||
#, fuzzy
|
||||
msgid "More information"
|
||||
msgstr "Configuración"
|
||||
|
||||
msgid ""
|
||||
"To work correctly, the app needs the following permissions. Please enable "
|
||||
"them in your phone settings, in Apps > Joplin > Permissions"
|
||||
@@ -1969,6 +2019,12 @@ msgstr ""
|
||||
msgid "Welcome"
|
||||
msgstr "Bienvenido"
|
||||
|
||||
#~ msgid "Separate each tag by a comma."
|
||||
#~ msgstr "Separar cada etiqueta por una coma."
|
||||
|
||||
#~ msgid "Some items cannot be decrypted."
|
||||
#~ msgstr "No se han podido descifrar algunos elementos."
|
||||
|
||||
#~ msgid "%s (%s): %s"
|
||||
#~ msgstr "%s (%s): %s"
|
||||
|
||||
|
@@ -732,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"
|
||||
@@ -958,9 +961,6 @@ msgstr "Koadernoaren izenburua: "
|
||||
msgid "Add or remove tags:"
|
||||
msgstr "Gehitu edo ezabatu etiketak:"
|
||||
|
||||
msgid "Separate each tag by a comma."
|
||||
msgstr "Banatu etiketak koma erabiliaz."
|
||||
|
||||
msgid "Rename notebook:"
|
||||
msgstr "Berrizendatu koadernoa:"
|
||||
|
||||
@@ -984,8 +984,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"
|
||||
@@ -1179,16 +1180,19 @@ msgstr "Koadernoak"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Decrypting items: %d/%d"
|
||||
msgstr "Itemak eskuratuta: %d%d."
|
||||
msgstr "Itemak eskuratuta: %d/%d"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Fetching resources: %d"
|
||||
msgstr "Baliabideak: %d."
|
||||
msgid "Fetching resources: %d/%d"
|
||||
msgstr "Baliabideak: %d/%d"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Please select where the sync status should be exported to"
|
||||
msgstr "Aukeratu nora esportatu sinkronizazioaren egoera, mesedez"
|
||||
|
||||
msgid "Retry"
|
||||
msgstr ""
|
||||
|
||||
msgid "Add or remove tags"
|
||||
msgstr "Gehitu edo ezabatu etiketak"
|
||||
|
||||
@@ -1395,6 +1399,62 @@ msgid ""
|
||||
"more details: %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Synchronisation target"
|
||||
msgstr "Sinkronizazio helbudua"
|
||||
|
||||
msgid ""
|
||||
"The target to synchonise to. Each sync target may have additional parameters "
|
||||
"which are named as `sync.NUM.NAME` (all documented below)."
|
||||
msgstr ""
|
||||
"Sinkronizazio helburua. Sinkronizazio aukera bakoitzak izan ditzake "
|
||||
"parametro gehigarriak, horrela izendatuta `sync.NUM.NAME` (dena beherago "
|
||||
"dokumentatuta)."
|
||||
|
||||
msgid "Directory to synchronise with (absolute path)"
|
||||
msgstr "Sinkronizatzeko direktorioa (bide-izena osorik)"
|
||||
|
||||
msgid "Nextcloud WebDAV URL"
|
||||
msgstr "Nextcloud WebDAV URL"
|
||||
|
||||
msgid "Nextcloud username"
|
||||
msgstr "Nextcloud erabiltzaile-izena"
|
||||
|
||||
msgid "Nextcloud password"
|
||||
msgstr "Nextcloud pasahitza"
|
||||
|
||||
#, fuzzy
|
||||
msgid "WebDAV URL"
|
||||
msgstr "Nextcloud WebDAV URL"
|
||||
|
||||
#, fuzzy
|
||||
msgid "WebDAV username"
|
||||
msgstr "Nextcloud erabiltzaile-izena"
|
||||
|
||||
#, fuzzy
|
||||
msgid "WebDAV password"
|
||||
msgstr "Ezarri pasahitza"
|
||||
|
||||
msgid "Attachment download behaviour"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"In \"Manual\" mode, attachments are downloaded only when you click on them. "
|
||||
"In \"Auto\", they are downloaded when you open the note. In \"Always\", all "
|
||||
"the attachments are downloaded whether you open the note or not."
|
||||
msgstr ""
|
||||
|
||||
msgid "Always"
|
||||
msgstr ""
|
||||
|
||||
msgid "Manual"
|
||||
msgstr ""
|
||||
|
||||
msgid "Auto"
|
||||
msgstr ""
|
||||
|
||||
msgid "Max concurrent connections"
|
||||
msgstr ""
|
||||
|
||||
msgid "Language"
|
||||
msgstr "Hizkuntza"
|
||||
|
||||
@@ -1557,41 +1617,6 @@ msgstr ""
|
||||
msgid "Show advanced options"
|
||||
msgstr "Erakutsi aukera aurreratuak"
|
||||
|
||||
msgid "Synchronisation target"
|
||||
msgstr "Sinkronizazio helbudua"
|
||||
|
||||
msgid ""
|
||||
"The target to synchonise to. Each sync target may have additional parameters "
|
||||
"which are named as `sync.NUM.NAME` (all documented below)."
|
||||
msgstr ""
|
||||
"Sinkronizazio helburua. Sinkronizazio aukera bakoitzak izan ditzake "
|
||||
"parametro gehigarriak, horrela izendatuta `sync.NUM.NAME` (dena beherago "
|
||||
"dokumentatuta)."
|
||||
|
||||
msgid "Directory to synchronise with (absolute path)"
|
||||
msgstr "Sinkronizatzeko direktorioa (bide-izena osorik)"
|
||||
|
||||
msgid "Nextcloud WebDAV URL"
|
||||
msgstr "Nextcloud WebDAV URL"
|
||||
|
||||
msgid "Nextcloud username"
|
||||
msgstr "Nextcloud erabiltzaile-izena"
|
||||
|
||||
msgid "Nextcloud password"
|
||||
msgstr "Nextcloud pasahitza"
|
||||
|
||||
#, fuzzy
|
||||
msgid "WebDAV URL"
|
||||
msgstr "Nextcloud WebDAV URL"
|
||||
|
||||
#, fuzzy
|
||||
msgid "WebDAV username"
|
||||
msgstr "Nextcloud erabiltzaile-izena"
|
||||
|
||||
#, fuzzy
|
||||
msgid "WebDAV password"
|
||||
msgstr "Ezarri pasahitza"
|
||||
|
||||
msgid "Custom TLS certificates"
|
||||
msgstr ""
|
||||
|
||||
@@ -1700,6 +1725,14 @@ msgstr ""
|
||||
msgid "Items that cannot be synchronised"
|
||||
msgstr "Itemok ezin sinkronizatu"
|
||||
|
||||
msgid ""
|
||||
"These items will remain on the device but will not be uploaded to the sync "
|
||||
"target. In order to find these items, either search for the title or the ID "
|
||||
"(which is displayed in brackets above)."
|
||||
msgstr ""
|
||||
"Itemok gailuan geratuko dira baina ez dira sinkronizatuko. Horiek aurkitzeko "
|
||||
"bilaketak egin titulu edo goiko parentesien arteko IDaren arabera."
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "%s (%s) could not be uploaded: %s"
|
||||
msgstr "Koadernoa ezin gorde daiteke: %s"
|
||||
@@ -1708,13 +1741,15 @@ msgstr "Koadernoa ezin gorde daiteke: %s"
|
||||
msgid "Item \"%s\" could not be downloaded: %s"
|
||||
msgstr "Koadernoa ezin gorde daiteke: %s"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Items that cannot be decrypted"
|
||||
msgstr "Itemok ezin sinkronizatu"
|
||||
|
||||
msgid ""
|
||||
"These items will remain on the device but will not be uploaded to the sync "
|
||||
"target. In order to find these items, either search for the title or the ID "
|
||||
"(which is displayed in brackets above)."
|
||||
"Joplin failed to decrypt these items multiple times, possibly because they "
|
||||
"are corrupted or too large. These items will remain on the device but Joplin "
|
||||
"will no longer attempt to decrypt them."
|
||||
msgstr ""
|
||||
"Itemok gailuan geratuko dira baina ez dira sinkronizatuko. Horiek aurkitzeko "
|
||||
"bilaketak egin titulu edo goiko parentesien arteko IDaren arabera."
|
||||
|
||||
msgid "Sync status (synced items / total items)"
|
||||
msgstr "Sinkronizazio egoera (sinkronizatutako itemak/itemak guztira)"
|
||||
@@ -1836,6 +1871,10 @@ msgstr ""
|
||||
msgid "Type new tags or select from list"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "More information"
|
||||
msgstr "Konfigurazioa"
|
||||
|
||||
msgid ""
|
||||
"To work correctly, the app needs the following permissions. Please enable "
|
||||
"them in your phone settings, in Apps > Joplin > Permissions"
|
||||
@@ -1978,6 +2017,12 @@ msgstr "Oraindik ez duzu koadernorik. Sortu bat (+) botoian sakatuta."
|
||||
msgid "Welcome"
|
||||
msgstr "Ongi etorri!"
|
||||
|
||||
#~ msgid "Separate each tag by a comma."
|
||||
#~ msgstr "Banatu etiketak koma erabiliaz."
|
||||
|
||||
#~ msgid "Some items cannot be decrypted."
|
||||
#~ msgstr "Zenbait item ezin dira deszifratu."
|
||||
|
||||
#~ msgid "%s (%s): %s"
|
||||
#~ msgstr "%s (%s): %s"
|
||||
|
||||
|
1873
CliClient/locales/fa.po
Normal file
1873
CliClient/locales/fa.po
Normal file
File diff suppressed because it is too large
Load Diff
@@ -13,7 +13,7 @@ msgstr ""
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Generator: Poedit 2.2.1\n"
|
||||
"X-Generator: Poedit 2.0.3\n"
|
||||
|
||||
msgid "To delete a tag, untag the associated notes."
|
||||
msgstr "Pour supprimer une vignette, enlever là des notes associées."
|
||||
@@ -660,7 +660,7 @@ msgid "Quit"
|
||||
msgstr "Quitter"
|
||||
|
||||
msgid "Close Window"
|
||||
msgstr ""
|
||||
msgstr "Fermer la fenêtre"
|
||||
|
||||
msgid "&Edit"
|
||||
msgstr "&Édition"
|
||||
@@ -722,6 +722,9 @@ msgstr "Documentation en ligne"
|
||||
msgid "Make a donation"
|
||||
msgstr "Faire un don"
|
||||
|
||||
msgid "Toggle development tools"
|
||||
msgstr "Monter/Cacher les outils de développement"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Open %s"
|
||||
msgstr "Ouvrir %s"
|
||||
@@ -959,9 +962,6 @@ msgstr "Titre du carnet :"
|
||||
msgid "Add or remove tags:"
|
||||
msgstr "Modifier les étiquettes :"
|
||||
|
||||
msgid "Separate each tag by a comma."
|
||||
msgstr "Séparez chaque étiquette par une virgule."
|
||||
|
||||
msgid "Rename notebook:"
|
||||
msgstr "Renommer le carnet :"
|
||||
|
||||
@@ -983,8 +983,8 @@ msgstr "Certains objets ne peuvent être synchronisés."
|
||||
msgid "View them now"
|
||||
msgstr "Les voir maintenant"
|
||||
|
||||
msgid "Some items cannot be decrypted."
|
||||
msgstr "Certains objets ne peuvent être déchiffrés."
|
||||
msgid "One or more master keys need a password."
|
||||
msgstr "L'une des clefs maîtres requiert un mot de passe :"
|
||||
|
||||
msgid "Set the password"
|
||||
msgstr "Définir le mot de passe"
|
||||
@@ -1005,32 +1005,33 @@ msgstr "Lieu"
|
||||
msgid "URL"
|
||||
msgstr "URL"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Note History"
|
||||
msgstr "Liste de notes"
|
||||
msgstr "Historique des notes"
|
||||
|
||||
msgid "Previous versions of this note"
|
||||
msgstr ""
|
||||
msgstr "Versions précédentes de cette note"
|
||||
|
||||
msgid "Note properties"
|
||||
msgstr "Propriétés de la note"
|
||||
|
||||
#, javascript-format
|
||||
msgid "The note \"%s\" has been successfully restored to the notebook \"%s\"."
|
||||
msgstr ""
|
||||
msgstr "La note \"%s\" a été restaurée dans le carnet \"%s\"."
|
||||
|
||||
#, fuzzy
|
||||
msgid "This note has no history"
|
||||
msgstr "Cette note a été modifiée :"
|
||||
msgstr "Cette note n'a pas d'historique"
|
||||
|
||||
msgid "Restore"
|
||||
msgstr ""
|
||||
msgstr "Restaurer"
|
||||
|
||||
#, javascript-format
|
||||
msgid ""
|
||||
"Click \"%s\" to restore the note. It will be copied in the notebook named "
|
||||
"\"%s\". The current version of the note will not be replaced or modified."
|
||||
msgstr ""
|
||||
"Cliquez sur \"%s\" pour restaurer cette note. Elle sera copiée dans le "
|
||||
"carnet \"%s\". La version actuelle de la note ne sera pas replacée ou "
|
||||
"modifiée."
|
||||
|
||||
msgid "Open..."
|
||||
msgstr "Ouvrir..."
|
||||
@@ -1185,13 +1186,16 @@ msgid "Decrypting items: %d/%d"
|
||||
msgstr "Déchiffrement des objets : %d/%d"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Fetching resources: %d"
|
||||
msgstr "Tél. ressources : %d"
|
||||
msgid "Fetching resources: %d/%d"
|
||||
msgstr "Tél. ressources : %d/%d"
|
||||
|
||||
msgid "Please select where the sync status should be exported to"
|
||||
msgstr ""
|
||||
"Veuillez sélectionner un répertoire ou exporter l'état de la synchronisation"
|
||||
|
||||
msgid "Retry"
|
||||
msgstr "Réessayer"
|
||||
|
||||
msgid "Add or remove tags"
|
||||
msgstr "Gérer les étiquettes"
|
||||
|
||||
@@ -1346,7 +1350,7 @@ msgstr "La synchronisation est déjà en cours. État : %s"
|
||||
|
||||
msgid ""
|
||||
"Unknown item type downloaded - please upgrade Joplin to the latest version"
|
||||
msgstr ""
|
||||
msgstr "Objet inconnu téléchargé - veuillez mettre Joplin à jour"
|
||||
|
||||
msgid "Encrypted"
|
||||
msgstr "Chiffré"
|
||||
@@ -1394,6 +1398,63 @@ msgstr ""
|
||||
"de synchroniser, sinon tous les fichiers seront supprimés ! Consulter la FAQ "
|
||||
"pour plus de détails : %s"
|
||||
|
||||
msgid "Synchronisation target"
|
||||
msgstr "Cible de la synchronisation"
|
||||
|
||||
msgid ""
|
||||
"The target to synchonise to. Each sync target may have additional parameters "
|
||||
"which are named as `sync.NUM.NAME` (all documented below)."
|
||||
msgstr ""
|
||||
"La cible avec laquelle synchroniser. Chaque cible de synchronisation peut "
|
||||
"avoir des paramètres supplémentaires sous le nom `sync.NUM.NOM` (documentés "
|
||||
"ci-dessous)."
|
||||
|
||||
msgid "Directory to synchronise with (absolute path)"
|
||||
msgstr "Répertoire avec lequel synchroniser (chemin absolu)"
|
||||
|
||||
msgid "Nextcloud WebDAV URL"
|
||||
msgstr "Nextcloud : URL WebDAV"
|
||||
|
||||
msgid "Nextcloud username"
|
||||
msgstr "Nextcloud : Nom utilisateur"
|
||||
|
||||
msgid "Nextcloud password"
|
||||
msgstr "Nextcloud : Mot de passe"
|
||||
|
||||
msgid "WebDAV URL"
|
||||
msgstr "WebDAV : URL"
|
||||
|
||||
msgid "WebDAV username"
|
||||
msgstr "WebDAV : Nom utilisateur"
|
||||
|
||||
msgid "WebDAV password"
|
||||
msgstr "WebDAV : Mot de passe"
|
||||
|
||||
msgid "Attachment download behaviour"
|
||||
msgstr "Téléchargement des ressources"
|
||||
|
||||
msgid ""
|
||||
"In \"Manual\" mode, attachments are downloaded only when you click on them. "
|
||||
"In \"Auto\", they are downloaded when you open the note. In \"Always\", all "
|
||||
"the attachments are downloaded whether you open the note or not."
|
||||
msgstr ""
|
||||
"En mode \"manuel\", les ressources sont téléchargées uniquement lorsque vous "
|
||||
"cliquez dessus. En mode \"auto\", 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 "Max concurrent connections"
|
||||
msgstr "Nombre maxi de connections simultanées"
|
||||
|
||||
msgid "Language"
|
||||
msgstr "Langue"
|
||||
|
||||
@@ -1551,38 +1612,6 @@ msgstr ""
|
||||
msgid "Show advanced options"
|
||||
msgstr "Montrer les options avancées"
|
||||
|
||||
msgid "Synchronisation target"
|
||||
msgstr "Cible de la synchronisation"
|
||||
|
||||
msgid ""
|
||||
"The target to synchonise to. Each sync target may have additional parameters "
|
||||
"which are named as `sync.NUM.NAME` (all documented below)."
|
||||
msgstr ""
|
||||
"La cible avec laquelle synchroniser. Chaque cible de synchronisation peut "
|
||||
"avoir des paramètres supplémentaires sous le nom `sync.NUM.NOM` (documentés "
|
||||
"ci-dessous)."
|
||||
|
||||
msgid "Directory to synchronise with (absolute path)"
|
||||
msgstr "Répertoire avec lequel synchroniser (chemin absolu)"
|
||||
|
||||
msgid "Nextcloud WebDAV URL"
|
||||
msgstr "Nextcloud : URL WebDAV"
|
||||
|
||||
msgid "Nextcloud username"
|
||||
msgstr "Nextcloud : Nom utilisateur"
|
||||
|
||||
msgid "Nextcloud password"
|
||||
msgstr "Nextcloud : Mot de passe"
|
||||
|
||||
msgid "WebDAV URL"
|
||||
msgstr "WebDAV : URL"
|
||||
|
||||
msgid "WebDAV username"
|
||||
msgstr "WebDAV : Nom utilisateur"
|
||||
|
||||
msgid "WebDAV password"
|
||||
msgstr "WebDAV : Mot de passe"
|
||||
|
||||
msgid "Custom TLS certificates"
|
||||
msgstr "Certificats TLS personnalisés"
|
||||
|
||||
@@ -1601,19 +1630,18 @@ msgstr ""
|
||||
msgid "Ignore TLS certificate errors"
|
||||
msgstr "Ignorer les erreurs de certificats TLS"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Enable note history"
|
||||
msgstr "Activer les notes de bas de page"
|
||||
msgstr "Activer l'historique des notes"
|
||||
|
||||
msgid "days"
|
||||
msgstr ""
|
||||
msgstr "jours"
|
||||
|
||||
#, javascript-format
|
||||
msgid "%d days"
|
||||
msgstr ""
|
||||
msgstr "%d jours"
|
||||
|
||||
msgid "Keep note history for"
|
||||
msgstr ""
|
||||
msgstr "Garder l'historique des notes pour"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Invalid option value: \"%s\". Possible values are: %s."
|
||||
@@ -1685,19 +1713,11 @@ msgid "Please specify the notebook where the notes should be imported to."
|
||||
msgstr "Veuillez sélectionner le carnet où les notes doivent être importées."
|
||||
|
||||
msgid "Restored Notes"
|
||||
msgstr ""
|
||||
msgstr "Notes restaurées"
|
||||
|
||||
msgid "Items that cannot be synchronised"
|
||||
msgstr "Objets qui ne peuvent pas être synchronisés"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "%s (%s) could not be uploaded: %s"
|
||||
msgstr "Ce fichier n'a pas pu être ouvert : %s"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Item \"%s\" could not be downloaded: %s"
|
||||
msgstr "Ce fichier n'a pas pu être ouvert : %s"
|
||||
|
||||
msgid ""
|
||||
"These items will remain on the device but will not be uploaded to the sync "
|
||||
"target. In order to find these items, either search for the title or the ID "
|
||||
@@ -1707,6 +1727,26 @@ msgstr ""
|
||||
"de la synchronisation. Pour trouver ces objets, faite une recherche sur le "
|
||||
"titre ou l'identifiant de l'objet (affiché ci-dessus entre parenthèses)."
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s (%s) could not be uploaded: %s"
|
||||
msgstr "%s (%s) n'a pas pu être envoyé : %s"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Item \"%s\" could not be downloaded: %s"
|
||||
msgstr "L'objet \"%s\" n'a pas pu être téléchargé : %s"
|
||||
|
||||
msgid "Items that cannot be decrypted"
|
||||
msgstr "Objets qui ne peuvent pas être déchiffrés"
|
||||
|
||||
msgid ""
|
||||
"Joplin failed to decrypt these items multiple times, possibly because they "
|
||||
"are corrupted or too large. These items will remain on the device but Joplin "
|
||||
"will no longer attempt to decrypt them."
|
||||
msgstr ""
|
||||
"Joplin n'a pas pu déchiffrer ces objets à plusieurs reprises, peut-être "
|
||||
"parce qu'ils sont corrompus ou trop larges. Ces objets vont rester sur "
|
||||
"l'appareil mais Joplin n'essayera plus de les déchiffrer."
|
||||
|
||||
msgid "Sync status (synced items / total items)"
|
||||
msgstr "Status de la synchronisation (objets synchro. / total)"
|
||||
|
||||
@@ -1831,6 +1871,9 @@ msgstr "Nouvelles étiquettes :"
|
||||
msgid "Type new tags or select from list"
|
||||
msgstr "Entrez de nouvelles étiquettes ou sélectionnez de la liste"
|
||||
|
||||
msgid "More information"
|
||||
msgstr "Plus d'information"
|
||||
|
||||
msgid ""
|
||||
"To work correctly, the app needs the following permissions. Please enable "
|
||||
"them in your phone settings, in Apps > Joplin > Permissions"
|
||||
@@ -1979,6 +2022,12 @@ msgstr ""
|
||||
msgid "Welcome"
|
||||
msgstr "Bienvenue"
|
||||
|
||||
#~ msgid "Separate each tag by a comma."
|
||||
#~ msgstr "Séparez chaque étiquette par une virgule."
|
||||
|
||||
#~ msgid "Some items cannot be decrypted."
|
||||
#~ msgstr "Certains objets ne peuvent être déchiffrés."
|
||||
|
||||
#~ msgid "%s (%s): %s"
|
||||
#~ msgstr "%s (%s) : %s"
|
||||
|
||||
|
@@ -725,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"
|
||||
@@ -948,9 +951,6 @@ msgstr "Título do caderno:"
|
||||
msgid "Add or remove tags:"
|
||||
msgstr "Engadir ou eliminar etiquetas:"
|
||||
|
||||
msgid "Separate each tag by a comma."
|
||||
msgstr "Separar cada etiqueta por unha coma."
|
||||
|
||||
msgid "Rename notebook:"
|
||||
msgstr "Renomear caderno:"
|
||||
|
||||
@@ -973,8 +973,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"
|
||||
@@ -1167,15 +1168,18 @@ msgstr "Cadernos"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Decrypting items: %d/%d"
|
||||
msgstr "Elementos obtidos: %d/%d."
|
||||
msgstr "Elementos obtidos: %d/%d"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Fetching resources: %d"
|
||||
msgstr "Recursos: %d."
|
||||
msgid "Fetching resources: %d/%d"
|
||||
msgstr "Recursos: %d/%d"
|
||||
|
||||
msgid "Please select where the sync status should be exported to"
|
||||
msgstr "Seleccione onde exportar o estado da sincronización"
|
||||
|
||||
msgid "Retry"
|
||||
msgstr ""
|
||||
|
||||
msgid "Add or remove tags"
|
||||
msgstr "Engadir ou eliminar etiquetas"
|
||||
|
||||
@@ -1381,6 +1385,58 @@ msgid ""
|
||||
"more details: %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Synchronisation target"
|
||||
msgstr "Destino da sincronización"
|
||||
|
||||
msgid ""
|
||||
"The target to synchonise to. Each sync target may have additional parameters "
|
||||
"which are named as `sync.NUM.NAME` (all documented below)."
|
||||
msgstr ""
|
||||
"Destino co que sincronizar. Cada destino da sincronización pode ter "
|
||||
"parámetros adicionais que se chaman «sync.NUM.NAME» (documentados arriba)."
|
||||
|
||||
msgid "Directory to synchronise with (absolute path)"
|
||||
msgstr "Cartafol a sincronizar con (ruta absoluta)"
|
||||
|
||||
msgid "Nextcloud WebDAV URL"
|
||||
msgstr "URL de Nextcloud WebDAV"
|
||||
|
||||
msgid "Nextcloud username"
|
||||
msgstr "Usuario de Nextcloud"
|
||||
|
||||
msgid "Nextcloud password"
|
||||
msgstr "Contrasinal do Nextcloud"
|
||||
|
||||
msgid "WebDAV URL"
|
||||
msgstr "URL do WebDAV"
|
||||
|
||||
msgid "WebDAV username"
|
||||
msgstr "Usuario de WebDAV"
|
||||
|
||||
msgid "WebDAV password"
|
||||
msgstr "Contrasinal do WebDAV"
|
||||
|
||||
msgid "Attachment download behaviour"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"In \"Manual\" mode, attachments are downloaded only when you click on them. "
|
||||
"In \"Auto\", they are downloaded when you open the note. In \"Always\", all "
|
||||
"the attachments are downloaded whether you open the note or not."
|
||||
msgstr ""
|
||||
|
||||
msgid "Always"
|
||||
msgstr ""
|
||||
|
||||
msgid "Manual"
|
||||
msgstr ""
|
||||
|
||||
msgid "Auto"
|
||||
msgstr ""
|
||||
|
||||
msgid "Max concurrent connections"
|
||||
msgstr ""
|
||||
|
||||
msgid "Language"
|
||||
msgstr "Idioma"
|
||||
|
||||
@@ -1541,37 +1597,6 @@ msgstr ""
|
||||
msgid "Show advanced options"
|
||||
msgstr "Mostrar opcións avanzadas"
|
||||
|
||||
msgid "Synchronisation target"
|
||||
msgstr "Destino da sincronización"
|
||||
|
||||
msgid ""
|
||||
"The target to synchonise to. Each sync target may have additional parameters "
|
||||
"which are named as `sync.NUM.NAME` (all documented below)."
|
||||
msgstr ""
|
||||
"Destino co que sincronizar. Cada destino da sincronización pode ter "
|
||||
"parámetros adicionais que se chaman «sync.NUM.NAME» (documentados arriba)."
|
||||
|
||||
msgid "Directory to synchronise with (absolute path)"
|
||||
msgstr "Cartafol a sincronizar con (ruta absoluta)"
|
||||
|
||||
msgid "Nextcloud WebDAV URL"
|
||||
msgstr "URL de Nextcloud WebDAV"
|
||||
|
||||
msgid "Nextcloud username"
|
||||
msgstr "Usuario de Nextcloud"
|
||||
|
||||
msgid "Nextcloud password"
|
||||
msgstr "Contrasinal do Nextcloud"
|
||||
|
||||
msgid "WebDAV URL"
|
||||
msgstr "URL do WebDAV"
|
||||
|
||||
msgid "WebDAV username"
|
||||
msgstr "Usuario de WebDAV"
|
||||
|
||||
msgid "WebDAV password"
|
||||
msgstr "Contrasinal do WebDAV"
|
||||
|
||||
msgid "Custom TLS certificates"
|
||||
msgstr ""
|
||||
|
||||
@@ -1679,14 +1704,6 @@ msgstr ""
|
||||
msgid "Items that cannot be synchronised"
|
||||
msgstr "Elementos que non se poden sincronizar"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "%s (%s) could not be uploaded: %s"
|
||||
msgstr "Non foi posíbel gardar o caderno: %s"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Item \"%s\" could not be downloaded: %s"
|
||||
msgstr "Non foi posíbel gardar o caderno: %s"
|
||||
|
||||
msgid ""
|
||||
"These items will remain on the device but will not be uploaded to the sync "
|
||||
"target. In order to find these items, either search for the title or the ID "
|
||||
@@ -1696,6 +1713,24 @@ msgstr ""
|
||||
"de sincronización. Co fin de atopar estes elementos pode buscalos polo "
|
||||
"título ou polo ID (mostrados entre corchetes arriba)."
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "%s (%s) could not be uploaded: %s"
|
||||
msgstr "Non foi posíbel gardar o caderno: %s"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Item \"%s\" could not be downloaded: %s"
|
||||
msgstr "Non foi posíbel gardar o caderno: %s"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Items that cannot be decrypted"
|
||||
msgstr "Elementos que non se poden sincronizar"
|
||||
|
||||
msgid ""
|
||||
"Joplin failed to decrypt these items multiple times, possibly because they "
|
||||
"are corrupted or too large. These items will remain on the device but Joplin "
|
||||
"will no longer attempt to decrypt them."
|
||||
msgstr ""
|
||||
|
||||
msgid "Sync status (synced items / total items)"
|
||||
msgstr "Estado da sincronización (elementos sincronizados / elementos totais)"
|
||||
|
||||
@@ -1816,6 +1851,10 @@ msgstr "Etiquetas novas:"
|
||||
msgid "Type new tags or select from list"
|
||||
msgstr "Escriba etiquetas novas ou seleccione da lista"
|
||||
|
||||
#, fuzzy
|
||||
msgid "More information"
|
||||
msgstr "Configuración"
|
||||
|
||||
msgid ""
|
||||
"To work correctly, the app needs the following permissions. Please enable "
|
||||
"them in your phone settings, in Apps > Joplin > Permissions"
|
||||
@@ -1957,6 +1996,12 @@ msgstr "Non ten cadernos actualmente. Cree un premendo no botón (+)."
|
||||
msgid "Welcome"
|
||||
msgstr "Benvido/a"
|
||||
|
||||
#~ msgid "Separate each tag by a comma."
|
||||
#~ msgstr "Separar cada etiqueta por unha coma."
|
||||
|
||||
#~ msgid "Some items cannot be decrypted."
|
||||
#~ msgstr "Non é posíbel descifrar algúns elementos."
|
||||
|
||||
#~ msgid "%s (%s): %s"
|
||||
#~ msgstr "%s (%s): %s"
|
||||
|
||||
|
@@ -730,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"
|
||||
@@ -944,9 +947,6 @@ msgstr "Naslov bilježnice:"
|
||||
msgid "Add or remove tags:"
|
||||
msgstr "Dodaj ili makni oznake:"
|
||||
|
||||
msgid "Separate each tag by a comma."
|
||||
msgstr "Odvoji oznake zarezom."
|
||||
|
||||
msgid "Rename notebook:"
|
||||
msgstr "Preimenuj bilježnicu:"
|
||||
|
||||
@@ -970,9 +970,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 ""
|
||||
@@ -1166,15 +1165,18 @@ msgstr "Bilježnice"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Decrypting items: %d/%d"
|
||||
msgstr "Stvorene lokalne stavke: %d."
|
||||
msgstr "Stvorene lokalne stavke: %d/%d"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Fetching resources: %d"
|
||||
msgstr "Resursi: %d."
|
||||
msgid "Fetching resources: %d/%d"
|
||||
msgstr "Resursi: %d/%d"
|
||||
|
||||
msgid "Please select where the sync status should be exported to"
|
||||
msgstr "Odaberi lokaciju za izvoz statusa sinkronizacije"
|
||||
|
||||
msgid "Retry"
|
||||
msgstr ""
|
||||
|
||||
msgid "Add or remove tags"
|
||||
msgstr "Dodaj ili makni oznake"
|
||||
|
||||
@@ -1378,6 +1380,56 @@ msgid ""
|
||||
"more details: %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Synchronisation target"
|
||||
msgstr "Sinkroniziraj sa"
|
||||
|
||||
msgid ""
|
||||
"The target to synchonise to. Each sync target may have additional parameters "
|
||||
"which are named as `sync.NUM.NAME` (all documented below)."
|
||||
msgstr ""
|
||||
|
||||
msgid "Directory to synchronise with (absolute path)"
|
||||
msgstr "Direktorij za sinkroniziranje (apsolutna putanja)"
|
||||
|
||||
msgid "Nextcloud WebDAV URL"
|
||||
msgstr ""
|
||||
|
||||
msgid "Nextcloud username"
|
||||
msgstr ""
|
||||
|
||||
msgid "Nextcloud password"
|
||||
msgstr ""
|
||||
|
||||
msgid "WebDAV URL"
|
||||
msgstr ""
|
||||
|
||||
msgid "WebDAV username"
|
||||
msgstr ""
|
||||
|
||||
msgid "WebDAV password"
|
||||
msgstr ""
|
||||
|
||||
msgid "Attachment download behaviour"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"In \"Manual\" mode, attachments are downloaded only when you click on them. "
|
||||
"In \"Auto\", they are downloaded when you open the note. In \"Always\", all "
|
||||
"the attachments are downloaded whether you open the note or not."
|
||||
msgstr ""
|
||||
|
||||
msgid "Always"
|
||||
msgstr ""
|
||||
|
||||
msgid "Manual"
|
||||
msgstr ""
|
||||
|
||||
msgid "Auto"
|
||||
msgstr ""
|
||||
|
||||
msgid "Max concurrent connections"
|
||||
msgstr ""
|
||||
|
||||
msgid "Language"
|
||||
msgstr "Jezik"
|
||||
|
||||
@@ -1539,35 +1591,6 @@ msgstr ""
|
||||
msgid "Show advanced options"
|
||||
msgstr "Prikaži napredne opcije"
|
||||
|
||||
msgid "Synchronisation target"
|
||||
msgstr "Sinkroniziraj sa"
|
||||
|
||||
msgid ""
|
||||
"The target to synchonise to. Each sync target may have additional parameters "
|
||||
"which are named as `sync.NUM.NAME` (all documented below)."
|
||||
msgstr ""
|
||||
|
||||
msgid "Directory to synchronise with (absolute path)"
|
||||
msgstr "Direktorij za sinkroniziranje (apsolutna putanja)"
|
||||
|
||||
msgid "Nextcloud WebDAV URL"
|
||||
msgstr ""
|
||||
|
||||
msgid "Nextcloud username"
|
||||
msgstr ""
|
||||
|
||||
msgid "Nextcloud password"
|
||||
msgstr ""
|
||||
|
||||
msgid "WebDAV URL"
|
||||
msgstr ""
|
||||
|
||||
msgid "WebDAV username"
|
||||
msgstr ""
|
||||
|
||||
msgid "WebDAV password"
|
||||
msgstr ""
|
||||
|
||||
msgid "Custom TLS certificates"
|
||||
msgstr ""
|
||||
|
||||
@@ -1676,6 +1699,12 @@ msgstr ""
|
||||
msgid "Items that cannot be synchronised"
|
||||
msgstr "Stavke koje se ne mogu sinkronizirati"
|
||||
|
||||
msgid ""
|
||||
"These items will remain on the device but will not be uploaded to the sync "
|
||||
"target. In order to find these items, either search for the title or the ID "
|
||||
"(which is displayed in brackets above)."
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "%s (%s) could not be uploaded: %s"
|
||||
msgstr "Bilježnicu nije moguće snimiti: %s"
|
||||
@@ -1684,10 +1713,14 @@ msgstr "Bilježnicu nije moguće snimiti: %s"
|
||||
msgid "Item \"%s\" could not be downloaded: %s"
|
||||
msgstr "Bilježnicu nije moguće snimiti: %s"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Items that cannot be decrypted"
|
||||
msgstr "Stavke koje se ne mogu sinkronizirati"
|
||||
|
||||
msgid ""
|
||||
"These items will remain on the device but will not be uploaded to the sync "
|
||||
"target. In order to find these items, either search for the title or the ID "
|
||||
"(which is displayed in brackets above)."
|
||||
"Joplin failed to decrypt these items multiple times, possibly because they "
|
||||
"are corrupted or too large. These items will remain on the device but Joplin "
|
||||
"will no longer attempt to decrypt them."
|
||||
msgstr ""
|
||||
|
||||
msgid "Sync status (synced items / total items)"
|
||||
@@ -1810,6 +1843,10 @@ msgstr ""
|
||||
msgid "Type new tags or select from list"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "More information"
|
||||
msgstr "Konfiguracija"
|
||||
|
||||
msgid ""
|
||||
"To work correctly, the app needs the following permissions. Please enable "
|
||||
"them in your phone settings, in Apps > Joplin > Permissions"
|
||||
@@ -1953,6 +1990,13 @@ msgstr "Trenutno nemaš nijednu bilježnicu. Stvori novu klikom na (+) gumb."
|
||||
msgid "Welcome"
|
||||
msgstr "Dobro došli"
|
||||
|
||||
#~ msgid "Separate each tag by a comma."
|
||||
#~ msgstr "Odvoji oznake zarezom."
|
||||
|
||||
#, fuzzy
|
||||
#~ msgid "Some items cannot be decrypted."
|
||||
#~ msgstr "Neke stavke se ne mogu sinkronizirati."
|
||||
|
||||
#, fuzzy
|
||||
#~ msgid "%s (%s): %s"
|
||||
#~ msgstr "%s %s (%s)"
|
||||
|
@@ -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"
|
||||
@@ -669,11 +666,10 @@ msgid "Quit"
|
||||
msgstr "Esci"
|
||||
|
||||
msgid "Close Window"
|
||||
msgstr ""
|
||||
msgstr "Chiudi finestra"
|
||||
|
||||
#, fuzzy
|
||||
msgid "&Edit"
|
||||
msgstr "Modifica"
|
||||
msgstr "&Modifica"
|
||||
|
||||
msgid "Copy"
|
||||
msgstr "Copia"
|
||||
@@ -694,7 +690,7 @@ msgid "Italic"
|
||||
msgstr "Corsivo"
|
||||
|
||||
msgid "Link"
|
||||
msgstr ""
|
||||
msgstr "Link"
|
||||
|
||||
msgid "Insert Date Time"
|
||||
msgstr "Inserisci data e ora"
|
||||
@@ -708,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"
|
||||
@@ -718,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"
|
||||
@@ -736,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"
|
||||
@@ -761,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ì"
|
||||
@@ -774,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 ""
|
||||
@@ -825,20 +820,21 @@ 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"
|
||||
@@ -848,7 +844,7 @@ msgid "Check synchronisation configuration"
|
||||
msgstr "Controlla la configurazione della sincronizzazione"
|
||||
|
||||
msgid "Browse..."
|
||||
msgstr ""
|
||||
msgstr "Naviga..."
|
||||
|
||||
msgid "Apply"
|
||||
msgstr "Applica"
|
||||
@@ -945,9 +941,8 @@ msgstr "Stato"
|
||||
msgid "Encryption is:"
|
||||
msgstr "La crittografia è:"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Usage"
|
||||
msgstr "Uso: %s"
|
||||
msgstr "Uso"
|
||||
|
||||
msgid "Back"
|
||||
msgstr "Indietro"
|
||||
@@ -969,9 +964,6 @@ msgstr "Titolo del Taccuino:"
|
||||
msgid "Add or remove tags:"
|
||||
msgstr "Aggiungi or rimuovi etichetta:"
|
||||
|
||||
msgid "Separate each tag by a comma."
|
||||
msgstr "Separa ogni etichetta da una virgola."
|
||||
|
||||
msgid "Rename notebook:"
|
||||
msgstr "Rinomina il Taccuino:"
|
||||
|
||||
@@ -993,8 +985,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"
|
||||
@@ -1009,40 +1002,41 @@ msgstr ""
|
||||
"\"."
|
||||
|
||||
msgid "Location"
|
||||
msgstr ""
|
||||
msgstr "Posizione"
|
||||
|
||||
msgid "URL"
|
||||
msgstr ""
|
||||
msgstr "URL"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Note History"
|
||||
msgstr "Taccuini"
|
||||
msgstr "Cronologia nota"
|
||||
|
||||
msgid "Previous versions of this note"
|
||||
msgstr ""
|
||||
msgstr "Versione precedente di questa nota"
|
||||
|
||||
msgid "Note properties"
|
||||
msgstr ""
|
||||
msgstr "Proprietà della nota"
|
||||
|
||||
#, javascript-format
|
||||
msgid "The note \"%s\" has been successfully restored to the notebook \"%s\"."
|
||||
msgstr ""
|
||||
msgstr "La nota \"%s\" è stata ripristinata con successo nel taccuino \"%s\"."
|
||||
|
||||
#, fuzzy
|
||||
msgid "This note has no history"
|
||||
msgstr "Questa note è stata modificata:"
|
||||
msgstr "Questa nota non ha cronologia"
|
||||
|
||||
msgid "Restore"
|
||||
msgstr ""
|
||||
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"
|
||||
@@ -1073,7 +1067,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"
|
||||
@@ -1127,12 +1121,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..."
|
||||
@@ -1162,18 +1155,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?"
|
||||
@@ -1192,12 +1186,15 @@ 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 ""
|
||||
|
||||
msgid "Retry"
|
||||
msgstr ""
|
||||
|
||||
msgid "Add or remove tags"
|
||||
msgstr "Aggiungi o rimuovi etichetta"
|
||||
|
||||
@@ -1220,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 @ "
|
||||
@@ -1359,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"
|
||||
@@ -1375,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."
|
||||
@@ -1395,6 +1392,58 @@ msgid ""
|
||||
"more details: %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Synchronisation target"
|
||||
msgstr "Destinazione di sincronizzazione"
|
||||
|
||||
msgid ""
|
||||
"The target to synchonise to. Each sync target may have additional parameters "
|
||||
"which are named as `sync.NUM.NAME` (all documented below)."
|
||||
msgstr ""
|
||||
"Ogni target di sincronizzazione può avere parametri aggiuntivi denominati "
|
||||
"come `sync.NUM.NAME` (tutti documentati di seguito)."
|
||||
|
||||
msgid "Directory to synchronise with (absolute path)"
|
||||
msgstr "Cartella da sincronizzare con (percorso assoluto)"
|
||||
|
||||
msgid "Nextcloud WebDAV URL"
|
||||
msgstr "URL Nextcloud WebDAV"
|
||||
|
||||
msgid "Nextcloud username"
|
||||
msgstr "Nome Utente Nextcloud"
|
||||
|
||||
msgid "Nextcloud password"
|
||||
msgstr "Password Nextcloud"
|
||||
|
||||
msgid "WebDAV URL"
|
||||
msgstr "URL WebDAV"
|
||||
|
||||
msgid "WebDAV username"
|
||||
msgstr "Nome Utente WebDAV"
|
||||
|
||||
msgid "WebDAV password"
|
||||
msgstr "Password WebDAV"
|
||||
|
||||
msgid "Attachment download behaviour"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"In \"Manual\" mode, attachments are downloaded only when you click on them. "
|
||||
"In \"Auto\", they are downloaded when you open the note. In \"Always\", all "
|
||||
"the attachments are downloaded whether you open the note or not."
|
||||
msgstr ""
|
||||
|
||||
msgid "Always"
|
||||
msgstr "Sempre"
|
||||
|
||||
msgid "Manual"
|
||||
msgstr "Manuale"
|
||||
|
||||
msgid "Auto"
|
||||
msgstr "Auto"
|
||||
|
||||
msgid "Max concurrent connections"
|
||||
msgstr ""
|
||||
|
||||
msgid "Language"
|
||||
msgstr "Linguaggio"
|
||||
|
||||
@@ -1425,9 +1474,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"
|
||||
@@ -1447,15 +1495,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 ""
|
||||
@@ -1555,37 +1602,6 @@ msgstr ""
|
||||
msgid "Show advanced options"
|
||||
msgstr "Mostra opzioni avanzate"
|
||||
|
||||
msgid "Synchronisation target"
|
||||
msgstr "Destinazione di sincronizzazione"
|
||||
|
||||
msgid ""
|
||||
"The target to synchonise to. Each sync target may have additional parameters "
|
||||
"which are named as `sync.NUM.NAME` (all documented below)."
|
||||
msgstr ""
|
||||
"Ogni target di sincronizzazione può avere parametri aggiuntivi denominati "
|
||||
"come `sync.NUM.NAME` (tutti documentati di seguito)."
|
||||
|
||||
msgid "Directory to synchronise with (absolute path)"
|
||||
msgstr "Cartella da sincronizzare con (percorso assoluto)"
|
||||
|
||||
msgid "Nextcloud WebDAV URL"
|
||||
msgstr "URL Nextcloud WebDAV"
|
||||
|
||||
msgid "Nextcloud username"
|
||||
msgstr "Nome Utente Nextcloud"
|
||||
|
||||
msgid "Nextcloud password"
|
||||
msgstr "Password Nextcloud"
|
||||
|
||||
msgid "WebDAV URL"
|
||||
msgstr "URL WebDAV"
|
||||
|
||||
msgid "WebDAV username"
|
||||
msgstr "Nome Utente WebDAV"
|
||||
|
||||
msgid "WebDAV password"
|
||||
msgstr "Password WebDAV"
|
||||
|
||||
msgid "Custom TLS certificates"
|
||||
msgstr "Certificati TLS personalizzati"
|
||||
|
||||
@@ -1604,16 +1620,15 @@ msgstr ""
|
||||
msgid "Ignore TLS certificate errors"
|
||||
msgstr "Ignora gli errori del certificato TLS"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Enable note history"
|
||||
msgstr "Attiva Crittografia"
|
||||
msgstr "Attiva cronologia della nota"
|
||||
|
||||
msgid "days"
|
||||
msgstr ""
|
||||
msgstr "giorni"
|
||||
|
||||
#, javascript-format
|
||||
msgid "%d days"
|
||||
msgstr ""
|
||||
msgstr "%d giorni"
|
||||
|
||||
msgid "Keep note history for"
|
||||
msgstr ""
|
||||
@@ -1622,27 +1637,23 @@ msgstr ""
|
||||
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."
|
||||
@@ -1692,19 +1703,11 @@ 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 ""
|
||||
msgstr "Ripristina note"
|
||||
|
||||
msgid "Items that cannot be synchronised"
|
||||
msgstr "Elementi che non possono essere sincronizzati"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "%s (%s) could not be uploaded: %s"
|
||||
msgstr "Questo file non può essere aperto: %s"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Item \"%s\" could not be downloaded: %s"
|
||||
msgstr "Questo file non può essere aperto: %s"
|
||||
|
||||
msgid ""
|
||||
"These items will remain on the device but will not be uploaded to the sync "
|
||||
"target. In order to find these items, either search for the title or the ID "
|
||||
@@ -1714,6 +1717,24 @@ msgstr ""
|
||||
"destinazione di sincronizzazione. Per trovare questi elementi, cercare il "
|
||||
"titolo o l'ID (che viene visualizzato tra parentesi qui sopra)."
|
||||
|
||||
#, javascript-format
|
||||
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"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Items that cannot be decrypted"
|
||||
msgstr "Elementi che non possono essere sincronizzati"
|
||||
|
||||
msgid ""
|
||||
"Joplin failed to decrypt these items multiple times, possibly because they "
|
||||
"are corrupted or too large. These items will remain on the device but Joplin "
|
||||
"will no longer attempt to decrypt them."
|
||||
msgstr ""
|
||||
|
||||
msgid "Sync status (synced items / total items)"
|
||||
msgstr "Stato di sincronizzazione (Elementi sincronizzati / Elementi totali)"
|
||||
|
||||
@@ -1751,7 +1772,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 (+)."
|
||||
@@ -1781,9 +1802,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"
|
||||
@@ -1797,22 +1817,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 ""
|
||||
@@ -1823,9 +1841,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:"
|
||||
@@ -1833,6 +1851,10 @@ msgstr "Nuovi tag:"
|
||||
msgid "Type new tags or select from list"
|
||||
msgstr "Digita nuovi tag o seleziona dalla lista"
|
||||
|
||||
#, fuzzy
|
||||
msgid "More information"
|
||||
msgstr "Configurazione"
|
||||
|
||||
msgid ""
|
||||
"To work correctly, the app needs the following permissions. Please enable "
|
||||
"them in your phone settings, in Apps > Joplin > Permissions"
|
||||
@@ -1982,6 +2004,12 @@ msgstr ""
|
||||
msgid "Welcome"
|
||||
msgstr "Benvenuto"
|
||||
|
||||
#~ msgid "Separate each tag by a comma."
|
||||
#~ msgstr "Separa ogni etichetta da una virgola."
|
||||
|
||||
#~ msgid "Some items cannot be decrypted."
|
||||
#~ msgstr "Alcuni elementi non possono essere decodificati."
|
||||
|
||||
#~ msgid "%s (%s): %s"
|
||||
#~ msgstr "%s (%s): %s"
|
||||
|
||||
|
@@ -718,6 +718,9 @@ msgstr "Webサイトとドキュメント"
|
||||
msgid "Make a donation"
|
||||
msgstr "寄付する"
|
||||
|
||||
msgid "Toggle development tools"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Open %s"
|
||||
msgstr "%s を開く"
|
||||
@@ -949,9 +952,6 @@ msgstr "ノートブックの題名:"
|
||||
msgid "Add or remove tags:"
|
||||
msgstr "タグの追加・削除:"
|
||||
|
||||
msgid "Separate each tag by a comma."
|
||||
msgstr "それぞれのタグをカンマ(,)で区切ってください。"
|
||||
|
||||
msgid "Rename notebook:"
|
||||
msgstr "ノートブックの名前を変更:"
|
||||
|
||||
@@ -973,8 +973,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 "パスワードの設定"
|
||||
@@ -1169,12 +1170,15 @@ msgid "Decrypting items: %d/%d"
|
||||
msgstr "復号中のアイテム: %d/%d"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Fetching resources: %d"
|
||||
msgstr "取得中のリソース: %d"
|
||||
msgid "Fetching resources: %d/%d"
|
||||
msgstr "取得中のリソース: %d/%d"
|
||||
|
||||
msgid "Please select where the sync status should be exported to"
|
||||
msgstr "同期状況の出力先を選択してください"
|
||||
|
||||
msgid "Retry"
|
||||
msgstr ""
|
||||
|
||||
msgid "Add or remove tags"
|
||||
msgstr "タグの追加と削除"
|
||||
|
||||
@@ -1377,6 +1381,58 @@ msgstr ""
|
||||
"ておきましょう。そうしないとすべてのファイルが削除されていまいます! 詳しくは"
|
||||
"次のFAQをご覧ください: %s"
|
||||
|
||||
msgid "Synchronisation target"
|
||||
msgstr "同期先"
|
||||
|
||||
msgid ""
|
||||
"The target to synchonise to. Each sync target may have additional parameters "
|
||||
"which are named as `sync.NUM.NAME` (all documented below)."
|
||||
msgstr ""
|
||||
"同期する先です。いずれの同期先も `sync.NUM.NAME` のように追加のパラメーターを"
|
||||
"持つことができるでしょう(すべてのドキュメントは下にあります)。"
|
||||
|
||||
msgid "Directory to synchronise with (absolute path)"
|
||||
msgstr "同期先のディレクトリ(絶対パス)"
|
||||
|
||||
msgid "Nextcloud WebDAV URL"
|
||||
msgstr "Nextcloud WebDAV URL"
|
||||
|
||||
msgid "Nextcloud username"
|
||||
msgstr "Nextcloud ユーザー名"
|
||||
|
||||
msgid "Nextcloud password"
|
||||
msgstr "Nextcloud パスワード"
|
||||
|
||||
msgid "WebDAV URL"
|
||||
msgstr "WebDAV URL"
|
||||
|
||||
msgid "WebDAV username"
|
||||
msgstr "WebDAV ユーザー名"
|
||||
|
||||
msgid "WebDAV password"
|
||||
msgstr "WevDAV パスワード"
|
||||
|
||||
msgid "Attachment download behaviour"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"In \"Manual\" mode, attachments are downloaded only when you click on them. "
|
||||
"In \"Auto\", they are downloaded when you open the note. In \"Always\", all "
|
||||
"the attachments are downloaded whether you open the note or not."
|
||||
msgstr ""
|
||||
|
||||
msgid "Always"
|
||||
msgstr ""
|
||||
|
||||
msgid "Manual"
|
||||
msgstr ""
|
||||
|
||||
msgid "Auto"
|
||||
msgstr ""
|
||||
|
||||
msgid "Max concurrent connections"
|
||||
msgstr ""
|
||||
|
||||
msgid "Language"
|
||||
msgstr "言語"
|
||||
|
||||
@@ -1534,37 +1590,6 @@ msgstr ""
|
||||
msgid "Show advanced options"
|
||||
msgstr "詳細な設定の表示"
|
||||
|
||||
msgid "Synchronisation target"
|
||||
msgstr "同期先"
|
||||
|
||||
msgid ""
|
||||
"The target to synchonise to. Each sync target may have additional parameters "
|
||||
"which are named as `sync.NUM.NAME` (all documented below)."
|
||||
msgstr ""
|
||||
"同期する先です。いずれの同期先も `sync.NUM.NAME` のように追加のパラメーターを"
|
||||
"持つことができるでしょう(すべてのドキュメントは下にあります)。"
|
||||
|
||||
msgid "Directory to synchronise with (absolute path)"
|
||||
msgstr "同期先のディレクトリ(絶対パス)"
|
||||
|
||||
msgid "Nextcloud WebDAV URL"
|
||||
msgstr "Nextcloud WebDAV URL"
|
||||
|
||||
msgid "Nextcloud username"
|
||||
msgstr "Nextcloud ユーザー名"
|
||||
|
||||
msgid "Nextcloud password"
|
||||
msgstr "Nextcloud パスワード"
|
||||
|
||||
msgid "WebDAV URL"
|
||||
msgstr "WebDAV URL"
|
||||
|
||||
msgid "WebDAV username"
|
||||
msgstr "WebDAV ユーザー名"
|
||||
|
||||
msgid "WebDAV password"
|
||||
msgstr "WevDAV パスワード"
|
||||
|
||||
msgid "Custom TLS certificates"
|
||||
msgstr "TLS証明書のカスタマイズ"
|
||||
|
||||
@@ -1675,14 +1700,6 @@ msgstr ""
|
||||
msgid "Items that cannot be synchronised"
|
||||
msgstr "同期ができなかったアイテム"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "%s (%s) could not be uploaded: %s"
|
||||
msgstr "次のファイルは開くことができません:%s"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Item \"%s\" could not be downloaded: %s"
|
||||
msgstr "次のファイルは開くことができません:%s"
|
||||
|
||||
msgid ""
|
||||
"These items will remain on the device but will not be uploaded to the sync "
|
||||
"target. In order to find these items, either search for the title or the ID "
|
||||
@@ -1692,6 +1709,24 @@ msgstr ""
|
||||
"のようなアイテムを探すには、タイトルまたはID(上記の括弧内に表示されている)で"
|
||||
"検索してください。"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "%s (%s) could not be uploaded: %s"
|
||||
msgstr "次のファイルは開くことができません:%s"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Item \"%s\" could not be downloaded: %s"
|
||||
msgstr "次のファイルは開くことができません:%s"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Items that cannot be decrypted"
|
||||
msgstr "同期ができなかったアイテム"
|
||||
|
||||
msgid ""
|
||||
"Joplin failed to decrypt these items multiple times, possibly because they "
|
||||
"are corrupted or too large. These items will remain on the device but Joplin "
|
||||
"will no longer attempt to decrypt them."
|
||||
msgstr ""
|
||||
|
||||
msgid "Sync status (synced items / total items)"
|
||||
msgstr "同期状況 (同期済/総数)"
|
||||
|
||||
@@ -1814,6 +1849,10 @@ msgstr "新しいタグ:"
|
||||
msgid "Type new tags or select from list"
|
||||
msgstr "新しいタグを入力するか、リストから選択してください"
|
||||
|
||||
#, fuzzy
|
||||
msgid "More information"
|
||||
msgstr "設定"
|
||||
|
||||
msgid ""
|
||||
"To work correctly, the app needs the following permissions. Please enable "
|
||||
"them in your phone settings, in Apps > Joplin > Permissions"
|
||||
@@ -1960,6 +1999,12 @@ msgstr ""
|
||||
msgid "Welcome"
|
||||
msgstr "ようこそ"
|
||||
|
||||
#~ msgid "Separate each tag by a comma."
|
||||
#~ msgstr "それぞれのタグをカンマ(,)で区切ってください。"
|
||||
|
||||
#~ msgid "Some items cannot be decrypted."
|
||||
#~ msgstr "いくつかの項目は復号されませんでした。"
|
||||
|
||||
#~ msgid "%s (%s): %s"
|
||||
#~ msgstr "%s (%s): %s"
|
||||
|
||||
|
@@ -646,6 +646,9 @@ msgstr ""
|
||||
msgid "Make a donation"
|
||||
msgstr ""
|
||||
|
||||
msgid "Toggle development tools"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Open %s"
|
||||
msgstr ""
|
||||
@@ -854,9 +857,6 @@ msgstr ""
|
||||
msgid "Add or remove tags:"
|
||||
msgstr ""
|
||||
|
||||
msgid "Separate each tag by a comma."
|
||||
msgstr ""
|
||||
|
||||
msgid "Rename notebook:"
|
||||
msgstr ""
|
||||
|
||||
@@ -878,7 +878,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"
|
||||
@@ -1068,12 +1068,15 @@ msgid "Decrypting items: %d/%d"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Fetching resources: %d"
|
||||
msgid "Fetching resources: %d/%d"
|
||||
msgstr ""
|
||||
|
||||
msgid "Please select where the sync status should be exported to"
|
||||
msgstr ""
|
||||
|
||||
msgid "Retry"
|
||||
msgstr ""
|
||||
|
||||
msgid "Add or remove tags"
|
||||
msgstr ""
|
||||
|
||||
@@ -1263,6 +1266,56 @@ msgid ""
|
||||
"more details: %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Synchronisation target"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"The target to synchonise to. Each sync target may have additional parameters "
|
||||
"which are named as `sync.NUM.NAME` (all documented below)."
|
||||
msgstr ""
|
||||
|
||||
msgid "Directory to synchronise with (absolute path)"
|
||||
msgstr ""
|
||||
|
||||
msgid "Nextcloud WebDAV URL"
|
||||
msgstr ""
|
||||
|
||||
msgid "Nextcloud username"
|
||||
msgstr ""
|
||||
|
||||
msgid "Nextcloud password"
|
||||
msgstr ""
|
||||
|
||||
msgid "WebDAV URL"
|
||||
msgstr ""
|
||||
|
||||
msgid "WebDAV username"
|
||||
msgstr ""
|
||||
|
||||
msgid "WebDAV password"
|
||||
msgstr ""
|
||||
|
||||
msgid "Attachment download behaviour"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"In \"Manual\" mode, attachments are downloaded only when you click on them. "
|
||||
"In \"Auto\", they are downloaded when you open the note. In \"Always\", all "
|
||||
"the attachments are downloaded whether you open the note or not."
|
||||
msgstr ""
|
||||
|
||||
msgid "Always"
|
||||
msgstr ""
|
||||
|
||||
msgid "Manual"
|
||||
msgstr ""
|
||||
|
||||
msgid "Auto"
|
||||
msgstr ""
|
||||
|
||||
msgid "Max concurrent connections"
|
||||
msgstr ""
|
||||
|
||||
msgid "Language"
|
||||
msgstr ""
|
||||
|
||||
@@ -1412,35 +1465,6 @@ msgstr ""
|
||||
msgid "Show advanced options"
|
||||
msgstr ""
|
||||
|
||||
msgid "Synchronisation target"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"The target to synchonise to. Each sync target may have additional parameters "
|
||||
"which are named as `sync.NUM.NAME` (all documented below)."
|
||||
msgstr ""
|
||||
|
||||
msgid "Directory to synchronise with (absolute path)"
|
||||
msgstr ""
|
||||
|
||||
msgid "Nextcloud WebDAV URL"
|
||||
msgstr ""
|
||||
|
||||
msgid "Nextcloud username"
|
||||
msgstr ""
|
||||
|
||||
msgid "Nextcloud password"
|
||||
msgstr ""
|
||||
|
||||
msgid "WebDAV URL"
|
||||
msgstr ""
|
||||
|
||||
msgid "WebDAV username"
|
||||
msgstr ""
|
||||
|
||||
msgid "WebDAV password"
|
||||
msgstr ""
|
||||
|
||||
msgid "Custom TLS certificates"
|
||||
msgstr ""
|
||||
|
||||
@@ -1540,6 +1564,12 @@ msgstr ""
|
||||
msgid "Items that cannot be synchronised"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"These items will remain on the device but will not be uploaded to the sync "
|
||||
"target. In order to find these items, either search for the title or the ID "
|
||||
"(which is displayed in brackets above)."
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s (%s) could not be uploaded: %s"
|
||||
msgstr ""
|
||||
@@ -1548,10 +1578,13 @@ msgstr ""
|
||||
msgid "Item \"%s\" could not be downloaded: %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Items that cannot be decrypted"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"These items will remain on the device but will not be uploaded to the sync "
|
||||
"target. In order to find these items, either search for the title or the ID "
|
||||
"(which is displayed in brackets above)."
|
||||
"Joplin failed to decrypt these items multiple times, possibly because they "
|
||||
"are corrupted or too large. These items will remain on the device but Joplin "
|
||||
"will no longer attempt to decrypt them."
|
||||
msgstr ""
|
||||
|
||||
msgid "Sync status (synced items / total items)"
|
||||
@@ -1669,6 +1702,9 @@ msgstr ""
|
||||
msgid "Type new tags or select from list"
|
||||
msgstr ""
|
||||
|
||||
msgid "More information"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"To work correctly, the app needs the following permissions. Please enable "
|
||||
"them in your phone settings, in Apps > Joplin > Permissions"
|
||||
|
@@ -715,6 +715,9 @@ msgstr "웹사이트 및 각종 문서"
|
||||
msgid "Make a donation"
|
||||
msgstr "기부하기"
|
||||
|
||||
msgid "Toggle development tools"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Open %s"
|
||||
msgstr "%s 열기"
|
||||
@@ -943,9 +946,6 @@ msgstr "노트북 제목:"
|
||||
msgid "Add or remove tags:"
|
||||
msgstr "태그 추가 및 제거:"
|
||||
|
||||
msgid "Separate each tag by a comma."
|
||||
msgstr "각각의 태그를 쉼표로 구분합니다."
|
||||
|
||||
msgid "Rename notebook:"
|
||||
msgstr "노트북 이름 바꾸기:"
|
||||
|
||||
@@ -967,8 +967,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 "암호 설정"
|
||||
@@ -1163,12 +1164,15 @@ msgid "Decrypting items: %d/%d"
|
||||
msgstr "복호화 항목: %d/%d"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Fetching resources: %d"
|
||||
msgstr "리소스 가져오는 중: %d."
|
||||
msgid "Fetching resources: %d/%d"
|
||||
msgstr "리소스 가져오는 중: %d/%d"
|
||||
|
||||
msgid "Please select where the sync status should be exported to"
|
||||
msgstr "동기화 상태를 내보낼 대상을 선택하세요"
|
||||
|
||||
msgid "Retry"
|
||||
msgstr ""
|
||||
|
||||
msgid "Add or remove tags"
|
||||
msgstr "태그 추가 및 제거"
|
||||
|
||||
@@ -1368,6 +1372,58 @@ msgstr ""
|
||||
"주의: 이 위치를 변경하시려면, 동기화 전에 모든 컨텐트를 복사했는지 확인하세"
|
||||
"요, 그렇지 않으면 모든 파일이 삭제됩니다! 자세한 정보는 FAQ를 참조하세요: %s"
|
||||
|
||||
msgid "Synchronisation target"
|
||||
msgstr "동기화 대상"
|
||||
|
||||
msgid ""
|
||||
"The target to synchonise to. Each sync target may have additional parameters "
|
||||
"which are named as `sync.NUM.NAME` (all documented below)."
|
||||
msgstr ""
|
||||
"동기화를 할 대상을 선택합니다. 각각의 동기화 대상은 `sync.NUM.NAME` 형식으로 "
|
||||
"된 추가적인 매개 변수를 포함할 수 있습니다(아래에 문서화되어 있습니다)."
|
||||
|
||||
msgid "Directory to synchronise with (absolute path)"
|
||||
msgstr "동기화를 할 폴더 (절대적 경로)"
|
||||
|
||||
msgid "Nextcloud WebDAV URL"
|
||||
msgstr "Nextcloud WebDAV URL"
|
||||
|
||||
msgid "Nextcloud username"
|
||||
msgstr "Nextcloud 사용자 이름"
|
||||
|
||||
msgid "Nextcloud password"
|
||||
msgstr "Nextcloud 암호"
|
||||
|
||||
msgid "WebDAV URL"
|
||||
msgstr "WebDAV URL"
|
||||
|
||||
msgid "WebDAV username"
|
||||
msgstr "WebDAV 사용자 이름"
|
||||
|
||||
msgid "WebDAV password"
|
||||
msgstr "WebDAV 암호"
|
||||
|
||||
msgid "Attachment download behaviour"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"In \"Manual\" mode, attachments are downloaded only when you click on them. "
|
||||
"In \"Auto\", they are downloaded when you open the note. In \"Always\", all "
|
||||
"the attachments are downloaded whether you open the note or not."
|
||||
msgstr ""
|
||||
|
||||
msgid "Always"
|
||||
msgstr ""
|
||||
|
||||
msgid "Manual"
|
||||
msgstr ""
|
||||
|
||||
msgid "Auto"
|
||||
msgstr ""
|
||||
|
||||
msgid "Max concurrent connections"
|
||||
msgstr ""
|
||||
|
||||
msgid "Language"
|
||||
msgstr "언어"
|
||||
|
||||
@@ -1526,37 +1582,6 @@ msgstr ""
|
||||
msgid "Show advanced options"
|
||||
msgstr "고급 옵션"
|
||||
|
||||
msgid "Synchronisation target"
|
||||
msgstr "동기화 대상"
|
||||
|
||||
msgid ""
|
||||
"The target to synchonise to. Each sync target may have additional parameters "
|
||||
"which are named as `sync.NUM.NAME` (all documented below)."
|
||||
msgstr ""
|
||||
"동기화를 할 대상을 선택합니다. 각각의 동기화 대상은 `sync.NUM.NAME` 형식으로 "
|
||||
"된 추가적인 매개 변수를 포함할 수 있습니다(아래에 문서화되어 있습니다)."
|
||||
|
||||
msgid "Directory to synchronise with (absolute path)"
|
||||
msgstr "동기화를 할 폴더 (절대적 경로)"
|
||||
|
||||
msgid "Nextcloud WebDAV URL"
|
||||
msgstr "Nextcloud WebDAV URL"
|
||||
|
||||
msgid "Nextcloud username"
|
||||
msgstr "Nextcloud 사용자 이름"
|
||||
|
||||
msgid "Nextcloud password"
|
||||
msgstr "Nextcloud 암호"
|
||||
|
||||
msgid "WebDAV URL"
|
||||
msgstr "WebDAV URL"
|
||||
|
||||
msgid "WebDAV username"
|
||||
msgstr "WebDAV 사용자 이름"
|
||||
|
||||
msgid "WebDAV password"
|
||||
msgstr "WebDAV 암호"
|
||||
|
||||
msgid "Custom TLS certificates"
|
||||
msgstr "임의의 TLS 인증서"
|
||||
|
||||
@@ -1667,14 +1692,6 @@ msgstr ""
|
||||
msgid "Items that cannot be synchronised"
|
||||
msgstr "동기화를 할 수 없는 항목"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "%s (%s) could not be uploaded: %s"
|
||||
msgstr "다음 파일을 열 수 없습니다: %s"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Item \"%s\" could not be downloaded: %s"
|
||||
msgstr "다음 파일을 열 수 없습니다: %s"
|
||||
|
||||
msgid ""
|
||||
"These items will remain on the device but will not be uploaded to the sync "
|
||||
"target. In order to find these items, either search for the title or the ID "
|
||||
@@ -1684,6 +1701,24 @@ msgstr ""
|
||||
"런 항목을 찾으려면 제목 또는 ID로 검색하세요. (상단에 괄호 안에 표시되어 있습"
|
||||
"니다)"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "%s (%s) could not be uploaded: %s"
|
||||
msgstr "다음 파일을 열 수 없습니다: %s"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Item \"%s\" could not be downloaded: %s"
|
||||
msgstr "다음 파일을 열 수 없습니다: %s"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Items that cannot be decrypted"
|
||||
msgstr "동기화를 할 수 없는 항목"
|
||||
|
||||
msgid ""
|
||||
"Joplin failed to decrypt these items multiple times, possibly because they "
|
||||
"are corrupted or too large. These items will remain on the device but Joplin "
|
||||
"will no longer attempt to decrypt them."
|
||||
msgstr ""
|
||||
|
||||
msgid "Sync status (synced items / total items)"
|
||||
msgstr "동기화 상태 (동기화 완료 항목 / 전체 항목)"
|
||||
|
||||
@@ -1806,6 +1841,10 @@ msgstr "새 태그:"
|
||||
msgid "Type new tags or select from list"
|
||||
msgstr "새 태그를 입력하거나 목록에서 선택하세요"
|
||||
|
||||
#, fuzzy
|
||||
msgid "More information"
|
||||
msgstr "설정"
|
||||
|
||||
msgid ""
|
||||
"To work correctly, the app needs the following permissions. Please enable "
|
||||
"them in your phone settings, in Apps > Joplin > Permissions"
|
||||
@@ -1949,6 +1988,12 @@ msgstr "노트북이 없습니다. (+) 버튼을 눌러 새로 만드세요."
|
||||
msgid "Welcome"
|
||||
msgstr "환영합니다"
|
||||
|
||||
#~ msgid "Separate each tag by a comma."
|
||||
#~ msgstr "각각의 태그를 쉼표로 구분합니다."
|
||||
|
||||
#~ msgid "Some items cannot be decrypted."
|
||||
#~ msgstr "일부 항목들은 암호화할 수 없습니다."
|
||||
|
||||
#~ msgid "%s (%s): %s"
|
||||
#~ msgstr "%s (%s): %s"
|
||||
|
||||
|
@@ -713,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"
|
||||
@@ -946,9 +949,6 @@ msgstr "Tittel på notatbok:"
|
||||
msgid "Add or remove tags:"
|
||||
msgstr "Legge til eller fjern merkelapper:"
|
||||
|
||||
msgid "Separate each tag by a comma."
|
||||
msgstr "Separer hver merkelapp med komma."
|
||||
|
||||
msgid "Rename notebook:"
|
||||
msgstr "Gi nytt navn til notatbok:"
|
||||
|
||||
@@ -970,8 +970,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"
|
||||
@@ -1168,12 +1169,15 @@ 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"
|
||||
msgstr "Velg hvor synkroniseringsstatusen skal eksporteres til"
|
||||
|
||||
msgid "Retry"
|
||||
msgstr ""
|
||||
|
||||
msgid "Add or remove tags"
|
||||
msgstr "Legg til eller fjern merkelapper"
|
||||
|
||||
@@ -1374,6 +1378,58 @@ msgstr ""
|
||||
"innhold dit før du synkroniserer. Hvis ikke blir alle filer fjernet! Se FAQ "
|
||||
"for flere detaljer: %s"
|
||||
|
||||
msgid "Synchronisation target"
|
||||
msgstr "Synkroniseringsmål"
|
||||
|
||||
msgid ""
|
||||
"The target to synchonise to. Each sync target may have additional parameters "
|
||||
"which are named as `sync.NUM.NAME` (all documented below)."
|
||||
msgstr ""
|
||||
"Målet å synkronisere til. Hvert synkroniseringsmål kan ha tilleggsparametere "
|
||||
"som er navngitt som `sync.NUM.NAME` (dokumentert nedenfor)."
|
||||
|
||||
msgid "Directory to synchronise with (absolute path)"
|
||||
msgstr "Katalog å synkronisere med (absolutt sti)"
|
||||
|
||||
msgid "Nextcloud WebDAV URL"
|
||||
msgstr "Nextcloud WebDAV-URL"
|
||||
|
||||
msgid "Nextcloud username"
|
||||
msgstr "Nextcloud-brukernavn"
|
||||
|
||||
msgid "Nextcloud password"
|
||||
msgstr "Nextcloud-passord"
|
||||
|
||||
msgid "WebDAV URL"
|
||||
msgstr "WebDAV-URL"
|
||||
|
||||
msgid "WebDAV username"
|
||||
msgstr "WebDAV-brukernavn"
|
||||
|
||||
msgid "WebDAV password"
|
||||
msgstr "WebDAV-passord"
|
||||
|
||||
msgid "Attachment download behaviour"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"In \"Manual\" mode, attachments are downloaded only when you click on them. "
|
||||
"In \"Auto\", they are downloaded when you open the note. In \"Always\", all "
|
||||
"the attachments are downloaded whether you open the note or not."
|
||||
msgstr ""
|
||||
|
||||
msgid "Always"
|
||||
msgstr ""
|
||||
|
||||
msgid "Manual"
|
||||
msgstr ""
|
||||
|
||||
msgid "Auto"
|
||||
msgstr ""
|
||||
|
||||
msgid "Max concurrent connections"
|
||||
msgstr ""
|
||||
|
||||
msgid "Language"
|
||||
msgstr "Språk"
|
||||
|
||||
@@ -1535,37 +1591,6 @@ msgstr ""
|
||||
msgid "Show advanced options"
|
||||
msgstr "Vis avanserte innstillinger"
|
||||
|
||||
msgid "Synchronisation target"
|
||||
msgstr "Synkroniseringsmål"
|
||||
|
||||
msgid ""
|
||||
"The target to synchonise to. Each sync target may have additional parameters "
|
||||
"which are named as `sync.NUM.NAME` (all documented below)."
|
||||
msgstr ""
|
||||
"Målet å synkronisere til. Hvert synkroniseringsmål kan ha tilleggsparametere "
|
||||
"som er navngitt som `sync.NUM.NAME` (dokumentert nedenfor)."
|
||||
|
||||
msgid "Directory to synchronise with (absolute path)"
|
||||
msgstr "Katalog å synkronisere med (absolutt sti)"
|
||||
|
||||
msgid "Nextcloud WebDAV URL"
|
||||
msgstr "Nextcloud WebDAV-URL"
|
||||
|
||||
msgid "Nextcloud username"
|
||||
msgstr "Nextcloud-brukernavn"
|
||||
|
||||
msgid "Nextcloud password"
|
||||
msgstr "Nextcloud-passord"
|
||||
|
||||
msgid "WebDAV URL"
|
||||
msgstr "WebDAV-URL"
|
||||
|
||||
msgid "WebDAV username"
|
||||
msgstr "WebDAV-brukernavn"
|
||||
|
||||
msgid "WebDAV password"
|
||||
msgstr "WebDAV-passord"
|
||||
|
||||
msgid "Custom TLS certificates"
|
||||
msgstr "Egendefinerte TLS-sertifikater"
|
||||
|
||||
@@ -1672,14 +1697,6 @@ msgstr ""
|
||||
msgid "Items that cannot be synchronised"
|
||||
msgstr "Elementer som ikke vil synkronisere"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "%s (%s) could not be uploaded: %s"
|
||||
msgstr "Filen kunne ikke åpnes: %s"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Item \"%s\" could not be downloaded: %s"
|
||||
msgstr "Filen kunne ikke åpnes: %s"
|
||||
|
||||
msgid ""
|
||||
"These items will remain on the device but will not be uploaded to the sync "
|
||||
"target. In order to find these items, either search for the title or the ID "
|
||||
@@ -1689,6 +1706,24 @@ msgstr ""
|
||||
"synkroniseringsmålet. For å finne disse elementene, enten søk etter tittel "
|
||||
"eller ID (som vises i parentes over)."
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "%s (%s) could not be uploaded: %s"
|
||||
msgstr "Filen kunne ikke åpnes: %s"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Item \"%s\" could not be downloaded: %s"
|
||||
msgstr "Filen kunne ikke åpnes: %s"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Items that cannot be decrypted"
|
||||
msgstr "Elementer som ikke vil synkronisere"
|
||||
|
||||
msgid ""
|
||||
"Joplin failed to decrypt these items multiple times, possibly because they "
|
||||
"are corrupted or too large. These items will remain on the device but Joplin "
|
||||
"will no longer attempt to decrypt them."
|
||||
msgstr ""
|
||||
|
||||
msgid "Sync status (synced items / total items)"
|
||||
msgstr "Synkroniseringsstatus (synkroniserte elementer / totale elementer)"
|
||||
|
||||
@@ -1811,6 +1846,10 @@ msgstr "Nye merkelapper:"
|
||||
msgid "Type new tags or select from list"
|
||||
msgstr "Skriv inn nye merkelapper eller velg fra listen"
|
||||
|
||||
#, fuzzy
|
||||
msgid "More information"
|
||||
msgstr "Konfigurasjon"
|
||||
|
||||
msgid ""
|
||||
"To work correctly, the app needs the following permissions. Please enable "
|
||||
"them in your phone settings, in Apps > Joplin > Permissions"
|
||||
@@ -1954,6 +1993,12 @@ msgstr "Du har enda ingen notatbok. Opprett en ved å klikke på (+)-knappen."
|
||||
msgid "Welcome"
|
||||
msgstr "Velkommen"
|
||||
|
||||
#~ msgid "Separate each tag by a comma."
|
||||
#~ msgstr "Separer hver merkelapp med komma."
|
||||
|
||||
#~ msgid "Some items cannot be decrypted."
|
||||
#~ msgstr "Noen elementer kan ikke dekrypteres."
|
||||
|
||||
#~ msgid "%s (%s): %s"
|
||||
#~ msgstr "%s (%s): %s"
|
||||
|
||||
|
@@ -734,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"
|
||||
@@ -960,9 +963,6 @@ msgstr "Notitieboek titel:"
|
||||
msgid "Add or remove tags:"
|
||||
msgstr "Voeg tag toe of verwijder tag"
|
||||
|
||||
msgid "Separate each tag by a comma."
|
||||
msgstr "Scheid iedere tag met een komma."
|
||||
|
||||
msgid "Rename notebook:"
|
||||
msgstr "Hernoem notitieboek:"
|
||||
|
||||
@@ -986,8 +986,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"
|
||||
@@ -1184,15 +1185,18 @@ msgstr "Notitieboeken"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Decrypting items: %d/%d"
|
||||
msgstr "Opgehaalde items: %d/%d."
|
||||
msgstr "Opgehaalde items: %d/%d"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Fetching resources: %d"
|
||||
msgstr "Middelen: %d."
|
||||
msgid "Fetching resources: %d/%d"
|
||||
msgstr "Middelen: %d/%d"
|
||||
|
||||
msgid "Please select where the sync status should be exported to"
|
||||
msgstr "Selecteer waar de synchronisatie status naar geëxporteerd moet worden"
|
||||
|
||||
msgid "Retry"
|
||||
msgstr ""
|
||||
|
||||
msgid "Add or remove tags"
|
||||
msgstr "Voeg tag toe of verwijder tag"
|
||||
|
||||
@@ -1400,6 +1404,58 @@ msgid ""
|
||||
"more details: %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Synchronisation target"
|
||||
msgstr "Synchronisatiedoel"
|
||||
|
||||
msgid ""
|
||||
"The target to synchonise to. Each sync target may have additional parameters "
|
||||
"which are named as `sync.NUM.NAME` (all documented below)."
|
||||
msgstr ""
|
||||
|
||||
msgid "Directory to synchronise with (absolute path)"
|
||||
msgstr "Folder om mee te synchroniseren (absolute pad)"
|
||||
|
||||
msgid "Nextcloud WebDAV URL"
|
||||
msgstr ""
|
||||
|
||||
msgid "Nextcloud username"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Nextcloud password"
|
||||
msgstr "Stel wachtwoord in"
|
||||
|
||||
msgid "WebDAV URL"
|
||||
msgstr ""
|
||||
|
||||
msgid "WebDAV username"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "WebDAV password"
|
||||
msgstr "Stel wachtwoord in"
|
||||
|
||||
msgid "Attachment download behaviour"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"In \"Manual\" mode, attachments are downloaded only when you click on them. "
|
||||
"In \"Auto\", they are downloaded when you open the note. In \"Always\", all "
|
||||
"the attachments are downloaded whether you open the note or not."
|
||||
msgstr ""
|
||||
|
||||
msgid "Always"
|
||||
msgstr ""
|
||||
|
||||
msgid "Manual"
|
||||
msgstr ""
|
||||
|
||||
msgid "Auto"
|
||||
msgstr ""
|
||||
|
||||
msgid "Max concurrent connections"
|
||||
msgstr ""
|
||||
|
||||
msgid "Language"
|
||||
msgstr "Taal"
|
||||
|
||||
@@ -1562,37 +1618,6 @@ msgstr ""
|
||||
msgid "Show advanced options"
|
||||
msgstr "Toon geavanceerde opties"
|
||||
|
||||
msgid "Synchronisation target"
|
||||
msgstr "Synchronisatiedoel"
|
||||
|
||||
msgid ""
|
||||
"The target to synchonise to. Each sync target may have additional parameters "
|
||||
"which are named as `sync.NUM.NAME` (all documented below)."
|
||||
msgstr ""
|
||||
|
||||
msgid "Directory to synchronise with (absolute path)"
|
||||
msgstr "Folder om mee te synchroniseren (absolute pad)"
|
||||
|
||||
msgid "Nextcloud WebDAV URL"
|
||||
msgstr ""
|
||||
|
||||
msgid "Nextcloud username"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Nextcloud password"
|
||||
msgstr "Stel wachtwoord in"
|
||||
|
||||
msgid "WebDAV URL"
|
||||
msgstr ""
|
||||
|
||||
msgid "WebDAV username"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "WebDAV password"
|
||||
msgstr "Stel wachtwoord in"
|
||||
|
||||
msgid "Custom TLS certificates"
|
||||
msgstr ""
|
||||
|
||||
@@ -1701,14 +1726,6 @@ msgstr ""
|
||||
msgid "Items that cannot be synchronised"
|
||||
msgstr "Items die niet gesynchroniseerd kunnen worden"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "%s (%s) could not be uploaded: %s"
|
||||
msgstr "Het notitieboek kon niet opgeslaan worden: %s"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Item \"%s\" could not be downloaded: %s"
|
||||
msgstr "Het notitieboek kon niet opgeslaan worden: %s"
|
||||
|
||||
msgid ""
|
||||
"These items will remain on the device but will not be uploaded to the sync "
|
||||
"target. In order to find these items, either search for the title or the ID "
|
||||
@@ -1718,6 +1735,24 @@ msgstr ""
|
||||
"geüpload worden naar het synchronistatiedoel. Om deze items te vinden, zoek "
|
||||
"naar de titel of het ID (afgebeeld bovenaan tussen haakjes)."
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "%s (%s) could not be uploaded: %s"
|
||||
msgstr "Het notitieboek kon niet opgeslaan worden: %s"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Item \"%s\" could not be downloaded: %s"
|
||||
msgstr "Het notitieboek kon niet opgeslaan worden: %s"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Items that cannot be decrypted"
|
||||
msgstr "Items die niet gesynchroniseerd kunnen worden"
|
||||
|
||||
msgid ""
|
||||
"Joplin failed to decrypt these items multiple times, possibly because they "
|
||||
"are corrupted or too large. These items will remain on the device but Joplin "
|
||||
"will no longer attempt to decrypt them."
|
||||
msgstr ""
|
||||
|
||||
msgid "Sync status (synced items / total items)"
|
||||
msgstr "Sync status (gesynchroniseerde items / totaal aantal items)"
|
||||
|
||||
@@ -1839,6 +1874,10 @@ msgstr ""
|
||||
msgid "Type new tags or select from list"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "More information"
|
||||
msgstr "Configuratie"
|
||||
|
||||
msgid ""
|
||||
"To work correctly, the app needs the following permissions. Please enable "
|
||||
"them in your phone settings, in Apps > Joplin > Permissions"
|
||||
@@ -1983,6 +2022,12 @@ msgstr ""
|
||||
msgid "Welcome"
|
||||
msgstr "Welkom"
|
||||
|
||||
#~ msgid "Separate each tag by a comma."
|
||||
#~ msgstr "Scheid iedere tag met een komma."
|
||||
|
||||
#~ msgid "Some items cannot be decrypted."
|
||||
#~ msgstr "Sommige items kunnen niet gedecodeerd worden."
|
||||
|
||||
#~ msgid "%s (%s): %s"
|
||||
#~ msgstr "%s (%s): %s"
|
||||
|
||||
|
@@ -734,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"
|
||||
@@ -968,9 +971,6 @@ msgstr "Titel van notitieboek:"
|
||||
msgid "Add or remove tags:"
|
||||
msgstr "Labels toevoegen of verwijderen:"
|
||||
|
||||
msgid "Separate each tag by a comma."
|
||||
msgstr "Scheidt elk label met een komma."
|
||||
|
||||
msgid "Rename notebook:"
|
||||
msgstr "Notitieboeknaam wijzigen:"
|
||||
|
||||
@@ -992,8 +992,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"
|
||||
@@ -1192,12 +1193,15 @@ 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"
|
||||
|
||||
msgid "Retry"
|
||||
msgstr ""
|
||||
|
||||
msgid "Add or remove tags"
|
||||
msgstr "Labels toevoegen of verwijderen"
|
||||
|
||||
@@ -1397,6 +1401,59 @@ msgid ""
|
||||
"more details: %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Synchronisation target"
|
||||
msgstr "Synchronisatiedoel"
|
||||
|
||||
msgid ""
|
||||
"The target to synchonise to. Each sync target may have additional parameters "
|
||||
"which are named as `sync.NUM.NAME` (all documented below)."
|
||||
msgstr ""
|
||||
"Het doel waarnaar gesynchroniseerd moet worden. Elk doel mag extra "
|
||||
"argumenten bevatten, welke `sync.NUM.NAME` worden genoemd (wordt hieronder "
|
||||
"uitgelegd)."
|
||||
|
||||
msgid "Directory to synchronise with (absolute path)"
|
||||
msgstr "Map waarnaar gesynchroniseerd moet worden (absoluut pad)"
|
||||
|
||||
msgid "Nextcloud WebDAV URL"
|
||||
msgstr "Nextcloud WebDAV-URL"
|
||||
|
||||
msgid "Nextcloud username"
|
||||
msgstr "Nextcloud-gebruikersnaam"
|
||||
|
||||
msgid "Nextcloud password"
|
||||
msgstr "Nextcloud-wachtwoord"
|
||||
|
||||
msgid "WebDAV URL"
|
||||
msgstr "WebDAV-URL"
|
||||
|
||||
msgid "WebDAV username"
|
||||
msgstr "WebDAV-gebruikersnaam"
|
||||
|
||||
msgid "WebDAV password"
|
||||
msgstr "WebDAV-wachtwoord"
|
||||
|
||||
msgid "Attachment download behaviour"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"In \"Manual\" mode, attachments are downloaded only when you click on them. "
|
||||
"In \"Auto\", they are downloaded when you open the note. In \"Always\", all "
|
||||
"the attachments are downloaded whether you open the note or not."
|
||||
msgstr ""
|
||||
|
||||
msgid "Always"
|
||||
msgstr ""
|
||||
|
||||
msgid "Manual"
|
||||
msgstr ""
|
||||
|
||||
msgid "Auto"
|
||||
msgstr ""
|
||||
|
||||
msgid "Max concurrent connections"
|
||||
msgstr ""
|
||||
|
||||
msgid "Language"
|
||||
msgstr "Taal"
|
||||
|
||||
@@ -1555,38 +1612,6 @@ msgstr ""
|
||||
msgid "Show advanced options"
|
||||
msgstr "Geavanceerde opties tonen"
|
||||
|
||||
msgid "Synchronisation target"
|
||||
msgstr "Synchronisatiedoel"
|
||||
|
||||
msgid ""
|
||||
"The target to synchonise to. Each sync target may have additional parameters "
|
||||
"which are named as `sync.NUM.NAME` (all documented below)."
|
||||
msgstr ""
|
||||
"Het doel waarnaar gesynchroniseerd moet worden. Elk doel mag extra "
|
||||
"argumenten bevatten, welke `sync.NUM.NAME` worden genoemd (wordt hieronder "
|
||||
"uitgelegd)."
|
||||
|
||||
msgid "Directory to synchronise with (absolute path)"
|
||||
msgstr "Map waarnaar gesynchroniseerd moet worden (absoluut pad)"
|
||||
|
||||
msgid "Nextcloud WebDAV URL"
|
||||
msgstr "Nextcloud WebDAV-URL"
|
||||
|
||||
msgid "Nextcloud username"
|
||||
msgstr "Nextcloud-gebruikersnaam"
|
||||
|
||||
msgid "Nextcloud password"
|
||||
msgstr "Nextcloud-wachtwoord"
|
||||
|
||||
msgid "WebDAV URL"
|
||||
msgstr "WebDAV-URL"
|
||||
|
||||
msgid "WebDAV username"
|
||||
msgstr "WebDAV-gebruikersnaam"
|
||||
|
||||
msgid "WebDAV password"
|
||||
msgstr "WebDAV-wachtwoord"
|
||||
|
||||
msgid "Custom TLS certificates"
|
||||
msgstr "Aangepaste TLS-certificaten"
|
||||
|
||||
@@ -1700,14 +1725,6 @@ msgstr ""
|
||||
msgid "Items that cannot be synchronised"
|
||||
msgstr "Items die niet kunnen worden gesynchroniseerd"
|
||||
|
||||
#, 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 "
|
||||
"target. In order to find these items, either search for the title or the ID "
|
||||
@@ -1717,6 +1734,24 @@ msgstr ""
|
||||
"synchronisatiedoel. Als je deze items wilt vinden, moet je zoeken naar de "
|
||||
"titel of ID ervan (welke hierboven tussen haakjes wordt getoond)."
|
||||
|
||||
#, 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"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Items that cannot be decrypted"
|
||||
msgstr "Items die niet kunnen worden gesynchroniseerd"
|
||||
|
||||
msgid ""
|
||||
"Joplin failed to decrypt these items multiple times, possibly because they "
|
||||
"are corrupted or too large. These items will remain on the device but Joplin "
|
||||
"will no longer attempt to decrypt them."
|
||||
msgstr ""
|
||||
|
||||
msgid "Sync status (synced items / total items)"
|
||||
msgstr ""
|
||||
"Synchronisatiestatus (aantal gesynchroniseerde items / totaal aantal items)"
|
||||
@@ -1839,6 +1874,10 @@ msgstr "Nieuwe labels:"
|
||||
msgid "Type new tags or select from list"
|
||||
msgstr "Typ nieuwe labels of kies ze uit de lijst"
|
||||
|
||||
#, fuzzy
|
||||
msgid "More information"
|
||||
msgstr "Configuratie"
|
||||
|
||||
msgid ""
|
||||
"To work correctly, the app needs the following permissions. Please enable "
|
||||
"them in your phone settings, in Apps > Joplin > Permissions"
|
||||
@@ -1986,6 +2025,12 @@ msgstr ""
|
||||
msgid "Welcome"
|
||||
msgstr "Welkom"
|
||||
|
||||
#~ msgid "Separate each tag by a comma."
|
||||
#~ msgstr "Scheidt elk label met een komma."
|
||||
|
||||
#~ msgid "Some items cannot be decrypted."
|
||||
#~ msgstr "Sommige items kunnen niet worden ontsleuteled."
|
||||
|
||||
#~ msgid "%s (%s): %s"
|
||||
#~ msgstr "%s (%s): %s"
|
||||
|
||||
|
2036
CliClient/locales/pl_PL.po
Normal file
2036
CliClient/locales/pl_PL.po
Normal file
File diff suppressed because it is too large
Load Diff
@@ -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..."
|
||||
@@ -662,11 +658,10 @@ msgid "Quit"
|
||||
msgstr "Sair"
|
||||
|
||||
msgid "Close Window"
|
||||
msgstr ""
|
||||
msgstr "Fechar Janela"
|
||||
|
||||
#, fuzzy
|
||||
msgid "&Edit"
|
||||
msgstr "Editar"
|
||||
msgstr "&Editar"
|
||||
|
||||
msgid "Copy"
|
||||
msgstr "Copiar"
|
||||
@@ -687,7 +682,7 @@ msgid "Italic"
|
||||
msgstr "Itálico"
|
||||
|
||||
msgid "Link"
|
||||
msgstr ""
|
||||
msgstr "Link"
|
||||
|
||||
msgid "Insert Date Time"
|
||||
msgstr "Inserir Data e Hora"
|
||||
@@ -701,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"
|
||||
@@ -711,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"
|
||||
@@ -729,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"
|
||||
@@ -747,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"
|
||||
@@ -842,7 +836,7 @@ msgid "Check synchronisation configuration"
|
||||
msgstr "Verificar a configuração da sincronização"
|
||||
|
||||
msgid "Browse..."
|
||||
msgstr ""
|
||||
msgstr "Navegar..."
|
||||
|
||||
msgid "Apply"
|
||||
msgstr "Aplicar"
|
||||
@@ -937,9 +931,8 @@ msgstr "Status"
|
||||
msgid "Encryption is:"
|
||||
msgstr "Encriptação está:"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Usage"
|
||||
msgstr "Uso: %s"
|
||||
msgstr "Uso"
|
||||
|
||||
msgid "Back"
|
||||
msgstr "Voltar"
|
||||
@@ -962,9 +955,6 @@ msgstr "Título do caderno:"
|
||||
msgid "Add or remove tags:"
|
||||
msgstr "Adicionar ou remover tags:"
|
||||
|
||||
msgid "Separate each tag by a comma."
|
||||
msgstr "Separe cada tag por vírgula."
|
||||
|
||||
msgid "Rename notebook:"
|
||||
msgstr "Renomear caderno:"
|
||||
|
||||
@@ -986,8 +976,9 @@ msgstr "Alguns itens não podem ser sincronizados."
|
||||
msgid "View them now"
|
||||
msgstr "Visualizar agora"
|
||||
|
||||
msgid "Some items cannot be decrypted."
|
||||
msgstr "Alguns itens não podem ser decriptados."
|
||||
#, fuzzy
|
||||
msgid "One or more master keys need a password."
|
||||
msgstr "Entre a senha master:"
|
||||
|
||||
msgid "Set the password"
|
||||
msgstr "Configurar a senha"
|
||||
@@ -1005,32 +996,32 @@ msgstr "Localização"
|
||||
msgid "URL"
|
||||
msgstr "URL"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Note History"
|
||||
msgstr "Cadernos"
|
||||
msgstr "Histórico da Nota"
|
||||
|
||||
msgid "Previous versions of this note"
|
||||
msgstr ""
|
||||
msgstr "Versões anteriores desta nota"
|
||||
|
||||
msgid "Note properties"
|
||||
msgstr "Propriedades da nota"
|
||||
|
||||
#, javascript-format
|
||||
msgid "The note \"%s\" has been successfully restored to the notebook \"%s\"."
|
||||
msgstr ""
|
||||
msgstr "A nota \"%s\" foi restaurada com sucesso no caderno \"%s\"."
|
||||
|
||||
#, fuzzy
|
||||
msgid "This note has no history"
|
||||
msgstr "Esta nota foi modificada:"
|
||||
msgstr "Esta nota não tem histórico"
|
||||
|
||||
msgid "Restore"
|
||||
msgstr ""
|
||||
msgstr "Restaurar"
|
||||
|
||||
#, javascript-format
|
||||
msgid ""
|
||||
"Click \"%s\" to restore the note. It will be copied in the notebook named "
|
||||
"\"%s\". The current version of the note will not be replaced or modified."
|
||||
msgstr ""
|
||||
"Clique \"%s\" para restaurar a nota. Ela será copiada no caderno com nomes "
|
||||
"\"%s\". A versão atual da nota não será substituída ou modificada."
|
||||
|
||||
msgid "Open..."
|
||||
msgstr "Abrir..."
|
||||
@@ -1064,7 +1055,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"
|
||||
@@ -1152,18 +1143,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?"
|
||||
@@ -1181,8 +1173,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"
|
||||
@@ -1190,6 +1182,9 @@ msgstr ""
|
||||
"Favor selecionar o local para onde o status de sincronia deveria ser "
|
||||
"exportado"
|
||||
|
||||
msgid "Retry"
|
||||
msgstr ""
|
||||
|
||||
msgid "Add or remove tags"
|
||||
msgstr "Adicionar ou remover tags"
|
||||
|
||||
@@ -1212,21 +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"
|
||||
@@ -1343,6 +1340,8 @@ msgstr "Sincronização já em andamento. Estado: %s"
|
||||
msgid ""
|
||||
"Unknown item type downloaded - please upgrade Joplin to the latest version"
|
||||
msgstr ""
|
||||
"Tipo de item desconhecido baixado - por favor, atualize o Joplin para a "
|
||||
"última versão"
|
||||
|
||||
msgid "Encrypted"
|
||||
msgstr "Encriptado"
|
||||
@@ -1391,6 +1390,58 @@ msgstr ""
|
||||
"conteúdo para lá antes de sincronizar, do contrário todos os seus arquivos "
|
||||
"serão removidos! Veja o FAQ para mais detalhes: %s"
|
||||
|
||||
msgid "Synchronisation target"
|
||||
msgstr "Alvo de sincronização"
|
||||
|
||||
msgid ""
|
||||
"The target to synchonise to. Each sync target may have additional parameters "
|
||||
"which are named as `sync.NUM.NAME` (all documented below)."
|
||||
msgstr ""
|
||||
"O alvo para onde sincronizar. Cada alvo pode ter parâmetros adicionais que "
|
||||
"são nomeados como `sync.NUM.NAME` (todos documentados abaixo)."
|
||||
|
||||
msgid "Directory to synchronise with (absolute path)"
|
||||
msgstr "Diretório para sincronizar (caminho absoluto)"
|
||||
|
||||
msgid "Nextcloud WebDAV URL"
|
||||
msgstr "Nextcloud WebDAV URL"
|
||||
|
||||
msgid "Nextcloud username"
|
||||
msgstr "Usuário da Nextcloud"
|
||||
|
||||
msgid "Nextcloud password"
|
||||
msgstr "Senha da Nextcloud"
|
||||
|
||||
msgid "WebDAV URL"
|
||||
msgstr "WebDAV URL"
|
||||
|
||||
msgid "WebDAV username"
|
||||
msgstr "Usuário do WebDAV"
|
||||
|
||||
msgid "WebDAV password"
|
||||
msgstr "Senha do WebDAV"
|
||||
|
||||
msgid "Attachment download behaviour"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"In \"Manual\" mode, attachments are downloaded only when you click on them. "
|
||||
"In \"Auto\", they are downloaded when you open the note. In \"Always\", all "
|
||||
"the attachments are downloaded whether you open the note or not."
|
||||
msgstr ""
|
||||
|
||||
msgid "Always"
|
||||
msgstr ""
|
||||
|
||||
msgid "Manual"
|
||||
msgstr ""
|
||||
|
||||
msgid "Auto"
|
||||
msgstr ""
|
||||
|
||||
msgid "Max concurrent connections"
|
||||
msgstr ""
|
||||
|
||||
msgid "Language"
|
||||
msgstr "Idioma"
|
||||
|
||||
@@ -1421,7 +1472,6 @@ msgstr "Ordenar notas por"
|
||||
msgid "Reverse sort order"
|
||||
msgstr "Inverter ordem de classificação"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Sort notebooks by"
|
||||
msgstr "Ordenar notas por"
|
||||
|
||||
@@ -1441,41 +1491,40 @@ msgid "When creating a new note:"
|
||||
msgstr "Quando criar uma nota nova:"
|
||||
|
||||
msgid "Enable soft breaks"
|
||||
msgstr ""
|
||||
msgstr "Habilitar soft breaks"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Enable math expressions"
|
||||
msgstr "Habilitar encriptação"
|
||||
msgstr "Habilitar expressões matemáticas"
|
||||
|
||||
msgid "Enable ==mark== syntax"
|
||||
msgstr ""
|
||||
msgstr "Habilitar sintaxe ==marcador== "
|
||||
|
||||
msgid "Enable footnotes"
|
||||
msgstr ""
|
||||
msgstr "Habilitar notas de rodapé"
|
||||
|
||||
msgid "Enable table of contents extension"
|
||||
msgstr ""
|
||||
msgstr "Habilitar extensão de tabela de conteúdo"
|
||||
|
||||
msgid "Enable ~sub~ syntax"
|
||||
msgstr ""
|
||||
msgstr "Habilitar sintaxe ~sub~"
|
||||
|
||||
msgid "Enable ^sup^ syntax"
|
||||
msgstr ""
|
||||
msgstr "Habilitar sintaxe ^sup^ "
|
||||
|
||||
msgid "Enable deflist syntax"
|
||||
msgstr ""
|
||||
msgstr "Habilitar sintaxe de deflist "
|
||||
|
||||
msgid "Enable abbreviation syntax"
|
||||
msgstr ""
|
||||
msgstr "Habilitar sintaxe de abreviações"
|
||||
|
||||
msgid "Enable markdown emoji"
|
||||
msgstr ""
|
||||
msgstr "Habilitar emojis em markdown "
|
||||
|
||||
msgid "Enable ++insert++ syntax"
|
||||
msgstr ""
|
||||
msgstr "Habilitar sintaxe ++inserir++ "
|
||||
|
||||
msgid "Enable multimarkdown table extension"
|
||||
msgstr ""
|
||||
msgstr "Habilitar extensão de tabela de multimarkdown "
|
||||
|
||||
msgid "Show tray icon"
|
||||
msgstr "Exibir tray icon"
|
||||
@@ -1515,11 +1564,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"
|
||||
@@ -1550,37 +1599,6 @@ msgstr ""
|
||||
msgid "Show advanced options"
|
||||
msgstr "Mostrar opções avançadas"
|
||||
|
||||
msgid "Synchronisation target"
|
||||
msgstr "Alvo de sincronização"
|
||||
|
||||
msgid ""
|
||||
"The target to synchonise to. Each sync target may have additional parameters "
|
||||
"which are named as `sync.NUM.NAME` (all documented below)."
|
||||
msgstr ""
|
||||
"O alvo para onde sincronizar. Cada alvo pode ter parâmetros adicionais que "
|
||||
"são nomeados como `sync.NUM.NAME` (todos documentados abaixo)."
|
||||
|
||||
msgid "Directory to synchronise with (absolute path)"
|
||||
msgstr "Diretório para sincronizar (caminho absoluto)"
|
||||
|
||||
msgid "Nextcloud WebDAV URL"
|
||||
msgstr "Nextcloud WebDAV URL"
|
||||
|
||||
msgid "Nextcloud username"
|
||||
msgstr "Usuário da Nextcloud"
|
||||
|
||||
msgid "Nextcloud password"
|
||||
msgstr "Senha da Nextcloud"
|
||||
|
||||
msgid "WebDAV URL"
|
||||
msgstr "WebDAV URL"
|
||||
|
||||
msgid "WebDAV username"
|
||||
msgstr "Usuário do WebDAV"
|
||||
|
||||
msgid "WebDAV password"
|
||||
msgstr "Senha do WebDAV"
|
||||
|
||||
msgid "Custom TLS certificates"
|
||||
msgstr "Certificados TLS customizados"
|
||||
|
||||
@@ -1599,45 +1617,40 @@ msgstr ""
|
||||
msgid "Ignore TLS certificate errors"
|
||||
msgstr "Ignorar erros de certificados TLS"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Enable note history"
|
||||
msgstr "Habilitar encriptação"
|
||||
msgstr "Habilitar histórico de notas"
|
||||
|
||||
msgid "days"
|
||||
msgstr ""
|
||||
msgstr "dias"
|
||||
|
||||
#, javascript-format
|
||||
msgid "%d days"
|
||||
msgstr ""
|
||||
msgstr "%d dias"
|
||||
|
||||
msgid "Keep note history for"
|
||||
msgstr ""
|
||||
msgstr "Manter histórico de nota por"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Invalid option value: \"%s\". Possible values are: %s."
|
||||
msgstr "Valor da opção inválida: \"%s\". Os valores possíveis são: %s."
|
||||
|
||||
#, fuzzy
|
||||
msgid "General"
|
||||
msgstr "Opções Gerais"
|
||||
msgstr "Geral"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Synchronisation"
|
||||
msgstr "Status de sincronização"
|
||||
msgstr "Sincronização"
|
||||
|
||||
msgid "Appearance"
|
||||
msgstr ""
|
||||
msgstr "Aparência"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Note"
|
||||
msgstr "Cadernos"
|
||||
msgstr "Nota"
|
||||
|
||||
msgid "Plugins"
|
||||
msgstr ""
|
||||
msgstr "Plugins"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Application"
|
||||
msgstr "Localização"
|
||||
msgstr "Aplicação"
|
||||
|
||||
#, javascript-format
|
||||
msgid "The tag \"%s\" already exists. Please choose a different name."
|
||||
@@ -1688,19 +1701,11 @@ msgstr ""
|
||||
"Por favor, especifique o caderno para onde as notas deveriam ser importadas."
|
||||
|
||||
msgid "Restored Notes"
|
||||
msgstr ""
|
||||
msgstr "Notas restauradas"
|
||||
|
||||
msgid "Items that cannot be synchronised"
|
||||
msgstr "Os itens não podem ser sincronizados"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "%s (%s) could not be uploaded: %s"
|
||||
msgstr "Este arquivo não pôde ser aberto: %s"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Item \"%s\" could not be downloaded: %s"
|
||||
msgstr "Este arquivo não pôde ser aberto: %s"
|
||||
|
||||
msgid ""
|
||||
"These items will remain on the device but will not be uploaded to the sync "
|
||||
"target. In order to find these items, either search for the title or the ID "
|
||||
@@ -1710,6 +1715,24 @@ msgstr ""
|
||||
"sincronização. Para encontrar esses itens, ou pesquise pelo título ou pelo "
|
||||
"ID (que é exibido nos colchetes acima)"
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s (%s) could not be uploaded: %s"
|
||||
msgstr "%s (%s) não pôde ser enviado: %s"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Item \"%s\" could not be downloaded: %s"
|
||||
msgstr "Item \"%s\" não pôde ser baixado: %s"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Items that cannot be decrypted"
|
||||
msgstr "Os itens não podem ser sincronizados"
|
||||
|
||||
msgid ""
|
||||
"Joplin failed to decrypt these items multiple times, possibly because they "
|
||||
"are corrupted or too large. These items will remain on the device but Joplin "
|
||||
"will no longer attempt to decrypt them."
|
||||
msgstr ""
|
||||
|
||||
msgid "Sync status (synced items / total items)"
|
||||
msgstr "Status de sincronização (sincronizados / totais)"
|
||||
|
||||
@@ -1833,6 +1856,10 @@ msgstr "Novas tags:"
|
||||
msgid "Type new tags or select from list"
|
||||
msgstr "Digite novsa tags, ou selecione da lista"
|
||||
|
||||
#, fuzzy
|
||||
msgid "More information"
|
||||
msgstr "Configuração"
|
||||
|
||||
msgid ""
|
||||
"To work correctly, the app needs the following permissions. Please enable "
|
||||
"them in your phone settings, in Apps > Joplin > Permissions"
|
||||
@@ -1861,18 +1888,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"
|
||||
@@ -1980,6 +2006,12 @@ msgstr "Você não possui cadernos. Crie um clicando no botão (+)."
|
||||
msgid "Welcome"
|
||||
msgstr "Bem-vindo"
|
||||
|
||||
#~ msgid "Separate each tag by a comma."
|
||||
#~ msgstr "Separe cada tag por vírgula."
|
||||
|
||||
#~ msgid "Some items cannot be decrypted."
|
||||
#~ msgstr "Alguns itens não podem ser decriptados."
|
||||
|
||||
#~ msgid "%s (%s): %s"
|
||||
#~ msgstr "%s (%s): %s"
|
||||
|
||||
|
@@ -668,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"
|
||||
@@ -878,9 +881,6 @@ msgstr "Titlul caietului de notițe:"
|
||||
msgid "Add or remove tags:"
|
||||
msgstr "Adăugați ori eliminați etichete:"
|
||||
|
||||
msgid "Separate each tag by a comma."
|
||||
msgstr "Separați fiecare etichetă printr-o virgulă."
|
||||
|
||||
msgid "Rename notebook:"
|
||||
msgstr "Redenumiți caietul de notițe:"
|
||||
|
||||
@@ -902,8 +902,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"
|
||||
@@ -1094,12 +1094,15 @@ msgid "Decrypting items: %d/%d"
|
||||
msgstr "Se decriptează itemi: %d/%d"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Fetching resources: %d"
|
||||
msgstr "Resurse: %d."
|
||||
msgid "Fetching resources: %d/%d"
|
||||
msgstr "Resurse: %d/%d"
|
||||
|
||||
msgid "Please select where the sync status should be exported to"
|
||||
msgstr ""
|
||||
|
||||
msgid "Retry"
|
||||
msgstr ""
|
||||
|
||||
msgid "Add or remove tags"
|
||||
msgstr "Adăugați ori eliminați etichete"
|
||||
|
||||
@@ -1292,6 +1295,56 @@ msgid ""
|
||||
"more details: %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Synchronisation target"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"The target to synchonise to. Each sync target may have additional parameters "
|
||||
"which are named as `sync.NUM.NAME` (all documented below)."
|
||||
msgstr ""
|
||||
|
||||
msgid "Directory to synchronise with (absolute path)"
|
||||
msgstr ""
|
||||
|
||||
msgid "Nextcloud WebDAV URL"
|
||||
msgstr "URL NextCloud WebDAV"
|
||||
|
||||
msgid "Nextcloud username"
|
||||
msgstr "Nume utilizator Nextcloud"
|
||||
|
||||
msgid "Nextcloud password"
|
||||
msgstr "Parolă Nextcloud"
|
||||
|
||||
msgid "WebDAV URL"
|
||||
msgstr "URL-ul WebDAV"
|
||||
|
||||
msgid "WebDAV username"
|
||||
msgstr "Nume utilizator WebDAV"
|
||||
|
||||
msgid "WebDAV password"
|
||||
msgstr "Parolă WebDAV"
|
||||
|
||||
msgid "Attachment download behaviour"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"In \"Manual\" mode, attachments are downloaded only when you click on them. "
|
||||
"In \"Auto\", they are downloaded when you open the note. In \"Always\", all "
|
||||
"the attachments are downloaded whether you open the note or not."
|
||||
msgstr ""
|
||||
|
||||
msgid "Always"
|
||||
msgstr ""
|
||||
|
||||
msgid "Manual"
|
||||
msgstr ""
|
||||
|
||||
msgid "Auto"
|
||||
msgstr ""
|
||||
|
||||
msgid "Max concurrent connections"
|
||||
msgstr ""
|
||||
|
||||
msgid "Language"
|
||||
msgstr "Limbă"
|
||||
|
||||
@@ -1444,35 +1497,6 @@ msgstr ""
|
||||
msgid "Show advanced options"
|
||||
msgstr "Afișați opțiunile avansate"
|
||||
|
||||
msgid "Synchronisation target"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"The target to synchonise to. Each sync target may have additional parameters "
|
||||
"which are named as `sync.NUM.NAME` (all documented below)."
|
||||
msgstr ""
|
||||
|
||||
msgid "Directory to synchronise with (absolute path)"
|
||||
msgstr ""
|
||||
|
||||
msgid "Nextcloud WebDAV URL"
|
||||
msgstr "URL NextCloud WebDAV"
|
||||
|
||||
msgid "Nextcloud username"
|
||||
msgstr "Nume utilizator Nextcloud"
|
||||
|
||||
msgid "Nextcloud password"
|
||||
msgstr "Parolă Nextcloud"
|
||||
|
||||
msgid "WebDAV URL"
|
||||
msgstr "URL-ul WebDAV"
|
||||
|
||||
msgid "WebDAV username"
|
||||
msgstr "Nume utilizator WebDAV"
|
||||
|
||||
msgid "WebDAV password"
|
||||
msgstr "Parolă WebDAV"
|
||||
|
||||
msgid "Custom TLS certificates"
|
||||
msgstr "Certificate TLS cusomizate"
|
||||
|
||||
@@ -1577,6 +1601,12 @@ msgstr ""
|
||||
msgid "Items that cannot be synchronised"
|
||||
msgstr "Itemii nu pot fi sincronizați"
|
||||
|
||||
msgid ""
|
||||
"These items will remain on the device but will not be uploaded to the sync "
|
||||
"target. In order to find these items, either search for the title or the ID "
|
||||
"(which is displayed in brackets above)."
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "%s (%s) could not be uploaded: %s"
|
||||
msgstr "Acest fișier nu a putut fi deschis: %s"
|
||||
@@ -1585,10 +1615,14 @@ msgstr "Acest fișier nu a putut fi deschis: %s"
|
||||
msgid "Item \"%s\" could not be downloaded: %s"
|
||||
msgstr "Acest fișier nu a putut fi deschis: %s"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Items that cannot be decrypted"
|
||||
msgstr "Itemii nu pot fi sincronizați"
|
||||
|
||||
msgid ""
|
||||
"These items will remain on the device but will not be uploaded to the sync "
|
||||
"target. In order to find these items, either search for the title or the ID "
|
||||
"(which is displayed in brackets above)."
|
||||
"Joplin failed to decrypt these items multiple times, possibly because they "
|
||||
"are corrupted or too large. These items will remain on the device but Joplin "
|
||||
"will no longer attempt to decrypt them."
|
||||
msgstr ""
|
||||
|
||||
msgid "Sync status (synced items / total items)"
|
||||
@@ -1708,6 +1742,10 @@ msgstr "Etichete noi:"
|
||||
msgid "Type new tags or select from list"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "More information"
|
||||
msgstr "Configurare"
|
||||
|
||||
msgid ""
|
||||
"To work correctly, the app needs the following permissions. Please enable "
|
||||
"them in your phone settings, in Apps > Joplin > Permissions"
|
||||
@@ -1849,6 +1887,12 @@ msgstr ""
|
||||
msgid "Welcome"
|
||||
msgstr "Bine ați venit"
|
||||
|
||||
#~ msgid "Separate each tag by a comma."
|
||||
#~ msgstr "Separați fiecare etichetă printr-o virgulă."
|
||||
|
||||
#~ msgid "Some items cannot be decrypted."
|
||||
#~ msgstr "Câțiva itemi nu pot fi descriptați."
|
||||
|
||||
#~ msgid "%s (%s): %s"
|
||||
#~ msgstr "%s (%s): %s"
|
||||
|
||||
|
@@ -726,6 +726,9 @@ msgstr "Сайт и документация"
|
||||
msgid "Make a donation"
|
||||
msgstr "Сделать пожертвование"
|
||||
|
||||
msgid "Toggle development tools"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Open %s"
|
||||
msgstr "Открыть %s"
|
||||
@@ -959,9 +962,6 @@ msgstr "Название блокнота:"
|
||||
msgid "Add or remove tags:"
|
||||
msgstr "Добавить или удалить метки:"
|
||||
|
||||
msgid "Separate each tag by a comma."
|
||||
msgstr "Разделяйте каждую метку запятой."
|
||||
|
||||
msgid "Rename notebook:"
|
||||
msgstr "Переименовать блокнот:"
|
||||
|
||||
@@ -983,8 +983,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 "Установить пароль"
|
||||
@@ -1180,13 +1181,16 @@ msgid "Decrypting items: %d/%d"
|
||||
msgstr "Расшифровано элементов: %d/%d"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Fetching resources: %d"
|
||||
msgstr "Получение ресурсов: %d"
|
||||
msgid "Fetching resources: %d/%d"
|
||||
msgstr "Получение ресурсов: %d/%d"
|
||||
|
||||
msgid "Please select where the sync status should be exported to"
|
||||
msgstr ""
|
||||
"Пожалуйста, выберите, куда должен быть экспортирован статус синхронизации"
|
||||
|
||||
msgid "Retry"
|
||||
msgstr ""
|
||||
|
||||
msgid "Add or remove tags"
|
||||
msgstr "Добавить или удалить метки"
|
||||
|
||||
@@ -1388,6 +1392,58 @@ msgstr ""
|
||||
"содержимое перед синхронизацией, в противном случае все файлы будут удалены! "
|
||||
"Смотрите FAQ для получения подробной информации: %s"
|
||||
|
||||
msgid "Synchronisation target"
|
||||
msgstr "Цель синхронизации"
|
||||
|
||||
msgid ""
|
||||
"The target to synchonise to. Each sync target may have additional parameters "
|
||||
"which are named as `sync.NUM.NAME` (all documented below)."
|
||||
msgstr ""
|
||||
"Цель синхронизации. Каждая цель синхронизации может иметь дополнительные "
|
||||
"параметры, именованные как `sync.NUM.NAME` (все документировано ниже)."
|
||||
|
||||
msgid "Directory to synchronise with (absolute path)"
|
||||
msgstr "Каталог синхронизации (абсолютный путь)"
|
||||
|
||||
msgid "Nextcloud WebDAV URL"
|
||||
msgstr "Nextcloud WebDAV URL"
|
||||
|
||||
msgid "Nextcloud username"
|
||||
msgstr "Имя пользователя Nextcloud"
|
||||
|
||||
msgid "Nextcloud password"
|
||||
msgstr "Пароль Nextcloud"
|
||||
|
||||
msgid "WebDAV URL"
|
||||
msgstr "WebDAV URL"
|
||||
|
||||
msgid "WebDAV username"
|
||||
msgstr "Имя пользователя WebDAV"
|
||||
|
||||
msgid "WebDAV password"
|
||||
msgstr "Пароль WebDAV"
|
||||
|
||||
msgid "Attachment download behaviour"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"In \"Manual\" mode, attachments are downloaded only when you click on them. "
|
||||
"In \"Auto\", they are downloaded when you open the note. In \"Always\", all "
|
||||
"the attachments are downloaded whether you open the note or not."
|
||||
msgstr ""
|
||||
|
||||
msgid "Always"
|
||||
msgstr ""
|
||||
|
||||
msgid "Manual"
|
||||
msgstr ""
|
||||
|
||||
msgid "Auto"
|
||||
msgstr ""
|
||||
|
||||
msgid "Max concurrent connections"
|
||||
msgstr ""
|
||||
|
||||
msgid "Language"
|
||||
msgstr "Язык"
|
||||
|
||||
@@ -1548,37 +1604,6 @@ msgstr ""
|
||||
msgid "Show advanced options"
|
||||
msgstr "Показывать расширенные настройки"
|
||||
|
||||
msgid "Synchronisation target"
|
||||
msgstr "Цель синхронизации"
|
||||
|
||||
msgid ""
|
||||
"The target to synchonise to. Each sync target may have additional parameters "
|
||||
"which are named as `sync.NUM.NAME` (all documented below)."
|
||||
msgstr ""
|
||||
"Цель синхронизации. Каждая цель синхронизации может иметь дополнительные "
|
||||
"параметры, именованные как `sync.NUM.NAME` (все документировано ниже)."
|
||||
|
||||
msgid "Directory to synchronise with (absolute path)"
|
||||
msgstr "Каталог синхронизации (абсолютный путь)"
|
||||
|
||||
msgid "Nextcloud WebDAV URL"
|
||||
msgstr "Nextcloud WebDAV URL"
|
||||
|
||||
msgid "Nextcloud username"
|
||||
msgstr "Имя пользователя Nextcloud"
|
||||
|
||||
msgid "Nextcloud password"
|
||||
msgstr "Пароль Nextcloud"
|
||||
|
||||
msgid "WebDAV URL"
|
||||
msgstr "WebDAV URL"
|
||||
|
||||
msgid "WebDAV username"
|
||||
msgstr "Имя пользователя WebDAV"
|
||||
|
||||
msgid "WebDAV password"
|
||||
msgstr "Пароль WebDAV"
|
||||
|
||||
msgid "Custom TLS certificates"
|
||||
msgstr "Пользовательские сертификаты TLS"
|
||||
|
||||
@@ -1687,14 +1712,6 @@ msgstr ""
|
||||
msgid "Items that cannot be synchronised"
|
||||
msgstr "Элементы, которые не могут быть синхронизированы"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "%s (%s) could not be uploaded: %s"
|
||||
msgstr "Этот файл не может быть открыт: %s"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Item \"%s\" could not be downloaded: %s"
|
||||
msgstr "Этот файл не может быть открыт: %s"
|
||||
|
||||
msgid ""
|
||||
"These items will remain on the device but will not be uploaded to the sync "
|
||||
"target. In order to find these items, either search for the title or the ID "
|
||||
@@ -1704,6 +1721,24 @@ msgstr ""
|
||||
"синхронизации. Чтобы найти эти элементы, воспользуйтесь поиском по названию "
|
||||
"или ID (который указывается в скобках выше)."
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "%s (%s) could not be uploaded: %s"
|
||||
msgstr "Этот файл не может быть открыт: %s"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Item \"%s\" could not be downloaded: %s"
|
||||
msgstr "Этот файл не может быть открыт: %s"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Items that cannot be decrypted"
|
||||
msgstr "Элементы, которые не могут быть синхронизированы"
|
||||
|
||||
msgid ""
|
||||
"Joplin failed to decrypt these items multiple times, possibly because they "
|
||||
"are corrupted or too large. These items will remain on the device but Joplin "
|
||||
"will no longer attempt to decrypt them."
|
||||
msgstr ""
|
||||
|
||||
msgid "Sync status (synced items / total items)"
|
||||
msgstr "Статус синхронизации (синхронизировано / всего)"
|
||||
|
||||
@@ -1826,6 +1861,10 @@ msgstr "Новые метки:"
|
||||
msgid "Type new tags or select from list"
|
||||
msgstr "Введите новые метки или выберите из списка"
|
||||
|
||||
#, fuzzy
|
||||
msgid "More information"
|
||||
msgstr "Конфигурация"
|
||||
|
||||
msgid ""
|
||||
"To work correctly, the app needs the following permissions. Please enable "
|
||||
"them in your phone settings, in Apps > Joplin > Permissions"
|
||||
@@ -1973,6 +2012,12 @@ msgstr "У вас сейчас нет блокнота. Создайте его
|
||||
msgid "Welcome"
|
||||
msgstr "Добро пожаловать"
|
||||
|
||||
#~ msgid "Separate each tag by a comma."
|
||||
#~ msgstr "Разделяйте каждую метку запятой."
|
||||
|
||||
#~ msgid "Some items cannot be decrypted."
|
||||
#~ msgstr "Некоторые элементы не могут быть расшифрованы."
|
||||
|
||||
#~ msgid "%s (%s): %s"
|
||||
#~ msgstr "%s (%s): %s"
|
||||
|
||||
|
@@ -731,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"
|
||||
@@ -957,9 +960,6 @@ msgstr "Naslov beležnice:"
|
||||
msgid "Add or remove tags:"
|
||||
msgstr "Dodaj ali odstrani oznako:"
|
||||
|
||||
msgid "Separate each tag by a comma."
|
||||
msgstr "Loči vsako oznako z vejico."
|
||||
|
||||
msgid "Rename notebook:"
|
||||
msgstr "Preimenuj beležnico:"
|
||||
|
||||
@@ -983,8 +983,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"
|
||||
@@ -1182,15 +1183,18 @@ msgstr "Beležnice"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Decrypting items: %d/%d"
|
||||
msgstr "Preneseni predmeti: %d/%d."
|
||||
msgstr "Preneseni predmeti: %d/%d"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Fetching resources: %d"
|
||||
msgstr "Viri: %d."
|
||||
msgid "Fetching resources: %d/%d"
|
||||
msgstr "Viri: %d/%d"
|
||||
|
||||
msgid "Please select where the sync status should be exported to"
|
||||
msgstr "Prosim izberite, kam želite izvoziti sinhronizacijski status"
|
||||
|
||||
msgid "Retry"
|
||||
msgstr ""
|
||||
|
||||
msgid "Add or remove tags"
|
||||
msgstr "Dodaj ali odstrani oznake"
|
||||
|
||||
@@ -1396,6 +1400,58 @@ msgid ""
|
||||
"more details: %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Synchronisation target"
|
||||
msgstr "Sinhronizacijski cilj"
|
||||
|
||||
msgid ""
|
||||
"The target to synchonise to. Each sync target may have additional parameters "
|
||||
"which are named as `sync.NUM.NAME` (all documented below)."
|
||||
msgstr ""
|
||||
"Ciljno sinhronizacijsko mesto. Vsak sinhronizacijski cilj ima lahko dodatne "
|
||||
"parametre imenovano kot `sync.NUM.NAME` (vse je dokumentirano spodaj)."
|
||||
|
||||
msgid "Directory to synchronise with (absolute path)"
|
||||
msgstr "Mesto ciljne sinhronizacije (absolutna pot)"
|
||||
|
||||
msgid "Nextcloud WebDAV URL"
|
||||
msgstr "Nextcloud WebDAV URL"
|
||||
|
||||
msgid "Nextcloud username"
|
||||
msgstr "Nextcloud uporabniško ime"
|
||||
|
||||
msgid "Nextcloud password"
|
||||
msgstr "Nextcloud geslo"
|
||||
|
||||
msgid "WebDAV URL"
|
||||
msgstr "WebDAV URL"
|
||||
|
||||
msgid "WebDAV username"
|
||||
msgstr "WebDAV uporabniško ime"
|
||||
|
||||
msgid "WebDAV password"
|
||||
msgstr "WebDAV geslo"
|
||||
|
||||
msgid "Attachment download behaviour"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"In \"Manual\" mode, attachments are downloaded only when you click on them. "
|
||||
"In \"Auto\", they are downloaded when you open the note. In \"Always\", all "
|
||||
"the attachments are downloaded whether you open the note or not."
|
||||
msgstr ""
|
||||
|
||||
msgid "Always"
|
||||
msgstr ""
|
||||
|
||||
msgid "Manual"
|
||||
msgstr ""
|
||||
|
||||
msgid "Auto"
|
||||
msgstr ""
|
||||
|
||||
msgid "Max concurrent connections"
|
||||
msgstr ""
|
||||
|
||||
msgid "Language"
|
||||
msgstr "Jezik"
|
||||
|
||||
@@ -1556,37 +1612,6 @@ msgstr ""
|
||||
msgid "Show advanced options"
|
||||
msgstr "Pokaži napredne možnosti"
|
||||
|
||||
msgid "Synchronisation target"
|
||||
msgstr "Sinhronizacijski cilj"
|
||||
|
||||
msgid ""
|
||||
"The target to synchonise to. Each sync target may have additional parameters "
|
||||
"which are named as `sync.NUM.NAME` (all documented below)."
|
||||
msgstr ""
|
||||
"Ciljno sinhronizacijsko mesto. Vsak sinhronizacijski cilj ima lahko dodatne "
|
||||
"parametre imenovano kot `sync.NUM.NAME` (vse je dokumentirano spodaj)."
|
||||
|
||||
msgid "Directory to synchronise with (absolute path)"
|
||||
msgstr "Mesto ciljne sinhronizacije (absolutna pot)"
|
||||
|
||||
msgid "Nextcloud WebDAV URL"
|
||||
msgstr "Nextcloud WebDAV URL"
|
||||
|
||||
msgid "Nextcloud username"
|
||||
msgstr "Nextcloud uporabniško ime"
|
||||
|
||||
msgid "Nextcloud password"
|
||||
msgstr "Nextcloud geslo"
|
||||
|
||||
msgid "WebDAV URL"
|
||||
msgstr "WebDAV URL"
|
||||
|
||||
msgid "WebDAV username"
|
||||
msgstr "WebDAV uporabniško ime"
|
||||
|
||||
msgid "WebDAV password"
|
||||
msgstr "WebDAV geslo"
|
||||
|
||||
msgid "Custom TLS certificates"
|
||||
msgstr ""
|
||||
|
||||
@@ -1694,14 +1719,6 @@ msgstr ""
|
||||
msgid "Items that cannot be synchronised"
|
||||
msgstr "Predmeti ne morejo biti sinhronizirani"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "%s (%s) could not be uploaded: %s"
|
||||
msgstr "Beležnica ne more biti shranjena: %s"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Item \"%s\" could not be downloaded: %s"
|
||||
msgstr "Beležnica ne more biti shranjena: %s"
|
||||
|
||||
msgid ""
|
||||
"These items will remain on the device but will not be uploaded to the sync "
|
||||
"target. In order to find these items, either search for the title or the ID "
|
||||
@@ -1711,6 +1728,24 @@ msgstr ""
|
||||
"sinhronizacijski cilj. Če želite najti te predmete, iščite po ali naslovu "
|
||||
"ali ID(je prikazan zgoraj v oklepajih)"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "%s (%s) could not be uploaded: %s"
|
||||
msgstr "Beležnica ne more biti shranjena: %s"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Item \"%s\" could not be downloaded: %s"
|
||||
msgstr "Beležnica ne more biti shranjena: %s"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Items that cannot be decrypted"
|
||||
msgstr "Predmeti ne morejo biti sinhronizirani"
|
||||
|
||||
msgid ""
|
||||
"Joplin failed to decrypt these items multiple times, possibly because they "
|
||||
"are corrupted or too large. These items will remain on the device but Joplin "
|
||||
"will no longer attempt to decrypt them."
|
||||
msgstr ""
|
||||
|
||||
msgid "Sync status (synced items / total items)"
|
||||
msgstr "Status sinhronizacije(sinhronizirani predmeti / vse datoteke)"
|
||||
|
||||
@@ -1831,6 +1866,10 @@ msgstr ""
|
||||
msgid "Type new tags or select from list"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "More information"
|
||||
msgstr "Nastavitve"
|
||||
|
||||
msgid ""
|
||||
"To work correctly, the app needs the following permissions. Please enable "
|
||||
"them in your phone settings, in Apps > Joplin > Permissions"
|
||||
@@ -1972,6 +2011,12 @@ msgstr "Trenutno nimate nobene beležnice. Ustvarite jo s klikom na (+) gumb."
|
||||
msgid "Welcome"
|
||||
msgstr "Dobrodošli"
|
||||
|
||||
#~ msgid "Separate each tag by a comma."
|
||||
#~ msgstr "Loči vsako oznako z vejico."
|
||||
|
||||
#~ msgid "Some items cannot be decrypted."
|
||||
#~ msgstr "Nekateri predmeti ne morejo biti dekriptirani."
|
||||
|
||||
#~ msgid "%s (%s): %s"
|
||||
#~ msgstr "%s (%s): %s"
|
||||
|
||||
|
@@ -732,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"
|
||||
@@ -965,9 +968,6 @@ msgstr "Titel på anteckningsbok:"
|
||||
msgid "Add or remove tags:"
|
||||
msgstr "Lägg till eller ta bort taggar:"
|
||||
|
||||
msgid "Separate each tag by a comma."
|
||||
msgstr "Separera varje tagg med ett komma."
|
||||
|
||||
msgid "Rename notebook:"
|
||||
msgstr "Byt namn på anteckningsbok:"
|
||||
|
||||
@@ -989,8 +989,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"
|
||||
@@ -1188,12 +1189,15 @@ msgid "Decrypting items: %d/%d"
|
||||
msgstr "Dekrypterar objekt: %d/%d"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Fetching resources: %d"
|
||||
msgstr "Hämtar resurser: %d"
|
||||
msgid "Fetching resources: %d/%d"
|
||||
msgstr "Hämtar resurser: %d/%d"
|
||||
|
||||
msgid "Please select where the sync status should be exported to"
|
||||
msgstr "Välj vart synkroniseringstillståndet ska exporteras till"
|
||||
|
||||
msgid "Retry"
|
||||
msgstr ""
|
||||
|
||||
msgid "Add or remove tags"
|
||||
msgstr "Lägg till eller ta bort taggar"
|
||||
|
||||
@@ -1397,6 +1401,58 @@ msgstr ""
|
||||
"innehåll innan du synkroniserar. Annars kommer samtliga filer att raderas. "
|
||||
"Läs FAQ för mer information: %s"
|
||||
|
||||
msgid "Synchronisation target"
|
||||
msgstr "Synkroniseringsmål"
|
||||
|
||||
msgid ""
|
||||
"The target to synchonise to. Each sync target may have additional parameters "
|
||||
"which are named as `sync.NUM.NAME` (all documented below)."
|
||||
msgstr ""
|
||||
"Målet att synkronisera till. Varje synkroniseringsmål kan ha ytterligare "
|
||||
"parametrar som heter `sync.NUM.NAME` (alla dokumenterade nedan)."
|
||||
|
||||
msgid "Directory to synchronise with (absolute path)"
|
||||
msgstr "Katalog för att synkronisera med (absolut sökväg)"
|
||||
|
||||
msgid "Nextcloud WebDAV URL"
|
||||
msgstr "Nextcloud-WebDAV-webbadress"
|
||||
|
||||
msgid "Nextcloud username"
|
||||
msgstr "Nextcloud-användarnamn"
|
||||
|
||||
msgid "Nextcloud password"
|
||||
msgstr "Nextcloud-lösenord"
|
||||
|
||||
msgid "WebDAV URL"
|
||||
msgstr "WebDAV-webbadress"
|
||||
|
||||
msgid "WebDAV username"
|
||||
msgstr "WebDAV-användarnamn"
|
||||
|
||||
msgid "WebDAV password"
|
||||
msgstr "WebDAV-lösenord"
|
||||
|
||||
msgid "Attachment download behaviour"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"In \"Manual\" mode, attachments are downloaded only when you click on them. "
|
||||
"In \"Auto\", they are downloaded when you open the note. In \"Always\", all "
|
||||
"the attachments are downloaded whether you open the note or not."
|
||||
msgstr ""
|
||||
|
||||
msgid "Always"
|
||||
msgstr ""
|
||||
|
||||
msgid "Manual"
|
||||
msgstr ""
|
||||
|
||||
msgid "Auto"
|
||||
msgstr ""
|
||||
|
||||
msgid "Max concurrent connections"
|
||||
msgstr ""
|
||||
|
||||
msgid "Language"
|
||||
msgstr "Språk"
|
||||
|
||||
@@ -1557,37 +1613,6 @@ msgstr ""
|
||||
msgid "Show advanced options"
|
||||
msgstr "Visa avancerade inställningar"
|
||||
|
||||
msgid "Synchronisation target"
|
||||
msgstr "Synkroniseringsmål"
|
||||
|
||||
msgid ""
|
||||
"The target to synchonise to. Each sync target may have additional parameters "
|
||||
"which are named as `sync.NUM.NAME` (all documented below)."
|
||||
msgstr ""
|
||||
"Målet att synkronisera till. Varje synkroniseringsmål kan ha ytterligare "
|
||||
"parametrar som heter `sync.NUM.NAME` (alla dokumenterade nedan)."
|
||||
|
||||
msgid "Directory to synchronise with (absolute path)"
|
||||
msgstr "Katalog för att synkronisera med (absolut sökväg)"
|
||||
|
||||
msgid "Nextcloud WebDAV URL"
|
||||
msgstr "Nextcloud-WebDAV-webbadress"
|
||||
|
||||
msgid "Nextcloud username"
|
||||
msgstr "Nextcloud-användarnamn"
|
||||
|
||||
msgid "Nextcloud password"
|
||||
msgstr "Nextcloud-lösenord"
|
||||
|
||||
msgid "WebDAV URL"
|
||||
msgstr "WebDAV-webbadress"
|
||||
|
||||
msgid "WebDAV username"
|
||||
msgstr "WebDAV-användarnamn"
|
||||
|
||||
msgid "WebDAV password"
|
||||
msgstr "WebDAV-lösenord"
|
||||
|
||||
msgid "Custom TLS certificates"
|
||||
msgstr "Anpassade TLS-certifikat"
|
||||
|
||||
@@ -1696,14 +1721,6 @@ msgstr ""
|
||||
msgid "Items that cannot be synchronised"
|
||||
msgstr "Objekt som inte kan synkroniseras"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "%s (%s) could not be uploaded: %s"
|
||||
msgstr "Den här filen kunde inte öppnas: %s"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Item \"%s\" could not be downloaded: %s"
|
||||
msgstr "Den här filen kunde inte öppnas: %s"
|
||||
|
||||
msgid ""
|
||||
"These items will remain on the device but will not be uploaded to the sync "
|
||||
"target. In order to find these items, either search for the title or the ID "
|
||||
@@ -1713,6 +1730,24 @@ msgstr ""
|
||||
"till synkroniseringsmålet. För att hitta dessa objekt, sök antingen efter "
|
||||
"titel eller ID (som visas i parentes ovan)."
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "%s (%s) could not be uploaded: %s"
|
||||
msgstr "Den här filen kunde inte öppnas: %s"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Item \"%s\" could not be downloaded: %s"
|
||||
msgstr "Den här filen kunde inte öppnas: %s"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Items that cannot be decrypted"
|
||||
msgstr "Objekt som inte kan synkroniseras"
|
||||
|
||||
msgid ""
|
||||
"Joplin failed to decrypt these items multiple times, possibly because they "
|
||||
"are corrupted or too large. These items will remain on the device but Joplin "
|
||||
"will no longer attempt to decrypt them."
|
||||
msgstr ""
|
||||
|
||||
msgid "Sync status (synced items / total items)"
|
||||
msgstr "Synkroniseringstillstånd (synkroniserade objekt / totalt antal objekt)"
|
||||
|
||||
@@ -1837,6 +1872,10 @@ msgstr "Nya taggar:"
|
||||
msgid "Type new tags or select from list"
|
||||
msgstr "Skriv nya taggar eller välj från listan"
|
||||
|
||||
#, fuzzy
|
||||
msgid "More information"
|
||||
msgstr "Konfiguration"
|
||||
|
||||
msgid ""
|
||||
"To work correctly, the app needs the following permissions. Please enable "
|
||||
"them in your phone settings, in Apps > Joplin > Permissions"
|
||||
@@ -1988,6 +2027,12 @@ msgstr ""
|
||||
msgid "Welcome"
|
||||
msgstr "Välkommen"
|
||||
|
||||
#~ msgid "Separate each tag by a comma."
|
||||
#~ msgstr "Separera varje tagg med ett komma."
|
||||
|
||||
#~ msgid "Some items cannot be decrypted."
|
||||
#~ msgstr "Några objekt kan inte dekrypteras."
|
||||
|
||||
#~ msgid "%s (%s): %s"
|
||||
#~ msgstr "%s (%s): %s"
|
||||
|
||||
|
@@ -699,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"
|
||||
@@ -934,9 +937,6 @@ msgstr "Not defteri başlığı:"
|
||||
msgid "Add or remove tags:"
|
||||
msgstr "Etiket ekle veya kaldır:"
|
||||
|
||||
msgid "Separate each tag by a comma."
|
||||
msgstr "Her etiketi virgülle ayırın."
|
||||
|
||||
msgid "Rename notebook:"
|
||||
msgstr "Not defterini yeniden adlandır:"
|
||||
|
||||
@@ -958,8 +958,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"
|
||||
@@ -1157,12 +1158,15 @@ 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"
|
||||
|
||||
msgid "Retry"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Add or remove tags"
|
||||
msgstr "Etiket ekle veya kaldır"
|
||||
@@ -1365,6 +1369,58 @@ msgstr ""
|
||||
"kopyaladığınızdan emin olun, aksi takdirde tüm dosyalar kaldırılır! Daha "
|
||||
"fazla bilgi için SSS bölümüne bakın: %s"
|
||||
|
||||
msgid "Synchronisation target"
|
||||
msgstr "Senkronizasyon hedefi"
|
||||
|
||||
msgid ""
|
||||
"The target to synchonise to. Each sync target may have additional parameters "
|
||||
"which are named as `sync.NUM.NAME` (all documented below)."
|
||||
msgstr ""
|
||||
"Senkronize edilecek hedef. Her senkronizasyon hedefi, `sync.NUM.NAME` olarak "
|
||||
"adlandırılan ek parametrelere sahip olabilir (tümü aşağıda belgelenmiştir)."
|
||||
|
||||
msgid "Directory to synchronise with (absolute path)"
|
||||
msgstr "Eşitlenecek dizin (kesin yol)"
|
||||
|
||||
msgid "Nextcloud WebDAV URL"
|
||||
msgstr "Nextcloud WebDAV URL"
|
||||
|
||||
msgid "Nextcloud username"
|
||||
msgstr "Nextcloud kullanıcı adı"
|
||||
|
||||
msgid "Nextcloud password"
|
||||
msgstr "Nextcloud şifresi"
|
||||
|
||||
msgid "WebDAV URL"
|
||||
msgstr "WebDAV URL"
|
||||
|
||||
msgid "WebDAV username"
|
||||
msgstr "WebDAV kullanıcı adı"
|
||||
|
||||
msgid "WebDAV password"
|
||||
msgstr "WebDAV şifresi"
|
||||
|
||||
msgid "Attachment download behaviour"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"In \"Manual\" mode, attachments are downloaded only when you click on them. "
|
||||
"In \"Auto\", they are downloaded when you open the note. In \"Always\", all "
|
||||
"the attachments are downloaded whether you open the note or not."
|
||||
msgstr ""
|
||||
|
||||
msgid "Always"
|
||||
msgstr ""
|
||||
|
||||
msgid "Manual"
|
||||
msgstr ""
|
||||
|
||||
msgid "Auto"
|
||||
msgstr ""
|
||||
|
||||
msgid "Max concurrent connections"
|
||||
msgstr ""
|
||||
|
||||
msgid "Language"
|
||||
msgstr "Dil"
|
||||
|
||||
@@ -1524,37 +1580,6 @@ msgstr ""
|
||||
msgid "Show advanced options"
|
||||
msgstr "Gelişmiş ayarları göster"
|
||||
|
||||
msgid "Synchronisation target"
|
||||
msgstr "Senkronizasyon hedefi"
|
||||
|
||||
msgid ""
|
||||
"The target to synchonise to. Each sync target may have additional parameters "
|
||||
"which are named as `sync.NUM.NAME` (all documented below)."
|
||||
msgstr ""
|
||||
"Senkronize edilecek hedef. Her senkronizasyon hedefi, `sync.NUM.NAME` olarak "
|
||||
"adlandırılan ek parametrelere sahip olabilir (tümü aşağıda belgelenmiştir)."
|
||||
|
||||
msgid "Directory to synchronise with (absolute path)"
|
||||
msgstr "Eşitlenecek dizin (kesin yol)"
|
||||
|
||||
msgid "Nextcloud WebDAV URL"
|
||||
msgstr "Nextcloud WebDAV URL"
|
||||
|
||||
msgid "Nextcloud username"
|
||||
msgstr "Nextcloud kullanıcı adı"
|
||||
|
||||
msgid "Nextcloud password"
|
||||
msgstr "Nextcloud şifresi"
|
||||
|
||||
msgid "WebDAV URL"
|
||||
msgstr "WebDAV URL"
|
||||
|
||||
msgid "WebDAV username"
|
||||
msgstr "WebDAV kullanıcı adı"
|
||||
|
||||
msgid "WebDAV password"
|
||||
msgstr "WebDAV şifresi"
|
||||
|
||||
msgid "Custom TLS certificates"
|
||||
msgstr "Özel TLS sertifikaları"
|
||||
|
||||
@@ -1662,14 +1687,6 @@ msgstr ""
|
||||
msgid "Items that cannot be synchronised"
|
||||
msgstr "Senkronize edilemeyen öğeler"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "%s (%s) could not be uploaded: %s"
|
||||
msgstr "Bu dosya açılamadı: %s"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Item \"%s\" could not be downloaded: %s"
|
||||
msgstr "Bu dosya açılamadı: %s"
|
||||
|
||||
msgid ""
|
||||
"These items will remain on the device but will not be uploaded to the sync "
|
||||
"target. In order to find these items, either search for the title or the ID "
|
||||
@@ -1679,6 +1696,24 @@ msgstr ""
|
||||
"bulmak için, başlığı veya kimliği aratın (yukarıdaki parantez içerisinde "
|
||||
"görüntülenir)."
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "%s (%s) could not be uploaded: %s"
|
||||
msgstr "Bu dosya açılamadı: %s"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Item \"%s\" could not be downloaded: %s"
|
||||
msgstr "Bu dosya açılamadı: %s"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Items that cannot be decrypted"
|
||||
msgstr "Senkronize edilemeyen öğeler"
|
||||
|
||||
msgid ""
|
||||
"Joplin failed to decrypt these items multiple times, possibly because they "
|
||||
"are corrupted or too large. These items will remain on the device but Joplin "
|
||||
"will no longer attempt to decrypt them."
|
||||
msgstr ""
|
||||
|
||||
msgid "Sync status (synced items / total items)"
|
||||
msgstr "Senkronizasyon durumu (senkronize öğeler / toplam öğeler)"
|
||||
|
||||
@@ -1801,6 +1836,10 @@ msgstr "Yeni etiketler:"
|
||||
msgid "Type new tags or select from list"
|
||||
msgstr "Yeni etiketler yazın veya listeden seçin"
|
||||
|
||||
#, fuzzy
|
||||
msgid "More information"
|
||||
msgstr "Yapılandırma"
|
||||
|
||||
msgid ""
|
||||
"To work correctly, the app needs the following permissions. Please enable "
|
||||
"them in your phone settings, in Apps > Joplin > Permissions"
|
||||
@@ -1947,6 +1986,12 @@ msgstr ""
|
||||
msgid "Welcome"
|
||||
msgstr "Hoşgeldiniz"
|
||||
|
||||
#~ msgid "Separate each tag by a comma."
|
||||
#~ msgstr "Her etiketi virgülle ayırın."
|
||||
|
||||
#~ msgid "Some items cannot be decrypted."
|
||||
#~ msgstr "Bazı öğelerin şifresi çözülemez."
|
||||
|
||||
#~ msgid "%s (%s): %s"
|
||||
#~ msgstr "%s (%s): %s"
|
||||
|
||||
|
@@ -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 "检查更新..."
|
||||
@@ -623,7 +623,7 @@ msgid "Quit"
|
||||
msgstr "退出"
|
||||
|
||||
msgid "Close Window"
|
||||
msgstr ""
|
||||
msgstr "关闭窗口"
|
||||
|
||||
msgid "&Edit"
|
||||
msgstr "编辑 (&E)"
|
||||
@@ -685,6 +685,9 @@ msgstr "网站与文档"
|
||||
msgid "Make a donation"
|
||||
msgstr "捐赠"
|
||||
|
||||
msgid "Toggle development tools"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Open %s"
|
||||
msgstr "打开 %s"
|
||||
@@ -904,9 +907,6 @@ msgstr "笔记本标题:"
|
||||
msgid "Add or remove tags:"
|
||||
msgstr "添加或删除标签:"
|
||||
|
||||
msgid "Separate each tag by a comma."
|
||||
msgstr "用半角逗号“,”分开每个标签。"
|
||||
|
||||
msgid "Rename notebook:"
|
||||
msgstr "重命名笔记本:"
|
||||
|
||||
@@ -928,8 +928,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 "设置密码"
|
||||
@@ -947,32 +948,32 @@ msgstr "位置"
|
||||
msgid "URL"
|
||||
msgstr "URL"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Note History"
|
||||
msgstr "笔记列表"
|
||||
msgstr "笔记历史"
|
||||
|
||||
msgid "Previous versions of this note"
|
||||
msgstr ""
|
||||
msgstr "此笔记的早期版本"
|
||||
|
||||
msgid "Note properties"
|
||||
msgstr "笔记属性"
|
||||
|
||||
#, javascript-format
|
||||
msgid "The note \"%s\" has been successfully restored to the notebook \"%s\"."
|
||||
msgstr ""
|
||||
msgstr "笔记\"%s\"已成功恢复到笔记本\"%s\"中。"
|
||||
|
||||
#, fuzzy
|
||||
msgid "This note has no history"
|
||||
msgstr "该笔记已被修改:"
|
||||
msgstr "此笔记没有历史记录"
|
||||
|
||||
msgid "Restore"
|
||||
msgstr ""
|
||||
msgstr "恢复"
|
||||
|
||||
#, javascript-format
|
||||
msgid ""
|
||||
"Click \"%s\" to restore the note. It will be copied in the notebook named "
|
||||
"\"%s\". The current version of the note will not be replaced or modified."
|
||||
msgstr ""
|
||||
"单击 \"%s\" 以恢复笔记。它将会被复制到名为 \"%s\" 的笔记本中。笔记的当前版本"
|
||||
"不会被替换或修改。"
|
||||
|
||||
msgid "Open..."
|
||||
msgstr "打开…"
|
||||
@@ -1123,12 +1124,15 @@ msgid "Decrypting items: %d/%d"
|
||||
msgstr "正在解密项目:%d/%d"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Fetching resources: %d"
|
||||
msgstr "正在获取资源:%d"
|
||||
msgid "Fetching resources: %d/%d"
|
||||
msgstr "正在获取资源:%d/%d"
|
||||
|
||||
msgid "Please select where the sync status should be exported to"
|
||||
msgstr "请选择同步状态的导出位置"
|
||||
|
||||
msgid "Retry"
|
||||
msgstr ""
|
||||
|
||||
msgid "Add or remove tags"
|
||||
msgstr "添加或删除标签"
|
||||
|
||||
@@ -1163,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"
|
||||
@@ -1278,7 +1284,7 @@ msgstr "已经在同步。状态:%s"
|
||||
|
||||
msgid ""
|
||||
"Unknown item type downloaded - please upgrade Joplin to the latest version"
|
||||
msgstr ""
|
||||
msgstr "已下载项目为未知类型,请将 Joplin 升级到最新版本"
|
||||
|
||||
msgid "Encrypted"
|
||||
msgstr "已加密"
|
||||
@@ -1325,6 +1331,57 @@ msgstr ""
|
||||
"注意:如果您更改该位置,请确保在同步之前将所有内容复制到该位置,否则将删除所"
|
||||
"有文件! 更多详细信息请参阅常见问题解答(FAQ):%s"
|
||||
|
||||
msgid "Synchronisation target"
|
||||
msgstr "同步目标"
|
||||
|
||||
msgid ""
|
||||
"The target to synchonise to. Each sync target may have additional parameters "
|
||||
"which are named as `sync.NUM.NAME` (all documented below)."
|
||||
msgstr ""
|
||||
"所同步的目标。每个同步目标都可能有名为 `sync.NUM.NAME` 的附加参数(见下文)。"
|
||||
|
||||
msgid "Directory to synchronise with (absolute path)"
|
||||
msgstr "待同步的目录(绝对路径)。"
|
||||
|
||||
msgid "Nextcloud WebDAV URL"
|
||||
msgstr "Nextcloud WebDAV URL"
|
||||
|
||||
msgid "Nextcloud username"
|
||||
msgstr "Nextcloud 用户名"
|
||||
|
||||
msgid "Nextcloud password"
|
||||
msgstr "Nextcloud 密码"
|
||||
|
||||
msgid "WebDAV URL"
|
||||
msgstr "WebDAV URL"
|
||||
|
||||
msgid "WebDAV username"
|
||||
msgstr "WebDAV 用户名"
|
||||
|
||||
msgid "WebDAV password"
|
||||
msgstr "WebDAV 密码"
|
||||
|
||||
msgid "Attachment download behaviour"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"In \"Manual\" mode, attachments are downloaded only when you click on them. "
|
||||
"In \"Auto\", they are downloaded when you open the note. In \"Always\", all "
|
||||
"the attachments are downloaded whether you open the note or not."
|
||||
msgstr ""
|
||||
|
||||
msgid "Always"
|
||||
msgstr ""
|
||||
|
||||
msgid "Manual"
|
||||
msgstr ""
|
||||
|
||||
msgid "Auto"
|
||||
msgstr ""
|
||||
|
||||
msgid "Max concurrent connections"
|
||||
msgstr ""
|
||||
|
||||
msgid "Language"
|
||||
msgstr "语言"
|
||||
|
||||
@@ -1373,45 +1430,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 "显示托盘图标"
|
||||
@@ -1484,36 +1537,6 @@ msgstr ""
|
||||
msgid "Show advanced options"
|
||||
msgstr "显示高级选项"
|
||||
|
||||
msgid "Synchronisation target"
|
||||
msgstr "同步目标"
|
||||
|
||||
msgid ""
|
||||
"The target to synchonise to. Each sync target may have additional parameters "
|
||||
"which are named as `sync.NUM.NAME` (all documented below)."
|
||||
msgstr ""
|
||||
"所同步的目标。每个同步目标都可能有名为 `sync.NUM.NAME` 的附加参数(见下文)。"
|
||||
|
||||
msgid "Directory to synchronise with (absolute path)"
|
||||
msgstr "待同步的目录(绝对路径)。"
|
||||
|
||||
msgid "Nextcloud WebDAV URL"
|
||||
msgstr "Nextcloud WebDAV URL"
|
||||
|
||||
msgid "Nextcloud username"
|
||||
msgstr "Nextcloud 用户名"
|
||||
|
||||
msgid "Nextcloud password"
|
||||
msgstr "Nextcloud 密码"
|
||||
|
||||
msgid "WebDAV URL"
|
||||
msgstr "WebDAV URL"
|
||||
|
||||
msgid "WebDAV username"
|
||||
msgstr "WebDAV 用户名"
|
||||
|
||||
msgid "WebDAV password"
|
||||
msgstr "WebDAV 密码"
|
||||
|
||||
msgid "Custom TLS certificates"
|
||||
msgstr "自定义 TLS 证书"
|
||||
|
||||
@@ -1530,9 +1553,8 @@ msgstr ""
|
||||
msgid "Ignore TLS certificate errors"
|
||||
msgstr "忽略 TLS 证书错误"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Enable note history"
|
||||
msgstr "目录"
|
||||
msgstr "启用笔记历史"
|
||||
|
||||
msgid "days"
|
||||
msgstr ""
|
||||
@@ -1561,7 +1583,7 @@ msgid "Note"
|
||||
msgstr "笔记"
|
||||
|
||||
msgid "Plugins"
|
||||
msgstr ""
|
||||
msgstr "插件"
|
||||
|
||||
msgid "Application"
|
||||
msgstr "应用程序"
|
||||
@@ -1612,19 +1634,11 @@ msgid "Please specify the notebook where the notes should be imported to."
|
||||
msgstr "请指定导入笔记的目标笔记本。"
|
||||
|
||||
msgid "Restored Notes"
|
||||
msgstr ""
|
||||
msgstr "已恢复的笔记"
|
||||
|
||||
msgid "Items that cannot be synchronised"
|
||||
msgstr "无法同步项目"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "%s (%s) could not be uploaded: %s"
|
||||
msgstr "该笔记本无法打开:%s"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Item \"%s\" could not be downloaded: %s"
|
||||
msgstr "该笔记本无法打开:%s"
|
||||
|
||||
msgid ""
|
||||
"These items will remain on the device but will not be uploaded to the sync "
|
||||
"target. In order to find these items, either search for the title or the ID "
|
||||
@@ -1633,6 +1647,24 @@ msgstr ""
|
||||
"这些项目将只保存在本设备上,不会上传到同步目标。若需查找这些项目,请搜索标题"
|
||||
"或 ID(显示在上方括号中)。"
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s (%s) could not be uploaded: %s"
|
||||
msgstr "%s (%s) 无法上传到:%s"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Item \"%s\" could not be downloaded: %s"
|
||||
msgstr "项目 \"%s\" 无法从 %s 中下载"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Items that cannot be decrypted"
|
||||
msgstr "无法同步项目"
|
||||
|
||||
msgid ""
|
||||
"Joplin failed to decrypt these items multiple times, possibly because they "
|
||||
"are corrupted or too large. These items will remain on the device but Joplin "
|
||||
"will no longer attempt to decrypt them."
|
||||
msgstr ""
|
||||
|
||||
msgid "Sync status (synced items / total items)"
|
||||
msgstr "同步状态(已同步项目/项目总数)"
|
||||
|
||||
@@ -1755,6 +1787,10 @@ msgstr "新建标签:"
|
||||
msgid "Type new tags or select from list"
|
||||
msgstr "输入新的标签或从列表中选择"
|
||||
|
||||
#, fuzzy
|
||||
msgid "More information"
|
||||
msgstr "配置"
|
||||
|
||||
msgid ""
|
||||
"To work correctly, the app needs the following permissions. Please enable "
|
||||
"them in your phone settings, in Apps > Joplin > Permissions"
|
||||
@@ -1894,6 +1930,12 @@ msgstr "您目前未有笔记本。点击 (+) 按钮创建。"
|
||||
msgid "Welcome"
|
||||
msgstr "欢迎"
|
||||
|
||||
#~ msgid "Separate each tag by a comma."
|
||||
#~ msgstr "用半角逗号“,”分开每个标签。"
|
||||
|
||||
#~ msgid "Some items cannot be decrypted."
|
||||
#~ msgstr "一些项目无法被解密。"
|
||||
|
||||
#~ msgid "%s (%s): %s"
|
||||
#~ msgstr "%s (%s): %s"
|
||||
|
||||
|
@@ -697,6 +697,9 @@ msgstr "官方網站及線上說明"
|
||||
msgid "Make a donation"
|
||||
msgstr "捐助"
|
||||
|
||||
msgid "Toggle development tools"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Open %s"
|
||||
msgstr "開啟 %s"
|
||||
@@ -918,9 +921,6 @@ msgstr "記事本標題:"
|
||||
msgid "Add or remove tags:"
|
||||
msgstr "新增或移除標籤:"
|
||||
|
||||
msgid "Separate each tag by a comma."
|
||||
msgstr "您可用逗號分隔每個標籤。"
|
||||
|
||||
msgid "Rename notebook:"
|
||||
msgstr "重新命名記事本:"
|
||||
|
||||
@@ -942,8 +942,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 "設置密碼"
|
||||
@@ -1134,12 +1135,15 @@ msgid "Decrypting items: %d/%d"
|
||||
msgstr "正在解密項目: %d/%d 項"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Fetching resources: %d"
|
||||
msgstr "資源: %d。"
|
||||
msgid "Fetching resources: %d/%d"
|
||||
msgstr "資源: %d/%d"
|
||||
|
||||
msgid "Please select where the sync status should be exported to"
|
||||
msgstr "請選擇將同步狀態導出到的位置"
|
||||
|
||||
msgid "Retry"
|
||||
msgstr ""
|
||||
|
||||
msgid "Add or remove tags"
|
||||
msgstr "新增或移除標籤"
|
||||
|
||||
@@ -1336,6 +1340,58 @@ msgid ""
|
||||
"more details: %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Synchronisation target"
|
||||
msgstr "同步目標"
|
||||
|
||||
msgid ""
|
||||
"The target to synchonise to. Each sync target may have additional parameters "
|
||||
"which are named as `sync.NUM.NAME` (all documented below)."
|
||||
msgstr ""
|
||||
"要同步的目標。每個同步目標可能有附加的參數,它們被命名為 `sync.NUM.NAME` (全"
|
||||
"部記錄如下)。"
|
||||
|
||||
msgid "Directory to synchronise with (absolute path)"
|
||||
msgstr "要同步的目錄 (絕對路徑)"
|
||||
|
||||
msgid "Nextcloud WebDAV URL"
|
||||
msgstr "Nextcloud WebDAV 網址"
|
||||
|
||||
msgid "Nextcloud username"
|
||||
msgstr "Nextcloud 用戶名稱"
|
||||
|
||||
msgid "Nextcloud password"
|
||||
msgstr "Nextcloud 密碼"
|
||||
|
||||
msgid "WebDAV URL"
|
||||
msgstr "WebDAV 網址"
|
||||
|
||||
msgid "WebDAV username"
|
||||
msgstr "WebDAV 用戶名稱"
|
||||
|
||||
msgid "WebDAV password"
|
||||
msgstr "WebDAV 密碼"
|
||||
|
||||
msgid "Attachment download behaviour"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"In \"Manual\" mode, attachments are downloaded only when you click on them. "
|
||||
"In \"Auto\", they are downloaded when you open the note. In \"Always\", all "
|
||||
"the attachments are downloaded whether you open the note or not."
|
||||
msgstr ""
|
||||
|
||||
msgid "Always"
|
||||
msgstr ""
|
||||
|
||||
msgid "Manual"
|
||||
msgstr ""
|
||||
|
||||
msgid "Auto"
|
||||
msgstr ""
|
||||
|
||||
msgid "Max concurrent connections"
|
||||
msgstr ""
|
||||
|
||||
msgid "Language"
|
||||
msgstr "語言"
|
||||
|
||||
@@ -1492,37 +1548,6 @@ msgstr ""
|
||||
msgid "Show advanced options"
|
||||
msgstr "顯示進階選項"
|
||||
|
||||
msgid "Synchronisation target"
|
||||
msgstr "同步目標"
|
||||
|
||||
msgid ""
|
||||
"The target to synchonise to. Each sync target may have additional parameters "
|
||||
"which are named as `sync.NUM.NAME` (all documented below)."
|
||||
msgstr ""
|
||||
"要同步的目標。每個同步目標可能有附加的參數,它們被命名為 `sync.NUM.NAME` (全"
|
||||
"部記錄如下)。"
|
||||
|
||||
msgid "Directory to synchronise with (absolute path)"
|
||||
msgstr "要同步的目錄 (絕對路徑)"
|
||||
|
||||
msgid "Nextcloud WebDAV URL"
|
||||
msgstr "Nextcloud WebDAV 網址"
|
||||
|
||||
msgid "Nextcloud username"
|
||||
msgstr "Nextcloud 用戶名稱"
|
||||
|
||||
msgid "Nextcloud password"
|
||||
msgstr "Nextcloud 密碼"
|
||||
|
||||
msgid "WebDAV URL"
|
||||
msgstr "WebDAV 網址"
|
||||
|
||||
msgid "WebDAV username"
|
||||
msgstr "WebDAV 用戶名稱"
|
||||
|
||||
msgid "WebDAV password"
|
||||
msgstr "WebDAV 密碼"
|
||||
|
||||
msgid "Custom TLS certificates"
|
||||
msgstr "自訂 TLS 證書"
|
||||
|
||||
@@ -1631,6 +1656,14 @@ msgstr ""
|
||||
msgid "Items that cannot be synchronised"
|
||||
msgstr "無法同步的項目"
|
||||
|
||||
msgid ""
|
||||
"These items will remain on the device but will not be uploaded to the sync "
|
||||
"target. In order to find these items, either search for the title or the ID "
|
||||
"(which is displayed in brackets above)."
|
||||
msgstr ""
|
||||
"這些頊目將保留在設備上,但不會上載到同步目標。要尋找這些項目,請以標題或 ID "
|
||||
"(在上面的括弧中顯示) 搜索。"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "%s (%s) could not be uploaded: %s"
|
||||
msgstr "無法開啟檔案: %s"
|
||||
@@ -1639,13 +1672,15 @@ msgstr "無法開啟檔案: %s"
|
||||
msgid "Item \"%s\" could not be downloaded: %s"
|
||||
msgstr "無法開啟檔案: %s"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Items that cannot be decrypted"
|
||||
msgstr "無法同步的項目"
|
||||
|
||||
msgid ""
|
||||
"These items will remain on the device but will not be uploaded to the sync "
|
||||
"target. In order to find these items, either search for the title or the ID "
|
||||
"(which is displayed in brackets above)."
|
||||
"Joplin failed to decrypt these items multiple times, possibly because they "
|
||||
"are corrupted or too large. These items will remain on the device but Joplin "
|
||||
"will no longer attempt to decrypt them."
|
||||
msgstr ""
|
||||
"這些頊目將保留在設備上,但不會上載到同步目標。要尋找這些項目,請以標題或 ID "
|
||||
"(在上面的括弧中顯示) 搜索。"
|
||||
|
||||
msgid "Sync status (synced items / total items)"
|
||||
msgstr "同步狀態 (已同步項目 / 項目總數)"
|
||||
@@ -1766,6 +1801,10 @@ msgstr "新增標籤:"
|
||||
msgid "Type new tags or select from list"
|
||||
msgstr "輸入新標籤,或在清單中選擇"
|
||||
|
||||
#, fuzzy
|
||||
msgid "More information"
|
||||
msgstr "設置"
|
||||
|
||||
msgid ""
|
||||
"To work correctly, the app needs the following permissions. Please enable "
|
||||
"them in your phone settings, in Apps > Joplin > Permissions"
|
||||
@@ -1906,6 +1945,12 @@ msgstr "您當前沒有任何筆記本。通過按一下 (+) 鍵去建立一本
|
||||
msgid "Welcome"
|
||||
msgstr "歡迎"
|
||||
|
||||
#~ msgid "Separate each tag by a comma."
|
||||
#~ msgstr "您可用逗號分隔每個標籤。"
|
||||
|
||||
#~ msgid "Some items cannot be decrypted."
|
||||
#~ msgstr "有些項目不能解密。"
|
||||
|
||||
#~ msgid "%s (%s): %s"
|
||||
#~ msgstr "%s (%s): %s"
|
||||
|
||||
|
2
CliClient/package-lock.json
generated
2
CliClient/package-lock.json
generated
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "joplin",
|
||||
"version": "1.0.128",
|
||||
"version": "1.0.139",
|
||||
"lockfileVersion": 1,
|
||||
"requires": true,
|
||||
"dependencies": {
|
||||
|
@@ -20,7 +20,7 @@
|
||||
],
|
||||
"owner": "Laurent Cozic"
|
||||
},
|
||||
"version": "1.0.128",
|
||||
"version": "1.0.139",
|
||||
"bin": {
|
||||
"joplin": "./main.js"
|
||||
},
|
||||
|
@@ -36,10 +36,12 @@ npm test tests-build/models_Setting.js
|
||||
npm test tests-build/models_Tag.js
|
||||
npm test tests-build/pathUtils.js
|
||||
npm test tests-build/services_InteropService.js
|
||||
npm test tests-build/services_KvStore.js
|
||||
npm test tests-build/services_ResourceService.js
|
||||
npm test tests-build/services_rest_Api.js
|
||||
npm test tests-build/services_SearchEngine.js
|
||||
npm test tests-build/services_Revision.js
|
||||
npm test tests-build/StringUtils.js
|
||||
npm test tests-build/TaskQueue.js
|
||||
npm test tests-build/synchronizer.js
|
||||
npm test tests-build/urlUtils.js
|
57
CliClient/tests/TaskQueue.js
Normal file
57
CliClient/tests/TaskQueue.js
Normal file
@@ -0,0 +1,57 @@
|
||||
require('app-module-path').addPath(__dirname);
|
||||
|
||||
const { asyncTest, fileContentEqual, setupDatabase, revisionService, setupDatabaseAndSynchronizer, db, synchronizer, fileApi, sleep, clearDatabase, switchClient, syncTargetId, objectsEqual, checkThrowAsync } = require('test-utils.js');
|
||||
const TaskQueue = require('lib/TaskQueue.js');
|
||||
|
||||
process.on('unhandledRejection', (reason, p) => {
|
||||
console.log('Unhandled Rejection at: Promise', p, 'reason:', reason);
|
||||
});
|
||||
|
||||
describe('TaskQueue', function() {
|
||||
|
||||
beforeEach(async (done) => {
|
||||
await setupDatabaseAndSynchronizer(1);
|
||||
await switchClient(1);
|
||||
done();
|
||||
});
|
||||
|
||||
it('should queue and execute tasks', asyncTest(async () => {
|
||||
const queue = new TaskQueue();
|
||||
|
||||
queue.push(1, async () => { await sleep(0.5); return 'a'; });
|
||||
queue.push(2, async () => { await sleep(0.5); return 'b'; });
|
||||
queue.push(3, async () => { await sleep(0.5); return 'c'; });
|
||||
|
||||
const results = [];
|
||||
|
||||
results.push(await queue.waitForResult(1));
|
||||
results.push(await queue.waitForResult(2));
|
||||
results.push(await queue.waitForResult(3));
|
||||
|
||||
expect(results[0].id).toBe(1);
|
||||
expect(results[0].result).toBe('a');
|
||||
expect(results[1].id).toBe(2);
|
||||
expect(results[1].result).toBe('b');
|
||||
expect(results[2].id).toBe(3);
|
||||
expect(results[2].result).toBe('c');
|
||||
}));
|
||||
|
||||
it('should handle errors', asyncTest(async () => {
|
||||
const queue = new TaskQueue();
|
||||
|
||||
queue.push(1, async () => { await sleep(0.5); return 'a'; });
|
||||
queue.push(2, async () => { await sleep(0.5); throw new Error('e'); });
|
||||
|
||||
const results = [];
|
||||
|
||||
results.push(await queue.waitForResult(1));
|
||||
results.push(await queue.waitForResult(2));
|
||||
|
||||
expect(results[0].id).toBe(1);
|
||||
expect(results[0].result).toBe('a');
|
||||
expect(results[1].id).toBe(2);
|
||||
expect(!results[1].result).toBe(true);
|
||||
expect(results[1].error.message).toBe('e');
|
||||
}));
|
||||
|
||||
});
|
5
CliClient/tests/enex_to_md/multiline_attribute.html
Normal file
5
CliClient/tests/enex_to_md/multiline_attribute.html
Normal 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"/>
|
1
CliClient/tests/enex_to_md/multiline_attribute.md
Normal file
1
CliClient/tests/enex_to_md/multiline_attribute.md
Normal file
@@ -0,0 +1 @@
|
||||
![This should \] be escaped](https://joplinapp.org/images/Icon512.png)
|
@@ -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]);
|
||||
}
|
||||
}));
|
||||
|
||||
});
|
107
CliClient/tests/services_KvStore.js
Normal file
107
CliClient/tests/services_KvStore.js
Normal file
@@ -0,0 +1,107 @@
|
||||
require('app-module-path').addPath(__dirname);
|
||||
|
||||
const { asyncTest, fileContentEqual, setupDatabase, revisionService, setupDatabaseAndSynchronizer, db, synchronizer, fileApi, sleep, clearDatabase, switchClient, syncTargetId, objectsEqual, checkThrowAsync } = require('test-utils.js');
|
||||
const KvStore = require('lib/services/KvStore.js');
|
||||
|
||||
process.on('unhandledRejection', (reason, p) => {
|
||||
console.log('Unhandled Rejection at: Promise', p, 'reason:', reason);
|
||||
});
|
||||
|
||||
jasmine.DEFAULT_TIMEOUT_INTERVAL = 10000;
|
||||
|
||||
function setupStore() {
|
||||
const store = KvStore.instance();
|
||||
store.setDb(db());
|
||||
return store;
|
||||
}
|
||||
|
||||
describe('services_KvStore', function() {
|
||||
|
||||
beforeEach(async (done) => {
|
||||
await setupDatabaseAndSynchronizer(1);
|
||||
await switchClient(1);
|
||||
done();
|
||||
});
|
||||
|
||||
it('should set and get values', asyncTest(async () => {
|
||||
const store = setupStore();
|
||||
await store.setValue('a', 123);
|
||||
expect(await store.value('a')).toBe(123);
|
||||
|
||||
await store.setValue('a', 123);
|
||||
expect(await store.countKeys()).toBe(1);
|
||||
expect(await store.value('a')).toBe(123);
|
||||
|
||||
await store.setValue('a', 456);
|
||||
expect(await store.countKeys()).toBe(1);
|
||||
expect(await store.value('a')).toBe(456);
|
||||
|
||||
await store.setValue('b', 789);
|
||||
expect(await store.countKeys()).toBe(2);
|
||||
expect(await store.value('a')).toBe(456);
|
||||
expect(await store.value('b')).toBe(789);
|
||||
}));
|
||||
|
||||
it('should set and get values with the right type', asyncTest(async () => {
|
||||
const store = setupStore();
|
||||
await store.setValue('string', 'something');
|
||||
await store.setValue('int', 123);
|
||||
expect(await store.value('string')).toBe('something');
|
||||
expect(await store.value('int')).toBe(123);
|
||||
}));
|
||||
|
||||
it('should increment values', asyncTest(async () => {
|
||||
const store = setupStore();
|
||||
await store.setValue('int', 1);
|
||||
const newValue = await store.incValue('int');
|
||||
|
||||
expect(newValue).toBe(2);
|
||||
expect(await store.value('int')).toBe(2);
|
||||
|
||||
expect(await store.incValue('int2')).toBe(1);
|
||||
expect(await store.countKeys()).toBe(2);
|
||||
}));
|
||||
|
||||
it('should handle non-existent values', asyncTest(async () => {
|
||||
const store = setupStore();
|
||||
expect(await store.value('nope')).toBe(null);
|
||||
}));
|
||||
|
||||
it('should delete values', asyncTest(async () => {
|
||||
const store = setupStore();
|
||||
await store.setValue('int', 1);
|
||||
expect(await store.countKeys()).toBe(1);
|
||||
await store.deleteValue('int');
|
||||
expect(await store.countKeys()).toBe(0);
|
||||
|
||||
await store.deleteValue('int'); // That should not throw
|
||||
}));
|
||||
|
||||
it('should increment in an atomic way', asyncTest(async () => {
|
||||
const store = setupStore();
|
||||
await store.setValue('int', 0);
|
||||
|
||||
const promises = [];
|
||||
for (let i = 0; i < 20; i++) {
|
||||
promises.push(store.incValue('int'));
|
||||
}
|
||||
|
||||
await Promise.all(promises);
|
||||
|
||||
expect(await store.value('int')).toBe(20);
|
||||
}));
|
||||
|
||||
it('should search by prefix', asyncTest(async () => {
|
||||
const store = setupStore();
|
||||
await store.setValue('testing:1', 1);
|
||||
await store.setValue('testing:2', 2);
|
||||
|
||||
const results = await store.searchByPrefix('testing:');
|
||||
expect(results.length).toBe(2);
|
||||
|
||||
const numbers = results.map(r => r.value).sort();
|
||||
expect(numbers[0]).toBe(1);
|
||||
expect(numbers[1]).toBe(2);
|
||||
}));
|
||||
|
||||
});
|
@@ -1,7 +1,7 @@
|
||||
require('app-module-path').addPath(__dirname);
|
||||
|
||||
const { time } = require('lib/time-utils.js');
|
||||
const { setupDatabase, allSyncTargetItemsEncrypted, revisionService, setupDatabaseAndSynchronizer, db, synchronizer, fileApi, sleep, clearDatabase, switchClient, syncTargetId, encryptionService, loadEncryptionMasterKey, fileContentEqual, decryptionWorker, checkThrowAsync, asyncTest } = require('test-utils.js');
|
||||
const { setupDatabase, allSyncTargetItemsEncrypted, kvStore, revisionService, setupDatabaseAndSynchronizer, db, synchronizer, fileApi, sleep, clearDatabase, switchClient, syncTargetId, encryptionService, loadEncryptionMasterKey, fileContentEqual, decryptionWorker, checkThrowAsync, asyncTest } = require('test-utils.js');
|
||||
const { shim } = require('lib/shim.js');
|
||||
const fs = require('fs-extra');
|
||||
const Folder = require('lib/models/Folder.js');
|
||||
@@ -53,6 +53,10 @@ async function remoteNotesFoldersResources() {
|
||||
return remoteItemsByTypes([BaseModel.TYPE_NOTE, BaseModel.TYPE_FOLDER, BaseModel.TYPE_RESOURCE]);
|
||||
}
|
||||
|
||||
async function remoteResources() {
|
||||
return remoteItemsByTypes([BaseModel.TYPE_RESOURCE]);
|
||||
}
|
||||
|
||||
async function localNotesFoldersSameAsRemote(locals, expect) {
|
||||
let error = null;
|
||||
try {
|
||||
@@ -861,7 +865,7 @@ describe('Synchronizer', function() {
|
||||
expect(ls.fetch_status).toBe(Resource.FETCH_STATUS_IDLE);
|
||||
|
||||
const fetcher = new ResourceFetcher(() => { return synchronizer().api() });
|
||||
fetcher.queueDownload(resource1_2.id);
|
||||
fetcher.queueDownload_(resource1_2.id);
|
||||
await fetcher.waitForAllFinished();
|
||||
|
||||
resource1_2 = await Resource.load(resource1.id);
|
||||
@@ -890,7 +894,7 @@ describe('Synchronizer', function() {
|
||||
// Simulate a failed download
|
||||
get: () => { return new Promise((resolve, reject) => { reject(new Error('did not work')) }); }
|
||||
} });
|
||||
fetcher.queueDownload(resource1.id);
|
||||
fetcher.queueDownload_(resource1.id);
|
||||
await fetcher.waitForAllFinished();
|
||||
|
||||
resource1 = await Resource.load(resource1.id);
|
||||
@@ -916,7 +920,7 @@ describe('Synchronizer', function() {
|
||||
expect(r1.size).toBe(-1);
|
||||
|
||||
const fetcher = new ResourceFetcher(() => { return synchronizer().api() });
|
||||
fetcher.queueDownload(r1.id);
|
||||
fetcher.queueDownload_(r1.id);
|
||||
await fetcher.waitForAllFinished();
|
||||
r1 = await Resource.load(r1.id);
|
||||
expect(r1.size).toBe(2720);
|
||||
@@ -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,161 @@ describe('Synchronizer', function() {
|
||||
expect(syncItems[1].sync_disabled).toBe(1);
|
||||
}));
|
||||
|
||||
it("should not upload a resource if it has not been fetched yet", asyncTest(async () => {
|
||||
// In some rare cases, the synchronizer might try to upload a resource even though it
|
||||
// doesn't have the resource file. It can happen in this situation:
|
||||
// - C1 create resource
|
||||
// - C1 sync
|
||||
// - C2 sync
|
||||
// - C2 resource metadata is received but ResourceFetcher hasn't downloaded the file yet
|
||||
// - C2 enables E2EE - all the items are marked for forced sync
|
||||
// - C2 sync
|
||||
// The synchronizer will try to upload the resource, even though it doesn't have the file,
|
||||
// so we need to make sure it doesn't. But also that once it gets the file, the resource
|
||||
// does get uploaded.
|
||||
|
||||
const note1 = await Note.save({ title: 'note' });
|
||||
await shim.attachFileToNote(note1, __dirname + '/../tests/support/photo.jpg');
|
||||
const resource = (await Resource.all())[0];
|
||||
await Resource.setLocalState(resource.id, { fetch_status: Resource.FETCH_STATUS_IDLE });
|
||||
await synchronizer().start();
|
||||
|
||||
expect((await remoteResources()).length).toBe(0);
|
||||
|
||||
await Resource.setLocalState(resource.id, { fetch_status: Resource.FETCH_STATUS_DONE });
|
||||
await synchronizer().start();
|
||||
|
||||
expect((await remoteResources()).length).toBe(1);
|
||||
}));
|
||||
|
||||
it('should decrypt the resource metadata, but not try to decrypt the file, if it is not present', asyncTest(async () => {
|
||||
const note1 = await Note.save({ title: 'note' });
|
||||
await shim.attachFileToNote(note1, __dirname + '/../tests/support/photo.jpg');
|
||||
const masterKey = await loadEncryptionMasterKey();
|
||||
await encryptionService().enableEncryption(masterKey, '123456');
|
||||
await encryptionService().loadMasterKeysFromSettings();
|
||||
await synchronizer().start();
|
||||
expect(await allSyncTargetItemsEncrypted()).toBe(true);
|
||||
|
||||
await switchClient(2);
|
||||
|
||||
await synchronizer().start();
|
||||
Setting.setObjectKey('encryption.passwordCache', masterKey.id, '123456');
|
||||
await encryptionService().loadMasterKeysFromSettings();
|
||||
await decryptionWorker().start();
|
||||
|
||||
let resource = (await Resource.all())[0];
|
||||
|
||||
expect(!!resource.encryption_applied).toBe(false);
|
||||
expect(!!resource.encryption_blob_encrypted).toBe(true);
|
||||
|
||||
const resourceFetcher = new ResourceFetcher(() => { return synchronizer().api() });
|
||||
await resourceFetcher.start();
|
||||
await resourceFetcher.waitForAllFinished();
|
||||
|
||||
const ls = await Resource.localState(resource);
|
||||
expect(ls.fetch_status).toBe(Resource.FETCH_STATUS_DONE);
|
||||
|
||||
await decryptionWorker().start();
|
||||
resource = (await Resource.all())[0];
|
||||
|
||||
expect(!!resource.encryption_blob_encrypted).toBe(false);
|
||||
}));
|
||||
|
||||
it('should not create revisions when item is modified as a result of decryption', asyncTest(async () => {
|
||||
// Handle this scenario:
|
||||
// - C1 creates note
|
||||
// - C1 never changes it
|
||||
// - E2EE is enabled
|
||||
// - C1 sync
|
||||
// - More than one week later (as defined by oldNoteCutOffDate_), C2 sync
|
||||
// - C2 enters master password and note gets decrypted
|
||||
//
|
||||
// Technically at this point the note is modified (from encrypted to non-encrypted) and thus a ItemChange
|
||||
// object is created. The note is also older than oldNoteCutOffDate. However, this should not lead to the
|
||||
// creation of a revision because that change was not the result of a user action.
|
||||
// I guess that's the general rule - changes that come from user actions should result in revisions,
|
||||
// while automated changes (sync, decryption) should not.
|
||||
|
||||
const dateInPast = revisionService().oldNoteCutOffDate_() - 1000;
|
||||
|
||||
const note1 = await Note.save({ title: 'ma note', updated_time: dateInPast, created_time: dateInPast }, { autoTimestamp: false });
|
||||
const masterKey = await loadEncryptionMasterKey();
|
||||
await encryptionService().enableEncryption(masterKey, '123456');
|
||||
await encryptionService().loadMasterKeysFromSettings();
|
||||
await synchronizer().start();
|
||||
|
||||
await switchClient(2);
|
||||
|
||||
await synchronizer().start();
|
||||
|
||||
Setting.setObjectKey('encryption.passwordCache', masterKey.id, '123456');
|
||||
await encryptionService().loadMasterKeysFromSettings();
|
||||
await decryptionWorker().start();
|
||||
|
||||
await revisionService().collectRevisions();
|
||||
|
||||
expect((await Revision.all()).length).toBe(0);
|
||||
}));
|
||||
|
||||
it('should stop trying to decrypt item after a few attempts', asyncTest(async () => {
|
||||
let hasThrown;
|
||||
|
||||
const note = await Note.save({ title: 'ma note' });
|
||||
const masterKey = await loadEncryptionMasterKey();
|
||||
await encryptionService().enableEncryption(masterKey, '123456');
|
||||
await encryptionService().loadMasterKeysFromSettings();
|
||||
await synchronizer().start();
|
||||
|
||||
await switchClient(2);
|
||||
|
||||
await synchronizer().start();
|
||||
|
||||
// First, simulate a broken note and check that the decryption worker
|
||||
// gives up decrypting after a number of tries. This is mainly relevant
|
||||
// for data that crashes the mobile application - we don't want to keep
|
||||
// decrypting these.
|
||||
|
||||
const encryptedNote = await Note.load(note.id);
|
||||
const goodCipherText = encryptedNote.encryption_cipher_text;
|
||||
await Note.save({ id: note.id, encryption_cipher_text: 'doesntlookright' });
|
||||
|
||||
Setting.setObjectKey('encryption.passwordCache', masterKey.id, '123456');
|
||||
await encryptionService().loadMasterKeysFromSettings();
|
||||
|
||||
hasThrown = await checkThrowAsync(async () => await decryptionWorker().start({ errorHandler: 'throw' }));
|
||||
expect(hasThrown).toBe(true);
|
||||
|
||||
hasThrown = await checkThrowAsync(async () => await decryptionWorker().start({ errorHandler: 'throw' }));
|
||||
expect(hasThrown).toBe(true);
|
||||
|
||||
// Third time, an error is logged and no error is thrown
|
||||
hasThrown = await checkThrowAsync(async () => await decryptionWorker().start({ errorHandler: 'throw' }));
|
||||
expect(hasThrown).toBe(false);
|
||||
|
||||
const disabledItems = await decryptionWorker().decryptionDisabledItems();
|
||||
expect(disabledItems.length).toBe(1);
|
||||
expect(disabledItems[0].id).toBe(note.id);
|
||||
|
||||
expect((await kvStore().all()).length).toBe(1);
|
||||
await kvStore().clear();
|
||||
|
||||
// Now check that if it fails once but succeed the second time, the note
|
||||
// is correctly decrypted and the counters are cleared.
|
||||
|
||||
hasThrown = await checkThrowAsync(async () => await decryptionWorker().start({ errorHandler: 'throw' }));
|
||||
expect(hasThrown).toBe(true);
|
||||
|
||||
await Note.save({ id: note.id, encryption_cipher_text: goodCipherText });
|
||||
|
||||
hasThrown = await checkThrowAsync(async () => await decryptionWorker().start({ errorHandler: 'throw' }));
|
||||
expect(hasThrown).toBe(false);
|
||||
|
||||
const decryptedNote = await Note.load(note.id);
|
||||
expect(decryptedNote.title).toBe('ma note');
|
||||
|
||||
expect((await kvStore().all()).length).toBe(0);
|
||||
expect((await decryptionWorker().decryptionDisabledItems()).length).toBe(0);
|
||||
}));
|
||||
|
||||
});
|
||||
|
@@ -33,6 +33,7 @@ const EncryptionService = require('lib/services/EncryptionService.js');
|
||||
const DecryptionWorker = require('lib/services/DecryptionWorker.js');
|
||||
const ResourceService = require('lib/services/ResourceService.js');
|
||||
const RevisionService = require('lib/services/RevisionService.js');
|
||||
const KvStore = require('lib/services/KvStore.js');
|
||||
const WebDavApi = require('lib/WebDavApi');
|
||||
const DropboxApi = require('lib/DropboxApi');
|
||||
|
||||
@@ -42,6 +43,7 @@ let encryptionServices_ = [];
|
||||
let revisionServices_ = [];
|
||||
let decryptionWorkers_ = [];
|
||||
let resourceServices_ = [];
|
||||
let kvStores_ = [];
|
||||
let fileApi_ = null;
|
||||
let currentClient_ = 1;
|
||||
|
||||
@@ -74,6 +76,11 @@ const sleepTime = syncTargetId_ == SyncTargetRegistry.nameToId('filesystem') ? 1
|
||||
|
||||
console.info('Testing with sync target: ' + SyncTargetRegistry.idToName(syncTargetId_));
|
||||
|
||||
const dbLogger = new Logger();
|
||||
dbLogger.addTarget('console');
|
||||
dbLogger.addTarget('file', { path: logDir + '/log.txt' });
|
||||
dbLogger.setLevel(Logger.LEVEL_WARN);
|
||||
|
||||
const logger = new Logger();
|
||||
logger.addTarget('console');
|
||||
logger.addTarget('file', { path: logDir + '/log.txt' });
|
||||
@@ -149,6 +156,7 @@ async function clearDatabase(id = null) {
|
||||
'sync_items',
|
||||
'notes_normalized',
|
||||
'revisions',
|
||||
'key_values',
|
||||
];
|
||||
|
||||
const queries = [];
|
||||
@@ -181,7 +189,7 @@ async function setupDatabase(id = null) {
|
||||
};
|
||||
|
||||
databases_[id] = new JoplinDatabase(new DatabaseDriverNode());
|
||||
databases_[id].setLogger(logger);
|
||||
databases_[id].setLogger(dbLogger);
|
||||
await databases_[id].open({ name: filePath });
|
||||
|
||||
BaseModel.db_ = databases_[id];
|
||||
@@ -218,6 +226,7 @@ async function setupDatabaseAndSynchronizer(id = null) {
|
||||
decryptionWorkers_[id] = new DecryptionWorker();
|
||||
decryptionWorkers_[id].setEncryptionService(encryptionServices_[id]);
|
||||
resourceServices_[id] = new ResourceService();
|
||||
kvStores_[id] = new KvStore();
|
||||
|
||||
await fileApi().clearRoot();
|
||||
}
|
||||
@@ -237,6 +246,13 @@ function encryptionService(id = null) {
|
||||
return encryptionServices_[id];
|
||||
}
|
||||
|
||||
function kvStore(id = null) {
|
||||
if (id === null) id = currentClient_;
|
||||
const o = kvStores_[id];
|
||||
o.setDb(db(id));
|
||||
return o;
|
||||
}
|
||||
|
||||
function revisionService(id = null) {
|
||||
if (id === null) id = currentClient_;
|
||||
return revisionServices_[id];
|
||||
@@ -244,7 +260,9 @@ function revisionService(id = null) {
|
||||
|
||||
function decryptionWorker(id = null) {
|
||||
if (id === null) id = currentClient_;
|
||||
return decryptionWorkers_[id];
|
||||
const o = decryptionWorkers_[id];
|
||||
o.setKvStore(kvStore(id));
|
||||
return o;
|
||||
}
|
||||
|
||||
function resourceService(id = null) {
|
||||
@@ -374,4 +392,4 @@ async function allSyncTargetItemsEncrypted() {
|
||||
return totalCount === encryptedCount;
|
||||
}
|
||||
|
||||
module.exports = { resourceService, allSyncTargetItemsEncrypted, setupDatabase, revisionService, setupDatabaseAndSynchronizer, db, synchronizer, fileApi, sleep, clearDatabase, switchClient, syncTargetId, objectsEqual, checkThrowAsync, encryptionService, loadEncryptionMasterKey, fileContentEqual, decryptionWorker, asyncTest };
|
||||
module.exports = { kvStore, resourceService, allSyncTargetItemsEncrypted, setupDatabase, revisionService, setupDatabaseAndSynchronizer, db, synchronizer, fileApi, sleep, clearDatabase, switchClient, syncTargetId, objectsEqual, checkThrowAsync, encryptionService, loadEncryptionMasterKey, fileContentEqual, decryptionWorker, asyncTest };
|
||||
|
@@ -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';
|
||||
@@ -1039,6 +1075,7 @@ class Application extends BaseApplication {
|
||||
// Make it available to the console window - useful to call revisionService.collectRevisions()
|
||||
window.revisionService = RevisionService.instance();
|
||||
window.migrationService = MigrationService.instance();
|
||||
window.decryptionWorker = DecryptionWorker.instance();
|
||||
}
|
||||
|
||||
}
|
||||
|
@@ -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,
|
||||
};
|
||||
};
|
||||
|
||||
|
@@ -132,16 +132,19 @@ class MainScreenComponent extends React.Component {
|
||||
});
|
||||
} else if (command.name === 'setTags') {
|
||||
const tags = await Tag.tagsByNoteId(command.noteId);
|
||||
const tagTitles = tags.map((a) => { return a.title }).sort();
|
||||
const noteTags = tags.map((a) => { return {value: a.id, label: a.title } }).sort((a, b) => { return a.label.localeCompare(b.label); });
|
||||
const allTags = await Tag.allWithNotes();
|
||||
const tagSuggestions = allTags.map((a) => { return {value: a.id, label: a.title } });
|
||||
|
||||
this.setState({
|
||||
promptOptions: {
|
||||
label: _('Add or remove tags:'),
|
||||
description: _('Separate each tag by a comma.'),
|
||||
value: tagTitles.join(', '),
|
||||
inputType: 'tags',
|
||||
value: noteTags,
|
||||
autocomplete: tagSuggestions,
|
||||
onClose: async (answer) => {
|
||||
if (answer !== null) {
|
||||
const tagTitles = answer.split(',').map((a) => { return a.trim() });
|
||||
const tagTitles = answer.map((a) => { return a.label.trim() });
|
||||
await Tag.setNoteTagsByTitles(command.noteId, tagTitles);
|
||||
}
|
||||
this.setState({ promptOptions: null });
|
||||
@@ -448,7 +451,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 +499,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 +524,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,
|
||||
};
|
||||
};
|
||||
|
||||
|
@@ -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');
|
||||
|
@@ -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;
|
||||
|
@@ -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)
|
||||
// ----------------------------------------------------------------
|
||||
|
@@ -5,9 +5,17 @@ const moment = require('moment');
|
||||
const { themeStyle } = require('../theme.js');
|
||||
const { time } = require('lib/time-utils.js');
|
||||
const Datetime = require('react-datetime');
|
||||
const CreatableSelect = require('react-select/lib/Creatable').default;
|
||||
const makeAnimated = require('react-select/lib/animated').default;
|
||||
|
||||
class PromptDialog extends React.Component {
|
||||
|
||||
constructor() {
|
||||
super();
|
||||
|
||||
this.answerInput_ = React.createRef();
|
||||
}
|
||||
|
||||
componentWillMount() {
|
||||
this.setState({
|
||||
visible: false,
|
||||
@@ -28,7 +36,7 @@ class PromptDialog extends React.Component {
|
||||
}
|
||||
|
||||
componentDidUpdate() {
|
||||
if (this.focusInput_ && this.answerInput_) this.answerInput_.focus();
|
||||
if (this.focusInput_ && this.answerInput_.current) this.answerInput_.current.focus();
|
||||
this.focusInput_ = false;
|
||||
}
|
||||
|
||||
@@ -53,15 +61,16 @@ class PromptDialog extends React.Component {
|
||||
height: height - paddingTop,
|
||||
backgroundColor: 'rgba(0,0,0,0.6)',
|
||||
display: visible ? 'flex' : 'none',
|
||||
alignItems: 'flex-start',
|
||||
justifyContent: 'center',
|
||||
paddingTop: paddingTop + 'px',
|
||||
alignItems: 'flex-start',
|
||||
justifyContent: 'center',
|
||||
paddingTop: paddingTop + 'px',
|
||||
};
|
||||
|
||||
this.styles_.promptDialog = {
|
||||
backgroundColor: theme.backgroundColor,
|
||||
padding: 16,
|
||||
display: 'inline-block',
|
||||
maxWidth: width * 0.5,
|
||||
boxShadow: '6px 6px 20px rgba(0,0,0,0.5)',
|
||||
};
|
||||
|
||||
@@ -80,7 +89,7 @@ class PromptDialog extends React.Component {
|
||||
fontSize: theme.fontSize,
|
||||
color: theme.color,
|
||||
fontFamily: theme.fontFamily,
|
||||
verticalAlign: 'top',
|
||||
verticalAlign: 'middle',
|
||||
};
|
||||
|
||||
this.styles_.input = {
|
||||
@@ -92,6 +101,41 @@ class PromptDialog extends React.Component {
|
||||
borderColor: theme.dividerColor,
|
||||
};
|
||||
|
||||
this.styles_.tagList = {
|
||||
control: (provided) => (Object.assign(provided, {
|
||||
minWidth: width * 0.2,
|
||||
maxWidth: width * 0.5,
|
||||
})),
|
||||
input: (provided) => (Object.assign(provided, {
|
||||
minWidth: '20px',
|
||||
color: theme.color,
|
||||
})),
|
||||
menu: (provided) => (Object.assign(provided, {
|
||||
color: theme.color,
|
||||
fontFamily: theme.fontFamily,
|
||||
backgroundColor: theme.backgroundColor,
|
||||
})),
|
||||
multiValueLabel: (provided) => (Object.assign(provided, {
|
||||
fontFamily: theme.fontFamily,
|
||||
})),
|
||||
multiValueRemove: (provided) => (Object.assign(provided, {
|
||||
color: theme.color,
|
||||
})),
|
||||
};
|
||||
|
||||
this.styles_.tagListTheme = (tagTheme) => (Object.assign(tagTheme, {
|
||||
borderRadius: 2,
|
||||
colors: Object.assign(tagTheme.colors, {
|
||||
primary: theme.raisedBackgroundColor,
|
||||
primary25: theme.raisedBackgroundColor,
|
||||
neutral0: theme.backgroundColor,
|
||||
neutral10: theme.raisedBackgroundColor,
|
||||
neutral80: theme.color,
|
||||
danger: theme.backgroundColor,
|
||||
dangerLight: theme.colorError2,
|
||||
}),
|
||||
}));
|
||||
|
||||
this.styles_.desc = Object.assign({}, theme.textStyle, {
|
||||
marginTop: 10,
|
||||
});
|
||||
@@ -135,8 +179,13 @@ class PromptDialog extends React.Component {
|
||||
this.setState({ answer: momentObject });
|
||||
}
|
||||
|
||||
const onTagsChange = (newTags) => {
|
||||
this.setState({ answer: newTags });
|
||||
this.focusInput_ = true;
|
||||
}
|
||||
|
||||
const onKeyDown = (event) => {
|
||||
if (event.key === 'Enter') {
|
||||
if (event.key === 'Enter' && this.props.inputType !== 'tags') {
|
||||
onClose(true);
|
||||
} else if (event.key === 'Escape') {
|
||||
onClose(false);
|
||||
@@ -155,10 +204,25 @@ class PromptDialog extends React.Component {
|
||||
timeFormat={time.timeFormat()}
|
||||
onChange={(momentObject) => onDateTimeChange(momentObject)}
|
||||
/>
|
||||
} else if (this.props.inputType === 'tags') {
|
||||
inputComp = <CreatableSelect
|
||||
styles={styles.tagList}
|
||||
theme={styles.tagListTheme}
|
||||
ref={this.answerInput_}
|
||||
value={this.state.answer}
|
||||
placeholder={this.props.label ? this.props.label.replace(':', '') : ''}
|
||||
components={makeAnimated()}
|
||||
isMulti={true}
|
||||
isClearable={false}
|
||||
backspaceRemovesValue={true}
|
||||
options={this.props.autocomplete}
|
||||
onChange={onTagsChange}
|
||||
onKeyDown={(event) => onKeyDown(event)}
|
||||
/>
|
||||
} else {
|
||||
inputComp = <input
|
||||
style={styles.input}
|
||||
ref={input => this.answerInput_ = input}
|
||||
ref={this.answerInput_}
|
||||
value={this.state.answer}
|
||||
type="text"
|
||||
onChange={(event) => onChange(event)}
|
||||
|
@@ -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);
|
||||
|
@@ -48,6 +48,7 @@ class StatusScreenComponent extends React.Component {
|
||||
const style = this.props.style;
|
||||
|
||||
const headerStyle = Object.assign({}, theme.headerStyle, { width: style.width });
|
||||
const retryStyle = Object.assign({}, theme.urlStyle, {marginLeft: 5});
|
||||
|
||||
const containerPadding = 10;
|
||||
|
||||
@@ -60,16 +61,34 @@ class StatusScreenComponent extends React.Component {
|
||||
return <h2 key={'section_' + key} style={theme.h2Style}>{title}</h2>
|
||||
}
|
||||
|
||||
function renderSectionHtml(key, section) {
|
||||
const renderSectionHtml = (key, section) => {
|
||||
let itemsHtml = [];
|
||||
|
||||
itemsHtml.push(renderSectionTitleHtml(section.title, section.title));
|
||||
|
||||
for (let n in section.body) {
|
||||
if (!section.body.hasOwnProperty(n)) continue;
|
||||
let text = section.body[n];
|
||||
let item = section.body[n];
|
||||
let text = '';
|
||||
|
||||
let retryLink = null;
|
||||
if (typeof item === 'object') {
|
||||
if (item.canRetry) {
|
||||
const onClick = async () => {
|
||||
await item.retryHandler();
|
||||
this.resfreshScreen();
|
||||
}
|
||||
|
||||
retryLink = <a href="#" onClick={onClick} style={retryStyle}>{_('Retry')}</a>;
|
||||
}
|
||||
text = item.text;
|
||||
} else {
|
||||
text = item;
|
||||
}
|
||||
|
||||
if (!text) text = '\xa0';
|
||||
itemsHtml.push(<div style={theme.textStyle} key={'item_' + n}>{text}</div>);
|
||||
|
||||
itemsHtml.push(<div style={theme.textStyle} key={'item_' + n}><span>{text}</span>{retryLink}</div>);
|
||||
}
|
||||
|
||||
return (
|
||||
|
@@ -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_ = '​ ​'
|
||||
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_ = '​ ​'
|
||||
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
1
ElectronClient/app/locales/fa.json
Normal file
1
ElectronClient/app/locales/fa.json
Normal file
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
@@ -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
1
ElectronClient/app/locales/nb.json
Normal file
1
ElectronClient/app/locales/nb.json
Normal file
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
1
ElectronClient/app/locales/pl_PL.json
Normal file
1
ElectronClient/app/locales/pl_PL.json
Normal file
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
427
ElectronClient/app/package-lock.json
generated
427
ElectronClient/app/package-lock.json
generated
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "Joplin",
|
||||
"version": "1.0.152",
|
||||
"version": "1.0.159",
|
||||
"lockfileVersion": 1,
|
||||
"requires": true,
|
||||
"dependencies": {
|
||||
@@ -28,6 +28,115 @@
|
||||
"integrity": "sha512-uPHXapEmUtlUKTBx4asWMlxtFUWXzEY0KVEgU7QKhgO2LJzzM3kYxM6yOyUZTtYE6mhK4dDn3FDut9SCQWHzgg==",
|
||||
"optional": true
|
||||
},
|
||||
"@babel/helper-module-imports": {
|
||||
"version": "7.0.0",
|
||||
"resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.0.0.tgz",
|
||||
"integrity": "sha512-aP/hlLq01DWNEiDg4Jn23i+CXxW/owM4WpDLFUbpjxe4NS3BhLVZQ5i7E0ZrxuQ/vwekIeciyamgB1UIYxxM6A==",
|
||||
"requires": {
|
||||
"@babel/types": "^7.0.0"
|
||||
}
|
||||
},
|
||||
"@babel/runtime": {
|
||||
"version": "7.4.5",
|
||||
"resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.4.5.tgz",
|
||||
"integrity": "sha512-TuI4qpWZP6lGOGIuGWtp9sPluqYICmbk8T/1vpSysqJxRPkudh/ofFWyqdcMsDf2s7KvDL4/YHgKyvcS3g9CJQ==",
|
||||
"requires": {
|
||||
"regenerator-runtime": "^0.13.2"
|
||||
},
|
||||
"dependencies": {
|
||||
"regenerator-runtime": {
|
||||
"version": "0.13.2",
|
||||
"resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.2.tgz",
|
||||
"integrity": "sha512-S/TQAZJO+D3m9xeN1WTI8dLKBBiRgXBlTJvbWjCThHWZj9EvHK70Ff50/tYj2J/fvBY6JtFVwRuazHN2E7M9BA=="
|
||||
}
|
||||
}
|
||||
},
|
||||
"@babel/types": {
|
||||
"version": "7.4.4",
|
||||
"resolved": "https://registry.npmjs.org/@babel/types/-/types-7.4.4.tgz",
|
||||
"integrity": "sha512-dOllgYdnEFOebhkKCjzSVFqw/PmmB8pH6RGOWkY4GsboQNd47b1fBThBSwlHAq9alF9vc1M3+6oqR47R50L0tQ==",
|
||||
"requires": {
|
||||
"esutils": "^2.0.2",
|
||||
"lodash": "^4.17.11",
|
||||
"to-fast-properties": "^2.0.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"lodash": {
|
||||
"version": "4.17.11",
|
||||
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz",
|
||||
"integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg=="
|
||||
},
|
||||
"to-fast-properties": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
|
||||
"integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4="
|
||||
}
|
||||
}
|
||||
},
|
||||
"@emotion/babel-utils": {
|
||||
"version": "0.6.10",
|
||||
"resolved": "https://registry.npmjs.org/@emotion/babel-utils/-/babel-utils-0.6.10.tgz",
|
||||
"integrity": "sha512-/fnkM/LTEp3jKe++T0KyTszVGWNKPNOUJfjNKLO17BzQ6QPxgbg3whayom1Qr2oLFH3V92tDymU+dT5q676uow==",
|
||||
"requires": {
|
||||
"@emotion/hash": "^0.6.6",
|
||||
"@emotion/memoize": "^0.6.6",
|
||||
"@emotion/serialize": "^0.9.1",
|
||||
"convert-source-map": "^1.5.1",
|
||||
"find-root": "^1.1.0",
|
||||
"source-map": "^0.7.2"
|
||||
},
|
||||
"dependencies": {
|
||||
"convert-source-map": {
|
||||
"version": "1.6.0",
|
||||
"resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.6.0.tgz",
|
||||
"integrity": "sha512-eFu7XigvxdZ1ETfbgPBohgyQ/Z++C0eEhTor0qRwBw9unw+L0/6V8wkSuGgzdThkiS5lSpdptOQPD8Ak40a+7A==",
|
||||
"requires": {
|
||||
"safe-buffer": "~5.1.1"
|
||||
}
|
||||
},
|
||||
"source-map": {
|
||||
"version": "0.7.3",
|
||||
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz",
|
||||
"integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ=="
|
||||
}
|
||||
}
|
||||
},
|
||||
"@emotion/hash": {
|
||||
"version": "0.6.6",
|
||||
"resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.6.6.tgz",
|
||||
"integrity": "sha512-ojhgxzUHZ7am3D2jHkMzPpsBAiB005GF5YU4ea+8DNPybMk01JJUM9V9YRlF/GE95tcOm8DxQvWA2jq19bGalQ=="
|
||||
},
|
||||
"@emotion/memoize": {
|
||||
"version": "0.6.6",
|
||||
"resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.6.6.tgz",
|
||||
"integrity": "sha512-h4t4jFjtm1YV7UirAFuSuFGyLa+NNxjdkq6DpFLANNQY5rHueFZHVY+8Cu1HYVP6DrheB0kv4m5xPjo7eKT7yQ=="
|
||||
},
|
||||
"@emotion/serialize": {
|
||||
"version": "0.9.1",
|
||||
"resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-0.9.1.tgz",
|
||||
"integrity": "sha512-zTuAFtyPvCctHBEL8KZ5lJuwBanGSutFEncqLn/m9T1a6a93smBStK+bZzcNPgj4QS8Rkw9VTwJGhRIUVO8zsQ==",
|
||||
"requires": {
|
||||
"@emotion/hash": "^0.6.6",
|
||||
"@emotion/memoize": "^0.6.6",
|
||||
"@emotion/unitless": "^0.6.7",
|
||||
"@emotion/utils": "^0.8.2"
|
||||
}
|
||||
},
|
||||
"@emotion/stylis": {
|
||||
"version": "0.7.1",
|
||||
"resolved": "https://registry.npmjs.org/@emotion/stylis/-/stylis-0.7.1.tgz",
|
||||
"integrity": "sha512-/SLmSIkN13M//53TtNxgxo57mcJk/UJIDFRKwOiLIBEyBHEcipgR6hNMQ/59Sl4VjCJ0Z/3zeAZyvnSLPG/1HQ=="
|
||||
},
|
||||
"@emotion/unitless": {
|
||||
"version": "0.6.7",
|
||||
"resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.6.7.tgz",
|
||||
"integrity": "sha512-Arj1hncvEVqQ2p7Ega08uHLr1JuRYBuO5cIvcA+WWEQ5+VmkOE3ZXzl04NbQxeQpWX78G7u6MqxKuNX3wvYZxg=="
|
||||
},
|
||||
"@emotion/utils": {
|
||||
"version": "0.8.2",
|
||||
"resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-0.8.2.tgz",
|
||||
"integrity": "sha512-rLu3wcBWH4P5q1CGoSSH/i9hrXs7SlbRLkoq9IGuoPYNGQvDJ3pt/wmOM+XgYjIDRMVIdkUWt0RsfzF50JfnCw=="
|
||||
},
|
||||
"@types/node": {
|
||||
"version": "10.14.5",
|
||||
"resolved": "https://registry.npmjs.org/@types/node/-/node-10.14.5.tgz",
|
||||
@@ -579,6 +688,35 @@
|
||||
"babel-runtime": "^6.22.0"
|
||||
}
|
||||
},
|
||||
"babel-plugin-emotion": {
|
||||
"version": "9.2.11",
|
||||
"resolved": "https://registry.npmjs.org/babel-plugin-emotion/-/babel-plugin-emotion-9.2.11.tgz",
|
||||
"integrity": "sha512-dgCImifnOPPSeXod2znAmgc64NhaaOjGEHROR/M+lmStb3841yK1sgaDYAYMnlvWNz8GnpwIPN0VmNpbWYZ+VQ==",
|
||||
"requires": {
|
||||
"@babel/helper-module-imports": "^7.0.0",
|
||||
"@emotion/babel-utils": "^0.6.4",
|
||||
"@emotion/hash": "^0.6.2",
|
||||
"@emotion/memoize": "^0.6.1",
|
||||
"@emotion/stylis": "^0.7.0",
|
||||
"babel-plugin-macros": "^2.0.0",
|
||||
"babel-plugin-syntax-jsx": "^6.18.0",
|
||||
"convert-source-map": "^1.5.0",
|
||||
"find-root": "^1.1.0",
|
||||
"mkdirp": "^0.5.1",
|
||||
"source-map": "^0.5.7",
|
||||
"touch": "^2.0.1"
|
||||
}
|
||||
},
|
||||
"babel-plugin-macros": {
|
||||
"version": "2.5.1",
|
||||
"resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-2.5.1.tgz",
|
||||
"integrity": "sha512-xN3KhAxPzsJ6OQTktCanNpIFnnMsCV+t8OloKxIL72D6+SUZYFn9qfklPgef5HyyDtzYZqqb+fs1S12+gQY82Q==",
|
||||
"requires": {
|
||||
"@babel/runtime": "^7.4.2",
|
||||
"cosmiconfig": "^5.2.0",
|
||||
"resolve": "^1.10.0"
|
||||
}
|
||||
},
|
||||
"babel-plugin-syntax-flow": {
|
||||
"version": "6.18.0",
|
||||
"resolved": "https://registry.npmjs.org/babel-plugin-syntax-flow/-/babel-plugin-syntax-flow-6.18.0.tgz",
|
||||
@@ -588,8 +726,7 @@
|
||||
"babel-plugin-syntax-jsx": {
|
||||
"version": "6.18.0",
|
||||
"resolved": "https://registry.npmjs.org/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz",
|
||||
"integrity": "sha1-CvMqmm4Tyno/1QaeYtew9Y0NiUY=",
|
||||
"dev": true
|
||||
"integrity": "sha1-CvMqmm4Tyno/1QaeYtew9Y0NiUY="
|
||||
},
|
||||
"babel-plugin-transform-flow-strip-types": {
|
||||
"version": "6.22.0",
|
||||
@@ -1095,6 +1232,27 @@
|
||||
"integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=",
|
||||
"dev": true
|
||||
},
|
||||
"caller-callsite": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz",
|
||||
"integrity": "sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ=",
|
||||
"requires": {
|
||||
"callsites": "^2.0.0"
|
||||
}
|
||||
},
|
||||
"caller-path": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz",
|
||||
"integrity": "sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ=",
|
||||
"requires": {
|
||||
"caller-callsite": "^2.0.0"
|
||||
}
|
||||
},
|
||||
"callsites": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz",
|
||||
"integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA="
|
||||
},
|
||||
"camelcase": {
|
||||
"version": "2.1.1",
|
||||
"resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz",
|
||||
@@ -1383,8 +1541,7 @@
|
||||
"convert-source-map": {
|
||||
"version": "1.5.0",
|
||||
"resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.5.0.tgz",
|
||||
"integrity": "sha1-ms1whRxtXf3ZPZKC5e35SgP/RrU=",
|
||||
"dev": true
|
||||
"integrity": "sha1-ms1whRxtXf3ZPZKC5e35SgP/RrU="
|
||||
},
|
||||
"core-js": {
|
||||
"version": "1.2.7",
|
||||
@@ -1396,6 +1553,51 @@
|
||||
"resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
|
||||
"integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac="
|
||||
},
|
||||
"cosmiconfig": {
|
||||
"version": "5.2.1",
|
||||
"resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz",
|
||||
"integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==",
|
||||
"requires": {
|
||||
"import-fresh": "^2.0.0",
|
||||
"is-directory": "^0.3.1",
|
||||
"js-yaml": "^3.13.1",
|
||||
"parse-json": "^4.0.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"js-yaml": {
|
||||
"version": "3.13.1",
|
||||
"resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz",
|
||||
"integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==",
|
||||
"requires": {
|
||||
"argparse": "^1.0.7",
|
||||
"esprima": "^4.0.0"
|
||||
}
|
||||
},
|
||||
"parse-json": {
|
||||
"version": "4.0.0",
|
||||
"resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz",
|
||||
"integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=",
|
||||
"requires": {
|
||||
"error-ex": "^1.3.1",
|
||||
"json-parse-better-errors": "^1.0.1"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"create-emotion": {
|
||||
"version": "9.2.12",
|
||||
"resolved": "https://registry.npmjs.org/create-emotion/-/create-emotion-9.2.12.tgz",
|
||||
"integrity": "sha512-P57uOF9NL2y98Xrbl2OuiDQUZ30GVmASsv5fbsjF4Hlraip2kyAvMm+2PoYUvFFw03Fhgtxk3RqZSm2/qHL9hA==",
|
||||
"requires": {
|
||||
"@emotion/hash": "^0.6.2",
|
||||
"@emotion/memoize": "^0.6.1",
|
||||
"@emotion/stylis": "^0.7.0",
|
||||
"@emotion/unitless": "^0.6.2",
|
||||
"csstype": "^2.5.2",
|
||||
"stylis": "^3.5.0",
|
||||
"stylis-rule-sheet": "^0.0.10"
|
||||
}
|
||||
},
|
||||
"create-error-class": {
|
||||
"version": "3.0.2",
|
||||
"resolved": "https://registry.npmjs.org/create-error-class/-/create-error-class-3.0.2.tgz",
|
||||
@@ -1450,6 +1652,11 @@
|
||||
"cssom": "0.3.x"
|
||||
}
|
||||
},
|
||||
"csstype": {
|
||||
"version": "2.6.4",
|
||||
"resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.4.tgz",
|
||||
"integrity": "sha512-lAJUJP3M6HxFXbqtGRc0iZrdyeN+WzOWeY0q/VnFzI+kqVrYIzC7bWlKqCW7oCIdzoPkvfp82EVvrTlQ8zsWQg=="
|
||||
},
|
||||
"currently-unhandled": {
|
||||
"version": "0.4.1",
|
||||
"resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz",
|
||||
@@ -1603,6 +1810,14 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"dom-helpers": {
|
||||
"version": "3.4.0",
|
||||
"resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-3.4.0.tgz",
|
||||
"integrity": "sha512-LnuPJ+dwqKDIyotW1VzmOZ5TONUN7CwkCR5hrgawTUbkBGYdeoNLZo6nNfGkCrjtE1nXXaj7iMMpDa8/d9WoIA==",
|
||||
"requires": {
|
||||
"@babel/runtime": "^7.1.2"
|
||||
}
|
||||
},
|
||||
"domexception": {
|
||||
"version": "1.0.1",
|
||||
"resolved": "https://registry.npmjs.org/domexception/-/domexception-1.0.1.tgz",
|
||||
@@ -1946,6 +2161,15 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"emotion": {
|
||||
"version": "9.2.12",
|
||||
"resolved": "https://registry.npmjs.org/emotion/-/emotion-9.2.12.tgz",
|
||||
"integrity": "sha512-hcx7jppaI8VoXxIWEhxpDW7I+B4kq9RNzQLmsrF6LY8BGKqe2N+gFAQr0EfuFucFlPs2A9HM4+xNj4NeqEWIOQ==",
|
||||
"requires": {
|
||||
"babel-plugin-emotion": "^9.2.11",
|
||||
"create-emotion": "^9.2.12"
|
||||
}
|
||||
},
|
||||
"encoding": {
|
||||
"version": "0.1.12",
|
||||
"resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.12.tgz",
|
||||
@@ -1978,7 +2202,6 @@
|
||||
"version": "1.3.2",
|
||||
"resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
|
||||
"integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"is-arrayish": "^0.2.1"
|
||||
}
|
||||
@@ -2027,8 +2250,7 @@
|
||||
"esprima": {
|
||||
"version": "4.0.1",
|
||||
"resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
|
||||
"integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
|
||||
"dev": true
|
||||
"integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A=="
|
||||
},
|
||||
"estraverse": {
|
||||
"version": "4.2.0",
|
||||
@@ -2224,6 +2446,11 @@
|
||||
"to-regex-range": "^5.0.1"
|
||||
}
|
||||
},
|
||||
"find-root": {
|
||||
"version": "1.1.0",
|
||||
"resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz",
|
||||
"integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng=="
|
||||
},
|
||||
"find-up": {
|
||||
"version": "1.1.2",
|
||||
"resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz",
|
||||
@@ -3243,6 +3470,15 @@
|
||||
"file-type": "^4.1.0"
|
||||
}
|
||||
},
|
||||
"import-fresh": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz",
|
||||
"integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=",
|
||||
"requires": {
|
||||
"caller-path": "^2.0.0",
|
||||
"resolve-from": "^3.0.0"
|
||||
}
|
||||
},
|
||||
"import-lazy": {
|
||||
"version": "2.1.0",
|
||||
"resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz",
|
||||
@@ -3300,8 +3536,7 @@
|
||||
"is-arrayish": {
|
||||
"version": "0.2.1",
|
||||
"resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
|
||||
"integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=",
|
||||
"dev": true
|
||||
"integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0="
|
||||
},
|
||||
"is-binary-path": {
|
||||
"version": "1.0.1",
|
||||
@@ -3336,6 +3571,11 @@
|
||||
"ci-info": "^2.0.0"
|
||||
}
|
||||
},
|
||||
"is-directory": {
|
||||
"version": "0.3.1",
|
||||
"resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz",
|
||||
"integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE="
|
||||
},
|
||||
"is-dotfile": {
|
||||
"version": "1.0.3",
|
||||
"resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz",
|
||||
@@ -3584,6 +3824,11 @@
|
||||
"integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=",
|
||||
"dev": true
|
||||
},
|
||||
"json-parse-better-errors": {
|
||||
"version": "1.0.2",
|
||||
"resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz",
|
||||
"integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw=="
|
||||
},
|
||||
"json-schema": {
|
||||
"version": "0.2.3",
|
||||
"resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz",
|
||||
@@ -3695,9 +3940,9 @@
|
||||
}
|
||||
},
|
||||
"linkify-it": {
|
||||
"version": "2.0.3",
|
||||
"resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-2.0.3.tgz",
|
||||
"integrity": "sha1-2UpGSPmxwXnWT6lykSaL22zpQ08=",
|
||||
"version": "2.1.0",
|
||||
"resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-2.1.0.tgz",
|
||||
"integrity": "sha512-4REs8/062kV2DSHxNfq5183zrqXMl7WP0WzABH9IeJI+NLm429FgE1PDecltYfnOoFDFlZGh2T8PfZn0r+GTRg==",
|
||||
"requires": {
|
||||
"uc.micro": "^1.0.1"
|
||||
}
|
||||
@@ -3933,31 +4178,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"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -3973,9 +4210,9 @@
|
||||
"integrity": "sha1-y5yf+RpSVawI8/09YyhuFd8KH8M="
|
||||
},
|
||||
"markdown-it-toc-done-right": {
|
||||
"version": "3.0.1",
|
||||
"resolved": "https://registry.npmjs.org/markdown-it-toc-done-right/-/markdown-it-toc-done-right-3.0.1.tgz",
|
||||
"integrity": "sha512-pppqoXWFyMD/JCLL7YZSYPnxJHr7DH7psXfHzTOXWof8b6XGhbCDYYha6Vi6EDwDEKY+dthNVtMSLHPlk0c1xw=="
|
||||
"version": "4.0.0",
|
||||
"resolved": "https://registry.npmjs.org/markdown-it-toc-done-right/-/markdown-it-toc-done-right-4.0.0.tgz",
|
||||
"integrity": "sha512-jaoIC02ehqUrT6RpbNZMe+ug7BaW3V6G1qTi/hTtcswuFWunP2H2GzmVobWIyOb3nQ4HNBXHqdbsv8fEsMCKWA=="
|
||||
},
|
||||
"match-at": {
|
||||
"version": "0.1.1",
|
||||
@@ -4015,6 +4252,11 @@
|
||||
"p-is-promise": "^2.0.0"
|
||||
}
|
||||
},
|
||||
"memoize-one": {
|
||||
"version": "5.0.4",
|
||||
"resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-5.0.4.tgz",
|
||||
"integrity": "sha512-P0z5IeAH6qHHGkJIXWw0xC2HNEgkx/9uWWBQw64FJj3/ol14VYdfVGWWr0fXfjhhv3TKVIqUq65os6O4GUNksA=="
|
||||
},
|
||||
"meow": {
|
||||
"version": "3.7.0",
|
||||
"resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz",
|
||||
@@ -4717,6 +4959,11 @@
|
||||
"integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=",
|
||||
"dev": true
|
||||
},
|
||||
"path-parse": {
|
||||
"version": "1.0.6",
|
||||
"resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz",
|
||||
"integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw=="
|
||||
},
|
||||
"path-type": {
|
||||
"version": "1.1.0",
|
||||
"resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz",
|
||||
@@ -4905,6 +5152,14 @@
|
||||
"resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.1.0.tgz",
|
||||
"integrity": "sha512-sluvZZ1YiTLD5jsqZcDmFyV2EwToyXZBfpoVOmktMmW+VEnhgakFHnasVph65fOjGPTWN0Nw3+XQaSeMayr0kg=="
|
||||
},
|
||||
"raf": {
|
||||
"version": "3.4.1",
|
||||
"resolved": "https://registry.npmjs.org/raf/-/raf-3.4.1.tgz",
|
||||
"integrity": "sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==",
|
||||
"requires": {
|
||||
"performance-now": "^2.1.0"
|
||||
}
|
||||
},
|
||||
"random-bytes": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/random-bytes/-/random-bytes-1.0.0.tgz",
|
||||
@@ -5023,11 +5278,24 @@
|
||||
"prop-types": "^15.6.0"
|
||||
}
|
||||
},
|
||||
"react-input-autosize": {
|
||||
"version": "2.2.1",
|
||||
"resolved": "https://registry.npmjs.org/react-input-autosize/-/react-input-autosize-2.2.1.tgz",
|
||||
"integrity": "sha512-3+K4CD13iE4lQQ2WlF8PuV5htfmTRLH6MDnfndHM6LuBRszuXnuyIfE7nhSKt8AzRBZ50bu0sAhkNMeS5pxQQA==",
|
||||
"requires": {
|
||||
"prop-types": "^15.5.8"
|
||||
}
|
||||
},
|
||||
"react-is": {
|
||||
"version": "16.8.6",
|
||||
"resolved": "https://registry.npmjs.org/react-is/-/react-is-16.8.6.tgz",
|
||||
"integrity": "sha512-aUk3bHfZ2bRSVFFbbeVS4i+lNPZr3/WM5jT2J5omUVV1zzcs1nAaf3l51ctA5FFvCRbhrH0bdAsRRQddFJZPtA=="
|
||||
},
|
||||
"react-lifecycles-compat": {
|
||||
"version": "3.0.4",
|
||||
"resolved": "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz",
|
||||
"integrity": "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA=="
|
||||
},
|
||||
"react-onclickoutside": {
|
||||
"version": "6.7.1",
|
||||
"resolved": "https://registry.npmjs.org/react-onclickoutside/-/react-onclickoutside-6.7.1.tgz",
|
||||
@@ -5053,6 +5321,20 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"react-select": {
|
||||
"version": "2.4.3",
|
||||
"resolved": "https://registry.npmjs.org/react-select/-/react-select-2.4.3.tgz",
|
||||
"integrity": "sha512-cmxNaiHpviRYkojeW9rGEUJ4jpX7QTmPe2wcscwA4d1lStzw/cJtr4ft5H2O/YhfpkrcwaLghu3XmEYdXhBo8Q==",
|
||||
"requires": {
|
||||
"classnames": "^2.2.5",
|
||||
"emotion": "^9.1.2",
|
||||
"memoize-one": "^5.0.0",
|
||||
"prop-types": "^15.6.0",
|
||||
"raf": "^3.4.0",
|
||||
"react-input-autosize": "^2.2.1",
|
||||
"react-transition-group": "^2.2.1"
|
||||
}
|
||||
},
|
||||
"react-tooltip": {
|
||||
"version": "3.10.0",
|
||||
"resolved": "https://registry.npmjs.org/react-tooltip/-/react-tooltip-3.10.0.tgz",
|
||||
@@ -5062,6 +5344,37 @@
|
||||
"prop-types": "^15.6.0"
|
||||
}
|
||||
},
|
||||
"react-transition-group": {
|
||||
"version": "2.9.0",
|
||||
"resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-2.9.0.tgz",
|
||||
"integrity": "sha512-+HzNTCHpeQyl4MJ/bdE0u6XRMe9+XG/+aL4mCxVN4DnPBQ0/5bfHWPDuOZUzYdMj94daZaZdCCc1Dzt9R/xSSg==",
|
||||
"requires": {
|
||||
"dom-helpers": "^3.4.0",
|
||||
"loose-envify": "^1.4.0",
|
||||
"prop-types": "^15.6.2",
|
||||
"react-lifecycles-compat": "^3.0.4"
|
||||
},
|
||||
"dependencies": {
|
||||
"loose-envify": {
|
||||
"version": "1.4.0",
|
||||
"resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
|
||||
"integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
|
||||
"requires": {
|
||||
"js-tokens": "^3.0.0 || ^4.0.0"
|
||||
}
|
||||
},
|
||||
"prop-types": {
|
||||
"version": "15.7.2",
|
||||
"resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz",
|
||||
"integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==",
|
||||
"requires": {
|
||||
"loose-envify": "^1.4.0",
|
||||
"object-assign": "^4.1.1",
|
||||
"react-is": "^16.8.1"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"read-chunk": {
|
||||
"version": "2.1.0",
|
||||
"resolved": "https://registry.npmjs.org/read-chunk/-/read-chunk-2.1.0.tgz",
|
||||
@@ -5322,6 +5635,19 @@
|
||||
"resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz",
|
||||
"integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8="
|
||||
},
|
||||
"resolve": {
|
||||
"version": "1.11.0",
|
||||
"resolved": "https://registry.npmjs.org/resolve/-/resolve-1.11.0.tgz",
|
||||
"integrity": "sha512-WL2pBDjqT6pGUNSUzMw00o4T7If+z4H2x3Gz893WoUQ5KW8Vr9txp00ykiP16VBaZF5+j/OcXJHZ9+PCvdiDKw==",
|
||||
"requires": {
|
||||
"path-parse": "^1.0.6"
|
||||
}
|
||||
},
|
||||
"resolve-from": {
|
||||
"version": "3.0.0",
|
||||
"resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz",
|
||||
"integrity": "sha1-six699nWiBvItuZTM17rywoYh0g="
|
||||
},
|
||||
"restore-cursor": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz",
|
||||
@@ -5507,8 +5833,7 @@
|
||||
"source-map": {
|
||||
"version": "0.5.7",
|
||||
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
|
||||
"integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
|
||||
"dev": true
|
||||
"integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w="
|
||||
},
|
||||
"source-map-support": {
|
||||
"version": "0.4.18",
|
||||
@@ -5689,6 +6014,16 @@
|
||||
"resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
|
||||
"integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo="
|
||||
},
|
||||
"stylis": {
|
||||
"version": "3.5.4",
|
||||
"resolved": "https://registry.npmjs.org/stylis/-/stylis-3.5.4.tgz",
|
||||
"integrity": "sha512-8/3pSmthWM7lsPBKv7NXkzn2Uc9W7NotcwGNpJaa3k7WMM1XDCA4MgT5k/8BIexd5ydZdboXtU90XH9Ec4Bv/Q=="
|
||||
},
|
||||
"stylis-rule-sheet": {
|
||||
"version": "0.0.10",
|
||||
"resolved": "https://registry.npmjs.org/stylis-rule-sheet/-/stylis-rule-sheet-0.0.10.tgz",
|
||||
"integrity": "sha512-nTbZoaqoBnmK+ptANthb10ZRZOGC+EmTLLUxeYIuHNkEKcmKgXX1XWKkUBT2Ac4es3NybooPe0SmvKdhKJZAuw=="
|
||||
},
|
||||
"sumchecker": {
|
||||
"version": "2.0.2",
|
||||
"resolved": "https://registry.npmjs.org/sumchecker/-/sumchecker-2.0.2.tgz",
|
||||
@@ -5849,6 +6184,24 @@
|
||||
"resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz",
|
||||
"integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw=="
|
||||
},
|
||||
"touch": {
|
||||
"version": "2.0.2",
|
||||
"resolved": "https://registry.npmjs.org/touch/-/touch-2.0.2.tgz",
|
||||
"integrity": "sha512-qjNtvsFXTRq7IuMLweVgFxmEuQ6gLbRs2jQxL80TtZ31dEKWYIxRXquij6w6VimyDek5hD3PytljHmEtAs2u0A==",
|
||||
"requires": {
|
||||
"nopt": "~1.0.10"
|
||||
},
|
||||
"dependencies": {
|
||||
"nopt": {
|
||||
"version": "1.0.10",
|
||||
"resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz",
|
||||
"integrity": "sha1-bd0hvSoxQXuScn3Vhfim83YI6+4=",
|
||||
"requires": {
|
||||
"abbrev": "1"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"tough-cookie": {
|
||||
"version": "2.3.4",
|
||||
"resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.4.tgz",
|
||||
|
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "Joplin",
|
||||
"version": "1.0.152",
|
||||
"version": "1.0.159",
|
||||
"description": "Joplin for Desktop",
|
||||
"main": "main.js",
|
||||
"scripts": {
|
||||
@@ -117,10 +117,10 @@
|
||||
"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",
|
||||
"markdown-it-toc-done-right": "^4.0.0",
|
||||
"md5": "^2.2.1",
|
||||
"mime": "^2.3.1",
|
||||
"moment": "^2.22.2",
|
||||
@@ -134,6 +134,7 @@
|
||||
"react-datetime": "^2.14.0",
|
||||
"react-dom": "^16.4.0",
|
||||
"react-redux": "^5.0.7",
|
||||
"react-select": "^2.4.3",
|
||||
"react-tooltip": "^3.10.0",
|
||||
"read-chunk": "^2.1.0",
|
||||
"readability-node": "^0.1.0",
|
||||
|
@@ -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",
|
||||
|
@@ -247,10 +247,13 @@ function themeStyle(theme) {
|
||||
const cacheKey = [theme, zoomRatio, editorFontSize].join('-');
|
||||
if (themeCache_[cacheKey]) return themeCache_[cacheKey];
|
||||
|
||||
// Font size are not theme specific, but they must be referenced
|
||||
// and computed here to allow them to respond to settings changes
|
||||
// without the need to restart
|
||||
let fontSizes = {
|
||||
fontSize: Math.round(12 * zoomRatio),
|
||||
fontSize: Math.round(globalStyle.fontSize * zoomRatio),
|
||||
editorFontSize: editorFontSize,
|
||||
textAreaLineHeight: Math.round(17 * editorFontSize / 12),
|
||||
textAreaLineHeight: Math.round(globalStyle.textAreaLineHeight * editorFontSize / 12),
|
||||
|
||||
// For WebView - must correspond to the properties above
|
||||
htmlFontSize: Math.round(15 * zoomRatio) + 'px',
|
||||
|
3
ElectronClient/package-lock.json
generated
Normal file
3
ElectronClient/package-lock.json
generated
Normal file
@@ -0,0 +1,3 @@
|
||||
{
|
||||
"lockfileVersion": 1
|
||||
}
|
@@ -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/
|
||||
@@ -56,7 +56,8 @@ if [[ ! -e ~/.joplin/VERSION ]] || [[ $(< ~/.joplin/VERSION) != "$version" ]]; t
|
||||
|
||||
# Download icon
|
||||
echo 'Downloading icon...'
|
||||
wget -nv -O ~/.joplin/Icon512.png https://joplinapp.org/images/Icon512.png
|
||||
mkdir -p ~/.local/share/icons/hicolor/512x512/apps
|
||||
wget -nv -O ~/.local/share/icons/hicolor/512x512/apps/joplin.png https://joplinapp.org/images/Icon512.png
|
||||
echo "${COLOR_GREEN}OK${COLOR_RESET}"
|
||||
|
||||
# Detect desktop environment
|
||||
@@ -78,9 +79,12 @@ 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 -e "[Desktop Entry]\nEncoding=UTF-8\nName=Joplin\nComment=Joplin for Desktop\nExec=/home/$USER/.joplin/Joplin.AppImage\nIcon=joplin\nStartupWMClass=Joplin\nType=Application\nCategories=Application;\n$APPIMAGE_VERSION" >> ~/.local/share/applications/appimagekit-joplin.desktop
|
||||
echo "${COLOR_GREEN}OK${COLOR_RESET}"
|
||||
else
|
||||
echo "${COLOR_RED}NOT DONE${COLOR_RESET}"
|
||||
|
79
README.md
79
README.md
@@ -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.252/joplin-v1.0.252.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.261/joplin-v1.0.261.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,10 +333,11 @@ 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).
|
||||
- You can also follow us on [the Twitter feed](https://twitter.com/joplinapp).
|
||||
|
||||
# Contributing
|
||||
|
||||
@@ -350,32 +361,34 @@ Current translations:
|
||||
<!-- LOCALE-TABLE-AUTO-GENERATED -->
|
||||
| Language | Po File | Last translator | Percent done
|
||||
---|---|---|---|---
|
||||
 | Arabic | [ar](https://github.com/laurent22/joplin/blob/master/CliClient/locales/ar.po) | عبد الناصر سعيد (as@althobaity.com) | 93%
|
||||
 | Basque | [eu](https://github.com/laurent22/joplin/blob/master/CliClient/locales/eu.po) | juan.abasolo@ehu.eus | 53%
|
||||
 | Catalan | [ca](https://github.com/laurent22/joplin/blob/master/CliClient/locales/ca.po) | jmontane, 2018 | 75%
|
||||
 | Croatian | [hr_HR](https://github.com/laurent22/joplin/blob/master/CliClient/locales/hr_HR.po) | Hrvoje Mandić (trbuhom@net.hr) | 43%
|
||||
 | Czech | [cs_CZ](https://github.com/laurent22/joplin/blob/master/CliClient/locales/cs_CZ.po) | Lukas Helebrandt (lukas@aiya.cz) | 93%
|
||||
 | Dansk | [da_DK](https://github.com/laurent22/joplin/blob/master/CliClient/locales/da_DK.po) | Morten Juhl-Johansen Zölde-Fejér (mjjzf@syntaktisk. | 68%
|
||||
 | Deutsch | [de_DE](https://github.com/laurent22/joplin/blob/master/CliClient/locales/de_DE.po) | Michael Sonntag (ms@editorei.de) | 97%
|
||||
 | Arabic | [ar](https://github.com/laurent22/joplin/blob/master/CliClient/locales/ar.po) | عبد الناصر سعيد (as@althobaity.com) | 91%
|
||||
 | Basque | [eu](https://github.com/laurent22/joplin/blob/master/CliClient/locales/eu.po) | juan.abasolo@ehu.eus | 51%
|
||||
 | Catalan | [ca](https://github.com/laurent22/joplin/blob/master/CliClient/locales/ca.po) | jmontane, 2018 | 73%
|
||||
 | Croatian | [hr_HR](https://github.com/laurent22/joplin/blob/master/CliClient/locales/hr_HR.po) | Hrvoje Mandić (trbuhom@net.hr) | 42%
|
||||
 | Czech | [cs_CZ](https://github.com/laurent22/joplin/blob/master/CliClient/locales/cs_CZ.po) | Lukas Helebrandt (lukas@aiya.cz) | 91%
|
||||
 | Dansk | [da_DK](https://github.com/laurent22/joplin/blob/master/CliClient/locales/da_DK.po) | Morten Juhl-Johansen Zölde-Fejér (mjjzf@syntaktisk. | 66%
|
||||
 | Deutsch | [de_DE](https://github.com/laurent22/joplin/blob/master/CliClient/locales/de_DE.po) | Michael Sonntag (ms@editorei.de) | 98%
|
||||
 | English (UK) | [en_GB](https://github.com/laurent22/joplin/blob/master/CliClient/locales/en_GB.po) | | 100%
|
||||
 | English (US) | [en_US](https://github.com/laurent22/joplin/blob/master/CliClient/locales/en_US.po) | | 100%
|
||||
 | Español | [es_ES](https://github.com/laurent22/joplin/blob/master/CliClient/locales/es_ES.po) | Andros Fenollosa (andros@fenollosa.email) | 93%
|
||||
 | Français | [fr_FR](https://github.com/laurent22/joplin/blob/master/CliClient/locales/fr_FR.po) | Laurent Cozic | 97%
|
||||
 | Galician | [gl_ES](https://github.com/laurent22/joplin/blob/master/CliClient/locales/gl_ES.po) | Marcos Lans (marcoslansgarza@gmail.com) | 67%
|
||||
 | Italiano | [it_IT](https://github.com/laurent22/joplin/blob/master/CliClient/locales/it_IT.po) | | 83%
|
||||
 | Nederlands | [nl_BE](https://github.com/laurent22/joplin/blob/master/CliClient/locales/nl_BE.po) | | 53%
|
||||
 | Nederlands | [nl_NL](https://github.com/laurent22/joplin/blob/master/CliClient/locales/nl_NL.po) | Heimen Stoffels (vistausss@outlook.com) | 81%
|
||||
 | Norwegian | [nb_NO](https://github.com/laurent22/joplin/blob/master/CliClient/locales/nb_NO.po) | Mats Estensen (code@mxe.no) | 93%
|
||||
 | Português (Brasil) | [pt_BR](https://github.com/laurent22/joplin/blob/master/CliClient/locales/pt_BR.po) | Renato Nunes Bastos (rnbastos@gmail.com) | 87%
|
||||
 | Română | [ro](https://github.com/laurent22/joplin/blob/master/CliClient/locales/ro.po) | | 53%
|
||||
 | Slovenian | [sl_SI](https://github.com/laurent22/joplin/blob/master/CliClient/locales/sl_SI.po) | | 66%
|
||||
 | Svenska | [sv](https://github.com/laurent22/joplin/blob/master/CliClient/locales/sv.po) | Jonatan Nyberg (jonatan@autistici.org) | 90%
|
||||
 | Türkçe | [tr_TR](https://github.com/laurent22/joplin/blob/master/CliClient/locales/tr_TR.po) | Zorbey Doğangüneş (zorbeyd@gmail.com) | 87%
|
||||
 | Русский | [ru_RU](https://github.com/laurent22/joplin/blob/master/CliClient/locales/ru_RU.po) | Artyom Karlov (artyom.karlov@gmail.com) | 93%
|
||||
 | 中文 (简体) | [zh_CN](https://github.com/laurent22/joplin/blob/master/CliClient/locales/zh_CN.po) | | 93%
|
||||
 | 中文 (繁體) | [zh_TW](https://github.com/laurent22/joplin/blob/master/CliClient/locales/zh_TW.po) | penguinsam (samliu@gmail.com) | 81%
|
||||
 | 日本語 | [ja_JP](https://github.com/laurent22/joplin/blob/master/CliClient/locales/ja_JP.po) | AWASHIRO Ikuya (ikunya@gmail.com) | 87%
|
||||
 | 한국말 | [ko](https://github.com/laurent22/joplin/blob/master/CliClient/locales/ko.po) | | 89%
|
||||
 | Español | [es_ES](https://github.com/laurent22/joplin/blob/master/CliClient/locales/es_ES.po) | Andros Fenollosa (andros@fenollosa.email) | 98%
|
||||
 | Français | [fr_FR](https://github.com/laurent22/joplin/blob/master/CliClient/locales/fr_FR.po) | Laurent Cozic | 100%
|
||||
 | Galician | [gl_ES](https://github.com/laurent22/joplin/blob/master/CliClient/locales/gl_ES.po) | Marcos Lans (marcoslansgarza@gmail.com) | 65%
|
||||
 | Italiano | [it_IT](https://github.com/laurent22/joplin/blob/master/CliClient/locales/it_IT.po) | | 92%
|
||||
 | Nederlands | [nl_BE](https://github.com/laurent22/joplin/blob/master/CliClient/locales/nl_BE.po) | | 52%
|
||||
 | Nederlands | [nl_NL](https://github.com/laurent22/joplin/blob/master/CliClient/locales/nl_NL.po) | Heimen Stoffels (vistausss@outlook.com) | 79%
|
||||
 | Norwegian | [nb_NO](https://github.com/laurent22/joplin/blob/master/CliClient/locales/nb_NO.po) | Mats Estensen (code@mxe.no) | 91%
|
||||
 | Persian | [fa](https://github.com/laurent22/joplin/blob/master/CliClient/locales/fa.po) | Mehrad Mahmoudian (mehrad@mahmoudian.me) | 49%
|
||||
 | Polski | [pl_PL](https://github.com/laurent22/joplin/blob/master/CliClient/locales/pl_PL.po) | | 98%
|
||||
 | Português (Brasil) | [pt_BR](https://github.com/laurent22/joplin/blob/master/CliClient/locales/pt_BR.po) | Renato Nunes Bastos (rnbastos@gmail.com) | 97%
|
||||
 | Română | [ro](https://github.com/laurent22/joplin/blob/master/CliClient/locales/ro.po) | | 51%
|
||||
 | Slovenian | [sl_SI](https://github.com/laurent22/joplin/blob/master/CliClient/locales/sl_SI.po) | | 64%
|
||||
 | Svenska | [sv](https://github.com/laurent22/joplin/blob/master/CliClient/locales/sv.po) | Jonatan Nyberg (jonatan@autistici.org) | 88%
|
||||
 | Türkçe | [tr_TR](https://github.com/laurent22/joplin/blob/master/CliClient/locales/tr_TR.po) | Zorbey Doğangüneş (zorbeyd@gmail.com) | 85%
|
||||
 | Русский | [ru_RU](https://github.com/laurent22/joplin/blob/master/CliClient/locales/ru_RU.po) | Artyom Karlov (artyom.karlov@gmail.com) | 91%
|
||||
 | 中文 (简体) | [zh_CN](https://github.com/laurent22/joplin/blob/master/CliClient/locales/zh_CN.po) | | 96%
|
||||
 | 中文 (繁體) | [zh_TW](https://github.com/laurent22/joplin/blob/master/CliClient/locales/zh_TW.po) | penguinsam (samliu@gmail.com) | 79%
|
||||
 | 日本語 | [ja_JP](https://github.com/laurent22/joplin/blob/master/CliClient/locales/ja_JP.po) | AWASHIRO Ikuya (ikunya@gmail.com) | 85%
|
||||
 | 한국말 | [ko](https://github.com/laurent22/joplin/blob/master/CliClient/locales/ko.po) | | 87%
|
||||
<!-- LOCALE-TABLE-AUTO-GENERATED -->
|
||||
|
||||
# Known bugs
|
||||
|
@@ -90,8 +90,8 @@ android {
|
||||
applicationId "net.cozic.joplin"
|
||||
minSdkVersion rootProject.ext.minSdkVersion
|
||||
targetSdkVersion rootProject.ext.targetSdkVersion
|
||||
versionCode 2097488
|
||||
versionName "1.0.252"
|
||||
versionCode 2097497
|
||||
versionName "1.0.261"
|
||||
ndk {
|
||||
abiFilters "armeabi-v7a", "x86"
|
||||
}
|
||||
|
@@ -39,6 +39,7 @@ const RevisionService = require('lib/services/RevisionService');
|
||||
const DecryptionWorker = require('lib/services/DecryptionWorker');
|
||||
const BaseService = require('lib/services/BaseService');
|
||||
const SearchEngine = require('lib/services/SearchEngine');
|
||||
const KvStore = require('lib/services/KvStore');
|
||||
const MigrationService = require('lib/services/MigrationService');
|
||||
|
||||
SyncTargetRegistry.addClass(SyncTargetFilesystem);
|
||||
@@ -59,6 +60,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 +282,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 +330,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 +448,7 @@ class BaseApplication {
|
||||
}
|
||||
|
||||
if (this.hasGui() && action.type === 'SYNC_CREATED_RESOURCE') {
|
||||
ResourceFetcher.instance().queueDownload(action.id);
|
||||
ResourceFetcher.instance().autoAddResources();
|
||||
}
|
||||
|
||||
if (refreshFolders) {
|
||||
@@ -561,6 +583,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_;
|
||||
|
||||
@@ -594,15 +618,20 @@ class BaseApplication {
|
||||
|
||||
BaseItem.revisionService_ = RevisionService.instance();
|
||||
|
||||
KvStore.instance().setDb(reg.db());
|
||||
|
||||
BaseService.logger_ = this.logger_;
|
||||
EncryptionService.instance().setLogger(this.logger_);
|
||||
BaseItem.encryptionService_ = EncryptionService.instance();
|
||||
DecryptionWorker.instance().setLogger(this.logger_);
|
||||
DecryptionWorker.instance().setEncryptionService(EncryptionService.instance());
|
||||
DecryptionWorker.instance().setKvStore(KvStore.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());
|
||||
|
@@ -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);
|
||||
|
@@ -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;
|
||||
|
@@ -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) {
|
||||
|
@@ -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)) {
|
||||
|
@@ -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)) {
|
||||
|
@@ -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;
|
||||
};
|
||||
}
|
||||
|
@@ -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;
|
@@ -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;
|
||||
}
|
||||
});
|
||||
|
||||
|
126
ReactNativeClient/lib/TaskQueue.js
Normal file
126
ReactNativeClient/lib/TaskQueue.js
Normal file
@@ -0,0 +1,126 @@
|
||||
const { time } = require('lib/time-utils.js');
|
||||
const JoplinError = require('lib/JoplinError');
|
||||
const Setting = require('lib/models/Setting');
|
||||
const { Logger } = require('lib/logger.js');
|
||||
|
||||
class TaskQueue {
|
||||
|
||||
constructor(name) {
|
||||
this.waitingTasks_ = [];
|
||||
this.processingTasks_ = {};
|
||||
this.processingQueue_ = false;
|
||||
this.stopping_ = false;
|
||||
this.results_ = {};
|
||||
this.name_ = name;
|
||||
this.logger_ = new Logger();
|
||||
}
|
||||
|
||||
concurrency() {
|
||||
return Setting.value('sync.maxConcurrentConnections');
|
||||
}
|
||||
|
||||
push(id, callback) {
|
||||
if (this.stopping_) throw new Error('Cannot push task when queue is stopping');
|
||||
|
||||
this.waitingTasks_.push({
|
||||
id: id,
|
||||
callback: callback,
|
||||
});
|
||||
this.processQueue_();
|
||||
}
|
||||
|
||||
processQueue_() {
|
||||
if (this.processingQueue_ || this.stopping_) return;
|
||||
|
||||
this.processingQueue_ = true;
|
||||
|
||||
const completeTask = (task, result, error) => {
|
||||
delete this.processingTasks_[task.id];
|
||||
|
||||
const r = {
|
||||
id: task.id,
|
||||
result: result,
|
||||
};
|
||||
|
||||
if (error) r.error = error;
|
||||
|
||||
this.results_[task.id] = r;
|
||||
|
||||
this.processQueue_();
|
||||
}
|
||||
|
||||
while (this.waitingTasks_.length > 0 && Object.keys(this.processingTasks_).length < this.concurrency()) {
|
||||
if (this.stopping_) break;
|
||||
|
||||
const task = this.waitingTasks_.splice(0, 1)[0];
|
||||
this.processingTasks_[task.id] = task;
|
||||
|
||||
task.callback().then(result => {
|
||||
completeTask(task, result, null);
|
||||
}).catch(error => {
|
||||
if (!error) error = new Error('Unknown error');
|
||||
completeTask(task, null, error);
|
||||
});
|
||||
}
|
||||
|
||||
this.processingQueue_ = false;
|
||||
}
|
||||
|
||||
isWaiting(taskId) {
|
||||
return this.waitingTasks_.find(task => task.id === taskId)
|
||||
}
|
||||
|
||||
isProcessing(taskId) {
|
||||
return taskId in this.processingTasks_;
|
||||
}
|
||||
|
||||
isDone(taskId) {
|
||||
return taskId in this.results_;
|
||||
}
|
||||
|
||||
async waitForResult(taskId) {
|
||||
if (!this.isWaiting(taskId) && !this.isProcessing(taskId) && !this.isDone(taskId)) throw new Error('No such task: ' + taskId);
|
||||
|
||||
while (true) {
|
||||
// if (this.stopping_) {
|
||||
// return {
|
||||
// id: taskId,
|
||||
// error: new JoplinError('Queue has been destroyed', 'destroyedQueue'),
|
||||
// };
|
||||
// }
|
||||
|
||||
const task = this.results_[taskId];
|
||||
if (task) return task;
|
||||
await time.sleep(0.1);
|
||||
}
|
||||
}
|
||||
|
||||
async stop() {
|
||||
this.stopping_ = true;
|
||||
|
||||
this.logger_.info('TaskQueue.stop: ' + this.name_ + ': waiting for tasks to complete: ' + Object.keys(this.processingTasks_).length);
|
||||
|
||||
// In general it's not a big issue if some tasks are still running because
|
||||
// it won't call anything unexpected in caller code, since the caller has
|
||||
// to explicitely retrieve the results
|
||||
const startTime = Date.now();
|
||||
while (Object.keys(this.processingTasks_).length) {
|
||||
await time.sleep(0.1);
|
||||
if (Date.now() - startTime >= 30000) {
|
||||
this.logger_.warn('TaskQueue.stop: ' + this.name_ + ': timed out waiting for task to complete');
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
this.logger_.info('TaskQueue.stop: ' + this.name_ + ': Done, waited for ' + (Date.now() - startTime));
|
||||
}
|
||||
|
||||
isStopping() {
|
||||
return this.stopping_;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
TaskQueue.CONCURRENCY = 5;
|
||||
|
||||
module.exports = TaskQueue;
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user