You've already forked joplin
mirror of
https://github.com/laurent22/joplin.git
synced 2025-12-08 23:07:32 +02:00
Compare commits
461 Commits
cli-v1.0.1
...
android-v1
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
075e55c077 | ||
|
|
dc818e8a0c | ||
|
|
caa58dd913 | ||
|
|
c84c3cd026 | ||
|
|
bda5ac9fb5 | ||
|
|
f928f645e5 | ||
|
|
53d7e906d4 | ||
|
|
e670b5d03f | ||
|
|
2a7d555859 | ||
|
|
e6675f500c | ||
|
|
c3f20d3ebc | ||
|
|
ff257060d1 | ||
|
|
68cde202a4 | ||
|
|
1a7a87e170 | ||
|
|
2990642923 | ||
|
|
0818de036e | ||
|
|
122bc29035 | ||
|
|
861cf8a1b2 | ||
|
|
7d6959e9e4 | ||
|
|
85091052e7 | ||
|
|
f46ad5bfda | ||
|
|
29f7937fc2 | ||
|
|
7fae9fda10 | ||
|
|
a37961dccc | ||
|
|
55155646aa | ||
|
|
7bffe86439 | ||
|
|
86136e0c6c | ||
|
|
21ae447d9c | ||
|
|
ad211b4b4e | ||
|
|
d6218f35fe | ||
|
|
7af0dcd19a | ||
|
|
e1a52c5606 | ||
|
|
468c345527 | ||
|
|
041bdc08a2 | ||
|
|
7535f1a8c6 | ||
|
|
0b24433db3 | ||
|
|
f7de0c5ffd | ||
|
|
62c48b9a46 | ||
|
|
3fafda9684 | ||
|
|
2cf1cda128 | ||
|
|
fedee9499b | ||
|
|
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 | ||
|
|
9de7c15e93 | ||
|
|
61736546b4 | ||
|
|
82b6dd23a7 | ||
|
|
64427f0160 | ||
|
|
cbf47cb9ee | ||
|
|
dba3e4202d | ||
|
|
173cd6de4d | ||
|
|
3d333bd8f2 | ||
|
|
a82f8c7dd0 | ||
|
|
cde079e44e | ||
|
|
f8d20b61ea | ||
|
|
d279435502 | ||
|
|
eb2065128e | ||
|
|
10e81aa476 | ||
|
|
3e808f05fd | ||
|
|
e57bfad9b1 | ||
|
|
5f344f07d4 | ||
|
|
e1b7b64e1b | ||
|
|
ed3970be81 | ||
|
|
c27861d40f | ||
|
|
565dfba8c9 | ||
|
|
553a26eb63 | ||
|
|
9c85bc2cd1 | ||
|
|
e96bc9c48a | ||
|
|
0d036d8183 | ||
|
|
e5f2a7f2f5 | ||
|
|
016ce3dd61 | ||
|
|
afb375955e | ||
|
|
b702b0b40c | ||
|
|
91ecab51c5 | ||
|
|
7628506926 | ||
|
|
4e7f7c0c9c | ||
|
|
863f5bcf18 | ||
|
|
dccd489fcc | ||
|
|
333c3f6369 | ||
|
|
808413d0bf | ||
|
|
440be3d920 | ||
|
|
9b27a4f601 | ||
|
|
6e36ca32b4 | ||
|
|
85a9c303f2 | ||
|
|
7e9972d99f | ||
|
|
771975cd35 | ||
|
|
356f8e580b | ||
|
|
68268cb35d | ||
|
|
8e58ed12af | ||
|
|
beb428b246 | ||
|
|
4d81caff0b | ||
|
|
78372c9bac | ||
|
|
a4db1bc671 | ||
|
|
8ea1c373ed | ||
|
|
8ef27dfcdc | ||
|
|
23e43c7bc1 | ||
|
|
edb8f4c79f | ||
|
|
e115fa4bb3 | ||
|
|
52a2daddbf | ||
|
|
c400142996 | ||
|
|
219171a18c | ||
|
|
d7d573d9dd | ||
|
|
c4b17f8919 | ||
|
|
da2f4b96c7 | ||
|
|
08af9de190 | ||
|
|
9e2982992a | ||
|
|
c03ac5c5f1 | ||
|
|
5934f2f08e | ||
|
|
f136f40fdc | ||
|
|
d213e4ab57 | ||
|
|
782aae4ddf | ||
|
|
4f47bd7bcd | ||
|
|
4f76946140 | ||
|
|
aa60923cbd | ||
|
|
7670ce32b1 | ||
|
|
0b98632336 | ||
|
|
49c998de83 | ||
|
|
da69d6b2c9 | ||
|
|
a757aefce0 | ||
|
|
b2129cb8c4 | ||
|
|
27f14c175f | ||
|
|
aad49c520b | ||
|
|
af794a16d6 | ||
|
|
ca7266cd69 | ||
|
|
fb758afc81 | ||
|
|
b806f0da49 | ||
|
|
4e3b1f3e13 | ||
|
|
475467c41c | ||
|
|
28e5039873 | ||
|
|
1efc6e6151 | ||
|
|
e280a02643 | ||
|
|
788dc42684 | ||
|
|
01f2759a62 | ||
|
|
9419e3af9c | ||
|
|
6d220005cc | ||
|
|
6d68e61bbd | ||
|
|
29582623b0 | ||
|
|
4571e7853a | ||
|
|
d6e59c5238 | ||
|
|
6335cbedb8 | ||
|
|
f3344ce05d | ||
|
|
155d38d24a | ||
|
|
412f6d8316 | ||
|
|
d0f3ed80e0 | ||
|
|
b86f3b74bd | ||
|
|
60054d1d8b | ||
|
|
c40c6428d7 | ||
|
|
e708ecccee | ||
|
|
04f991d3bf | ||
|
|
d5d7368ba0 | ||
|
|
abff929d4e | ||
|
|
49edc82594 | ||
|
|
7dd7d0ec17 | ||
|
|
61aaf64f95 | ||
|
|
da35785951 | ||
|
|
e394034678 | ||
|
|
edf002ab32 | ||
|
|
50f2076981 | ||
|
|
a9ae78bcde | ||
|
|
0d7f9a2ab3 | ||
|
|
a5ee120281 | ||
|
|
12ebf44e22 | ||
|
|
220f5d0967 | ||
|
|
4ef05272c4 | ||
|
|
c3262aa5f8 | ||
|
|
42119c8f42 | ||
|
|
27cce03968 | ||
|
|
776aba1e49 | ||
|
|
9356841cfc | ||
|
|
7fc233e808 | ||
|
|
7b2eac3abd | ||
|
|
93323deea5 | ||
|
|
e8fa399e9e | ||
|
|
a974eb5d9f | ||
|
|
6a3f04274d | ||
|
|
f8e1395087 | ||
|
|
82b5af51e5 | ||
|
|
cf40c14a86 | ||
|
|
be2b2b7836 | ||
|
|
0cebae8032 | ||
|
|
6ebc77cbba | ||
|
|
542a5e88b7 | ||
|
|
72b36522e8 | ||
|
|
252d937405 | ||
|
|
a73b0309b9 | ||
|
|
c22283e799 | ||
|
|
1e51ab4a59 | ||
|
|
0c2f2667d3 | ||
|
|
496c9ddb91 | ||
|
|
5ad0b2eed9 | ||
|
|
577d62e783 | ||
|
|
dcb73c9916 | ||
|
|
6b2910c3c7 | ||
|
|
db04906416 | ||
|
|
54fceeb07d | ||
|
|
fa32678645 | ||
|
|
ee1df1a396 | ||
|
|
729be8767c | ||
|
|
8471f0d86d | ||
|
|
390b818d71 | ||
|
|
1a1c190ea3 | ||
|
|
40d82b80f1 | ||
|
|
7647ecbbc7 | ||
|
|
b2a5cf9dd0 | ||
|
|
cbf3ab2ec2 | ||
|
|
c4a37ff0ba | ||
|
|
bdc7ea4346 | ||
|
|
d4c4b9b10a | ||
|
|
4b9105edff | ||
|
|
c0980a5a9e | ||
|
|
272055fc1d | ||
|
|
cbb1851b12 | ||
|
|
45d758d52e | ||
|
|
49936ef095 | ||
|
|
986d4be601 | ||
|
|
b6ad9719ad | ||
|
|
96a1546da1 | ||
|
|
6884dd2b9e | ||
|
|
9c027e59c4 | ||
|
|
9e16ff3644 | ||
|
|
4000cb5d1c | ||
|
|
1030b412ff | ||
|
|
54f0fbcf6b | ||
|
|
1602182085 | ||
|
|
20bb1238c5 | ||
|
|
68fbe8125e | ||
|
|
23e6e6e69d | ||
|
|
ade5af2559 | ||
|
|
0a993dc012 | ||
|
|
4baa46507f | ||
|
|
0d8878abd3 | ||
|
|
f962084591 | ||
|
|
921b45286b | ||
|
|
301bfed05e | ||
|
|
62e7d6fa86 | ||
|
|
7e34cd4452 | ||
|
|
b35cb9a7ab | ||
|
|
18b836525c | ||
|
|
e34e49b88d | ||
|
|
5bf879c2d9 | ||
|
|
61d6309c0e | ||
|
|
17c9c0f9ef | ||
|
|
9bd62fd3d4 | ||
|
|
de73d4baa7 | ||
|
|
379ff5163b | ||
|
|
d9538ccb08 | ||
|
|
9289dbdf77 | ||
|
|
5719ae495a | ||
|
|
a89e3b7924 | ||
|
|
e576d09712 | ||
|
|
43600a7824 | ||
|
|
921f01d9dc | ||
|
|
dec5668582 | ||
|
|
e30bc12354 | ||
|
|
fca4fa666d | ||
|
|
59478160c8 | ||
|
|
8110fe89ef | ||
|
|
c7ed1b5eae | ||
|
|
25951e7097 | ||
|
|
687b9d1bef | ||
|
|
630e77b9eb | ||
|
|
68ff2e17b3 | ||
|
|
945d83608a | ||
|
|
833d473268 | ||
|
|
2256b0c5ec | ||
|
|
677aa7d59b | ||
|
|
4363005e92 | ||
|
|
2e3ef618db | ||
|
|
1adbbd14c6 | ||
|
|
4dfd7db729 | ||
|
|
e70562a102 | ||
|
|
a0e5947ba4 | ||
|
|
e841ea8a91 | ||
|
|
770a435029 | ||
|
|
49b56e84a7 | ||
|
|
ff1a6fdbbd | ||
|
|
2168090b96 | ||
|
|
33f7b680bc | ||
|
|
0957298cb8 | ||
|
|
08f2f982cf | ||
|
|
3376fbfa55 | ||
|
|
4a31e5fe73 | ||
|
|
baacec5ba6 | ||
|
|
95188b71b8 | ||
|
|
cf57be6e98 | ||
|
|
b691092d7a | ||
|
|
03e60fc028 | ||
|
|
2e25ec318f | ||
|
|
7236e5e9ae | ||
|
|
6f7dd51a98 | ||
|
|
db1dab9293 | ||
|
|
06f1b9e4d7 | ||
|
|
8f958ac931 | ||
|
|
eae63bfb79 | ||
|
|
8adfc81c30 | ||
|
|
0c516443e3 | ||
|
|
ad9bc0bf63 | ||
|
|
b0596670a6 | ||
|
|
998011ff43 | ||
|
|
081e1c5b62 | ||
|
|
edfd2c4d54 | ||
|
|
9d65a3a34c | ||
|
|
1a86cbdb9d | ||
|
|
849cb4456c | ||
|
|
1736717f2e | ||
|
|
50b75e1e63 | ||
|
|
179005dd6c | ||
|
|
6b3fe6b2cb | ||
|
|
c34872bb26 | ||
|
|
4845a21287 | ||
|
|
ddd513fe09 | ||
|
|
4ce118d459 | ||
|
|
99da184ba5 | ||
|
|
e2e4e62c4f | ||
|
|
229dd7a6dd | ||
|
|
1e0c4cc5cd | ||
|
|
b40ccc7a15 | ||
|
|
7d6b7e588c | ||
|
|
22cacd2c5b | ||
|
|
6a22e7836a | ||
|
|
32a67b9b33 | ||
|
|
b5dff09c28 | ||
|
|
c56d8153e8 | ||
|
|
eb5950d126 | ||
|
|
4241436e40 | ||
|
|
e93af7aed5 | ||
|
|
d2416f850e | ||
|
|
7af22eb006 | ||
|
|
3f1be5e7e7 | ||
|
|
a4e649c82d | ||
|
|
cde1a8f0a8 | ||
|
|
cda6eb7c2f | ||
|
|
3c3e6aeca0 | ||
|
|
99156311db | ||
|
|
91b2e5e703 | ||
|
|
573fd816d0 | ||
|
|
e6aa002758 | ||
|
|
361d46ac5d | ||
|
|
9bc7c2fd65 | ||
|
|
ce49f5f8b7 | ||
|
|
81e4cd319d | ||
|
|
71f905535f | ||
|
|
d3bff0a9e3 | ||
|
|
88e6315d09 | ||
|
|
3d933c5244 | ||
|
|
73af19314d | ||
|
|
1d71712c8a | ||
|
|
1333c35389 | ||
|
|
e0f5f47a15 | ||
|
|
34323042d5 | ||
|
|
aa86fa9986 | ||
|
|
d2d659d5a9 | ||
|
|
1595248b52 | ||
|
|
fc94c616b5 | ||
|
|
f6f0bcf1c3 | ||
|
|
6eeeda5dab | ||
|
|
58993d2ead | ||
|
|
7c0b608769 | ||
|
|
259be84a3e | ||
|
|
57c880cf85 | ||
|
|
0469fe76d7 | ||
|
|
a3e74320fa | ||
|
|
4e0f4397b2 | ||
|
|
b26aab3863 | ||
|
|
75ec97fe61 | ||
|
|
9a356453fc | ||
|
|
f0020b3393 |
4
.github/FUNDING.yml
vendored
Normal file
4
.github/FUNDING.yml
vendored
Normal file
@@ -0,0 +1,4 @@
|
||||
# These are supported funding model platforms
|
||||
|
||||
patreon: joplin
|
||||
custom: https://joplinapp.org/donate/
|
||||
1
.gitignore
vendored
1
.gitignore
vendored
@@ -39,6 +39,7 @@ node_modules
|
||||
Tools/github_oauth_token.txt
|
||||
_releases
|
||||
ReactNativeClient/lib/csstojs/
|
||||
ReactNativeClient/lib/rnInjectedJs/
|
||||
ElectronClient/app/gui/note-viewer/fonts/
|
||||
ElectronClient/app/gui/note-viewer/lib.js
|
||||
Tools/commit_hook.txt
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 335 KiB After Width: | Height: | Size: 336 KiB |
Binary file not shown.
Binary file not shown.
|
Before Width: | Height: | Size: 254 KiB After Width: | Height: | Size: 244 KiB |
Binary file not shown.
BIN
Assets/Screenshots/iOS/Screenshot_iPhone_Portrait_X.png
Normal file
BIN
Assets/Screenshots/iOS/Screenshot_iPhone_Portrait_X.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 249 KiB |
BIN
Assets/Screenshots/iOS/Screenshot_iPhone_Portrait_X.psd
Normal file
BIN
Assets/Screenshots/iOS/Screenshot_iPhone_Portrait_X.psd
Normal file
Binary file not shown.
5
BUILD.md
5
BUILD.md
@@ -1,7 +1,8 @@
|
||||
[](https://travis-ci.org/laurent22/joplin) [](https://ci.appveyor.com/project/laurent22/joplin)
|
||||
|
||||
# General information
|
||||
|
||||
- All the applications share the same library, which, for historical reasons, is in ReactNativeClient/lib. This library is copied to the relevant directories when building each app.
|
||||
- The translations are built by running CliClient/build-translation.sh. You normally don't need to run this if you haven't updated the translation since the compiled files are on the repository.
|
||||
|
||||
## macOS dependencies
|
||||
|
||||
@@ -58,6 +59,8 @@ If node-gyp does not works (MSBUILD: error MSB3428: Could not load the Visual C+
|
||||
|
||||
If `yarn dist` fails, it may need administrative rights.
|
||||
|
||||
If you get an `error MSB8020: The build tools for v140 cannot be found.` try to run with a different toolset version, eg `npm install --toolset=v141` (See [here](https://github.com/mapbox/node-sqlite3/issues/1124) for more info).
|
||||
|
||||
The [building\_win32\_tips on this page](./readme/building_win32_tips.md) might be helpful.
|
||||
|
||||
# Building the Mobile application
|
||||
|
||||
@@ -1,32 +1,42 @@
|
||||
**IMPORTANT:** At the moment pull requests for new features are no longer being accepted. More info there: https://github.com/laurent22/joplin/issues/1112
|
||||
|
||||
* * *
|
||||
|
||||
# User support
|
||||
|
||||
For general discussion about Joplin, user support, software development questions, and to discuss new features, please go to the [Joplin Forum](https://discourse.joplin.cozic.net/). It is possible to login with your GitHub account.
|
||||
The [Joplin Forum](https://discourse.joplinapp.org/) is the community driven place for user support, general discussion about Joplin, problems with installation, new features and software development questions. It is possible to login with your GitHub account. Don't use the issue tracker for support questions.
|
||||
|
||||
# Reporting a bug
|
||||
|
||||
Please check first that it [has not already been reported](https://github.com/laurent22/joplin/issues?utf8=%E2%9C%93&q=is%3Aissue). Also consider [enabling debug mode](https://github.com/laurent22/joplin/blob/master/readme/debugging.md) before reporting the issue so that you can provide as much details as possible to help fix it.
|
||||
File bugs in the [Github Issue Tracker](https://github.com/laurent22/joplin/issues?utf8=%E2%9C%93&q=is%3Aissue). Please follow these guidelines:
|
||||
|
||||
If possible, **please provide a screenshot**. A screenshot showing the problem is often more useful than a paragraph describing it as it can make it immediately clear what the issue is.
|
||||
- Search existing issues first, make sure yours hasn't already been reported.
|
||||
- Consider [enabling debug mode](https://joplinapp.org/debugging/) so that you can provide as much details as possible when reporting the issue.
|
||||
- Stay on topic, but describe the issue in detail so that others can reproduce it.
|
||||
- **Provide a screenshot** if possible. A screenshot showing the problem is often more useful than a paragraph describing it.
|
||||
- For web clipper bugs, **please provide the URL causing the issue**. Sometimes the clipper works in one page but not in another so it is important to know what URL has a problem.
|
||||
|
||||
# Feature requests
|
||||
|
||||
Again, please check that it has not already been requested. If it has, simply **up-vote the issue** - the ones with the most up-votes are likely to be implemented. "+1" comments are not tracked.
|
||||
Please check that your request has not already been posted in the [Github Issue Tracker](https://github.com/laurent22/joplin/issues?utf8=%E2%9C%93&q=is%3Aissue). If it has, **up-voting the issue** increases the chances it'll be noticed and implemented in the future. "+1" comments are not tracked.
|
||||
|
||||
# Creating a pull request
|
||||
As a general rule, suggestions to _improve Joplin_ should be posted first in the [Joplin Forum](https://discourse.joplinapp.org/) for discussion.
|
||||
|
||||
- If you want to add a new feature, consider asking about it before implementing it or checking existing discussions to make sure it is within the scope of the project. That scope, due to limited resources, might be narrower than you think. As a rule of thumb **if your change is likely to involve more than 50 lines of code, you should discuss it in the forum**, just so that you don't waste your time implementing something that might not be accepted.
|
||||
Avoid listing multiple requests in one report in the [Github Issue Tracker](https://github.com/laurent22/joplin/issues?utf8=%E2%9C%93&q=is%3Aissue). One issue per request makes it easier to track and discuss it.
|
||||
|
||||
- Bug fixes have a very high change of being accepted.
|
||||
# Contribute to the project
|
||||
|
||||
- A pull request that is relevant to the current roadmap has a very high change of being accepted.
|
||||
## 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):
|
||||
|
||||
|
||||
@@ -23,6 +23,7 @@ const fs = require('fs-extra');
|
||||
const { cliUtils } = require('./cli-utils.js');
|
||||
const Cache = require('lib/Cache');
|
||||
const WelcomeUtils = require('lib/WelcomeUtils');
|
||||
const RevisionService = require('lib/services/RevisionService');
|
||||
|
||||
class Application extends BaseApplication {
|
||||
|
||||
@@ -377,8 +378,6 @@ class Application extends BaseApplication {
|
||||
return this.stdout(object);
|
||||
});
|
||||
|
||||
await WelcomeUtils.install(this.dispatch.bind(this));
|
||||
|
||||
// If we have some arguments left at this point, it's a command
|
||||
// so execute it.
|
||||
if (argv.length) {
|
||||
@@ -422,6 +421,8 @@ class Application extends BaseApplication {
|
||||
const tags = await Tag.allWithNotes();
|
||||
|
||||
ResourceService.runInBackground();
|
||||
|
||||
RevisionService.instance().runInBackground();
|
||||
|
||||
this.dispatch({
|
||||
type: 'TAG_UPDATE_ALL',
|
||||
|
||||
@@ -102,7 +102,7 @@ function getFooter() {
|
||||
|
||||
output.push('WEBSITE');
|
||||
output.push('');
|
||||
output.push(INDENT + 'https://joplin.cozic.net');
|
||||
output.push(INDENT + 'https://joplinapp.org');
|
||||
|
||||
output.push('');
|
||||
|
||||
|
||||
@@ -113,6 +113,11 @@ class Command extends BaseCommand {
|
||||
lines.push('\tcurl http://localhost:41184/tags?fields=id');
|
||||
lines.push('');
|
||||
|
||||
lines.push('# Error handling');
|
||||
lines.push('');
|
||||
lines.push('In case of an error, an HTTP status code >= 400 will be returned along with a JSON object that provides more info about the error. The JSON object is in the format `{ "error": "description of error" }`.');
|
||||
lines.push('');
|
||||
|
||||
lines.push('# About the property types');
|
||||
lines.push('');
|
||||
lines.push('* Text is UTF-8.');
|
||||
@@ -125,6 +130,11 @@ class Command extends BaseCommand {
|
||||
lines.push('Call **GET /ping** to check if the service is available. It should return "JoplinClipperServer" if it works.');
|
||||
lines.push('');
|
||||
|
||||
lines.push('# Searching');
|
||||
lines.push('');
|
||||
lines.push('Call **GET /search?query=YOUR_QUERY** to search for notes. This end-point supports the `field` parameter which is recommended to use so that you only get the data that you need. The query syntax is as described in the main documentation: https://joplinapp.org/#searching');
|
||||
lines.push('');
|
||||
|
||||
for (let i = 0; i < models.length; i++) {
|
||||
const model = models[i];
|
||||
const ModelClass = BaseItem.getClassByItemType(model.type);
|
||||
|
||||
@@ -6,6 +6,10 @@ const DecryptionWorker = require('lib/services/DecryptionWorker');
|
||||
const MasterKey = require('lib/models/MasterKey');
|
||||
const BaseItem = require('lib/models/BaseItem');
|
||||
const Setting = require('lib/models/Setting.js');
|
||||
const { shim } = require('lib/shim');
|
||||
const pathUtils = require('lib/path-utils.js');
|
||||
const imageType = require('image-type');
|
||||
const readChunk = require('read-chunk');
|
||||
|
||||
class Command extends BaseCommand {
|
||||
|
||||
@@ -14,7 +18,7 @@ class Command extends BaseCommand {
|
||||
}
|
||||
|
||||
description() {
|
||||
return _('Manages E2EE configuration. Commands are `enable`, `disable`, `decrypt`, `status` and `target-status`.');
|
||||
return _('Manages E2EE configuration. Commands are `enable`, `disable`, `decrypt`, `status`, `decrypt-file` and `target-status`.');
|
||||
}
|
||||
|
||||
options() {
|
||||
@@ -22,6 +26,7 @@ class Command extends BaseCommand {
|
||||
// This is here mostly for testing - shouldn't be used
|
||||
['-p, --password <password>', 'Use this password as master password (For security reasons, it is not recommended to use this option).'],
|
||||
['-v, --verbose', 'More verbose output for the `target-status` command'],
|
||||
['-o, --output <directory>', 'Output directory'],
|
||||
];
|
||||
}
|
||||
|
||||
@@ -30,6 +35,18 @@ class Command extends BaseCommand {
|
||||
|
||||
const options = args.options;
|
||||
|
||||
const askForMasterKey = async (error) => {
|
||||
const masterKeyId = error.masterKeyId;
|
||||
const password = await this.prompt(_('Enter master password:'), { type: 'string', secure: true });
|
||||
if (!password) {
|
||||
this.stdout(_('Operation cancelled'));
|
||||
return false;
|
||||
}
|
||||
Setting.setObjectKey('encryption.passwordCache', masterKeyId, password);
|
||||
await EncryptionService.instance().loadMasterKeysFromSettings();
|
||||
return true;
|
||||
}
|
||||
|
||||
if (args.command === 'enable') {
|
||||
const password = options.password ? options.password.toString() : await this.prompt(_('Enter master password:'), { type: 'string', secure: true });
|
||||
if (!password) {
|
||||
@@ -59,14 +76,8 @@ class Command extends BaseCommand {
|
||||
break;
|
||||
} catch (error) {
|
||||
if (error.code === 'masterKeyNotLoaded') {
|
||||
const masterKeyId = error.masterKeyId;
|
||||
const password = await this.prompt(_('Enter master password:'), { type: 'string', secure: true });
|
||||
if (!password) {
|
||||
this.stdout(_('Operation cancelled'));
|
||||
return;
|
||||
}
|
||||
Setting.setObjectKey('encryption.passwordCache', masterKeyId, password);
|
||||
await EncryptionService.instance().loadMasterKeysFromSettings();
|
||||
const ok = await askForMasterKey(error);
|
||||
if (!ok) return;
|
||||
continue;
|
||||
}
|
||||
|
||||
@@ -85,6 +96,36 @@ class Command extends BaseCommand {
|
||||
return;
|
||||
}
|
||||
|
||||
if (args.command === 'decrypt-file') {
|
||||
while (true) {
|
||||
try {
|
||||
const outputDir = options.output ? options.output : require('os').tmpdir();
|
||||
let outFile = outputDir + '/' + pathUtils.filename(args.path) + '.' + Date.now() + '.bin';
|
||||
await EncryptionService.instance().decryptFile(args.path, outFile);
|
||||
const buffer = await readChunk(outFile, 0, 64);
|
||||
const detectedType = imageType(buffer);
|
||||
|
||||
if (detectedType) {
|
||||
const newOutFile = outFile + '.' + detectedType.ext;
|
||||
await shim.fsDriver().move(outFile, newOutFile);
|
||||
outFile = newOutFile;
|
||||
}
|
||||
|
||||
this.stdout(outFile);
|
||||
break;
|
||||
} catch (error) {
|
||||
if (error.code === 'masterKeyNotLoaded') {
|
||||
const ok = await askForMasterKey(error);
|
||||
if (!ok) return;
|
||||
continue;
|
||||
}
|
||||
|
||||
throw error;
|
||||
}
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
if (args.command === 'target-status') {
|
||||
const fs = require('fs-extra');
|
||||
const pathUtils = require('lib/path-utils.js');
|
||||
|
||||
@@ -37,7 +37,7 @@ class Command extends BaseCommand {
|
||||
const stdoutWidth = app().commandStdoutMaxWidth();
|
||||
|
||||
if (args.command === 'shortcuts' || args.command === 'keymap') {
|
||||
this.stdout(_('For information on how to customise the shortcuts please visit %s', 'https://joplin.cozic.net/terminal/#shortcuts'));
|
||||
this.stdout(_('For information on how to customise the shortcuts please visit %s', 'https://joplinapp.org/terminal/#shortcuts'));
|
||||
this.stdout('');
|
||||
|
||||
if (app().gui().isDummy()) {
|
||||
|
||||
@@ -22,6 +22,7 @@ const Tag = require('lib/models/Tag.js');
|
||||
const NoteTag = require('lib/models/NoteTag.js');
|
||||
const MasterKey = require('lib/models/MasterKey');
|
||||
const Setting = require('lib/models/Setting.js');
|
||||
const Revision = require('lib/models/Revision.js');
|
||||
const { Logger } = require('lib/logger.js');
|
||||
const { FsDriverNode } = require('lib/fs-driver-node.js');
|
||||
const { shimInit } = require('lib/shim-init-node.js');
|
||||
@@ -43,6 +44,7 @@ BaseItem.loadClass('Resource', Resource);
|
||||
BaseItem.loadClass('Tag', Tag);
|
||||
BaseItem.loadClass('NoteTag', NoteTag);
|
||||
BaseItem.loadClass('MasterKey', MasterKey);
|
||||
BaseItem.loadClass('Revision', Revision);
|
||||
|
||||
Setting.setConstant('appId', 'net.cozic.joplin-cli');
|
||||
Setting.setConstant('appType', 'cli');
|
||||
|
||||
1991
CliClient/locales/ar.po
Normal file
1991
CliClient/locales/ar.po
Normal file
File diff suppressed because it is too large
Load Diff
@@ -125,9 +125,10 @@ msgstr "Marca un llistat de tasques pendents com a fet."
|
||||
msgid "Note is not a to-do: \"%s\""
|
||||
msgstr "La nota no és un llistat de tasques pendents: «%s»"
|
||||
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
"Manages E2EE configuration. Commands are `enable`, `disable`, `decrypt`, "
|
||||
"`status` and `target-status`."
|
||||
"`status`, `decrypt-file` and `target-status`."
|
||||
msgstr ""
|
||||
"Gestiona la configuració E2EE. Les ordres són «enable», «disable», "
|
||||
"«decrypt», «status» i «target-status»"
|
||||
@@ -610,8 +611,8 @@ msgstr "S'està important des de «%s» com a format «%s». Espereu..."
|
||||
msgid "PDF File"
|
||||
msgstr "Fitxer PDF"
|
||||
|
||||
msgid "File"
|
||||
msgstr "Fitxer"
|
||||
msgid "Synchronisation status"
|
||||
msgstr "Estat de la sincronització"
|
||||
|
||||
msgid "New note"
|
||||
msgstr "Nota nova"
|
||||
@@ -622,14 +623,43 @@ msgstr "Llistat de tasques pendents nou"
|
||||
msgid "New notebook"
|
||||
msgstr "Bloc de notes nou"
|
||||
|
||||
msgid "Print"
|
||||
msgstr "Imprimeix"
|
||||
|
||||
msgid "General Options"
|
||||
msgstr "Opcions generals"
|
||||
|
||||
msgid "Encryption options"
|
||||
msgstr "Opcions del xifratge"
|
||||
|
||||
msgid "Web clipper options"
|
||||
msgstr "Opcions del desa-retalls de webs"
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s %s (%s, %s)"
|
||||
msgstr "%s %s (%s, %s)"
|
||||
|
||||
#, fuzzy
|
||||
msgid "&File"
|
||||
msgstr "Fitxer"
|
||||
|
||||
msgid "About Joplin"
|
||||
msgstr "Quant al Joplin"
|
||||
|
||||
msgid "Preferences..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Check for updates..."
|
||||
msgstr "Comprova les actualitzacions..."
|
||||
|
||||
msgid "Import"
|
||||
msgstr "Importació"
|
||||
|
||||
msgid "Export"
|
||||
msgstr "Exportació"
|
||||
|
||||
msgid "Print"
|
||||
msgstr "Imprimeix"
|
||||
msgid "Synchronise"
|
||||
msgstr "Sincronitza"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Hide %s"
|
||||
@@ -638,7 +668,11 @@ msgstr "Amaga %s"
|
||||
msgid "Quit"
|
||||
msgstr "Surt"
|
||||
|
||||
msgid "Edit"
|
||||
msgid "Close Window"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "&Edit"
|
||||
msgstr "Edita"
|
||||
|
||||
msgid "Copy"
|
||||
@@ -676,7 +710,8 @@ msgstr "Cerca a totes les notes"
|
||||
msgid "Search in current note"
|
||||
msgstr "Cerca a totes les notes"
|
||||
|
||||
msgid "View"
|
||||
#, fuzzy
|
||||
msgid "&View"
|
||||
msgstr "Visualització"
|
||||
|
||||
msgid "Toggle sidebar"
|
||||
@@ -689,22 +724,12 @@ msgstr "Canvia el disseny de l'editor"
|
||||
msgid "Focus"
|
||||
msgstr "Vés al cos"
|
||||
|
||||
msgid "Tools"
|
||||
#, fuzzy
|
||||
msgid "&Tools"
|
||||
msgstr "Eines"
|
||||
|
||||
msgid "Synchronisation status"
|
||||
msgstr "Estat de la sincronització"
|
||||
|
||||
msgid "Web clipper options"
|
||||
msgstr "Opcions del desa-retalls de webs"
|
||||
|
||||
msgid "Encryption options"
|
||||
msgstr "Opcions del xifratge"
|
||||
|
||||
msgid "General Options"
|
||||
msgstr "Opcions generals"
|
||||
|
||||
msgid "Help"
|
||||
#, fuzzy
|
||||
msgid "&Help"
|
||||
msgstr "Ajuda"
|
||||
|
||||
msgid "Website and documentation"
|
||||
@@ -713,15 +738,8 @@ msgstr "Lloc web i documentació"
|
||||
msgid "Make a donation"
|
||||
msgstr "Donatius"
|
||||
|
||||
msgid "Check for updates..."
|
||||
msgstr "Comprova les actualitzacions..."
|
||||
|
||||
msgid "About Joplin"
|
||||
msgstr "Quant al Joplin"
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s %s (%s, %s)"
|
||||
msgstr "%s %s (%s, %s)"
|
||||
msgid "Toggle development tools"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Open %s"
|
||||
@@ -747,11 +765,11 @@ msgid "An update is available, do you want to download it now?"
|
||||
msgstr "Hi ha disponible una actualització. Voleu baixar-la ara?"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Your version: v%s"
|
||||
msgid "Your version: %s"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "New version: v%s"
|
||||
msgid "New version: %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Yes"
|
||||
@@ -832,12 +850,12 @@ msgstr ""
|
||||
msgid "Notes and settings are stored in: %s"
|
||||
msgstr "Les notes i la configuració es desen a: %s"
|
||||
|
||||
msgid "Browse..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Check synchronisation configuration"
|
||||
msgstr "Comprova la configuració de la sincronització"
|
||||
|
||||
msgid "Browse..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Apply"
|
||||
msgstr ""
|
||||
|
||||
@@ -956,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:"
|
||||
|
||||
@@ -980,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"
|
||||
@@ -1001,9 +1017,33 @@ msgstr ""
|
||||
msgid "URL"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Note History"
|
||||
msgstr "Blocs de notes"
|
||||
|
||||
msgid "Previous versions of this note"
|
||||
msgstr ""
|
||||
|
||||
msgid "Note properties"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "The note \"%s\" has been successfully restored to the notebook \"%s\"."
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "This note has no history"
|
||||
msgstr "Aquesta nota s'ha modificat:"
|
||||
|
||||
msgid "Restore"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid ""
|
||||
"Click \"%s\" to restore the note. It will be copied in the notebook named "
|
||||
"\"%s\". The current version of the note will not be replaced or modified."
|
||||
msgstr ""
|
||||
|
||||
msgid "Open..."
|
||||
msgstr "Obre..."
|
||||
|
||||
@@ -1125,7 +1165,17 @@ msgstr "Opcions de xifratge"
|
||||
msgid "Clipper Options"
|
||||
msgstr "Opcions del desa-retalls"
|
||||
|
||||
msgid "Remove this tag from all the notes?"
|
||||
#, fuzzy, javascript-format
|
||||
msgid ""
|
||||
"Delete notebook \"%s\"?\n"
|
||||
"\n"
|
||||
"All notes and sub-notebooks within this notebook will also be deleted."
|
||||
msgstr ""
|
||||
"Voleu suprimir el bloc de notes? També se suprimiran tots els sub-blocs "
|
||||
"d'aquest bloc de notes."
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Remove tag \"%s\" from all notes?"
|
||||
msgstr "Voleu suprimir aquesta etiqueta de totes les notes?"
|
||||
|
||||
msgid "Remove this search from the sidebar?"
|
||||
@@ -1137,23 +1187,64 @@ msgstr "Suprimeix"
|
||||
msgid "Rename"
|
||||
msgstr "Canvia el nom"
|
||||
|
||||
msgid "Synchronise"
|
||||
msgstr "Sincronitza"
|
||||
|
||||
msgid "Notebooks"
|
||||
msgstr "Blocs de notes"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Decrypting items: %d/%d"
|
||||
msgstr "Elements obtinguts: %d/%d."
|
||||
msgstr "Elements obtinguts: %d/%d"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Fetching resources: %d"
|
||||
msgstr "Recursos: %d."
|
||||
msgid "Fetching resources: %d/%d"
|
||||
msgstr "Recursos: %d/%d"
|
||||
|
||||
msgid "Please select where the sync status should be exported to"
|
||||
msgstr "Seleccioneu on s'hauria d'exportar l'estat de la sincronització"
|
||||
|
||||
msgid "Retry"
|
||||
msgstr ""
|
||||
|
||||
msgid "Add or remove tags"
|
||||
msgstr "Afegeix o suprimeix etiquetes"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Duplicate"
|
||||
msgstr "Surt de l'aplicació"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "%s - Copy"
|
||||
msgstr "Copia"
|
||||
|
||||
msgid "Switch between note and to-do type"
|
||||
msgstr "Alterna entre el tipus nota i tasques pendents"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Switch to note type"
|
||||
msgstr "Alterna entre el tipus nota i tasques pendents"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Switch to to-do type"
|
||||
msgstr "Alterna entre el tipus nota i tasques pendents"
|
||||
|
||||
msgid "Copy Markdown link"
|
||||
msgstr "Copia l'enllaç Markdown"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Delete note \"%s\"?"
|
||||
msgstr "Voleu suprimir les notes?"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Delete these %d notes?"
|
||||
msgstr "Voleu suprimir aquestes notes?"
|
||||
|
||||
msgid ""
|
||||
"Type a note title to jump to it. Or type # followed by a tag name, or @ "
|
||||
"followed by a notebook name."
|
||||
msgstr ""
|
||||
|
||||
msgid "Goto Anything..."
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Usage: %s"
|
||||
msgstr "Ús: %s"
|
||||
@@ -1266,12 +1357,22 @@ msgstr "En progés"
|
||||
msgid "Synchronisation is already in progress. State: %s"
|
||||
msgstr "La sincronització ja és en procés. Estat: %s"
|
||||
|
||||
msgid ""
|
||||
"Unknown item type downloaded - please upgrade Joplin to the latest version"
|
||||
msgstr ""
|
||||
|
||||
msgid "Encrypted"
|
||||
msgstr "Xifrat"
|
||||
|
||||
msgid "Encrypted items cannot be modified"
|
||||
msgstr "Els elements xifrats no es poden modificar"
|
||||
|
||||
msgid "title"
|
||||
msgstr "títol"
|
||||
|
||||
msgid "updated date"
|
||||
msgstr "data d'actualització"
|
||||
|
||||
msgid "Conflicts"
|
||||
msgstr "Conflictes"
|
||||
|
||||
@@ -1282,12 +1383,6 @@ msgstr "No es pot moure el bloc de notes a aquesta ubicació"
|
||||
msgid "Notebooks cannot be named \"%s\", which is a reserved title."
|
||||
msgstr "Els blocs de notes no poden tenir el nom «%s», és un títol reservat."
|
||||
|
||||
msgid "title"
|
||||
msgstr "títol"
|
||||
|
||||
msgid "updated date"
|
||||
msgstr "data d'actualització"
|
||||
|
||||
msgid "created date"
|
||||
msgstr "data de creació"
|
||||
|
||||
@@ -1302,6 +1397,65 @@ msgstr "No es pot copiar la nota al bloc de notes «%s»"
|
||||
msgid "Cannot move note to \"%s\" notebook"
|
||||
msgstr "No es pot moure la nota al bloc de notes «%s»"
|
||||
|
||||
#, javascript-format
|
||||
msgid ""
|
||||
"Attention: If you change this location, make sure you copy all your content "
|
||||
"to it before syncing, otherwise all files will be removed! See the FAQ for "
|
||||
"more details: %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Synchronisation target"
|
||||
msgstr "Objectiu de sincronització"
|
||||
|
||||
msgid ""
|
||||
"The target to synchonise to. Each sync target may have additional parameters "
|
||||
"which are named as `sync.NUM.NAME` (all documented below)."
|
||||
msgstr ""
|
||||
"L'objectiu on se sincronitzarà. Cada objectiu pot tenir paràmetres "
|
||||
"addicionals que s'anomenen com a «sync.NUM.NAME» (es documenten a sota)."
|
||||
|
||||
msgid "Directory to synchronise with (absolute path)"
|
||||
msgstr "Directori on es farà la sincronització (camí absolut)"
|
||||
|
||||
msgid "Nextcloud WebDAV URL"
|
||||
msgstr "URL del Nextcloud WebDAV"
|
||||
|
||||
msgid "Nextcloud username"
|
||||
msgstr "Nom d'usuari del Nextcloud"
|
||||
|
||||
msgid "Nextcloud password"
|
||||
msgstr "Contrasenya del Nextcloud"
|
||||
|
||||
msgid "WebDAV URL"
|
||||
msgstr "URL de WebDAV"
|
||||
|
||||
msgid "WebDAV username"
|
||||
msgstr "Nom d'usuari WebDAV"
|
||||
|
||||
msgid "WebDAV password"
|
||||
msgstr "Contrasenya de WebDAV"
|
||||
|
||||
msgid "Attachment download behaviour"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"In \"Manual\" mode, attachments are downloaded only when you click on them. "
|
||||
"In \"Auto\", they are downloaded when you open the note. In \"Always\", all "
|
||||
"the attachments are downloaded whether you open the note or not."
|
||||
msgstr ""
|
||||
|
||||
msgid "Always"
|
||||
msgstr ""
|
||||
|
||||
msgid "Manual"
|
||||
msgstr ""
|
||||
|
||||
msgid "Auto"
|
||||
msgstr ""
|
||||
|
||||
msgid "Max concurrent connections"
|
||||
msgstr ""
|
||||
|
||||
msgid "Language"
|
||||
msgstr "Llengua"
|
||||
|
||||
@@ -1332,6 +1486,10 @@ msgstr "Ordena les notes per"
|
||||
msgid "Reverse sort order"
|
||||
msgstr "Ordre invers"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Sort notebooks by"
|
||||
msgstr "Ordena les notes per"
|
||||
|
||||
msgid "Save geo-location with notes"
|
||||
msgstr "Desa la geolocalització a les notes"
|
||||
|
||||
@@ -1347,6 +1505,43 @@ msgstr "Vés al cos"
|
||||
msgid "When creating a new note:"
|
||||
msgstr "En crear una nota:"
|
||||
|
||||
msgid "Enable soft breaks"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Enable math expressions"
|
||||
msgstr "Activa el xifratge"
|
||||
|
||||
msgid "Enable ==mark== syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable footnotes"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable table of contents extension"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable ~sub~ syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable ^sup^ syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable deflist syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable abbreviation syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable markdown emoji"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable ++insert++ syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable multimarkdown table extension"
|
||||
msgstr ""
|
||||
|
||||
msgid "Show tray icon"
|
||||
msgstr "Mostra la icona a la safata"
|
||||
|
||||
@@ -1420,51 +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 ""
|
||||
"The path to synchronise with when file system synchronisation is enabled. "
|
||||
"See `sync.target`."
|
||||
msgstr ""
|
||||
"El camí on sincronitzar en activar la sincronització del sistema. Vegeu "
|
||||
"«sync.target»."
|
||||
|
||||
msgid "Nextcloud WebDAV URL"
|
||||
msgstr "URL del Nextcloud WebDAV"
|
||||
|
||||
#, javascript-format
|
||||
msgid ""
|
||||
"Attention: If you change this location, make sure you copy all your content "
|
||||
"to it before syncing, otherwise all files will be removed! See the FAQ for "
|
||||
"more details: %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Nextcloud username"
|
||||
msgstr "Nom d'usuari del Nextcloud"
|
||||
|
||||
msgid "Nextcloud password"
|
||||
msgstr "Contrasenya del Nextcloud"
|
||||
|
||||
msgid "WebDAV URL"
|
||||
msgstr "URL de WebDAV"
|
||||
|
||||
msgid "WebDAV username"
|
||||
msgstr "Nom d'usuari WebDAV"
|
||||
|
||||
msgid "WebDAV password"
|
||||
msgstr "Contrasenya de WebDAV"
|
||||
|
||||
msgid "Custom TLS certificates"
|
||||
msgstr ""
|
||||
|
||||
@@ -1478,6 +1628,20 @@ msgstr ""
|
||||
msgid "Ignore TLS certificate errors"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Enable note history"
|
||||
msgstr "Activa el xifratge"
|
||||
|
||||
msgid "days"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "%d days"
|
||||
msgstr ""
|
||||
|
||||
msgid "Keep note history for"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Invalid option value: \"%s\". Possible values are: %s."
|
||||
msgstr "El valor de l'opció no és vàlid: «%s». Els valors possibles són: %s."
|
||||
@@ -1497,6 +1661,9 @@ msgstr ""
|
||||
msgid "Note"
|
||||
msgstr "Blocs de notes"
|
||||
|
||||
msgid "Plugins"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Application"
|
||||
msgstr "Surt de l'aplicació"
|
||||
@@ -1521,6 +1688,9 @@ msgstr "Fitxer d'exportació de l'Evernote"
|
||||
msgid "Json Export Directory"
|
||||
msgstr "Directori d'exportació del Joplin"
|
||||
|
||||
msgid "File"
|
||||
msgstr "Fitxer"
|
||||
|
||||
msgid "Directory"
|
||||
msgstr "Directori"
|
||||
|
||||
@@ -1546,13 +1716,12 @@ msgstr "No hi ha dades per exportar."
|
||||
msgid "Please specify the notebook where the notes should be imported to."
|
||||
msgstr "Indiqueu el bloc de notes on s'haurien d'importar les notes."
|
||||
|
||||
msgid "Restored Notes"
|
||||
msgstr ""
|
||||
|
||||
msgid "Items that cannot be synchronised"
|
||||
msgstr "Elements que no s'han pogut sincronitzar"
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s (%s): %s"
|
||||
msgstr "%s (%s): %s"
|
||||
|
||||
msgid ""
|
||||
"These items will remain on the device but will not be uploaded to the sync "
|
||||
"target. In order to find these items, either search for the title or the ID "
|
||||
@@ -1562,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)"
|
||||
|
||||
@@ -1681,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"
|
||||
@@ -1707,10 +1898,6 @@ msgstr ""
|
||||
msgid "Joplin website"
|
||||
msgstr "Lloc web del Joplin"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Joplin v%s"
|
||||
msgstr "Lloc web del Joplin"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Database v%s"
|
||||
msgstr ""
|
||||
@@ -1796,9 +1983,6 @@ msgstr "Converteix a nota"
|
||||
msgid "Convert to todo"
|
||||
msgstr "Converteix a llistat de tasques pendents"
|
||||
|
||||
msgid "Copy Markdown link"
|
||||
msgstr "Copia l'enllaç Markdown"
|
||||
|
||||
msgid "Hide metadata"
|
||||
msgstr "Amaga les metadades"
|
||||
|
||||
@@ -1811,6 +1995,9 @@ msgstr "Mostra-ho al mapa"
|
||||
msgid "Go to source URL"
|
||||
msgstr ""
|
||||
|
||||
msgid "Edit"
|
||||
msgstr "Edita"
|
||||
|
||||
msgid "Delete notebook"
|
||||
msgstr "Suprimeix el bloc de notes"
|
||||
|
||||
@@ -1834,26 +2021,25 @@ msgstr ""
|
||||
msgid "Welcome"
|
||||
msgstr "Benvingut"
|
||||
|
||||
#~ msgid "Add or remove tags"
|
||||
#~ msgstr "Afegeix o suprimeix etiquetes"
|
||||
#~ msgid "Separate each tag by a comma."
|
||||
#~ msgstr "Separeu les etiquetes amb comes."
|
||||
|
||||
#~ msgid "Some items cannot be decrypted."
|
||||
#~ msgstr "Alguns elements no s'han pogut desxifrar."
|
||||
|
||||
#~ msgid "%s (%s): %s"
|
||||
#~ msgstr "%s (%s): %s"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "The path to synchronise with when file system synchronisation is enabled. "
|
||||
#~ "See `sync.target`."
|
||||
#~ msgstr ""
|
||||
#~ "El camí on sincronitzar en activar la sincronització del sistema. Vegeu "
|
||||
#~ "«sync.target»."
|
||||
|
||||
#, fuzzy
|
||||
#~ msgid "%s - Copy"
|
||||
#~ msgstr "Copia"
|
||||
|
||||
#~ msgid "Switch between note and to-do type"
|
||||
#~ msgstr "Alterna entre el tipus nota i tasques pendents"
|
||||
|
||||
#, fuzzy
|
||||
#~ msgid "Switch to note type"
|
||||
#~ msgstr "Alterna entre el tipus nota i tasques pendents"
|
||||
|
||||
#, fuzzy
|
||||
#~ msgid "Switch to to-do type"
|
||||
#~ msgstr "Alterna entre el tipus nota i tasques pendents"
|
||||
|
||||
#~ msgid "Delete notes?"
|
||||
#~ msgstr "Voleu suprimir les notes?"
|
||||
#~ msgid "Joplin v%s"
|
||||
#~ msgstr "Lloc web del Joplin"
|
||||
|
||||
#~ msgid "State: %s."
|
||||
#~ msgstr "Estat: %s"
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -123,9 +123,10 @@ msgstr "Markerer en opgave som udført."
|
||||
msgid "Note is not a to-do: \"%s\""
|
||||
msgstr "Noten er ikke en opgave: \"%s\""
|
||||
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
"Manages E2EE configuration. Commands are `enable`, `disable`, `decrypt`, "
|
||||
"`status` and `target-status`."
|
||||
"`status`, `decrypt-file` and `target-status`."
|
||||
msgstr ""
|
||||
"Udfører E2EE konfiguration. Kommandoer er `enable`(aktiver), "
|
||||
"`disable`(sluk), `decrypt`(dekrypter), `status` og `target-status` (modtager-"
|
||||
@@ -597,8 +598,8 @@ msgstr "Importerer fra \"%s\" som \"%s\"-format. Vent venligst..."
|
||||
msgid "PDF File"
|
||||
msgstr "PDF fil"
|
||||
|
||||
msgid "File"
|
||||
msgstr "Fil"
|
||||
msgid "Synchronisation status"
|
||||
msgstr "Synkroniserings status"
|
||||
|
||||
msgid "New note"
|
||||
msgstr "Ny note"
|
||||
@@ -609,14 +610,43 @@ msgstr "Ny opgave"
|
||||
msgid "New notebook"
|
||||
msgstr "Ny notesbog"
|
||||
|
||||
msgid "Print"
|
||||
msgstr "Udskriv"
|
||||
|
||||
msgid "General Options"
|
||||
msgstr "Generelle indstillinger"
|
||||
|
||||
msgid "Encryption options"
|
||||
msgstr "Krypterings muligheder"
|
||||
|
||||
msgid "Web clipper options"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s %s (%s, %s)"
|
||||
msgstr "%s %s (%s, %s)"
|
||||
|
||||
#, fuzzy
|
||||
msgid "&File"
|
||||
msgstr "Fil"
|
||||
|
||||
msgid "About Joplin"
|
||||
msgstr "Om Joplin"
|
||||
|
||||
msgid "Preferences..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Check for updates..."
|
||||
msgstr "Checker om der er opdateringer.."
|
||||
|
||||
msgid "Import"
|
||||
msgstr "Importer"
|
||||
|
||||
msgid "Export"
|
||||
msgstr "Eksporter"
|
||||
|
||||
msgid "Print"
|
||||
msgstr "Udskriv"
|
||||
msgid "Synchronise"
|
||||
msgstr "Synkroniser"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Hide %s"
|
||||
@@ -625,7 +655,11 @@ msgstr "Skjul %s"
|
||||
msgid "Quit"
|
||||
msgstr "Afslut"
|
||||
|
||||
msgid "Edit"
|
||||
msgid "Close Window"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "&Edit"
|
||||
msgstr "Ret"
|
||||
|
||||
msgid "Copy"
|
||||
@@ -663,7 +697,8 @@ msgstr "Søg i alle noter"
|
||||
msgid "Search in current note"
|
||||
msgstr "Søg i alle noter"
|
||||
|
||||
msgid "View"
|
||||
#, fuzzy
|
||||
msgid "&View"
|
||||
msgstr "Vis"
|
||||
|
||||
msgid "Toggle sidebar"
|
||||
@@ -676,22 +711,12 @@ msgstr "Skift editor layout"
|
||||
msgid "Focus"
|
||||
msgstr "Fokuser på brødtekst"
|
||||
|
||||
msgid "Tools"
|
||||
#, fuzzy
|
||||
msgid "&Tools"
|
||||
msgstr "Værktøjer"
|
||||
|
||||
msgid "Synchronisation status"
|
||||
msgstr "Synkroniserings status"
|
||||
|
||||
msgid "Web clipper options"
|
||||
msgstr ""
|
||||
|
||||
msgid "Encryption options"
|
||||
msgstr "Krypterings muligheder"
|
||||
|
||||
msgid "General Options"
|
||||
msgstr "Generelle indstillinger"
|
||||
|
||||
msgid "Help"
|
||||
#, fuzzy
|
||||
msgid "&Help"
|
||||
msgstr "Hjælp"
|
||||
|
||||
msgid "Website and documentation"
|
||||
@@ -700,15 +725,8 @@ msgstr "Joplins hjemmeside og dokumentation"
|
||||
msgid "Make a donation"
|
||||
msgstr "Giv en donation"
|
||||
|
||||
msgid "Check for updates..."
|
||||
msgstr "Checker om der er opdateringer.."
|
||||
|
||||
msgid "About Joplin"
|
||||
msgstr "Om Joplin"
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s %s (%s, %s)"
|
||||
msgstr "%s %s (%s, %s)"
|
||||
msgid "Toggle development tools"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Open %s"
|
||||
@@ -734,11 +752,11 @@ msgid "An update is available, do you want to download it now?"
|
||||
msgstr "Opdatering er til rådighed, vil du hente den nu?"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Your version: v%s"
|
||||
msgid "Your version: %s"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "New version: v%s"
|
||||
msgid "New version: %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Yes"
|
||||
@@ -812,12 +830,12 @@ msgstr ""
|
||||
msgid "Notes and settings are stored in: %s"
|
||||
msgstr "Noter og indstillinger er gemt i: %s"
|
||||
|
||||
msgid "Browse..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Check synchronisation configuration"
|
||||
msgstr "Check synkroniserings Indstillinger"
|
||||
|
||||
msgid "Browse..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Apply"
|
||||
msgstr ""
|
||||
|
||||
@@ -935,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:"
|
||||
|
||||
@@ -961,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"
|
||||
@@ -980,9 +996,33 @@ msgstr ""
|
||||
msgid "URL"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Note History"
|
||||
msgstr "Notesbøger"
|
||||
|
||||
msgid "Previous versions of this note"
|
||||
msgstr ""
|
||||
|
||||
msgid "Note properties"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "The note \"%s\" has been successfully restored to the notebook \"%s\"."
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "This note has no history"
|
||||
msgstr "Denne note er ændret:"
|
||||
|
||||
msgid "Restore"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid ""
|
||||
"Click \"%s\" to restore the note. It will be copied in the notebook named "
|
||||
"\"%s\". The current version of the note will not be replaced or modified."
|
||||
msgstr ""
|
||||
|
||||
msgid "Open..."
|
||||
msgstr "Åben..."
|
||||
|
||||
@@ -1103,7 +1143,15 @@ msgstr "Krypterings indstillinger"
|
||||
msgid "Clipper Options"
|
||||
msgstr "Generelle indstillinger"
|
||||
|
||||
msgid "Remove this tag from all the notes?"
|
||||
#, fuzzy, javascript-format
|
||||
msgid ""
|
||||
"Delete notebook \"%s\"?\n"
|
||||
"\n"
|
||||
"All notes and sub-notebooks within this notebook will also be deleted."
|
||||
msgstr "Slet notesbog? Alle noter i notesbogen bliver også slettet."
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Remove tag \"%s\" from all notes?"
|
||||
msgstr "Slet denne markering fra alle noter?"
|
||||
|
||||
msgid "Remove this search from the sidebar?"
|
||||
@@ -1115,23 +1163,65 @@ msgstr "Slet"
|
||||
msgid "Rename"
|
||||
msgstr "Omdøb"
|
||||
|
||||
msgid "Synchronise"
|
||||
msgstr "Synkroniser"
|
||||
|
||||
msgid "Notebooks"
|
||||
msgstr "Notesbøger"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Decrypting items: %d/%d"
|
||||
msgstr "Hentede emner: %d/%d."
|
||||
msgstr "Hentede emner: %d/%d"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Fetching resources: %d"
|
||||
msgstr "Ressourcer: %d."
|
||||
msgid "Fetching resources: %d/%d"
|
||||
msgstr "Ressourcer: %d/%d"
|
||||
|
||||
msgid "Please select where the sync status should be exported to"
|
||||
msgstr "Vælg hvor sync status skal eksporteres til"
|
||||
|
||||
msgid "Retry"
|
||||
msgstr ""
|
||||
|
||||
msgid "Add or remove tags"
|
||||
msgstr "Tilføj eller slet mærker"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Duplicate"
|
||||
msgstr "Forlad/luk program."
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "%s - Copy"
|
||||
msgstr "Kopier"
|
||||
|
||||
msgid "Switch between note and to-do type"
|
||||
msgstr "Skift mellem note- og opgave type"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Switch to note type"
|
||||
msgstr "Skift mellem note- og opgave type"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Switch to to-do type"
|
||||
msgstr "Skift mellem note- og opgave type"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Copy Markdown link"
|
||||
msgstr "Markdown"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Delete note \"%s\"?"
|
||||
msgstr "Slet noter?"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Delete these %d notes?"
|
||||
msgstr "Slet disse noter?"
|
||||
|
||||
msgid ""
|
||||
"Type a note title to jump to it. Or type # followed by a tag name, or @ "
|
||||
"followed by a notebook name."
|
||||
msgstr ""
|
||||
|
||||
msgid "Goto Anything..."
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Usage: %s"
|
||||
msgstr "Forbrug: %s"
|
||||
@@ -1244,12 +1334,24 @@ msgstr "I gang"
|
||||
msgid "Synchronisation is already in progress. State: %s"
|
||||
msgstr "Synkronisering er allerede i gang: Tilstand: %s"
|
||||
|
||||
msgid ""
|
||||
"Unknown item type downloaded - please upgrade Joplin to the latest version"
|
||||
msgstr ""
|
||||
|
||||
msgid "Encrypted"
|
||||
msgstr "Krypteret"
|
||||
|
||||
msgid "Encrypted items cannot be modified"
|
||||
msgstr "Krypteret emner kan ikke rettes"
|
||||
|
||||
#, fuzzy
|
||||
msgid "title"
|
||||
msgstr "Samlet"
|
||||
|
||||
#, fuzzy
|
||||
msgid "updated date"
|
||||
msgstr "Opdateret %d."
|
||||
|
||||
msgid "Conflicts"
|
||||
msgstr "Konflikter"
|
||||
|
||||
@@ -1261,14 +1363,6 @@ msgstr "Kan ikke flytte note til \"%s\" notesbog"
|
||||
msgid "Notebooks cannot be named \"%s\", which is a reserved title."
|
||||
msgstr "Notesbøger kan ikke få navnet \"%s\", da det er en beskyttet titel."
|
||||
|
||||
#, fuzzy
|
||||
msgid "title"
|
||||
msgstr "Samlet"
|
||||
|
||||
#, fuzzy
|
||||
msgid "updated date"
|
||||
msgstr "Opdateret %d."
|
||||
|
||||
#, fuzzy
|
||||
msgid "created date"
|
||||
msgstr "Oprettet: %d."
|
||||
@@ -1284,6 +1378,65 @@ msgstr "Kan ikke kopiere note til \"%s\" notesbog"
|
||||
msgid "Cannot move note to \"%s\" notebook"
|
||||
msgstr "Kan ikke flytte note til \"%s\" notesbog"
|
||||
|
||||
#, javascript-format
|
||||
msgid ""
|
||||
"Attention: If you change this location, make sure you copy all your content "
|
||||
"to it before syncing, otherwise all files will be removed! See the FAQ for "
|
||||
"more details: %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Synchronisation target"
|
||||
msgstr "Synkroniserings mål"
|
||||
|
||||
msgid ""
|
||||
"The target to synchonise to. Each sync target may have additional parameters "
|
||||
"which are named as `sync.NUM.NAME` (all documented below)."
|
||||
msgstr ""
|
||||
"Synkroniserings mål. Hver synk. mål kan have ekstra parametre som navngives "
|
||||
"som `sync.NUM.NAME` (se dokumentation herunder)."
|
||||
|
||||
msgid "Directory to synchronise with (absolute path)"
|
||||
msgstr "Mappe der skal synkroniseres med (absolut sti)"
|
||||
|
||||
msgid "Nextcloud WebDAV URL"
|
||||
msgstr "Nextcloud WebDAV URL"
|
||||
|
||||
msgid "Nextcloud username"
|
||||
msgstr "Nextcloud brugernavn"
|
||||
|
||||
msgid "Nextcloud password"
|
||||
msgstr "Nextcloud kodeord"
|
||||
|
||||
msgid "WebDAV URL"
|
||||
msgstr "WebDAV URL"
|
||||
|
||||
msgid "WebDAV username"
|
||||
msgstr "WebDAV brugernavn"
|
||||
|
||||
msgid "WebDAV password"
|
||||
msgstr "WebDAV kodeord"
|
||||
|
||||
msgid "Attachment download behaviour"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"In \"Manual\" mode, attachments are downloaded only when you click on them. "
|
||||
"In \"Auto\", they are downloaded when you open the note. In \"Always\", all "
|
||||
"the attachments are downloaded whether you open the note or not."
|
||||
msgstr ""
|
||||
|
||||
msgid "Always"
|
||||
msgstr ""
|
||||
|
||||
msgid "Manual"
|
||||
msgstr ""
|
||||
|
||||
msgid "Auto"
|
||||
msgstr ""
|
||||
|
||||
msgid "Max concurrent connections"
|
||||
msgstr ""
|
||||
|
||||
msgid "Language"
|
||||
msgstr "Sprog"
|
||||
|
||||
@@ -1315,6 +1468,10 @@ msgstr "Sorter noter efter"
|
||||
msgid "Reverse sort order"
|
||||
msgstr "Modsat sorterings orden"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Sort notebooks by"
|
||||
msgstr "Sorter noter efter"
|
||||
|
||||
msgid "Save geo-location with notes"
|
||||
msgstr "Gem geo-lokation i noter"
|
||||
|
||||
@@ -1330,6 +1487,43 @@ msgstr "Fokuser på brødtekst"
|
||||
msgid "When creating a new note:"
|
||||
msgstr "Ved oprettelse af ny note:"
|
||||
|
||||
msgid "Enable soft breaks"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Enable math expressions"
|
||||
msgstr "Start kryptering"
|
||||
|
||||
msgid "Enable ==mark== syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable footnotes"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable table of contents extension"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable ~sub~ syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable ^sup^ syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable deflist syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable abbreviation syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable markdown emoji"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable ++insert++ syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable multimarkdown table extension"
|
||||
msgstr ""
|
||||
|
||||
msgid "Show tray icon"
|
||||
msgstr "Vis ikon på bundbjælke"
|
||||
|
||||
@@ -1403,51 +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 ""
|
||||
"The path to synchronise with when file system synchronisation is enabled. "
|
||||
"See `sync.target`."
|
||||
msgstr ""
|
||||
"Sti til synkronisering, når filsystem synkronisering er slået til. Se `sync."
|
||||
"target`."
|
||||
|
||||
msgid "Nextcloud WebDAV URL"
|
||||
msgstr "Nextcloud WebDAV URL"
|
||||
|
||||
#, javascript-format
|
||||
msgid ""
|
||||
"Attention: If you change this location, make sure you copy all your content "
|
||||
"to it before syncing, otherwise all files will be removed! See the FAQ for "
|
||||
"more details: %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Nextcloud username"
|
||||
msgstr "Nextcloud brugernavn"
|
||||
|
||||
msgid "Nextcloud password"
|
||||
msgstr "Nextcloud kodeord"
|
||||
|
||||
msgid "WebDAV URL"
|
||||
msgstr "WebDAV URL"
|
||||
|
||||
msgid "WebDAV username"
|
||||
msgstr "WebDAV brugernavn"
|
||||
|
||||
msgid "WebDAV password"
|
||||
msgstr "WebDAV kodeord"
|
||||
|
||||
msgid "Custom TLS certificates"
|
||||
msgstr ""
|
||||
|
||||
@@ -1461,6 +1610,20 @@ msgstr ""
|
||||
msgid "Ignore TLS certificate errors"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Enable note history"
|
||||
msgstr "Start kryptering"
|
||||
|
||||
msgid "days"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "%d days"
|
||||
msgstr ""
|
||||
|
||||
msgid "Keep note history for"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Invalid option value: \"%s\". Possible values are: %s."
|
||||
msgstr "Ulovlig værdi: \"%s\". Mulige valg er: %s."
|
||||
@@ -1480,6 +1643,9 @@ msgstr ""
|
||||
msgid "Note"
|
||||
msgstr "Notesbøger"
|
||||
|
||||
msgid "Plugins"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Application"
|
||||
msgstr "Forlad/luk program."
|
||||
@@ -1504,6 +1670,9 @@ msgstr "Evernote eksport fil"
|
||||
msgid "Json Export Directory"
|
||||
msgstr "Joplin eksport mappe"
|
||||
|
||||
msgid "File"
|
||||
msgstr "Fil"
|
||||
|
||||
msgid "Directory"
|
||||
msgstr "Indeks"
|
||||
|
||||
@@ -1529,13 +1698,12 @@ msgstr "Der er ingen data at eksportere."
|
||||
msgid "Please specify the notebook where the notes should be imported to."
|
||||
msgstr "Angiv hvilken notesbog, noter skal importeres til."
|
||||
|
||||
msgid "Restored Notes"
|
||||
msgstr ""
|
||||
|
||||
msgid "Items that cannot be synchronised"
|
||||
msgstr "Emner kan ikke synkroniseres"
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s (%s): %s"
|
||||
msgstr "%s (%s): %s"
|
||||
|
||||
msgid ""
|
||||
"These items will remain on the device but will not be uploaded to the sync "
|
||||
"target. In order to find these items, either search for the title or the ID "
|
||||
@@ -1545,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)"
|
||||
|
||||
@@ -1665,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"
|
||||
@@ -1684,10 +1874,6 @@ msgstr ""
|
||||
msgid "Joplin website"
|
||||
msgstr "Joplin hjemmeside"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Joplin v%s"
|
||||
msgstr "Joplin hjemmeside"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Database v%s"
|
||||
msgstr ""
|
||||
@@ -1773,10 +1959,6 @@ msgstr "Konverter til note"
|
||||
msgid "Convert to todo"
|
||||
msgstr "Konverter til opgave"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Copy Markdown link"
|
||||
msgstr "Markdown"
|
||||
|
||||
msgid "Hide metadata"
|
||||
msgstr "Skjul metadata"
|
||||
|
||||
@@ -1789,6 +1971,9 @@ msgstr "Vis på kort"
|
||||
msgid "Go to source URL"
|
||||
msgstr ""
|
||||
|
||||
msgid "Edit"
|
||||
msgstr "Ret"
|
||||
|
||||
msgid "Delete notebook"
|
||||
msgstr "Slet notesbog"
|
||||
|
||||
@@ -1811,26 +1996,25 @@ msgstr "Du har ingen notesbøger. Opret en ved at klikke på (+) knappen."
|
||||
msgid "Welcome"
|
||||
msgstr "Velkommen"
|
||||
|
||||
#~ 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 "Some items cannot be decrypted."
|
||||
#~ msgstr "Nogle emner kan ikke krypteres."
|
||||
|
||||
#~ msgid "%s (%s): %s"
|
||||
#~ msgstr "%s (%s): %s"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "The path to synchronise with when file system synchronisation is enabled. "
|
||||
#~ "See `sync.target`."
|
||||
#~ msgstr ""
|
||||
#~ "Sti til synkronisering, når filsystem synkronisering er slået til. Se "
|
||||
#~ "`sync.target`."
|
||||
|
||||
#, fuzzy
|
||||
#~ msgid "%s - Copy"
|
||||
#~ msgstr "Kopier"
|
||||
|
||||
#~ msgid "Switch between note and to-do type"
|
||||
#~ msgstr "Skift mellem note- og opgave type"
|
||||
|
||||
#, fuzzy
|
||||
#~ msgid "Switch to note type"
|
||||
#~ msgstr "Skift mellem note- og opgave type"
|
||||
|
||||
#, fuzzy
|
||||
#~ msgid "Switch to to-do type"
|
||||
#~ msgstr "Skift mellem note- og opgave type"
|
||||
|
||||
#~ msgid "Delete notes?"
|
||||
#~ msgstr "Slet noter?"
|
||||
#~ msgid "Joplin v%s"
|
||||
#~ msgstr "Joplin hjemmeside"
|
||||
|
||||
#~ msgid "State: %s."
|
||||
#~ msgstr "Tilstand: %s."
|
||||
|
||||
@@ -13,12 +13,13 @@ msgstr ""
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Generator: Poedit 2.1.1\n"
|
||||
"X-Generator: Poedit 2.2.3\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
|
||||
msgid "To delete a tag, untag the associated notes."
|
||||
msgstr ""
|
||||
"Um ein Tag zu löschen, entferne es bei allen damit verbundenen Notizen."
|
||||
"Um ein Schlagwort zu löschen, entferne es bei allen damit verbundenen "
|
||||
"Notizen."
|
||||
|
||||
msgid "Please select the note or notebook to be deleted first."
|
||||
msgstr ""
|
||||
@@ -130,7 +131,7 @@ msgstr "Notiz ist kein To-Do: \"%s\""
|
||||
|
||||
msgid ""
|
||||
"Manages E2EE configuration. Commands are `enable`, `disable`, `decrypt`, "
|
||||
"`status` and `target-status`."
|
||||
"`status`, `decrypt-file` and `target-status`."
|
||||
msgstr ""
|
||||
"Verwaltet die E2EE-Konfiguration. Die Befehle lauten `enable`, `disable`, "
|
||||
"`decrypt`, `status` und `target-status`."
|
||||
@@ -599,18 +600,16 @@ msgid "Exporting to \"%s\" as \"%s\" format. Please wait..."
|
||||
msgstr "Exportiere „%s“ ins „%s“ Format. Bitte warten..."
|
||||
|
||||
msgid "Sidebar"
|
||||
msgstr ""
|
||||
msgstr "Seitenleiste"
|
||||
|
||||
msgid "Note list"
|
||||
msgstr ""
|
||||
msgstr "Notizen-Liste"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Note title"
|
||||
msgstr "Notizbuch-Titel:"
|
||||
msgstr "Notiz Titel"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Note body"
|
||||
msgstr "Notizbücher"
|
||||
msgstr "Notiz Text"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Importing from \"%s\" as \"%s\" format. Please wait..."
|
||||
@@ -619,8 +618,8 @@ msgstr "Importiere „%s“ ins „%s“ Format. Bitte warten..."
|
||||
msgid "PDF File"
|
||||
msgstr "PDF-Datei"
|
||||
|
||||
msgid "File"
|
||||
msgstr "Datei"
|
||||
msgid "Synchronisation status"
|
||||
msgstr "Status der Synchronisation"
|
||||
|
||||
msgid "New note"
|
||||
msgstr "Neue Notiz"
|
||||
@@ -631,14 +630,42 @@ msgstr "Neues To-Do"
|
||||
msgid "New notebook"
|
||||
msgstr "Neues Notizbuch"
|
||||
|
||||
msgid "Print"
|
||||
msgstr "Drucken"
|
||||
|
||||
msgid "General Options"
|
||||
msgstr "Allgemeine Einstellungen"
|
||||
|
||||
msgid "Encryption options"
|
||||
msgstr "Verschlüsselungsoptionen"
|
||||
|
||||
msgid "Web clipper options"
|
||||
msgstr "Web-Clipper Optionen"
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s %s (%s, %s)"
|
||||
msgstr "%s %s (%s, %s)"
|
||||
|
||||
msgid "&File"
|
||||
msgstr "&Datei"
|
||||
|
||||
msgid "About Joplin"
|
||||
msgstr "Über Joplin"
|
||||
|
||||
msgid "Preferences..."
|
||||
msgstr "Einstellungen..."
|
||||
|
||||
msgid "Check for updates..."
|
||||
msgstr "Überprüfe auf Aktualisierungen..."
|
||||
|
||||
msgid "Import"
|
||||
msgstr "Importieren"
|
||||
|
||||
msgid "Export"
|
||||
msgstr "Exportieren"
|
||||
|
||||
msgid "Print"
|
||||
msgstr "Drucken"
|
||||
msgid "Synchronise"
|
||||
msgstr "Synchronisieren"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Hide %s"
|
||||
@@ -647,8 +674,11 @@ msgstr "%s ausblenden"
|
||||
msgid "Quit"
|
||||
msgstr "Verlassen"
|
||||
|
||||
msgid "Edit"
|
||||
msgstr "Bearbeiten"
|
||||
msgid "Close Window"
|
||||
msgstr "Fenster schließen"
|
||||
|
||||
msgid "&Edit"
|
||||
msgstr "&Bearbeiten"
|
||||
|
||||
msgid "Copy"
|
||||
msgstr "Kopieren"
|
||||
@@ -669,7 +699,7 @@ msgid "Italic"
|
||||
msgstr "Kursiv"
|
||||
|
||||
msgid "Link"
|
||||
msgstr ""
|
||||
msgstr "Link"
|
||||
|
||||
msgid "Insert Date Time"
|
||||
msgstr "Datum / Uhrzeit einfügen"
|
||||
@@ -683,8 +713,8 @@ msgstr "Alle Notizen durchsuchen"
|
||||
msgid "Search in current note"
|
||||
msgstr "Aktuelle Notiz durchsuchen"
|
||||
|
||||
msgid "View"
|
||||
msgstr "Ansicht"
|
||||
msgid "&View"
|
||||
msgstr "&Ansicht"
|
||||
|
||||
msgid "Toggle sidebar"
|
||||
msgstr "Seitenleiste umschalten"
|
||||
@@ -692,27 +722,14 @@ msgstr "Seitenleiste umschalten"
|
||||
msgid "Toggle editor layout"
|
||||
msgstr "Editor-Layout umschalten"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Focus"
|
||||
msgstr "Fokussiere Inhalt"
|
||||
msgstr "Fokus"
|
||||
|
||||
msgid "Tools"
|
||||
msgstr "Werkzeuge"
|
||||
msgid "&Tools"
|
||||
msgstr "&Werkzeuge"
|
||||
|
||||
msgid "Synchronisation status"
|
||||
msgstr "Status der Synchronisation"
|
||||
|
||||
msgid "Web clipper options"
|
||||
msgstr "Web-Clipper Optionen"
|
||||
|
||||
msgid "Encryption options"
|
||||
msgstr "Verschlüsselungsoptionen"
|
||||
|
||||
msgid "General Options"
|
||||
msgstr "Allgemeine Einstellungen"
|
||||
|
||||
msgid "Help"
|
||||
msgstr "Hilfe"
|
||||
msgid "&Help"
|
||||
msgstr "&Hilfe"
|
||||
|
||||
msgid "Website and documentation"
|
||||
msgstr "Webseite und Dokumentation"
|
||||
@@ -720,15 +737,8 @@ msgstr "Webseite und Dokumentation"
|
||||
msgid "Make a donation"
|
||||
msgstr "Spenden"
|
||||
|
||||
msgid "Check for updates..."
|
||||
msgstr "Überprüfe auf Aktualisierungen..."
|
||||
|
||||
msgid "About Joplin"
|
||||
msgstr "Über Joplin"
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s %s (%s, %s)"
|
||||
msgstr "%s %s (%s, %s)"
|
||||
msgid "Toggle development tools"
|
||||
msgstr "Entwicklerwerkzeuge ein-/ausschalten"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Open %s"
|
||||
@@ -748,19 +758,19 @@ msgstr "Die aktuelle Version ist auf dem neuesten Stand."
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s (pre-release)"
|
||||
msgstr ""
|
||||
msgstr "%s (Vorabversion)"
|
||||
|
||||
msgid "An update is available, do you want to download it now?"
|
||||
msgstr ""
|
||||
"Es ist eine Aktualisierung verfügbar. Soll sie jetzt heruntergeladen werden?"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Your version: v%s"
|
||||
msgstr ""
|
||||
msgid "Your version: %s"
|
||||
msgstr "Deine Version: %s"
|
||||
|
||||
#, javascript-format
|
||||
msgid "New version: v%s"
|
||||
msgstr ""
|
||||
msgid "New version: %s"
|
||||
msgstr "Neue Version: %s"
|
||||
|
||||
msgid "Yes"
|
||||
msgstr "Ja"
|
||||
@@ -769,7 +779,7 @@ msgid "No"
|
||||
msgstr "Nein"
|
||||
|
||||
msgid "Token has been copied to the clipboard!"
|
||||
msgstr "Token wurde in die Zwischenablage kopiert."
|
||||
msgstr "Token wurde in die Zwischenablage kopiert!"
|
||||
|
||||
msgid "The web clipper service is enabled and set to auto-start."
|
||||
msgstr ""
|
||||
@@ -842,12 +852,12 @@ msgstr ""
|
||||
msgid "Notes and settings are stored in: %s"
|
||||
msgstr "Notizen und Einstellungen werden gespeichert in: %s"
|
||||
|
||||
msgid "Browse..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Check synchronisation configuration"
|
||||
msgstr "Überprüfen der Synchronisationseinstellungen"
|
||||
|
||||
msgid "Browse..."
|
||||
msgstr "Durchsuche..."
|
||||
|
||||
msgid "Apply"
|
||||
msgstr "Anwenden"
|
||||
|
||||
@@ -941,9 +951,9 @@ msgstr "Status"
|
||||
msgid "Encryption is:"
|
||||
msgstr "Die Verschlüsselung ist:"
|
||||
|
||||
#, fuzzy
|
||||
# 'Nutzung', 'Gebrauch', or 'Verwendung' - depends on the context
|
||||
msgid "Usage"
|
||||
msgstr "Nutzung: %s"
|
||||
msgstr "Nutzung"
|
||||
|
||||
msgid "Back"
|
||||
msgstr "Zurück"
|
||||
@@ -967,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:"
|
||||
|
||||
@@ -991,8 +998,8 @@ msgstr "Manche Objekte können nicht synchronisiert werden."
|
||||
msgid "View them now"
|
||||
msgstr "Zeige sie jetzt an"
|
||||
|
||||
msgid "Some items cannot be decrypted."
|
||||
msgstr "Einige Objekte können nicht entschlüsselt werden."
|
||||
msgid "One or more master keys need a password."
|
||||
msgstr "Mindestens ein Hauptschlüssel benötigt ein Passwort."
|
||||
|
||||
msgid "Set the password"
|
||||
msgstr "Setze ein Passwort"
|
||||
@@ -1014,9 +1021,35 @@ msgstr "Standort"
|
||||
msgid "URL"
|
||||
msgstr "URL"
|
||||
|
||||
msgid "Note History"
|
||||
msgstr "Notizen-Verlauf"
|
||||
|
||||
msgid "Previous versions of this note"
|
||||
msgstr "Vorherige Version von dieser Notiz"
|
||||
|
||||
msgid "Note properties"
|
||||
msgstr "Notiz-Eigenschaften"
|
||||
|
||||
#, javascript-format
|
||||
msgid "The note \"%s\" has been successfully restored to the notebook \"%s\"."
|
||||
msgstr ""
|
||||
"Die Notiz \"%s\" wurde erfolgreich wiederhergestellt und ist im Notizbuch "
|
||||
"\"%s\" verfügbar."
|
||||
|
||||
msgid "This note has no history"
|
||||
msgstr "Diese Notiz hat keinen Verlauf"
|
||||
|
||||
msgid "Restore"
|
||||
msgstr "Wiederherstellen"
|
||||
|
||||
#, javascript-format
|
||||
msgid ""
|
||||
"Click \"%s\" to restore the note. It will be copied in the notebook named "
|
||||
"\"%s\". The current version of the note will not be replaced or modified."
|
||||
msgstr ""
|
||||
"Klicke \"%s\" um die Notiz wiederherzustellen. Sie wird in das Notizbuch \"%s"
|
||||
"\" kopiert. Die aktuelle Version der Notiz wird nicht ersetzt oder verändert."
|
||||
|
||||
msgid "Open..."
|
||||
msgstr "Öffne..."
|
||||
|
||||
@@ -1050,7 +1083,7 @@ msgstr ""
|
||||
"und die Notiz zu bearbeiten."
|
||||
|
||||
msgid "Only one note can be printed or exported to PDF at a time."
|
||||
msgstr ""
|
||||
msgstr "Nur eine Notiz kann gedruckt oder als PDF exportiert werden."
|
||||
|
||||
msgid "strong text"
|
||||
msgstr "Fetter Text"
|
||||
@@ -1138,8 +1171,19 @@ msgstr "Verschlüsselungsoptionen"
|
||||
msgid "Clipper Options"
|
||||
msgstr "Clipper-Einstellungen"
|
||||
|
||||
msgid "Remove this tag from all the notes?"
|
||||
msgstr "Dieses Schlagwort von allen Notizen entfernen?"
|
||||
#, javascript-format
|
||||
msgid ""
|
||||
"Delete notebook \"%s\"?\n"
|
||||
"\n"
|
||||
"All notes and sub-notebooks within this notebook will also be deleted."
|
||||
msgstr ""
|
||||
"Notizbuch \"%s\" wirklich löschen?\n"
|
||||
"\n"
|
||||
"Alle Notizen und Unternotizen darin werden ebenfalls gelöscht."
|
||||
|
||||
#, javascript-format
|
||||
msgid "Remove tag \"%s\" from all notes?"
|
||||
msgstr "Schlagwort \"%s\" von allen Notizen entfernen?"
|
||||
|
||||
msgid "Remove this search from the sidebar?"
|
||||
msgstr "Diese Suche von der Seitenleiste entfernen?"
|
||||
@@ -1150,9 +1194,6 @@ msgstr "Löschen"
|
||||
msgid "Rename"
|
||||
msgstr "Umbenennen"
|
||||
|
||||
msgid "Synchronise"
|
||||
msgstr "Synchronisieren"
|
||||
|
||||
msgid "Notebooks"
|
||||
msgstr "Notizbücher"
|
||||
|
||||
@@ -1161,13 +1202,56 @@ 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 "Erneut versuchen"
|
||||
|
||||
msgid "Add or remove tags"
|
||||
msgstr "Schlagwörter hinzufügen oder entfernen"
|
||||
|
||||
msgid "Duplicate"
|
||||
msgstr "Duplizieren"
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s - Copy"
|
||||
msgstr "%s - Kopieren"
|
||||
|
||||
msgid "Switch between note and to-do type"
|
||||
msgstr "Zwischen Notiz und To-Do Typ wechseln"
|
||||
|
||||
msgid "Switch to note type"
|
||||
msgstr "Zu Notiz-Typ wechseln"
|
||||
|
||||
msgid "Switch to to-do type"
|
||||
msgstr "Zu To-Do-Typ wechseln"
|
||||
|
||||
msgid "Copy Markdown link"
|
||||
msgstr "Markdown-Link kopieren"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Delete note \"%s\"?"
|
||||
msgstr "Notiz \"%s\" löschen?"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Delete these %d notes?"
|
||||
msgstr "Sollen diese %d Notizen gelöscht werden?"
|
||||
|
||||
msgid ""
|
||||
"Type a note title to jump to it. Or type # followed by a tag name, or @ "
|
||||
"followed by a notebook name."
|
||||
msgstr ""
|
||||
"Tippe einen Notiz Titel um hinzuspringen. Oder tippe # gefolgt von einem "
|
||||
"Schlagwort, oder @ gefolgt von einem Notizbuch-Namen."
|
||||
|
||||
msgid "Goto Anything..."
|
||||
msgstr "Gehe zu..."
|
||||
|
||||
#, javascript-format
|
||||
msgid "Usage: %s"
|
||||
msgstr "Nutzung: %s"
|
||||
@@ -1280,12 +1364,22 @@ msgstr "In Bearbeitung"
|
||||
msgid "Synchronisation is already in progress. State: %s"
|
||||
msgstr "Synchronisation ist bereits im Gange. Status: %s"
|
||||
|
||||
msgid ""
|
||||
"Unknown item type downloaded - please upgrade Joplin to the latest version"
|
||||
msgstr "Unbekannter Eintrags-Typ heruntergeladen - bitte aktualisiere Joplin"
|
||||
|
||||
msgid "Encrypted"
|
||||
msgstr "Verschlüsselt"
|
||||
|
||||
msgid "Encrypted items cannot be modified"
|
||||
msgstr "Verschlüsselte Objekte können nicht verändert werden"
|
||||
|
||||
msgid "title"
|
||||
msgstr "Titel"
|
||||
|
||||
msgid "updated date"
|
||||
msgstr "Aktualisierungsdatum"
|
||||
|
||||
msgid "Conflicts"
|
||||
msgstr "Konflikte"
|
||||
|
||||
@@ -1297,12 +1391,6 @@ msgid "Notebooks cannot be named \"%s\", which is a reserved title."
|
||||
msgstr ""
|
||||
"Notizbuch kann nicht \"%s\" genannt werden. Dieser Name ist reserviert.."
|
||||
|
||||
msgid "title"
|
||||
msgstr "Titel"
|
||||
|
||||
msgid "updated date"
|
||||
msgstr "Aktualisierungsdatum"
|
||||
|
||||
msgid "created date"
|
||||
msgstr "Erstelldatum"
|
||||
|
||||
@@ -1317,6 +1405,73 @@ msgstr "Kann Notiz nicht zu Notizbuch \"%s\" kopieren"
|
||||
msgid "Cannot move note to \"%s\" notebook"
|
||||
msgstr "Kann Notiz nicht zu Notizbuch \"%s\" verschieben"
|
||||
|
||||
#, javascript-format
|
||||
msgid ""
|
||||
"Attention: If you change this location, make sure you copy all your content "
|
||||
"to it before syncing, otherwise all files will be removed! See the FAQ for "
|
||||
"more details: %s"
|
||||
msgstr ""
|
||||
"Achtung: Stelle sicher, dass Du vor der Synchronisation alle Inhalte an den "
|
||||
"neuen Ablageort kopiert hast, sonst werden alle Dateien gelöscht! Lies auch "
|
||||
"die FAQs hierzu: %s"
|
||||
|
||||
msgid "Synchronisation target"
|
||||
msgstr "Synchronisationsziel"
|
||||
|
||||
msgid ""
|
||||
"The target to synchonise to. Each sync target may have additional parameters "
|
||||
"which are named as `sync.NUM.NAME` (all documented below)."
|
||||
msgstr ""
|
||||
"Das Ziel, mit dem synchronisiert werden soll. Jedes Synchronisationsziel "
|
||||
"kann zusätzliche Parameter haben, die als `sync.NUM.NAME` (alle unten "
|
||||
"dokumentiert) bezeichnet werden."
|
||||
|
||||
msgid "Directory to synchronise with (absolute path)"
|
||||
msgstr "Verzeichnis mit dem synchronisiert werden soll (absoluter Pfad)"
|
||||
|
||||
msgid "Nextcloud WebDAV URL"
|
||||
msgstr "Nextcloud WebDAV-URL"
|
||||
|
||||
msgid "Nextcloud username"
|
||||
msgstr "Nextcloud-Benutzername"
|
||||
|
||||
msgid "Nextcloud password"
|
||||
msgstr "Nextcloud-Passwort"
|
||||
|
||||
msgid "WebDAV URL"
|
||||
msgstr "WebDAV-URL"
|
||||
|
||||
msgid "WebDAV username"
|
||||
msgstr "WebDAV-Benutzername"
|
||||
|
||||
msgid "WebDAV password"
|
||||
msgstr "WebDAV-Passwort"
|
||||
|
||||
msgid "Attachment download behaviour"
|
||||
msgstr "Verhalten für das Herunterladen von Anhängen"
|
||||
|
||||
msgid ""
|
||||
"In \"Manual\" mode, attachments are downloaded only when you click on them. "
|
||||
"In \"Auto\", they are downloaded when you open the note. In \"Always\", all "
|
||||
"the attachments are downloaded whether you open the note or not."
|
||||
msgstr ""
|
||||
"Im \"Manuell\" Modus werden die Anhänge nur heruntergeladen wenn Du auf sie "
|
||||
"klickst. Bei \"Automatisch\" werden sie heruntergeladen sobald die Notiz "
|
||||
"geöffnet wird. Bei \"Immer\" werden die Anhänge heruntergeladen egal ob die "
|
||||
"Notiz geöffnet wird oder nicht."
|
||||
|
||||
msgid "Always"
|
||||
msgstr "Immer"
|
||||
|
||||
msgid "Manual"
|
||||
msgstr "Manuell"
|
||||
|
||||
msgid "Auto"
|
||||
msgstr "Automatisch"
|
||||
|
||||
msgid "Max concurrent connections"
|
||||
msgstr "Maximale Anzahl an gleichzeitigen Verbindungen"
|
||||
|
||||
msgid "Language"
|
||||
msgstr "Sprache"
|
||||
|
||||
@@ -1347,6 +1502,9 @@ msgstr "Sortiere Notizen nach"
|
||||
msgid "Reverse sort order"
|
||||
msgstr "Sortierreihenfolge umdrehen"
|
||||
|
||||
msgid "Sort notebooks by"
|
||||
msgstr "Sortiere Notizbücher nach"
|
||||
|
||||
msgid "Save geo-location with notes"
|
||||
msgstr "Momentanen Standort zusammen mit Notizen speichern"
|
||||
|
||||
@@ -1362,6 +1520,42 @@ msgstr "Fokussiere Inhalt"
|
||||
msgid "When creating a new note:"
|
||||
msgstr "Wenn eine neue Notiz erstellt wird:"
|
||||
|
||||
msgid "Enable soft breaks"
|
||||
msgstr "Aktiviere weiche Zeilenumbrüche"
|
||||
|
||||
msgid "Enable math expressions"
|
||||
msgstr "Aktiviere mathematische Ausdrücke"
|
||||
|
||||
msgid "Enable ==mark== syntax"
|
||||
msgstr "Aktiviere ==mark== Syntax"
|
||||
|
||||
msgid "Enable footnotes"
|
||||
msgstr "Aktiviere Fußnoten"
|
||||
|
||||
msgid "Enable table of contents extension"
|
||||
msgstr "Aktiviere Inhaltsverzeichnis Erweiterung"
|
||||
|
||||
msgid "Enable ~sub~ syntax"
|
||||
msgstr "Aktiviere ~sub~ Syntax"
|
||||
|
||||
msgid "Enable ^sup^ syntax"
|
||||
msgstr "Aktiviere ^sup^ Syntax"
|
||||
|
||||
msgid "Enable deflist syntax"
|
||||
msgstr "Aktiviere deflist Syntax"
|
||||
|
||||
msgid "Enable abbreviation syntax"
|
||||
msgstr "Aktiviere abbreviation Syntax"
|
||||
|
||||
msgid "Enable markdown emoji"
|
||||
msgstr "Aktiviere markdown emoji"
|
||||
|
||||
msgid "Enable ++insert++ syntax"
|
||||
msgstr "Aktiviere ++insert++ Syntax"
|
||||
|
||||
msgid "Enable multimarkdown table extension"
|
||||
msgstr "Aktiviere multimarkdown Tabellen Erweiterung"
|
||||
|
||||
msgid "Show tray icon"
|
||||
msgstr "Zeige Tray-Icon"
|
||||
|
||||
@@ -1401,11 +1595,11 @@ msgid "Automatically update the application"
|
||||
msgstr "Die Applikation automatisch aktualisieren"
|
||||
|
||||
msgid "Get pre-releases when checking for updates"
|
||||
msgstr ""
|
||||
msgstr "Lade auch Vorabversionen herunter"
|
||||
|
||||
#, javascript-format
|
||||
msgid "See the pre-release page for more details: %s"
|
||||
msgstr ""
|
||||
msgstr "Weitere Informationen findest Du auf der Vorabversionsseite: %s"
|
||||
|
||||
msgid "Synchronisation interval"
|
||||
msgstr "Synchronisationsinterval"
|
||||
@@ -1435,55 +1629,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 ""
|
||||
"The path to synchronise with when file system synchronisation is enabled. "
|
||||
"See `sync.target`."
|
||||
msgstr ""
|
||||
"Der Pfad, mit dem synchronisiert werden soll, wenn die Dateisystem-"
|
||||
"Synchronisation aktiviert ist. Siehe `sync.target`."
|
||||
|
||||
msgid "Nextcloud WebDAV URL"
|
||||
msgstr "Nextcloud WebDAV-URL"
|
||||
|
||||
#, javascript-format
|
||||
msgid ""
|
||||
"Attention: If you change this location, make sure you copy all your content "
|
||||
"to it before syncing, otherwise all files will be removed! See the FAQ for "
|
||||
"more details: %s"
|
||||
msgstr ""
|
||||
"Achtung: Stelle sicher, dass Du vor der Synchronisation alle Inhalte an den "
|
||||
"neuen Ablageort kopiert hast, sonst werden alle Dateien gelöscht! Lies auch "
|
||||
"die FAQs hierzu: %s"
|
||||
|
||||
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"
|
||||
|
||||
@@ -1502,29 +1647,41 @@ msgstr ""
|
||||
msgid "Ignore TLS certificate errors"
|
||||
msgstr "Ignoriere TLS-Zertifikatfehler"
|
||||
|
||||
msgid "Enable note history"
|
||||
msgstr "Aktiviere Notizen-Verlauf"
|
||||
|
||||
msgid "days"
|
||||
msgstr "Tage"
|
||||
|
||||
#, javascript-format
|
||||
msgid "%d days"
|
||||
msgstr "%d Tage"
|
||||
|
||||
msgid "Keep note history for"
|
||||
msgstr "Speicher Notizen-Verlauf für"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Invalid option value: \"%s\". Possible values are: %s."
|
||||
msgstr "Ungültiger Optionswert: \"%s\". Mögliche Werte sind: %s."
|
||||
|
||||
#, fuzzy
|
||||
msgid "General"
|
||||
msgstr "Allgemeine Einstellungen"
|
||||
msgstr "Allgemeines"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Synchronisation"
|
||||
msgstr "Status der Synchronisation"
|
||||
msgstr "Synchronisation"
|
||||
|
||||
msgid "Appearance"
|
||||
msgstr ""
|
||||
msgstr "Erscheinungsbild"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Note"
|
||||
msgstr "Notizbücher"
|
||||
msgstr "Notiz"
|
||||
|
||||
# Please note: The term 'Location' is assumed to be the geographical location where the note has been created. For this the german word 'Standort' fits better than the previously used 'Ablageort'. The latter one is used for the folder where files are stored.
|
||||
#, fuzzy
|
||||
msgid "Plugins"
|
||||
msgstr "Zusatzprogramme"
|
||||
|
||||
# 'Applikation' or 'Anwendung' - both translations are correct.
|
||||
msgid "Application"
|
||||
msgstr "Standort"
|
||||
msgstr "Applikation"
|
||||
|
||||
#, javascript-format
|
||||
msgid "The tag \"%s\" already exists. Please choose a different name."
|
||||
@@ -1546,6 +1703,9 @@ msgstr "Evernote Export Datei"
|
||||
msgid "Json Export Directory"
|
||||
msgstr "Json Export Verzeichnis"
|
||||
|
||||
msgid "File"
|
||||
msgstr "Datei"
|
||||
|
||||
msgid "Directory"
|
||||
msgstr "Verzeichnis"
|
||||
|
||||
@@ -1572,13 +1732,12 @@ msgid "Please specify the notebook where the notes should be imported to."
|
||||
msgstr ""
|
||||
"Bitte wähle aus, wohin der Synchronisations-Status exportiert werden soll."
|
||||
|
||||
msgid "Restored Notes"
|
||||
msgstr "Wiederhergestellte Notizen"
|
||||
|
||||
msgid "Items that cannot be synchronised"
|
||||
msgstr "Objekte können nicht synchronisiert werden"
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s (%s): %s"
|
||||
msgstr "%s (%s): %s"
|
||||
|
||||
msgid ""
|
||||
"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 "
|
||||
@@ -1588,6 +1747,27 @@ msgstr ""
|
||||
"Synchronisationsziel hochgeladen. Um diese Objekte zu finden, suchst du "
|
||||
"entweder nach dem Titel oder der ID (die oben in Klammern angezeigt wird)."
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s (%s) could not be uploaded: %s"
|
||||
msgstr "%s (%s) konnte nicht hochgeladen werden: %s"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Item \"%s\" could not be downloaded: %s"
|
||||
msgstr "Eintrag \"%s\" konnte nicht heruntergeladen werden: %s"
|
||||
|
||||
msgid "Items that cannot be decrypted"
|
||||
msgstr "Objekte, die nicht entschlüsselt werden konnten"
|
||||
|
||||
msgid ""
|
||||
"Joplin failed to decrypt these items multiple times, possibly because they "
|
||||
"are corrupted or too large. These items will remain on the device but Joplin "
|
||||
"will no longer attempt to decrypt them."
|
||||
msgstr ""
|
||||
"Joplin konnte diese Objekte trotz mehrfacher Versuche nicht entschlüsseln, "
|
||||
"weil sie wahrscheinlich entweder kaputt oder zu groß sind. Diese Objekte "
|
||||
"bleiben auf dem Gerat, aber Joplin wird nicht mehr versuchen sie zu "
|
||||
"entschlüsseln."
|
||||
|
||||
msgid "Sync status (synced items / total items)"
|
||||
msgstr "Synchronisationsstatus (synchronisierte Objekte / gesamte Objekte)"
|
||||
|
||||
@@ -1687,7 +1867,7 @@ msgstr ""
|
||||
"korrekt sind und das das Synchronisierungsziel erreichbar ist. Fehlermeldung:"
|
||||
|
||||
msgid "The application has been authorised!"
|
||||
msgstr "Das Programm wurde erfolgreich autorisiert."
|
||||
msgstr "Das Programm wurde erfolgreich autorisiert!"
|
||||
|
||||
#, javascript-format
|
||||
msgid ""
|
||||
@@ -1713,6 +1893,9 @@ msgstr "Neue Schlagwörter:"
|
||||
msgid "Type new tags or select from list"
|
||||
msgstr "Neues Schlagwort eingeben oder aus der Liste auswählen"
|
||||
|
||||
msgid "More information"
|
||||
msgstr "Weitere Information"
|
||||
|
||||
msgid ""
|
||||
"To work correctly, the app needs the following permissions. Please enable "
|
||||
"them in your phone settings, in Apps > Joplin > Permissions"
|
||||
@@ -1738,10 +1921,6 @@ msgstr ""
|
||||
msgid "Joplin website"
|
||||
msgstr "Website von Joplin"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Joplin v%s"
|
||||
msgstr "Joplin v%s"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Database v%s"
|
||||
msgstr "Datenbank v%s"
|
||||
@@ -1826,9 +2005,6 @@ msgstr "In eine Notiz umwandeln"
|
||||
msgid "Convert to todo"
|
||||
msgstr "In ein To-Do umwandeln"
|
||||
|
||||
msgid "Copy Markdown link"
|
||||
msgstr "Markdown-Link kopieren"
|
||||
|
||||
msgid "Hide metadata"
|
||||
msgstr "Metadaten verstecken"
|
||||
|
||||
@@ -1841,6 +2017,9 @@ msgstr "Auf der Karte anzeigen"
|
||||
msgid "Go to source URL"
|
||||
msgstr "Zur Quell-URL gehen"
|
||||
|
||||
msgid "Edit"
|
||||
msgstr "Bearbeiten"
|
||||
|
||||
msgid "Delete notebook"
|
||||
msgstr "Notizbuch löschen"
|
||||
|
||||
@@ -1866,23 +2045,30 @@ msgstr ""
|
||||
msgid "Welcome"
|
||||
msgstr "Willkommen"
|
||||
|
||||
#~ 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 "Duplicate"
|
||||
#~ msgstr "Duplizieren"
|
||||
#~ msgid "Some items cannot be decrypted."
|
||||
#~ msgstr "Einige Objekte können nicht entschlüsselt werden."
|
||||
|
||||
#~ msgid "%s - Copy"
|
||||
#~ msgstr "%s - Kopieren"
|
||||
#~ msgid "%s (%s): %s"
|
||||
#~ msgstr "%s (%s): %s"
|
||||
|
||||
#~ msgid "Switch between note and to-do type"
|
||||
#~ msgstr "Zwischen Notiz und To-Do Typ wechseln"
|
||||
#~ msgid "Table of contents"
|
||||
#~ msgstr "Inhaltsverzeichnis"
|
||||
|
||||
#~ msgid "Switch to note type"
|
||||
#~ msgstr "Zu Notiz-Typ wechseln"
|
||||
#~ msgid ""
|
||||
#~ "The path to synchronise with when file system synchronisation is enabled. "
|
||||
#~ "See `sync.target`."
|
||||
#~ msgstr ""
|
||||
#~ "Der Pfad, mit dem synchronisiert werden soll, wenn die Dateisystem-"
|
||||
#~ "Synchronisation aktiviert ist. Siehe `sync.target`."
|
||||
|
||||
#~ msgid "Switch to to-do type"
|
||||
#~ msgstr "Zu To-Do-Typ wechseln"
|
||||
#~ msgid "Joplin v%s"
|
||||
#~ msgstr "Joplin v%s"
|
||||
|
||||
#~ msgid "Remove?"
|
||||
#~ msgstr "Löschen?"
|
||||
|
||||
#~ msgid "Delete notes?"
|
||||
#~ msgstr "Notizen löschen?"
|
||||
@@ -1987,9 +2173,6 @@ msgstr "Willkommen"
|
||||
#~ msgid "Delete notebook?"
|
||||
#~ msgstr "Notizbuch löschen?"
|
||||
|
||||
#~ msgid "Delete notebook \"%s\"?"
|
||||
#~ msgstr "Notizbuch \"%s\" löschen?"
|
||||
|
||||
#~ msgid "File system synchronisation target directory"
|
||||
#~ msgstr "Dateisystem-Synchronisation Zielpfad"
|
||||
|
||||
|
||||
@@ -119,7 +119,7 @@ msgstr ""
|
||||
|
||||
msgid ""
|
||||
"Manages E2EE configuration. Commands are `enable`, `disable`, `decrypt`, "
|
||||
"`status` and `target-status`."
|
||||
"`status`, `decrypt-file` and `target-status`."
|
||||
msgstr ""
|
||||
|
||||
msgid "Enter master password:"
|
||||
@@ -527,7 +527,7 @@ msgstr ""
|
||||
msgid "PDF File"
|
||||
msgstr ""
|
||||
|
||||
msgid "File"
|
||||
msgid "Synchronisation status"
|
||||
msgstr ""
|
||||
|
||||
msgid "New note"
|
||||
@@ -539,13 +539,41 @@ msgstr ""
|
||||
msgid "New notebook"
|
||||
msgstr ""
|
||||
|
||||
msgid "Print"
|
||||
msgstr ""
|
||||
|
||||
msgid "General Options"
|
||||
msgstr ""
|
||||
|
||||
msgid "Encryption options"
|
||||
msgstr ""
|
||||
|
||||
msgid "Web clipper options"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s %s (%s, %s)"
|
||||
msgstr ""
|
||||
|
||||
msgid "&File"
|
||||
msgstr ""
|
||||
|
||||
msgid "About Joplin"
|
||||
msgstr ""
|
||||
|
||||
msgid "Preferences..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Check for updates..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Import"
|
||||
msgstr ""
|
||||
|
||||
msgid "Export"
|
||||
msgstr ""
|
||||
|
||||
msgid "Print"
|
||||
msgid "Synchronise"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
@@ -555,7 +583,10 @@ msgstr ""
|
||||
msgid "Quit"
|
||||
msgstr ""
|
||||
|
||||
msgid "Edit"
|
||||
msgid "Close Window"
|
||||
msgstr ""
|
||||
|
||||
msgid "&Edit"
|
||||
msgstr ""
|
||||
|
||||
msgid "Copy"
|
||||
@@ -591,7 +622,7 @@ msgstr ""
|
||||
msgid "Search in current note"
|
||||
msgstr ""
|
||||
|
||||
msgid "View"
|
||||
msgid "&View"
|
||||
msgstr ""
|
||||
|
||||
msgid "Toggle sidebar"
|
||||
@@ -603,22 +634,10 @@ msgstr ""
|
||||
msgid "Focus"
|
||||
msgstr ""
|
||||
|
||||
msgid "Tools"
|
||||
msgid "&Tools"
|
||||
msgstr ""
|
||||
|
||||
msgid "Synchronisation status"
|
||||
msgstr ""
|
||||
|
||||
msgid "Web clipper options"
|
||||
msgstr ""
|
||||
|
||||
msgid "Encryption options"
|
||||
msgstr ""
|
||||
|
||||
msgid "General Options"
|
||||
msgstr ""
|
||||
|
||||
msgid "Help"
|
||||
msgid "&Help"
|
||||
msgstr ""
|
||||
|
||||
msgid "Website and documentation"
|
||||
@@ -627,14 +646,7 @@ msgstr ""
|
||||
msgid "Make a donation"
|
||||
msgstr ""
|
||||
|
||||
msgid "Check for updates..."
|
||||
msgstr ""
|
||||
|
||||
msgid "About Joplin"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s %s (%s, %s)"
|
||||
msgid "Toggle development tools"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
@@ -661,11 +673,11 @@ msgid "An update is available, do you want to download it now?"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Your version: v%s"
|
||||
msgid "Your version: %s"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "New version: v%s"
|
||||
msgid "New version: %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Yes"
|
||||
@@ -738,10 +750,10 @@ msgstr ""
|
||||
msgid "Notes and settings are stored in: %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Browse..."
|
||||
msgid "Check synchronisation configuration"
|
||||
msgstr ""
|
||||
|
||||
msgid "Check synchronisation configuration"
|
||||
msgid "Browse..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Apply"
|
||||
@@ -845,9 +857,6 @@ msgstr ""
|
||||
msgid "Add or remove tags:"
|
||||
msgstr ""
|
||||
|
||||
msgid "Separate each tag by a comma."
|
||||
msgstr ""
|
||||
|
||||
msgid "Rename notebook:"
|
||||
msgstr ""
|
||||
|
||||
@@ -869,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"
|
||||
@@ -888,9 +897,31 @@ msgstr ""
|
||||
msgid "URL"
|
||||
msgstr ""
|
||||
|
||||
msgid "Note History"
|
||||
msgstr ""
|
||||
|
||||
msgid "Previous versions of this note"
|
||||
msgstr ""
|
||||
|
||||
msgid "Note properties"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "The note \"%s\" has been successfully restored to the notebook \"%s\"."
|
||||
msgstr ""
|
||||
|
||||
msgid "This note has no history"
|
||||
msgstr ""
|
||||
|
||||
msgid "Restore"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid ""
|
||||
"Click \"%s\" to restore the note. It will be copied in the notebook named "
|
||||
"\"%s\". The current version of the note will not be replaced or modified."
|
||||
msgstr ""
|
||||
|
||||
msgid "Open..."
|
||||
msgstr ""
|
||||
|
||||
@@ -1009,7 +1040,15 @@ msgstr ""
|
||||
msgid "Clipper Options"
|
||||
msgstr ""
|
||||
|
||||
msgid "Remove this tag from all the notes?"
|
||||
#, javascript-format
|
||||
msgid ""
|
||||
"Delete notebook \"%s\"?\n"
|
||||
"\n"
|
||||
"All notes and sub-notebooks within this notebook will also be deleted."
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Remove tag \"%s\" from all notes?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Remove this search from the sidebar?"
|
||||
@@ -1021,9 +1060,6 @@ msgstr ""
|
||||
msgid "Rename"
|
||||
msgstr ""
|
||||
|
||||
msgid "Synchronise"
|
||||
msgstr ""
|
||||
|
||||
msgid "Notebooks"
|
||||
msgstr ""
|
||||
|
||||
@@ -1032,12 +1068,53 @@ 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 ""
|
||||
|
||||
msgid "Duplicate"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s - Copy"
|
||||
msgstr ""
|
||||
|
||||
msgid "Switch between note and to-do type"
|
||||
msgstr ""
|
||||
|
||||
msgid "Switch to note type"
|
||||
msgstr ""
|
||||
|
||||
msgid "Switch to to-do type"
|
||||
msgstr ""
|
||||
|
||||
msgid "Copy Markdown link"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Delete note \"%s\"?"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Delete these %d notes?"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"Type a note title to jump to it. Or type # followed by a tag name, or @ "
|
||||
"followed by a notebook name."
|
||||
msgstr ""
|
||||
|
||||
msgid "Goto Anything..."
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Usage: %s"
|
||||
msgstr ""
|
||||
@@ -1142,12 +1219,22 @@ msgstr ""
|
||||
msgid "Synchronisation is already in progress. State: %s"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"Unknown item type downloaded - please upgrade Joplin to the latest version"
|
||||
msgstr ""
|
||||
|
||||
msgid "Encrypted"
|
||||
msgstr ""
|
||||
|
||||
msgid "Encrypted items cannot be modified"
|
||||
msgstr ""
|
||||
|
||||
msgid "title"
|
||||
msgstr ""
|
||||
|
||||
msgid "updated date"
|
||||
msgstr ""
|
||||
|
||||
msgid "Conflicts"
|
||||
msgstr ""
|
||||
|
||||
@@ -1158,12 +1245,6 @@ msgstr ""
|
||||
msgid "Notebooks cannot be named \"%s\", which is a reserved title."
|
||||
msgstr ""
|
||||
|
||||
msgid "title"
|
||||
msgstr ""
|
||||
|
||||
msgid "updated date"
|
||||
msgstr ""
|
||||
|
||||
msgid "created date"
|
||||
msgstr ""
|
||||
|
||||
@@ -1178,6 +1259,63 @@ msgstr ""
|
||||
msgid "Cannot move note to \"%s\" notebook"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid ""
|
||||
"Attention: If you change this location, make sure you copy all your content "
|
||||
"to it before syncing, otherwise all files will be removed! See the FAQ for "
|
||||
"more details: %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Synchronisation target"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"The target to synchonise to. Each sync target may have additional parameters "
|
||||
"which are named as `sync.NUM.NAME` (all documented below)."
|
||||
msgstr ""
|
||||
|
||||
msgid "Directory to synchronise with (absolute path)"
|
||||
msgstr ""
|
||||
|
||||
msgid "Nextcloud WebDAV URL"
|
||||
msgstr ""
|
||||
|
||||
msgid "Nextcloud username"
|
||||
msgstr ""
|
||||
|
||||
msgid "Nextcloud password"
|
||||
msgstr ""
|
||||
|
||||
msgid "WebDAV URL"
|
||||
msgstr ""
|
||||
|
||||
msgid "WebDAV username"
|
||||
msgstr ""
|
||||
|
||||
msgid "WebDAV password"
|
||||
msgstr ""
|
||||
|
||||
msgid "Attachment download behaviour"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"In \"Manual\" mode, attachments are downloaded only when you click on them. "
|
||||
"In \"Auto\", they are downloaded when you open the note. In \"Always\", all "
|
||||
"the attachments are downloaded whether you open the note or not."
|
||||
msgstr ""
|
||||
|
||||
msgid "Always"
|
||||
msgstr ""
|
||||
|
||||
msgid "Manual"
|
||||
msgstr ""
|
||||
|
||||
msgid "Auto"
|
||||
msgstr ""
|
||||
|
||||
msgid "Max concurrent connections"
|
||||
msgstr ""
|
||||
|
||||
msgid "Language"
|
||||
msgstr ""
|
||||
|
||||
@@ -1208,6 +1346,9 @@ msgstr ""
|
||||
msgid "Reverse sort order"
|
||||
msgstr ""
|
||||
|
||||
msgid "Sort notebooks by"
|
||||
msgstr ""
|
||||
|
||||
msgid "Save geo-location with notes"
|
||||
msgstr ""
|
||||
|
||||
@@ -1223,6 +1364,42 @@ msgstr ""
|
||||
msgid "When creating a new note:"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable soft breaks"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable math expressions"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable ==mark== syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable footnotes"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable table of contents extension"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable ~sub~ syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable ^sup^ syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable deflist syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable abbreviation syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable markdown emoji"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable ++insert++ syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable multimarkdown table extension"
|
||||
msgstr ""
|
||||
|
||||
msgid "Show tray icon"
|
||||
msgstr ""
|
||||
|
||||
@@ -1288,47 +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 ""
|
||||
"The path to synchronise with when file system synchronisation is enabled. "
|
||||
"See `sync.target`."
|
||||
msgstr ""
|
||||
|
||||
msgid "Nextcloud WebDAV URL"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid ""
|
||||
"Attention: If you change this location, make sure you copy all your content "
|
||||
"to it before syncing, otherwise all files will be removed! See the FAQ for "
|
||||
"more details: %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Nextcloud username"
|
||||
msgstr ""
|
||||
|
||||
msgid "Nextcloud password"
|
||||
msgstr ""
|
||||
|
||||
msgid "WebDAV URL"
|
||||
msgstr ""
|
||||
|
||||
msgid "WebDAV username"
|
||||
msgstr ""
|
||||
|
||||
msgid "WebDAV password"
|
||||
msgstr ""
|
||||
|
||||
msgid "Custom TLS certificates"
|
||||
msgstr ""
|
||||
|
||||
@@ -1342,6 +1478,19 @@ msgstr ""
|
||||
msgid "Ignore TLS certificate errors"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable note history"
|
||||
msgstr ""
|
||||
|
||||
msgid "days"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "%d days"
|
||||
msgstr ""
|
||||
|
||||
msgid "Keep note history for"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Invalid option value: \"%s\". Possible values are: %s."
|
||||
msgstr ""
|
||||
@@ -1358,6 +1507,9 @@ msgstr ""
|
||||
msgid "Note"
|
||||
msgstr ""
|
||||
|
||||
msgid "Plugins"
|
||||
msgstr ""
|
||||
|
||||
msgid "Application"
|
||||
msgstr ""
|
||||
|
||||
@@ -1380,6 +1532,9 @@ msgstr ""
|
||||
msgid "Json Export Directory"
|
||||
msgstr ""
|
||||
|
||||
msgid "File"
|
||||
msgstr ""
|
||||
|
||||
msgid "Directory"
|
||||
msgstr ""
|
||||
|
||||
@@ -1403,11 +1558,10 @@ msgstr ""
|
||||
msgid "Please specify the notebook where the notes should be imported to."
|
||||
msgstr ""
|
||||
|
||||
msgid "Items that cannot be synchronised"
|
||||
msgid "Restored Notes"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s (%s): %s"
|
||||
msgid "Items that cannot be synchronised"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
@@ -1416,6 +1570,23 @@ msgid ""
|
||||
"(which is displayed in brackets above)."
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s (%s) could not be uploaded: %s"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Item \"%s\" could not be downloaded: %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Items that cannot be decrypted"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"Joplin failed to decrypt these items multiple times, possibly because they "
|
||||
"are corrupted or too large. These items will remain on the device but Joplin "
|
||||
"will no longer attempt to decrypt them."
|
||||
msgstr ""
|
||||
|
||||
msgid "Sync status (synced items / total items)"
|
||||
msgstr ""
|
||||
|
||||
@@ -1531,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"
|
||||
@@ -1550,10 +1724,6 @@ msgstr ""
|
||||
msgid "Joplin website"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Joplin v%s"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Database v%s"
|
||||
msgstr ""
|
||||
@@ -1637,9 +1807,6 @@ msgstr ""
|
||||
msgid "Convert to todo"
|
||||
msgstr ""
|
||||
|
||||
msgid "Copy Markdown link"
|
||||
msgstr ""
|
||||
|
||||
msgid "Hide metadata"
|
||||
msgstr ""
|
||||
|
||||
@@ -1652,6 +1819,9 @@ msgstr ""
|
||||
msgid "Go to source URL"
|
||||
msgstr ""
|
||||
|
||||
msgid "Edit"
|
||||
msgstr ""
|
||||
|
||||
msgid "Delete notebook"
|
||||
msgstr ""
|
||||
|
||||
|
||||
1876
CliClient/locales/en_US.po
Normal file
1876
CliClient/locales/en_US.po
Normal file
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -125,9 +125,10 @@ msgstr "Markatu zeregina egindakotzat."
|
||||
msgid "Note is not a to-do: \"%s\""
|
||||
msgstr "Oharra ez da zeregina: \"%s\""
|
||||
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
"Manages E2EE configuration. Commands are `enable`, `disable`, `decrypt`, "
|
||||
"`status` and `target-status`."
|
||||
"`status`, `decrypt-file` and `target-status`."
|
||||
msgstr ""
|
||||
"E2EEren konfigurazioa erabiltzen du. Komandoak dira `enable`, `disable`, "
|
||||
"`decrypt`, `status` eta `target-status`."
|
||||
@@ -604,8 +605,8 @@ msgstr ""
|
||||
msgid "PDF File"
|
||||
msgstr "Fitxategia"
|
||||
|
||||
msgid "File"
|
||||
msgstr "Fitxategia"
|
||||
msgid "Synchronisation status"
|
||||
msgstr "Sinkronizazioaren egoera"
|
||||
|
||||
msgid "New note"
|
||||
msgstr "Ohar berria"
|
||||
@@ -616,6 +617,35 @@ msgstr "Zeregin berria"
|
||||
msgid "New notebook"
|
||||
msgstr "Koaderno berria"
|
||||
|
||||
msgid "Print"
|
||||
msgstr ""
|
||||
|
||||
msgid "General Options"
|
||||
msgstr "Ezarpenak"
|
||||
|
||||
msgid "Encryption options"
|
||||
msgstr "Zifratzeko aukerak"
|
||||
|
||||
msgid "Web clipper options"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s %s (%s, %s)"
|
||||
msgstr "%s %s (%s, %s)"
|
||||
|
||||
#, fuzzy
|
||||
msgid "&File"
|
||||
msgstr "Fitxategia"
|
||||
|
||||
msgid "About Joplin"
|
||||
msgstr "Joplin-i buruz"
|
||||
|
||||
msgid "Preferences..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Check for updates..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Import"
|
||||
msgstr "Inportatu"
|
||||
|
||||
@@ -623,8 +653,8 @@ msgstr "Inportatu"
|
||||
msgid "Export"
|
||||
msgstr "Inportatu"
|
||||
|
||||
msgid "Print"
|
||||
msgstr ""
|
||||
msgid "Synchronise"
|
||||
msgstr "Sinkronizatu"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Hide %s"
|
||||
@@ -633,7 +663,11 @@ msgstr ""
|
||||
msgid "Quit"
|
||||
msgstr "Irten"
|
||||
|
||||
msgid "Edit"
|
||||
msgid "Close Window"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "&Edit"
|
||||
msgstr "Editatu"
|
||||
|
||||
msgid "Copy"
|
||||
@@ -671,7 +705,7 @@ msgstr "Bilatu ohar guztietan"
|
||||
msgid "Search in current note"
|
||||
msgstr "Bilatu ohar guztietan"
|
||||
|
||||
msgid "View"
|
||||
msgid "&View"
|
||||
msgstr ""
|
||||
|
||||
msgid "Toggle sidebar"
|
||||
@@ -683,22 +717,12 @@ msgstr ""
|
||||
msgid "Focus"
|
||||
msgstr ""
|
||||
|
||||
msgid "Tools"
|
||||
#, fuzzy
|
||||
msgid "&Tools"
|
||||
msgstr "Tresnak"
|
||||
|
||||
msgid "Synchronisation status"
|
||||
msgstr "Sinkronizazioaren egoera"
|
||||
|
||||
msgid "Web clipper options"
|
||||
msgstr ""
|
||||
|
||||
msgid "Encryption options"
|
||||
msgstr "Zifratzeko aukerak"
|
||||
|
||||
msgid "General Options"
|
||||
msgstr "Ezarpenak"
|
||||
|
||||
msgid "Help"
|
||||
#, fuzzy
|
||||
msgid "&Help"
|
||||
msgstr "Laguntza"
|
||||
|
||||
msgid "Website and documentation"
|
||||
@@ -708,16 +732,9 @@ msgstr "Web orria eta dokumentazioa (en)"
|
||||
msgid "Make a donation"
|
||||
msgstr "Web orria eta dokumentazioa (en)"
|
||||
|
||||
msgid "Check for updates..."
|
||||
msgid "Toggle development tools"
|
||||
msgstr ""
|
||||
|
||||
msgid "About Joplin"
|
||||
msgstr "Joplin-i buruz"
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s %s (%s, %s)"
|
||||
msgstr "%s %s (%s, %s)"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Open %s"
|
||||
msgstr "On %s: %s"
|
||||
@@ -742,11 +759,11 @@ msgid "An update is available, do you want to download it now?"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Your version: v%s"
|
||||
msgid "Your version: %s"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "New version: v%s"
|
||||
msgid "New version: %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Yes"
|
||||
@@ -821,13 +838,13 @@ msgstr ""
|
||||
msgid "Notes and settings are stored in: %s"
|
||||
msgstr "Oharrak eta ezarpenak hemen daude gordeta: %s"
|
||||
|
||||
msgid "Browse..."
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Check synchronisation configuration"
|
||||
msgstr "Sinkronizazioa utzi"
|
||||
|
||||
msgid "Browse..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Apply"
|
||||
msgstr ""
|
||||
|
||||
@@ -944,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:"
|
||||
|
||||
@@ -970,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"
|
||||
@@ -989,9 +1004,33 @@ msgstr ""
|
||||
msgid "URL"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Note History"
|
||||
msgstr "Koadernoak"
|
||||
|
||||
msgid "Previous versions of this note"
|
||||
msgstr ""
|
||||
|
||||
msgid "Note properties"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "The note \"%s\" has been successfully restored to the notebook \"%s\"."
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "This note has no history"
|
||||
msgstr "Ohar hau mugitua izan da:"
|
||||
|
||||
msgid "Restore"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid ""
|
||||
"Click \"%s\" to restore the note. It will be copied in the notebook named "
|
||||
"\"%s\". The current version of the note will not be replaced or modified."
|
||||
msgstr ""
|
||||
|
||||
msgid "Open..."
|
||||
msgstr ""
|
||||
|
||||
@@ -1116,7 +1155,15 @@ msgstr "Zifratzeko aukerak"
|
||||
msgid "Clipper Options"
|
||||
msgstr "Ezarpenak"
|
||||
|
||||
msgid "Remove this tag from all the notes?"
|
||||
#, fuzzy, javascript-format
|
||||
msgid ""
|
||||
"Delete notebook \"%s\"?\n"
|
||||
"\n"
|
||||
"All notes and sub-notebooks within this notebook will also be deleted."
|
||||
msgstr "Koadernoa ezabatu? Dituen ohar guztiak ere ezabatuko dira."
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Remove tag \"%s\" from all notes?"
|
||||
msgstr "Kendu etiketa hori ohar guztietatik?"
|
||||
|
||||
msgid "Remove this search from the sidebar?"
|
||||
@@ -1128,24 +1175,65 @@ msgstr "Ezabatu"
|
||||
msgid "Rename"
|
||||
msgstr "Berrizendatu"
|
||||
|
||||
msgid "Synchronise"
|
||||
msgstr "Sinkronizatu"
|
||||
|
||||
msgid "Notebooks"
|
||||
msgstr "Koadernoak"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Decrypting items: %d/%d"
|
||||
msgstr "Itemak eskuratuta: %d%d."
|
||||
msgstr "Itemak eskuratuta: %d/%d"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Fetching resources: %d"
|
||||
msgstr "Baliabideak: %d."
|
||||
msgid "Fetching resources: %d/%d"
|
||||
msgstr "Baliabideak: %d/%d"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Please select where the sync status should be exported to"
|
||||
msgstr "Aukeratu nora esportatu sinkronizazioaren egoera, mesedez"
|
||||
|
||||
msgid "Retry"
|
||||
msgstr ""
|
||||
|
||||
msgid "Add or remove tags"
|
||||
msgstr "Gehitu edo ezabatu etiketak"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Duplicate"
|
||||
msgstr "Irten aplikaziotik"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "%s - Copy"
|
||||
msgstr "Kopiatu"
|
||||
|
||||
msgid "Switch between note and to-do type"
|
||||
msgstr "Aldatu oharra eta zeregin eren artean."
|
||||
|
||||
#, fuzzy
|
||||
msgid "Switch to note type"
|
||||
msgstr "Aldatu oharra eta zeregin eren artean."
|
||||
|
||||
#, fuzzy
|
||||
msgid "Switch to to-do type"
|
||||
msgstr "Aldatu oharra eta zeregin eren artean."
|
||||
|
||||
msgid "Copy Markdown link"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Delete note \"%s\"?"
|
||||
msgstr "Oharrak ezabatu?"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Delete these %d notes?"
|
||||
msgstr "Oharrok ezabatu?"
|
||||
|
||||
msgid ""
|
||||
"Type a note title to jump to it. Or type # followed by a tag name, or @ "
|
||||
"followed by a notebook name."
|
||||
msgstr ""
|
||||
|
||||
msgid "Goto Anything..."
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Usage: %s"
|
||||
msgstr "Erabili: %s"
|
||||
@@ -1259,12 +1347,24 @@ msgstr ""
|
||||
msgid "Synchronisation is already in progress. State: %s"
|
||||
msgstr "Sinkronizazioa hasita dago. Egoera: %s"
|
||||
|
||||
msgid ""
|
||||
"Unknown item type downloaded - please upgrade Joplin to the latest version"
|
||||
msgstr ""
|
||||
|
||||
msgid "Encrypted"
|
||||
msgstr "Zifratuta"
|
||||
|
||||
msgid "Encrypted items cannot be modified"
|
||||
msgstr "Zifratutako itemak ezin aldatu daitezke"
|
||||
|
||||
#, fuzzy
|
||||
msgid "title"
|
||||
msgstr "Titulu gabekoa"
|
||||
|
||||
#, fuzzy
|
||||
msgid "updated date"
|
||||
msgstr "Eguneratuta: %d."
|
||||
|
||||
msgid "Conflicts"
|
||||
msgstr "Gatazkak"
|
||||
|
||||
@@ -1277,14 +1377,6 @@ msgid "Notebooks cannot be named \"%s\", which is a reserved title."
|
||||
msgstr ""
|
||||
"Koadernoak ezin izendatu daitezke \"%s\", izen hori Joplinek gordeta dauka"
|
||||
|
||||
#, fuzzy
|
||||
msgid "title"
|
||||
msgstr "Titulu gabekoa"
|
||||
|
||||
#, fuzzy
|
||||
msgid "updated date"
|
||||
msgstr "Eguneratuta: %d."
|
||||
|
||||
#, fuzzy
|
||||
msgid "created date"
|
||||
msgstr "Sortuta: %d."
|
||||
@@ -1300,6 +1392,69 @@ msgstr "Ezin kopia daiteke oharra \"%s\" koadernora"
|
||||
msgid "Cannot move note to \"%s\" notebook"
|
||||
msgstr "Ezin eraman daiteke oharra \"%s\" koadernora"
|
||||
|
||||
#, javascript-format
|
||||
msgid ""
|
||||
"Attention: If you change this location, make sure you copy all your content "
|
||||
"to it before syncing, otherwise all files will be removed! See the FAQ for "
|
||||
"more details: %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Synchronisation target"
|
||||
msgstr "Sinkronizazio helbudua"
|
||||
|
||||
msgid ""
|
||||
"The target to synchonise to. Each sync target may have additional parameters "
|
||||
"which are named as `sync.NUM.NAME` (all documented below)."
|
||||
msgstr ""
|
||||
"Sinkronizazio helburua. Sinkronizazio aukera bakoitzak izan ditzake "
|
||||
"parametro gehigarriak, horrela izendatuta `sync.NUM.NAME` (dena beherago "
|
||||
"dokumentatuta)."
|
||||
|
||||
msgid "Directory to synchronise with (absolute path)"
|
||||
msgstr "Sinkronizatzeko direktorioa (bide-izena osorik)"
|
||||
|
||||
msgid "Nextcloud WebDAV URL"
|
||||
msgstr "Nextcloud WebDAV URL"
|
||||
|
||||
msgid "Nextcloud username"
|
||||
msgstr "Nextcloud erabiltzaile-izena"
|
||||
|
||||
msgid "Nextcloud password"
|
||||
msgstr "Nextcloud pasahitza"
|
||||
|
||||
#, fuzzy
|
||||
msgid "WebDAV URL"
|
||||
msgstr "Nextcloud WebDAV URL"
|
||||
|
||||
#, fuzzy
|
||||
msgid "WebDAV username"
|
||||
msgstr "Nextcloud erabiltzaile-izena"
|
||||
|
||||
#, fuzzy
|
||||
msgid "WebDAV password"
|
||||
msgstr "Ezarri pasahitza"
|
||||
|
||||
msgid "Attachment download behaviour"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"In \"Manual\" mode, attachments are downloaded only when you click on them. "
|
||||
"In \"Auto\", they are downloaded when you open the note. In \"Always\", all "
|
||||
"the attachments are downloaded whether you open the note or not."
|
||||
msgstr ""
|
||||
|
||||
msgid "Always"
|
||||
msgstr ""
|
||||
|
||||
msgid "Manual"
|
||||
msgstr ""
|
||||
|
||||
msgid "Auto"
|
||||
msgstr ""
|
||||
|
||||
msgid "Max concurrent connections"
|
||||
msgstr ""
|
||||
|
||||
msgid "Language"
|
||||
msgstr "Hizkuntza"
|
||||
|
||||
@@ -1333,6 +1488,10 @@ msgstr ""
|
||||
msgid "Reverse sort order"
|
||||
msgstr "Alderantziz antolatzen du."
|
||||
|
||||
#, fuzzy
|
||||
msgid "Sort notebooks by"
|
||||
msgstr "Editatu koadernoa"
|
||||
|
||||
msgid "Save geo-location with notes"
|
||||
msgstr "Gore geokokapena oharrekin"
|
||||
|
||||
@@ -1350,6 +1509,43 @@ msgstr ""
|
||||
msgid "When creating a new note:"
|
||||
msgstr "Ohar berria sortzen du."
|
||||
|
||||
msgid "Enable soft breaks"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Enable math expressions"
|
||||
msgstr "Zifratua gaitu"
|
||||
|
||||
msgid "Enable ==mark== syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable footnotes"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable table of contents extension"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable ~sub~ syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable ^sup^ syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable deflist syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable abbreviation syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable markdown emoji"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable ++insert++ syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable multimarkdown table extension"
|
||||
msgstr ""
|
||||
|
||||
msgid "Show tray icon"
|
||||
msgstr ""
|
||||
|
||||
@@ -1421,54 +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 ""
|
||||
"The path to synchronise with when file system synchronisation is enabled. "
|
||||
"See `sync.target`."
|
||||
msgstr ""
|
||||
"Sinkronizazio sistema gaituta dagoenerako bide-izena. Ikus `sync.target`."
|
||||
|
||||
msgid "Nextcloud WebDAV URL"
|
||||
msgstr "Nextcloud WebDAV URL"
|
||||
|
||||
#, javascript-format
|
||||
msgid ""
|
||||
"Attention: If you change this location, make sure you copy all your content "
|
||||
"to it before syncing, otherwise all files will be removed! See the FAQ for "
|
||||
"more details: %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Nextcloud username"
|
||||
msgstr "Nextcloud erabiltzaile-izena"
|
||||
|
||||
msgid "Nextcloud password"
|
||||
msgstr "Nextcloud pasahitza"
|
||||
|
||||
#, fuzzy
|
||||
msgid "WebDAV URL"
|
||||
msgstr "Nextcloud WebDAV URL"
|
||||
|
||||
#, fuzzy
|
||||
msgid "WebDAV username"
|
||||
msgstr "Nextcloud erabiltzaile-izena"
|
||||
|
||||
#, fuzzy
|
||||
msgid "WebDAV password"
|
||||
msgstr "Ezarri pasahitza"
|
||||
|
||||
msgid "Custom TLS certificates"
|
||||
msgstr ""
|
||||
|
||||
@@ -1482,6 +1630,20 @@ msgstr ""
|
||||
msgid "Ignore TLS certificate errors"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Enable note history"
|
||||
msgstr "Zifratua gaitu"
|
||||
|
||||
msgid "days"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "%d days"
|
||||
msgstr ""
|
||||
|
||||
msgid "Keep note history for"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Invalid option value: \"%s\". Possible values are: %s."
|
||||
msgstr "Balio aukera baliogabea: \"%s\". Litezkeen balioak: %s."
|
||||
@@ -1501,6 +1663,9 @@ msgstr ""
|
||||
msgid "Note"
|
||||
msgstr "Koadernoak"
|
||||
|
||||
msgid "Plugins"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Application"
|
||||
msgstr "Irten aplikaziotik"
|
||||
@@ -1527,6 +1692,9 @@ msgstr "Evernotetik esportatutako fitxategiak"
|
||||
msgid "Json Export Directory"
|
||||
msgstr "Evernotetik esportatutako fitxategiak"
|
||||
|
||||
msgid "File"
|
||||
msgstr "Fitxategia"
|
||||
|
||||
msgid "Directory"
|
||||
msgstr ""
|
||||
|
||||
@@ -1551,13 +1719,12 @@ msgstr ""
|
||||
msgid "Please specify the notebook where the notes should be imported to."
|
||||
msgstr "Aukeratu nora esportatu sinkronizazioaren egoera, mesedez"
|
||||
|
||||
msgid "Restored Notes"
|
||||
msgstr ""
|
||||
|
||||
msgid "Items that cannot be synchronised"
|
||||
msgstr "Itemok ezin sinkronizatu"
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s (%s): %s"
|
||||
msgstr "%s (%s): %s"
|
||||
|
||||
msgid ""
|
||||
"These items will remain on the device but will not be uploaded to the sync "
|
||||
"target. In order to find these items, either search for the title or the ID "
|
||||
@@ -1566,6 +1733,24 @@ msgstr ""
|
||||
"Itemok gailuan geratuko dira baina ez dira sinkronizatuko. Horiek aurkitzeko "
|
||||
"bilaketak egin titulu edo goiko parentesien arteko IDaren arabera."
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "%s (%s) could not be uploaded: %s"
|
||||
msgstr "Koadernoa ezin gorde daiteke: %s"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Item \"%s\" could not be downloaded: %s"
|
||||
msgstr "Koadernoa ezin gorde daiteke: %s"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Items that cannot be decrypted"
|
||||
msgstr "Itemok ezin sinkronizatu"
|
||||
|
||||
msgid ""
|
||||
"Joplin failed to decrypt these items multiple times, possibly because they "
|
||||
"are corrupted or too large. These items will remain on the device but Joplin "
|
||||
"will no longer attempt to decrypt them."
|
||||
msgstr ""
|
||||
|
||||
msgid "Sync status (synced items / total items)"
|
||||
msgstr "Sinkronizazio egoera (sinkronizatutako itemak/itemak guztira)"
|
||||
|
||||
@@ -1686,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"
|
||||
@@ -1705,10 +1894,6 @@ msgstr ""
|
||||
msgid "Joplin website"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Joplin v%s"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Database v%s"
|
||||
msgstr ""
|
||||
@@ -1795,9 +1980,6 @@ msgstr "Oharra bihurtu"
|
||||
msgid "Convert to todo"
|
||||
msgstr "Zeregina bihurtu"
|
||||
|
||||
msgid "Copy Markdown link"
|
||||
msgstr ""
|
||||
|
||||
msgid "Hide metadata"
|
||||
msgstr "Ezkutatu metadatuak"
|
||||
|
||||
@@ -1810,6 +1992,9 @@ msgstr "Ikusi mapan"
|
||||
msgid "Go to source URL"
|
||||
msgstr ""
|
||||
|
||||
msgid "Edit"
|
||||
msgstr "Editatu"
|
||||
|
||||
msgid "Delete notebook"
|
||||
msgstr "Ezabatu koadernoa"
|
||||
|
||||
@@ -1832,26 +2017,20 @@ msgstr "Oraindik ez duzu koadernorik. Sortu bat (+) botoian sakatuta."
|
||||
msgid "Welcome"
|
||||
msgstr "Ongi etorri!"
|
||||
|
||||
#~ msgid "Add or remove tags"
|
||||
#~ msgstr "Gehitu edo ezabatu etiketak"
|
||||
#~ msgid "Separate each tag by a comma."
|
||||
#~ msgstr "Banatu etiketak koma erabiliaz."
|
||||
|
||||
#, fuzzy
|
||||
#~ msgid "%s - Copy"
|
||||
#~ msgstr "Kopiatu"
|
||||
#~ msgid "Some items cannot be decrypted."
|
||||
#~ msgstr "Zenbait item ezin dira deszifratu."
|
||||
|
||||
#~ msgid "Switch between note and to-do type"
|
||||
#~ msgstr "Aldatu oharra eta zeregin eren artean."
|
||||
#~ msgid "%s (%s): %s"
|
||||
#~ msgstr "%s (%s): %s"
|
||||
|
||||
#, fuzzy
|
||||
#~ msgid "Switch to note type"
|
||||
#~ msgstr "Aldatu oharra eta zeregin eren artean."
|
||||
|
||||
#, fuzzy
|
||||
#~ msgid "Switch to to-do type"
|
||||
#~ msgstr "Aldatu oharra eta zeregin eren artean."
|
||||
|
||||
#~ msgid "Delete notes?"
|
||||
#~ msgstr "Oharrak ezabatu?"
|
||||
#~ msgid ""
|
||||
#~ "The path to synchronise with when file system synchronisation is enabled. "
|
||||
#~ "See `sync.target`."
|
||||
#~ msgstr ""
|
||||
#~ "Sinkronizazio sistema gaituta dagoenerako bide-izena. Ikus `sync.target`."
|
||||
|
||||
#, fuzzy
|
||||
#~ msgid "State: %s."
|
||||
|
||||
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."
|
||||
@@ -125,10 +125,11 @@ msgstr "La note n'est pas une tâche : \"%s\""
|
||||
|
||||
msgid ""
|
||||
"Manages E2EE configuration. Commands are `enable`, `disable`, `decrypt`, "
|
||||
"`status` and `target-status`."
|
||||
"`status`, `decrypt-file` and `target-status`."
|
||||
msgstr ""
|
||||
"Gérer la configuration E2EE (Chiffrement de bout à bout). Les commandes sont "
|
||||
"`enable`, `disable`, `decrypt` et `status` et `target-status`."
|
||||
"`enable`, `disable`, `decrypt` et `status`, `decrypt-file` et `target-"
|
||||
"status`."
|
||||
|
||||
msgid "Enter master password:"
|
||||
msgstr "Entrer le mot de passe maître :"
|
||||
@@ -602,8 +603,8 @@ msgstr "Importer depuis \"%s\" au format \"%s\". Veuillez patienter..."
|
||||
msgid "PDF File"
|
||||
msgstr "Fichier PDF"
|
||||
|
||||
msgid "File"
|
||||
msgstr "Fichier"
|
||||
msgid "Synchronisation status"
|
||||
msgstr "État de la synchronisation"
|
||||
|
||||
msgid "New note"
|
||||
msgstr "Nouvelle note"
|
||||
@@ -614,14 +615,42 @@ msgstr "Nouvelle tâche"
|
||||
msgid "New notebook"
|
||||
msgstr "Nouveau carnet"
|
||||
|
||||
msgid "Print"
|
||||
msgstr "Imprimer"
|
||||
|
||||
msgid "General Options"
|
||||
msgstr "Options générales"
|
||||
|
||||
msgid "Encryption options"
|
||||
msgstr "Options de chiffrement"
|
||||
|
||||
msgid "Web clipper options"
|
||||
msgstr "Options du Web Clipper"
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s %s (%s, %s)"
|
||||
msgstr "%s %s (%s, %s)"
|
||||
|
||||
msgid "&File"
|
||||
msgstr "&Fichier"
|
||||
|
||||
msgid "About Joplin"
|
||||
msgstr "A propos de Joplin"
|
||||
|
||||
msgid "Preferences..."
|
||||
msgstr "Préférences…"
|
||||
|
||||
msgid "Check for updates..."
|
||||
msgstr "Vérifier les mises à jour..."
|
||||
|
||||
msgid "Import"
|
||||
msgstr "Importer"
|
||||
|
||||
msgid "Export"
|
||||
msgstr "Exporter"
|
||||
|
||||
msgid "Print"
|
||||
msgstr "Imprimer"
|
||||
msgid "Synchronise"
|
||||
msgstr "Synchroniser"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Hide %s"
|
||||
@@ -630,8 +659,11 @@ msgstr "Cacher %s"
|
||||
msgid "Quit"
|
||||
msgstr "Quitter"
|
||||
|
||||
msgid "Edit"
|
||||
msgstr "Édition"
|
||||
msgid "Close Window"
|
||||
msgstr "Fermer la fenêtre"
|
||||
|
||||
msgid "&Edit"
|
||||
msgstr "&Édition"
|
||||
|
||||
msgid "Copy"
|
||||
msgstr "Copier"
|
||||
@@ -666,8 +698,8 @@ msgstr "Chercher dans toutes les notes"
|
||||
msgid "Search in current note"
|
||||
msgstr "Chercher dans la note en cours"
|
||||
|
||||
msgid "View"
|
||||
msgstr "Affichage"
|
||||
msgid "&View"
|
||||
msgstr "&Affichage"
|
||||
|
||||
msgid "Toggle sidebar"
|
||||
msgstr "Basculer barre latérale"
|
||||
@@ -678,23 +710,11 @@ msgstr "Basculer l'agencement de l'éditeur"
|
||||
msgid "Focus"
|
||||
msgstr "Naviguer"
|
||||
|
||||
msgid "Tools"
|
||||
msgstr "Outils"
|
||||
msgid "&Tools"
|
||||
msgstr "&Outils"
|
||||
|
||||
msgid "Synchronisation status"
|
||||
msgstr "État de la synchronisation"
|
||||
|
||||
msgid "Web clipper options"
|
||||
msgstr "Options du Web Clipper"
|
||||
|
||||
msgid "Encryption options"
|
||||
msgstr "Options de chiffrement"
|
||||
|
||||
msgid "General Options"
|
||||
msgstr "Options générales"
|
||||
|
||||
msgid "Help"
|
||||
msgstr "Aide"
|
||||
msgid "&Help"
|
||||
msgstr "&Aide"
|
||||
|
||||
msgid "Website and documentation"
|
||||
msgstr "Documentation en ligne"
|
||||
@@ -702,15 +722,8 @@ msgstr "Documentation en ligne"
|
||||
msgid "Make a donation"
|
||||
msgstr "Faire un don"
|
||||
|
||||
msgid "Check for updates..."
|
||||
msgstr "Vérifier les mises à jour..."
|
||||
|
||||
msgid "About Joplin"
|
||||
msgstr "A propos de Joplin"
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s %s (%s, %s)"
|
||||
msgstr "%s %s (%s, %s)"
|
||||
msgid "Toggle development tools"
|
||||
msgstr "Monter/Cacher les outils de développement"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Open %s"
|
||||
@@ -737,12 +750,12 @@ msgstr ""
|
||||
"Une mise à jour est disponible, souhaitez vous la télécharger maintenant ?"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Your version: v%s"
|
||||
msgstr "Votre version : v%s"
|
||||
msgid "Your version: %s"
|
||||
msgstr "Votre version : %s"
|
||||
|
||||
#, javascript-format
|
||||
msgid "New version: v%s"
|
||||
msgstr "Nouvelle version : v%s"
|
||||
msgid "New version: %s"
|
||||
msgstr "Nouvelle version : %s"
|
||||
|
||||
msgid "Yes"
|
||||
msgstr "Oui"
|
||||
@@ -823,12 +836,12 @@ msgstr ""
|
||||
msgid "Notes and settings are stored in: %s"
|
||||
msgstr "Les notes et paramètres se trouve dans : %s"
|
||||
|
||||
msgid "Browse..."
|
||||
msgstr "Parcourir…"
|
||||
|
||||
msgid "Check synchronisation configuration"
|
||||
msgstr "Vérifier config synchronisation"
|
||||
|
||||
msgid "Browse..."
|
||||
msgstr "Parcourir…"
|
||||
|
||||
msgid "Apply"
|
||||
msgstr "Appliquer"
|
||||
|
||||
@@ -949,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 :"
|
||||
|
||||
@@ -973,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"
|
||||
@@ -995,9 +1005,34 @@ msgstr "Lieu"
|
||||
msgid "URL"
|
||||
msgstr "URL"
|
||||
|
||||
msgid "Note History"
|
||||
msgstr "Historique des notes"
|
||||
|
||||
msgid "Previous versions of this note"
|
||||
msgstr "Versions précédentes de cette note"
|
||||
|
||||
msgid "Note properties"
|
||||
msgstr "Propriétés de la note"
|
||||
|
||||
#, javascript-format
|
||||
msgid "The note \"%s\" has been successfully restored to the notebook \"%s\"."
|
||||
msgstr "La note \"%s\" a été restaurée dans le carnet \"%s\"."
|
||||
|
||||
msgid "This note has no history"
|
||||
msgstr "Cette note n'a pas d'historique"
|
||||
|
||||
msgid "Restore"
|
||||
msgstr "Restaurer"
|
||||
|
||||
#, javascript-format
|
||||
msgid ""
|
||||
"Click \"%s\" to restore the note. It will be copied in the notebook named "
|
||||
"\"%s\". The current version of the note will not be replaced or modified."
|
||||
msgstr ""
|
||||
"Cliquez sur \"%s\" pour restaurer cette note. Elle sera copiée dans le "
|
||||
"carnet \"%s\". La version actuelle de la note ne sera pas replacée ou "
|
||||
"modifiée."
|
||||
|
||||
msgid "Open..."
|
||||
msgstr "Ouvrir..."
|
||||
|
||||
@@ -1015,7 +1050,7 @@ msgid "Copy Link Address"
|
||||
msgstr "Copier l'adresse du lien"
|
||||
|
||||
msgid "This attachment is not downloaded or not decrypted yet."
|
||||
msgstr "Cette pièce jointe n'est pas téléchargée ou pas encore déchiffrée"
|
||||
msgstr "Cette pièce jointe n'est pas téléchargée ou pas encore déchiffrée."
|
||||
|
||||
#, javascript-format
|
||||
msgid "Unsupported link or message: %s"
|
||||
@@ -1120,8 +1155,19 @@ msgstr "Options de chiffrement"
|
||||
msgid "Clipper Options"
|
||||
msgstr "Options du Web Clipper"
|
||||
|
||||
msgid "Remove this tag from all the notes?"
|
||||
msgstr "Enlever cette étiquette de toutes les notes ?"
|
||||
#, javascript-format
|
||||
msgid ""
|
||||
"Delete notebook \"%s\"?\n"
|
||||
"\n"
|
||||
"All notes and sub-notebooks within this notebook will also be deleted."
|
||||
msgstr ""
|
||||
"Effacer le carnet \"%s\" ?\n"
|
||||
"\n"
|
||||
"Toutes les notes et sous-carnets dans ce carnet seront également effacés."
|
||||
|
||||
#, javascript-format
|
||||
msgid "Remove tag \"%s\" from all notes?"
|
||||
msgstr "Enlever l’étiquette \"%s\" de toutes les notes ?"
|
||||
|
||||
msgid "Remove this search from the sidebar?"
|
||||
msgstr "Enlever cette recherche de la barre latérale ?"
|
||||
@@ -1132,9 +1178,6 @@ msgstr "Supprimer"
|
||||
msgid "Rename"
|
||||
msgstr "Renommer"
|
||||
|
||||
msgid "Synchronise"
|
||||
msgstr "Synchroniser"
|
||||
|
||||
msgid "Notebooks"
|
||||
msgstr "Carnets"
|
||||
|
||||
@@ -1143,13 +1186,56 @@ 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"
|
||||
|
||||
msgid "Duplicate"
|
||||
msgstr "Dupliquer"
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s - Copy"
|
||||
msgstr "%s - Copie"
|
||||
|
||||
msgid "Switch between note and to-do type"
|
||||
msgstr "Alterner entre note et tâche"
|
||||
|
||||
msgid "Switch to note type"
|
||||
msgstr "Convertir en note"
|
||||
|
||||
msgid "Switch to to-do type"
|
||||
msgstr "Convertir en tâche"
|
||||
|
||||
msgid "Copy Markdown link"
|
||||
msgstr "Copier lien Markdown"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Delete note \"%s\"?"
|
||||
msgstr "Supprimer note \"%s\" ?"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Delete these %d notes?"
|
||||
msgstr "Supprimer ces %d notes ?"
|
||||
|
||||
msgid ""
|
||||
"Type a note title to jump to it. Or type # followed by a tag name, or @ "
|
||||
"followed by a notebook name."
|
||||
msgstr ""
|
||||
"Entrez le titre d’une note, ou entrez # suivit du nom d’une étiquette, ou @ "
|
||||
"suivit du nom d’un carnet."
|
||||
|
||||
msgid "Goto Anything..."
|
||||
msgstr "Navigation rapide…"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Usage: %s"
|
||||
msgstr "Utilisation : %s"
|
||||
@@ -1262,12 +1348,22 @@ msgstr "En cours"
|
||||
msgid "Synchronisation is already in progress. State: %s"
|
||||
msgstr "La synchronisation est déjà en cours. État : %s"
|
||||
|
||||
msgid ""
|
||||
"Unknown item type downloaded - please upgrade Joplin to the latest version"
|
||||
msgstr "Objet inconnu téléchargé - veuillez mettre Joplin à jour"
|
||||
|
||||
msgid "Encrypted"
|
||||
msgstr "Chiffré"
|
||||
|
||||
msgid "Encrypted items cannot be modified"
|
||||
msgstr "Les objets chiffrés ne peuvent être modifiés"
|
||||
|
||||
msgid "title"
|
||||
msgstr "titre"
|
||||
|
||||
msgid "updated date"
|
||||
msgstr "date de modification"
|
||||
|
||||
msgid "Conflicts"
|
||||
msgstr "Conflits"
|
||||
|
||||
@@ -1278,12 +1374,6 @@ msgstr "Impossible de déplacer le carnet à cet endroit"
|
||||
msgid "Notebooks cannot be named \"%s\", which is a reserved title."
|
||||
msgstr "Les carnets ne peuvent être nommés \"%s\" car c'est un nom réservé."
|
||||
|
||||
msgid "title"
|
||||
msgstr "titre"
|
||||
|
||||
msgid "updated date"
|
||||
msgstr "date de modification"
|
||||
|
||||
msgid "created date"
|
||||
msgstr "date de création"
|
||||
|
||||
@@ -1298,6 +1388,73 @@ msgstr "Impossible de copier la note vers le carnet \"%s\""
|
||||
msgid "Cannot move note to \"%s\" notebook"
|
||||
msgstr "Impossible de déplacer la note vers le carnet \"%s\""
|
||||
|
||||
#, javascript-format
|
||||
msgid ""
|
||||
"Attention: If you change this location, make sure you copy all your content "
|
||||
"to it before syncing, otherwise all files will be removed! See the FAQ for "
|
||||
"more details: %s"
|
||||
msgstr ""
|
||||
"Attention : si vous changez cet emplacement, copiez-y tout le contenu avant "
|
||||
"de synchroniser, sinon tous les fichiers seront supprimés ! Consulter la FAQ "
|
||||
"pour plus de détails : %s"
|
||||
|
||||
msgid "Synchronisation target"
|
||||
msgstr "Cible de la synchronisation"
|
||||
|
||||
msgid ""
|
||||
"The target to synchonise to. Each sync target may have additional parameters "
|
||||
"which are named as `sync.NUM.NAME` (all documented below)."
|
||||
msgstr ""
|
||||
"La cible avec laquelle synchroniser. Chaque cible de synchronisation peut "
|
||||
"avoir des paramètres supplémentaires sous le nom `sync.NUM.NOM` (documentés "
|
||||
"ci-dessous)."
|
||||
|
||||
msgid "Directory to synchronise with (absolute path)"
|
||||
msgstr "Répertoire avec lequel synchroniser (chemin absolu)"
|
||||
|
||||
msgid "Nextcloud WebDAV URL"
|
||||
msgstr "Nextcloud : URL WebDAV"
|
||||
|
||||
msgid "Nextcloud username"
|
||||
msgstr "Nextcloud : Nom utilisateur"
|
||||
|
||||
msgid "Nextcloud password"
|
||||
msgstr "Nextcloud : Mot de passe"
|
||||
|
||||
msgid "WebDAV URL"
|
||||
msgstr "WebDAV : URL"
|
||||
|
||||
msgid "WebDAV username"
|
||||
msgstr "WebDAV : Nom utilisateur"
|
||||
|
||||
msgid "WebDAV password"
|
||||
msgstr "WebDAV : Mot de passe"
|
||||
|
||||
msgid "Attachment download behaviour"
|
||||
msgstr "Téléchargement des ressources"
|
||||
|
||||
msgid ""
|
||||
"In \"Manual\" mode, attachments are downloaded only when you click on them. "
|
||||
"In \"Auto\", they are downloaded when you open the note. In \"Always\", all "
|
||||
"the attachments are downloaded whether you open the note or not."
|
||||
msgstr ""
|
||||
"En mode \"manuel\", les ressources sont téléchargées uniquement lorsque vous "
|
||||
"cliquez dessus. En mode \"auto\", 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"
|
||||
|
||||
@@ -1328,6 +1485,9 @@ msgstr "Trier les notes par"
|
||||
msgid "Reverse sort order"
|
||||
msgstr "Inverser l'ordre"
|
||||
|
||||
msgid "Sort notebooks by"
|
||||
msgstr "Trier les carnets par"
|
||||
|
||||
msgid "Save geo-location with notes"
|
||||
msgstr "Enregistrer l'emplacement avec les notes"
|
||||
|
||||
@@ -1343,6 +1503,42 @@ msgstr "Curseur sur corps du message"
|
||||
msgid "When creating a new note:"
|
||||
msgstr "Lors de la création d'une note :"
|
||||
|
||||
msgid "Enable soft breaks"
|
||||
msgstr "Activer retours à la ligne \"doux\""
|
||||
|
||||
msgid "Enable math expressions"
|
||||
msgstr "Activer les expressions mathématiques"
|
||||
|
||||
msgid "Enable ==mark== syntax"
|
||||
msgstr "Activer la syntaxe pour ==surligner=="
|
||||
|
||||
msgid "Enable footnotes"
|
||||
msgstr "Activer les notes de bas de page"
|
||||
|
||||
msgid "Enable table of contents extension"
|
||||
msgstr "Activer la table des matières"
|
||||
|
||||
msgid "Enable ~sub~ syntax"
|
||||
msgstr "Activer la syntaxe ~indice~"
|
||||
|
||||
msgid "Enable ^sup^ syntax"
|
||||
msgstr "Activer la syntaxe ^exposant^"
|
||||
|
||||
msgid "Enable deflist syntax"
|
||||
msgstr "Activer les listes de définitions"
|
||||
|
||||
msgid "Enable abbreviation syntax"
|
||||
msgstr "Activer la syntaxe pour abréviations"
|
||||
|
||||
msgid "Enable markdown emoji"
|
||||
msgstr "Activer la syntaxe émoji"
|
||||
|
||||
msgid "Enable ++insert++ syntax"
|
||||
msgstr "Activer la syntaxe ++insertion++"
|
||||
|
||||
msgid "Enable multimarkdown table extension"
|
||||
msgstr "Activer les tables multi-markdown"
|
||||
|
||||
msgid "Show tray icon"
|
||||
msgstr "Afficher l'icône dans la zone de notifications"
|
||||
|
||||
@@ -1416,55 +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 ""
|
||||
"The path to synchronise with when file system synchronisation is enabled. "
|
||||
"See `sync.target`."
|
||||
msgstr ""
|
||||
"Le chemin du répertoire avec lequel synchroniser lorsque la synchronisation "
|
||||
"par système de fichier est activée. Voir `sync.target`."
|
||||
|
||||
msgid "Nextcloud WebDAV URL"
|
||||
msgstr "Nextcloud : URL WebDAV"
|
||||
|
||||
#, javascript-format
|
||||
msgid ""
|
||||
"Attention: If you change this location, make sure you copy all your content "
|
||||
"to it before syncing, otherwise all files will be removed! See the FAQ for "
|
||||
"more details: %s"
|
||||
msgstr ""
|
||||
"Attention : si vous changez cet emplacement, copiez-y tout le contenu avant "
|
||||
"de synchroniser, sinon tous les fichiers seront supprimés ! Consulter la FAQ "
|
||||
"pour plus de détails : %s"
|
||||
|
||||
msgid "Nextcloud username"
|
||||
msgstr "Nextcloud : Nom utilisateur"
|
||||
|
||||
msgid "Nextcloud password"
|
||||
msgstr "Nextcloud : Mot de passe"
|
||||
|
||||
msgid "WebDAV URL"
|
||||
msgstr "WebDAV : URL"
|
||||
|
||||
msgid "WebDAV username"
|
||||
msgstr "WebDAV : Nom utilisateur"
|
||||
|
||||
msgid "WebDAV password"
|
||||
msgstr "WebDAV : Mot de passe"
|
||||
|
||||
msgid "Custom TLS certificates"
|
||||
msgstr "Certificats TLS personnalisés"
|
||||
|
||||
@@ -1483,6 +1630,19 @@ msgstr ""
|
||||
msgid "Ignore TLS certificate errors"
|
||||
msgstr "Ignorer les erreurs de certificats TLS"
|
||||
|
||||
msgid "Enable note history"
|
||||
msgstr "Activer l'historique des notes"
|
||||
|
||||
msgid "days"
|
||||
msgstr "jours"
|
||||
|
||||
#, javascript-format
|
||||
msgid "%d days"
|
||||
msgstr "%d jours"
|
||||
|
||||
msgid "Keep note history for"
|
||||
msgstr "Garder l'historique des notes pour"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Invalid option value: \"%s\". Possible values are: %s."
|
||||
msgstr "Option invalide: \"%s\". Les valeurs possibles sont : %s."
|
||||
@@ -1499,6 +1659,9 @@ msgstr "Apparence"
|
||||
msgid "Note"
|
||||
msgstr "Note"
|
||||
|
||||
msgid "Plugins"
|
||||
msgstr "Modules"
|
||||
|
||||
msgid "Application"
|
||||
msgstr "Application"
|
||||
|
||||
@@ -1521,6 +1684,9 @@ msgstr "Fichiers d'export Evernote"
|
||||
msgid "Json Export Directory"
|
||||
msgstr "Dossier d'export JSON"
|
||||
|
||||
msgid "File"
|
||||
msgstr "Fichier"
|
||||
|
||||
msgid "Directory"
|
||||
msgstr "Dossier"
|
||||
|
||||
@@ -1546,13 +1712,12 @@ msgstr "Il n'y a pas de données à exporter."
|
||||
msgid "Please specify the notebook where the notes should be imported to."
|
||||
msgstr "Veuillez sélectionner le carnet où les notes doivent être importées."
|
||||
|
||||
msgid "Restored Notes"
|
||||
msgstr "Notes restaurées"
|
||||
|
||||
msgid "Items that cannot be synchronised"
|
||||
msgstr "Objets qui ne peuvent pas être synchronisés"
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s (%s): %s"
|
||||
msgstr "%s (%s) : %s"
|
||||
|
||||
msgid ""
|
||||
"These items will remain on the device but will not be uploaded to the sync "
|
||||
"target. In order to find these items, either search for the title or the ID "
|
||||
@@ -1562,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)"
|
||||
|
||||
@@ -1599,7 +1784,7 @@ msgid "Permission to use camera"
|
||||
msgstr "Permission d'utiliser l'appareil photo"
|
||||
|
||||
msgid "Your permission to use your camera is required."
|
||||
msgstr "Votre permission est requise pour utiliser l'appareil photo"
|
||||
msgstr "Votre permission est requise pour utiliser l'appareil photo."
|
||||
|
||||
msgid "There are currently no notes. Create one by clicking on the (+) button."
|
||||
msgstr ""
|
||||
@@ -1686,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"
|
||||
@@ -1711,10 +1899,6 @@ msgstr "- Position : Pour attacher à une note les coordonnées GPS."
|
||||
msgid "Joplin website"
|
||||
msgstr "Site web de Joplin"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Joplin v%s"
|
||||
msgstr "Joplin v%s"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Database v%s"
|
||||
msgstr "Base de données v%s"
|
||||
@@ -1799,9 +1983,6 @@ msgstr "Convertir en note"
|
||||
msgid "Convert to todo"
|
||||
msgstr "Convertir en tâche"
|
||||
|
||||
msgid "Copy Markdown link"
|
||||
msgstr "Copier lien Markdown"
|
||||
|
||||
msgid "Hide metadata"
|
||||
msgstr "Cacher les métadonnées"
|
||||
|
||||
@@ -1814,6 +1995,9 @@ msgstr "Voir sur carte"
|
||||
msgid "Go to source URL"
|
||||
msgstr "Aller à l'URL source"
|
||||
|
||||
msgid "Edit"
|
||||
msgstr "Édition"
|
||||
|
||||
msgid "Delete notebook"
|
||||
msgstr "Supprimer le carnet"
|
||||
|
||||
@@ -1838,23 +2022,30 @@ msgstr ""
|
||||
msgid "Welcome"
|
||||
msgstr "Bienvenue"
|
||||
|
||||
#~ msgid "Add or remove tags"
|
||||
#~ msgstr "Gérer les étiquettes"
|
||||
#~ msgid "Separate each tag by a comma."
|
||||
#~ msgstr "Séparez chaque étiquette par une virgule."
|
||||
|
||||
#~ msgid "Duplicate"
|
||||
#~ msgstr "Dupliquer"
|
||||
#~ msgid "Some items cannot be decrypted."
|
||||
#~ msgstr "Certains objets ne peuvent être déchiffrés."
|
||||
|
||||
#~ msgid "%s - Copy"
|
||||
#~ msgstr "%s - Copie"
|
||||
#~ msgid "%s (%s): %s"
|
||||
#~ msgstr "%s (%s) : %s"
|
||||
|
||||
#~ msgid "Switch between note and to-do type"
|
||||
#~ msgstr "Alterner entre note et tâche"
|
||||
#~ msgid "Table of contents"
|
||||
#~ msgstr "Table des matières"
|
||||
|
||||
#~ msgid "Switch to note type"
|
||||
#~ msgstr "Convertir en note"
|
||||
#~ msgid ""
|
||||
#~ "The path to synchronise with when file system synchronisation is enabled. "
|
||||
#~ "See `sync.target`."
|
||||
#~ msgstr ""
|
||||
#~ "Le chemin du répertoire avec lequel synchroniser lorsque la "
|
||||
#~ "synchronisation par système de fichier est activée. Voir `sync.target`."
|
||||
|
||||
#~ msgid "Switch to to-do type"
|
||||
#~ msgstr "Convertir en tâche"
|
||||
#~ msgid "Joplin v%s"
|
||||
#~ msgstr "Joplin v%s"
|
||||
|
||||
#~ msgid "Remove?"
|
||||
#~ msgstr "Supprimer ?"
|
||||
|
||||
#~ msgid "Delete notes?"
|
||||
#~ msgstr "Supprimer les notes ?"
|
||||
@@ -1978,9 +2169,6 @@ msgstr "Bienvenue"
|
||||
#~ msgid "Delete notebook?"
|
||||
#~ msgstr "Supprimer le carnet ?"
|
||||
|
||||
#~ msgid "Delete notebook \"%s\"?"
|
||||
#~ msgstr "Supprimer le carnet \"%s\" ?"
|
||||
|
||||
#~ msgid "File system synchronisation target directory"
|
||||
#~ msgstr "Cible de la synchronisation sur le disque dur"
|
||||
|
||||
|
||||
@@ -122,9 +122,10 @@ msgstr "Marca unha tarefa como feita."
|
||||
msgid "Note is not a to-do: \"%s\""
|
||||
msgstr "A nota non é unha tarefa: «%s»"
|
||||
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
"Manages E2EE configuration. Commands are `enable`, `disable`, `decrypt`, "
|
||||
"`status` and `target-status`."
|
||||
"`status`, `decrypt-file` and `target-status`."
|
||||
msgstr ""
|
||||
"Xestiona a configuración E2EE. As orde son «enable», «disable», «decrypt», "
|
||||
"«status» e «target-status»."
|
||||
@@ -597,8 +598,8 @@ msgstr "Importando de «%s» como formato «%s». Agarde..."
|
||||
msgid "PDF File"
|
||||
msgstr "Ficheiro PDF"
|
||||
|
||||
msgid "File"
|
||||
msgstr "Ficheiro"
|
||||
msgid "Synchronisation status"
|
||||
msgstr "Estado da sincronización"
|
||||
|
||||
msgid "New note"
|
||||
msgstr "Nova nota"
|
||||
@@ -609,14 +610,43 @@ msgstr "Nova tarefa"
|
||||
msgid "New notebook"
|
||||
msgstr "Novo caderno"
|
||||
|
||||
msgid "Print"
|
||||
msgstr "Imprimir"
|
||||
|
||||
msgid "General Options"
|
||||
msgstr "Opcións xerais"
|
||||
|
||||
msgid "Encryption options"
|
||||
msgstr "Opcións de cifrado"
|
||||
|
||||
msgid "Web clipper options"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s %s (%s, %s)"
|
||||
msgstr "%s %s (%s, %s)"
|
||||
|
||||
#, fuzzy
|
||||
msgid "&File"
|
||||
msgstr "Ficheiro"
|
||||
|
||||
msgid "About Joplin"
|
||||
msgstr "Sobre o Joplin"
|
||||
|
||||
msgid "Preferences..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Check for updates..."
|
||||
msgstr "Buscar actualizacións…"
|
||||
|
||||
msgid "Import"
|
||||
msgstr "Importar"
|
||||
|
||||
msgid "Export"
|
||||
msgstr "Exportar"
|
||||
|
||||
msgid "Print"
|
||||
msgstr "Imprimir"
|
||||
msgid "Synchronise"
|
||||
msgstr "Sincronizar"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Hide %s"
|
||||
@@ -625,7 +655,11 @@ msgstr "Ocultar %s"
|
||||
msgid "Quit"
|
||||
msgstr "Saír"
|
||||
|
||||
msgid "Edit"
|
||||
msgid "Close Window"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "&Edit"
|
||||
msgstr "Edtar"
|
||||
|
||||
msgid "Copy"
|
||||
@@ -663,7 +697,8 @@ msgstr "Buscar en todas as notas"
|
||||
msgid "Search in current note"
|
||||
msgstr "Buscar en todas as notas"
|
||||
|
||||
msgid "View"
|
||||
#, fuzzy
|
||||
msgid "&View"
|
||||
msgstr "Vista"
|
||||
|
||||
msgid "Toggle sidebar"
|
||||
@@ -676,22 +711,12 @@ msgstr "Cambiar a disposición do editor"
|
||||
msgid "Focus"
|
||||
msgstr "Focar no corpo"
|
||||
|
||||
msgid "Tools"
|
||||
#, fuzzy
|
||||
msgid "&Tools"
|
||||
msgstr "Ferramentas"
|
||||
|
||||
msgid "Synchronisation status"
|
||||
msgstr "Estado da sincronización"
|
||||
|
||||
msgid "Web clipper options"
|
||||
msgstr ""
|
||||
|
||||
msgid "Encryption options"
|
||||
msgstr "Opcións de cifrado"
|
||||
|
||||
msgid "General Options"
|
||||
msgstr "Opcións xerais"
|
||||
|
||||
msgid "Help"
|
||||
#, fuzzy
|
||||
msgid "&Help"
|
||||
msgstr "Axuda"
|
||||
|
||||
msgid "Website and documentation"
|
||||
@@ -700,15 +725,8 @@ msgstr "Sitio web e documentación"
|
||||
msgid "Make a donation"
|
||||
msgstr "Doar"
|
||||
|
||||
msgid "Check for updates..."
|
||||
msgstr "Buscar actualizacións…"
|
||||
|
||||
msgid "About Joplin"
|
||||
msgstr "Sobre o Joplin"
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s %s (%s, %s)"
|
||||
msgstr "%s %s (%s, %s)"
|
||||
msgid "Toggle development tools"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Open %s"
|
||||
@@ -734,11 +752,11 @@ msgid "An update is available, do you want to download it now?"
|
||||
msgstr "Hai unha actualización dispoñíbel, desexa descargala agora?"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Your version: v%s"
|
||||
msgid "Your version: %s"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "New version: v%s"
|
||||
msgid "New version: %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Yes"
|
||||
@@ -812,12 +830,12 @@ msgstr ""
|
||||
msgid "Notes and settings are stored in: %s"
|
||||
msgstr "As notas e axustes gardáronse en: %s"
|
||||
|
||||
msgid "Browse..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Check synchronisation configuration"
|
||||
msgstr "Comprobar a configuración da sincronización"
|
||||
|
||||
msgid "Browse..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Apply"
|
||||
msgstr ""
|
||||
|
||||
@@ -933,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:"
|
||||
|
||||
@@ -958,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"
|
||||
@@ -977,9 +993,33 @@ msgstr ""
|
||||
msgid "URL"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Note History"
|
||||
msgstr "Cadernos"
|
||||
|
||||
msgid "Previous versions of this note"
|
||||
msgstr ""
|
||||
|
||||
msgid "Note properties"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "The note \"%s\" has been successfully restored to the notebook \"%s\"."
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "This note has no history"
|
||||
msgstr "Esta nota foi modificada:"
|
||||
|
||||
msgid "Restore"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid ""
|
||||
"Click \"%s\" to restore the note. It will be copied in the notebook named "
|
||||
"\"%s\". The current version of the note will not be replaced or modified."
|
||||
msgstr ""
|
||||
|
||||
msgid "Open..."
|
||||
msgstr "Abrir…"
|
||||
|
||||
@@ -1102,7 +1142,16 @@ msgstr "Opcións de cifrado"
|
||||
msgid "Clipper Options"
|
||||
msgstr "Opcións xerais"
|
||||
|
||||
msgid "Remove this tag from all the notes?"
|
||||
#, fuzzy, javascript-format
|
||||
msgid ""
|
||||
"Delete notebook \"%s\"?\n"
|
||||
"\n"
|
||||
"All notes and sub-notebooks within this notebook will also be deleted."
|
||||
msgstr ""
|
||||
"Desexa eliminar o caderno? Tamén se eliminarán todas as notas deste caderno."
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Remove tag \"%s\" from all notes?"
|
||||
msgstr "Desexa eliminar esta etiqueta de todas as notas?"
|
||||
|
||||
msgid "Remove this search from the sidebar?"
|
||||
@@ -1114,23 +1163,65 @@ msgstr "Eliminar"
|
||||
msgid "Rename"
|
||||
msgstr "Renomear"
|
||||
|
||||
msgid "Synchronise"
|
||||
msgstr "Sincronizar"
|
||||
|
||||
msgid "Notebooks"
|
||||
msgstr "Cadernos"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Decrypting items: %d/%d"
|
||||
msgstr "Elementos obtidos: %d/%d."
|
||||
msgstr "Elementos obtidos: %d/%d"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Fetching resources: %d"
|
||||
msgstr "Recursos: %d."
|
||||
msgid "Fetching resources: %d/%d"
|
||||
msgstr "Recursos: %d/%d"
|
||||
|
||||
msgid "Please select where the sync status should be exported to"
|
||||
msgstr "Seleccione onde exportar o estado da sincronización"
|
||||
|
||||
msgid "Retry"
|
||||
msgstr ""
|
||||
|
||||
msgid "Add or remove tags"
|
||||
msgstr "Engadir ou eliminar etiquetas"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Duplicate"
|
||||
msgstr "Sae do aplicativo."
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "%s - Copy"
|
||||
msgstr "Copiar"
|
||||
|
||||
msgid "Switch between note and to-do type"
|
||||
msgstr "Cambiar entre notas e tarefas"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Switch to note type"
|
||||
msgstr "Cambiar entre notas e tarefas"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Switch to to-do type"
|
||||
msgstr "Cambiar entre notas e tarefas"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Copy Markdown link"
|
||||
msgstr "Markdown"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Delete note \"%s\"?"
|
||||
msgstr "Desexa eliminar as notas?"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Delete these %d notes?"
|
||||
msgstr "Desexa eliminar estas notas?"
|
||||
|
||||
msgid ""
|
||||
"Type a note title to jump to it. Or type # followed by a tag name, or @ "
|
||||
"followed by a notebook name."
|
||||
msgstr ""
|
||||
|
||||
msgid "Goto Anything..."
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Usage: %s"
|
||||
msgstr "Uso: %s"
|
||||
@@ -1243,12 +1334,24 @@ msgstr "En proceso"
|
||||
msgid "Synchronisation is already in progress. State: %s"
|
||||
msgstr "A sincronización xa está en proceso. Estado: %s"
|
||||
|
||||
msgid ""
|
||||
"Unknown item type downloaded - please upgrade Joplin to the latest version"
|
||||
msgstr ""
|
||||
|
||||
msgid "Encrypted"
|
||||
msgstr "Cifrado"
|
||||
|
||||
msgid "Encrypted items cannot be modified"
|
||||
msgstr "Non é posíbel modificar elementos cifrados"
|
||||
|
||||
#, fuzzy
|
||||
msgid "title"
|
||||
msgstr "Sen título"
|
||||
|
||||
#, fuzzy
|
||||
msgid "updated date"
|
||||
msgstr "Actualizado: %d."
|
||||
|
||||
msgid "Conflicts"
|
||||
msgstr "Conflitos"
|
||||
|
||||
@@ -1260,14 +1363,6 @@ msgstr "Non é posíbel mover a nota ao caderno «%s»"
|
||||
msgid "Notebooks cannot be named \"%s\", which is a reserved title."
|
||||
msgstr "Os cadernos non poden levar o nome «%s» porque é un título reservado."
|
||||
|
||||
#, fuzzy
|
||||
msgid "title"
|
||||
msgstr "Sen título"
|
||||
|
||||
#, fuzzy
|
||||
msgid "updated date"
|
||||
msgstr "Actualizado: %d."
|
||||
|
||||
#, fuzzy
|
||||
msgid "created date"
|
||||
msgstr "Creado: %d."
|
||||
@@ -1283,6 +1378,65 @@ msgstr "Non é posíbel copiar a nota ao caderno «%s»"
|
||||
msgid "Cannot move note to \"%s\" notebook"
|
||||
msgstr "Non é posíbel mover a nota ao caderno «%s»"
|
||||
|
||||
#, javascript-format
|
||||
msgid ""
|
||||
"Attention: If you change this location, make sure you copy all your content "
|
||||
"to it before syncing, otherwise all files will be removed! See the FAQ for "
|
||||
"more details: %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Synchronisation target"
|
||||
msgstr "Destino da sincronización"
|
||||
|
||||
msgid ""
|
||||
"The target to synchonise to. Each sync target may have additional parameters "
|
||||
"which are named as `sync.NUM.NAME` (all documented below)."
|
||||
msgstr ""
|
||||
"Destino co que sincronizar. Cada destino da sincronización pode ter "
|
||||
"parámetros adicionais que se chaman «sync.NUM.NAME» (documentados arriba)."
|
||||
|
||||
msgid "Directory to synchronise with (absolute path)"
|
||||
msgstr "Cartafol a sincronizar con (ruta absoluta)"
|
||||
|
||||
msgid "Nextcloud WebDAV URL"
|
||||
msgstr "URL de Nextcloud WebDAV"
|
||||
|
||||
msgid "Nextcloud username"
|
||||
msgstr "Usuario de Nextcloud"
|
||||
|
||||
msgid "Nextcloud password"
|
||||
msgstr "Contrasinal do Nextcloud"
|
||||
|
||||
msgid "WebDAV URL"
|
||||
msgstr "URL do WebDAV"
|
||||
|
||||
msgid "WebDAV username"
|
||||
msgstr "Usuario de WebDAV"
|
||||
|
||||
msgid "WebDAV password"
|
||||
msgstr "Contrasinal do WebDAV"
|
||||
|
||||
msgid "Attachment download behaviour"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"In \"Manual\" mode, attachments are downloaded only when you click on them. "
|
||||
"In \"Auto\", they are downloaded when you open the note. In \"Always\", all "
|
||||
"the attachments are downloaded whether you open the note or not."
|
||||
msgstr ""
|
||||
|
||||
msgid "Always"
|
||||
msgstr ""
|
||||
|
||||
msgid "Manual"
|
||||
msgstr ""
|
||||
|
||||
msgid "Auto"
|
||||
msgstr ""
|
||||
|
||||
msgid "Max concurrent connections"
|
||||
msgstr ""
|
||||
|
||||
msgid "Language"
|
||||
msgstr "Idioma"
|
||||
|
||||
@@ -1314,6 +1468,10 @@ msgstr "Ordenar notas por"
|
||||
msgid "Reverse sort order"
|
||||
msgstr "Orde inversa"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Sort notebooks by"
|
||||
msgstr "Ordenar notas por"
|
||||
|
||||
msgid "Save geo-location with notes"
|
||||
msgstr "Gardar xeolocalización coas notas"
|
||||
|
||||
@@ -1329,6 +1487,43 @@ msgstr "Focar no corpo"
|
||||
msgid "When creating a new note:"
|
||||
msgstr "Cando se crea unha nova nota:"
|
||||
|
||||
msgid "Enable soft breaks"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Enable math expressions"
|
||||
msgstr "Activar cifrado"
|
||||
|
||||
msgid "Enable ==mark== syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable footnotes"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable table of contents extension"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable ~sub~ syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable ^sup^ syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable deflist syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable abbreviation syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable markdown emoji"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable ++insert++ syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable multimarkdown table extension"
|
||||
msgstr ""
|
||||
|
||||
msgid "Show tray icon"
|
||||
msgstr "Mostrar a icona na bandexa"
|
||||
|
||||
@@ -1402,51 +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 ""
|
||||
"The path to synchronise with when file system synchronisation is enabled. "
|
||||
"See `sync.target`."
|
||||
msgstr ""
|
||||
"Ruta para sincronizar cando estea activada a sincronización do sistema de "
|
||||
"ficheiros. Vexa «sync.target»."
|
||||
|
||||
msgid "Nextcloud WebDAV URL"
|
||||
msgstr "URL de Nextcloud WebDAV"
|
||||
|
||||
#, javascript-format
|
||||
msgid ""
|
||||
"Attention: If you change this location, make sure you copy all your content "
|
||||
"to it before syncing, otherwise all files will be removed! See the FAQ for "
|
||||
"more details: %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Nextcloud username"
|
||||
msgstr "Usuario de Nextcloud"
|
||||
|
||||
msgid "Nextcloud password"
|
||||
msgstr "Contrasinal do Nextcloud"
|
||||
|
||||
msgid "WebDAV URL"
|
||||
msgstr "URL do WebDAV"
|
||||
|
||||
msgid "WebDAV username"
|
||||
msgstr "Usuario de WebDAV"
|
||||
|
||||
msgid "WebDAV password"
|
||||
msgstr "Contrasinal do WebDAV"
|
||||
|
||||
msgid "Custom TLS certificates"
|
||||
msgstr ""
|
||||
|
||||
@@ -1460,6 +1610,20 @@ msgstr ""
|
||||
msgid "Ignore TLS certificate errors"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Enable note history"
|
||||
msgstr "Activar cifrado"
|
||||
|
||||
msgid "days"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "%d days"
|
||||
msgstr ""
|
||||
|
||||
msgid "Keep note history for"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Invalid option value: \"%s\". Possible values are: %s."
|
||||
msgstr "Valor incorrecto de opción: «%s». Os valores posíbeis son: %s."
|
||||
@@ -1479,6 +1643,9 @@ msgstr ""
|
||||
msgid "Note"
|
||||
msgstr "Cadernos"
|
||||
|
||||
msgid "Plugins"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Application"
|
||||
msgstr "Sae do aplicativo."
|
||||
@@ -1503,6 +1670,9 @@ msgstr "Ficheiro de exportación de Evernote"
|
||||
msgid "Json Export Directory"
|
||||
msgstr "Cartafol de exportación do Joplin"
|
||||
|
||||
msgid "File"
|
||||
msgstr "Ficheiro"
|
||||
|
||||
msgid "Directory"
|
||||
msgstr "Cartafol"
|
||||
|
||||
@@ -1528,13 +1698,12 @@ msgstr "Non hai datos para exportar."
|
||||
msgid "Please specify the notebook where the notes should be imported to."
|
||||
msgstr "Indique o caderno ao que importar as notas."
|
||||
|
||||
msgid "Restored Notes"
|
||||
msgstr ""
|
||||
|
||||
msgid "Items that cannot be synchronised"
|
||||
msgstr "Elementos que non se poden sincronizar"
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s (%s): %s"
|
||||
msgstr "%s (%s): %s"
|
||||
|
||||
msgid ""
|
||||
"These items will remain on the device but will not be uploaded to the sync "
|
||||
"target. In order to find these items, either search for the title or the ID "
|
||||
@@ -1544,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)"
|
||||
|
||||
@@ -1664,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"
|
||||
@@ -1683,10 +1874,6 @@ msgstr ""
|
||||
msgid "Joplin website"
|
||||
msgstr "Sitio web de Joplin"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Joplin v%s"
|
||||
msgstr "Sitio web de Joplin"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Database v%s"
|
||||
msgstr ""
|
||||
@@ -1772,10 +1959,6 @@ msgstr "Converter para nota"
|
||||
msgid "Convert to todo"
|
||||
msgstr "Converter para tarefa"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Copy Markdown link"
|
||||
msgstr "Markdown"
|
||||
|
||||
msgid "Hide metadata"
|
||||
msgstr "Ocultar metadados"
|
||||
|
||||
@@ -1788,6 +1971,9 @@ msgstr "Ver no mapa"
|
||||
msgid "Go to source URL"
|
||||
msgstr ""
|
||||
|
||||
msgid "Edit"
|
||||
msgstr "Edtar"
|
||||
|
||||
msgid "Delete notebook"
|
||||
msgstr "Eliminar caderno"
|
||||
|
||||
@@ -1810,26 +1996,25 @@ msgstr "Non ten cadernos actualmente. Cree un premendo no botón (+)."
|
||||
msgid "Welcome"
|
||||
msgstr "Benvido/a"
|
||||
|
||||
#~ 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 "Some items cannot be decrypted."
|
||||
#~ msgstr "Non é posíbel descifrar algúns elementos."
|
||||
|
||||
#~ msgid "%s (%s): %s"
|
||||
#~ msgstr "%s (%s): %s"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "The path to synchronise with when file system synchronisation is enabled. "
|
||||
#~ "See `sync.target`."
|
||||
#~ msgstr ""
|
||||
#~ "Ruta para sincronizar cando estea activada a sincronización do sistema de "
|
||||
#~ "ficheiros. Vexa «sync.target»."
|
||||
|
||||
#, fuzzy
|
||||
#~ msgid "%s - Copy"
|
||||
#~ msgstr "Copiar"
|
||||
|
||||
#~ msgid "Switch between note and to-do type"
|
||||
#~ msgstr "Cambiar entre notas e tarefas"
|
||||
|
||||
#, fuzzy
|
||||
#~ msgid "Switch to note type"
|
||||
#~ msgstr "Cambiar entre notas e tarefas"
|
||||
|
||||
#, fuzzy
|
||||
#~ msgid "Switch to to-do type"
|
||||
#~ msgstr "Cambiar entre notas e tarefas"
|
||||
|
||||
#~ msgid "Delete notes?"
|
||||
#~ msgstr "Desexa eliminar as notas?"
|
||||
#~ msgid "Joplin v%s"
|
||||
#~ msgstr "Sitio web de Joplin"
|
||||
|
||||
#~ msgid "State: %s."
|
||||
#~ msgstr "Estado: %s."
|
||||
|
||||
@@ -128,7 +128,7 @@ msgstr "Bilješka nije zadatak: \"%s\""
|
||||
|
||||
msgid ""
|
||||
"Manages E2EE configuration. Commands are `enable`, `disable`, `decrypt`, "
|
||||
"`status` and `target-status`."
|
||||
"`status`, `decrypt-file` and `target-status`."
|
||||
msgstr ""
|
||||
|
||||
msgid "Enter master password:"
|
||||
@@ -601,8 +601,8 @@ msgstr ""
|
||||
msgid "PDF File"
|
||||
msgstr "Datoteka"
|
||||
|
||||
msgid "File"
|
||||
msgstr "Datoteka"
|
||||
msgid "Synchronisation status"
|
||||
msgstr "Status sinkronizacije"
|
||||
|
||||
msgid "New note"
|
||||
msgstr "Nova bilješka"
|
||||
@@ -613,6 +613,36 @@ msgstr "Novi zadatak"
|
||||
msgid "New notebook"
|
||||
msgstr "Nova bilježnica"
|
||||
|
||||
msgid "Print"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "General Options"
|
||||
msgstr "Opcije"
|
||||
|
||||
msgid "Encryption options"
|
||||
msgstr ""
|
||||
|
||||
msgid "Web clipper options"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s %s (%s, %s)"
|
||||
msgstr "%s %s (%s, %s)"
|
||||
|
||||
#, fuzzy
|
||||
msgid "&File"
|
||||
msgstr "Datoteka"
|
||||
|
||||
msgid "About Joplin"
|
||||
msgstr "O Joplinu"
|
||||
|
||||
msgid "Preferences..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Check for updates..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Import"
|
||||
msgstr "Uvoz"
|
||||
|
||||
@@ -620,8 +650,8 @@ msgstr "Uvoz"
|
||||
msgid "Export"
|
||||
msgstr "Uvoz"
|
||||
|
||||
msgid "Print"
|
||||
msgstr ""
|
||||
msgid "Synchronise"
|
||||
msgstr "Sinkroniziraj"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Hide %s"
|
||||
@@ -630,7 +660,11 @@ msgstr ""
|
||||
msgid "Quit"
|
||||
msgstr "Izađi"
|
||||
|
||||
msgid "Edit"
|
||||
msgid "Close Window"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "&Edit"
|
||||
msgstr "Uredi"
|
||||
|
||||
msgid "Copy"
|
||||
@@ -668,7 +702,7 @@ msgstr "Pretraži u svim bilješkama"
|
||||
msgid "Search in current note"
|
||||
msgstr "Pretraži u svim bilješkama"
|
||||
|
||||
msgid "View"
|
||||
msgid "&View"
|
||||
msgstr ""
|
||||
|
||||
msgid "Toggle sidebar"
|
||||
@@ -681,23 +715,12 @@ msgstr ""
|
||||
msgid "Focus"
|
||||
msgstr "Naslov bilješke:"
|
||||
|
||||
msgid "Tools"
|
||||
#, fuzzy
|
||||
msgid "&Tools"
|
||||
msgstr "Alati"
|
||||
|
||||
msgid "Synchronisation status"
|
||||
msgstr "Status sinkronizacije"
|
||||
|
||||
msgid "Web clipper options"
|
||||
msgstr ""
|
||||
|
||||
msgid "Encryption options"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "General Options"
|
||||
msgstr "Opcije"
|
||||
|
||||
msgid "Help"
|
||||
msgid "&Help"
|
||||
msgstr "Pomoć"
|
||||
|
||||
msgid "Website and documentation"
|
||||
@@ -707,16 +730,9 @@ msgstr "Website i dokumentacija"
|
||||
msgid "Make a donation"
|
||||
msgstr "Website i dokumentacija"
|
||||
|
||||
msgid "Check for updates..."
|
||||
msgid "Toggle development tools"
|
||||
msgstr ""
|
||||
|
||||
msgid "About Joplin"
|
||||
msgstr "O Joplinu"
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s %s (%s, %s)"
|
||||
msgstr "%s %s (%s, %s)"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Open %s"
|
||||
msgstr "On %s: %s"
|
||||
@@ -741,11 +757,11 @@ msgid "An update is available, do you want to download it now?"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Your version: v%s"
|
||||
msgid "Your version: %s"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "New version: v%s"
|
||||
msgid "New version: %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Yes"
|
||||
@@ -820,13 +836,13 @@ msgstr ""
|
||||
msgid "Notes and settings are stored in: %s"
|
||||
msgstr "Bilješke i postavke su pohranjene u: %s"
|
||||
|
||||
msgid "Browse..."
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Check synchronisation configuration"
|
||||
msgstr "Prekini sinkronizaciju"
|
||||
|
||||
msgid "Browse..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Apply"
|
||||
msgstr ""
|
||||
|
||||
@@ -931,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:"
|
||||
|
||||
@@ -957,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 ""
|
||||
@@ -977,9 +989,33 @@ msgstr ""
|
||||
msgid "URL"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Note History"
|
||||
msgstr "Bilježnice"
|
||||
|
||||
msgid "Previous versions of this note"
|
||||
msgstr ""
|
||||
|
||||
msgid "Note properties"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "The note \"%s\" has been successfully restored to the notebook \"%s\"."
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "This note has no history"
|
||||
msgstr "Bilješka je promijenjena:"
|
||||
|
||||
msgid "Restore"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid ""
|
||||
"Click \"%s\" to restore the note. It will be copied in the notebook named "
|
||||
"\"%s\". The current version of the note will not be replaced or modified."
|
||||
msgstr ""
|
||||
|
||||
msgid "Open..."
|
||||
msgstr ""
|
||||
|
||||
@@ -1103,7 +1139,16 @@ msgstr ""
|
||||
msgid "Clipper Options"
|
||||
msgstr "Opcije"
|
||||
|
||||
msgid "Remove this tag from all the notes?"
|
||||
#, fuzzy, javascript-format
|
||||
msgid ""
|
||||
"Delete notebook \"%s\"?\n"
|
||||
"\n"
|
||||
"All notes and sub-notebooks within this notebook will also be deleted."
|
||||
msgstr ""
|
||||
"Obrisati bilježnicu? Sve bilješke u toj bilježnici će također biti obrisane."
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Remove tag \"%s\" from all notes?"
|
||||
msgstr "Makni ovu oznaku iz svih bilješki?"
|
||||
|
||||
msgid "Remove this search from the sidebar?"
|
||||
@@ -1115,23 +1160,64 @@ msgstr "Obriši"
|
||||
msgid "Rename"
|
||||
msgstr "Preimenuj"
|
||||
|
||||
msgid "Synchronise"
|
||||
msgstr "Sinkroniziraj"
|
||||
|
||||
msgid "Notebooks"
|
||||
msgstr "Bilježnice"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Decrypting items: %d/%d"
|
||||
msgstr "Stvorene lokalne stavke: %d."
|
||||
msgstr "Stvorene lokalne stavke: %d/%d"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Fetching resources: %d"
|
||||
msgstr "Resursi: %d."
|
||||
msgid "Fetching resources: %d/%d"
|
||||
msgstr "Resursi: %d/%d"
|
||||
|
||||
msgid "Please select where the sync status should be exported to"
|
||||
msgstr "Odaberi lokaciju za izvoz statusa sinkronizacije"
|
||||
|
||||
msgid "Retry"
|
||||
msgstr ""
|
||||
|
||||
msgid "Add or remove tags"
|
||||
msgstr "Dodaj ili makni oznake"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Duplicate"
|
||||
msgstr "Izađi iz aplikacije."
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "%s - Copy"
|
||||
msgstr "Kopiraj"
|
||||
|
||||
msgid "Switch between note and to-do type"
|
||||
msgstr "Zamijeni bilješku i zadatak"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Switch to note type"
|
||||
msgstr "Zamijeni bilješku i zadatak"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Switch to to-do type"
|
||||
msgstr "Zamijeni bilješku i zadatak"
|
||||
|
||||
msgid "Copy Markdown link"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Delete note \"%s\"?"
|
||||
msgstr "Obriši bilješke?"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Delete these %d notes?"
|
||||
msgstr "Obriši ove bilješke?"
|
||||
|
||||
msgid ""
|
||||
"Type a note title to jump to it. Or type # followed by a tag name, or @ "
|
||||
"followed by a notebook name."
|
||||
msgstr ""
|
||||
|
||||
msgid "Goto Anything..."
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Usage: %s"
|
||||
msgstr "Korištenje: %s"
|
||||
@@ -1242,6 +1328,10 @@ msgstr ""
|
||||
msgid "Synchronisation is already in progress. State: %s"
|
||||
msgstr "Sinkronizacija je već u toku. Stanje: %s"
|
||||
|
||||
msgid ""
|
||||
"Unknown item type downloaded - please upgrade Joplin to the latest version"
|
||||
msgstr ""
|
||||
|
||||
msgid "Encrypted"
|
||||
msgstr ""
|
||||
|
||||
@@ -1249,6 +1339,14 @@ msgstr ""
|
||||
msgid "Encrypted items cannot be modified"
|
||||
msgstr "Neke stavke se ne mogu sinkronizirati."
|
||||
|
||||
#, fuzzy
|
||||
msgid "title"
|
||||
msgstr "Nenaslovljen"
|
||||
|
||||
#, fuzzy
|
||||
msgid "updated date"
|
||||
msgstr "Ažurirano: %d."
|
||||
|
||||
msgid "Conflicts"
|
||||
msgstr "Sukobi"
|
||||
|
||||
@@ -1260,14 +1358,6 @@ msgstr "Ne mogu premjestiti bilješku u bilježnicu %s"
|
||||
msgid "Notebooks cannot be named \"%s\", which is a reserved title."
|
||||
msgstr "Naslov \"%s\" je rezerviran i ne može se koristiti."
|
||||
|
||||
#, fuzzy
|
||||
msgid "title"
|
||||
msgstr "Nenaslovljen"
|
||||
|
||||
#, fuzzy
|
||||
msgid "updated date"
|
||||
msgstr "Ažurirano: %d."
|
||||
|
||||
#, fuzzy
|
||||
msgid "created date"
|
||||
msgstr "Stvoreno: %d."
|
||||
@@ -1283,6 +1373,63 @@ msgstr "Ne mogu kopirati bilješku u bilježnicu %s"
|
||||
msgid "Cannot move note to \"%s\" notebook"
|
||||
msgstr "Ne mogu premjestiti bilješku u bilježnicu %s"
|
||||
|
||||
#, javascript-format
|
||||
msgid ""
|
||||
"Attention: If you change this location, make sure you copy all your content "
|
||||
"to it before syncing, otherwise all files will be removed! See the FAQ for "
|
||||
"more details: %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Synchronisation target"
|
||||
msgstr "Sinkroniziraj sa"
|
||||
|
||||
msgid ""
|
||||
"The target to synchonise to. Each sync target may have additional parameters "
|
||||
"which are named as `sync.NUM.NAME` (all documented below)."
|
||||
msgstr ""
|
||||
|
||||
msgid "Directory to synchronise with (absolute path)"
|
||||
msgstr "Direktorij za sinkroniziranje (apsolutna putanja)"
|
||||
|
||||
msgid "Nextcloud WebDAV URL"
|
||||
msgstr ""
|
||||
|
||||
msgid "Nextcloud username"
|
||||
msgstr ""
|
||||
|
||||
msgid "Nextcloud password"
|
||||
msgstr ""
|
||||
|
||||
msgid "WebDAV URL"
|
||||
msgstr ""
|
||||
|
||||
msgid "WebDAV username"
|
||||
msgstr ""
|
||||
|
||||
msgid "WebDAV password"
|
||||
msgstr ""
|
||||
|
||||
msgid "Attachment download behaviour"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"In \"Manual\" mode, attachments are downloaded only when you click on them. "
|
||||
"In \"Auto\", they are downloaded when you open the note. In \"Always\", all "
|
||||
"the attachments are downloaded whether you open the note or not."
|
||||
msgstr ""
|
||||
|
||||
msgid "Always"
|
||||
msgstr ""
|
||||
|
||||
msgid "Manual"
|
||||
msgstr ""
|
||||
|
||||
msgid "Auto"
|
||||
msgstr ""
|
||||
|
||||
msgid "Max concurrent connections"
|
||||
msgstr ""
|
||||
|
||||
msgid "Language"
|
||||
msgstr "Jezik"
|
||||
|
||||
@@ -1316,6 +1463,10 @@ msgstr ""
|
||||
msgid "Reverse sort order"
|
||||
msgstr "Mijenja redoslijed."
|
||||
|
||||
#, fuzzy
|
||||
msgid "Sort notebooks by"
|
||||
msgstr "Uredi bilježnicu"
|
||||
|
||||
msgid "Save geo-location with notes"
|
||||
msgstr "Spremi geolokacijske podatke sa bilješkama"
|
||||
|
||||
@@ -1334,6 +1485,42 @@ msgstr ""
|
||||
msgid "When creating a new note:"
|
||||
msgstr "Stvara novu bilješku."
|
||||
|
||||
msgid "Enable soft breaks"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable math expressions"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable ==mark== syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable footnotes"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable table of contents extension"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable ~sub~ syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable ^sup^ syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable deflist syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable abbreviation syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable markdown emoji"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable ++insert++ syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable multimarkdown table extension"
|
||||
msgstr ""
|
||||
|
||||
msgid "Show tray icon"
|
||||
msgstr ""
|
||||
|
||||
@@ -1404,49 +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 ""
|
||||
"The path to synchronise with when file system synchronisation is enabled. "
|
||||
"See `sync.target`."
|
||||
msgstr ""
|
||||
"Putanja do direktorija za sinkronizaciju u slučaju kad je sinkronizacija sa "
|
||||
"datotečnim sustavom omogućena. Vidi `sync.target`."
|
||||
|
||||
msgid "Nextcloud WebDAV URL"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid ""
|
||||
"Attention: If you change this location, make sure you copy all your content "
|
||||
"to it before syncing, otherwise all files will be removed! See the FAQ for "
|
||||
"more details: %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Nextcloud username"
|
||||
msgstr ""
|
||||
|
||||
msgid "Nextcloud password"
|
||||
msgstr ""
|
||||
|
||||
msgid "WebDAV URL"
|
||||
msgstr ""
|
||||
|
||||
msgid "WebDAV username"
|
||||
msgstr ""
|
||||
|
||||
msgid "WebDAV password"
|
||||
msgstr ""
|
||||
|
||||
msgid "Custom TLS certificates"
|
||||
msgstr ""
|
||||
|
||||
@@ -1460,6 +1604,20 @@ msgstr ""
|
||||
msgid "Ignore TLS certificate errors"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Enable note history"
|
||||
msgstr "Bilješka je promijenjena:"
|
||||
|
||||
msgid "days"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "%d days"
|
||||
msgstr ""
|
||||
|
||||
msgid "Keep note history for"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Invalid option value: \"%s\". Possible values are: %s."
|
||||
msgstr "Nevažeća vrijednost: \"%s\". Moguće vrijednosti su: %s."
|
||||
@@ -1479,6 +1637,9 @@ msgstr ""
|
||||
msgid "Note"
|
||||
msgstr "Bilježnice"
|
||||
|
||||
msgid "Plugins"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Application"
|
||||
msgstr "Izađi iz aplikacije."
|
||||
@@ -1505,6 +1666,9 @@ msgstr "Evernote izvozne datoteke"
|
||||
msgid "Json Export Directory"
|
||||
msgstr "Evernote izvozne datoteke"
|
||||
|
||||
msgid "File"
|
||||
msgstr "Datoteka"
|
||||
|
||||
msgid "Directory"
|
||||
msgstr ""
|
||||
|
||||
@@ -1529,19 +1693,36 @@ msgstr ""
|
||||
msgid "Please specify the notebook where the notes should be imported to."
|
||||
msgstr "Odaberi lokaciju za izvoz statusa sinkronizacije"
|
||||
|
||||
msgid "Restored Notes"
|
||||
msgstr ""
|
||||
|
||||
msgid "Items that cannot be synchronised"
|
||||
msgstr "Stavke koje se ne mogu sinkronizirati"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "%s (%s): %s"
|
||||
msgstr "%s %s (%s)"
|
||||
|
||||
msgid ""
|
||||
"These items will remain on the device but will not be uploaded to the sync "
|
||||
"target. In order to find these items, either search for the title or the ID "
|
||||
"(which is displayed in brackets above)."
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "%s (%s) could not be uploaded: %s"
|
||||
msgstr "Bilježnicu nije moguće snimiti: %s"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Item \"%s\" could not be downloaded: %s"
|
||||
msgstr "Bilježnicu nije moguće snimiti: %s"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Items that cannot be decrypted"
|
||||
msgstr "Stavke koje se ne mogu sinkronizirati"
|
||||
|
||||
msgid ""
|
||||
"Joplin failed to decrypt these items multiple times, possibly because they "
|
||||
"are corrupted or too large. These items will remain on the device but Joplin "
|
||||
"will no longer attempt to decrypt them."
|
||||
msgstr ""
|
||||
|
||||
msgid "Sync status (synced items / total items)"
|
||||
msgstr "Status (sinkronizirane stavke / ukupni broj stavki)"
|
||||
|
||||
@@ -1662,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"
|
||||
@@ -1681,10 +1866,6 @@ msgstr ""
|
||||
msgid "Joplin website"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Joplin v%s"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Database v%s"
|
||||
msgstr ""
|
||||
@@ -1772,9 +1953,6 @@ msgstr "Pretvori u bilješku"
|
||||
msgid "Convert to todo"
|
||||
msgstr "Pretvori u zadatak"
|
||||
|
||||
msgid "Copy Markdown link"
|
||||
msgstr ""
|
||||
|
||||
msgid "Hide metadata"
|
||||
msgstr "Sakrij metapodatke"
|
||||
|
||||
@@ -1787,6 +1965,9 @@ msgstr "Vidi na karti"
|
||||
msgid "Go to source URL"
|
||||
msgstr ""
|
||||
|
||||
msgid "Edit"
|
||||
msgstr "Uredi"
|
||||
|
||||
msgid "Delete notebook"
|
||||
msgstr "Obriši bilježnicu"
|
||||
|
||||
@@ -1809,26 +1990,23 @@ msgstr "Trenutno nemaš nijednu bilježnicu. Stvori novu klikom na (+) gumb."
|
||||
msgid "Welcome"
|
||||
msgstr "Dobro došli"
|
||||
|
||||
#~ msgid "Add or remove tags"
|
||||
#~ msgstr "Dodaj ili makni oznake"
|
||||
#~ msgid "Separate each tag by a comma."
|
||||
#~ msgstr "Odvoji oznake zarezom."
|
||||
|
||||
#, fuzzy
|
||||
#~ msgid "%s - Copy"
|
||||
#~ msgstr "Kopiraj"
|
||||
|
||||
#~ msgid "Switch between note and to-do type"
|
||||
#~ msgstr "Zamijeni bilješku i zadatak"
|
||||
#~ msgid "Some items cannot be decrypted."
|
||||
#~ msgstr "Neke stavke se ne mogu sinkronizirati."
|
||||
|
||||
#, fuzzy
|
||||
#~ msgid "Switch to note type"
|
||||
#~ msgstr "Zamijeni bilješku i zadatak"
|
||||
#~ msgid "%s (%s): %s"
|
||||
#~ msgstr "%s %s (%s)"
|
||||
|
||||
#, fuzzy
|
||||
#~ msgid "Switch to to-do type"
|
||||
#~ msgstr "Zamijeni bilješku i zadatak"
|
||||
|
||||
#~ msgid "Delete notes?"
|
||||
#~ msgstr "Obriši bilješke?"
|
||||
#~ msgid ""
|
||||
#~ "The path to synchronise with when file system synchronisation is enabled. "
|
||||
#~ "See `sync.target`."
|
||||
#~ msgstr ""
|
||||
#~ "Putanja do direktorija za sinkronizaciju u slučaju kad je sinkronizacija "
|
||||
#~ "sa datotečnim sustavom omogućena. Vidi `sync.target`."
|
||||
|
||||
#, fuzzy
|
||||
#~ msgid "State: %s."
|
||||
|
||||
@@ -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."
|
||||
@@ -124,9 +124,10 @@ msgstr "Segna un \"Cose-da-fare\" come completato."
|
||||
msgid "Note is not a to-do: \"%s\""
|
||||
msgstr "La nota non è un \"Cose-da-fare\": \"%s\""
|
||||
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
"Manages E2EE configuration. Commands are `enable`, `disable`, `decrypt`, "
|
||||
"`status` and `target-status`."
|
||||
"`status`, `decrypt-file` and `target-status`."
|
||||
msgstr ""
|
||||
"Gestisci la configurazione E2EE. I comandi sono `abilita`, `disabilita`, "
|
||||
"`decripta`, `stato` e `stato-target`."
|
||||
@@ -590,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..."
|
||||
@@ -610,8 +609,8 @@ msgstr "Importazione da \"%s\" come formato \"%s\". Si prega di attendere..."
|
||||
msgid "PDF File"
|
||||
msgstr "PDF File"
|
||||
|
||||
msgid "File"
|
||||
msgstr "File"
|
||||
msgid "Synchronisation status"
|
||||
msgstr "Stato di sincronizzazione"
|
||||
|
||||
msgid "New note"
|
||||
msgstr "Nuova nota"
|
||||
@@ -622,14 +621,42 @@ msgstr "Nuovo \"Cose-da-fare\""
|
||||
msgid "New notebook"
|
||||
msgstr "Nuovo taccuino"
|
||||
|
||||
msgid "Print"
|
||||
msgstr "Stampa"
|
||||
|
||||
msgid "General Options"
|
||||
msgstr "Opzioni Generali"
|
||||
|
||||
msgid "Encryption options"
|
||||
msgstr "Opzioni Crittografia"
|
||||
|
||||
msgid "Web clipper options"
|
||||
msgstr "Opzioni Web Clipper"
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s %s (%s, %s)"
|
||||
msgstr "%s %s (%s, %s)"
|
||||
|
||||
msgid "&File"
|
||||
msgstr "&File"
|
||||
|
||||
msgid "About Joplin"
|
||||
msgstr "Informazione su Joplin"
|
||||
|
||||
msgid "Preferences..."
|
||||
msgstr "Preferenze..."
|
||||
|
||||
msgid "Check for updates..."
|
||||
msgstr "Controlla aggiornamenti..."
|
||||
|
||||
msgid "Import"
|
||||
msgstr "Importa"
|
||||
|
||||
msgid "Export"
|
||||
msgstr "Esporta"
|
||||
|
||||
msgid "Print"
|
||||
msgstr "Stampa"
|
||||
msgid "Synchronise"
|
||||
msgstr "Sincronizza"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Hide %s"
|
||||
@@ -638,8 +665,11 @@ msgstr "Nascondi %s"
|
||||
msgid "Quit"
|
||||
msgstr "Esci"
|
||||
|
||||
msgid "Edit"
|
||||
msgstr "Modifica"
|
||||
msgid "Close Window"
|
||||
msgstr "Chiudi finestra"
|
||||
|
||||
msgid "&Edit"
|
||||
msgstr "&Modifica"
|
||||
|
||||
msgid "Copy"
|
||||
msgstr "Copia"
|
||||
@@ -660,7 +690,7 @@ msgid "Italic"
|
||||
msgstr "Corsivo"
|
||||
|
||||
msgid "Link"
|
||||
msgstr ""
|
||||
msgstr "Link"
|
||||
|
||||
msgid "Insert Date Time"
|
||||
msgstr "Inserisci data e ora"
|
||||
@@ -674,8 +704,8 @@ msgstr "Cerca in tutte le note"
|
||||
msgid "Search in current note"
|
||||
msgstr "Cerca nella nota corrente"
|
||||
|
||||
msgid "View"
|
||||
msgstr "Vista"
|
||||
msgid "&View"
|
||||
msgstr "&Vista"
|
||||
|
||||
msgid "Toggle sidebar"
|
||||
msgstr "Attiva / disattiva barra laterale"
|
||||
@@ -683,27 +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"
|
||||
|
||||
msgid "Tools"
|
||||
msgstr "Strumenti"
|
||||
msgid "&Tools"
|
||||
msgstr "&Strumenti"
|
||||
|
||||
msgid "Synchronisation status"
|
||||
msgstr "Stato di sincronizzazione"
|
||||
|
||||
msgid "Web clipper options"
|
||||
msgstr "Opzioni Web Clipper"
|
||||
|
||||
msgid "Encryption options"
|
||||
msgstr "Opzioni Crittografia"
|
||||
|
||||
msgid "General Options"
|
||||
msgstr "Opzioni Generali"
|
||||
|
||||
msgid "Help"
|
||||
msgstr "Aiuto"
|
||||
msgid "&Help"
|
||||
msgstr "&Aiuto"
|
||||
|
||||
msgid "Website and documentation"
|
||||
msgstr "Sito web e documentazione"
|
||||
@@ -711,15 +728,8 @@ msgstr "Sito web e documentazione"
|
||||
msgid "Make a donation"
|
||||
msgstr "Fai una donazione"
|
||||
|
||||
msgid "Check for updates..."
|
||||
msgstr "Controlla aggiornamenti ..."
|
||||
|
||||
msgid "About Joplin"
|
||||
msgstr "Informazione su Joplin"
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s %s (%s, %s)"
|
||||
msgstr "%s %s (%s, %s)"
|
||||
msgid "Toggle development tools"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Open %s"
|
||||
@@ -745,12 +755,12 @@ msgid "An update is available, do you want to download it now?"
|
||||
msgstr "È disponibile un aggiornamento, vuoi scaricarlo ora?"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Your version: v%s"
|
||||
msgstr ""
|
||||
msgid "Your version: %s"
|
||||
msgstr "Tua versione: %s"
|
||||
|
||||
#, javascript-format
|
||||
msgid "New version: v%s"
|
||||
msgstr ""
|
||||
msgid "New version: %s"
|
||||
msgstr "Nuova versione: %s"
|
||||
|
||||
msgid "Yes"
|
||||
msgstr "Sì"
|
||||
@@ -759,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 ""
|
||||
@@ -810,31 +820,32 @@ msgstr "Passaggio 2: installare l'estensione"
|
||||
msgid "Download and install the relevant extension for your browser:"
|
||||
msgstr "Scarica e installa l'estensione adatta per il tuo browser:"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Advanced options"
|
||||
msgstr "Mostra opzioni avanzate"
|
||||
msgstr "Opzioni avanzate"
|
||||
|
||||
msgid "Authorisation token:"
|
||||
msgstr ""
|
||||
msgstr "Token autorizzativo:"
|
||||
|
||||
msgid "Copy token"
|
||||
msgstr ""
|
||||
msgstr "Copia token"
|
||||
|
||||
msgid ""
|
||||
"This authorisation token is only needed to allow third-party applications to "
|
||||
"access Joplin."
|
||||
msgstr ""
|
||||
"Il token autorizzativo è necessario solo per permettere ad applicazioni di "
|
||||
"terze parti di accedere a Joplin."
|
||||
|
||||
#, javascript-format
|
||||
msgid "Notes and settings are stored in: %s"
|
||||
msgstr "Le note e le impostazioni sono memorizzate in: %s"
|
||||
|
||||
msgid "Browse..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Check synchronisation configuration"
|
||||
msgstr "Controlla la configurazione della sincronizzazione"
|
||||
|
||||
msgid "Browse..."
|
||||
msgstr "Naviga..."
|
||||
|
||||
msgid "Apply"
|
||||
msgstr "Applica"
|
||||
|
||||
@@ -930,9 +941,8 @@ msgstr "Stato"
|
||||
msgid "Encryption is:"
|
||||
msgstr "La crittografia è:"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Usage"
|
||||
msgstr "Uso: %s"
|
||||
msgstr "Uso"
|
||||
|
||||
msgid "Back"
|
||||
msgstr "Indietro"
|
||||
@@ -954,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:"
|
||||
|
||||
@@ -978,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"
|
||||
@@ -994,16 +1002,41 @@ msgstr ""
|
||||
"\"."
|
||||
|
||||
msgid "Location"
|
||||
msgstr ""
|
||||
msgstr "Posizione"
|
||||
|
||||
msgid "URL"
|
||||
msgstr ""
|
||||
msgstr "URL"
|
||||
|
||||
msgid "Note History"
|
||||
msgstr "Cronologia nota"
|
||||
|
||||
msgid "Previous versions of this note"
|
||||
msgstr "Versione precedente di questa nota"
|
||||
|
||||
msgid "Note properties"
|
||||
msgstr "Proprietà della nota"
|
||||
|
||||
#, javascript-format
|
||||
msgid "The note \"%s\" has been successfully restored to the notebook \"%s\"."
|
||||
msgstr "La nota \"%s\" è stata ripristinata con successo nel taccuino \"%s\"."
|
||||
|
||||
msgid "This note has no history"
|
||||
msgstr "Questa nota non ha cronologia"
|
||||
|
||||
msgid "Restore"
|
||||
msgstr "Ripristina"
|
||||
|
||||
#, javascript-format
|
||||
msgid ""
|
||||
"Click \"%s\" to restore the note. It will be copied in the notebook named "
|
||||
"\"%s\". The current version of the note will not be replaced or modified."
|
||||
msgstr ""
|
||||
"Clicca \"%s\" per ripristinare la nota. Verrà copiata nel taccuino "
|
||||
"denominato \"%s\". La versione corrente della nota non verrà sostituita o "
|
||||
"modificata."
|
||||
|
||||
msgid "Open..."
|
||||
msgstr "Apri ..."
|
||||
msgstr "Apri..."
|
||||
|
||||
#, javascript-format
|
||||
msgid "This file could not be opened: %s"
|
||||
@@ -1034,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"
|
||||
@@ -1088,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..."
|
||||
@@ -1123,8 +1155,19 @@ msgstr "Opzioni di crittografia"
|
||||
msgid "Clipper Options"
|
||||
msgstr "Opzioni Clipper"
|
||||
|
||||
msgid "Remove this tag from all the notes?"
|
||||
msgstr "Rimuovere questa etichetta da tutte le note?"
|
||||
#, javascript-format
|
||||
msgid ""
|
||||
"Delete notebook \"%s\"?\n"
|
||||
"\n"
|
||||
"All notes and sub-notebooks within this notebook will also be deleted."
|
||||
msgstr ""
|
||||
"Eliminare taccuino \"%s\"?\n"
|
||||
"\n"
|
||||
"Anche tutte le note e cartelle di questo taccuino saranno cancellati."
|
||||
|
||||
#, javascript-format
|
||||
msgid "Remove tag \"%s\" from all notes?"
|
||||
msgstr "Rimuovere l’etichetta \"%s\" da tutte le note?"
|
||||
|
||||
msgid "Remove this search from the sidebar?"
|
||||
msgstr "Rimuovere questa ricerca dalla barra laterale?"
|
||||
@@ -1135,9 +1178,6 @@ msgstr "Elimina"
|
||||
msgid "Rename"
|
||||
msgstr "Rinomina"
|
||||
|
||||
msgid "Synchronise"
|
||||
msgstr "Sincronizza"
|
||||
|
||||
msgid "Notebooks"
|
||||
msgstr "Taccuini"
|
||||
|
||||
@@ -1146,12 +1186,53 @@ 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"
|
||||
|
||||
msgid "Duplicate"
|
||||
msgstr "Duplicare"
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s - Copy"
|
||||
msgstr "%s - Copia"
|
||||
|
||||
msgid "Switch between note and to-do type"
|
||||
msgstr "Converti nota in \"Cose-da-fare\" e viceversa"
|
||||
|
||||
msgid "Switch to note type"
|
||||
msgstr "Converti in nota"
|
||||
|
||||
msgid "Switch to to-do type"
|
||||
msgstr "Converti in \"Cose-da-fare\""
|
||||
|
||||
msgid "Copy Markdown link"
|
||||
msgstr "Copia il link Markdown"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Delete note \"%s\"?"
|
||||
msgstr "Eliminare la nota \"%s\"?"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Delete these %d notes?"
|
||||
msgstr "Cancellare queste %d note?"
|
||||
|
||||
msgid ""
|
||||
"Type a note title to jump to it. Or type # followed by a tag name, or @ "
|
||||
"followed by a notebook name."
|
||||
msgstr ""
|
||||
|
||||
msgid "Goto Anything..."
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Usage: %s"
|
||||
msgstr "Uso: %s"
|
||||
@@ -1264,12 +1345,22 @@ msgstr "In corso"
|
||||
msgid "Synchronisation is already in progress. State: %s"
|
||||
msgstr "La sincronizzazione è già in corso. Stato: %s"
|
||||
|
||||
msgid ""
|
||||
"Unknown item type downloaded - please upgrade Joplin to the latest version"
|
||||
msgstr ""
|
||||
|
||||
msgid "Encrypted"
|
||||
msgstr "Crittografato"
|
||||
|
||||
msgid "Encrypted items cannot be modified"
|
||||
msgstr "Gli elementi crittografati non possono essere modificati"
|
||||
|
||||
msgid "title"
|
||||
msgstr "titolo"
|
||||
|
||||
msgid "updated date"
|
||||
msgstr "data di aggiornamento"
|
||||
|
||||
msgid "Conflicts"
|
||||
msgstr "Conflitti"
|
||||
|
||||
@@ -1280,14 +1371,8 @@ msgstr "Impossibile spostare il Taccuino in questa posizione"
|
||||
msgid "Notebooks cannot be named \"%s\", which is a reserved title."
|
||||
msgstr "I blocchi non possono essere chiamati \"%s\". È un titolo riservato."
|
||||
|
||||
msgid "title"
|
||||
msgstr "Titolo"
|
||||
|
||||
msgid "updated date"
|
||||
msgstr "Data di aggiornamento"
|
||||
|
||||
msgid "created date"
|
||||
msgstr "Data di creazione"
|
||||
msgstr "data di creazione"
|
||||
|
||||
msgid "This note does not have geolocation information."
|
||||
msgstr "Questa nota non ha informazione sulla geolocalizzazione."
|
||||
@@ -1300,6 +1385,65 @@ msgstr "Non posso copiare la nota nel Taccuino \"%s\""
|
||||
msgid "Cannot move note to \"%s\" notebook"
|
||||
msgstr "Non posso spostare la nota nel Taccuino \"%s\""
|
||||
|
||||
#, javascript-format
|
||||
msgid ""
|
||||
"Attention: If you change this location, make sure you copy all your content "
|
||||
"to it before syncing, otherwise all files will be removed! See the FAQ for "
|
||||
"more details: %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Synchronisation target"
|
||||
msgstr "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"
|
||||
|
||||
@@ -1330,6 +1474,9 @@ msgstr "Ordina le note per"
|
||||
msgid "Reverse sort order"
|
||||
msgstr "Inverti l'ordine"
|
||||
|
||||
msgid "Sort notebooks by"
|
||||
msgstr "Ordina i taccuini per"
|
||||
|
||||
msgid "Save geo-location with notes"
|
||||
msgstr "Salva geolocalizzazione con le note"
|
||||
|
||||
@@ -1345,6 +1492,42 @@ msgstr "Focus sul testo"
|
||||
msgid "When creating a new note:"
|
||||
msgstr "Quando si crea una nuova nota:"
|
||||
|
||||
msgid "Enable soft breaks"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable math expressions"
|
||||
msgstr "Attiva espressioni matematiche"
|
||||
|
||||
msgid "Enable ==mark== syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable footnotes"
|
||||
msgstr "Attiva note a piè pagina"
|
||||
|
||||
msgid "Enable table of contents extension"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable ~sub~ syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable ^sup^ syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable deflist syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable abbreviation syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable markdown emoji"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable ++insert++ syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable multimarkdown table extension"
|
||||
msgstr ""
|
||||
|
||||
msgid "Show tray icon"
|
||||
msgstr "Visualizza tray icon"
|
||||
|
||||
@@ -1419,51 +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 ""
|
||||
"The path to synchronise with when file system synchronisation is enabled. "
|
||||
"See `sync.target`."
|
||||
msgstr ""
|
||||
"Il percorso di sincronizzazione quando la sincronizzazione è abilitata. Vedi "
|
||||
"`sync.target`."
|
||||
|
||||
msgid "Nextcloud WebDAV URL"
|
||||
msgstr "URL Nextcloud WebDAV"
|
||||
|
||||
#, javascript-format
|
||||
msgid ""
|
||||
"Attention: If you change this location, make sure you copy all your content "
|
||||
"to it before syncing, otherwise all files will be removed! See the FAQ for "
|
||||
"more details: %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Nextcloud username"
|
||||
msgstr "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"
|
||||
|
||||
@@ -1482,28 +1620,40 @@ msgstr ""
|
||||
msgid "Ignore TLS certificate errors"
|
||||
msgstr "Ignora gli errori del certificato TLS"
|
||||
|
||||
msgid "Enable note history"
|
||||
msgstr "Attiva cronologia della nota"
|
||||
|
||||
msgid "days"
|
||||
msgstr "giorni"
|
||||
|
||||
#, javascript-format
|
||||
msgid "%d days"
|
||||
msgstr "%d giorni"
|
||||
|
||||
msgid "Keep note history for"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Invalid option value: \"%s\". Possible values are: %s."
|
||||
msgstr "Opzione non valida: \"%s\". I valori possibili sono: %s."
|
||||
|
||||
#, fuzzy
|
||||
msgid "General"
|
||||
msgstr "Opzioni Generali"
|
||||
msgstr "Generale"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Synchronisation"
|
||||
msgstr "Stato di sincronizzazione"
|
||||
msgstr "Sincronizzazione"
|
||||
|
||||
msgid "Appearance"
|
||||
msgstr "Apparenza"
|
||||
|
||||
msgid "Note"
|
||||
msgstr "Nota"
|
||||
|
||||
msgid "Plugins"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Note"
|
||||
msgstr "Taccuini"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Application"
|
||||
msgstr "Esci dall'applicazione."
|
||||
msgstr "Applicazione"
|
||||
|
||||
#, javascript-format
|
||||
msgid "The tag \"%s\" already exists. Please choose a different name."
|
||||
@@ -1524,6 +1674,9 @@ msgstr "Esporta files di Evernote"
|
||||
msgid "Json Export Directory"
|
||||
msgstr "Cartella di esportazione JSON"
|
||||
|
||||
msgid "File"
|
||||
msgstr "File"
|
||||
|
||||
msgid "Directory"
|
||||
msgstr "Cartella"
|
||||
|
||||
@@ -1549,13 +1702,12 @@ msgstr "Non ci sono dati da esportare."
|
||||
msgid "Please specify the notebook where the notes should be imported to."
|
||||
msgstr "Si prega di specificare il Taccuino in cui importare le note."
|
||||
|
||||
msgid "Restored Notes"
|
||||
msgstr "Ripristina note"
|
||||
|
||||
msgid "Items that cannot be synchronised"
|
||||
msgstr "Elementi che non possono essere sincronizzati"
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s (%s): %s"
|
||||
msgstr "%s (%s): %s"
|
||||
|
||||
msgid ""
|
||||
"These items will remain on the device but will not be uploaded to the sync "
|
||||
"target. In order to find these items, either search for the title or the ID "
|
||||
@@ -1565,6 +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)"
|
||||
|
||||
@@ -1602,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 (+)."
|
||||
@@ -1632,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"
|
||||
@@ -1648,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 ""
|
||||
@@ -1674,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:"
|
||||
@@ -1684,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"
|
||||
@@ -1711,10 +1882,6 @@ msgstr ""
|
||||
msgid "Joplin website"
|
||||
msgstr "Sito web Joplin"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Joplin v%s"
|
||||
msgstr "Joplin v%s"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Database v%s"
|
||||
msgstr "Database v%s"
|
||||
@@ -1799,9 +1966,6 @@ msgstr "Converti in nota"
|
||||
msgid "Convert to todo"
|
||||
msgstr "Converti in Todo"
|
||||
|
||||
msgid "Copy Markdown link"
|
||||
msgstr "Copia il link Markdown"
|
||||
|
||||
msgid "Hide metadata"
|
||||
msgstr "Nascondi i Metadati"
|
||||
|
||||
@@ -1814,6 +1978,9 @@ msgstr "Guarda sulla mappa"
|
||||
msgid "Go to source URL"
|
||||
msgstr ""
|
||||
|
||||
msgid "Edit"
|
||||
msgstr "Modifica"
|
||||
|
||||
msgid "Delete notebook"
|
||||
msgstr "Cancella Taccuino"
|
||||
|
||||
@@ -1837,23 +2004,24 @@ msgstr ""
|
||||
msgid "Welcome"
|
||||
msgstr "Benvenuto"
|
||||
|
||||
#~ msgid "Add or remove tags"
|
||||
#~ msgstr "Aggiungi o rimuovi etichetta"
|
||||
#~ msgid "Separate each tag by a comma."
|
||||
#~ msgstr "Separa ogni etichetta da una virgola."
|
||||
|
||||
#~ msgid "Duplicate"
|
||||
#~ msgstr "Duplicare"
|
||||
#~ msgid "Some items cannot be decrypted."
|
||||
#~ msgstr "Alcuni elementi non possono essere decodificati."
|
||||
|
||||
#~ msgid "%s - Copy"
|
||||
#~ msgstr "%s - Copia"
|
||||
#~ msgid "%s (%s): %s"
|
||||
#~ msgstr "%s (%s): %s"
|
||||
|
||||
#~ msgid "Switch between note and to-do type"
|
||||
#~ msgstr "Converti nota in \"Cose-da-fare\" e viceversa"
|
||||
#~ msgid ""
|
||||
#~ "The path to synchronise with when file system synchronisation is enabled. "
|
||||
#~ "See `sync.target`."
|
||||
#~ msgstr ""
|
||||
#~ "Il percorso di sincronizzazione quando la sincronizzazione è abilitata. "
|
||||
#~ "Vedi `sync.target`."
|
||||
|
||||
#~ msgid "Switch to note type"
|
||||
#~ msgstr "Converti in nota"
|
||||
|
||||
#~ msgid "Switch to to-do type"
|
||||
#~ msgstr "Converti in \"Cose-da-fare\""
|
||||
#~ msgid "Joplin v%s"
|
||||
#~ msgstr "Joplin v%s"
|
||||
|
||||
#~ msgid "Delete notes?"
|
||||
#~ msgstr "Eliminare le note?"
|
||||
@@ -1970,8 +2138,5 @@ msgstr "Benvenuto"
|
||||
#~ msgid "Delete notebook?"
|
||||
#~ msgstr "Eliminare il taccuino?"
|
||||
|
||||
#~ msgid "Delete notebook \"%s\"?"
|
||||
#~ msgstr "Eliminare il taccuino \"%s\"?"
|
||||
|
||||
#~ msgid "File system synchronisation target directory"
|
||||
#~ msgstr "Directory di destinazione per la sincronizzazione nel file system"
|
||||
|
||||
@@ -123,9 +123,10 @@ msgstr "ToDoを完了としてマークします。"
|
||||
msgid "Note is not a to-do: \"%s\""
|
||||
msgstr "ノートはToDoリストではありません:\"%s\""
|
||||
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
"Manages E2EE configuration. Commands are `enable`, `disable`, `decrypt`, "
|
||||
"`status` and `target-status`."
|
||||
"`status`, `decrypt-file` and `target-status`."
|
||||
msgstr ""
|
||||
"E2EEの設定を変更します。コマンドは `enable`, `disable`, `decrypt`, `status` "
|
||||
"and `target-status` です。"
|
||||
@@ -592,8 +593,8 @@ msgstr ""
|
||||
msgid "PDF File"
|
||||
msgstr "PDF ファイル"
|
||||
|
||||
msgid "File"
|
||||
msgstr "ファイル"
|
||||
msgid "Synchronisation status"
|
||||
msgstr "同期状況"
|
||||
|
||||
msgid "New note"
|
||||
msgstr "新しいノート"
|
||||
@@ -604,14 +605,43 @@ msgstr "新しいToDo"
|
||||
msgid "New notebook"
|
||||
msgstr "新しいノートブック"
|
||||
|
||||
msgid "Print"
|
||||
msgstr "印刷"
|
||||
|
||||
msgid "General Options"
|
||||
msgstr "全般のオプション"
|
||||
|
||||
msgid "Encryption options"
|
||||
msgstr "暗号化のオプション"
|
||||
|
||||
msgid "Web clipper options"
|
||||
msgstr "Webクリッパーのオプション"
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s %s (%s, %s)"
|
||||
msgstr "%s %s (%s, %s)"
|
||||
|
||||
#, fuzzy
|
||||
msgid "&File"
|
||||
msgstr "ファイル"
|
||||
|
||||
msgid "About Joplin"
|
||||
msgstr "Joplinについて"
|
||||
|
||||
msgid "Preferences..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Check for updates..."
|
||||
msgstr "アップデートのチェック..."
|
||||
|
||||
msgid "Import"
|
||||
msgstr "インポート"
|
||||
|
||||
msgid "Export"
|
||||
msgstr "エクスポート"
|
||||
|
||||
msgid "Print"
|
||||
msgstr "印刷"
|
||||
msgid "Synchronise"
|
||||
msgstr "同期"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Hide %s"
|
||||
@@ -620,7 +650,11 @@ msgstr "%s を隠す"
|
||||
msgid "Quit"
|
||||
msgstr "終了"
|
||||
|
||||
msgid "Edit"
|
||||
msgid "Close Window"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "&Edit"
|
||||
msgstr "編集"
|
||||
|
||||
msgid "Copy"
|
||||
@@ -656,7 +690,8 @@ msgstr "すべてのノートを検索"
|
||||
msgid "Search in current note"
|
||||
msgstr "現在のノートを検索"
|
||||
|
||||
msgid "View"
|
||||
#, fuzzy
|
||||
msgid "&View"
|
||||
msgstr "表示"
|
||||
|
||||
msgid "Toggle sidebar"
|
||||
@@ -669,22 +704,12 @@ msgstr "エディターレイアウトの表示切り替え"
|
||||
msgid "Focus"
|
||||
msgstr "本文にフォーカス"
|
||||
|
||||
msgid "Tools"
|
||||
#, fuzzy
|
||||
msgid "&Tools"
|
||||
msgstr "ツール"
|
||||
|
||||
msgid "Synchronisation status"
|
||||
msgstr "同期状況"
|
||||
|
||||
msgid "Web clipper options"
|
||||
msgstr "Webクリッパーのオプション"
|
||||
|
||||
msgid "Encryption options"
|
||||
msgstr "暗号化のオプション"
|
||||
|
||||
msgid "General Options"
|
||||
msgstr "全般のオプション"
|
||||
|
||||
msgid "Help"
|
||||
#, fuzzy
|
||||
msgid "&Help"
|
||||
msgstr "ヘルプ"
|
||||
|
||||
msgid "Website and documentation"
|
||||
@@ -693,15 +718,8 @@ msgstr "Webサイトとドキュメント"
|
||||
msgid "Make a donation"
|
||||
msgstr "寄付する"
|
||||
|
||||
msgid "Check for updates..."
|
||||
msgstr "アップデートのチェック..."
|
||||
|
||||
msgid "About Joplin"
|
||||
msgstr "Joplinについて"
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s %s (%s, %s)"
|
||||
msgstr "%s %s (%s, %s)"
|
||||
msgid "Toggle development tools"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Open %s"
|
||||
@@ -727,11 +745,11 @@ msgid "An update is available, do you want to download it now?"
|
||||
msgstr "アップデートがあります。すぐにダウンロードしますか?"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Your version: v%s"
|
||||
msgid "Your version: %s"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "New version: v%s"
|
||||
msgid "New version: %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Yes"
|
||||
@@ -811,12 +829,12 @@ msgstr ""
|
||||
msgid "Notes and settings are stored in: %s"
|
||||
msgstr "ノートと設定は次の場所に保存されます: %s"
|
||||
|
||||
msgid "Browse..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Check synchronisation configuration"
|
||||
msgstr "同期の設定を確認する"
|
||||
|
||||
msgid "Browse..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Apply"
|
||||
msgstr "適用"
|
||||
|
||||
@@ -934,9 +952,6 @@ msgstr "ノートブックの題名:"
|
||||
msgid "Add or remove tags:"
|
||||
msgstr "タグの追加・削除:"
|
||||
|
||||
msgid "Separate each tag by a comma."
|
||||
msgstr "それぞれのタグをカンマ(,)で区切ってください。"
|
||||
|
||||
msgid "Rename notebook:"
|
||||
msgstr "ノートブックの名前を変更:"
|
||||
|
||||
@@ -958,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 "パスワードの設定"
|
||||
@@ -977,9 +993,33 @@ msgstr "場所"
|
||||
msgid "URL"
|
||||
msgstr "URL"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Note History"
|
||||
msgstr "ノートブック"
|
||||
|
||||
msgid "Previous versions of this note"
|
||||
msgstr ""
|
||||
|
||||
msgid "Note properties"
|
||||
msgstr "ノートのプロパティ"
|
||||
|
||||
#, javascript-format
|
||||
msgid "The note \"%s\" has been successfully restored to the notebook \"%s\"."
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "This note has no history"
|
||||
msgstr "ノートは変更されています:"
|
||||
|
||||
msgid "Restore"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid ""
|
||||
"Click \"%s\" to restore the note. It will be copied in the notebook named "
|
||||
"\"%s\". The current version of the note will not be replaced or modified."
|
||||
msgstr ""
|
||||
|
||||
msgid "Open..."
|
||||
msgstr "開く..."
|
||||
|
||||
@@ -1100,7 +1140,17 @@ msgstr "暗号化のオプション"
|
||||
msgid "Clipper Options"
|
||||
msgstr "Clipperのオプション"
|
||||
|
||||
msgid "Remove this tag from all the notes?"
|
||||
#, fuzzy, javascript-format
|
||||
msgid ""
|
||||
"Delete notebook \"%s\"?\n"
|
||||
"\n"
|
||||
"All notes and sub-notebooks within this notebook will also be deleted."
|
||||
msgstr ""
|
||||
"ノートブックを削除しますか? このノートブックにあるノートとサブノートはすべ"
|
||||
"て消えてしまいます。"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Remove tag \"%s\" from all notes?"
|
||||
msgstr "すべてのノートからこのタグを削除しますか?"
|
||||
|
||||
msgid "Remove this search from the sidebar?"
|
||||
@@ -1112,9 +1162,6 @@ msgstr "削除"
|
||||
msgid "Rename"
|
||||
msgstr "名前の変更"
|
||||
|
||||
msgid "Synchronise"
|
||||
msgstr "同期"
|
||||
|
||||
msgid "Notebooks"
|
||||
msgstr "ノートブック"
|
||||
|
||||
@@ -1123,12 +1170,53 @@ 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 "タグの追加と削除"
|
||||
|
||||
msgid "Duplicate"
|
||||
msgstr "複製"
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s - Copy"
|
||||
msgstr "%s - コピー"
|
||||
|
||||
msgid "Switch between note and to-do type"
|
||||
msgstr "ノートとToDoを切り替え"
|
||||
|
||||
msgid "Switch to note type"
|
||||
msgstr "ノートに切り替え"
|
||||
|
||||
msgid "Switch to to-do type"
|
||||
msgstr "ToDoに切り替え"
|
||||
|
||||
msgid "Copy Markdown link"
|
||||
msgstr "Markdownのリンクをコピー"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Delete note \"%s\"?"
|
||||
msgstr "ノートを削除しますか?"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Delete these %d notes?"
|
||||
msgstr "ノートを削除しますか?"
|
||||
|
||||
msgid ""
|
||||
"Type a note title to jump to it. Or type # followed by a tag name, or @ "
|
||||
"followed by a notebook name."
|
||||
msgstr ""
|
||||
|
||||
msgid "Goto Anything..."
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Usage: %s"
|
||||
msgstr "使用方法: %s"
|
||||
@@ -1241,12 +1329,22 @@ msgstr "実行中"
|
||||
msgid "Synchronisation is already in progress. State: %s"
|
||||
msgstr "同期作業はすでに実行中です。状態: %s"
|
||||
|
||||
msgid ""
|
||||
"Unknown item type downloaded - please upgrade Joplin to the latest version"
|
||||
msgstr ""
|
||||
|
||||
msgid "Encrypted"
|
||||
msgstr "暗号化済"
|
||||
|
||||
msgid "Encrypted items cannot be modified"
|
||||
msgstr "暗号化したアイテムは修正できません"
|
||||
|
||||
msgid "title"
|
||||
msgstr "タイトル"
|
||||
|
||||
msgid "updated date"
|
||||
msgstr "アップデート日"
|
||||
|
||||
msgid "Conflicts"
|
||||
msgstr "衝突"
|
||||
|
||||
@@ -1259,12 +1357,6 @@ msgstr ""
|
||||
"\"%s\" というノートブックの名称はシステムで使用するために予約済みです。名称の"
|
||||
"変更はできません。"
|
||||
|
||||
msgid "title"
|
||||
msgstr "タイトル"
|
||||
|
||||
msgid "updated date"
|
||||
msgstr "アップデート日"
|
||||
|
||||
msgid "created date"
|
||||
msgstr "作成日"
|
||||
|
||||
@@ -1279,6 +1371,68 @@ msgstr "ノートをノートブック \"%s\" にコピーできません"
|
||||
msgid "Cannot move note to \"%s\" notebook"
|
||||
msgstr "ノートをノートブック \"%s\" に移動できません"
|
||||
|
||||
#, javascript-format
|
||||
msgid ""
|
||||
"Attention: If you change this location, make sure you copy all your content "
|
||||
"to it before syncing, otherwise all files will be removed! See the FAQ for "
|
||||
"more details: %s"
|
||||
msgstr ""
|
||||
"注意: この場所を変更する際は、同期する前に新しい場所にすべての内容をコピーし"
|
||||
"ておきましょう。そうしないとすべてのファイルが削除されていまいます! 詳しくは"
|
||||
"次のFAQをご覧ください: %s"
|
||||
|
||||
msgid "Synchronisation target"
|
||||
msgstr "同期先"
|
||||
|
||||
msgid ""
|
||||
"The target to synchonise to. Each sync target may have additional parameters "
|
||||
"which are named as `sync.NUM.NAME` (all documented below)."
|
||||
msgstr ""
|
||||
"同期する先です。いずれの同期先も `sync.NUM.NAME` のように追加のパラメーターを"
|
||||
"持つことができるでしょう(すべてのドキュメントは下にあります)。"
|
||||
|
||||
msgid "Directory to synchronise with (absolute path)"
|
||||
msgstr "同期先のディレクトリ(絶対パス)"
|
||||
|
||||
msgid "Nextcloud WebDAV URL"
|
||||
msgstr "Nextcloud WebDAV URL"
|
||||
|
||||
msgid "Nextcloud username"
|
||||
msgstr "Nextcloud ユーザー名"
|
||||
|
||||
msgid "Nextcloud password"
|
||||
msgstr "Nextcloud パスワード"
|
||||
|
||||
msgid "WebDAV URL"
|
||||
msgstr "WebDAV URL"
|
||||
|
||||
msgid "WebDAV username"
|
||||
msgstr "WebDAV ユーザー名"
|
||||
|
||||
msgid "WebDAV password"
|
||||
msgstr "WevDAV パスワード"
|
||||
|
||||
msgid "Attachment download behaviour"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"In \"Manual\" mode, attachments are downloaded only when you click on them. "
|
||||
"In \"Auto\", they are downloaded when you open the note. In \"Always\", all "
|
||||
"the attachments are downloaded whether you open the note or not."
|
||||
msgstr ""
|
||||
|
||||
msgid "Always"
|
||||
msgstr ""
|
||||
|
||||
msgid "Manual"
|
||||
msgstr ""
|
||||
|
||||
msgid "Auto"
|
||||
msgstr ""
|
||||
|
||||
msgid "Max concurrent connections"
|
||||
msgstr ""
|
||||
|
||||
msgid "Language"
|
||||
msgstr "言語"
|
||||
|
||||
@@ -1309,6 +1463,10 @@ msgstr "ノートのソート方法"
|
||||
msgid "Reverse sort order"
|
||||
msgstr "逆順に並び替え"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Sort notebooks by"
|
||||
msgstr "ノートのソート方法"
|
||||
|
||||
msgid "Save geo-location with notes"
|
||||
msgstr "ノートに位置情報を保存"
|
||||
|
||||
@@ -1324,6 +1482,43 @@ msgstr "本文にフォーカス"
|
||||
msgid "When creating a new note:"
|
||||
msgstr "新しいノートを作成した際:"
|
||||
|
||||
msgid "Enable soft breaks"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Enable math expressions"
|
||||
msgstr "暗号化を有効にする"
|
||||
|
||||
msgid "Enable ==mark== syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable footnotes"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable table of contents extension"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable ~sub~ syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable ^sup^ syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable deflist syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable abbreviation syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable markdown emoji"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable ++insert++ syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable multimarkdown table extension"
|
||||
msgstr ""
|
||||
|
||||
msgid "Show tray icon"
|
||||
msgstr "トレイアイコンの表示"
|
||||
|
||||
@@ -1361,11 +1556,11 @@ msgid "Automatically update the application"
|
||||
msgstr "アプリケーションを自動的にアップデート"
|
||||
|
||||
msgid "Get pre-releases when checking for updates"
|
||||
msgstr ""
|
||||
msgstr "更新をチェックする時、開発版を取得する"
|
||||
|
||||
#, javascript-format
|
||||
msgid "See the pre-release page for more details: %s"
|
||||
msgstr ""
|
||||
msgstr "詳細についてはプレリリースページを参照してください: %s"
|
||||
|
||||
msgid "Synchronisation interval"
|
||||
msgstr "同期間隔"
|
||||
@@ -1395,54 +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 ""
|
||||
"The path to synchronise with when file system synchronisation is enabled. "
|
||||
"See `sync.target`."
|
||||
msgstr ""
|
||||
"ファイルシステム同期の有効時に同期を行うパスです。`sync.target`も参考にしてく"
|
||||
"ださい。"
|
||||
|
||||
msgid "Nextcloud WebDAV URL"
|
||||
msgstr "Nextcloud WebDAV URL"
|
||||
|
||||
#, javascript-format
|
||||
msgid ""
|
||||
"Attention: If you change this location, make sure you copy all your content "
|
||||
"to it before syncing, otherwise all files will be removed! See the FAQ for "
|
||||
"more details: %s"
|
||||
msgstr ""
|
||||
"注意: この場所を変更する際は、同期する前に新しい場所にすべての内容をコピーし"
|
||||
"ておきましょう。そうしないとすべてのファイルが削除されていまいます! 詳しくは"
|
||||
"次のFAQをご覧ください: %s"
|
||||
|
||||
msgid "Nextcloud username"
|
||||
msgstr "Nextcloud ユーザー名"
|
||||
|
||||
msgid "Nextcloud password"
|
||||
msgstr "Nextcloud パスワード"
|
||||
|
||||
msgid "WebDAV URL"
|
||||
msgstr "WebDAV URL"
|
||||
|
||||
msgid "WebDAV username"
|
||||
msgstr "WebDAV ユーザー名"
|
||||
|
||||
msgid "WebDAV password"
|
||||
msgstr "WevDAV パスワード"
|
||||
|
||||
msgid "Custom TLS certificates"
|
||||
msgstr "TLS証明書のカスタマイズ"
|
||||
|
||||
@@ -1460,6 +1607,20 @@ msgstr ""
|
||||
msgid "Ignore TLS certificate errors"
|
||||
msgstr "TLS証明書のエラーを無視"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Enable note history"
|
||||
msgstr "暗号化を有効にする"
|
||||
|
||||
msgid "days"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "%d days"
|
||||
msgstr ""
|
||||
|
||||
msgid "Keep note history for"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Invalid option value: \"%s\". Possible values are: %s."
|
||||
msgstr "無効な設定値: \"%s\"。有効な値は: %sです。"
|
||||
@@ -1479,6 +1640,9 @@ msgstr ""
|
||||
msgid "Note"
|
||||
msgstr "ノートブック"
|
||||
|
||||
msgid "Plugins"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Application"
|
||||
msgstr "場所"
|
||||
@@ -1502,6 +1666,9 @@ msgstr "Evernote エクスポートファイル"
|
||||
msgid "Json Export Directory"
|
||||
msgstr "Json エクスポートディレクトリ"
|
||||
|
||||
msgid "File"
|
||||
msgstr "ファイル"
|
||||
|
||||
msgid "Directory"
|
||||
msgstr "ディレクトリ"
|
||||
|
||||
@@ -1527,13 +1694,12 @@ msgstr "エクスポートするデータがありません。"
|
||||
msgid "Please specify the notebook where the notes should be imported to."
|
||||
msgstr "ノートをどのノートブックにインポートするのか指定してください。"
|
||||
|
||||
msgid "Restored Notes"
|
||||
msgstr ""
|
||||
|
||||
msgid "Items that cannot be synchronised"
|
||||
msgstr "同期ができなかったアイテム"
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s (%s): %s"
|
||||
msgstr "%s (%s): %s"
|
||||
|
||||
msgid ""
|
||||
"These items will remain on the device but will not be uploaded to the sync "
|
||||
"target. In order to find these items, either search for the title or the ID "
|
||||
@@ -1543,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 "同期状況 (同期済/総数)"
|
||||
|
||||
@@ -1665,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"
|
||||
@@ -1688,10 +1876,6 @@ msgstr "- 位置情報: ノートに位置情報を添付するのに必要で
|
||||
msgid "Joplin website"
|
||||
msgstr "JoplinのWebサイト"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Joplin v%s"
|
||||
msgstr "JoplinのWebサイト"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Database v%s"
|
||||
msgstr ""
|
||||
@@ -1776,9 +1960,6 @@ msgstr "ノートに変換"
|
||||
msgid "Convert to todo"
|
||||
msgstr "ToDoに変換"
|
||||
|
||||
msgid "Copy Markdown link"
|
||||
msgstr "Markdownのリンクをコピー"
|
||||
|
||||
msgid "Hide metadata"
|
||||
msgstr "メタデータを隠す"
|
||||
|
||||
@@ -1791,6 +1972,9 @@ msgstr "地図上に表示"
|
||||
msgid "Go to source URL"
|
||||
msgstr "ソースURLに行く"
|
||||
|
||||
msgid "Edit"
|
||||
msgstr "編集"
|
||||
|
||||
msgid "Delete notebook"
|
||||
msgstr "ノートブックを削除"
|
||||
|
||||
@@ -1815,26 +1999,25 @@ msgstr ""
|
||||
msgid "Welcome"
|
||||
msgstr "ようこそ"
|
||||
|
||||
#~ msgid "Add or remove tags"
|
||||
#~ msgstr "タグの追加と削除"
|
||||
#~ msgid "Separate each tag by a comma."
|
||||
#~ msgstr "それぞれのタグをカンマ(,)で区切ってください。"
|
||||
|
||||
#~ msgid "Duplicate"
|
||||
#~ msgstr "複製"
|
||||
#~ msgid "Some items cannot be decrypted."
|
||||
#~ msgstr "いくつかの項目は復号されませんでした。"
|
||||
|
||||
#~ msgid "%s - Copy"
|
||||
#~ msgstr "%s - コピー"
|
||||
#~ msgid "%s (%s): %s"
|
||||
#~ msgstr "%s (%s): %s"
|
||||
|
||||
#~ msgid "Switch between note and to-do type"
|
||||
#~ msgstr "ノートとToDoを切り替え"
|
||||
#~ msgid ""
|
||||
#~ "The path to synchronise with when file system synchronisation is enabled. "
|
||||
#~ "See `sync.target`."
|
||||
#~ msgstr ""
|
||||
#~ "ファイルシステム同期の有効時に同期を行うパスです。`sync.target`も参考にし"
|
||||
#~ "てください。"
|
||||
|
||||
#~ msgid "Switch to note type"
|
||||
#~ msgstr "ノートに切り替え"
|
||||
|
||||
#~ msgid "Switch to to-do type"
|
||||
#~ msgstr "ToDoに切り替え"
|
||||
|
||||
#~ msgid "Delete notes?"
|
||||
#~ msgstr "ノートを削除しますか?"
|
||||
#, fuzzy
|
||||
#~ msgid "Joplin v%s"
|
||||
#~ msgstr "JoplinのWebサイト"
|
||||
|
||||
#~ msgid "State: %s."
|
||||
#~ msgstr "状態: \"%s\"."
|
||||
|
||||
@@ -119,7 +119,7 @@ msgstr ""
|
||||
|
||||
msgid ""
|
||||
"Manages E2EE configuration. Commands are `enable`, `disable`, `decrypt`, "
|
||||
"`status` and `target-status`."
|
||||
"`status`, `decrypt-file` and `target-status`."
|
||||
msgstr ""
|
||||
|
||||
msgid "Enter master password:"
|
||||
@@ -527,7 +527,7 @@ msgstr ""
|
||||
msgid "PDF File"
|
||||
msgstr ""
|
||||
|
||||
msgid "File"
|
||||
msgid "Synchronisation status"
|
||||
msgstr ""
|
||||
|
||||
msgid "New note"
|
||||
@@ -539,13 +539,41 @@ msgstr ""
|
||||
msgid "New notebook"
|
||||
msgstr ""
|
||||
|
||||
msgid "Print"
|
||||
msgstr ""
|
||||
|
||||
msgid "General Options"
|
||||
msgstr ""
|
||||
|
||||
msgid "Encryption options"
|
||||
msgstr ""
|
||||
|
||||
msgid "Web clipper options"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s %s (%s, %s)"
|
||||
msgstr ""
|
||||
|
||||
msgid "&File"
|
||||
msgstr ""
|
||||
|
||||
msgid "About Joplin"
|
||||
msgstr ""
|
||||
|
||||
msgid "Preferences..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Check for updates..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Import"
|
||||
msgstr ""
|
||||
|
||||
msgid "Export"
|
||||
msgstr ""
|
||||
|
||||
msgid "Print"
|
||||
msgid "Synchronise"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
@@ -555,7 +583,10 @@ msgstr ""
|
||||
msgid "Quit"
|
||||
msgstr ""
|
||||
|
||||
msgid "Edit"
|
||||
msgid "Close Window"
|
||||
msgstr ""
|
||||
|
||||
msgid "&Edit"
|
||||
msgstr ""
|
||||
|
||||
msgid "Copy"
|
||||
@@ -591,7 +622,7 @@ msgstr ""
|
||||
msgid "Search in current note"
|
||||
msgstr ""
|
||||
|
||||
msgid "View"
|
||||
msgid "&View"
|
||||
msgstr ""
|
||||
|
||||
msgid "Toggle sidebar"
|
||||
@@ -603,22 +634,10 @@ msgstr ""
|
||||
msgid "Focus"
|
||||
msgstr ""
|
||||
|
||||
msgid "Tools"
|
||||
msgid "&Tools"
|
||||
msgstr ""
|
||||
|
||||
msgid "Synchronisation status"
|
||||
msgstr ""
|
||||
|
||||
msgid "Web clipper options"
|
||||
msgstr ""
|
||||
|
||||
msgid "Encryption options"
|
||||
msgstr ""
|
||||
|
||||
msgid "General Options"
|
||||
msgstr ""
|
||||
|
||||
msgid "Help"
|
||||
msgid "&Help"
|
||||
msgstr ""
|
||||
|
||||
msgid "Website and documentation"
|
||||
@@ -627,14 +646,7 @@ msgstr ""
|
||||
msgid "Make a donation"
|
||||
msgstr ""
|
||||
|
||||
msgid "Check for updates..."
|
||||
msgstr ""
|
||||
|
||||
msgid "About Joplin"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s %s (%s, %s)"
|
||||
msgid "Toggle development tools"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
@@ -661,11 +673,11 @@ msgid "An update is available, do you want to download it now?"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Your version: v%s"
|
||||
msgid "Your version: %s"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "New version: v%s"
|
||||
msgid "New version: %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Yes"
|
||||
@@ -738,10 +750,10 @@ msgstr ""
|
||||
msgid "Notes and settings are stored in: %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Browse..."
|
||||
msgid "Check synchronisation configuration"
|
||||
msgstr ""
|
||||
|
||||
msgid "Check synchronisation configuration"
|
||||
msgid "Browse..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Apply"
|
||||
@@ -845,9 +857,6 @@ msgstr ""
|
||||
msgid "Add or remove tags:"
|
||||
msgstr ""
|
||||
|
||||
msgid "Separate each tag by a comma."
|
||||
msgstr ""
|
||||
|
||||
msgid "Rename notebook:"
|
||||
msgstr ""
|
||||
|
||||
@@ -869,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"
|
||||
@@ -888,9 +897,31 @@ msgstr ""
|
||||
msgid "URL"
|
||||
msgstr ""
|
||||
|
||||
msgid "Note History"
|
||||
msgstr ""
|
||||
|
||||
msgid "Previous versions of this note"
|
||||
msgstr ""
|
||||
|
||||
msgid "Note properties"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "The note \"%s\" has been successfully restored to the notebook \"%s\"."
|
||||
msgstr ""
|
||||
|
||||
msgid "This note has no history"
|
||||
msgstr ""
|
||||
|
||||
msgid "Restore"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid ""
|
||||
"Click \"%s\" to restore the note. It will be copied in the notebook named "
|
||||
"\"%s\". The current version of the note will not be replaced or modified."
|
||||
msgstr ""
|
||||
|
||||
msgid "Open..."
|
||||
msgstr ""
|
||||
|
||||
@@ -1009,7 +1040,15 @@ msgstr ""
|
||||
msgid "Clipper Options"
|
||||
msgstr ""
|
||||
|
||||
msgid "Remove this tag from all the notes?"
|
||||
#, javascript-format
|
||||
msgid ""
|
||||
"Delete notebook \"%s\"?\n"
|
||||
"\n"
|
||||
"All notes and sub-notebooks within this notebook will also be deleted."
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Remove tag \"%s\" from all notes?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Remove this search from the sidebar?"
|
||||
@@ -1021,9 +1060,6 @@ msgstr ""
|
||||
msgid "Rename"
|
||||
msgstr ""
|
||||
|
||||
msgid "Synchronise"
|
||||
msgstr ""
|
||||
|
||||
msgid "Notebooks"
|
||||
msgstr ""
|
||||
|
||||
@@ -1032,12 +1068,53 @@ 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 ""
|
||||
|
||||
msgid "Duplicate"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s - Copy"
|
||||
msgstr ""
|
||||
|
||||
msgid "Switch between note and to-do type"
|
||||
msgstr ""
|
||||
|
||||
msgid "Switch to note type"
|
||||
msgstr ""
|
||||
|
||||
msgid "Switch to to-do type"
|
||||
msgstr ""
|
||||
|
||||
msgid "Copy Markdown link"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Delete note \"%s\"?"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Delete these %d notes?"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"Type a note title to jump to it. Or type # followed by a tag name, or @ "
|
||||
"followed by a notebook name."
|
||||
msgstr ""
|
||||
|
||||
msgid "Goto Anything..."
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Usage: %s"
|
||||
msgstr ""
|
||||
@@ -1142,12 +1219,22 @@ msgstr ""
|
||||
msgid "Synchronisation is already in progress. State: %s"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"Unknown item type downloaded - please upgrade Joplin to the latest version"
|
||||
msgstr ""
|
||||
|
||||
msgid "Encrypted"
|
||||
msgstr ""
|
||||
|
||||
msgid "Encrypted items cannot be modified"
|
||||
msgstr ""
|
||||
|
||||
msgid "title"
|
||||
msgstr ""
|
||||
|
||||
msgid "updated date"
|
||||
msgstr ""
|
||||
|
||||
msgid "Conflicts"
|
||||
msgstr ""
|
||||
|
||||
@@ -1158,12 +1245,6 @@ msgstr ""
|
||||
msgid "Notebooks cannot be named \"%s\", which is a reserved title."
|
||||
msgstr ""
|
||||
|
||||
msgid "title"
|
||||
msgstr ""
|
||||
|
||||
msgid "updated date"
|
||||
msgstr ""
|
||||
|
||||
msgid "created date"
|
||||
msgstr ""
|
||||
|
||||
@@ -1178,6 +1259,63 @@ msgstr ""
|
||||
msgid "Cannot move note to \"%s\" notebook"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid ""
|
||||
"Attention: If you change this location, make sure you copy all your content "
|
||||
"to it before syncing, otherwise all files will be removed! See the FAQ for "
|
||||
"more details: %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Synchronisation target"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"The target to synchonise to. Each sync target may have additional parameters "
|
||||
"which are named as `sync.NUM.NAME` (all documented below)."
|
||||
msgstr ""
|
||||
|
||||
msgid "Directory to synchronise with (absolute path)"
|
||||
msgstr ""
|
||||
|
||||
msgid "Nextcloud WebDAV URL"
|
||||
msgstr ""
|
||||
|
||||
msgid "Nextcloud username"
|
||||
msgstr ""
|
||||
|
||||
msgid "Nextcloud password"
|
||||
msgstr ""
|
||||
|
||||
msgid "WebDAV URL"
|
||||
msgstr ""
|
||||
|
||||
msgid "WebDAV username"
|
||||
msgstr ""
|
||||
|
||||
msgid "WebDAV password"
|
||||
msgstr ""
|
||||
|
||||
msgid "Attachment download behaviour"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"In \"Manual\" mode, attachments are downloaded only when you click on them. "
|
||||
"In \"Auto\", they are downloaded when you open the note. In \"Always\", all "
|
||||
"the attachments are downloaded whether you open the note or not."
|
||||
msgstr ""
|
||||
|
||||
msgid "Always"
|
||||
msgstr ""
|
||||
|
||||
msgid "Manual"
|
||||
msgstr ""
|
||||
|
||||
msgid "Auto"
|
||||
msgstr ""
|
||||
|
||||
msgid "Max concurrent connections"
|
||||
msgstr ""
|
||||
|
||||
msgid "Language"
|
||||
msgstr ""
|
||||
|
||||
@@ -1208,6 +1346,9 @@ msgstr ""
|
||||
msgid "Reverse sort order"
|
||||
msgstr ""
|
||||
|
||||
msgid "Sort notebooks by"
|
||||
msgstr ""
|
||||
|
||||
msgid "Save geo-location with notes"
|
||||
msgstr ""
|
||||
|
||||
@@ -1223,6 +1364,42 @@ msgstr ""
|
||||
msgid "When creating a new note:"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable soft breaks"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable math expressions"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable ==mark== syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable footnotes"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable table of contents extension"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable ~sub~ syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable ^sup^ syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable deflist syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable abbreviation syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable markdown emoji"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable ++insert++ syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable multimarkdown table extension"
|
||||
msgstr ""
|
||||
|
||||
msgid "Show tray icon"
|
||||
msgstr ""
|
||||
|
||||
@@ -1288,47 +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 ""
|
||||
"The path to synchronise with when file system synchronisation is enabled. "
|
||||
"See `sync.target`."
|
||||
msgstr ""
|
||||
|
||||
msgid "Nextcloud WebDAV URL"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid ""
|
||||
"Attention: If you change this location, make sure you copy all your content "
|
||||
"to it before syncing, otherwise all files will be removed! See the FAQ for "
|
||||
"more details: %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Nextcloud username"
|
||||
msgstr ""
|
||||
|
||||
msgid "Nextcloud password"
|
||||
msgstr ""
|
||||
|
||||
msgid "WebDAV URL"
|
||||
msgstr ""
|
||||
|
||||
msgid "WebDAV username"
|
||||
msgstr ""
|
||||
|
||||
msgid "WebDAV password"
|
||||
msgstr ""
|
||||
|
||||
msgid "Custom TLS certificates"
|
||||
msgstr ""
|
||||
|
||||
@@ -1342,6 +1478,19 @@ msgstr ""
|
||||
msgid "Ignore TLS certificate errors"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable note history"
|
||||
msgstr ""
|
||||
|
||||
msgid "days"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "%d days"
|
||||
msgstr ""
|
||||
|
||||
msgid "Keep note history for"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Invalid option value: \"%s\". Possible values are: %s."
|
||||
msgstr ""
|
||||
@@ -1358,6 +1507,9 @@ msgstr ""
|
||||
msgid "Note"
|
||||
msgstr ""
|
||||
|
||||
msgid "Plugins"
|
||||
msgstr ""
|
||||
|
||||
msgid "Application"
|
||||
msgstr ""
|
||||
|
||||
@@ -1380,6 +1532,9 @@ msgstr ""
|
||||
msgid "Json Export Directory"
|
||||
msgstr ""
|
||||
|
||||
msgid "File"
|
||||
msgstr ""
|
||||
|
||||
msgid "Directory"
|
||||
msgstr ""
|
||||
|
||||
@@ -1403,11 +1558,10 @@ msgstr ""
|
||||
msgid "Please specify the notebook where the notes should be imported to."
|
||||
msgstr ""
|
||||
|
||||
msgid "Items that cannot be synchronised"
|
||||
msgid "Restored Notes"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s (%s): %s"
|
||||
msgid "Items that cannot be synchronised"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
@@ -1416,6 +1570,23 @@ msgid ""
|
||||
"(which is displayed in brackets above)."
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s (%s) could not be uploaded: %s"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Item \"%s\" could not be downloaded: %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Items that cannot be decrypted"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"Joplin failed to decrypt these items multiple times, possibly because they "
|
||||
"are corrupted or too large. These items will remain on the device but Joplin "
|
||||
"will no longer attempt to decrypt them."
|
||||
msgstr ""
|
||||
|
||||
msgid "Sync status (synced items / total items)"
|
||||
msgstr ""
|
||||
|
||||
@@ -1531,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"
|
||||
@@ -1550,10 +1724,6 @@ msgstr ""
|
||||
msgid "Joplin website"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Joplin v%s"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Database v%s"
|
||||
msgstr ""
|
||||
@@ -1637,9 +1807,6 @@ msgstr ""
|
||||
msgid "Convert to todo"
|
||||
msgstr ""
|
||||
|
||||
msgid "Copy Markdown link"
|
||||
msgstr ""
|
||||
|
||||
msgid "Hide metadata"
|
||||
msgstr ""
|
||||
|
||||
@@ -1652,6 +1819,9 @@ msgstr ""
|
||||
msgid "Go to source URL"
|
||||
msgstr ""
|
||||
|
||||
msgid "Edit"
|
||||
msgstr ""
|
||||
|
||||
msgid "Delete notebook"
|
||||
msgstr ""
|
||||
|
||||
|
||||
@@ -124,9 +124,10 @@ msgstr "'할 일' 항목을 완료로 표시합니다."
|
||||
msgid "Note is not a to-do: \"%s\""
|
||||
msgstr "노트는 '할 일' 항목이 아닙니다: \"%s\""
|
||||
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
"Manages E2EE configuration. Commands are `enable`, `disable`, `decrypt`, "
|
||||
"`status` and `target-status`."
|
||||
"`status`, `decrypt-file` and `target-status`."
|
||||
msgstr ""
|
||||
"E2EE(종단간 암호화) 설정을 관리합니다. 명령어는 `enable`, `disable`, "
|
||||
"`decrypt`, `status`, `target-status` 입니다."
|
||||
@@ -589,8 +590,8 @@ msgstr "\"%s\"에서 \"%s\" 포맷으로 가져오는 중입니다. 잠시만
|
||||
msgid "PDF File"
|
||||
msgstr "PDF 파일"
|
||||
|
||||
msgid "File"
|
||||
msgstr "파일"
|
||||
msgid "Synchronisation status"
|
||||
msgstr "동기화 상태"
|
||||
|
||||
msgid "New note"
|
||||
msgstr "새 노트"
|
||||
@@ -601,14 +602,43 @@ msgstr "새 '할 일'"
|
||||
msgid "New notebook"
|
||||
msgstr "새 노트북"
|
||||
|
||||
msgid "Print"
|
||||
msgstr "인쇄"
|
||||
|
||||
msgid "General Options"
|
||||
msgstr "일반 옵션"
|
||||
|
||||
msgid "Encryption options"
|
||||
msgstr "암호화 옵션"
|
||||
|
||||
msgid "Web clipper options"
|
||||
msgstr "웹 수집기 옵션"
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s %s (%s, %s)"
|
||||
msgstr "%s %s (%s, %s)"
|
||||
|
||||
#, fuzzy
|
||||
msgid "&File"
|
||||
msgstr "파일"
|
||||
|
||||
msgid "About Joplin"
|
||||
msgstr "조플린이란?"
|
||||
|
||||
msgid "Preferences..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Check for updates..."
|
||||
msgstr "업데이트 확인..."
|
||||
|
||||
msgid "Import"
|
||||
msgstr "가져오기"
|
||||
|
||||
msgid "Export"
|
||||
msgstr "내보내기"
|
||||
|
||||
msgid "Print"
|
||||
msgstr "인쇄"
|
||||
msgid "Synchronise"
|
||||
msgstr "동기화"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Hide %s"
|
||||
@@ -617,7 +647,11 @@ msgstr "%s 숨기기"
|
||||
msgid "Quit"
|
||||
msgstr "종료"
|
||||
|
||||
msgid "Edit"
|
||||
msgid "Close Window"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "&Edit"
|
||||
msgstr "편집"
|
||||
|
||||
msgid "Copy"
|
||||
@@ -653,7 +687,8 @@ msgstr "모든 노트에서 검색"
|
||||
msgid "Search in current note"
|
||||
msgstr "현재 노트에서 검색"
|
||||
|
||||
msgid "View"
|
||||
#, fuzzy
|
||||
msgid "&View"
|
||||
msgstr "보기"
|
||||
|
||||
msgid "Toggle sidebar"
|
||||
@@ -666,22 +701,12 @@ msgstr "편집기 배치 형태 전환"
|
||||
msgid "Focus"
|
||||
msgstr "내용에 포커스"
|
||||
|
||||
msgid "Tools"
|
||||
#, fuzzy
|
||||
msgid "&Tools"
|
||||
msgstr "도구"
|
||||
|
||||
msgid "Synchronisation status"
|
||||
msgstr "동기화 상태"
|
||||
|
||||
msgid "Web clipper options"
|
||||
msgstr "웹 수집기 옵션"
|
||||
|
||||
msgid "Encryption options"
|
||||
msgstr "암호화 옵션"
|
||||
|
||||
msgid "General Options"
|
||||
msgstr "일반 옵션"
|
||||
|
||||
msgid "Help"
|
||||
#, fuzzy
|
||||
msgid "&Help"
|
||||
msgstr "도움말"
|
||||
|
||||
msgid "Website and documentation"
|
||||
@@ -690,15 +715,8 @@ msgstr "웹사이트 및 각종 문서"
|
||||
msgid "Make a donation"
|
||||
msgstr "기부하기"
|
||||
|
||||
msgid "Check for updates..."
|
||||
msgstr "업데이트 확인..."
|
||||
|
||||
msgid "About Joplin"
|
||||
msgstr "조플린이란?"
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s %s (%s, %s)"
|
||||
msgstr "%s %s (%s, %s)"
|
||||
msgid "Toggle development tools"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Open %s"
|
||||
@@ -724,12 +742,12 @@ msgid "An update is available, do you want to download it now?"
|
||||
msgstr "업데이트가 있습니다. 지금 다운로드할까요?"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Your version: v%s"
|
||||
msgstr "현재 버전: v%s"
|
||||
msgid "Your version: %s"
|
||||
msgstr "현재 버전: %s"
|
||||
|
||||
#, javascript-format
|
||||
msgid "New version: v%s"
|
||||
msgstr "새 버전: v%s"
|
||||
msgid "New version: %s"
|
||||
msgstr "새 버전: %s"
|
||||
|
||||
msgid "Yes"
|
||||
msgstr "예"
|
||||
@@ -807,12 +825,12 @@ msgstr ""
|
||||
msgid "Notes and settings are stored in: %s"
|
||||
msgstr "노트와 설정값이 다음에 저장되었습니다: %s"
|
||||
|
||||
msgid "Browse..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Check synchronisation configuration"
|
||||
msgstr "동기화 설정 확인"
|
||||
|
||||
msgid "Browse..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Apply"
|
||||
msgstr "적용"
|
||||
|
||||
@@ -928,9 +946,6 @@ msgstr "노트북 제목:"
|
||||
msgid "Add or remove tags:"
|
||||
msgstr "태그 추가 및 제거:"
|
||||
|
||||
msgid "Separate each tag by a comma."
|
||||
msgstr "각각의 태그를 쉼표로 구분합니다."
|
||||
|
||||
msgid "Rename notebook:"
|
||||
msgstr "노트북 이름 바꾸기:"
|
||||
|
||||
@@ -952,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 "암호 설정"
|
||||
@@ -971,9 +987,33 @@ msgstr "위치"
|
||||
msgid "URL"
|
||||
msgstr "URL"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Note History"
|
||||
msgstr "노트북"
|
||||
|
||||
msgid "Previous versions of this note"
|
||||
msgstr ""
|
||||
|
||||
msgid "Note properties"
|
||||
msgstr "노트 속성"
|
||||
|
||||
#, javascript-format
|
||||
msgid "The note \"%s\" has been successfully restored to the notebook \"%s\"."
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "This note has no history"
|
||||
msgstr "노트가 변경되었습니다:"
|
||||
|
||||
msgid "Restore"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid ""
|
||||
"Click \"%s\" to restore the note. It will be copied in the notebook named "
|
||||
"\"%s\". The current version of the note will not be replaced or modified."
|
||||
msgstr ""
|
||||
|
||||
msgid "Open..."
|
||||
msgstr "열기..."
|
||||
|
||||
@@ -1094,7 +1134,17 @@ msgstr "암호화 옵션"
|
||||
msgid "Clipper Options"
|
||||
msgstr "수집기 옵션"
|
||||
|
||||
msgid "Remove this tag from all the notes?"
|
||||
#, fuzzy, javascript-format
|
||||
msgid ""
|
||||
"Delete notebook \"%s\"?\n"
|
||||
"\n"
|
||||
"All notes and sub-notebooks within this notebook will also be deleted."
|
||||
msgstr ""
|
||||
"노트북을 삭제할까요? 이 노트북 안에 있는 모든 노트와 하위 노트북들도 함께 삭"
|
||||
"제됩니다."
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Remove tag \"%s\" from all notes?"
|
||||
msgstr "모든 노트에서 이 태그를 제거할까요?"
|
||||
|
||||
msgid "Remove this search from the sidebar?"
|
||||
@@ -1106,9 +1156,6 @@ msgstr "삭제"
|
||||
msgid "Rename"
|
||||
msgstr "이름 바꾸기"
|
||||
|
||||
msgid "Synchronise"
|
||||
msgstr "동기화"
|
||||
|
||||
msgid "Notebooks"
|
||||
msgstr "노트북"
|
||||
|
||||
@@ -1117,12 +1164,53 @@ 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 "태그 추가 및 제거"
|
||||
|
||||
msgid "Duplicate"
|
||||
msgstr "복제"
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s - Copy"
|
||||
msgstr "%s - 복사"
|
||||
|
||||
msgid "Switch between note and to-do type"
|
||||
msgstr "'노트' 또는'할 일' 형식으로 전환합니다."
|
||||
|
||||
msgid "Switch to note type"
|
||||
msgstr "'노트' 형식으로 전환합니다."
|
||||
|
||||
msgid "Switch to to-do type"
|
||||
msgstr "'할 일' 형식으로 전환합니다."
|
||||
|
||||
msgid "Copy Markdown link"
|
||||
msgstr "마크다운 링크 복사"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Delete note \"%s\"?"
|
||||
msgstr "노트를 삭제할까요?"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Delete these %d notes?"
|
||||
msgstr "노트를 삭제할까요?"
|
||||
|
||||
msgid ""
|
||||
"Type a note title to jump to it. Or type # followed by a tag name, or @ "
|
||||
"followed by a notebook name."
|
||||
msgstr ""
|
||||
|
||||
msgid "Goto Anything..."
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Usage: %s"
|
||||
msgstr "사용량: %s"
|
||||
@@ -1235,12 +1323,22 @@ msgstr "진행 중"
|
||||
msgid "Synchronisation is already in progress. State: %s"
|
||||
msgstr "동기화가 이미 진행되고 있습니다. 상태: %s"
|
||||
|
||||
msgid ""
|
||||
"Unknown item type downloaded - please upgrade Joplin to the latest version"
|
||||
msgstr ""
|
||||
|
||||
msgid "Encrypted"
|
||||
msgstr "암호화됨"
|
||||
|
||||
msgid "Encrypted items cannot be modified"
|
||||
msgstr "암호화된 항목은 변경될 수 없습니다"
|
||||
|
||||
msgid "title"
|
||||
msgstr "제목"
|
||||
|
||||
msgid "updated date"
|
||||
msgstr "업데이트된 날짜"
|
||||
|
||||
msgid "Conflicts"
|
||||
msgstr "충돌"
|
||||
|
||||
@@ -1251,12 +1349,6 @@ msgstr "노트북을 이 위치로 옮길 수 없습니다"
|
||||
msgid "Notebooks cannot be named \"%s\", which is a reserved title."
|
||||
msgstr "노트북을 \"%s\" 제목으로 정할 수 없습니다. 이미 예약중입니다."
|
||||
|
||||
msgid "title"
|
||||
msgstr "제목"
|
||||
|
||||
msgid "updated date"
|
||||
msgstr "업데이트된 날짜"
|
||||
|
||||
msgid "created date"
|
||||
msgstr "만들어진 날짜"
|
||||
|
||||
@@ -1271,6 +1363,67 @@ msgstr "노트를 \"%s\" 노트북으로 복사할 수 없습니다"
|
||||
msgid "Cannot move note to \"%s\" notebook"
|
||||
msgstr "노트를 \"%s\" 노트북으로 옮길 수 없습니다"
|
||||
|
||||
#, javascript-format
|
||||
msgid ""
|
||||
"Attention: If you change this location, make sure you copy all your content "
|
||||
"to it before syncing, otherwise all files will be removed! See the FAQ for "
|
||||
"more details: %s"
|
||||
msgstr ""
|
||||
"주의: 이 위치를 변경하시려면, 동기화 전에 모든 컨텐트를 복사했는지 확인하세"
|
||||
"요, 그렇지 않으면 모든 파일이 삭제됩니다! 자세한 정보는 FAQ를 참조하세요: %s"
|
||||
|
||||
msgid "Synchronisation target"
|
||||
msgstr "동기화 대상"
|
||||
|
||||
msgid ""
|
||||
"The target to synchonise to. Each sync target may have additional parameters "
|
||||
"which are named as `sync.NUM.NAME` (all documented below)."
|
||||
msgstr ""
|
||||
"동기화를 할 대상을 선택합니다. 각각의 동기화 대상은 `sync.NUM.NAME` 형식으로 "
|
||||
"된 추가적인 매개 변수를 포함할 수 있습니다(아래에 문서화되어 있습니다)."
|
||||
|
||||
msgid "Directory to synchronise with (absolute path)"
|
||||
msgstr "동기화를 할 폴더 (절대적 경로)"
|
||||
|
||||
msgid "Nextcloud WebDAV URL"
|
||||
msgstr "Nextcloud WebDAV URL"
|
||||
|
||||
msgid "Nextcloud username"
|
||||
msgstr "Nextcloud 사용자 이름"
|
||||
|
||||
msgid "Nextcloud password"
|
||||
msgstr "Nextcloud 암호"
|
||||
|
||||
msgid "WebDAV URL"
|
||||
msgstr "WebDAV URL"
|
||||
|
||||
msgid "WebDAV username"
|
||||
msgstr "WebDAV 사용자 이름"
|
||||
|
||||
msgid "WebDAV password"
|
||||
msgstr "WebDAV 암호"
|
||||
|
||||
msgid "Attachment download behaviour"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"In \"Manual\" mode, attachments are downloaded only when you click on them. "
|
||||
"In \"Auto\", they are downloaded when you open the note. In \"Always\", all "
|
||||
"the attachments are downloaded whether you open the note or not."
|
||||
msgstr ""
|
||||
|
||||
msgid "Always"
|
||||
msgstr ""
|
||||
|
||||
msgid "Manual"
|
||||
msgstr ""
|
||||
|
||||
msgid "Auto"
|
||||
msgstr ""
|
||||
|
||||
msgid "Max concurrent connections"
|
||||
msgstr ""
|
||||
|
||||
msgid "Language"
|
||||
msgstr "언어"
|
||||
|
||||
@@ -1301,6 +1454,10 @@ msgstr "노트를 다음 기준으로 정렬"
|
||||
msgid "Reverse sort order"
|
||||
msgstr "정렬 순서 반전"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Sort notebooks by"
|
||||
msgstr "노트를 다음 기준으로 정렬"
|
||||
|
||||
msgid "Save geo-location with notes"
|
||||
msgstr "노트에 지리적 위치 정보 포함시키기"
|
||||
|
||||
@@ -1316,6 +1473,43 @@ msgstr "내용에 포커스"
|
||||
msgid "When creating a new note:"
|
||||
msgstr "새 노트를 만들 때:"
|
||||
|
||||
msgid "Enable soft breaks"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Enable math expressions"
|
||||
msgstr "암호화 사용"
|
||||
|
||||
msgid "Enable ==mark== syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable footnotes"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable table of contents extension"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable ~sub~ syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable ^sup^ syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable deflist syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable abbreviation syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable markdown emoji"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable ++insert++ syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable multimarkdown table extension"
|
||||
msgstr ""
|
||||
|
||||
msgid "Show tray icon"
|
||||
msgstr "트레이 아이콘 표시"
|
||||
|
||||
@@ -1388,53 +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 ""
|
||||
"The path to synchronise with when file system synchronisation is enabled. "
|
||||
"See `sync.target`."
|
||||
msgstr ""
|
||||
"파일 시스템 동기화가 활성화된 경우에 동기화를 할 경로입니다. `sync.target`를 "
|
||||
"참조하세요."
|
||||
|
||||
msgid "Nextcloud WebDAV URL"
|
||||
msgstr "Nextcloud WebDAV URL"
|
||||
|
||||
#, javascript-format
|
||||
msgid ""
|
||||
"Attention: If you change this location, make sure you copy all your content "
|
||||
"to it before syncing, otherwise all files will be removed! See the FAQ for "
|
||||
"more details: %s"
|
||||
msgstr ""
|
||||
"주의: 이 위치를 변경하시려면, 동기화 전에 모든 컨텐트를 복사했는지 확인하세"
|
||||
"요, 그렇지 않으면 모든 파일이 삭제됩니다! 자세한 정보는 FAQ를 참조하세요: %s"
|
||||
|
||||
msgid "Nextcloud username"
|
||||
msgstr "Nextcloud 사용자 이름"
|
||||
|
||||
msgid "Nextcloud password"
|
||||
msgstr "Nextcloud 암호"
|
||||
|
||||
msgid "WebDAV URL"
|
||||
msgstr "WebDAV URL"
|
||||
|
||||
msgid "WebDAV username"
|
||||
msgstr "WebDAV 사용자 이름"
|
||||
|
||||
msgid "WebDAV password"
|
||||
msgstr "WebDAV 암호"
|
||||
|
||||
msgid "Custom TLS certificates"
|
||||
msgstr "임의의 TLS 인증서"
|
||||
|
||||
@@ -1452,6 +1599,20 @@ msgstr ""
|
||||
msgid "Ignore TLS certificate errors"
|
||||
msgstr "TLS 인증서 오류 무시"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Enable note history"
|
||||
msgstr "암호화 사용"
|
||||
|
||||
msgid "days"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "%d days"
|
||||
msgstr ""
|
||||
|
||||
msgid "Keep note history for"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Invalid option value: \"%s\". Possible values are: %s."
|
||||
msgstr "올바르지 않은 옵션 값: \"%s\". 가능한 값은 다음과 같습니다: \"%s\"."
|
||||
@@ -1471,6 +1632,9 @@ msgstr ""
|
||||
msgid "Note"
|
||||
msgstr "노트북"
|
||||
|
||||
msgid "Plugins"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Application"
|
||||
msgstr "위치"
|
||||
@@ -1494,6 +1658,9 @@ msgstr "에버노트 내보내기 파일"
|
||||
msgid "Json Export Directory"
|
||||
msgstr "Json 내보내기 폴더"
|
||||
|
||||
msgid "File"
|
||||
msgstr "파일"
|
||||
|
||||
msgid "Directory"
|
||||
msgstr "폴더"
|
||||
|
||||
@@ -1519,13 +1686,12 @@ msgstr "내보낼 데이터가 없습니다."
|
||||
msgid "Please specify the notebook where the notes should be imported to."
|
||||
msgstr "노트를 가져와서 저장할 노트북을 지정하세요."
|
||||
|
||||
msgid "Restored Notes"
|
||||
msgstr ""
|
||||
|
||||
msgid "Items that cannot be synchronised"
|
||||
msgstr "동기화를 할 수 없는 항목"
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s (%s): %s"
|
||||
msgstr "%s (%s): %s"
|
||||
|
||||
msgid ""
|
||||
"These items will remain on the device but will not be uploaded to the sync "
|
||||
"target. In order to find these items, either search for the title or the ID "
|
||||
@@ -1535,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 "동기화 상태 (동기화 완료 항목 / 전체 항목)"
|
||||
|
||||
@@ -1657,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"
|
||||
@@ -1680,10 +1868,6 @@ msgstr "- 위치: 지리적 위치 정보를 노트에 첨부하기 위해서
|
||||
msgid "Joplin website"
|
||||
msgstr "조플린 웹사이트"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Joplin v%s"
|
||||
msgstr "조플린 v%s"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Database v%s"
|
||||
msgstr "데이터베이스 v%s"
|
||||
@@ -1767,9 +1951,6 @@ msgstr "노트로 변환"
|
||||
msgid "Convert to todo"
|
||||
msgstr "'할 일'로 변환"
|
||||
|
||||
msgid "Copy Markdown link"
|
||||
msgstr "마크다운 링크 복사"
|
||||
|
||||
msgid "Hide metadata"
|
||||
msgstr "메타데이터 숨김"
|
||||
|
||||
@@ -1782,6 +1963,9 @@ msgstr "지도에 표시"
|
||||
msgid "Go to source URL"
|
||||
msgstr "소스 URL로 이동"
|
||||
|
||||
msgid "Edit"
|
||||
msgstr "편집"
|
||||
|
||||
msgid "Delete notebook"
|
||||
msgstr "노트북 삭제"
|
||||
|
||||
@@ -1804,26 +1988,24 @@ msgstr "노트북이 없습니다. (+) 버튼을 눌러 새로 만드세요."
|
||||
msgid "Welcome"
|
||||
msgstr "환영합니다"
|
||||
|
||||
#~ msgid "Add or remove tags"
|
||||
#~ msgstr "태그 추가 및 제거"
|
||||
#~ msgid "Separate each tag by a comma."
|
||||
#~ msgstr "각각의 태그를 쉼표로 구분합니다."
|
||||
|
||||
#~ msgid "Duplicate"
|
||||
#~ msgstr "복제"
|
||||
#~ msgid "Some items cannot be decrypted."
|
||||
#~ msgstr "일부 항목들은 암호화할 수 없습니다."
|
||||
|
||||
#~ msgid "%s - Copy"
|
||||
#~ msgstr "%s - 복사"
|
||||
#~ msgid "%s (%s): %s"
|
||||
#~ msgstr "%s (%s): %s"
|
||||
|
||||
#~ msgid "Switch between note and to-do type"
|
||||
#~ msgstr "'노트' 또는'할 일' 형식으로 전환합니다."
|
||||
#~ msgid ""
|
||||
#~ "The path to synchronise with when file system synchronisation is enabled. "
|
||||
#~ "See `sync.target`."
|
||||
#~ msgstr ""
|
||||
#~ "파일 시스템 동기화가 활성화된 경우에 동기화를 할 경로입니다. `sync.target`"
|
||||
#~ "를 참조하세요."
|
||||
|
||||
#~ msgid "Switch to note type"
|
||||
#~ msgstr "'노트' 형식으로 전환합니다."
|
||||
|
||||
#~ msgid "Switch to to-do type"
|
||||
#~ msgstr "'할 일' 형식으로 전환합니다."
|
||||
|
||||
#~ msgid "Delete notes?"
|
||||
#~ msgstr "노트를 삭제할까요?"
|
||||
#~ msgid "Joplin v%s"
|
||||
#~ msgstr "조플린 v%s"
|
||||
|
||||
#~ msgid "State: %s."
|
||||
#~ msgstr "상태: %s."
|
||||
|
||||
@@ -17,8 +17,7 @@ msgstr ""
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
|
||||
msgid "To delete a tag, untag the associated notes."
|
||||
msgstr ""
|
||||
"Hvis du vil slette en merkelapp, fjern merkelappen fra merkede notater."
|
||||
msgstr "For å slette en merkelapp, fjern merkelappen fra merkede notater."
|
||||
|
||||
msgid "Please select the note or notebook to be deleted first."
|
||||
msgstr "Vennligst velg notatet eller notatboken som skal slettes først."
|
||||
@@ -126,11 +125,11 @@ msgstr "Notat er ikke et gjøremål: \"%s\""
|
||||
|
||||
msgid ""
|
||||
"Manages E2EE configuration. Commands are `enable`, `disable`, `decrypt`, "
|
||||
"`status` and `target-status`."
|
||||
"`status`, `decrypt-file` and `target-status`."
|
||||
msgstr ""
|
||||
"Utfører E2EE-konfiguration. Tilgjengelige kommandoer er: `enable`(aktiver), "
|
||||
"`disable`(lukk), `decrypt`(dekrypter), `status` og `target-status` (mottager-"
|
||||
"status)."
|
||||
"Konfigurerer E2EE-konfigurasjon. Tilgjengelige kommandoer er: "
|
||||
"`enable`(aktiver), `disable`(lukk), `decrypt`(dekrypter), `status` og "
|
||||
"`target-status` (mottager-status)."
|
||||
|
||||
msgid "Enter master password:"
|
||||
msgstr "Skriv inn masterpassordet:"
|
||||
@@ -186,7 +185,7 @@ msgid "Note has been saved."
|
||||
msgstr "Notat har blitt lagret."
|
||||
|
||||
msgid "Exits the application."
|
||||
msgstr "Forlat programmet."
|
||||
msgstr "Avslutter programmet."
|
||||
|
||||
msgid ""
|
||||
"Exports Joplin data to the given path. By default, it will export the "
|
||||
@@ -343,7 +342,7 @@ msgid "Please select a notebook first."
|
||||
msgstr "Vennligst velg en notatbok først."
|
||||
|
||||
msgid "Creates a new notebook."
|
||||
msgstr "Opprettter en ny notatbok."
|
||||
msgstr "Oppretter en ny notatbok."
|
||||
|
||||
msgid "Creates a new note."
|
||||
msgstr "Oppretter et nytt notat."
|
||||
@@ -381,7 +380,7 @@ msgstr "Sletter notatene uten bekreftelse."
|
||||
|
||||
#, javascript-format
|
||||
msgid "%d notes match this pattern. Delete them?"
|
||||
msgstr "%d notater passer dette mønsteret. Slette dem?"
|
||||
msgstr "%d notater passer dette mønsteret. Vil du slette de?"
|
||||
|
||||
msgid "Delete note?"
|
||||
msgstr "Slett notat?"
|
||||
@@ -412,7 +411,7 @@ msgstr "Sync å forsynt mål (uteblivelsene å sync. target config-verdi)"
|
||||
|
||||
msgid ""
|
||||
"Authentication was not completed (did not receive an authentication token)."
|
||||
msgstr "Godkjenning ble ikke fullført (mottok ikke et godkjennings tegn)."
|
||||
msgstr "Godkjenning ble ikke fullført (mottok ikke et autoriseringsbevis)."
|
||||
|
||||
msgid ""
|
||||
"To allow Joplin to synchronise with Dropbox, please follow the steps below:"
|
||||
@@ -577,18 +576,16 @@ msgid "Exporting to \"%s\" as \"%s\" format. Please wait..."
|
||||
msgstr "Eksporterer til \"%s\" i \"%s\" format. Vennligst vent..."
|
||||
|
||||
msgid "Sidebar"
|
||||
msgstr ""
|
||||
msgstr "Sidepanel"
|
||||
|
||||
msgid "Note list"
|
||||
msgstr ""
|
||||
msgstr "Notatliste"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Note title"
|
||||
msgstr "Tittel på notatbok:"
|
||||
msgstr "Tittel på notat:"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Note body"
|
||||
msgstr "Notatbøker"
|
||||
msgstr "Notatbrødtekst"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Importing from \"%s\" as \"%s\" format. Please wait..."
|
||||
@@ -597,8 +594,8 @@ msgstr "Importerer fra \"%s\" i \"%s\"-format. Vennligst vent..."
|
||||
msgid "PDF File"
|
||||
msgstr "PDF-fil"
|
||||
|
||||
msgid "File"
|
||||
msgstr "Fil"
|
||||
msgid "Synchronisation status"
|
||||
msgstr "Synkroniseringsstatus"
|
||||
|
||||
msgid "New note"
|
||||
msgstr "Nytt notat"
|
||||
@@ -609,14 +606,42 @@ msgstr "Nytt gjøremål"
|
||||
msgid "New notebook"
|
||||
msgstr "Ny notatbok"
|
||||
|
||||
msgid "Print"
|
||||
msgstr "Skriv ut"
|
||||
|
||||
msgid "General Options"
|
||||
msgstr "Generelle innstillinger"
|
||||
|
||||
msgid "Encryption options"
|
||||
msgstr "Krypteringsvalg"
|
||||
|
||||
msgid "Web clipper options"
|
||||
msgstr "Web Clipper-innstillinger"
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s %s (%s, %s)"
|
||||
msgstr "%s %s (%s, %s)"
|
||||
|
||||
msgid "&File"
|
||||
msgstr "&Fil"
|
||||
|
||||
msgid "About Joplin"
|
||||
msgstr "Om Joplin"
|
||||
|
||||
msgid "Preferences..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Check for updates..."
|
||||
msgstr "Se etter oppdatering..."
|
||||
|
||||
msgid "Import"
|
||||
msgstr "Importer"
|
||||
|
||||
msgid "Export"
|
||||
msgstr "Eksport"
|
||||
msgstr "Eksporter"
|
||||
|
||||
msgid "Print"
|
||||
msgstr "Skriv ut"
|
||||
msgid "Synchronise"
|
||||
msgstr "Synkroniser"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Hide %s"
|
||||
@@ -625,8 +650,11 @@ msgstr "Skjul %s"
|
||||
msgid "Quit"
|
||||
msgstr "Avslutt"
|
||||
|
||||
msgid "Edit"
|
||||
msgstr "Rediger"
|
||||
msgid "Close Window"
|
||||
msgstr ""
|
||||
|
||||
msgid "&Edit"
|
||||
msgstr "&Rediger"
|
||||
|
||||
msgid "Copy"
|
||||
msgstr "Kopier"
|
||||
@@ -647,7 +675,7 @@ msgid "Italic"
|
||||
msgstr "Kursiv"
|
||||
|
||||
msgid "Link"
|
||||
msgstr ""
|
||||
msgstr "Lenke"
|
||||
|
||||
msgid "Insert Date Time"
|
||||
msgstr "Sett inn dato/tid"
|
||||
@@ -658,40 +686,26 @@ msgstr "Rediger i ekstern editor"
|
||||
msgid "Search in all the notes"
|
||||
msgstr "Søk i alle notater"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Search in current note"
|
||||
msgstr "Søk i nåværende notat"
|
||||
|
||||
msgid "View"
|
||||
msgstr "Vis"
|
||||
msgid "&View"
|
||||
msgstr "&Vis"
|
||||
|
||||
msgid "Toggle sidebar"
|
||||
msgstr "Vis/skjul sidepanel"
|
||||
|
||||
msgid "Toggle editor layout"
|
||||
msgstr "Bytt editorutseende"
|
||||
msgstr "Bytt editorvisning"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Focus"
|
||||
msgstr "Fokuser på brødtekst"
|
||||
msgstr "Fokuser"
|
||||
|
||||
msgid "Tools"
|
||||
msgstr "Verktøy"
|
||||
msgid "&Tools"
|
||||
msgstr "&Verktøy"
|
||||
|
||||
msgid "Synchronisation status"
|
||||
msgstr "Synkroniseringsstatus"
|
||||
|
||||
msgid "Web clipper options"
|
||||
msgstr "Web Clipper-innstillinger"
|
||||
|
||||
msgid "Encryption options"
|
||||
msgstr "Krypteringsvalg"
|
||||
|
||||
msgid "General Options"
|
||||
msgstr "Generelle innstillinger"
|
||||
|
||||
msgid "Help"
|
||||
msgstr "Hjelp"
|
||||
msgid "&Help"
|
||||
msgstr "&Hjelp"
|
||||
|
||||
msgid "Website and documentation"
|
||||
msgstr "Nettsted og dokumentasjon"
|
||||
@@ -699,15 +713,8 @@ msgstr "Nettsted og dokumentasjon"
|
||||
msgid "Make a donation"
|
||||
msgstr "Gi et bidrag"
|
||||
|
||||
msgid "Check for updates..."
|
||||
msgstr "Se etter oppdatering..."
|
||||
|
||||
msgid "About Joplin"
|
||||
msgstr "Om Joplin"
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s %s (%s, %s)"
|
||||
msgstr "%s %s (%s, %s)"
|
||||
msgid "Toggle development tools"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Open %s"
|
||||
@@ -733,12 +740,12 @@ msgid "An update is available, do you want to download it now?"
|
||||
msgstr "En oppdatering er tilgjengelig, vil du laste den ned nå?"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Your version: v%s"
|
||||
msgstr "Din versjon: v%s"
|
||||
msgid "Your version: %s"
|
||||
msgstr "Din versjon: %s"
|
||||
|
||||
#, javascript-format
|
||||
msgid "New version: v%s"
|
||||
msgstr "Ny versjon: v%s"
|
||||
msgid "New version: %s"
|
||||
msgstr "Ny versjon: %s"
|
||||
|
||||
msgid "Yes"
|
||||
msgstr "Ja"
|
||||
@@ -810,19 +817,19 @@ msgid ""
|
||||
"This authorisation token is only needed to allow third-party applications to "
|
||||
"access Joplin."
|
||||
msgstr ""
|
||||
"Denne autoriseringsbeviset er det eneste nødvendig for å gi "
|
||||
"Denne autoriseringsbeviset er det eneste nødvendige for å gi "
|
||||
"tredjepartsapplikasjoner tilgang til Joplin."
|
||||
|
||||
#, javascript-format
|
||||
msgid "Notes and settings are stored in: %s"
|
||||
msgstr "Notater og innstillinger er lagret i: %s"
|
||||
|
||||
msgid "Browse..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Check synchronisation configuration"
|
||||
msgstr "Sjekk synkroniseringskonfigurasjon"
|
||||
|
||||
msgid "Browse..."
|
||||
msgstr "Utforsk..."
|
||||
|
||||
msgid "Apply"
|
||||
msgstr "Bruk"
|
||||
|
||||
@@ -917,9 +924,8 @@ msgstr "Status"
|
||||
msgid "Encryption is:"
|
||||
msgstr "Kryptering er:"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Usage"
|
||||
msgstr "Bruk: %s"
|
||||
msgstr "Bruk"
|
||||
|
||||
msgid "Back"
|
||||
msgstr "Tilbake"
|
||||
@@ -941,10 +947,7 @@ msgid "Notebook title:"
|
||||
msgstr "Tittel på notatbok:"
|
||||
|
||||
msgid "Add or remove tags:"
|
||||
msgstr "Legge til eller fjern merkelapp:"
|
||||
|
||||
msgid "Separate each tag by a comma."
|
||||
msgstr "Separer hver merkelapp med komma."
|
||||
msgstr "Legge til eller fjern merkelapper:"
|
||||
|
||||
msgid "Rename notebook:"
|
||||
msgstr "Gi nytt navn til notatbok:"
|
||||
@@ -956,7 +959,7 @@ msgid "Set alarm:"
|
||||
msgstr "Angi alarm:"
|
||||
|
||||
msgid "Layout"
|
||||
msgstr "Utseende"
|
||||
msgstr "Visning"
|
||||
|
||||
msgid "Search..."
|
||||
msgstr "Søk..."
|
||||
@@ -967,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"
|
||||
@@ -987,9 +991,33 @@ msgstr "Lokasjon"
|
||||
msgid "URL"
|
||||
msgstr "URL"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Note History"
|
||||
msgstr "Notatliste"
|
||||
|
||||
msgid "Previous versions of this note"
|
||||
msgstr ""
|
||||
|
||||
msgid "Note properties"
|
||||
msgstr "Notategenskaper"
|
||||
|
||||
#, javascript-format
|
||||
msgid "The note \"%s\" has been successfully restored to the notebook \"%s\"."
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "This note has no history"
|
||||
msgstr "Dette notatet har blitt endret:"
|
||||
|
||||
msgid "Restore"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid ""
|
||||
"Click \"%s\" to restore the note. It will be copied in the notebook named "
|
||||
"\"%s\". The current version of the note will not be replaced or modified."
|
||||
msgstr ""
|
||||
|
||||
msgid "Open..."
|
||||
msgstr "Åpne..."
|
||||
|
||||
@@ -1021,7 +1049,7 @@ msgstr ""
|
||||
"Dette notatet har ikke noe innhold. Klikk på \"%s\" for å redigere notatet."
|
||||
|
||||
msgid "Only one note can be printed or exported to PDF at a time."
|
||||
msgstr ""
|
||||
msgstr "Kun ett notat kan bli printet eller eksportert som PDF om gangen."
|
||||
|
||||
msgid "strong text"
|
||||
msgstr "fet tekst"
|
||||
@@ -1058,7 +1086,7 @@ msgid "Numbered List"
|
||||
msgstr "Nummerert liste"
|
||||
|
||||
msgid "Bulleted List"
|
||||
msgstr "Kuleliste"
|
||||
msgstr "Kulepunktliste"
|
||||
|
||||
msgid "Checkbox"
|
||||
msgstr "Avmerkingsboks"
|
||||
@@ -1083,7 +1111,7 @@ msgstr "notat"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Creating new %s..."
|
||||
msgstr "Lager ny %s..."
|
||||
msgstr "Oppretter nytt %s..."
|
||||
|
||||
msgid "Refresh"
|
||||
msgstr "Oppdater"
|
||||
@@ -1109,8 +1137,20 @@ msgstr "Krypteringsinnstillinger"
|
||||
msgid "Clipper Options"
|
||||
msgstr "Clipper-innstillinger"
|
||||
|
||||
msgid "Remove this tag from all the notes?"
|
||||
msgstr "Fjern denne merkelappen fra alle notater?"
|
||||
#, javascript-format
|
||||
msgid ""
|
||||
"Delete notebook \"%s\"?\n"
|
||||
"\n"
|
||||
"All notes and sub-notebooks within this notebook will also be deleted."
|
||||
msgstr ""
|
||||
"Slette notatbok \"&s\"?\n"
|
||||
"\n"
|
||||
"Alle notater og underliggende notatbøker i denne notatboken vil også bli "
|
||||
"slettet."
|
||||
|
||||
#, javascript-format
|
||||
msgid "Remove tag \"%s\" from all notes?"
|
||||
msgstr "Fjern denne merkelappen \"%s\" fra alle notater?"
|
||||
|
||||
msgid "Remove this search from the sidebar?"
|
||||
msgstr "Fjerne dette søket fra sidepanelet?"
|
||||
@@ -1121,9 +1161,6 @@ msgstr "Slett"
|
||||
msgid "Rename"
|
||||
msgstr "Gi nytt navn"
|
||||
|
||||
msgid "Synchronise"
|
||||
msgstr "Synkroniser"
|
||||
|
||||
msgid "Notebooks"
|
||||
msgstr "Notatbøker"
|
||||
|
||||
@@ -1132,12 +1169,53 @@ 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"
|
||||
|
||||
msgid "Duplicate"
|
||||
msgstr "Dupliser"
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s - Copy"
|
||||
msgstr "%s - Kopier"
|
||||
|
||||
msgid "Switch between note and to-do type"
|
||||
msgstr "Bytt mellom notat og gjøremål"
|
||||
|
||||
msgid "Switch to note type"
|
||||
msgstr "Bytt til notatmodus"
|
||||
|
||||
msgid "Switch to to-do type"
|
||||
msgstr "Bytt til gjøremålmodus"
|
||||
|
||||
msgid "Copy Markdown link"
|
||||
msgstr "Kopier Markdown-link"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Delete note \"%s\"?"
|
||||
msgstr "Slette notat \"%s\"?"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Delete these %d notes?"
|
||||
msgstr "Slett disse %d notatene?"
|
||||
|
||||
msgid ""
|
||||
"Type a note title to jump to it. Or type # followed by a tag name, or @ "
|
||||
"followed by a notebook name."
|
||||
msgstr ""
|
||||
|
||||
msgid "Goto Anything..."
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Usage: %s"
|
||||
msgstr "Bruk: %s"
|
||||
@@ -1227,7 +1305,7 @@ msgstr "Slettet eksterne elementer: %d."
|
||||
|
||||
#, javascript-format
|
||||
msgid "Fetched items: %d/%d."
|
||||
msgstr "Hentede elementer: %d/%d."
|
||||
msgstr "Hentet elementer: %d/%d."
|
||||
|
||||
msgid "Cancelling..."
|
||||
msgstr "Avbryter…"
|
||||
@@ -1250,12 +1328,22 @@ msgstr "Pågår"
|
||||
msgid "Synchronisation is already in progress. State: %s"
|
||||
msgstr "Synkronisering pågår allerede. Status: %s"
|
||||
|
||||
msgid ""
|
||||
"Unknown item type downloaded - please upgrade Joplin to the latest version"
|
||||
msgstr ""
|
||||
|
||||
msgid "Encrypted"
|
||||
msgstr "Kryptert"
|
||||
|
||||
msgid "Encrypted items cannot be modified"
|
||||
msgstr "Krypterte elementer kan ikke modifiseres"
|
||||
|
||||
msgid "title"
|
||||
msgstr "tittel"
|
||||
|
||||
msgid "updated date"
|
||||
msgstr "sist oppdatert"
|
||||
|
||||
msgid "Conflicts"
|
||||
msgstr "Konflikter"
|
||||
|
||||
@@ -1266,14 +1354,8 @@ msgstr "Kan ikke flytte notatboken til denne plasseringen"
|
||||
msgid "Notebooks cannot be named \"%s\", which is a reserved title."
|
||||
msgstr "Notatbøker kan ikke hete %s, som er en reservert tittel."
|
||||
|
||||
msgid "title"
|
||||
msgstr "tittel"
|
||||
|
||||
msgid "updated date"
|
||||
msgstr "sist oppdatert"
|
||||
|
||||
msgid "created date"
|
||||
msgstr "opprettet"
|
||||
msgstr "dato opprettet"
|
||||
|
||||
msgid "This note does not have geolocation information."
|
||||
msgstr "Dette notatet har ingen stedsinformasjon."
|
||||
@@ -1286,6 +1368,68 @@ msgstr "Kan ikke kopiere notat til notatenboken \"%s\""
|
||||
msgid "Cannot move note to \"%s\" notebook"
|
||||
msgstr "Kan ikke flytte notatet til notatboken \"%s\""
|
||||
|
||||
#, javascript-format
|
||||
msgid ""
|
||||
"Attention: If you change this location, make sure you copy all your content "
|
||||
"to it before syncing, otherwise all files will be removed! See the FAQ for "
|
||||
"more details: %s"
|
||||
msgstr ""
|
||||
"Viktig: Dersom du endrer denne lokasjonen, sørg for at du kopierer alt "
|
||||
"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"
|
||||
|
||||
@@ -1316,6 +1460,9 @@ msgstr "Sorter notater etter"
|
||||
msgid "Reverse sort order"
|
||||
msgstr "Reverser sorteringsrekkefølge"
|
||||
|
||||
msgid "Sort notebooks by"
|
||||
msgstr "Sorter notater etter"
|
||||
|
||||
msgid "Save geo-location with notes"
|
||||
msgstr "Lagre stedsinformasjon med notater"
|
||||
|
||||
@@ -1331,6 +1478,46 @@ msgstr "Fokuser på brødtekst"
|
||||
msgid "When creating a new note:"
|
||||
msgstr "Når du lager et nytt notat:"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Enable soft breaks"
|
||||
msgstr "Liste over innhold"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Enable math expressions"
|
||||
msgstr "Aktiver kryptering"
|
||||
|
||||
msgid "Enable ==mark== syntax"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Enable footnotes"
|
||||
msgstr "Liste over innhold"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Enable table of contents extension"
|
||||
msgstr "Liste over innhold"
|
||||
|
||||
msgid "Enable ~sub~ syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable ^sup^ syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable deflist syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable abbreviation syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable markdown emoji"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable ++insert++ syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable multimarkdown table extension"
|
||||
msgstr ""
|
||||
|
||||
msgid "Show tray icon"
|
||||
msgstr "Vis systemmenyikon"
|
||||
|
||||
@@ -1352,12 +1539,11 @@ msgstr "Start applikasjonen minimert som systemmenyikon"
|
||||
msgid "Global zoom percentage"
|
||||
msgstr "Global forstørrelse"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Editor font size"
|
||||
msgstr "Editor skriftstørrelse"
|
||||
msgstr "Editorskriftstørrelse"
|
||||
|
||||
msgid "Editor font family"
|
||||
msgstr "Editor skrifttype"
|
||||
msgstr "Editorskrifttype"
|
||||
|
||||
msgid ""
|
||||
"This must be *monospace* font or it will not work properly. If the font is "
|
||||
@@ -1405,54 +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 "Mappe å synkronisere med (absolutt sti)"
|
||||
|
||||
msgid ""
|
||||
"The path to synchronise with when file system synchronisation is enabled. "
|
||||
"See `sync.target`."
|
||||
msgstr ""
|
||||
"Stien som skal synkroniseres når filsystemsynkronisering er aktivert. Se "
|
||||
"`sync.target`."
|
||||
|
||||
msgid "Nextcloud WebDAV URL"
|
||||
msgstr "Nextcloud WebDAV-URL"
|
||||
|
||||
#, javascript-format
|
||||
msgid ""
|
||||
"Attention: If you change this location, make sure you copy all your content "
|
||||
"to it before syncing, otherwise all files will be removed! See the FAQ for "
|
||||
"more details: %s"
|
||||
msgstr ""
|
||||
"Viktig: Dersom du endrer denne lokasjonen, sørg for at du kopierer alt "
|
||||
"innhold dit før du synkroniserer. Hvis ikke blir alle filer fjernet! Se FAQ "
|
||||
"for flere detaljer: %s"
|
||||
|
||||
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"
|
||||
|
||||
@@ -1465,33 +1603,46 @@ msgstr ""
|
||||
"Kommaseparert liste over stier til mapper å laste sertifikater fra, eller "
|
||||
"sti til individuelle sertifikatfiler. For eksempel: /my/cert_dir, /other/"
|
||||
"custom.perm. Merk at dersom du gjør endringer til TLS-innstillingene må du "
|
||||
"lagre endringer før du velger \"Sjekk synkroniseringsstatus\"."
|
||||
"lagre endringer før du velger \"Sjekk synkroniseringskonfigurasjon\"."
|
||||
|
||||
msgid "Ignore TLS certificate errors"
|
||||
msgstr "Ignorer TLS-sertifikatfeil"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Enable note history"
|
||||
msgstr "Liste over innhold"
|
||||
|
||||
msgid "days"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "%d days"
|
||||
msgstr ""
|
||||
|
||||
msgid "Keep note history for"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Invalid option value: \"%s\". Possible values are: %s."
|
||||
msgstr "Ugyldig verdi: \"%s\". Mulige verdier er: %s."
|
||||
|
||||
#, fuzzy
|
||||
msgid "General"
|
||||
msgstr "Generelle innstillinger"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Synchronisation"
|
||||
msgstr "Synkroniseringsstatus"
|
||||
msgstr "Synkronisering"
|
||||
|
||||
msgid "Appearance"
|
||||
msgstr "Utseende"
|
||||
|
||||
msgid "Note"
|
||||
msgstr "Notat"
|
||||
|
||||
msgid "Plugins"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Note"
|
||||
msgstr "Notatbøker"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Application"
|
||||
msgstr "Lokasjon"
|
||||
msgstr "Applikasjon"
|
||||
|
||||
#, javascript-format
|
||||
msgid "The tag \"%s\" already exists. Please choose a different name."
|
||||
@@ -1512,6 +1663,9 @@ msgstr "Evernote-eksportert fil"
|
||||
msgid "Json Export Directory"
|
||||
msgstr "Json-eksportert katalog"
|
||||
|
||||
msgid "File"
|
||||
msgstr "Fil"
|
||||
|
||||
msgid "Directory"
|
||||
msgstr "Katalog"
|
||||
|
||||
@@ -1537,13 +1691,12 @@ msgstr "Det er ingen data for eksportering."
|
||||
msgid "Please specify the notebook where the notes should be imported to."
|
||||
msgstr "Velg notatbok som notatene skal importeres til."
|
||||
|
||||
msgid "Restored Notes"
|
||||
msgstr ""
|
||||
|
||||
msgid "Items that cannot be synchronised"
|
||||
msgstr "Elementer som ikke vil synkronisere"
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s (%s): %s"
|
||||
msgstr "%s (%s): %s"
|
||||
|
||||
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 "
|
||||
@@ -1553,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)"
|
||||
|
||||
@@ -1675,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"
|
||||
@@ -1698,15 +1873,11 @@ msgstr "- Sted: for å legge ved stedsinformation til notatet."
|
||||
msgid "Joplin website"
|
||||
msgstr "Joplins nettsted"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Joplin v%s"
|
||||
msgstr "Joplin v%s"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Database v%s"
|
||||
msgstr "Database v%s"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
#, javascript-format
|
||||
msgid "FTS enabled: %d"
|
||||
msgstr "Fulltekstsøk aktivert: %d"
|
||||
|
||||
@@ -1747,7 +1918,7 @@ msgid "Errors only"
|
||||
msgstr "Kun feilmeldinger"
|
||||
|
||||
msgid "This note has been modified:"
|
||||
msgstr "Dette notatet har blitt modifisert:"
|
||||
msgstr "Dette notatet har blitt endret:"
|
||||
|
||||
msgid "Save changes"
|
||||
msgstr "Lagre endringer"
|
||||
@@ -1767,9 +1938,8 @@ msgstr "Joplins mobilapp støtter for tiden ikke denne type linker: %s"
|
||||
msgid "Unsupported image type: %s"
|
||||
msgstr "Bildetypen er ikke støttet: %s"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Take photo"
|
||||
msgstr "Ta et bilde"
|
||||
msgstr "Ta bilde"
|
||||
|
||||
msgid "Attach photo"
|
||||
msgstr "Legg ved et bilde"
|
||||
@@ -1786,9 +1956,6 @@ msgstr "Konverter til notat"
|
||||
msgid "Convert to todo"
|
||||
msgstr "Konverter til gjøremål"
|
||||
|
||||
msgid "Copy Markdown link"
|
||||
msgstr "Kopier Markdown-link"
|
||||
|
||||
msgid "Hide metadata"
|
||||
msgstr "Skjul metadata"
|
||||
|
||||
@@ -1796,11 +1963,14 @@ msgid "Show metadata"
|
||||
msgstr "Vis metadata"
|
||||
|
||||
msgid "View on map"
|
||||
msgstr "Se på kart"
|
||||
msgstr "Vis på kart"
|
||||
|
||||
msgid "Go to source URL"
|
||||
msgstr "Gå til kilde-URL"
|
||||
|
||||
msgid "Edit"
|
||||
msgstr "Rediger"
|
||||
|
||||
msgid "Delete notebook"
|
||||
msgstr "Slett notatbok"
|
||||
|
||||
@@ -1815,31 +1985,33 @@ msgid ""
|
||||
"menu to access your existing notebooks."
|
||||
msgstr ""
|
||||
"Klikk på (+)-knappen for å lage et nytt notat eller en ny notatbok. Klikk på "
|
||||
"sidemenyen for tilgang til dine eksisterende notatbøker."
|
||||
"sidepanelet for tilgang til dine eksisterende notatbøker."
|
||||
|
||||
msgid "You currently have no notebook. Create one by clicking on (+) button."
|
||||
msgstr "Du har enda ingen notatbok. Lag en ved å klikke på (+)-knappen."
|
||||
msgstr "Du har enda ingen notatbok. Opprett en ved å klikke på (+)-knappen."
|
||||
|
||||
msgid "Welcome"
|
||||
msgstr "Velkommen"
|
||||
|
||||
#~ msgid "Add or remove tags"
|
||||
#~ msgstr "Legg til eller fjern merkelapper"
|
||||
#~ msgid "Separate each tag by a comma."
|
||||
#~ msgstr "Separer hver merkelapp med komma."
|
||||
|
||||
#~ msgid "Duplicate"
|
||||
#~ msgstr "Dupliser"
|
||||
#~ msgid "Some items cannot be decrypted."
|
||||
#~ msgstr "Noen elementer kan ikke dekrypteres."
|
||||
|
||||
#~ msgid "%s - Copy"
|
||||
#~ msgstr "%s - Kopier"
|
||||
#~ msgid "%s (%s): %s"
|
||||
#~ msgstr "%s (%s): %s"
|
||||
|
||||
#~ msgid "Switch between note and to-do type"
|
||||
#~ msgstr "Bytt mellom notat og gjøremål"
|
||||
#~ msgid "Table of contents"
|
||||
#~ msgstr "Liste over innhold"
|
||||
|
||||
#~ msgid "Switch to note type"
|
||||
#~ msgstr "Bytt til notatmodus"
|
||||
#~ msgid ""
|
||||
#~ "The path to synchronise with when file system synchronisation is enabled. "
|
||||
#~ "See `sync.target`."
|
||||
#~ msgstr ""
|
||||
#~ "Stien som skal synkroniseres når filsystemsynkronisering er aktivert. Se "
|
||||
#~ "`sync.target`."
|
||||
|
||||
#~ msgid "Switch to to-do type"
|
||||
#~ msgstr "Bytt til gjøremålmodus"
|
||||
|
||||
#~ msgid "Delete notes?"
|
||||
#~ msgstr "Slette notater?"
|
||||
#, fuzzy
|
||||
#~ msgid "Joplin v%s"
|
||||
#~ msgstr "Joplin v%s"
|
||||
|
||||
@@ -125,9 +125,10 @@ msgstr "Markeer een to-do als voltooid. "
|
||||
msgid "Note is not a to-do: \"%s\""
|
||||
msgstr "Notitie is geen to-do: \"%s\""
|
||||
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
"Manages E2EE configuration. Commands are `enable`, `disable`, `decrypt`, "
|
||||
"`status` and `target-status`."
|
||||
"`status`, `decrypt-file` and `target-status`."
|
||||
msgstr ""
|
||||
"Beheert E2EE configuratie. Commando's zijn `enable`, `disable`, `decrypt`, "
|
||||
"`status` and `target-status`."
|
||||
@@ -606,8 +607,8 @@ msgstr ""
|
||||
msgid "PDF File"
|
||||
msgstr "Bestand"
|
||||
|
||||
msgid "File"
|
||||
msgstr "Bestand"
|
||||
msgid "Synchronisation status"
|
||||
msgstr "Synchronisatie status"
|
||||
|
||||
msgid "New note"
|
||||
msgstr "Nieuwe notitie"
|
||||
@@ -618,6 +619,35 @@ msgstr "Nieuwe to-do"
|
||||
msgid "New notebook"
|
||||
msgstr "Nieuw notitieboek"
|
||||
|
||||
msgid "Print"
|
||||
msgstr ""
|
||||
|
||||
msgid "General Options"
|
||||
msgstr "Algemene opties"
|
||||
|
||||
msgid "Encryption options"
|
||||
msgstr "Versleutelopties"
|
||||
|
||||
msgid "Web clipper options"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s %s (%s, %s)"
|
||||
msgstr "%s %s (%s, %s)"
|
||||
|
||||
#, fuzzy
|
||||
msgid "&File"
|
||||
msgstr "Bestand"
|
||||
|
||||
msgid "About Joplin"
|
||||
msgstr "Over Joplin"
|
||||
|
||||
msgid "Preferences..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Check for updates..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Import"
|
||||
msgstr "Importeer"
|
||||
|
||||
@@ -625,8 +655,8 @@ msgstr "Importeer"
|
||||
msgid "Export"
|
||||
msgstr "Importeer"
|
||||
|
||||
msgid "Print"
|
||||
msgstr ""
|
||||
msgid "Synchronise"
|
||||
msgstr "Synchroniseer"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Hide %s"
|
||||
@@ -635,7 +665,11 @@ msgstr ""
|
||||
msgid "Quit"
|
||||
msgstr "Stop"
|
||||
|
||||
msgid "Edit"
|
||||
msgid "Close Window"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "&Edit"
|
||||
msgstr "Bewerk"
|
||||
|
||||
msgid "Copy"
|
||||
@@ -673,7 +707,7 @@ msgstr "Zoek in alle notities"
|
||||
msgid "Search in current note"
|
||||
msgstr "Zoek in alle notities"
|
||||
|
||||
msgid "View"
|
||||
msgid "&View"
|
||||
msgstr ""
|
||||
|
||||
msgid "Toggle sidebar"
|
||||
@@ -685,22 +719,12 @@ msgstr ""
|
||||
msgid "Focus"
|
||||
msgstr ""
|
||||
|
||||
msgid "Tools"
|
||||
#, fuzzy
|
||||
msgid "&Tools"
|
||||
msgstr "Tools"
|
||||
|
||||
msgid "Synchronisation status"
|
||||
msgstr "Synchronisatie status"
|
||||
|
||||
msgid "Web clipper options"
|
||||
msgstr ""
|
||||
|
||||
msgid "Encryption options"
|
||||
msgstr "Versleutelopties"
|
||||
|
||||
msgid "General Options"
|
||||
msgstr "Algemene opties"
|
||||
|
||||
msgid "Help"
|
||||
#, fuzzy
|
||||
msgid "&Help"
|
||||
msgstr "Help"
|
||||
|
||||
msgid "Website and documentation"
|
||||
@@ -710,16 +734,9 @@ msgstr "Website en documentatie"
|
||||
msgid "Make a donation"
|
||||
msgstr "Website en documentatie"
|
||||
|
||||
msgid "Check for updates..."
|
||||
msgid "Toggle development tools"
|
||||
msgstr ""
|
||||
|
||||
msgid "About Joplin"
|
||||
msgstr "Over Joplin"
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s %s (%s, %s)"
|
||||
msgstr "%s %s (%s, %s)"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Open %s"
|
||||
msgstr "Op %s: %s"
|
||||
@@ -744,11 +761,11 @@ msgid "An update is available, do you want to download it now?"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Your version: v%s"
|
||||
msgid "Your version: %s"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "New version: v%s"
|
||||
msgid "New version: %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Yes"
|
||||
@@ -823,13 +840,13 @@ msgstr ""
|
||||
msgid "Notes and settings are stored in: %s"
|
||||
msgstr "Notities en instellingen zijn opgeslaan in %s"
|
||||
|
||||
msgid "Browse..."
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Check synchronisation configuration"
|
||||
msgstr "Annuleer synchronisatie"
|
||||
|
||||
msgid "Browse..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Apply"
|
||||
msgstr ""
|
||||
|
||||
@@ -946,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:"
|
||||
|
||||
@@ -972,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"
|
||||
@@ -993,9 +1008,33 @@ msgstr ""
|
||||
msgid "URL"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Note History"
|
||||
msgstr "Notitieboeken"
|
||||
|
||||
msgid "Previous versions of this note"
|
||||
msgstr ""
|
||||
|
||||
msgid "Note properties"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "The note \"%s\" has been successfully restored to the notebook \"%s\"."
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "This note has no history"
|
||||
msgstr "Deze notitie werd aangepast:"
|
||||
|
||||
msgid "Restore"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid ""
|
||||
"Click \"%s\" to restore the note. It will be copied in the notebook named "
|
||||
"\"%s\". The current version of the note will not be replaced or modified."
|
||||
msgstr ""
|
||||
|
||||
msgid "Open..."
|
||||
msgstr ""
|
||||
|
||||
@@ -1119,7 +1158,17 @@ msgstr "Versleutelopties"
|
||||
msgid "Clipper Options"
|
||||
msgstr "Algemene opties"
|
||||
|
||||
msgid "Remove this tag from all the notes?"
|
||||
#, fuzzy, javascript-format
|
||||
msgid ""
|
||||
"Delete notebook \"%s\"?\n"
|
||||
"\n"
|
||||
"All notes and sub-notebooks within this notebook will also be deleted."
|
||||
msgstr ""
|
||||
"Notitieboek verwijderen? Alle notities in dit notitieboek zullen ook "
|
||||
"verwijderd worden."
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Remove tag \"%s\" from all notes?"
|
||||
msgstr "Deze tag verwijderen van alle notities?"
|
||||
|
||||
msgid "Remove this search from the sidebar?"
|
||||
@@ -1131,23 +1180,64 @@ msgstr "Verwijderen"
|
||||
msgid "Rename"
|
||||
msgstr "Hernoem"
|
||||
|
||||
msgid "Synchronise"
|
||||
msgstr "Synchroniseer"
|
||||
|
||||
msgid "Notebooks"
|
||||
msgstr "Notitieboeken"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Decrypting items: %d/%d"
|
||||
msgstr "Opgehaalde items: %d/%d."
|
||||
msgstr "Opgehaalde items: %d/%d"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Fetching resources: %d"
|
||||
msgstr "Middelen: %d."
|
||||
msgid "Fetching resources: %d/%d"
|
||||
msgstr "Middelen: %d/%d"
|
||||
|
||||
msgid "Please select where the sync status should be exported to"
|
||||
msgstr "Selecteer waar de synchronisatie status naar geëxporteerd moet worden"
|
||||
|
||||
msgid "Retry"
|
||||
msgstr ""
|
||||
|
||||
msgid "Add or remove tags"
|
||||
msgstr "Voeg tag toe of verwijder tag"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Duplicate"
|
||||
msgstr "Sluit de applicatie."
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "%s - Copy"
|
||||
msgstr "Kopieer"
|
||||
|
||||
msgid "Switch between note and to-do type"
|
||||
msgstr "Wissel tussen notitie en to-do type"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Switch to note type"
|
||||
msgstr "Wissel tussen notitie en to-do type"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Switch to to-do type"
|
||||
msgstr "Wissel tussen notitie en to-do type"
|
||||
|
||||
msgid "Copy Markdown link"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Delete note \"%s\"?"
|
||||
msgstr "Notities verwijderen?"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Delete these %d notes?"
|
||||
msgstr "Deze notities verwijderen?"
|
||||
|
||||
msgid ""
|
||||
"Type a note title to jump to it. Or type # followed by a tag name, or @ "
|
||||
"followed by a notebook name."
|
||||
msgstr ""
|
||||
|
||||
msgid "Goto Anything..."
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Usage: %s"
|
||||
msgstr "Gebruik: %s"
|
||||
@@ -1261,12 +1351,24 @@ msgstr ""
|
||||
msgid "Synchronisation is already in progress. State: %s"
|
||||
msgstr "Synchronisatie is reeds bezig. Status: %s"
|
||||
|
||||
msgid ""
|
||||
"Unknown item type downloaded - please upgrade Joplin to the latest version"
|
||||
msgstr ""
|
||||
|
||||
msgid "Encrypted"
|
||||
msgstr "Versleuteld"
|
||||
|
||||
msgid "Encrypted items cannot be modified"
|
||||
msgstr "Versleutelde items kunnen niet aangepast worden"
|
||||
|
||||
#, fuzzy
|
||||
msgid "title"
|
||||
msgstr "Untitled"
|
||||
|
||||
#, fuzzy
|
||||
msgid "updated date"
|
||||
msgstr "Bijgewerkt: %d."
|
||||
|
||||
msgid "Conflicts"
|
||||
msgstr "Conflicten"
|
||||
|
||||
@@ -1280,14 +1382,6 @@ msgstr ""
|
||||
"Notitieboeken kunnen niet \"%s\" genoemd worden, dit is een gereserveerd "
|
||||
"woord."
|
||||
|
||||
#, fuzzy
|
||||
msgid "title"
|
||||
msgstr "Untitled"
|
||||
|
||||
#, fuzzy
|
||||
msgid "updated date"
|
||||
msgstr "Bijgewerkt: %d."
|
||||
|
||||
#, fuzzy
|
||||
msgid "created date"
|
||||
msgstr "Aangemaakt: %d."
|
||||
@@ -1303,6 +1397,65 @@ msgstr "Kan notitie niet naar notitieboek \"%s\" kopiëren."
|
||||
msgid "Cannot move note to \"%s\" notebook"
|
||||
msgstr "Kan notitie niet naar notitieboek \"%s\" verplaatsen."
|
||||
|
||||
#, javascript-format
|
||||
msgid ""
|
||||
"Attention: If you change this location, make sure you copy all your content "
|
||||
"to it before syncing, otherwise all files will be removed! See the FAQ for "
|
||||
"more details: %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Synchronisation target"
|
||||
msgstr "Synchronisatiedoel"
|
||||
|
||||
msgid ""
|
||||
"The target to synchonise to. Each sync target may have additional parameters "
|
||||
"which are named as `sync.NUM.NAME` (all documented below)."
|
||||
msgstr ""
|
||||
|
||||
msgid "Directory to synchronise with (absolute path)"
|
||||
msgstr "Folder om mee te synchroniseren (absolute pad)"
|
||||
|
||||
msgid "Nextcloud WebDAV URL"
|
||||
msgstr ""
|
||||
|
||||
msgid "Nextcloud username"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Nextcloud password"
|
||||
msgstr "Stel wachtwoord in"
|
||||
|
||||
msgid "WebDAV URL"
|
||||
msgstr ""
|
||||
|
||||
msgid "WebDAV username"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "WebDAV password"
|
||||
msgstr "Stel wachtwoord in"
|
||||
|
||||
msgid "Attachment download behaviour"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"In \"Manual\" mode, attachments are downloaded only when you click on them. "
|
||||
"In \"Auto\", they are downloaded when you open the note. In \"Always\", all "
|
||||
"the attachments are downloaded whether you open the note or not."
|
||||
msgstr ""
|
||||
|
||||
msgid "Always"
|
||||
msgstr ""
|
||||
|
||||
msgid "Manual"
|
||||
msgstr ""
|
||||
|
||||
msgid "Auto"
|
||||
msgstr ""
|
||||
|
||||
msgid "Max concurrent connections"
|
||||
msgstr ""
|
||||
|
||||
msgid "Language"
|
||||
msgstr "Taal"
|
||||
|
||||
@@ -1336,6 +1489,10 @@ msgstr ""
|
||||
msgid "Reverse sort order"
|
||||
msgstr "Draait de sorteervolgorde om."
|
||||
|
||||
#, fuzzy
|
||||
msgid "Sort notebooks by"
|
||||
msgstr "Bewerk notitieboek"
|
||||
|
||||
msgid "Save geo-location with notes"
|
||||
msgstr "Sla geo-locatie op bij notities"
|
||||
|
||||
@@ -1353,6 +1510,43 @@ msgstr ""
|
||||
msgid "When creating a new note:"
|
||||
msgstr "Maakt een nieuwe notitie aan."
|
||||
|
||||
msgid "Enable soft breaks"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Enable math expressions"
|
||||
msgstr "Schakel encryptie in"
|
||||
|
||||
msgid "Enable ==mark== syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable footnotes"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable table of contents extension"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable ~sub~ syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable ^sup^ syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable deflist syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable abbreviation syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable markdown emoji"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable ++insert++ syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable multimarkdown table extension"
|
||||
msgstr ""
|
||||
|
||||
msgid "Show tray icon"
|
||||
msgstr ""
|
||||
|
||||
@@ -1424,51 +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 ""
|
||||
"The path to synchronise with when file system synchronisation is enabled. "
|
||||
"See `sync.target`."
|
||||
msgstr ""
|
||||
"Het pad om mee te synchroniseren als bestandssysteem synchronisatie is "
|
||||
"ingeschakeld. Zie `sync.target`."
|
||||
|
||||
msgid "Nextcloud WebDAV URL"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid ""
|
||||
"Attention: If you change this location, make sure you copy all your content "
|
||||
"to it before syncing, otherwise all files will be removed! See the FAQ for "
|
||||
"more details: %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Nextcloud username"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Nextcloud password"
|
||||
msgstr "Stel wachtwoord in"
|
||||
|
||||
msgid "WebDAV URL"
|
||||
msgstr ""
|
||||
|
||||
msgid "WebDAV username"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "WebDAV password"
|
||||
msgstr "Stel wachtwoord in"
|
||||
|
||||
msgid "Custom TLS certificates"
|
||||
msgstr ""
|
||||
|
||||
@@ -1482,6 +1631,20 @@ msgstr ""
|
||||
msgid "Ignore TLS certificate errors"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Enable note history"
|
||||
msgstr "Schakel encryptie in"
|
||||
|
||||
msgid "days"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "%d days"
|
||||
msgstr ""
|
||||
|
||||
msgid "Keep note history for"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Invalid option value: \"%s\". Possible values are: %s."
|
||||
msgstr "Ongeldige optie: \"%s\". Geldige waarden zijn: %s."
|
||||
@@ -1501,6 +1664,9 @@ msgstr ""
|
||||
msgid "Note"
|
||||
msgstr "Notitieboeken"
|
||||
|
||||
msgid "Plugins"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Application"
|
||||
msgstr "Sluit de applicatie."
|
||||
@@ -1527,6 +1693,9 @@ msgstr "Exporteer Evernote bestanden"
|
||||
msgid "Json Export Directory"
|
||||
msgstr "Exporteer Evernote bestanden"
|
||||
|
||||
msgid "File"
|
||||
msgstr "Bestand"
|
||||
|
||||
msgid "Directory"
|
||||
msgstr ""
|
||||
|
||||
@@ -1551,13 +1720,12 @@ msgstr ""
|
||||
msgid "Please specify the notebook where the notes should be imported to."
|
||||
msgstr "Selecteer waar de synchronisatie status naar geëxporteerd moet worden"
|
||||
|
||||
msgid "Restored Notes"
|
||||
msgstr ""
|
||||
|
||||
msgid "Items that cannot be synchronised"
|
||||
msgstr "Items die niet gesynchroniseerd kunnen worden"
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s (%s): %s"
|
||||
msgstr "%s (%s): %s"
|
||||
|
||||
msgid ""
|
||||
"These items will remain on the device but will not be uploaded to the sync "
|
||||
"target. In order to find these items, either search for the title or the ID "
|
||||
@@ -1567,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)"
|
||||
|
||||
@@ -1688,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"
|
||||
@@ -1707,10 +1897,6 @@ msgstr ""
|
||||
msgid "Joplin website"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Joplin v%s"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Database v%s"
|
||||
msgstr ""
|
||||
@@ -1797,9 +1983,6 @@ msgstr "Converteer naar notitie"
|
||||
msgid "Convert to todo"
|
||||
msgstr "Converteer naar to-do"
|
||||
|
||||
msgid "Copy Markdown link"
|
||||
msgstr ""
|
||||
|
||||
msgid "Hide metadata"
|
||||
msgstr "Verberg metadata"
|
||||
|
||||
@@ -1812,6 +1995,9 @@ msgstr "Toon op de kaart"
|
||||
msgid "Go to source URL"
|
||||
msgstr ""
|
||||
|
||||
msgid "Edit"
|
||||
msgstr "Bewerk"
|
||||
|
||||
msgid "Delete notebook"
|
||||
msgstr "Verwijder notitieboek"
|
||||
|
||||
@@ -1836,26 +2022,21 @@ msgstr ""
|
||||
msgid "Welcome"
|
||||
msgstr "Welkom"
|
||||
|
||||
#~ 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."
|
||||
|
||||
#, fuzzy
|
||||
#~ msgid "%s - Copy"
|
||||
#~ msgstr "Kopieer"
|
||||
#~ msgid "Some items cannot be decrypted."
|
||||
#~ msgstr "Sommige items kunnen niet gedecodeerd worden."
|
||||
|
||||
#~ msgid "Switch between note and to-do type"
|
||||
#~ msgstr "Wissel tussen notitie en to-do type"
|
||||
#~ msgid "%s (%s): %s"
|
||||
#~ msgstr "%s (%s): %s"
|
||||
|
||||
#, fuzzy
|
||||
#~ msgid "Switch to note type"
|
||||
#~ msgstr "Wissel tussen notitie en to-do type"
|
||||
|
||||
#, fuzzy
|
||||
#~ msgid "Switch to to-do type"
|
||||
#~ msgstr "Wissel tussen notitie en to-do type"
|
||||
|
||||
#~ msgid "Delete notes?"
|
||||
#~ msgstr "Notities verwijderen?"
|
||||
#~ msgid ""
|
||||
#~ "The path to synchronise with when file system synchronisation is enabled. "
|
||||
#~ "See `sync.target`."
|
||||
#~ msgstr ""
|
||||
#~ "Het pad om mee te synchroniseren als bestandssysteem synchronisatie is "
|
||||
#~ "ingeschakeld. Zie `sync.target`."
|
||||
|
||||
#, fuzzy
|
||||
#~ msgid "State: %s."
|
||||
|
||||
@@ -127,9 +127,10 @@ msgstr "Markeert een taak als afgerond."
|
||||
msgid "Note is not a to-do: \"%s\""
|
||||
msgstr "Notitie is geen taak: \"%s\""
|
||||
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
"Manages E2EE configuration. Commands are `enable`, `disable`, `decrypt`, "
|
||||
"`status` and `target-status`."
|
||||
"`status`, `decrypt-file` and `target-status`."
|
||||
msgstr ""
|
||||
"Beheert de E2EE-configuratie. Opdrachten zijn: `enable`, `disable`, "
|
||||
"`decrypt`, `status` en `target-status`."
|
||||
@@ -606,8 +607,8 @@ msgstr "Bezig met importeren van \"%s\" in het formaat \"%s\". Even geduld..."
|
||||
msgid "PDF File"
|
||||
msgstr "PDF-bestand"
|
||||
|
||||
msgid "File"
|
||||
msgstr "Bestand"
|
||||
msgid "Synchronisation status"
|
||||
msgstr "Synchronisatiestatus"
|
||||
|
||||
msgid "New note"
|
||||
msgstr "Nieuwe notitie"
|
||||
@@ -618,14 +619,43 @@ msgstr "Nieuwe taak"
|
||||
msgid "New notebook"
|
||||
msgstr "Nieuw notitieboek"
|
||||
|
||||
msgid "Print"
|
||||
msgstr "Afdrukken"
|
||||
|
||||
msgid "General Options"
|
||||
msgstr "Algemene opties"
|
||||
|
||||
msgid "Encryption options"
|
||||
msgstr "Versleutelingsopties"
|
||||
|
||||
msgid "Web clipper options"
|
||||
msgstr "Webclipper-opties"
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s %s (%s, %s)"
|
||||
msgstr "%s %s (%s, %s)"
|
||||
|
||||
#, fuzzy
|
||||
msgid "&File"
|
||||
msgstr "Bestand"
|
||||
|
||||
msgid "About Joplin"
|
||||
msgstr "Over Joplin"
|
||||
|
||||
msgid "Preferences..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Check for updates..."
|
||||
msgstr "Controleren op updates..."
|
||||
|
||||
msgid "Import"
|
||||
msgstr "Importeren"
|
||||
|
||||
msgid "Export"
|
||||
msgstr "Exporteren"
|
||||
|
||||
msgid "Print"
|
||||
msgstr "Afdrukken"
|
||||
msgid "Synchronise"
|
||||
msgstr "Synchroniseren"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Hide %s"
|
||||
@@ -634,7 +664,11 @@ msgstr "%s verbergen"
|
||||
msgid "Quit"
|
||||
msgstr "Afsluiten"
|
||||
|
||||
msgid "Edit"
|
||||
msgid "Close Window"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "&Edit"
|
||||
msgstr "Bewerken"
|
||||
|
||||
msgid "Copy"
|
||||
@@ -672,7 +706,8 @@ msgstr "Alle notities doorzoeken"
|
||||
msgid "Search in current note"
|
||||
msgstr "Alle notities doorzoeken"
|
||||
|
||||
msgid "View"
|
||||
#, fuzzy
|
||||
msgid "&View"
|
||||
msgstr "Beeld"
|
||||
|
||||
msgid "Toggle sidebar"
|
||||
@@ -685,22 +720,12 @@ msgstr "Bewerkindeling tonen/verbergen"
|
||||
msgid "Focus"
|
||||
msgstr "Inhoud focussen"
|
||||
|
||||
msgid "Tools"
|
||||
#, fuzzy
|
||||
msgid "&Tools"
|
||||
msgstr "Hulpmiddelen"
|
||||
|
||||
msgid "Synchronisation status"
|
||||
msgstr "Synchronisatiestatus"
|
||||
|
||||
msgid "Web clipper options"
|
||||
msgstr "Webclipper-opties"
|
||||
|
||||
msgid "Encryption options"
|
||||
msgstr "Versleutelingsopties"
|
||||
|
||||
msgid "General Options"
|
||||
msgstr "Algemene opties"
|
||||
|
||||
msgid "Help"
|
||||
#, fuzzy
|
||||
msgid "&Help"
|
||||
msgstr "Hulp"
|
||||
|
||||
msgid "Website and documentation"
|
||||
@@ -709,15 +734,8 @@ msgstr "Website en documentatie"
|
||||
msgid "Make a donation"
|
||||
msgstr "Doneren"
|
||||
|
||||
msgid "Check for updates..."
|
||||
msgstr "Controleren op updates..."
|
||||
|
||||
msgid "About Joplin"
|
||||
msgstr "Over Joplin"
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s %s (%s, %s)"
|
||||
msgstr "%s %s (%s, %s)"
|
||||
msgid "Toggle development tools"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Open %s"
|
||||
@@ -743,11 +761,11 @@ msgid "An update is available, do you want to download it now?"
|
||||
msgstr "Er is een update beschikbaar. Wil je deze nu downloaden?"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Your version: v%s"
|
||||
msgid "Your version: %s"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "New version: v%s"
|
||||
msgid "New version: %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Yes"
|
||||
@@ -827,12 +845,12 @@ msgstr ""
|
||||
msgid "Notes and settings are stored in: %s"
|
||||
msgstr "Notities en instellingen worden opgeslagen in: %s"
|
||||
|
||||
msgid "Browse..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Check synchronisation configuration"
|
||||
msgstr "Synchronisatieconfiguratie controleren"
|
||||
|
||||
msgid "Browse..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Apply"
|
||||
msgstr "Toepassen"
|
||||
|
||||
@@ -953,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:"
|
||||
|
||||
@@ -977,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"
|
||||
@@ -1000,9 +1016,33 @@ msgstr ""
|
||||
msgid "URL"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Note History"
|
||||
msgstr "Notitieboeken"
|
||||
|
||||
msgid "Previous versions of this note"
|
||||
msgstr ""
|
||||
|
||||
msgid "Note properties"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "The note \"%s\" has been successfully restored to the notebook \"%s\"."
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "This note has no history"
|
||||
msgstr "Deze notitie is bewerkt:"
|
||||
|
||||
msgid "Restore"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid ""
|
||||
"Click \"%s\" to restore the note. It will be copied in the notebook named "
|
||||
"\"%s\". The current version of the note will not be replaced or modified."
|
||||
msgstr ""
|
||||
|
||||
msgid "Open..."
|
||||
msgstr "Openen..."
|
||||
|
||||
@@ -1123,7 +1163,17 @@ msgstr "Versleutelopties"
|
||||
msgid "Clipper Options"
|
||||
msgstr "Webclipperopties"
|
||||
|
||||
msgid "Remove this tag from all the notes?"
|
||||
#, fuzzy, javascript-format
|
||||
msgid ""
|
||||
"Delete notebook \"%s\"?\n"
|
||||
"\n"
|
||||
"All notes and sub-notebooks within this notebook will also be deleted."
|
||||
msgstr ""
|
||||
"Notitieboek verwijderen? Alle notities en sub-notitieboeken worden eveneens "
|
||||
"verwijderd."
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Remove tag \"%s\" from all notes?"
|
||||
msgstr "Wil je dit label verwijderen van alle notities?"
|
||||
|
||||
msgid "Remove this search from the sidebar?"
|
||||
@@ -1135,9 +1185,6 @@ msgstr "Verwijderen"
|
||||
msgid "Rename"
|
||||
msgstr "Naam wijzigen"
|
||||
|
||||
msgid "Synchronise"
|
||||
msgstr "Synchroniseren"
|
||||
|
||||
msgid "Notebooks"
|
||||
msgstr "Notitieboeken"
|
||||
|
||||
@@ -1146,12 +1193,55 @@ 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"
|
||||
|
||||
msgid "Duplicate"
|
||||
msgstr "Dupliceren"
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s - Copy"
|
||||
msgstr "%s - kopiëren"
|
||||
|
||||
msgid "Switch between note and to-do type"
|
||||
msgstr "Schakelen tussen notitie en taak"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Switch to note type"
|
||||
msgstr "Schakelen tussen notitie en taak"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Switch to to-do type"
|
||||
msgstr "Schakelen tussen notitie en taak"
|
||||
|
||||
msgid "Copy Markdown link"
|
||||
msgstr "Markdownlink kopiëren"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Delete note \"%s\"?"
|
||||
msgstr "Notities verwijderen?"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Delete these %d notes?"
|
||||
msgstr "Deze notities verwijderen?"
|
||||
|
||||
msgid ""
|
||||
"Type a note title to jump to it. Or type # followed by a tag name, or @ "
|
||||
"followed by a notebook name."
|
||||
msgstr ""
|
||||
|
||||
msgid "Goto Anything..."
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Usage: %s"
|
||||
msgstr "Gebruik: %s"
|
||||
@@ -1264,12 +1354,22 @@ msgstr "Bezig"
|
||||
msgid "Synchronisation is already in progress. State: %s"
|
||||
msgstr "De synchronisatie loopt al. Status: %s"
|
||||
|
||||
msgid ""
|
||||
"Unknown item type downloaded - please upgrade Joplin to the latest version"
|
||||
msgstr ""
|
||||
|
||||
msgid "Encrypted"
|
||||
msgstr "Versleuteld"
|
||||
|
||||
msgid "Encrypted items cannot be modified"
|
||||
msgstr "Versleutelde items kunnen niet worden bewerkt"
|
||||
|
||||
msgid "title"
|
||||
msgstr "titel"
|
||||
|
||||
msgid "updated date"
|
||||
msgstr "bijgewerkt op"
|
||||
|
||||
msgid "Conflicts"
|
||||
msgstr "Conflicten"
|
||||
|
||||
@@ -1280,12 +1380,6 @@ msgstr "Kan notitieboek niet verplaatsen naar deze locatie"
|
||||
msgid "Notebooks cannot be named \"%s\", which is a reserved title."
|
||||
msgstr "Notitieboeken mogen niet \"%s\" heten; dit is een gereserveerde titel."
|
||||
|
||||
msgid "title"
|
||||
msgstr "titel"
|
||||
|
||||
msgid "updated date"
|
||||
msgstr "bijgewerkt op"
|
||||
|
||||
msgid "created date"
|
||||
msgstr "gecreëerd op"
|
||||
|
||||
@@ -1300,6 +1394,66 @@ msgstr "Kan notitie niet kopiëren naar notitieboek \"%s\""
|
||||
msgid "Cannot move note to \"%s\" notebook"
|
||||
msgstr "Kan notitie niet verplaatsen naar notitieboek \"%s\""
|
||||
|
||||
#, javascript-format
|
||||
msgid ""
|
||||
"Attention: If you change this location, make sure you copy all your content "
|
||||
"to it before syncing, otherwise all files will be removed! See the FAQ for "
|
||||
"more details: %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Synchronisation target"
|
||||
msgstr "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"
|
||||
|
||||
@@ -1330,6 +1484,10 @@ msgstr "Notities sorteren op"
|
||||
msgid "Reverse sort order"
|
||||
msgstr "Sorteervolgorde omdraaien"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Sort notebooks by"
|
||||
msgstr "Notities sorteren op"
|
||||
|
||||
msgid "Save geo-location with notes"
|
||||
msgstr "Locatie opslaan in notities"
|
||||
|
||||
@@ -1345,6 +1503,43 @@ msgstr "Inhoud focussen"
|
||||
msgid "When creating a new note:"
|
||||
msgstr "Bij het creëren van een nieuwe notitie:"
|
||||
|
||||
msgid "Enable soft breaks"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Enable math expressions"
|
||||
msgstr "Versleuteling inschakelen"
|
||||
|
||||
msgid "Enable ==mark== syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable footnotes"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable table of contents extension"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable ~sub~ syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable ^sup^ syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable deflist syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable abbreviation syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable markdown emoji"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable ++insert++ syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable multimarkdown table extension"
|
||||
msgstr ""
|
||||
|
||||
msgid "Show tray icon"
|
||||
msgstr "Systeemvakpictogram tonen"
|
||||
|
||||
@@ -1417,52 +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 ""
|
||||
"The path to synchronise with when file system synchronisation is enabled. "
|
||||
"See `sync.target`."
|
||||
msgstr ""
|
||||
"Het pad waarnaar gesynchroniseerd moet worden als bestandssysteem-"
|
||||
"synchronisatie is ingeschakeld. Zie `sync.target`."
|
||||
|
||||
msgid "Nextcloud WebDAV URL"
|
||||
msgstr "Nextcloud WebDAV-URL"
|
||||
|
||||
#, javascript-format
|
||||
msgid ""
|
||||
"Attention: If you change this location, make sure you copy all your content "
|
||||
"to it before syncing, otherwise all files will be removed! See the FAQ for "
|
||||
"more details: %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Nextcloud username"
|
||||
msgstr "Nextcloud-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"
|
||||
|
||||
@@ -1481,6 +1630,20 @@ msgstr ""
|
||||
msgid "Ignore TLS certificate errors"
|
||||
msgstr "TLS-certificaatfouten negeren"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Enable note history"
|
||||
msgstr "Versleuteling inschakelen"
|
||||
|
||||
msgid "days"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "%d days"
|
||||
msgstr ""
|
||||
|
||||
msgid "Keep note history for"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Invalid option value: \"%s\". Possible values are: %s."
|
||||
msgstr "Ongeldige optie: \"%s\". Geldige waarden zijn: %s."
|
||||
@@ -1500,6 +1663,9 @@ msgstr ""
|
||||
msgid "Note"
|
||||
msgstr "Notitieboeken"
|
||||
|
||||
msgid "Plugins"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Application"
|
||||
msgstr "Sluit de applicatie af."
|
||||
@@ -1524,6 +1690,9 @@ msgstr "Evernote-exportbestand"
|
||||
msgid "Json Export Directory"
|
||||
msgstr "Joplin-exportmap"
|
||||
|
||||
msgid "File"
|
||||
msgstr "Bestand"
|
||||
|
||||
msgid "Directory"
|
||||
msgstr "Map"
|
||||
|
||||
@@ -1550,13 +1719,12 @@ msgid "Please specify the notebook where the notes should be imported to."
|
||||
msgstr ""
|
||||
"Geef het notitieboek op waar de notities naar moeten worden geïmporteerd."
|
||||
|
||||
msgid "Restored Notes"
|
||||
msgstr ""
|
||||
|
||||
msgid "Items that cannot be synchronised"
|
||||
msgstr "Items die niet kunnen worden gesynchroniseerd"
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s (%s): %s"
|
||||
msgstr "%s (%s): %s"
|
||||
|
||||
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 "
|
||||
@@ -1566,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)"
|
||||
@@ -1688,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"
|
||||
@@ -1712,10 +1902,6 @@ msgstr "- Locatie: zodat je locatie-informatie kunt toevoegen aan een notitie."
|
||||
msgid "Joplin website"
|
||||
msgstr "Joplin-website"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Joplin v%s"
|
||||
msgstr "Joplin-website"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Database v%s"
|
||||
msgstr ""
|
||||
@@ -1800,9 +1986,6 @@ msgstr "Omzetten naar notitie"
|
||||
msgid "Convert to todo"
|
||||
msgstr "Omzetten naar taak"
|
||||
|
||||
msgid "Copy Markdown link"
|
||||
msgstr "Markdownlink kopiëren"
|
||||
|
||||
msgid "Hide metadata"
|
||||
msgstr "Metagegevens verbergen"
|
||||
|
||||
@@ -1815,6 +1998,9 @@ msgstr "Tonen op kaart"
|
||||
msgid "Go to source URL"
|
||||
msgstr ""
|
||||
|
||||
msgid "Edit"
|
||||
msgstr "Bewerken"
|
||||
|
||||
msgid "Delete notebook"
|
||||
msgstr "Notitieboek verwijderen"
|
||||
|
||||
@@ -1839,28 +2025,25 @@ msgstr ""
|
||||
msgid "Welcome"
|
||||
msgstr "Welkom"
|
||||
|
||||
#~ 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 "Duplicate"
|
||||
#~ msgstr "Dupliceren"
|
||||
#~ msgid "Some items cannot be decrypted."
|
||||
#~ msgstr "Sommige items kunnen niet worden ontsleuteled."
|
||||
|
||||
#~ msgid "%s - Copy"
|
||||
#~ msgstr "%s - kopiëren"
|
||||
#~ msgid "%s (%s): %s"
|
||||
#~ msgstr "%s (%s): %s"
|
||||
|
||||
#~ msgid "Switch between note and to-do type"
|
||||
#~ msgstr "Schakelen tussen notitie en taak"
|
||||
#~ msgid ""
|
||||
#~ "The path to synchronise with when file system synchronisation is enabled. "
|
||||
#~ "See `sync.target`."
|
||||
#~ msgstr ""
|
||||
#~ "Het pad waarnaar gesynchroniseerd moet worden als bestandssysteem-"
|
||||
#~ "synchronisatie is ingeschakeld. Zie `sync.target`."
|
||||
|
||||
#, fuzzy
|
||||
#~ msgid "Switch to note type"
|
||||
#~ msgstr "Schakelen tussen notitie en taak"
|
||||
|
||||
#, fuzzy
|
||||
#~ msgid "Switch to to-do type"
|
||||
#~ msgstr "Schakelen tussen notitie en taak"
|
||||
|
||||
#~ msgid "Delete notes?"
|
||||
#~ msgstr "Notities verwijderen?"
|
||||
#~ msgid "Joplin v%s"
|
||||
#~ msgstr "Joplin-website"
|
||||
|
||||
#~ msgid "State: %s."
|
||||
#~ msgstr "Status: %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
@@ -126,10 +126,10 @@ msgstr "Nota não é uma tarefa: \"%s\""
|
||||
|
||||
msgid ""
|
||||
"Manages E2EE configuration. Commands are `enable`, `disable`, `decrypt`, "
|
||||
"`status` and `target-status`."
|
||||
"`status`, `decrypt-file` and `target-status`."
|
||||
msgstr ""
|
||||
"Gerencia a configuração E2EE. Os comandos são `enable`, `disable`, "
|
||||
"`decrypt`, `status` e `target-status`."
|
||||
"`decrypt`, `status`, `decrypt-file` e `target-status`."
|
||||
|
||||
msgid "Enter master password:"
|
||||
msgstr "Entre a senha master:"
|
||||
@@ -163,8 +163,8 @@ msgstr "Editar nota."
|
||||
msgid ""
|
||||
"No text editor is defined. Please set it using `config editor <editor-path>`"
|
||||
msgstr ""
|
||||
"Nenhum editor de texto está definido. Defina-o usando o comando `config edit "
|
||||
"<caminho-do-editor>`"
|
||||
"Nenhum editor de texto está definido. Defina-o usando o comando `config "
|
||||
"editor <caminho-do-editor>`"
|
||||
|
||||
msgid "No active notebook."
|
||||
msgstr "Nenhum caderno ativo."
|
||||
@@ -583,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..."
|
||||
@@ -603,8 +601,8 @@ msgstr "Importando de \"%s\" com o formato \"%s\". Por favor, aguarde..."
|
||||
msgid "PDF File"
|
||||
msgstr "Arquivo PDF"
|
||||
|
||||
msgid "File"
|
||||
msgstr "Arquivo"
|
||||
msgid "Synchronisation status"
|
||||
msgstr "Status de sincronização"
|
||||
|
||||
msgid "New note"
|
||||
msgstr "Nova nota"
|
||||
@@ -615,14 +613,42 @@ msgstr "Nova tarefa"
|
||||
msgid "New notebook"
|
||||
msgstr "Novo caderno"
|
||||
|
||||
msgid "Print"
|
||||
msgstr "Imprimir"
|
||||
|
||||
msgid "General Options"
|
||||
msgstr "Opções Gerais"
|
||||
|
||||
msgid "Encryption options"
|
||||
msgstr "Opções de Encriptação"
|
||||
|
||||
msgid "Web clipper options"
|
||||
msgstr "Opções do Web clipper"
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s %s (%s, %s)"
|
||||
msgstr "%s %s (%s, %s)"
|
||||
|
||||
msgid "&File"
|
||||
msgstr "&Arquivo"
|
||||
|
||||
msgid "About Joplin"
|
||||
msgstr "Sobre o Joplin"
|
||||
|
||||
msgid "Preferences..."
|
||||
msgstr "Preferências..."
|
||||
|
||||
msgid "Check for updates..."
|
||||
msgstr "Verificar atualizações..."
|
||||
|
||||
msgid "Import"
|
||||
msgstr "Importar"
|
||||
|
||||
msgid "Export"
|
||||
msgstr "Exportar"
|
||||
|
||||
msgid "Print"
|
||||
msgstr "Imprimir"
|
||||
msgid "Synchronise"
|
||||
msgstr "Sincronizar"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Hide %s"
|
||||
@@ -631,8 +657,11 @@ msgstr "Ocultar %s"
|
||||
msgid "Quit"
|
||||
msgstr "Sair"
|
||||
|
||||
msgid "Edit"
|
||||
msgstr "Editar"
|
||||
msgid "Close Window"
|
||||
msgstr "Fechar Janela"
|
||||
|
||||
msgid "&Edit"
|
||||
msgstr "&Editar"
|
||||
|
||||
msgid "Copy"
|
||||
msgstr "Copiar"
|
||||
@@ -653,7 +682,7 @@ msgid "Italic"
|
||||
msgstr "Itálico"
|
||||
|
||||
msgid "Link"
|
||||
msgstr ""
|
||||
msgstr "Link"
|
||||
|
||||
msgid "Insert Date Time"
|
||||
msgstr "Inserir Data e Hora"
|
||||
@@ -667,8 +696,8 @@ msgstr "Pesquisar em todas as notas"
|
||||
msgid "Search in current note"
|
||||
msgstr "Pesquisar na nota atual"
|
||||
|
||||
msgid "View"
|
||||
msgstr "Visualizar"
|
||||
msgid "&View"
|
||||
msgstr "&Visualizar"
|
||||
|
||||
msgid "Toggle sidebar"
|
||||
msgstr "Alternar barra lateral"
|
||||
@@ -676,27 +705,14 @@ msgstr "Alternar barra lateral"
|
||||
msgid "Toggle editor layout"
|
||||
msgstr "Alternar layout do editor"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Focus"
|
||||
msgstr "Focar no corpo"
|
||||
msgstr "Focar"
|
||||
|
||||
msgid "Tools"
|
||||
msgstr "Ferramentas"
|
||||
msgid "&Tools"
|
||||
msgstr "&Ferramentas"
|
||||
|
||||
msgid "Synchronisation status"
|
||||
msgstr "Status de sincronização"
|
||||
|
||||
msgid "Web clipper options"
|
||||
msgstr "Opções do Web clipper"
|
||||
|
||||
msgid "Encryption options"
|
||||
msgstr "Opções de Encriptação"
|
||||
|
||||
msgid "General Options"
|
||||
msgstr "Opções Gerais"
|
||||
|
||||
msgid "Help"
|
||||
msgstr "Ajuda"
|
||||
msgid "&Help"
|
||||
msgstr "&Ajuda"
|
||||
|
||||
msgid "Website and documentation"
|
||||
msgstr "Website e documentação"
|
||||
@@ -704,15 +720,8 @@ msgstr "Website e documentação"
|
||||
msgid "Make a donation"
|
||||
msgstr "Fazer uma doação"
|
||||
|
||||
msgid "Check for updates..."
|
||||
msgstr "Verificar atualizações..."
|
||||
|
||||
msgid "About Joplin"
|
||||
msgstr "Sobre o Joplin"
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s %s (%s, %s)"
|
||||
msgstr "%s %s (%s, %s)"
|
||||
msgid "Toggle development tools"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Open %s"
|
||||
@@ -732,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: v%s"
|
||||
msgstr ""
|
||||
msgid "Your version: %s"
|
||||
msgstr "Sua versão: %s"
|
||||
|
||||
#, javascript-format
|
||||
msgid "New version: v%s"
|
||||
msgstr ""
|
||||
msgid "New version: %s"
|
||||
msgstr "Nova versão: %s"
|
||||
|
||||
msgid "Yes"
|
||||
msgstr "Sim"
|
||||
@@ -752,7 +761,7 @@ msgid "No"
|
||||
msgstr "Não"
|
||||
|
||||
msgid "Token has been copied to the clipboard!"
|
||||
msgstr "Token foi copiado para a \\u00e1rea de transfer\\u00eancia!"
|
||||
msgstr "Token foi copiado para a área de transferência!"
|
||||
|
||||
msgid "The web clipper service is enabled and set to auto-start."
|
||||
msgstr ""
|
||||
@@ -807,28 +816,28 @@ msgid "Advanced options"
|
||||
msgstr "Mostrar opções avançadas"
|
||||
|
||||
msgid "Authorisation token:"
|
||||
msgstr "Token de autoriza\\u00e7\\u00e3o:"
|
||||
msgstr "Token de autorização:"
|
||||
|
||||
msgid "Copy token"
|
||||
msgstr "Copira token"
|
||||
msgstr "Copiar token"
|
||||
|
||||
msgid ""
|
||||
"This authorisation token is only needed to allow third-party applications to "
|
||||
"access Joplin."
|
||||
msgstr ""
|
||||
"Esse token de autoriza\\u00e7\\u00e3o só é necess\\u00e1rio para permitir "
|
||||
"que aplicativos de terceiros acessem o Joplin."
|
||||
"Esse token de autorização só é necessário para permitir que aplicativos de "
|
||||
"terceiros acessem o Joplin."
|
||||
|
||||
#, javascript-format
|
||||
msgid "Notes and settings are stored in: %s"
|
||||
msgstr "Notas e configurações estão armazenadas em: %s"
|
||||
|
||||
msgid "Browse..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Check synchronisation configuration"
|
||||
msgstr "Verificar a configuração da sincronização"
|
||||
|
||||
msgid "Browse..."
|
||||
msgstr "Navegar..."
|
||||
|
||||
msgid "Apply"
|
||||
msgstr "Aplicar"
|
||||
|
||||
@@ -922,9 +931,8 @@ msgstr "Status"
|
||||
msgid "Encryption is:"
|
||||
msgstr "Encriptação está:"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Usage"
|
||||
msgstr "Uso: %s"
|
||||
msgstr "Uso"
|
||||
|
||||
msgid "Back"
|
||||
msgstr "Voltar"
|
||||
@@ -947,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:"
|
||||
|
||||
@@ -971,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"
|
||||
@@ -990,9 +996,33 @@ msgstr "Localização"
|
||||
msgid "URL"
|
||||
msgstr "URL"
|
||||
|
||||
msgid "Note History"
|
||||
msgstr "Histórico da Nota"
|
||||
|
||||
msgid "Previous versions of this note"
|
||||
msgstr "Versões anteriores desta nota"
|
||||
|
||||
msgid "Note properties"
|
||||
msgstr "Propriedades da nota"
|
||||
|
||||
#, javascript-format
|
||||
msgid "The note \"%s\" has been successfully restored to the notebook \"%s\"."
|
||||
msgstr "A nota \"%s\" foi restaurada com sucesso no caderno \"%s\"."
|
||||
|
||||
msgid "This note has no history"
|
||||
msgstr "Esta nota não tem histórico"
|
||||
|
||||
msgid "Restore"
|
||||
msgstr "Restaurar"
|
||||
|
||||
#, javascript-format
|
||||
msgid ""
|
||||
"Click \"%s\" to restore the note. It will be copied in the notebook named "
|
||||
"\"%s\". The current version of the note will not be replaced or modified."
|
||||
msgstr ""
|
||||
"Clique \"%s\" para restaurar a nota. Ela será copiada no caderno com nomes "
|
||||
"\"%s\". A versão atual da nota não será substituída ou modificada."
|
||||
|
||||
msgid "Open..."
|
||||
msgstr "Abrir..."
|
||||
|
||||
@@ -1025,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"
|
||||
@@ -1113,8 +1143,19 @@ msgstr "Opções de Encriptação"
|
||||
msgid "Clipper Options"
|
||||
msgstr "Opções do clipper"
|
||||
|
||||
msgid "Remove this tag from all the notes?"
|
||||
msgstr "Remover esta tag de todas as notas?"
|
||||
#, javascript-format
|
||||
msgid ""
|
||||
"Delete notebook \"%s\"?\n"
|
||||
"\n"
|
||||
"All notes and sub-notebooks within this notebook will also be deleted."
|
||||
msgstr ""
|
||||
"Excluir o caderno\"%s\"?\n"
|
||||
"\n"
|
||||
"Todas as notas e sub-cadernos dentro deste também serão excluídos."
|
||||
|
||||
#, javascript-format
|
||||
msgid "Remove tag \"%s\" from all notes?"
|
||||
msgstr "Remover a tag \"%s\" de todas as notas?"
|
||||
|
||||
msgid "Remove this search from the sidebar?"
|
||||
msgstr "Remover essa pesquisa da barra lateral?"
|
||||
@@ -1125,9 +1166,6 @@ msgstr "Excluir"
|
||||
msgid "Rename"
|
||||
msgstr "Renomear"
|
||||
|
||||
msgid "Synchronise"
|
||||
msgstr "Sincronizar"
|
||||
|
||||
msgid "Notebooks"
|
||||
msgstr "Cadernos"
|
||||
|
||||
@@ -1135,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"
|
||||
@@ -1144,6 +1182,49 @@ 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"
|
||||
|
||||
msgid "Duplicate"
|
||||
msgstr "Duplicar"
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s - Copy"
|
||||
msgstr "%s - Copiar"
|
||||
|
||||
msgid "Switch between note and to-do type"
|
||||
msgstr "Alternar entre os tipos Nota e Tarefa"
|
||||
|
||||
msgid "Switch to note type"
|
||||
msgstr "Alternar para o tipo Nota"
|
||||
|
||||
msgid "Switch to to-do type"
|
||||
msgstr "Alternar para o tipo Tarefa"
|
||||
|
||||
msgid "Copy Markdown link"
|
||||
msgstr "Copiar link de Markdown"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Delete note \"%s\"?"
|
||||
msgstr "Apagar a nota \"%s\"?"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Delete these %d notes?"
|
||||
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 "Ir para qualquer coisa..."
|
||||
|
||||
#, javascript-format
|
||||
msgid "Usage: %s"
|
||||
msgstr "Uso: %s"
|
||||
@@ -1256,12 +1337,24 @@ msgstr "Em andamento"
|
||||
msgid "Synchronisation is already in progress. State: %s"
|
||||
msgstr "Sincronização já em andamento. Estado: %s"
|
||||
|
||||
msgid ""
|
||||
"Unknown item type downloaded - please upgrade Joplin to the latest version"
|
||||
msgstr ""
|
||||
"Tipo de item desconhecido baixado - por favor, atualize o Joplin para a "
|
||||
"última versão"
|
||||
|
||||
msgid "Encrypted"
|
||||
msgstr "Encriptado"
|
||||
|
||||
msgid "Encrypted items cannot be modified"
|
||||
msgstr "Itens encriptados não podem ser modificados"
|
||||
|
||||
msgid "title"
|
||||
msgstr "título"
|
||||
|
||||
msgid "updated date"
|
||||
msgstr "data de atualização"
|
||||
|
||||
msgid "Conflicts"
|
||||
msgstr "Conflitos"
|
||||
|
||||
@@ -1273,12 +1366,6 @@ msgid "Notebooks cannot be named \"%s\", which is a reserved title."
|
||||
msgstr ""
|
||||
"Os cadernos não podem ser nomeados como\"%s\", que é um título reservado."
|
||||
|
||||
msgid "title"
|
||||
msgstr "título"
|
||||
|
||||
msgid "updated date"
|
||||
msgstr "data de atualização"
|
||||
|
||||
msgid "created date"
|
||||
msgstr "data de criação"
|
||||
|
||||
@@ -1293,6 +1380,68 @@ msgstr "Não é possível copiar a nota para o caderno \"%s\""
|
||||
msgid "Cannot move note to \"%s\" notebook"
|
||||
msgstr "Não é possível mover a nota para o caderno \"%s\""
|
||||
|
||||
#, javascript-format
|
||||
msgid ""
|
||||
"Attention: If you change this location, make sure you copy all your content "
|
||||
"to it before syncing, otherwise all files will be removed! See the FAQ for "
|
||||
"more details: %s"
|
||||
msgstr ""
|
||||
"Atenção: Se você modificar esse local, tenha certeza de copiar todo o seu "
|
||||
"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"
|
||||
|
||||
@@ -1323,6 +1472,9 @@ msgstr "Ordenar notas por"
|
||||
msgid "Reverse sort order"
|
||||
msgstr "Inverter ordem de classificação"
|
||||
|
||||
msgid "Sort notebooks by"
|
||||
msgstr "Ordenar notas por"
|
||||
|
||||
msgid "Save geo-location with notes"
|
||||
msgstr "Salvar geolocalização com notas"
|
||||
|
||||
@@ -1338,6 +1490,42 @@ msgstr "Focar no corpo"
|
||||
msgid "When creating a new note:"
|
||||
msgstr "Quando criar uma nota nova:"
|
||||
|
||||
msgid "Enable soft breaks"
|
||||
msgstr "Habilitar soft breaks"
|
||||
|
||||
msgid "Enable math expressions"
|
||||
msgstr "Habilitar expressões matemáticas"
|
||||
|
||||
msgid "Enable ==mark== syntax"
|
||||
msgstr "Habilitar sintaxe ==marcador== "
|
||||
|
||||
msgid "Enable footnotes"
|
||||
msgstr "Habilitar notas de rodapé"
|
||||
|
||||
msgid "Enable table of contents extension"
|
||||
msgstr "Habilitar extensão de tabela de conteúdo"
|
||||
|
||||
msgid "Enable ~sub~ syntax"
|
||||
msgstr "Habilitar sintaxe ~sub~"
|
||||
|
||||
msgid "Enable ^sup^ syntax"
|
||||
msgstr "Habilitar sintaxe ^sup^ "
|
||||
|
||||
msgid "Enable deflist syntax"
|
||||
msgstr "Habilitar sintaxe de deflist "
|
||||
|
||||
msgid "Enable abbreviation syntax"
|
||||
msgstr "Habilitar sintaxe de abreviações"
|
||||
|
||||
msgid "Enable markdown emoji"
|
||||
msgstr "Habilitar emojis em markdown "
|
||||
|
||||
msgid "Enable ++insert++ syntax"
|
||||
msgstr "Habilitar sintaxe ++inserir++ "
|
||||
|
||||
msgid "Enable multimarkdown table extension"
|
||||
msgstr "Habilitar extensão de tabela de multimarkdown "
|
||||
|
||||
msgid "Show tray icon"
|
||||
msgstr "Exibir tray icon"
|
||||
|
||||
@@ -1376,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"
|
||||
@@ -1411,54 +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 ""
|
||||
"The path to synchronise with when file system synchronisation is enabled. "
|
||||
"See `sync.target`."
|
||||
msgstr ""
|
||||
"O caminho para sincronizar, quando a sincronização do sistema de arquivos "
|
||||
"está habilitada. Veja `sync.target`."
|
||||
|
||||
msgid "Nextcloud WebDAV URL"
|
||||
msgstr "Nextcloud WebDAV URL"
|
||||
|
||||
#, javascript-format
|
||||
msgid ""
|
||||
"Attention: If you change this location, make sure you copy all your content "
|
||||
"to it before syncing, otherwise all files will be removed! See the FAQ for "
|
||||
"more details: %s"
|
||||
msgstr ""
|
||||
"Atenção: Se você modificar esse local, tenha certeza de copiar todo o seu "
|
||||
"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 "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"
|
||||
|
||||
@@ -1477,28 +1617,40 @@ msgstr ""
|
||||
msgid "Ignore TLS certificate errors"
|
||||
msgstr "Ignorar erros de certificados TLS"
|
||||
|
||||
msgid "Enable note history"
|
||||
msgstr "Habilitar histórico de notas"
|
||||
|
||||
msgid "days"
|
||||
msgstr "dias"
|
||||
|
||||
#, javascript-format
|
||||
msgid "%d days"
|
||||
msgstr "%d dias"
|
||||
|
||||
msgid "Keep note history for"
|
||||
msgstr "Manter histórico de nota por"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Invalid option value: \"%s\". Possible values are: %s."
|
||||
msgstr "Valor da opção inválida: \"%s\". Os valores possíveis são: %s."
|
||||
|
||||
#, fuzzy
|
||||
msgid "General"
|
||||
msgstr "Opções Gerais"
|
||||
msgstr "Geral"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Synchronisation"
|
||||
msgstr "Status de sincronização"
|
||||
msgstr "Sincronização"
|
||||
|
||||
msgid "Appearance"
|
||||
msgstr ""
|
||||
msgstr "Aparência"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Note"
|
||||
msgstr "Cadernos"
|
||||
msgstr "Nota"
|
||||
|
||||
msgid "Plugins"
|
||||
msgstr "Plugins"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Application"
|
||||
msgstr "Localização"
|
||||
msgstr "Aplicação"
|
||||
|
||||
#, javascript-format
|
||||
msgid "The tag \"%s\" already exists. Please choose a different name."
|
||||
@@ -1519,6 +1671,9 @@ msgstr "Arquivo de Exportação do Evernote"
|
||||
msgid "Json Export Directory"
|
||||
msgstr "Diretório de Exportação JSON"
|
||||
|
||||
msgid "File"
|
||||
msgstr "Arquivo"
|
||||
|
||||
msgid "Directory"
|
||||
msgstr "Diretório"
|
||||
|
||||
@@ -1545,13 +1700,12 @@ msgid "Please specify the notebook where the notes should be imported to."
|
||||
msgstr ""
|
||||
"Por favor, especifique o caderno para onde as notas deveriam ser importadas."
|
||||
|
||||
msgid "Restored Notes"
|
||||
msgstr "Notas restauradas"
|
||||
|
||||
msgid "Items that cannot be synchronised"
|
||||
msgstr "Os itens não podem ser sincronizados"
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s (%s): %s"
|
||||
msgstr "%s (%s): %s"
|
||||
|
||||
msgid ""
|
||||
"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 "
|
||||
@@ -1561,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)"
|
||||
|
||||
@@ -1595,10 +1767,10 @@ msgid "On %s: %s"
|
||||
msgstr "Em %s: %s"
|
||||
|
||||
msgid "Permission to use camera"
|
||||
msgstr "Permissão para utilizar sua c\\u00e2mera"
|
||||
msgstr "Permissão para utilizar sua câmera"
|
||||
|
||||
msgid "Your permission to use your camera is required."
|
||||
msgstr "É necessária a sua permissão para utilizar sua c\\u00e2mera."
|
||||
msgstr "É necessária a sua permissão para utilizar sua câmera."
|
||||
|
||||
msgid "There are currently no notes. Create one by clicking on the (+) button."
|
||||
msgstr "Atualmente, não há notas. Crie uma, clicando no botão (+)."
|
||||
@@ -1684,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"
|
||||
@@ -1710,24 +1886,19 @@ msgstr ""
|
||||
msgid "Joplin website"
|
||||
msgstr "Site do Joplin"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Joplin v%s"
|
||||
msgstr "Site do Joplin"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Database v%s"
|
||||
msgstr ""
|
||||
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"
|
||||
@@ -1798,9 +1969,6 @@ msgstr "Converter para nota"
|
||||
msgid "Convert to todo"
|
||||
msgstr "Converter para tarefa"
|
||||
|
||||
msgid "Copy Markdown link"
|
||||
msgstr "Copiar link de Markdown"
|
||||
|
||||
msgid "Hide metadata"
|
||||
msgstr "Ocultar metadados"
|
||||
|
||||
@@ -1813,6 +1981,9 @@ msgstr "Ver no mapa"
|
||||
msgid "Go to source URL"
|
||||
msgstr "Ir para a URL de origem"
|
||||
|
||||
msgid "Edit"
|
||||
msgstr "Editar"
|
||||
|
||||
msgid "Delete notebook"
|
||||
msgstr "Excluir caderno"
|
||||
|
||||
@@ -1835,23 +2006,25 @@ msgstr "Você não possui cadernos. Crie um clicando no botão (+)."
|
||||
msgid "Welcome"
|
||||
msgstr "Bem-vindo"
|
||||
|
||||
#~ 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 "Duplicate"
|
||||
#~ msgstr "Duplicar"
|
||||
#~ msgid "Some items cannot be decrypted."
|
||||
#~ msgstr "Alguns itens não podem ser decriptados."
|
||||
|
||||
#~ msgid "%s - Copy"
|
||||
#~ msgstr "%s - Copiar"
|
||||
#~ msgid "%s (%s): %s"
|
||||
#~ msgstr "%s (%s): %s"
|
||||
|
||||
#~ msgid "Switch between note and to-do type"
|
||||
#~ msgstr "Alternar entre os tipos Nota e Tarefa"
|
||||
#~ msgid ""
|
||||
#~ "The path to synchronise with when file system synchronisation is enabled. "
|
||||
#~ "See `sync.target`."
|
||||
#~ msgstr ""
|
||||
#~ "O caminho para sincronizar, quando a sincronização do sistema de arquivos "
|
||||
#~ "está habilitada. Veja `sync.target`."
|
||||
|
||||
#~ msgid "Switch to note type"
|
||||
#~ msgstr "Alternar para o tipo Nota"
|
||||
|
||||
#~ msgid "Switch to to-do type"
|
||||
#~ msgstr "Alternar para o tipo Tarefa"
|
||||
#, fuzzy
|
||||
#~ msgid "Joplin v%s"
|
||||
#~ msgstr "Site do Joplin"
|
||||
|
||||
#~ msgid "Delete notes?"
|
||||
#~ msgstr "Excluir notas?"
|
||||
@@ -1952,8 +2125,5 @@ msgstr "Bem-vindo"
|
||||
#~ msgid "Delete notebook?"
|
||||
#~ msgstr "Excluir caderno?"
|
||||
|
||||
#~ msgid "Delete notebook \"%s\"?"
|
||||
#~ msgstr "Apagar o caderno \"%s\"?"
|
||||
|
||||
#~ msgid "File system synchronisation target directory"
|
||||
#~ msgstr "Diretório de destino de sincronização do sistema de arquivos"
|
||||
|
||||
@@ -123,7 +123,7 @@ msgstr "Notița nu este o sarcină: \"%s\""
|
||||
|
||||
msgid ""
|
||||
"Manages E2EE configuration. Commands are `enable`, `disable`, `decrypt`, "
|
||||
"`status` and `target-status`."
|
||||
"`status`, `decrypt-file` and `target-status`."
|
||||
msgstr ""
|
||||
|
||||
msgid "Enter master password:"
|
||||
@@ -542,8 +542,8 @@ msgstr ""
|
||||
msgid "PDF File"
|
||||
msgstr "Fișier PDF"
|
||||
|
||||
msgid "File"
|
||||
msgstr "Fișier"
|
||||
msgid "Synchronisation status"
|
||||
msgstr "Statusul sincronizării"
|
||||
|
||||
msgid "New note"
|
||||
msgstr "Adăugați o nouă notiță"
|
||||
@@ -554,14 +554,43 @@ msgstr "Adăugați o nouă sarcină"
|
||||
msgid "New notebook"
|
||||
msgstr "Adăugați un nou caiet de notițe"
|
||||
|
||||
msgid "Print"
|
||||
msgstr "Printați"
|
||||
|
||||
msgid "General Options"
|
||||
msgstr "Opțiuni Generale"
|
||||
|
||||
msgid "Encryption options"
|
||||
msgstr "Opțiuni de criptare"
|
||||
|
||||
msgid "Web clipper options"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s %s (%s, %s)"
|
||||
msgstr "%s %s (%s, %s)"
|
||||
|
||||
#, fuzzy
|
||||
msgid "&File"
|
||||
msgstr "Fișier"
|
||||
|
||||
msgid "About Joplin"
|
||||
msgstr "Despre Joplin"
|
||||
|
||||
msgid "Preferences..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Check for updates..."
|
||||
msgstr "Verificați actualizările..."
|
||||
|
||||
msgid "Import"
|
||||
msgstr "Importați"
|
||||
|
||||
msgid "Export"
|
||||
msgstr "Exportați"
|
||||
|
||||
msgid "Print"
|
||||
msgstr "Printați"
|
||||
msgid "Synchronise"
|
||||
msgstr "Sincronizați"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Hide %s"
|
||||
@@ -570,7 +599,11 @@ msgstr "Ascundeți %s"
|
||||
msgid "Quit"
|
||||
msgstr "Ieșiți"
|
||||
|
||||
msgid "Edit"
|
||||
msgid "Close Window"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "&Edit"
|
||||
msgstr "Editați"
|
||||
|
||||
msgid "Copy"
|
||||
@@ -608,7 +641,8 @@ msgstr "Căutați în toate notițele"
|
||||
msgid "Search in current note"
|
||||
msgstr "Căutați în toate notițele"
|
||||
|
||||
msgid "View"
|
||||
#, fuzzy
|
||||
msgid "&View"
|
||||
msgstr "Vizualizați"
|
||||
|
||||
msgid "Toggle sidebar"
|
||||
@@ -620,22 +654,12 @@ msgstr ""
|
||||
msgid "Focus"
|
||||
msgstr ""
|
||||
|
||||
msgid "Tools"
|
||||
#, fuzzy
|
||||
msgid "&Tools"
|
||||
msgstr "Unelte"
|
||||
|
||||
msgid "Synchronisation status"
|
||||
msgstr "Statusul sincronizării"
|
||||
|
||||
msgid "Web clipper options"
|
||||
msgstr ""
|
||||
|
||||
msgid "Encryption options"
|
||||
msgstr "Opțiuni de criptare"
|
||||
|
||||
msgid "General Options"
|
||||
msgstr "Opțiuni Generale"
|
||||
|
||||
msgid "Help"
|
||||
#, fuzzy
|
||||
msgid "&Help"
|
||||
msgstr "Ajutor"
|
||||
|
||||
msgid "Website and documentation"
|
||||
@@ -644,15 +668,8 @@ msgstr "Website și documentație"
|
||||
msgid "Make a donation"
|
||||
msgstr "Faceți o donație"
|
||||
|
||||
msgid "Check for updates..."
|
||||
msgstr "Verificați actualizările..."
|
||||
|
||||
msgid "About Joplin"
|
||||
msgstr "Despre Joplin"
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s %s (%s, %s)"
|
||||
msgstr "%s %s (%s, %s)"
|
||||
msgid "Toggle development tools"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Open %s"
|
||||
@@ -678,11 +695,11 @@ msgid "An update is available, do you want to download it now?"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Your version: v%s"
|
||||
msgid "Your version: %s"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "New version: v%s"
|
||||
msgid "New version: %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Yes"
|
||||
@@ -756,10 +773,10 @@ msgstr ""
|
||||
msgid "Notes and settings are stored in: %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Browse..."
|
||||
msgid "Check synchronisation configuration"
|
||||
msgstr ""
|
||||
|
||||
msgid "Check synchronisation configuration"
|
||||
msgid "Browse..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Apply"
|
||||
@@ -864,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:"
|
||||
|
||||
@@ -888,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"
|
||||
@@ -907,9 +921,33 @@ msgstr ""
|
||||
msgid "URL"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Note History"
|
||||
msgstr "Caiete de notițe"
|
||||
|
||||
msgid "Previous versions of this note"
|
||||
msgstr ""
|
||||
|
||||
msgid "Note properties"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "The note \"%s\" has been successfully restored to the notebook \"%s\"."
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "This note has no history"
|
||||
msgstr "Această notiță a fost modificată:"
|
||||
|
||||
msgid "Restore"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid ""
|
||||
"Click \"%s\" to restore the note. It will be copied in the notebook named "
|
||||
"\"%s\". The current version of the note will not be replaced or modified."
|
||||
msgstr ""
|
||||
|
||||
msgid "Open..."
|
||||
msgstr "Deschideți..."
|
||||
|
||||
@@ -1028,7 +1066,15 @@ msgstr "Opțiuni de criptare"
|
||||
msgid "Clipper Options"
|
||||
msgstr "Opțiuni Clipper"
|
||||
|
||||
msgid "Remove this tag from all the notes?"
|
||||
#, javascript-format
|
||||
msgid ""
|
||||
"Delete notebook \"%s\"?\n"
|
||||
"\n"
|
||||
"All notes and sub-notebooks within this notebook will also be deleted."
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Remove tag \"%s\" from all notes?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Remove this search from the sidebar?"
|
||||
@@ -1040,9 +1086,6 @@ msgstr "Ștergeți"
|
||||
msgid "Rename"
|
||||
msgstr "Redenumiți"
|
||||
|
||||
msgid "Synchronise"
|
||||
msgstr "Sincronizați"
|
||||
|
||||
msgid "Notebooks"
|
||||
msgstr "Caiete de notițe"
|
||||
|
||||
@@ -1051,12 +1094,56 @@ 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"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Duplicate"
|
||||
msgstr "Duplicați"
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s - Copy"
|
||||
msgstr "%s - Copiați"
|
||||
|
||||
msgid "Switch between note and to-do type"
|
||||
msgstr "Schimbați între notiță și sarcină"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Switch to note type"
|
||||
msgstr "Schimbați între notiță și sarcină"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Switch to to-do type"
|
||||
msgstr "Schimbați între notiță și sarcină"
|
||||
|
||||
msgid "Copy Markdown link"
|
||||
msgstr "Copiați link-ul Markdown"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Delete note \"%s\"?"
|
||||
msgstr "Ștergeți notițele?"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Delete these %d notes?"
|
||||
msgstr "Ștergeți aceste notițe?"
|
||||
|
||||
msgid ""
|
||||
"Type a note title to jump to it. Or type # followed by a tag name, or @ "
|
||||
"followed by a notebook name."
|
||||
msgstr ""
|
||||
|
||||
msgid "Goto Anything..."
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Usage: %s"
|
||||
msgstr "Utilizare: %s"
|
||||
@@ -1161,12 +1248,22 @@ msgstr "În progres"
|
||||
msgid "Synchronisation is already in progress. State: %s"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"Unknown item type downloaded - please upgrade Joplin to the latest version"
|
||||
msgstr ""
|
||||
|
||||
msgid "Encrypted"
|
||||
msgstr "Criptat"
|
||||
|
||||
msgid "Encrypted items cannot be modified"
|
||||
msgstr "Itemii criptați nu pot fi editați"
|
||||
|
||||
msgid "title"
|
||||
msgstr "titlu"
|
||||
|
||||
msgid "updated date"
|
||||
msgstr "data actualizării"
|
||||
|
||||
msgid "Conflicts"
|
||||
msgstr "Conflicte"
|
||||
|
||||
@@ -1177,12 +1274,6 @@ msgstr "Nu se poate muta caietul de notițe în această locație"
|
||||
msgid "Notebooks cannot be named \"%s\", which is a reserved title."
|
||||
msgstr ""
|
||||
|
||||
msgid "title"
|
||||
msgstr "titlu"
|
||||
|
||||
msgid "updated date"
|
||||
msgstr "data actualizării"
|
||||
|
||||
msgid "created date"
|
||||
msgstr "data creării"
|
||||
|
||||
@@ -1197,6 +1288,63 @@ msgstr "Nu se poate copia notița în caietul de notițe \"%s\""
|
||||
msgid "Cannot move note to \"%s\" notebook"
|
||||
msgstr "Nu se poate muta notița în caietul de notițe \"%s\""
|
||||
|
||||
#, javascript-format
|
||||
msgid ""
|
||||
"Attention: If you change this location, make sure you copy all your content "
|
||||
"to it before syncing, otherwise all files will be removed! See the FAQ for "
|
||||
"more details: %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Synchronisation target"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"The target to synchonise to. Each sync target may have additional parameters "
|
||||
"which are named as `sync.NUM.NAME` (all documented below)."
|
||||
msgstr ""
|
||||
|
||||
msgid "Directory to synchronise with (absolute path)"
|
||||
msgstr ""
|
||||
|
||||
msgid "Nextcloud WebDAV URL"
|
||||
msgstr "URL NextCloud WebDAV"
|
||||
|
||||
msgid "Nextcloud username"
|
||||
msgstr "Nume utilizator Nextcloud"
|
||||
|
||||
msgid "Nextcloud password"
|
||||
msgstr "Parolă Nextcloud"
|
||||
|
||||
msgid "WebDAV URL"
|
||||
msgstr "URL-ul WebDAV"
|
||||
|
||||
msgid "WebDAV username"
|
||||
msgstr "Nume utilizator WebDAV"
|
||||
|
||||
msgid "WebDAV password"
|
||||
msgstr "Parolă WebDAV"
|
||||
|
||||
msgid "Attachment download behaviour"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"In \"Manual\" mode, attachments are downloaded only when you click on them. "
|
||||
"In \"Auto\", they are downloaded when you open the note. In \"Always\", all "
|
||||
"the attachments are downloaded whether you open the note or not."
|
||||
msgstr ""
|
||||
|
||||
msgid "Always"
|
||||
msgstr ""
|
||||
|
||||
msgid "Manual"
|
||||
msgstr ""
|
||||
|
||||
msgid "Auto"
|
||||
msgstr ""
|
||||
|
||||
msgid "Max concurrent connections"
|
||||
msgstr ""
|
||||
|
||||
msgid "Language"
|
||||
msgstr "Limbă"
|
||||
|
||||
@@ -1227,6 +1375,10 @@ msgstr "Sortați notițele după"
|
||||
msgid "Reverse sort order"
|
||||
msgstr "Inversați ordinea sortării"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Sort notebooks by"
|
||||
msgstr "Sortați notițele după"
|
||||
|
||||
msgid "Save geo-location with notes"
|
||||
msgstr "Salvați geo-locația în notițe"
|
||||
|
||||
@@ -1242,6 +1394,43 @@ msgstr ""
|
||||
msgid "When creating a new note:"
|
||||
msgstr "Când este creată o nouă notiță:"
|
||||
|
||||
msgid "Enable soft breaks"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Enable math expressions"
|
||||
msgstr "Activați criptarea"
|
||||
|
||||
msgid "Enable ==mark== syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable footnotes"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable table of contents extension"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable ~sub~ syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable ^sup^ syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable deflist syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable abbreviation syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable markdown emoji"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable ++insert++ syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable multimarkdown table extension"
|
||||
msgstr ""
|
||||
|
||||
msgid "Show tray icon"
|
||||
msgstr "Afișați iconița coșul de gunoi"
|
||||
|
||||
@@ -1308,47 +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 ""
|
||||
"The path to synchronise with when file system synchronisation is enabled. "
|
||||
"See `sync.target`."
|
||||
msgstr ""
|
||||
|
||||
msgid "Nextcloud WebDAV URL"
|
||||
msgstr "URL NextCloud WebDAV"
|
||||
|
||||
#, javascript-format
|
||||
msgid ""
|
||||
"Attention: If you change this location, make sure you copy all your content "
|
||||
"to it before syncing, otherwise all files will be removed! See the FAQ for "
|
||||
"more details: %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Nextcloud username"
|
||||
msgstr "Nume utilizator Nextcloud"
|
||||
|
||||
msgid "Nextcloud password"
|
||||
msgstr "Parolă Nextcloud"
|
||||
|
||||
msgid "WebDAV URL"
|
||||
msgstr "URL-ul WebDAV"
|
||||
|
||||
msgid "WebDAV username"
|
||||
msgstr "Nume utilizator WebDAV"
|
||||
|
||||
msgid "WebDAV password"
|
||||
msgstr "Parolă WebDAV"
|
||||
|
||||
msgid "Custom TLS certificates"
|
||||
msgstr "Certificate TLS cusomizate"
|
||||
|
||||
@@ -1362,6 +1510,20 @@ msgstr ""
|
||||
msgid "Ignore TLS certificate errors"
|
||||
msgstr "Ignoră erorile de certificat TLS"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Enable note history"
|
||||
msgstr "Activați criptarea"
|
||||
|
||||
msgid "days"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "%d days"
|
||||
msgstr ""
|
||||
|
||||
msgid "Keep note history for"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Invalid option value: \"%s\". Possible values are: %s."
|
||||
msgstr ""
|
||||
@@ -1381,6 +1543,9 @@ msgstr ""
|
||||
msgid "Note"
|
||||
msgstr "Caiete de notițe"
|
||||
|
||||
msgid "Plugins"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Application"
|
||||
msgstr "Duplicați"
|
||||
@@ -1404,6 +1569,9 @@ msgstr ""
|
||||
msgid "Json Export Directory"
|
||||
msgstr ""
|
||||
|
||||
msgid "File"
|
||||
msgstr "Fișier"
|
||||
|
||||
msgid "Directory"
|
||||
msgstr ""
|
||||
|
||||
@@ -1427,19 +1595,36 @@ msgstr "Nu există date de exportat."
|
||||
msgid "Please specify the notebook where the notes should be imported to."
|
||||
msgstr ""
|
||||
|
||||
msgid "Restored Notes"
|
||||
msgstr ""
|
||||
|
||||
msgid "Items that cannot be synchronised"
|
||||
msgstr "Itemii nu pot fi sincronizați"
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s (%s): %s"
|
||||
msgstr "%s (%s): %s"
|
||||
|
||||
msgid ""
|
||||
"These items will remain on the device but will not be uploaded to the sync "
|
||||
"target. In order to find these items, either search for the title or the ID "
|
||||
"(which is displayed in brackets above)."
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "%s (%s) could not be uploaded: %s"
|
||||
msgstr "Acest fișier nu a putut fi deschis: %s"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Item \"%s\" could not be downloaded: %s"
|
||||
msgstr "Acest fișier nu a putut fi deschis: %s"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Items that cannot be decrypted"
|
||||
msgstr "Itemii nu pot fi sincronizați"
|
||||
|
||||
msgid ""
|
||||
"Joplin failed to decrypt these items multiple times, possibly because they "
|
||||
"are corrupted or too large. These items will remain on the device but Joplin "
|
||||
"will no longer attempt to decrypt them."
|
||||
msgstr ""
|
||||
|
||||
msgid "Sync status (synced items / total items)"
|
||||
msgstr ""
|
||||
|
||||
@@ -1557,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"
|
||||
@@ -1576,10 +1765,6 @@ msgstr ""
|
||||
msgid "Joplin website"
|
||||
msgstr "Website Joplin"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Joplin v%s"
|
||||
msgstr "Website Joplin"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Database v%s"
|
||||
msgstr ""
|
||||
@@ -1664,9 +1849,6 @@ msgstr ""
|
||||
msgid "Convert to todo"
|
||||
msgstr ""
|
||||
|
||||
msgid "Copy Markdown link"
|
||||
msgstr "Copiați link-ul Markdown"
|
||||
|
||||
msgid "Hide metadata"
|
||||
msgstr "Ascundeți metadatele"
|
||||
|
||||
@@ -1679,6 +1861,9 @@ msgstr "Vizualizați pe hartă"
|
||||
msgid "Go to source URL"
|
||||
msgstr ""
|
||||
|
||||
msgid "Edit"
|
||||
msgstr "Editați"
|
||||
|
||||
msgid "Delete notebook"
|
||||
msgstr "Ștergeți caiet de notițe"
|
||||
|
||||
@@ -1702,25 +1887,18 @@ msgstr ""
|
||||
msgid "Welcome"
|
||||
msgstr "Bine ați venit"
|
||||
|
||||
#~ 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 "%s - Copy"
|
||||
#~ msgstr "%s - Copiați"
|
||||
#~ msgid "Some items cannot be decrypted."
|
||||
#~ msgstr "Câțiva itemi nu pot fi descriptați."
|
||||
|
||||
#~ msgid "Switch between note and to-do type"
|
||||
#~ msgstr "Schimbați între notiță și sarcină"
|
||||
#~ msgid "%s (%s): %s"
|
||||
#~ msgstr "%s (%s): %s"
|
||||
|
||||
#, fuzzy
|
||||
#~ msgid "Switch to note type"
|
||||
#~ msgstr "Schimbați între notiță și sarcină"
|
||||
|
||||
#, fuzzy
|
||||
#~ msgid "Switch to to-do type"
|
||||
#~ msgstr "Schimbați între notiță și sarcină"
|
||||
|
||||
#~ msgid "Delete notes?"
|
||||
#~ msgstr "Ștergeți notițele?"
|
||||
#~ msgid "Joplin v%s"
|
||||
#~ msgstr "Website Joplin"
|
||||
|
||||
#~ msgid "State: %s."
|
||||
#~ msgstr "Statut: %s."
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -123,9 +123,10 @@ msgstr "Označi seznam opravil kot končan."
|
||||
msgid "Note is not a to-do: \"%s\""
|
||||
msgstr "Zabeležka ni formata seznam opravil: \"%s\""
|
||||
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
"Manages E2EE configuration. Commands are `enable`, `disable`, `decrypt`, "
|
||||
"`status` and `target-status`."
|
||||
"`status`, `decrypt-file` and `target-status`."
|
||||
msgstr ""
|
||||
"Upravlja z E2EE nastavitvami. Ukazi so `enable`, `disable`, `decrypt`, "
|
||||
"`status` in `target-status`."
|
||||
@@ -603,8 +604,8 @@ msgstr "Uvažam v \"%s\" kot \"%s\" format. Prosim počakajte..."
|
||||
msgid "PDF File"
|
||||
msgstr "PDF datoteka"
|
||||
|
||||
msgid "File"
|
||||
msgstr "Datoteka"
|
||||
msgid "Synchronisation status"
|
||||
msgstr "Status sinhronizacije"
|
||||
|
||||
msgid "New note"
|
||||
msgstr "Nova zabeležka"
|
||||
@@ -615,14 +616,43 @@ msgstr "Novi seznam opravil"
|
||||
msgid "New notebook"
|
||||
msgstr "Nova beležnica"
|
||||
|
||||
msgid "Print"
|
||||
msgstr "Natisni"
|
||||
|
||||
msgid "General Options"
|
||||
msgstr "Splošne možnosti"
|
||||
|
||||
msgid "Encryption options"
|
||||
msgstr "Možnosti enkripcije"
|
||||
|
||||
msgid "Web clipper options"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s %s (%s, %s)"
|
||||
msgstr "%s %s (%s, %s)"
|
||||
|
||||
#, fuzzy
|
||||
msgid "&File"
|
||||
msgstr "Datoteka"
|
||||
|
||||
msgid "About Joplin"
|
||||
msgstr "O Joplinu"
|
||||
|
||||
msgid "Preferences..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Check for updates..."
|
||||
msgstr "Preverjanje za posodobitvami..."
|
||||
|
||||
msgid "Import"
|
||||
msgstr "Uvozi"
|
||||
|
||||
msgid "Export"
|
||||
msgstr "Izvozi"
|
||||
|
||||
msgid "Print"
|
||||
msgstr "Natisni"
|
||||
msgid "Synchronise"
|
||||
msgstr "Sinhroniziraj"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Hide %s"
|
||||
@@ -631,7 +661,11 @@ msgstr "Skrij %s"
|
||||
msgid "Quit"
|
||||
msgstr "Izhod"
|
||||
|
||||
msgid "Edit"
|
||||
msgid "Close Window"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "&Edit"
|
||||
msgstr "Uredi"
|
||||
|
||||
msgid "Copy"
|
||||
@@ -669,7 +703,8 @@ msgstr "Išči znotraj vseh zabeležk"
|
||||
msgid "Search in current note"
|
||||
msgstr "Išči znotraj vseh zabeležk"
|
||||
|
||||
msgid "View"
|
||||
#, fuzzy
|
||||
msgid "&View"
|
||||
msgstr "Pogled"
|
||||
|
||||
msgid "Toggle sidebar"
|
||||
@@ -682,22 +717,12 @@ msgstr "Spremeni izgled urejevalnika"
|
||||
msgid "Focus"
|
||||
msgstr "Fokusiraj vsebino"
|
||||
|
||||
msgid "Tools"
|
||||
#, fuzzy
|
||||
msgid "&Tools"
|
||||
msgstr "Orodja"
|
||||
|
||||
msgid "Synchronisation status"
|
||||
msgstr "Status sinhronizacije"
|
||||
|
||||
msgid "Web clipper options"
|
||||
msgstr ""
|
||||
|
||||
msgid "Encryption options"
|
||||
msgstr "Možnosti enkripcije"
|
||||
|
||||
msgid "General Options"
|
||||
msgstr "Splošne možnosti"
|
||||
|
||||
msgid "Help"
|
||||
#, fuzzy
|
||||
msgid "&Help"
|
||||
msgstr "Pomoč"
|
||||
|
||||
msgid "Website and documentation"
|
||||
@@ -706,15 +731,8 @@ msgstr "Spletna stran in dokumentacija"
|
||||
msgid "Make a donation"
|
||||
msgstr "Doniraj"
|
||||
|
||||
msgid "Check for updates..."
|
||||
msgstr "Preverjanje za posodobitvami..."
|
||||
|
||||
msgid "About Joplin"
|
||||
msgstr "O Joplinu"
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s %s (%s, %s)"
|
||||
msgstr "%s %s (%s, %s)"
|
||||
msgid "Toggle development tools"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Open %s"
|
||||
@@ -740,11 +758,11 @@ msgid "An update is available, do you want to download it now?"
|
||||
msgstr "Posodobitev je na voljo, jo želite prenesti sedaj?"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Your version: v%s"
|
||||
msgid "Your version: %s"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "New version: v%s"
|
||||
msgid "New version: %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Yes"
|
||||
@@ -818,12 +836,12 @@ msgstr ""
|
||||
msgid "Notes and settings are stored in: %s"
|
||||
msgstr "Zabeležke in nastavitve so shranjene v: %s"
|
||||
|
||||
msgid "Browse..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Check synchronisation configuration"
|
||||
msgstr "Preveri nastavitve sinhronizacije"
|
||||
|
||||
msgid "Browse..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Apply"
|
||||
msgstr ""
|
||||
|
||||
@@ -942,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:"
|
||||
|
||||
@@ -968,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"
|
||||
@@ -991,9 +1007,33 @@ msgstr ""
|
||||
msgid "URL"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Note History"
|
||||
msgstr "Beležnice"
|
||||
|
||||
msgid "Previous versions of this note"
|
||||
msgstr ""
|
||||
|
||||
msgid "Note properties"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "The note \"%s\" has been successfully restored to the notebook \"%s\"."
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "This note has no history"
|
||||
msgstr "Ta zabeležka je bila spremenjena:"
|
||||
|
||||
msgid "Restore"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid ""
|
||||
"Click \"%s\" to restore the note. It will be copied in the notebook named "
|
||||
"\"%s\". The current version of the note will not be replaced or modified."
|
||||
msgstr ""
|
||||
|
||||
msgid "Open..."
|
||||
msgstr "Odpri..."
|
||||
|
||||
@@ -1116,7 +1156,17 @@ msgstr "Možnosti enkripcije"
|
||||
msgid "Clipper Options"
|
||||
msgstr "Splošne možnosti"
|
||||
|
||||
msgid "Remove this tag from all the notes?"
|
||||
#, fuzzy, javascript-format
|
||||
msgid ""
|
||||
"Delete notebook \"%s\"?\n"
|
||||
"\n"
|
||||
"All notes and sub-notebooks within this notebook will also be deleted."
|
||||
msgstr ""
|
||||
"Želite izbrisati beležnico? Vse zabeležke znotraj beležke bodo hkrati "
|
||||
"izbrisane."
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Remove tag \"%s\" from all notes?"
|
||||
msgstr "Odstranite to oznako iz vseh zabeležk?"
|
||||
|
||||
msgid "Remove this search from the sidebar?"
|
||||
@@ -1128,23 +1178,65 @@ msgstr "Izbriši"
|
||||
msgid "Rename"
|
||||
msgstr "Preimenuj"
|
||||
|
||||
msgid "Synchronise"
|
||||
msgstr "Sinhroniziraj"
|
||||
|
||||
msgid "Notebooks"
|
||||
msgstr "Beležnice"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Decrypting items: %d/%d"
|
||||
msgstr "Preneseni predmeti: %d/%d."
|
||||
msgstr "Preneseni predmeti: %d/%d"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Fetching resources: %d"
|
||||
msgstr "Viri: %d."
|
||||
msgid "Fetching resources: %d/%d"
|
||||
msgstr "Viri: %d/%d"
|
||||
|
||||
msgid "Please select where the sync status should be exported to"
|
||||
msgstr "Prosim izberite, kam želite izvoziti sinhronizacijski status"
|
||||
|
||||
msgid "Retry"
|
||||
msgstr ""
|
||||
|
||||
msgid "Add or remove tags"
|
||||
msgstr "Dodaj ali odstrani oznake"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Duplicate"
|
||||
msgstr "Izhod iz aplikacije."
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "%s - Copy"
|
||||
msgstr "Kopiraj"
|
||||
|
||||
msgid "Switch between note and to-do type"
|
||||
msgstr "Menjaj med zabeležko in seznamom opravil"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Switch to note type"
|
||||
msgstr "Menjaj med zabeležko in seznamom opravil"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Switch to to-do type"
|
||||
msgstr "Menjaj med zabeležko in seznamom opravil"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Copy Markdown link"
|
||||
msgstr "Sistem označevanja"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Delete note \"%s\"?"
|
||||
msgstr "Izbriši zabeležke?"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Delete these %d notes?"
|
||||
msgstr "Izbriši te zabeležke?"
|
||||
|
||||
msgid ""
|
||||
"Type a note title to jump to it. Or type # followed by a tag name, or @ "
|
||||
"followed by a notebook name."
|
||||
msgstr ""
|
||||
|
||||
msgid "Goto Anything..."
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Usage: %s"
|
||||
msgstr "Uporaba: %s"
|
||||
@@ -1257,12 +1349,24 @@ msgstr "V postopku"
|
||||
msgid "Synchronisation is already in progress. State: %s"
|
||||
msgstr "Sinhronizacija je že v postopku. Stanje: %s"
|
||||
|
||||
msgid ""
|
||||
"Unknown item type downloaded - please upgrade Joplin to the latest version"
|
||||
msgstr ""
|
||||
|
||||
msgid "Encrypted"
|
||||
msgstr "Enkriptirano"
|
||||
|
||||
msgid "Encrypted items cannot be modified"
|
||||
msgstr "Enkriptirani predmeti ne morejo biti spremenjeni"
|
||||
|
||||
#, fuzzy
|
||||
msgid "title"
|
||||
msgstr "Neimenovano"
|
||||
|
||||
#, fuzzy
|
||||
msgid "updated date"
|
||||
msgstr "Posodobljeno: %d."
|
||||
|
||||
msgid "Conflicts"
|
||||
msgstr "Konfikti"
|
||||
|
||||
@@ -1274,14 +1378,6 @@ msgstr "Ni moč premakniti zabeležke v \"%s\" beležnico"
|
||||
msgid "Notebooks cannot be named \"%s\", which is a reserved title."
|
||||
msgstr "Beležnica ne more biti imenovana \"%s\", ker je to rezerviran naslov."
|
||||
|
||||
#, fuzzy
|
||||
msgid "title"
|
||||
msgstr "Neimenovano"
|
||||
|
||||
#, fuzzy
|
||||
msgid "updated date"
|
||||
msgstr "Posodobljeno: %d."
|
||||
|
||||
#, fuzzy
|
||||
msgid "created date"
|
||||
msgstr "Ustvarjeno: %d."
|
||||
@@ -1297,6 +1393,65 @@ msgstr "Ni moč kopirati zabeležke v \"%s\" beležnico"
|
||||
msgid "Cannot move note to \"%s\" notebook"
|
||||
msgstr "Ni moč premakniti zabeležke v \"%s\" beležnico"
|
||||
|
||||
#, javascript-format
|
||||
msgid ""
|
||||
"Attention: If you change this location, make sure you copy all your content "
|
||||
"to it before syncing, otherwise all files will be removed! See the FAQ for "
|
||||
"more details: %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Synchronisation target"
|
||||
msgstr "Sinhronizacijski cilj"
|
||||
|
||||
msgid ""
|
||||
"The target to synchonise to. Each sync target may have additional parameters "
|
||||
"which are named as `sync.NUM.NAME` (all documented below)."
|
||||
msgstr ""
|
||||
"Ciljno sinhronizacijsko mesto. Vsak sinhronizacijski cilj ima lahko dodatne "
|
||||
"parametre imenovano kot `sync.NUM.NAME` (vse je dokumentirano spodaj)."
|
||||
|
||||
msgid "Directory to synchronise with (absolute path)"
|
||||
msgstr "Mesto ciljne sinhronizacije (absolutna pot)"
|
||||
|
||||
msgid "Nextcloud WebDAV URL"
|
||||
msgstr "Nextcloud WebDAV URL"
|
||||
|
||||
msgid "Nextcloud username"
|
||||
msgstr "Nextcloud uporabniško ime"
|
||||
|
||||
msgid "Nextcloud password"
|
||||
msgstr "Nextcloud geslo"
|
||||
|
||||
msgid "WebDAV URL"
|
||||
msgstr "WebDAV URL"
|
||||
|
||||
msgid "WebDAV username"
|
||||
msgstr "WebDAV uporabniško ime"
|
||||
|
||||
msgid "WebDAV password"
|
||||
msgstr "WebDAV geslo"
|
||||
|
||||
msgid "Attachment download behaviour"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"In \"Manual\" mode, attachments are downloaded only when you click on them. "
|
||||
"In \"Auto\", they are downloaded when you open the note. In \"Always\", all "
|
||||
"the attachments are downloaded whether you open the note or not."
|
||||
msgstr ""
|
||||
|
||||
msgid "Always"
|
||||
msgstr ""
|
||||
|
||||
msgid "Manual"
|
||||
msgstr ""
|
||||
|
||||
msgid "Auto"
|
||||
msgstr ""
|
||||
|
||||
msgid "Max concurrent connections"
|
||||
msgstr ""
|
||||
|
||||
msgid "Language"
|
||||
msgstr "Jezik"
|
||||
|
||||
@@ -1328,6 +1483,10 @@ msgstr "Razporedi zabeležko po"
|
||||
msgid "Reverse sort order"
|
||||
msgstr "Obrni vrstni red"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Sort notebooks by"
|
||||
msgstr "Razporedi zabeležko po"
|
||||
|
||||
msgid "Save geo-location with notes"
|
||||
msgstr "Shrani geo-lokacijo z zabeležkami"
|
||||
|
||||
@@ -1343,6 +1502,43 @@ msgstr "Fokusiraj vsebino"
|
||||
msgid "When creating a new note:"
|
||||
msgstr "Ob ustvarjanju nove zabeležke:"
|
||||
|
||||
msgid "Enable soft breaks"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Enable math expressions"
|
||||
msgstr "Omogoči enkripcijo"
|
||||
|
||||
msgid "Enable ==mark== syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable footnotes"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable table of contents extension"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable ~sub~ syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable ^sup^ syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable deflist syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable abbreviation syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable markdown emoji"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable ++insert++ syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable multimarkdown table extension"
|
||||
msgstr ""
|
||||
|
||||
msgid "Show tray icon"
|
||||
msgstr "Pokaži ikono v območju za obvestila(opravilna vrstica)"
|
||||
|
||||
@@ -1416,51 +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 ""
|
||||
"The path to synchronise with when file system synchronisation is enabled. "
|
||||
"See `sync.target`."
|
||||
msgstr ""
|
||||
"Pot za sinhronizacijo, ki bo uporabljena ob omogočeni sinhronizaciji. Poglej "
|
||||
"`sync.target`."
|
||||
|
||||
msgid "Nextcloud WebDAV URL"
|
||||
msgstr "Nextcloud WebDAV URL"
|
||||
|
||||
#, javascript-format
|
||||
msgid ""
|
||||
"Attention: If you change this location, make sure you copy all your content "
|
||||
"to it before syncing, otherwise all files will be removed! See the FAQ for "
|
||||
"more details: %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Nextcloud username"
|
||||
msgstr "Nextcloud uporabniško ime"
|
||||
|
||||
msgid "Nextcloud password"
|
||||
msgstr "Nextcloud geslo"
|
||||
|
||||
msgid "WebDAV URL"
|
||||
msgstr "WebDAV URL"
|
||||
|
||||
msgid "WebDAV username"
|
||||
msgstr "WebDAV uporabniško ime"
|
||||
|
||||
msgid "WebDAV password"
|
||||
msgstr "WebDAV geslo"
|
||||
|
||||
msgid "Custom TLS certificates"
|
||||
msgstr ""
|
||||
|
||||
@@ -1474,6 +1625,20 @@ msgstr ""
|
||||
msgid "Ignore TLS certificate errors"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Enable note history"
|
||||
msgstr "Omogoči enkripcijo"
|
||||
|
||||
msgid "days"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "%d days"
|
||||
msgstr ""
|
||||
|
||||
msgid "Keep note history for"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Invalid option value: \"%s\". Possible values are: %s."
|
||||
msgstr "Neveljavna vrednost: \"%s\". Možne vrednosti so : %s."
|
||||
@@ -1493,6 +1658,9 @@ msgstr ""
|
||||
msgid "Note"
|
||||
msgstr "Beležnice"
|
||||
|
||||
msgid "Plugins"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Application"
|
||||
msgstr "Izhod iz aplikacije."
|
||||
@@ -1517,6 +1685,9 @@ msgstr "Evernote izvozna datoteka"
|
||||
msgid "Json Export Directory"
|
||||
msgstr "Joplin izvozno mesto"
|
||||
|
||||
msgid "File"
|
||||
msgstr "Datoteka"
|
||||
|
||||
msgid "Directory"
|
||||
msgstr "Mesto datoteke"
|
||||
|
||||
@@ -1542,13 +1713,12 @@ msgstr "Ni datotek za izvoz."
|
||||
msgid "Please specify the notebook where the notes should be imported to."
|
||||
msgstr "Prosim navedite beležnico, kamor želite uvoziti zabeležke."
|
||||
|
||||
msgid "Restored Notes"
|
||||
msgstr ""
|
||||
|
||||
msgid "Items that cannot be synchronised"
|
||||
msgstr "Predmeti ne morejo biti sinhronizirani"
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s (%s): %s"
|
||||
msgstr "%s (%s): %s"
|
||||
|
||||
msgid ""
|
||||
"These items will remain on the device but will not be uploaded to the sync "
|
||||
"target. In order to find these items, either search for the title or the ID "
|
||||
@@ -1558,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)"
|
||||
|
||||
@@ -1678,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"
|
||||
@@ -1697,10 +1889,6 @@ msgstr ""
|
||||
msgid "Joplin website"
|
||||
msgstr "Joplin spletna stran"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Joplin v%s"
|
||||
msgstr "Joplin spletna stran"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Database v%s"
|
||||
msgstr ""
|
||||
@@ -1786,10 +1974,6 @@ msgstr "Pretvori v zabeležko"
|
||||
msgid "Convert to todo"
|
||||
msgstr "Pretvori v za narediti"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Copy Markdown link"
|
||||
msgstr "Sistem označevanja"
|
||||
|
||||
msgid "Hide metadata"
|
||||
msgstr "Skrij meta podatke"
|
||||
|
||||
@@ -1802,6 +1986,9 @@ msgstr "Prikaži na zemljevidu"
|
||||
msgid "Go to source URL"
|
||||
msgstr ""
|
||||
|
||||
msgid "Edit"
|
||||
msgstr "Uredi"
|
||||
|
||||
msgid "Delete notebook"
|
||||
msgstr "Izbriši beležnico"
|
||||
|
||||
@@ -1824,26 +2011,25 @@ msgstr "Trenutno nimate nobene beležnice. Ustvarite jo s klikom na (+) gumb."
|
||||
msgid "Welcome"
|
||||
msgstr "Dobrodošli"
|
||||
|
||||
#~ msgid "Add or remove tags"
|
||||
#~ msgstr "Dodaj ali odstrani oznake"
|
||||
#~ msgid "Separate each tag by a comma."
|
||||
#~ msgstr "Loči vsako oznako z vejico."
|
||||
|
||||
#~ msgid "Some items cannot be decrypted."
|
||||
#~ msgstr "Nekateri predmeti ne morejo biti dekriptirani."
|
||||
|
||||
#~ msgid "%s (%s): %s"
|
||||
#~ msgstr "%s (%s): %s"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "The path to synchronise with when file system synchronisation is enabled. "
|
||||
#~ "See `sync.target`."
|
||||
#~ msgstr ""
|
||||
#~ "Pot za sinhronizacijo, ki bo uporabljena ob omogočeni sinhronizaciji. "
|
||||
#~ "Poglej `sync.target`."
|
||||
|
||||
#, fuzzy
|
||||
#~ msgid "%s - Copy"
|
||||
#~ msgstr "Kopiraj"
|
||||
|
||||
#~ msgid "Switch between note and to-do type"
|
||||
#~ msgstr "Menjaj med zabeležko in seznamom opravil"
|
||||
|
||||
#, fuzzy
|
||||
#~ msgid "Switch to note type"
|
||||
#~ msgstr "Menjaj med zabeležko in seznamom opravil"
|
||||
|
||||
#, fuzzy
|
||||
#~ msgid "Switch to to-do type"
|
||||
#~ msgstr "Menjaj med zabeležko in seznamom opravil"
|
||||
|
||||
#~ msgid "Delete notes?"
|
||||
#~ msgstr "Izbriši zabeležke?"
|
||||
#~ msgid "Joplin v%s"
|
||||
#~ msgstr "Joplin spletna stran"
|
||||
|
||||
#~ msgid "State: %s."
|
||||
#~ msgstr "Stanje: %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.1.1\n"
|
||||
"X-Generator: Poedit 2.2.1\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
|
||||
msgid "To delete a tag, untag the associated notes."
|
||||
@@ -124,9 +124,10 @@ msgstr "Märker en att-göra som gjord."
|
||||
msgid "Note is not a to-do: \"%s\""
|
||||
msgstr "Anteckning är inte en att-göra: \"%s\""
|
||||
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
"Manages E2EE configuration. Commands are `enable`, `disable`, `decrypt`, "
|
||||
"`status` and `target-status`."
|
||||
"`status`, `decrypt-file` and `target-status`."
|
||||
msgstr ""
|
||||
"Hanterar E2EE-konfiguration. Kommandon är `enable`,` disable`, `decrypt`,` "
|
||||
"status` och `target-status`."
|
||||
@@ -462,21 +463,20 @@ msgid "Starting synchronisation..."
|
||||
msgstr "Startar synkronisering..."
|
||||
|
||||
msgid "Downloading resources..."
|
||||
msgstr ""
|
||||
msgstr "Laddar ned resurser..."
|
||||
|
||||
msgid "Cancelling... Please wait."
|
||||
msgstr "Avbryter... vänta."
|
||||
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
"<tag-command> can be \"add\", \"remove\" or \"list\" to assign or remove "
|
||||
"[tag] from [note], or to list the notes associated with [tag]. The command "
|
||||
"`tag list` can be used to list all the tags (use -l for long option)."
|
||||
msgstr ""
|
||||
"<tag-command> kan vara \"add\", \"remove\" eller \"list\" för att tilldela "
|
||||
"eller ta bort [tag] från [note], eller för att lista anteckningarna som är "
|
||||
"associerade med [tag]. Kommandot `tag list` kan användas för att lista alla "
|
||||
"taggar."
|
||||
"<tag-command> kan vara \"lägg till\", \"ta bort\" eller \"lisat\" för att "
|
||||
"tilldela eller ta bort [tag] från [note], eller för att lista anteckningarna "
|
||||
"som är associerade med [tag]. Kommandot `tag list` kan användas för att "
|
||||
"lista alla taggar."
|
||||
|
||||
#, javascript-format
|
||||
msgid "Invalid command: \"%s\""
|
||||
@@ -590,18 +590,16 @@ msgid "Exporting to \"%s\" as \"%s\" format. Please wait..."
|
||||
msgstr "Exportera till \"%s\" som \"%s\" format. Vänta..."
|
||||
|
||||
msgid "Sidebar"
|
||||
msgstr ""
|
||||
msgstr "Sidofältet"
|
||||
|
||||
msgid "Note list"
|
||||
msgstr ""
|
||||
msgstr "Anteckningsboken"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Note title"
|
||||
msgstr "Titel på anteckningsbok:"
|
||||
msgstr "Rubriken"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Note body"
|
||||
msgstr "Anteckningsböcker"
|
||||
msgstr "Texten"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Importing from \"%s\" as \"%s\" format. Please wait..."
|
||||
@@ -610,8 +608,8 @@ msgstr "Importerar från \"%s\" som \"%s\" format. Vänta..."
|
||||
msgid "PDF File"
|
||||
msgstr "PDF-fil"
|
||||
|
||||
msgid "File"
|
||||
msgstr "Fil"
|
||||
msgid "Synchronisation status"
|
||||
msgstr "Synkroniseringstillstånd"
|
||||
|
||||
msgid "New note"
|
||||
msgstr "Ny anteckning"
|
||||
@@ -622,14 +620,43 @@ msgstr "Ny att-göra"
|
||||
msgid "New notebook"
|
||||
msgstr "Ny anteckningsbok"
|
||||
|
||||
msgid "Print"
|
||||
msgstr "Skriv ut"
|
||||
|
||||
msgid "General Options"
|
||||
msgstr "Allmänna inställningar"
|
||||
|
||||
msgid "Encryption options"
|
||||
msgstr "Krypteringsinställningar"
|
||||
|
||||
msgid "Web clipper options"
|
||||
msgstr "Web clipper-inställningar"
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s %s (%s, %s)"
|
||||
msgstr "%s %s (%s, %s)"
|
||||
|
||||
#, fuzzy
|
||||
msgid "&File"
|
||||
msgstr "Fil"
|
||||
|
||||
msgid "About Joplin"
|
||||
msgstr "Om Joplin"
|
||||
|
||||
msgid "Preferences..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Check for updates..."
|
||||
msgstr "Sök efter uppdateringar..."
|
||||
|
||||
msgid "Import"
|
||||
msgstr "Importera"
|
||||
|
||||
msgid "Export"
|
||||
msgstr "Exportera"
|
||||
|
||||
msgid "Print"
|
||||
msgstr "Skriv ut"
|
||||
msgid "Synchronise"
|
||||
msgstr "Synkronisera"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Hide %s"
|
||||
@@ -638,7 +665,11 @@ msgstr "Dölj %s"
|
||||
msgid "Quit"
|
||||
msgstr "Avsluta"
|
||||
|
||||
msgid "Edit"
|
||||
msgid "Close Window"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "&Edit"
|
||||
msgstr "Redigera"
|
||||
|
||||
msgid "Copy"
|
||||
@@ -650,9 +681,8 @@ msgstr "Klipp ut"
|
||||
msgid "Paste"
|
||||
msgstr "Klistra in"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Select all"
|
||||
msgstr "Välj datum"
|
||||
msgstr "Välj alla"
|
||||
|
||||
msgid "Bold"
|
||||
msgstr "Fet"
|
||||
@@ -661,7 +691,7 @@ msgid "Italic"
|
||||
msgstr "Kursiv"
|
||||
|
||||
msgid "Link"
|
||||
msgstr ""
|
||||
msgstr "Länk"
|
||||
|
||||
msgid "Insert Date Time"
|
||||
msgstr "Infoga datumtid"
|
||||
@@ -672,11 +702,11 @@ msgstr "Redigera i extern redigerare"
|
||||
msgid "Search in all the notes"
|
||||
msgstr "Sök i alla anteckningarna"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Search in current note"
|
||||
msgstr "Sök i alla anteckningarna"
|
||||
msgstr "Sök i aktuell anteckning"
|
||||
|
||||
msgid "View"
|
||||
#, fuzzy
|
||||
msgid "&View"
|
||||
msgstr "Visa"
|
||||
|
||||
msgid "Toggle sidebar"
|
||||
@@ -685,26 +715,15 @@ msgstr "Växla sidofältet"
|
||||
msgid "Toggle editor layout"
|
||||
msgstr "Växla redigeringslayout"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Focus"
|
||||
msgstr "Fokus på huvuddel"
|
||||
msgstr "Fokus"
|
||||
|
||||
msgid "Tools"
|
||||
#, fuzzy
|
||||
msgid "&Tools"
|
||||
msgstr "Verktyg"
|
||||
|
||||
msgid "Synchronisation status"
|
||||
msgstr "Synkroniseringstillstånd"
|
||||
|
||||
msgid "Web clipper options"
|
||||
msgstr "Web clipper-inställningar"
|
||||
|
||||
msgid "Encryption options"
|
||||
msgstr "Krypteringsinställningar"
|
||||
|
||||
msgid "General Options"
|
||||
msgstr "Allmänna inställningar"
|
||||
|
||||
msgid "Help"
|
||||
#, fuzzy
|
||||
msgid "&Help"
|
||||
msgstr "Hjälp"
|
||||
|
||||
msgid "Website and documentation"
|
||||
@@ -713,15 +732,8 @@ msgstr "Webbplats och dokumentation"
|
||||
msgid "Make a donation"
|
||||
msgstr "Gör en donation"
|
||||
|
||||
msgid "Check for updates..."
|
||||
msgstr "Sök efter uppdateringar..."
|
||||
|
||||
msgid "About Joplin"
|
||||
msgstr "Om Joplin"
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s %s (%s, %s)"
|
||||
msgstr "%s %s (%s, %s)"
|
||||
msgid "Toggle development tools"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Open %s"
|
||||
@@ -741,18 +753,18 @@ msgstr "Nuvarande version är uppdaterad."
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s (pre-release)"
|
||||
msgstr ""
|
||||
msgstr "%s (förhandsversion)"
|
||||
|
||||
msgid "An update is available, do you want to download it now?"
|
||||
msgstr "En uppdatering är tillgänglig, vill du hämta den nu?"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Your version: v%s"
|
||||
msgstr ""
|
||||
msgid "Your version: %s"
|
||||
msgstr "Din version: %s"
|
||||
|
||||
#, javascript-format
|
||||
msgid "New version: v%s"
|
||||
msgstr ""
|
||||
msgid "New version: %s"
|
||||
msgstr "Ny version: %s"
|
||||
|
||||
msgid "Yes"
|
||||
msgstr "Ja"
|
||||
@@ -761,7 +773,7 @@ msgid "No"
|
||||
msgstr "Nej"
|
||||
|
||||
msgid "Token has been copied to the clipboard!"
|
||||
msgstr ""
|
||||
msgstr "Token har kopierats till urklipp!"
|
||||
|
||||
msgid "The web clipper service is enabled and set to auto-start."
|
||||
msgstr "Web clipper-tjänsten är aktiverad och inställd för automatisk start."
|
||||
@@ -811,31 +823,32 @@ msgstr "Steg 2: Installera tillägget"
|
||||
msgid "Download and install the relevant extension for your browser:"
|
||||
msgstr "Hämta och installera det relevanta tillägget för din webbläsare:"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Advanced options"
|
||||
msgstr "Visa avancerade inställningar"
|
||||
msgstr "Avancerade alternativ"
|
||||
|
||||
msgid "Authorisation token:"
|
||||
msgstr ""
|
||||
msgstr "Auktoriserings token:"
|
||||
|
||||
msgid "Copy token"
|
||||
msgstr ""
|
||||
msgstr "Kopiera token"
|
||||
|
||||
msgid ""
|
||||
"This authorisation token is only needed to allow third-party applications to "
|
||||
"access Joplin."
|
||||
msgstr ""
|
||||
"Denna auktorisering behövs endast för att tillåta tredjepartsprogram att "
|
||||
"integrera med Joplin."
|
||||
|
||||
#, javascript-format
|
||||
msgid "Notes and settings are stored in: %s"
|
||||
msgstr "Anteckningar och inställningar lagras i: %s"
|
||||
|
||||
msgid "Browse..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Check synchronisation configuration"
|
||||
msgstr "Kontrollera synkroniseringskonfigurationen"
|
||||
|
||||
msgid "Browse..."
|
||||
msgstr "Bläddra..."
|
||||
|
||||
msgid "Apply"
|
||||
msgstr "Tillämpa"
|
||||
|
||||
@@ -930,9 +943,8 @@ msgstr "Tillstånd"
|
||||
msgid "Encryption is:"
|
||||
msgstr "Kryptering är:"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Usage"
|
||||
msgstr "Användning: %s"
|
||||
msgstr "Användning"
|
||||
|
||||
msgid "Back"
|
||||
msgstr "Tillbaka"
|
||||
@@ -956,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:"
|
||||
|
||||
@@ -980,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"
|
||||
@@ -996,12 +1006,36 @@ msgstr ""
|
||||
"\"Ny anteckningsbok\"."
|
||||
|
||||
msgid "Location"
|
||||
msgstr ""
|
||||
msgstr "Plats"
|
||||
|
||||
msgid "URL"
|
||||
msgstr "URL"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Note History"
|
||||
msgstr "Anteckningsboken"
|
||||
|
||||
msgid "Previous versions of this note"
|
||||
msgstr ""
|
||||
|
||||
msgid "Note properties"
|
||||
msgstr "Anteckningens egenskaper"
|
||||
|
||||
#, javascript-format
|
||||
msgid "The note \"%s\" has been successfully restored to the notebook \"%s\"."
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "This note has no history"
|
||||
msgstr "Denna anteckning har ändrats:"
|
||||
|
||||
msgid "Restore"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid ""
|
||||
"Click \"%s\" to restore the note. It will be copied in the notebook named "
|
||||
"\"%s\". The current version of the note will not be replaced or modified."
|
||||
msgstr ""
|
||||
|
||||
msgid "Open..."
|
||||
@@ -1021,7 +1055,7 @@ msgid "Copy Link Address"
|
||||
msgstr "Kopiera länkadress"
|
||||
|
||||
msgid "This attachment is not downloaded or not decrypted yet."
|
||||
msgstr ""
|
||||
msgstr "Denna bilaga är inte nedladdad eller ännu inte dekrypterad."
|
||||
|
||||
#, javascript-format
|
||||
msgid "Unsupported link or message: %s"
|
||||
@@ -1037,6 +1071,7 @@ msgstr ""
|
||||
|
||||
msgid "Only one note can be printed or exported to PDF at a time."
|
||||
msgstr ""
|
||||
"Endast en anteckning i taget kan bli utskriven eller exporterad till PDF."
|
||||
|
||||
msgid "strong text"
|
||||
msgstr "stark text"
|
||||
@@ -1124,7 +1159,17 @@ msgstr "Krypteringsinställningar"
|
||||
msgid "Clipper Options"
|
||||
msgstr "Clipper-inställningar"
|
||||
|
||||
msgid "Remove this tag from all the notes?"
|
||||
#, fuzzy, javascript-format
|
||||
msgid ""
|
||||
"Delete notebook \"%s\"?\n"
|
||||
"\n"
|
||||
"All notes and sub-notebooks within this notebook will also be deleted."
|
||||
msgstr ""
|
||||
"Ta bort anteckningsboken? Alla anteckningar och delanteckningsböcker i den "
|
||||
"här anteckningsboken tas bort också."
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Remove tag \"%s\" from all notes?"
|
||||
msgstr "Ta bort den här taggen från alla anteckningar?"
|
||||
|
||||
msgid "Remove this search from the sidebar?"
|
||||
@@ -1136,9 +1181,6 @@ msgstr "Ta bort"
|
||||
msgid "Rename"
|
||||
msgstr "Byt namn"
|
||||
|
||||
msgid "Synchronise"
|
||||
msgstr "Synkronisera"
|
||||
|
||||
msgid "Notebooks"
|
||||
msgstr "Anteckningsböcker"
|
||||
|
||||
@@ -1146,13 +1188,56 @@ msgstr "Anteckningsböcker"
|
||||
msgid "Decrypting items: %d/%d"
|
||||
msgstr "Dekrypterar objekt: %d/%d"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Fetching resources: %d"
|
||||
msgstr "Resurser: %d."
|
||||
#, javascript-format
|
||||
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"
|
||||
|
||||
msgid "Duplicate"
|
||||
msgstr "Duplikat"
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s - Copy"
|
||||
msgstr "%s - Kopiera"
|
||||
|
||||
msgid "Switch between note and to-do type"
|
||||
msgstr "Växla mellan antecknings- och att-göra-typ"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Switch to note type"
|
||||
msgstr "Växla mellan antecknings- och att-göra-typ"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Switch to to-do type"
|
||||
msgstr "Växla mellan antecknings- och att-göra-typ"
|
||||
|
||||
msgid "Copy Markdown link"
|
||||
msgstr "Kopiera Markdown-länk"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Delete note \"%s\"?"
|
||||
msgstr "Ta bort anteckningar?"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Delete these %d notes?"
|
||||
msgstr "Ta bort dessa anteckningar?"
|
||||
|
||||
msgid ""
|
||||
"Type a note title to jump to it. Or type # followed by a tag name, or @ "
|
||||
"followed by a notebook name."
|
||||
msgstr ""
|
||||
|
||||
msgid "Goto Anything..."
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Usage: %s"
|
||||
msgstr "Användning: %s"
|
||||
@@ -1265,12 +1350,22 @@ msgstr "Pågår"
|
||||
msgid "Synchronisation is already in progress. State: %s"
|
||||
msgstr "Synkronisering pågår redan. Tillstånd: %s"
|
||||
|
||||
msgid ""
|
||||
"Unknown item type downloaded - please upgrade Joplin to the latest version"
|
||||
msgstr ""
|
||||
|
||||
msgid "Encrypted"
|
||||
msgstr "Krypterad"
|
||||
|
||||
msgid "Encrypted items cannot be modified"
|
||||
msgstr "Krypterade objekt kan inte ändras"
|
||||
|
||||
msgid "title"
|
||||
msgstr "titel"
|
||||
|
||||
msgid "updated date"
|
||||
msgstr "uppdaterad datum"
|
||||
|
||||
msgid "Conflicts"
|
||||
msgstr "Konflikter"
|
||||
|
||||
@@ -1282,14 +1377,8 @@ msgid "Notebooks cannot be named \"%s\", which is a reserved title."
|
||||
msgstr ""
|
||||
"Anteckningsböcker kan inte namnges \"%s\", vilket är en reserverad titel."
|
||||
|
||||
msgid "title"
|
||||
msgstr "titel"
|
||||
|
||||
msgid "updated date"
|
||||
msgstr "uppdaterad datum"
|
||||
|
||||
msgid "created date"
|
||||
msgstr "Skapad datum"
|
||||
msgstr "skapad datum"
|
||||
|
||||
msgid "This note does not have geolocation information."
|
||||
msgstr "Denna anteckning har inte geolokaliseringsinformation."
|
||||
@@ -1302,6 +1391,68 @@ msgstr "Kan inte kopiera anteckning till \"%s\" anteckningsbok"
|
||||
msgid "Cannot move note to \"%s\" notebook"
|
||||
msgstr "Kan inte flytta anteckning till \"%s\" anteckningsbok"
|
||||
|
||||
#, javascript-format
|
||||
msgid ""
|
||||
"Attention: If you change this location, make sure you copy all your content "
|
||||
"to it before syncing, otherwise all files will be removed! See the FAQ for "
|
||||
"more details: %s"
|
||||
msgstr ""
|
||||
"OBS! Om du ändrar denna plats så se till att du har en kopia på allt "
|
||||
"innehåll innan du synkroniserar. Annars kommer samtliga filer att raderas. "
|
||||
"Läs FAQ för mer information: %s"
|
||||
|
||||
msgid "Synchronisation target"
|
||||
msgstr "Synkroniseringsmål"
|
||||
|
||||
msgid ""
|
||||
"The target to synchonise to. Each sync target may have additional parameters "
|
||||
"which are named as `sync.NUM.NAME` (all documented below)."
|
||||
msgstr ""
|
||||
"Målet att synkronisera till. Varje synkroniseringsmål kan ha ytterligare "
|
||||
"parametrar som heter `sync.NUM.NAME` (alla dokumenterade nedan)."
|
||||
|
||||
msgid "Directory to synchronise with (absolute path)"
|
||||
msgstr "Katalog för att synkronisera med (absolut sökväg)"
|
||||
|
||||
msgid "Nextcloud WebDAV URL"
|
||||
msgstr "Nextcloud-WebDAV-webbadress"
|
||||
|
||||
msgid "Nextcloud username"
|
||||
msgstr "Nextcloud-användarnamn"
|
||||
|
||||
msgid "Nextcloud password"
|
||||
msgstr "Nextcloud-lösenord"
|
||||
|
||||
msgid "WebDAV URL"
|
||||
msgstr "WebDAV-webbadress"
|
||||
|
||||
msgid "WebDAV username"
|
||||
msgstr "WebDAV-användarnamn"
|
||||
|
||||
msgid "WebDAV password"
|
||||
msgstr "WebDAV-lösenord"
|
||||
|
||||
msgid "Attachment download behaviour"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"In \"Manual\" mode, attachments are downloaded only when you click on them. "
|
||||
"In \"Auto\", they are downloaded when you open the note. In \"Always\", all "
|
||||
"the attachments are downloaded whether you open the note or not."
|
||||
msgstr ""
|
||||
|
||||
msgid "Always"
|
||||
msgstr ""
|
||||
|
||||
msgid "Manual"
|
||||
msgstr ""
|
||||
|
||||
msgid "Auto"
|
||||
msgstr ""
|
||||
|
||||
msgid "Max concurrent connections"
|
||||
msgstr ""
|
||||
|
||||
msgid "Language"
|
||||
msgstr "Språk"
|
||||
|
||||
@@ -1332,6 +1483,10 @@ msgstr "Sortera anteckningar efter"
|
||||
msgid "Reverse sort order"
|
||||
msgstr "Omvänd sorteringsordning"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Sort notebooks by"
|
||||
msgstr "Sortera anteckningar efter"
|
||||
|
||||
msgid "Save geo-location with notes"
|
||||
msgstr "Spara geolokalisering med anteckningar"
|
||||
|
||||
@@ -1347,6 +1502,43 @@ msgstr "Fokus på huvuddel"
|
||||
msgid "When creating a new note:"
|
||||
msgstr "När du skapar en ny anteckning:"
|
||||
|
||||
msgid "Enable soft breaks"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Enable math expressions"
|
||||
msgstr "Aktivera kryptering"
|
||||
|
||||
msgid "Enable ==mark== syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable footnotes"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable table of contents extension"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable ~sub~ syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable ^sup^ syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable deflist syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable abbreviation syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable markdown emoji"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable ++insert++ syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable multimarkdown table extension"
|
||||
msgstr ""
|
||||
|
||||
msgid "Show tray icon"
|
||||
msgstr "Visa fältikon"
|
||||
|
||||
@@ -1358,16 +1550,18 @@ msgid ""
|
||||
"this setting so that your notes are constantly being synchronised, thus "
|
||||
"reducing the number of conflicts."
|
||||
msgstr ""
|
||||
"Detta tillåter Joplin att köra i bakgrunden. Det är rekommenderat att "
|
||||
"tillåta detta så att anteckningarna synkroniseras löpande. På det sättet "
|
||||
"minskas risken för konflikter."
|
||||
|
||||
msgid "Start application minimised in the tray icon"
|
||||
msgstr ""
|
||||
msgstr "Starta programmet minimerat"
|
||||
|
||||
msgid "Global zoom percentage"
|
||||
msgstr "Global zoomprocent"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Editor font size"
|
||||
msgstr "Redigerarens typsnittsfamilj"
|
||||
msgstr "Redigerarens teckenstorlek"
|
||||
|
||||
msgid "Editor font family"
|
||||
msgstr "Redigerarens typsnittsfamilj"
|
||||
@@ -1384,11 +1578,11 @@ msgid "Automatically update the application"
|
||||
msgstr "Uppdatera programmet automatiskt"
|
||||
|
||||
msgid "Get pre-releases when checking for updates"
|
||||
msgstr ""
|
||||
msgstr "Inkludera även förhandsversionen vid uppdateringar"
|
||||
|
||||
#, javascript-format
|
||||
msgid "See the pre-release page for more details: %s"
|
||||
msgstr ""
|
||||
msgstr "Se sidan för förhandsversioner för mer information: %s"
|
||||
|
||||
msgid "Synchronisation interval"
|
||||
msgstr "Synkroniseringsintervall"
|
||||
@@ -1419,51 +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 ""
|
||||
"The path to synchronise with when file system synchronisation is enabled. "
|
||||
"See `sync.target`."
|
||||
msgstr ""
|
||||
"Sökvägen att synkronisera med när synkronisering av filsystem är aktiverat. "
|
||||
"Se `sync.target`."
|
||||
|
||||
msgid "Nextcloud WebDAV URL"
|
||||
msgstr "Nextcloud-WebDAV-webbadress"
|
||||
|
||||
#, javascript-format
|
||||
msgid ""
|
||||
"Attention: If you change this location, make sure you copy all your content "
|
||||
"to it before syncing, otherwise all files will be removed! See the FAQ for "
|
||||
"more details: %s"
|
||||
msgstr ""
|
||||
|
||||
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"
|
||||
|
||||
@@ -1482,6 +1631,20 @@ msgstr ""
|
||||
msgid "Ignore TLS certificate errors"
|
||||
msgstr "Ignorera TLS-certifikatfel"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Enable note history"
|
||||
msgstr "Aktivera kryptering"
|
||||
|
||||
msgid "days"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "%d days"
|
||||
msgstr ""
|
||||
|
||||
msgid "Keep note history for"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Invalid option value: \"%s\". Possible values are: %s."
|
||||
msgstr "Ogiltigt inställningsvärde: \"%s\". Möjliga värden är: %s."
|
||||
@@ -1490,24 +1653,24 @@ msgstr "Ogiltigt inställningsvärde: \"%s\". Möjliga värden är: %s."
|
||||
msgid "General"
|
||||
msgstr "Allmänna inställningar"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Synchronisation"
|
||||
msgstr "Synkroniseringstillstånd"
|
||||
msgstr "Synkronisering"
|
||||
|
||||
msgid "Appearance"
|
||||
msgstr "Utseende"
|
||||
|
||||
msgid "Note"
|
||||
msgstr "Anteckning"
|
||||
|
||||
msgid "Plugins"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Note"
|
||||
msgstr "Anteckningsböcker"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Application"
|
||||
msgstr "Avslutar programmet."
|
||||
msgstr "Avslutar programmet"
|
||||
|
||||
#, javascript-format
|
||||
msgid "The tag \"%s\" already exists. Please choose a different name."
|
||||
msgstr ""
|
||||
msgstr "Taggen \"%s\" finns redan. Välj ett annat namn."
|
||||
|
||||
msgid "Joplin Export File"
|
||||
msgstr "Joplin-exporteringsfil"
|
||||
@@ -1521,9 +1684,11 @@ msgstr "Joplin-exporteringskatalog"
|
||||
msgid "Evernote Export File"
|
||||
msgstr "Evernote-exporteringsfil"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Json Export Directory"
|
||||
msgstr "Joplin-exporteringskatalog"
|
||||
msgstr "Joplin-exportkatalog"
|
||||
|
||||
msgid "File"
|
||||
msgstr "Fil"
|
||||
|
||||
msgid "Directory"
|
||||
msgstr "Katalog"
|
||||
@@ -1550,13 +1715,12 @@ msgstr "Det finns ingen data att exportera."
|
||||
msgid "Please specify the notebook where the notes should be imported to."
|
||||
msgstr "Ange anteckningsboken som anteckningarna ska importeras till."
|
||||
|
||||
msgid "Restored Notes"
|
||||
msgstr ""
|
||||
|
||||
msgid "Items that cannot be synchronised"
|
||||
msgstr "Objekt som inte kan synkroniseras"
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s (%s): %s"
|
||||
msgstr "%s (%s): %s"
|
||||
|
||||
msgid ""
|
||||
"These items will remain on the device but will not be uploaded to the sync "
|
||||
"target. In order to find these items, either search for the title or the ID "
|
||||
@@ -1566,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)"
|
||||
|
||||
@@ -1600,10 +1782,10 @@ msgid "On %s: %s"
|
||||
msgstr "På %s: %s"
|
||||
|
||||
msgid "Permission to use camera"
|
||||
msgstr ""
|
||||
msgstr "Tillåtelse att använda kameran"
|
||||
|
||||
msgid "Your permission to use your camera is required."
|
||||
msgstr ""
|
||||
msgstr "Du måste ge tillåtelse att använda kameran."
|
||||
|
||||
msgid "There are currently no notes. Create one by clicking on the (+) button."
|
||||
msgstr ""
|
||||
@@ -1635,9 +1817,8 @@ msgstr "Flytta %d anteckningar till anteckningsboken \"%s\"?"
|
||||
msgid "Press to set the decryption password."
|
||||
msgstr "Tryck för att ställa in dekrypteringslösenordet."
|
||||
|
||||
#, fuzzy
|
||||
msgid "Clear alarm"
|
||||
msgstr "Sätt alarm"
|
||||
msgstr "Ta bort alarm"
|
||||
|
||||
msgid "Save alarm"
|
||||
msgstr "Spara alarm"
|
||||
@@ -1651,22 +1832,21 @@ msgstr "Bekräfta"
|
||||
msgid "Cancel synchronisation"
|
||||
msgstr "Avbryt synkronisering"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Checking... Please wait."
|
||||
msgstr "Avbryter... vänta."
|
||||
msgstr "Kontrollerar... vänta."
|
||||
|
||||
#, fuzzy
|
||||
msgid "Success! Synchronisation configuration appears to be correct."
|
||||
msgstr "Kontrollera synkroniseringskonfigurationen"
|
||||
msgstr "Lyckades! Synkroniseringsinställningarna verkar vara korrekta."
|
||||
|
||||
msgid ""
|
||||
"Error. Please check that URL, username, password, etc. are correct and that "
|
||||
"the sync target is accessible. The reported error was:"
|
||||
msgstr ""
|
||||
"Fel. Verifiera att URL, användarnamn, lösenord etc. är korrekta och att "
|
||||
"destinationen är tillgänglig. Rapporterat fel var:"
|
||||
|
||||
#, fuzzy
|
||||
msgid "The application has been authorised!"
|
||||
msgstr "Programmet har godkänts."
|
||||
msgstr "Programmet har blivit godkänt!"
|
||||
|
||||
#, javascript-format
|
||||
msgid ""
|
||||
@@ -1676,10 +1856,15 @@ msgid ""
|
||||
"\n"
|
||||
"Please try again."
|
||||
msgstr ""
|
||||
"Kunde inte auktorisera programmet:\n"
|
||||
"\n"
|
||||
"%s\n"
|
||||
"\n"
|
||||
"Försök igen."
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
#, javascript-format
|
||||
msgid "Decrypted items: %s / %s"
|
||||
msgstr "Dekrypterar objekt: %d/%d"
|
||||
msgstr "Antal dekrypterade objekt: %s / %s"
|
||||
|
||||
msgid "New tags:"
|
||||
msgstr "Nya taggar:"
|
||||
@@ -1687,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"
|
||||
@@ -1714,23 +1903,19 @@ msgstr ""
|
||||
msgid "Joplin website"
|
||||
msgstr "Joplin-webbplats"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Joplin v%s"
|
||||
msgstr "Joplin-webbplats"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Database v%s"
|
||||
msgstr ""
|
||||
msgstr "Databas v%s"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
#, javascript-format
|
||||
msgid "FTS enabled: %d"
|
||||
msgstr "För att ta bort: %d"
|
||||
msgstr "FTS aktiverat: %d"
|
||||
|
||||
msgid "Login with Dropbox"
|
||||
msgstr "Logga in med Dropbox"
|
||||
|
||||
msgid "Enter code here"
|
||||
msgstr ""
|
||||
msgstr "Ange kod här"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Master Key %s"
|
||||
@@ -1784,9 +1969,8 @@ msgstr ""
|
||||
msgid "Unsupported image type: %s"
|
||||
msgstr "Bildstorlek som inte stöds: %s"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Take photo"
|
||||
msgstr "Bifoga foto"
|
||||
msgstr "Ta ett foto"
|
||||
|
||||
msgid "Attach photo"
|
||||
msgstr "Bifoga foto"
|
||||
@@ -1803,9 +1987,6 @@ msgstr "Konvertera till anteckning"
|
||||
msgid "Convert to todo"
|
||||
msgstr "Konvertera till att-göra"
|
||||
|
||||
msgid "Copy Markdown link"
|
||||
msgstr "Kopiera Markdown-länk"
|
||||
|
||||
msgid "Hide metadata"
|
||||
msgstr "Dölj metadata"
|
||||
|
||||
@@ -1816,7 +1997,10 @@ msgid "View on map"
|
||||
msgstr "Visa på karta"
|
||||
|
||||
msgid "Go to source URL"
|
||||
msgstr ""
|
||||
msgstr "Gå till källans URL"
|
||||
|
||||
msgid "Edit"
|
||||
msgstr "Redigera"
|
||||
|
||||
msgid "Delete notebook"
|
||||
msgstr "Ta bort anteckningsbok"
|
||||
@@ -1843,28 +2027,24 @@ msgstr ""
|
||||
msgid "Welcome"
|
||||
msgstr "Välkommen"
|
||||
|
||||
#~ 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 "Duplicate"
|
||||
#~ msgstr "Duplikat"
|
||||
#~ msgid "Some items cannot be decrypted."
|
||||
#~ msgstr "Några objekt kan inte dekrypteras."
|
||||
|
||||
#~ msgid "%s - Copy"
|
||||
#~ msgstr "%s - Kopiera"
|
||||
#~ msgid "%s (%s): %s"
|
||||
#~ msgstr "%s (%s): %s"
|
||||
|
||||
#~ msgid "Switch between note and to-do type"
|
||||
#~ msgstr "Växla mellan antecknings- och att-göra-typ"
|
||||
#~ msgid ""
|
||||
#~ "The path to synchronise with when file system synchronisation is enabled. "
|
||||
#~ "See `sync.target`."
|
||||
#~ msgstr ""
|
||||
#~ "Sökvägen att synkronisera med när synkronisering av filsystem är "
|
||||
#~ "aktiverat. Se `sync.target`."
|
||||
|
||||
#, fuzzy
|
||||
#~ msgid "Switch to note type"
|
||||
#~ msgstr "Växla mellan antecknings- och att-göra-typ"
|
||||
|
||||
#, fuzzy
|
||||
#~ msgid "Switch to to-do type"
|
||||
#~ msgstr "Växla mellan antecknings- och att-göra-typ"
|
||||
|
||||
#~ msgid "Delete notes?"
|
||||
#~ msgstr "Ta bort anteckningar?"
|
||||
#~ msgid "Joplin v%s"
|
||||
#~ msgstr "Joplin v%s"
|
||||
|
||||
#~ msgid "State: %s."
|
||||
#~ msgstr "Tillstånd: %s."
|
||||
|
||||
2006
CliClient/locales/tr_TR.po
Normal file
2006
CliClient/locales/tr_TR.po
Normal file
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -122,9 +122,10 @@ msgstr "標記待辦事項為完成。"
|
||||
msgid "Note is not a to-do: \"%s\""
|
||||
msgstr "記事不等於待辨事項: \"%s\""
|
||||
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
"Manages E2EE configuration. Commands are `enable`, `disable`, `decrypt`, "
|
||||
"`status` and `target-status`."
|
||||
"`status`, `decrypt-file` and `target-status`."
|
||||
msgstr ""
|
||||
"管理 E2EE 設置。命令是 `enable`,`disable`,`decrypt`,`status` 和 `target-"
|
||||
"status`。"
|
||||
@@ -569,8 +570,8 @@ msgstr "從 \"%s\" 匯入為 \"%s\" 格式。請稍候..."
|
||||
msgid "PDF File"
|
||||
msgstr "PDF 檔案"
|
||||
|
||||
msgid "File"
|
||||
msgstr "檔案"
|
||||
msgid "Synchronisation status"
|
||||
msgstr "顯示同步狀態"
|
||||
|
||||
msgid "New note"
|
||||
msgstr "新增記事"
|
||||
@@ -581,14 +582,43 @@ msgstr "新增待辦事項"
|
||||
msgid "New notebook"
|
||||
msgstr "新增記事本"
|
||||
|
||||
msgid "Print"
|
||||
msgstr "列印"
|
||||
|
||||
msgid "General Options"
|
||||
msgstr "一般選項"
|
||||
|
||||
msgid "Encryption options"
|
||||
msgstr "加密選項"
|
||||
|
||||
msgid "Web clipper options"
|
||||
msgstr "Web clipper 選項"
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s %s (%s, %s)"
|
||||
msgstr "%s %s (%s, %s)"
|
||||
|
||||
#, fuzzy
|
||||
msgid "&File"
|
||||
msgstr "檔案"
|
||||
|
||||
msgid "About Joplin"
|
||||
msgstr "關於 Joplin"
|
||||
|
||||
msgid "Preferences..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Check for updates..."
|
||||
msgstr "檢查更新..."
|
||||
|
||||
msgid "Import"
|
||||
msgstr "匯入"
|
||||
|
||||
msgid "Export"
|
||||
msgstr "匯出"
|
||||
|
||||
msgid "Print"
|
||||
msgstr "列印"
|
||||
msgid "Synchronise"
|
||||
msgstr "進行同步"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Hide %s"
|
||||
@@ -597,7 +627,11 @@ msgstr "隱藏 %s"
|
||||
msgid "Quit"
|
||||
msgstr "結束"
|
||||
|
||||
msgid "Edit"
|
||||
msgid "Close Window"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "&Edit"
|
||||
msgstr "編輯"
|
||||
|
||||
msgid "Copy"
|
||||
@@ -635,7 +669,8 @@ msgstr "在所有記事中搜尋"
|
||||
msgid "Search in current note"
|
||||
msgstr "在所有記事中搜尋"
|
||||
|
||||
msgid "View"
|
||||
#, fuzzy
|
||||
msgid "&View"
|
||||
msgstr "檢視"
|
||||
|
||||
msgid "Toggle sidebar"
|
||||
@@ -648,22 +683,12 @@ msgstr "切換編輯器佈局"
|
||||
msgid "Focus"
|
||||
msgstr "游標置於內文"
|
||||
|
||||
msgid "Tools"
|
||||
#, fuzzy
|
||||
msgid "&Tools"
|
||||
msgstr "工具"
|
||||
|
||||
msgid "Synchronisation status"
|
||||
msgstr "顯示同步狀態"
|
||||
|
||||
msgid "Web clipper options"
|
||||
msgstr "Web clipper 選項"
|
||||
|
||||
msgid "Encryption options"
|
||||
msgstr "加密選項"
|
||||
|
||||
msgid "General Options"
|
||||
msgstr "一般選項"
|
||||
|
||||
msgid "Help"
|
||||
#, fuzzy
|
||||
msgid "&Help"
|
||||
msgstr "說明"
|
||||
|
||||
msgid "Website and documentation"
|
||||
@@ -672,15 +697,8 @@ msgstr "官方網站及線上說明"
|
||||
msgid "Make a donation"
|
||||
msgstr "捐助"
|
||||
|
||||
msgid "Check for updates..."
|
||||
msgstr "檢查更新..."
|
||||
|
||||
msgid "About Joplin"
|
||||
msgstr "關於 Joplin"
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s %s (%s, %s)"
|
||||
msgstr "%s %s (%s, %s)"
|
||||
msgid "Toggle development tools"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Open %s"
|
||||
@@ -706,11 +724,11 @@ msgid "An update is available, do you want to download it now?"
|
||||
msgstr "有可用的更新,您需要立即下載嗎?"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Your version: v%s"
|
||||
msgid "Your version: %s"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "New version: v%s"
|
||||
msgid "New version: %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Yes"
|
||||
@@ -786,12 +804,12 @@ msgstr ""
|
||||
msgid "Notes and settings are stored in: %s"
|
||||
msgstr "所有記事和設置均儲存於: %s"
|
||||
|
||||
msgid "Browse..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Check synchronisation configuration"
|
||||
msgstr "檢測同步設置"
|
||||
|
||||
msgid "Browse..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Apply"
|
||||
msgstr "套用"
|
||||
|
||||
@@ -903,9 +921,6 @@ msgstr "記事本標題:"
|
||||
msgid "Add or remove tags:"
|
||||
msgstr "新增或移除標籤:"
|
||||
|
||||
msgid "Separate each tag by a comma."
|
||||
msgstr "您可用逗號分隔每個標籤。"
|
||||
|
||||
msgid "Rename notebook:"
|
||||
msgstr "重新命名記事本:"
|
||||
|
||||
@@ -927,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 "設置密碼"
|
||||
@@ -946,9 +962,33 @@ msgstr ""
|
||||
msgid "URL"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Note History"
|
||||
msgstr "記事本"
|
||||
|
||||
msgid "Previous versions of this note"
|
||||
msgstr ""
|
||||
|
||||
msgid "Note properties"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "The note \"%s\" has been successfully restored to the notebook \"%s\"."
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "This note has no history"
|
||||
msgstr "此記事已被修改:"
|
||||
|
||||
msgid "Restore"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid ""
|
||||
"Click \"%s\" to restore the note. It will be copied in the notebook named "
|
||||
"\"%s\". The current version of the note will not be replaced or modified."
|
||||
msgstr ""
|
||||
|
||||
msgid "Open..."
|
||||
msgstr "開啟..."
|
||||
|
||||
@@ -1067,7 +1107,15 @@ msgstr "加密選項"
|
||||
msgid "Clipper Options"
|
||||
msgstr "Clipper 選項"
|
||||
|
||||
msgid "Remove this tag from all the notes?"
|
||||
#, fuzzy, javascript-format
|
||||
msgid ""
|
||||
"Delete notebook \"%s\"?\n"
|
||||
"\n"
|
||||
"All notes and sub-notebooks within this notebook will also be deleted."
|
||||
msgstr "決定刪除記事本?此記事本中的所有記事和子記事本也將被刪除。"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Remove tag \"%s\" from all notes?"
|
||||
msgstr "是否從所有記事中刪除此標籤?"
|
||||
|
||||
msgid "Remove this search from the sidebar?"
|
||||
@@ -1079,9 +1127,6 @@ msgstr "刪除"
|
||||
msgid "Rename"
|
||||
msgstr "重新命名"
|
||||
|
||||
msgid "Synchronise"
|
||||
msgstr "進行同步"
|
||||
|
||||
msgid "Notebooks"
|
||||
msgstr "記事本"
|
||||
|
||||
@@ -1090,12 +1135,55 @@ 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 "新增或移除標籤"
|
||||
|
||||
msgid "Duplicate"
|
||||
msgstr "新增複本"
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s - Copy"
|
||||
msgstr "%s - 複本"
|
||||
|
||||
msgid "Switch between note and to-do type"
|
||||
msgstr "切換到記事 / 待辦事項"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Switch to note type"
|
||||
msgstr "切換到記事 / 待辦事項"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Switch to to-do type"
|
||||
msgstr "切換到記事 / 待辦事項"
|
||||
|
||||
msgid "Copy Markdown link"
|
||||
msgstr "複製 Markdown 連結"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Delete note \"%s\"?"
|
||||
msgstr "刪除此記事?"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Delete these %d notes?"
|
||||
msgstr "刪除這些記事?"
|
||||
|
||||
msgid ""
|
||||
"Type a note title to jump to it. Or type # followed by a tag name, or @ "
|
||||
"followed by a notebook name."
|
||||
msgstr ""
|
||||
|
||||
msgid "Goto Anything..."
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Usage: %s"
|
||||
msgstr "使用資訊: %s"
|
||||
@@ -1205,12 +1293,22 @@ msgstr "進行中"
|
||||
msgid "Synchronisation is already in progress. State: %s"
|
||||
msgstr "同步已在進行中。狀態: %s"
|
||||
|
||||
msgid ""
|
||||
"Unknown item type downloaded - please upgrade Joplin to the latest version"
|
||||
msgstr ""
|
||||
|
||||
msgid "Encrypted"
|
||||
msgstr "已加密"
|
||||
|
||||
msgid "Encrypted items cannot be modified"
|
||||
msgstr "無法修改已加密項目"
|
||||
|
||||
msgid "title"
|
||||
msgstr "標題"
|
||||
|
||||
msgid "updated date"
|
||||
msgstr "更新日期"
|
||||
|
||||
msgid "Conflicts"
|
||||
msgstr "衝突"
|
||||
|
||||
@@ -1221,12 +1319,6 @@ msgstr "無法移動記事本到此位置"
|
||||
msgid "Notebooks cannot be named \"%s\", which is a reserved title."
|
||||
msgstr "筆記本無法命名為 \"%s\",這標題已被保留。"
|
||||
|
||||
msgid "title"
|
||||
msgstr "標題"
|
||||
|
||||
msgid "updated date"
|
||||
msgstr "更新日期"
|
||||
|
||||
msgid "created date"
|
||||
msgstr "建立日期"
|
||||
|
||||
@@ -1241,6 +1333,65 @@ msgstr "無法複製此記事到 \"%s\" 記事本"
|
||||
msgid "Cannot move note to \"%s\" notebook"
|
||||
msgstr "無法移動此記事到 \"%s\" 記事本"
|
||||
|
||||
#, javascript-format
|
||||
msgid ""
|
||||
"Attention: If you change this location, make sure you copy all your content "
|
||||
"to it before syncing, otherwise all files will be removed! See the FAQ for "
|
||||
"more details: %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Synchronisation target"
|
||||
msgstr "同步目標"
|
||||
|
||||
msgid ""
|
||||
"The target to synchonise to. Each sync target may have additional parameters "
|
||||
"which are named as `sync.NUM.NAME` (all documented below)."
|
||||
msgstr ""
|
||||
"要同步的目標。每個同步目標可能有附加的參數,它們被命名為 `sync.NUM.NAME` (全"
|
||||
"部記錄如下)。"
|
||||
|
||||
msgid "Directory to synchronise with (absolute path)"
|
||||
msgstr "要同步的目錄 (絕對路徑)"
|
||||
|
||||
msgid "Nextcloud WebDAV URL"
|
||||
msgstr "Nextcloud WebDAV 網址"
|
||||
|
||||
msgid "Nextcloud username"
|
||||
msgstr "Nextcloud 用戶名稱"
|
||||
|
||||
msgid "Nextcloud password"
|
||||
msgstr "Nextcloud 密碼"
|
||||
|
||||
msgid "WebDAV URL"
|
||||
msgstr "WebDAV 網址"
|
||||
|
||||
msgid "WebDAV username"
|
||||
msgstr "WebDAV 用戶名稱"
|
||||
|
||||
msgid "WebDAV password"
|
||||
msgstr "WebDAV 密碼"
|
||||
|
||||
msgid "Attachment download behaviour"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"In \"Manual\" mode, attachments are downloaded only when you click on them. "
|
||||
"In \"Auto\", they are downloaded when you open the note. In \"Always\", all "
|
||||
"the attachments are downloaded whether you open the note or not."
|
||||
msgstr ""
|
||||
|
||||
msgid "Always"
|
||||
msgstr ""
|
||||
|
||||
msgid "Manual"
|
||||
msgstr ""
|
||||
|
||||
msgid "Auto"
|
||||
msgstr ""
|
||||
|
||||
msgid "Max concurrent connections"
|
||||
msgstr ""
|
||||
|
||||
msgid "Language"
|
||||
msgstr "語言"
|
||||
|
||||
@@ -1271,6 +1422,10 @@ msgstr "排序記事"
|
||||
msgid "Reverse sort order"
|
||||
msgstr "顛倒排序順序"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Sort notebooks by"
|
||||
msgstr "排序記事"
|
||||
|
||||
msgid "Save geo-location with notes"
|
||||
msgstr "在記事中保存地理位置資訊"
|
||||
|
||||
@@ -1286,6 +1441,43 @@ msgstr "游標置於內文"
|
||||
msgid "When creating a new note:"
|
||||
msgstr "當新增記事時:"
|
||||
|
||||
msgid "Enable soft breaks"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Enable math expressions"
|
||||
msgstr "啟用加密"
|
||||
|
||||
msgid "Enable ==mark== syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable footnotes"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable table of contents extension"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable ~sub~ syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable ^sup^ syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable deflist syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable abbreviation syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable markdown emoji"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable ++insert++ syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable multimarkdown table extension"
|
||||
msgstr ""
|
||||
|
||||
msgid "Show tray icon"
|
||||
msgstr "顯示系統匣圖示"
|
||||
|
||||
@@ -1356,49 +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 ""
|
||||
"The path to synchronise with when file system synchronisation is enabled. "
|
||||
"See `sync.target`."
|
||||
msgstr "啟用檔案系統同步時要同步的路徑。請參閱 `sync.target`。"
|
||||
|
||||
msgid "Nextcloud WebDAV URL"
|
||||
msgstr "Nextcloud WebDAV 網址"
|
||||
|
||||
#, javascript-format
|
||||
msgid ""
|
||||
"Attention: If you change this location, make sure you copy all your content "
|
||||
"to it before syncing, otherwise all files will be removed! See the FAQ for "
|
||||
"more details: %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Nextcloud username"
|
||||
msgstr "Nextcloud 用戶名稱"
|
||||
|
||||
msgid "Nextcloud password"
|
||||
msgstr "Nextcloud 密碼"
|
||||
|
||||
msgid "WebDAV URL"
|
||||
msgstr "WebDAV 網址"
|
||||
|
||||
msgid "WebDAV username"
|
||||
msgstr "WebDAV 用戶名稱"
|
||||
|
||||
msgid "WebDAV password"
|
||||
msgstr "WebDAV 密碼"
|
||||
|
||||
msgid "Custom TLS certificates"
|
||||
msgstr "自訂 TLS 證書"
|
||||
|
||||
@@ -1415,6 +1564,20 @@ msgstr ""
|
||||
msgid "Ignore TLS certificate errors"
|
||||
msgstr "忽略 TLS 證書錯誤"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Enable note history"
|
||||
msgstr "啟用加密"
|
||||
|
||||
msgid "days"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "%d days"
|
||||
msgstr ""
|
||||
|
||||
msgid "Keep note history for"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Invalid option value: \"%s\". Possible values are: %s."
|
||||
msgstr "不正確選項值: \"%s\"。可能的值為: %s。"
|
||||
@@ -1434,6 +1597,9 @@ msgstr ""
|
||||
msgid "Note"
|
||||
msgstr "記事本"
|
||||
|
||||
msgid "Plugins"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Application"
|
||||
msgstr "離開本程式。"
|
||||
@@ -1458,6 +1624,9 @@ msgstr "Evernote 匯出檔"
|
||||
msgid "Json Export Directory"
|
||||
msgstr "Joplin 匯出目錄"
|
||||
|
||||
msgid "File"
|
||||
msgstr "檔案"
|
||||
|
||||
msgid "Directory"
|
||||
msgstr "目錄"
|
||||
|
||||
@@ -1481,13 +1650,12 @@ msgstr "沒有資料可匯出。"
|
||||
msgid "Please specify the notebook where the notes should be imported to."
|
||||
msgstr "請指定將記事匯入到的筆記本。"
|
||||
|
||||
msgid "Restored Notes"
|
||||
msgstr ""
|
||||
|
||||
msgid "Items that cannot be synchronised"
|
||||
msgstr "無法同步的項目"
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s (%s): %s"
|
||||
msgstr "%s (%s): %s"
|
||||
|
||||
msgid ""
|
||||
"These items will remain on the device but will not be uploaded to the sync "
|
||||
"target. In order to find these items, either search for the title or the ID "
|
||||
@@ -1496,6 +1664,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 "同步狀態 (已同步項目 / 項目總數)"
|
||||
|
||||
@@ -1615,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"
|
||||
@@ -1636,10 +1826,6 @@ msgstr "- 位置: 允許將地理位置資訊附加到筆記。"
|
||||
msgid "Joplin website"
|
||||
msgstr "Joplin 官方網站"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Joplin v%s"
|
||||
msgstr "Joplin 官方網站"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Database v%s"
|
||||
msgstr ""
|
||||
@@ -1724,9 +1910,6 @@ msgstr "轉換為記事"
|
||||
msgid "Convert to todo"
|
||||
msgstr "轉換為待辦事項"
|
||||
|
||||
msgid "Copy Markdown link"
|
||||
msgstr "複製 Markdown 連結"
|
||||
|
||||
msgid "Hide metadata"
|
||||
msgstr "隱藏後設資料 (metadata)"
|
||||
|
||||
@@ -1739,6 +1922,9 @@ msgstr "在地圖上顯示"
|
||||
msgid "Go to source URL"
|
||||
msgstr ""
|
||||
|
||||
msgid "Edit"
|
||||
msgstr "編輯"
|
||||
|
||||
msgid "Delete notebook"
|
||||
msgstr "刪除記事本"
|
||||
|
||||
@@ -1759,28 +1945,23 @@ msgstr "您當前沒有任何筆記本。通過按一下 (+) 鍵去建立一本
|
||||
msgid "Welcome"
|
||||
msgstr "歡迎"
|
||||
|
||||
#~ msgid "Add or remove tags"
|
||||
#~ msgstr "新增或移除標籤"
|
||||
#~ msgid "Separate each tag by a comma."
|
||||
#~ msgstr "您可用逗號分隔每個標籤。"
|
||||
|
||||
#~ msgid "Duplicate"
|
||||
#~ msgstr "新增複本"
|
||||
#~ msgid "Some items cannot be decrypted."
|
||||
#~ msgstr "有些項目不能解密。"
|
||||
|
||||
#~ msgid "%s - Copy"
|
||||
#~ msgstr "%s - 複本"
|
||||
#~ msgid "%s (%s): %s"
|
||||
#~ msgstr "%s (%s): %s"
|
||||
|
||||
#~ msgid "Switch between note and to-do type"
|
||||
#~ msgstr "切換到記事 / 待辦事項"
|
||||
#~ msgid ""
|
||||
#~ "The path to synchronise with when file system synchronisation is enabled. "
|
||||
#~ "See `sync.target`."
|
||||
#~ msgstr "啟用檔案系統同步時要同步的路徑。請參閱 `sync.target`。"
|
||||
|
||||
#, fuzzy
|
||||
#~ msgid "Switch to note type"
|
||||
#~ msgstr "切換到記事 / 待辦事項"
|
||||
|
||||
#, fuzzy
|
||||
#~ msgid "Switch to to-do type"
|
||||
#~ msgstr "切換到記事 / 待辦事項"
|
||||
|
||||
#~ msgid "Delete notes?"
|
||||
#~ msgstr "刪除此記事?"
|
||||
#~ msgid "Joplin v%s"
|
||||
#~ msgstr "Joplin 官方網站"
|
||||
|
||||
#~ msgid "State: %s."
|
||||
#~ msgstr "狀態: %s。"
|
||||
|
||||
419
CliClient/package-lock.json
generated
419
CliClient/package-lock.json
generated
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "joplin",
|
||||
"version": "1.0.123",
|
||||
"version": "1.0.140",
|
||||
"lockfileVersion": 1,
|
||||
"requires": true,
|
||||
"dependencies": {
|
||||
@@ -20,18 +20,18 @@
|
||||
"integrity": "sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw=="
|
||||
},
|
||||
"acorn-globals": {
|
||||
"version": "4.3.0",
|
||||
"resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-4.3.0.tgz",
|
||||
"integrity": "sha512-hMtHj3s5RnuhvHPowpBYvJVj3rAar82JiDQHvGs1zO0l10ocX/xEdBShNHTJaboucJUsScghp74pH3s7EnHHQw==",
|
||||
"version": "4.3.2",
|
||||
"resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-4.3.2.tgz",
|
||||
"integrity": "sha512-BbzvZhVtZP+Bs1J1HcwrQe8ycfO0wStkSGxuul3He3GkHOIZ6eTqOkPuw9IP1X3+IkOo4wiJmwkobzXYz4wewQ==",
|
||||
"requires": {
|
||||
"acorn": "^6.0.1",
|
||||
"acorn-walk": "^6.0.1"
|
||||
},
|
||||
"dependencies": {
|
||||
"acorn": {
|
||||
"version": "6.0.6",
|
||||
"resolved": "https://registry.npmjs.org/acorn/-/acorn-6.0.6.tgz",
|
||||
"integrity": "sha512-5M3G/A4uBSMIlfJ+h9W125vJvPFH/zirISsW5qfxF5YzEvXJCtolLoQvM5yZft0DvMcUrPGKPOlgEu55I6iUtA=="
|
||||
"version": "6.1.1",
|
||||
"resolved": "https://registry.npmjs.org/acorn/-/acorn-6.1.1.tgz",
|
||||
"integrity": "sha512-jPTiwtOxaHNaAPg/dmrJ/beuzLRnXtB0kQPQ8JpotKJgTB6rX6c8mlf315941pyjBSaPg8NHXS9fhP4u17DpGA=="
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -346,9 +346,9 @@
|
||||
"integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c="
|
||||
},
|
||||
"color": {
|
||||
"version": "3.0.0",
|
||||
"resolved": "https://registry.npmjs.org/color/-/color-3.0.0.tgz",
|
||||
"integrity": "sha512-jCpd5+s0s0t7p3pHQKpnJ0TpQKKdleP71LWcA0aqiljpiuAkOSUFN/dyH8ZwF0hRmFlrIuRhufds1QyEP9EB+w==",
|
||||
"version": "3.1.1",
|
||||
"resolved": "https://registry.npmjs.org/color/-/color-3.1.1.tgz",
|
||||
"integrity": "sha512-PvUltIXRjehRKPSy89VnDWFKY58xyhTLyxIg21vwQBI6qLwZNPmC8k3C1uytIgFKEpOIzN4y32iPm8231zFHIg==",
|
||||
"requires": {
|
||||
"color-convert": "^1.9.1",
|
||||
"color-string": "^1.5.2"
|
||||
@@ -454,14 +454,14 @@
|
||||
}
|
||||
},
|
||||
"cssom": {
|
||||
"version": "0.3.4",
|
||||
"resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.4.tgz",
|
||||
"integrity": "sha512-+7prCSORpXNeR4/fUP3rL+TzqtiFfhMvTd7uEqMdgPvLPt4+uzFUeufx5RHjGTACCargg/DiEt/moMQmvnfkog=="
|
||||
"version": "0.3.6",
|
||||
"resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.6.tgz",
|
||||
"integrity": "sha512-DtUeseGk9/GBW0hl0vVPpU22iHL6YB5BUX7ml1hB+GMpo0NX5G4voX3kdWiMSEguFtcW3Vh3djqNF4aIe6ne0A=="
|
||||
},
|
||||
"cssstyle": {
|
||||
"version": "1.1.1",
|
||||
"resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-1.1.1.tgz",
|
||||
"integrity": "sha512-364AI1l/M5TYcFH83JnOH/pSqgaNnKmYgKrm0didZMGKWjQB60dymwWy1rKUgL3J1ffdq9xVi2yGLHdSjjSNog==",
|
||||
"version": "1.2.2",
|
||||
"resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-1.2.2.tgz",
|
||||
"integrity": "sha512-43wY3kl1CVQSvL7wUY1qXkxVGkStjpkDmVjiIKX8R97uhajy8Bybay78uOtqvh7Q5GK75dNPfW0geWjE6qQQow==",
|
||||
"requires": {
|
||||
"cssom": "0.3.x"
|
||||
}
|
||||
@@ -560,6 +560,11 @@
|
||||
"resolved": "https://registry.npmjs.org/diacritics/-/diacritics-1.3.0.tgz",
|
||||
"integrity": "sha1-PvqHMj67hj5mls67AILUj/PW96E="
|
||||
},
|
||||
"diff-match-patch": {
|
||||
"version": "1.0.4",
|
||||
"resolved": "https://registry.npmjs.org/diff-match-patch/-/diff-match-patch-1.0.4.tgz",
|
||||
"integrity": "sha512-Uv3SW8bmH9nAtHKaKSanOQmj2DnlH65fUpcrMdfdaOxUG02QQ4YGZ8AE7kKOMisF7UqvOlGKVYWRvezdncW9lg=="
|
||||
},
|
||||
"domexception": {
|
||||
"version": "1.0.1",
|
||||
"resolved": "https://registry.npmjs.org/domexception/-/domexception-1.0.1.tgz",
|
||||
@@ -656,9 +661,9 @@
|
||||
"integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ="
|
||||
},
|
||||
"escodegen": {
|
||||
"version": "1.11.0",
|
||||
"resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.11.0.tgz",
|
||||
"integrity": "sha512-IeMV45ReixHS53K/OmfKAIztN/igDHzTJUhZM3k1jMhIZWjk45SMwAtBsEXiJp3vSPmTcu6CXn7mDvFHRN66fw==",
|
||||
"version": "1.11.1",
|
||||
"resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.11.1.tgz",
|
||||
"integrity": "sha512-JwiqFD9KdGVVpeuRa68yU3zZnBEOcPs0nKW7wZzXky8Z7tffdYUHbe11bPCV5jYlK6DVdKLWLm0f5I/QlL0Kmw==",
|
||||
"requires": {
|
||||
"esprima": "^3.1.3",
|
||||
"estraverse": "^4.2.0",
|
||||
@@ -697,9 +702,9 @@
|
||||
"dev": true
|
||||
},
|
||||
"expand-template": {
|
||||
"version": "1.1.1",
|
||||
"resolved": "https://registry.npmjs.org/expand-template/-/expand-template-1.1.1.tgz",
|
||||
"integrity": "sha512-cebqLtV8KOZfw0UI8TEFWxtczxxC1jvyUvx6H4fyp1K1FN7A4Q+uggVUlOsI1K8AGU0rwOGqP8nCapdrw8CYQg=="
|
||||
"version": "2.0.3",
|
||||
"resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz",
|
||||
"integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg=="
|
||||
},
|
||||
"extend": {
|
||||
"version": "3.0.1",
|
||||
@@ -739,6 +744,11 @@
|
||||
"resolved": "https://registry.npmjs.org/file-type/-/file-type-4.4.0.tgz",
|
||||
"integrity": "sha1-G2AOX8ofvcboDApwxxyNul95BsU="
|
||||
},
|
||||
"file-uri-to-path": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz",
|
||||
"integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw=="
|
||||
},
|
||||
"find-up": {
|
||||
"version": "2.1.0",
|
||||
"resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz",
|
||||
@@ -1427,17 +1437,18 @@
|
||||
"dev": true
|
||||
},
|
||||
"joplin-turndown": {
|
||||
"version": "4.0.11",
|
||||
"resolved": "https://registry.npmjs.org/joplin-turndown/-/joplin-turndown-4.0.11.tgz",
|
||||
"integrity": "sha512-2oiwWX0nKYi1NVcaprSsrXQkYdGoRtPWFmnXdWQnQW44jlgjFV38B4VrgliwX5ZMq7cbx6A9IBwfXcBL2YV2NA==",
|
||||
"version": "4.0.12",
|
||||
"resolved": "https://registry.npmjs.org/joplin-turndown/-/joplin-turndown-4.0.12.tgz",
|
||||
"integrity": "sha512-HlxkcIiNFSMLBvYktoXqLLHFGuwQYlcPclo0Peeatw3cPe6iFqSsEgEGY/0bYM/fubA/zpPULrJcjST99BO9wQ==",
|
||||
"requires": {
|
||||
"html-entities": "^1.2.1",
|
||||
"jsdom": "^11.9.0"
|
||||
}
|
||||
},
|
||||
"joplin-turndown-plugin-gfm": {
|
||||
"version": "1.0.7",
|
||||
"resolved": "https://registry.npmjs.org/joplin-turndown-plugin-gfm/-/joplin-turndown-plugin-gfm-1.0.7.tgz",
|
||||
"integrity": "sha512-z0SveNcchtWwglkO7SgvDzPnVHYk1WumD0QRcWvUchIihqXwDVlve3G8AHkIhM69LY1YdC0HCZJlSMp2spBe/g=="
|
||||
"version": "1.0.8",
|
||||
"resolved": "https://registry.npmjs.org/joplin-turndown-plugin-gfm/-/joplin-turndown-plugin-gfm-1.0.8.tgz",
|
||||
"integrity": "sha512-uXgq2zGvjiMl/sXG7946EGhh1pyGbZ0L/6z21LBi8D6BJgHQufmXdve/UP3zpgnhiFhfXvzGY10uNaTuDQ99iQ=="
|
||||
},
|
||||
"jpeg-js": {
|
||||
"version": "0.1.2",
|
||||
@@ -1489,9 +1500,9 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"ajv": {
|
||||
"version": "6.7.0",
|
||||
"resolved": "https://registry.npmjs.org/ajv/-/ajv-6.7.0.tgz",
|
||||
"integrity": "sha512-RZXPviBTtfmtka9n9sy1N5M5b82CbxWIR6HIis4s3WQTXDJamc/0gpCWNGz6EWdWp4DOfjzJfhz/AS9zVPjjWg==",
|
||||
"version": "6.10.0",
|
||||
"resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.0.tgz",
|
||||
"integrity": "sha512-nffhOpkymDECQyR0mnsUtoCE8RlX38G0rYP+wgLWFyZuUyuuojSSvi/+euOiQBIn63whYwYVIIH1TvE3tu4OEg==",
|
||||
"requires": {
|
||||
"fast-deep-equal": "^2.0.1",
|
||||
"fast-json-stable-stringify": "^2.0.0",
|
||||
@@ -1505,9 +1516,9 @@
|
||||
"integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ=="
|
||||
},
|
||||
"combined-stream": {
|
||||
"version": "1.0.7",
|
||||
"resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.7.tgz",
|
||||
"integrity": "sha512-brWl9y6vOB1xYPZcpZde3N9zDByXTosAeMDo4p1wzo6UMOX4vumB+TP1RZ76sfE6Md68Q0NJSrE/gbezd4Ul+w==",
|
||||
"version": "1.0.8",
|
||||
"resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
|
||||
"integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
|
||||
"requires": {
|
||||
"delayed-stream": "~1.0.0"
|
||||
}
|
||||
@@ -1547,16 +1558,16 @@
|
||||
"integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg=="
|
||||
},
|
||||
"mime-db": {
|
||||
"version": "1.37.0",
|
||||
"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.37.0.tgz",
|
||||
"integrity": "sha512-R3C4db6bgQhlIhPU48fUtdVmKnflq+hRdad7IyKhtFj06VPNVdk2RhiYL3UjQIlso8L+YxAtFkobT0VK+S/ybg=="
|
||||
"version": "1.40.0",
|
||||
"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.40.0.tgz",
|
||||
"integrity": "sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA=="
|
||||
},
|
||||
"mime-types": {
|
||||
"version": "2.1.21",
|
||||
"resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.21.tgz",
|
||||
"integrity": "sha512-3iL6DbwpyLzjR3xHSFNFeb9Nz/M8WDkX33t1GFQnFOllWk8pOrh/LSrB5OXlnlW5P9LH73X6loW/eogc+F5lJg==",
|
||||
"version": "2.1.24",
|
||||
"resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.24.tgz",
|
||||
"integrity": "sha512-WaFHS3MCl5fapm3oLxU4eYDw77IQM2ACcxQ9RIxfaC3ooc6PFuBMGZZsYpvoXS5D5QTWPieo1jjLdAm3TBP3cQ==",
|
||||
"requires": {
|
||||
"mime-db": "~1.37.0"
|
||||
"mime-db": "1.40.0"
|
||||
}
|
||||
},
|
||||
"oauth-sign": {
|
||||
@@ -1853,9 +1864,14 @@
|
||||
"integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
|
||||
},
|
||||
"nan": {
|
||||
"version": "2.11.0",
|
||||
"resolved": "https://registry.npmjs.org/nan/-/nan-2.11.0.tgz",
|
||||
"integrity": "sha512-F4miItu2rGnV2ySkXOQoA8FKz/SR2Q2sWP0sbTxNxz/tuokeC8WxOhPMcwi0qIyGtVn/rrSeLbvVkznqCdwYnw=="
|
||||
"version": "2.13.2",
|
||||
"resolved": "https://registry.npmjs.org/nan/-/nan-2.13.2.tgz",
|
||||
"integrity": "sha512-TghvYc72wlMGMVMluVo9WRJc0mB8KxxF/gZ4YYFy7V2ZQX9l7rgbPg7vjS9mt6U5HXODVFVI2bOduCzwOMv/lw=="
|
||||
},
|
||||
"napi-build-utils": {
|
||||
"version": "1.0.1",
|
||||
"resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.1.tgz",
|
||||
"integrity": "sha512-boQj1WFgQH3v4clhu3mTNfP+vOBxorDlE8EKiMjUlLG3C4qAESnn9AxIOkFgTR2c9LtzNjPrjS60cT27ZKBhaA=="
|
||||
},
|
||||
"ndarray": {
|
||||
"version": "1.0.18",
|
||||
@@ -1876,13 +1892,28 @@
|
||||
}
|
||||
},
|
||||
"needle": {
|
||||
"version": "2.2.1",
|
||||
"resolved": "https://registry.npmjs.org/needle/-/needle-2.2.1.tgz",
|
||||
"integrity": "sha512-t/ZswCM9JTWjAdXS9VpvqhI2Ct2sL2MdY4fUXqGJaGBk13ge99ObqRksRTbBE56K+wxUXwwfZYOuZHifFW9q+Q==",
|
||||
"version": "2.3.1",
|
||||
"resolved": "https://registry.npmjs.org/needle/-/needle-2.3.1.tgz",
|
||||
"integrity": "sha512-CaLXV3W8Vnbps8ZANqDGz7j4x7Yj1LW4TWF/TQuDfj7Cfx4nAPTvw98qgTevtto1oHDrh3pQkaODbqupXlsWTg==",
|
||||
"requires": {
|
||||
"debug": "^2.1.2",
|
||||
"debug": "^4.1.0",
|
||||
"iconv-lite": "^0.4.4",
|
||||
"sax": "^1.2.4"
|
||||
},
|
||||
"dependencies": {
|
||||
"debug": {
|
||||
"version": "4.1.1",
|
||||
"resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
|
||||
"integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
|
||||
"requires": {
|
||||
"ms": "^2.1.1"
|
||||
}
|
||||
},
|
||||
"ms": {
|
||||
"version": "2.1.1",
|
||||
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
|
||||
"integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg=="
|
||||
}
|
||||
}
|
||||
},
|
||||
"nextgen-events": {
|
||||
@@ -1899,9 +1930,9 @@
|
||||
}
|
||||
},
|
||||
"node-abi": {
|
||||
"version": "2.4.4",
|
||||
"resolved": "https://registry.npmjs.org/node-abi/-/node-abi-2.4.4.tgz",
|
||||
"integrity": "sha512-DQ9Mo2mf/XectC+s6+grPPRQ1Z9gI3ZbrGv6nyXRkjwT3HrE0xvtvrfnH7YHYBLgC/KLadg+h3XHnhZw1sv88A==",
|
||||
"version": "2.8.0",
|
||||
"resolved": "https://registry.npmjs.org/node-abi/-/node-abi-2.8.0.tgz",
|
||||
"integrity": "sha512-1/aa2clS0pue0HjckL62CsbhWWU35HARvBDXcJtYKbYR7LnIutmpxmXbuDMV9kEviD2lP/wACOgWmmwljghHyQ==",
|
||||
"requires": {
|
||||
"semver": "^5.4.1"
|
||||
}
|
||||
@@ -1939,13 +1970,13 @@
|
||||
}
|
||||
},
|
||||
"node-pre-gyp": {
|
||||
"version": "0.10.2",
|
||||
"resolved": "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.10.2.tgz",
|
||||
"integrity": "sha512-16lql9QTqs6KsB9fl3neWyZm02KxIKdI9FlJjrB0y7eMTP5Nyz+xalwPbOlw3iw7EejllJPmlJSnY711PLD1ug==",
|
||||
"version": "0.11.0",
|
||||
"resolved": "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.11.0.tgz",
|
||||
"integrity": "sha512-TwWAOZb0j7e9eGaf9esRx3ZcLaE5tQ2lvYy1pb5IAaG1a2e2Kv5Lms1Y4hpj+ciXJRofIxxlt5haeQ/2ANeE0Q==",
|
||||
"requires": {
|
||||
"detect-libc": "^1.0.2",
|
||||
"mkdirp": "^0.5.1",
|
||||
"needle": "^2.2.0",
|
||||
"needle": "^2.2.1",
|
||||
"nopt": "^4.0.1",
|
||||
"npm-packlist": "^1.1.6",
|
||||
"npmlog": "^4.0.2",
|
||||
@@ -1953,13 +1984,6 @@
|
||||
"rimraf": "^2.6.1",
|
||||
"semver": "^5.3.0",
|
||||
"tar": "^4"
|
||||
},
|
||||
"dependencies": {
|
||||
"detect-libc": {
|
||||
"version": "1.0.3",
|
||||
"resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz",
|
||||
"integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups="
|
||||
}
|
||||
}
|
||||
},
|
||||
"noop-logger": {
|
||||
@@ -1977,14 +2001,14 @@
|
||||
}
|
||||
},
|
||||
"npm-bundled": {
|
||||
"version": "1.0.3",
|
||||
"resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.0.3.tgz",
|
||||
"integrity": "sha512-ByQ3oJ/5ETLyglU2+8dBObvhfWXX8dtPZDMePCahptliFX2iIuhyEszyFk401PZUNQH20vvdW5MLjJxkwU80Ow=="
|
||||
"version": "1.0.6",
|
||||
"resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.0.6.tgz",
|
||||
"integrity": "sha512-8/JCaftHwbd//k6y2rEWp6k1wxVfpFzB6t1p825+cUb7Ym2XQfhwIC5KwhrvzZRJu+LtDE585zVaS32+CGtf0g=="
|
||||
},
|
||||
"npm-packlist": {
|
||||
"version": "1.1.10",
|
||||
"resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-1.1.10.tgz",
|
||||
"integrity": "sha512-AQC0Dyhzn4EiYEfIUjCdMl0JJ61I2ER9ukf/sLxJUcZHfo+VyEfz2rMJgLZSS1v30OxPQe1cN0LZA1xbcaVfWA==",
|
||||
"version": "1.4.1",
|
||||
"resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-1.4.1.tgz",
|
||||
"integrity": "sha512-+TcdO7HJJ8peiiYhvPxsEDhF3PJFGUGRcFsGve3vxvxdcpO2Z4Z7rkosRM0kWj6LfbK/P0gu3dzk5RU1ffvFcw==",
|
||||
"requires": {
|
||||
"ignore-walk": "^3.0.1",
|
||||
"npm-bundled": "^1.0.1"
|
||||
@@ -2007,9 +2031,9 @@
|
||||
"integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0="
|
||||
},
|
||||
"nwsapi": {
|
||||
"version": "2.0.9",
|
||||
"resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.0.9.tgz",
|
||||
"integrity": "sha512-nlWFSCTYQcHk/6A9FFnfhKc14c3aFhfdNBXgo8Qgi9QTBu/qg3Ww+Uiz9wMzXd1T8GFxPc2QIHB6Qtf2XFryFQ=="
|
||||
"version": "2.1.4",
|
||||
"resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.1.4.tgz",
|
||||
"integrity": "sha512-iGfd9Y6SFdTNldEy2L0GUhcarIutFmk+MPWIn9dmj8NMIup03G08uUF2KGbbmv/Ux4RT0VZJoP/sVbWA6d/VIw=="
|
||||
},
|
||||
"oauth-sign": {
|
||||
"version": "0.8.2",
|
||||
@@ -2187,21 +2211,22 @@
|
||||
"integrity": "sha1-EdHhK5y2TWPjDBQ6Mw9MH1Z9qF8="
|
||||
},
|
||||
"prebuild-install": {
|
||||
"version": "4.0.0",
|
||||
"resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-4.0.0.tgz",
|
||||
"integrity": "sha512-7tayxeYboJX0RbVzdnKyGl2vhQRWr6qfClEXDhOkXjuaOKCw2q8aiuFhONRYVsG/czia7KhpykIlI2S2VaPunA==",
|
||||
"version": "5.3.0",
|
||||
"resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-5.3.0.tgz",
|
||||
"integrity": "sha512-aaLVANlj4HgZweKttFNUVNRxDukytuIuxeK2boIMHjagNJCiVKWFsKF4tCE3ql3GbrD2tExPQ7/pwtEJcHNZeg==",
|
||||
"requires": {
|
||||
"detect-libc": "^1.0.3",
|
||||
"expand-template": "^1.0.2",
|
||||
"expand-template": "^2.0.3",
|
||||
"github-from-package": "0.0.0",
|
||||
"minimist": "^1.2.0",
|
||||
"mkdirp": "^0.5.1",
|
||||
"node-abi": "^2.2.0",
|
||||
"napi-build-utils": "^1.0.1",
|
||||
"node-abi": "^2.7.0",
|
||||
"noop-logger": "^0.1.1",
|
||||
"npmlog": "^4.0.1",
|
||||
"os-homedir": "^1.0.1",
|
||||
"pump": "^2.0.1",
|
||||
"rc": "^1.1.6",
|
||||
"rc": "^1.2.7",
|
||||
"simple-get": "^2.7.0",
|
||||
"tar-fs": "^1.13.0",
|
||||
"tunnel-agent": "^0.6.0",
|
||||
@@ -2212,6 +2237,16 @@
|
||||
"version": "1.2.0",
|
||||
"resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
|
||||
"integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ="
|
||||
},
|
||||
"simple-get": {
|
||||
"version": "2.8.1",
|
||||
"resolved": "https://registry.npmjs.org/simple-get/-/simple-get-2.8.1.tgz",
|
||||
"integrity": "sha512-lSSHRSw3mQNUGPAYRqo7xy9dhKmxFXIjLjp4KHpf99GEH2VH7C3AM+Qfx6du6jhfUi6Vm7XnbEVEf7Wb6N8jRw==",
|
||||
"requires": {
|
||||
"decompress-response": "^3.3.0",
|
||||
"once": "^1.3.1",
|
||||
"simple-concat": "^1.0.0"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -2377,21 +2412,28 @@
|
||||
}
|
||||
},
|
||||
"request-promise-core": {
|
||||
"version": "1.1.1",
|
||||
"resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.1.tgz",
|
||||
"integrity": "sha1-Pu4AssWqgyOc+wTFcA2jb4HNCLY=",
|
||||
"version": "1.1.2",
|
||||
"resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.2.tgz",
|
||||
"integrity": "sha512-UHYyq1MO8GsefGEt7EprS8UrXsm1TxEvFUX1IMTuSLU2Rh7fTIdFtl8xD7JiEYiWU2dl+NYAjCTksTehQUxPag==",
|
||||
"requires": {
|
||||
"lodash": "^4.13.1"
|
||||
"lodash": "^4.17.11"
|
||||
},
|
||||
"dependencies": {
|
||||
"lodash": {
|
||||
"version": "4.17.11",
|
||||
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz",
|
||||
"integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg=="
|
||||
}
|
||||
}
|
||||
},
|
||||
"request-promise-native": {
|
||||
"version": "1.0.5",
|
||||
"resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.5.tgz",
|
||||
"integrity": "sha1-UoF3D2jgyXGeUWP9P6tIIhX0/aU=",
|
||||
"version": "1.0.7",
|
||||
"resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.7.tgz",
|
||||
"integrity": "sha512-rIMnbBdgNViL37nZ1b3L/VfPOpSi0TqVDQPAvO6U14lMzOLrt5nilxCQqtDKhZeDiW0/hkCXGoQjhgJd/tCh6w==",
|
||||
"requires": {
|
||||
"request-promise-core": "1.1.1",
|
||||
"stealthy-require": "^1.1.0",
|
||||
"tough-cookie": ">=2.3.3"
|
||||
"request-promise-core": "1.1.2",
|
||||
"stealthy-require": "^1.1.1",
|
||||
"tough-cookie": "^2.3.3"
|
||||
}
|
||||
},
|
||||
"requires-port": {
|
||||
@@ -2443,50 +2485,63 @@
|
||||
"integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc="
|
||||
},
|
||||
"sharp": {
|
||||
"version": "0.20.8",
|
||||
"resolved": "https://registry.npmjs.org/sharp/-/sharp-0.20.8.tgz",
|
||||
"integrity": "sha512-A8NaPGWRDKpmHTi8sl2xzozYXhTQWBb/GaJ8ZPU7L/vKW8wVvd4Yq+isJ0c7p9sX5gnjPQcM3eOfHuvvnZ2fOQ==",
|
||||
"version": "0.22.1",
|
||||
"resolved": "https://registry.npmjs.org/sharp/-/sharp-0.22.1.tgz",
|
||||
"integrity": "sha512-lXzSk/FL5b/MpWrT1pQZneKe25stVjEbl6uhhJcTULm7PhmJgKKRbTDM/vtjyUuC/RLqL2PRyC4rpKwbv3soEw==",
|
||||
"requires": {
|
||||
"color": "^3.0.0",
|
||||
"color": "^3.1.1",
|
||||
"detect-libc": "^1.0.3",
|
||||
"fs-copy-file-sync": "^1.1.1",
|
||||
"nan": "^2.11.0",
|
||||
"nan": "^2.13.2",
|
||||
"npmlog": "^4.1.2",
|
||||
"prebuild-install": "^4.0.0",
|
||||
"semver": "^5.5.1",
|
||||
"simple-get": "^2.8.1",
|
||||
"tar": "^4.4.6",
|
||||
"prebuild-install": "^5.3.0",
|
||||
"semver": "^6.0.0",
|
||||
"simple-get": "^3.0.3",
|
||||
"tar": "^4.4.8",
|
||||
"tunnel-agent": "^0.6.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"chownr": {
|
||||
"version": "1.1.1",
|
||||
"resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.1.tgz",
|
||||
"integrity": "sha512-j38EvO5+LHX84jlo6h4UzmOwi0UgW61WRyPtJz4qaadK5eY3BTS5TY/S1Stc3Uk2lIM6TPevAlULiEJwie860g=="
|
||||
},
|
||||
"minipass": {
|
||||
"version": "2.3.4",
|
||||
"resolved": "https://registry.npmjs.org/minipass/-/minipass-2.3.4.tgz",
|
||||
"integrity": "sha512-mlouk1OHlaUE8Odt1drMtG1bAJA4ZA6B/ehysgV0LUIrDHdKgo1KorZq3pK0b/7Z7LJIQ12MNM6aC+Tn6lUZ5w==",
|
||||
"version": "2.3.5",
|
||||
"resolved": "https://registry.npmjs.org/minipass/-/minipass-2.3.5.tgz",
|
||||
"integrity": "sha512-Gi1W4k059gyRbyVUZQ4mEqLm0YIUiGYfvxhF6SIlk3ui1WVxMTGfGdQ2SInh3PDrRTVvPKgULkpJtT4RH10+VA==",
|
||||
"requires": {
|
||||
"safe-buffer": "^5.1.2",
|
||||
"yallist": "^3.0.0"
|
||||
}
|
||||
},
|
||||
"minizlib": {
|
||||
"version": "1.2.1",
|
||||
"resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.2.1.tgz",
|
||||
"integrity": "sha512-7+4oTUOWKg7AuL3vloEWekXY2/D20cevzsrNT2kGWm+39J9hGTCBv8VI5Pm5lXZ/o3/mdR4f8rflAPhnQb8mPA==",
|
||||
"requires": {
|
||||
"minipass": "^2.2.1"
|
||||
}
|
||||
},
|
||||
"safe-buffer": {
|
||||
"version": "5.1.2",
|
||||
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
|
||||
"integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
|
||||
},
|
||||
"semver": {
|
||||
"version": "5.5.1",
|
||||
"resolved": "https://registry.npmjs.org/semver/-/semver-5.5.1.tgz",
|
||||
"integrity": "sha512-PqpAxfrEhlSUWge8dwIp4tZnQ25DIOthpiaHNIthsjEFQD6EvqUKUDM7L8O2rShkFccYo1VjJR0coWfNkCubRw=="
|
||||
"version": "6.0.0",
|
||||
"resolved": "https://registry.npmjs.org/semver/-/semver-6.0.0.tgz",
|
||||
"integrity": "sha512-0UewU+9rFapKFnlbirLi3byoOuhrSsli/z/ihNnvM24vgF+8sNBiI1LZPBSH9wJKUwaUbw+s3hToDLCXkrghrQ=="
|
||||
},
|
||||
"tar": {
|
||||
"version": "4.4.6",
|
||||
"resolved": "https://registry.npmjs.org/tar/-/tar-4.4.6.tgz",
|
||||
"integrity": "sha512-tMkTnh9EdzxyfW+6GK6fCahagXsnYk6kE6S9Gr9pjVdys769+laCTbodXDhPAjzVtEBazRgP0gYqOjnk9dQzLg==",
|
||||
"version": "4.4.8",
|
||||
"resolved": "https://registry.npmjs.org/tar/-/tar-4.4.8.tgz",
|
||||
"integrity": "sha512-LzHF64s5chPQQS0IYBn9IN5h3i98c12bo4NCO7e0sGM2llXQ3p2FGC5sdENN4cTW48O915Sh+x+EXx7XW96xYQ==",
|
||||
"requires": {
|
||||
"chownr": "^1.0.1",
|
||||
"chownr": "^1.1.1",
|
||||
"fs-minipass": "^1.2.5",
|
||||
"minipass": "^2.3.3",
|
||||
"minizlib": "^1.1.0",
|
||||
"minipass": "^2.3.4",
|
||||
"minizlib": "^1.1.1",
|
||||
"mkdirp": "^0.5.0",
|
||||
"safe-buffer": "^5.1.2",
|
||||
"yallist": "^3.0.2"
|
||||
@@ -2505,9 +2560,9 @@
|
||||
"integrity": "sha1-c0TLuLbib7J9ZrL8hvn21Zl1IcY="
|
||||
},
|
||||
"simple-get": {
|
||||
"version": "2.8.1",
|
||||
"resolved": "https://registry.npmjs.org/simple-get/-/simple-get-2.8.1.tgz",
|
||||
"integrity": "sha512-lSSHRSw3mQNUGPAYRqo7xy9dhKmxFXIjLjp4KHpf99GEH2VH7C3AM+Qfx6du6jhfUi6Vm7XnbEVEf7Wb6N8jRw==",
|
||||
"version": "3.0.3",
|
||||
"resolved": "https://registry.npmjs.org/simple-get/-/simple-get-3.0.3.tgz",
|
||||
"integrity": "sha512-Wvre/Jq5vgoz31Z9stYWPLn0PqRqmBDpFSdypAnHu5AvRVCYPRYGnvryNLiXu8GOBNDH82J2FRHUGMjjHUpXFw==",
|
||||
"requires": {
|
||||
"decompress-response": "^3.3.0",
|
||||
"once": "^1.3.1",
|
||||
@@ -2554,18 +2609,136 @@
|
||||
"integrity": "sha1-Nr54Mgr+WAH2zqPueLblqrlA6gw="
|
||||
},
|
||||
"sqlite3": {
|
||||
"version": "4.0.1",
|
||||
"resolved": "https://registry.npmjs.org/sqlite3/-/sqlite3-4.0.1.tgz",
|
||||
"integrity": "sha512-i8LtU2fdEGFEt4Kcs7eNjYdGmnAQ8zWlaOv6Esbq/jfVfR0Qbn/1dgVyKebrMc2zN7h3oHsqla9zq7AJ0+34ZA==",
|
||||
"version": "4.0.7",
|
||||
"resolved": "https://registry.npmjs.org/sqlite3/-/sqlite3-4.0.7.tgz",
|
||||
"integrity": "sha512-TGEeSBB8O48bEu8KUUMqzeB22WrfTxzhIf0lFm8wLTo3a6yJBonF2sPKMYrYtOne1F1t9AHAEn+DTISq8WebQg==",
|
||||
"requires": {
|
||||
"nan": "~2.10.0",
|
||||
"node-pre-gyp": "~0.10.1"
|
||||
"nan": "^2.12.1",
|
||||
"node-pre-gyp": "^0.11.0",
|
||||
"request": "^2.87.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"nan": {
|
||||
"version": "2.10.0",
|
||||
"resolved": "https://registry.npmjs.org/nan/-/nan-2.10.0.tgz",
|
||||
"integrity": "sha512-bAdJv7fBLhWC+/Bls0Oza+mvTaNQtP+1RyhhhvD95pgUJz6XM5IzgmxOkItJ9tkoCiplvAnXI1tNmmUD/eScyA=="
|
||||
"ajv": {
|
||||
"version": "6.10.0",
|
||||
"resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.0.tgz",
|
||||
"integrity": "sha512-nffhOpkymDECQyR0mnsUtoCE8RlX38G0rYP+wgLWFyZuUyuuojSSvi/+euOiQBIn63whYwYVIIH1TvE3tu4OEg==",
|
||||
"requires": {
|
||||
"fast-deep-equal": "^2.0.1",
|
||||
"fast-json-stable-stringify": "^2.0.0",
|
||||
"json-schema-traverse": "^0.4.1",
|
||||
"uri-js": "^4.2.2"
|
||||
}
|
||||
},
|
||||
"aws4": {
|
||||
"version": "1.8.0",
|
||||
"resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz",
|
||||
"integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ=="
|
||||
},
|
||||
"combined-stream": {
|
||||
"version": "1.0.7",
|
||||
"resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.7.tgz",
|
||||
"integrity": "sha512-brWl9y6vOB1xYPZcpZde3N9zDByXTosAeMDo4p1wzo6UMOX4vumB+TP1RZ76sfE6Md68Q0NJSrE/gbezd4Ul+w==",
|
||||
"requires": {
|
||||
"delayed-stream": "~1.0.0"
|
||||
}
|
||||
},
|
||||
"extend": {
|
||||
"version": "3.0.2",
|
||||
"resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
|
||||
"integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g=="
|
||||
},
|
||||
"fast-deep-equal": {
|
||||
"version": "2.0.1",
|
||||
"resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz",
|
||||
"integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk="
|
||||
},
|
||||
"form-data": {
|
||||
"version": "2.3.3",
|
||||
"resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz",
|
||||
"integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==",
|
||||
"requires": {
|
||||
"asynckit": "^0.4.0",
|
||||
"combined-stream": "^1.0.6",
|
||||
"mime-types": "^2.1.12"
|
||||
}
|
||||
},
|
||||
"har-validator": {
|
||||
"version": "5.1.3",
|
||||
"resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz",
|
||||
"integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==",
|
||||
"requires": {
|
||||
"ajv": "^6.5.5",
|
||||
"har-schema": "^2.0.0"
|
||||
}
|
||||
},
|
||||
"json-schema-traverse": {
|
||||
"version": "0.4.1",
|
||||
"resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
|
||||
"integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg=="
|
||||
},
|
||||
"mime-db": {
|
||||
"version": "1.40.0",
|
||||
"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.40.0.tgz",
|
||||
"integrity": "sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA=="
|
||||
},
|
||||
"mime-types": {
|
||||
"version": "2.1.24",
|
||||
"resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.24.tgz",
|
||||
"integrity": "sha512-WaFHS3MCl5fapm3oLxU4eYDw77IQM2ACcxQ9RIxfaC3ooc6PFuBMGZZsYpvoXS5D5QTWPieo1jjLdAm3TBP3cQ==",
|
||||
"requires": {
|
||||
"mime-db": "1.40.0"
|
||||
}
|
||||
},
|
||||
"oauth-sign": {
|
||||
"version": "0.9.0",
|
||||
"resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz",
|
||||
"integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ=="
|
||||
},
|
||||
"request": {
|
||||
"version": "2.88.0",
|
||||
"resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz",
|
||||
"integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==",
|
||||
"requires": {
|
||||
"aws-sign2": "~0.7.0",
|
||||
"aws4": "^1.8.0",
|
||||
"caseless": "~0.12.0",
|
||||
"combined-stream": "~1.0.6",
|
||||
"extend": "~3.0.2",
|
||||
"forever-agent": "~0.6.1",
|
||||
"form-data": "~2.3.2",
|
||||
"har-validator": "~5.1.0",
|
||||
"http-signature": "~1.2.0",
|
||||
"is-typedarray": "~1.0.0",
|
||||
"isstream": "~0.1.2",
|
||||
"json-stringify-safe": "~5.0.1",
|
||||
"mime-types": "~2.1.19",
|
||||
"oauth-sign": "~0.9.0",
|
||||
"performance-now": "^2.1.0",
|
||||
"qs": "~6.5.2",
|
||||
"safe-buffer": "^5.1.2",
|
||||
"tough-cookie": "~2.4.3",
|
||||
"tunnel-agent": "^0.6.0",
|
||||
"uuid": "^3.3.2"
|
||||
}
|
||||
},
|
||||
"safe-buffer": {
|
||||
"version": "5.1.2",
|
||||
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
|
||||
"integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
|
||||
},
|
||||
"tough-cookie": {
|
||||
"version": "2.4.3",
|
||||
"resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz",
|
||||
"integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==",
|
||||
"requires": {
|
||||
"psl": "^1.1.24",
|
||||
"punycode": "^1.4.1"
|
||||
}
|
||||
},
|
||||
"uuid": {
|
||||
"version": "3.3.2",
|
||||
"resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz",
|
||||
"integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA=="
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -2687,9 +2860,9 @@
|
||||
"integrity": "sha1-Kb9hXUqnEhvdiYsi1LP5vE4qoD0="
|
||||
},
|
||||
"symbol-tree": {
|
||||
"version": "3.2.2",
|
||||
"resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.2.tgz",
|
||||
"integrity": "sha1-rifbOPZgp64uHDt9G8KQgZuFGeY="
|
||||
"version": "3.2.4",
|
||||
"resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz",
|
||||
"integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw=="
|
||||
},
|
||||
"syswide-cas": {
|
||||
"version": "5.2.0",
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
],
|
||||
"owner": "Laurent Cozic"
|
||||
},
|
||||
"version": "1.0.123",
|
||||
"version": "1.0.140",
|
||||
"bin": {
|
||||
"joplin": "./main.js"
|
||||
},
|
||||
@@ -33,7 +33,9 @@
|
||||
"base-64": "^0.1.0",
|
||||
"compare-version": "^0.1.2",
|
||||
"diacritics": "^1.3.0",
|
||||
"diff-match-patch": "^1.0.4",
|
||||
"es6-promise-pool": "^2.5.0",
|
||||
"file-uri-to-path": "^1.0.0",
|
||||
"follow-redirects": "^1.2.4",
|
||||
"form-data": "^2.1.4",
|
||||
"fs-extra": "^5.0.0",
|
||||
@@ -41,8 +43,8 @@
|
||||
"html-minifier": "^3.5.15",
|
||||
"image-data-uri": "^2.0.0",
|
||||
"image-type": "^3.0.0",
|
||||
"joplin-turndown": "^4.0.11",
|
||||
"joplin-turndown-plugin-gfm": "^1.0.7",
|
||||
"joplin-turndown": "^4.0.12",
|
||||
"joplin-turndown-plugin-gfm": "^1.0.8",
|
||||
"jssha": "^2.3.0",
|
||||
"levenshtein": "^1.0.5",
|
||||
"lodash": "^4.17.4",
|
||||
@@ -60,9 +62,9 @@
|
||||
"redux": "^3.7.2",
|
||||
"sax": "^1.2.2",
|
||||
"server-destroy": "^1.0.1",
|
||||
"sharp": "^0.20.8",
|
||||
"sharp": "^0.22.1",
|
||||
"sprintf-js": "^1.1.1",
|
||||
"sqlite3": "^4.0.1",
|
||||
"sqlite3": "^4.0.7",
|
||||
"string-padding": "^1.0.2",
|
||||
"string-to-stream": "^1.1.0",
|
||||
"strip-ansi": "^4.0.0",
|
||||
|
||||
@@ -3,5 +3,4 @@ set -e
|
||||
CLIENT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
|
||||
|
||||
bash "$CLIENT_DIR/build.sh" && node "$CLIENT_DIR/build/main.js" --profile ~/Temp/TestNotes2 --stack-trace-enabled --log-level debug --env dev "$@"
|
||||
|
||||
# bash $CLIENT_DIR/build.sh && NODE_PATH="$CLIENT_DIR/build/" node build/main.js --profile ~/.config/joplin --stack-trace-enabled --log-level debug "$@"
|
||||
# bash "$CLIENT_DIR/build.sh" && node "$CLIENT_DIR/build/main.js" --profile ~/.config/joplin --stack-trace-enabled --log-level debug --env dev "$@"
|
||||
@@ -31,13 +31,17 @@ npm test tests-build/models_Folder.js
|
||||
npm test tests-build/models_ItemChange.js
|
||||
npm test tests-build/models_Note.js
|
||||
npm test tests-build/models_Resource.js
|
||||
npm test tests-build/models_Revision.js
|
||||
npm test tests-build/models_Setting.js
|
||||
npm test tests-build/models_Tag.js
|
||||
npm test tests-build/pathUtils.js
|
||||
npm test tests-build/services_InteropService.js
|
||||
npm test tests-build/services_KvStore.js
|
||||
npm test tests-build/services_ResourceService.js
|
||||
npm test tests-build/services_rest_Api.js
|
||||
npm test tests-build/services_SearchEngine.js
|
||||
npm test tests-build/services_Revision.js
|
||||
npm test tests-build/StringUtils.js
|
||||
npm test tests-build/TaskQueue.js
|
||||
npm test tests-build/synchronizer.js
|
||||
npm test tests-build/urlUtils.js
|
||||
@@ -35,7 +35,7 @@ describe('EnexToMd', function() {
|
||||
const htmlPath = basePath + '/' + htmlFilename;
|
||||
const mdPath = basePath + '/' + filename(htmlFilename) + '.md';
|
||||
|
||||
// if (htmlFilename !== 'text2.html') continue;
|
||||
// if (htmlFilename !== 'list5.html') continue;
|
||||
|
||||
const html = await shim.fsDriver().readFile(htmlPath);
|
||||
let expectedMd = await shim.fsDriver().readFile(mdPath);
|
||||
|
||||
@@ -37,12 +37,22 @@ describe('HtmlToMd', function() {
|
||||
const htmlPath = basePath + '/' + htmlFilename;
|
||||
const mdPath = basePath + '/' + filename(htmlFilename) + '.md';
|
||||
|
||||
// if (htmlFilename !== 'picture.html') continue;
|
||||
// if (htmlFilename !== 'anchor_local.html') continue;
|
||||
|
||||
const htmlToMdOptions = {}
|
||||
|
||||
if (htmlFilename === 'anchor_local.html') {
|
||||
// Normally the list of anchor names in the document are retrieved from the HTML code
|
||||
// This is straightforward when the document is still in DOM format, as with the clipper,
|
||||
// but otherwise it would need to be somehow parsed out from the HTML. Here we just
|
||||
// hard code the anchors that we know are in the file.
|
||||
htmlToMdOptions.anchorNames = ['first', 'second']
|
||||
}
|
||||
|
||||
const html = await shim.fsDriver().readFile(htmlPath);
|
||||
let expectedMd = await shim.fsDriver().readFile(mdPath);
|
||||
|
||||
let actualMd = await htmlToMd.parse('<div>' + html + '</div>', []);
|
||||
let actualMd = await htmlToMd.parse('<div>' + html + '</div>', htmlToMdOptions);
|
||||
|
||||
if (os.EOL === '\r\n') {
|
||||
expectedMd = expectedMd.replace(/\r\n/g, '\n')
|
||||
|
||||
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');
|
||||
}));
|
||||
|
||||
});
|
||||
@@ -25,8 +25,7 @@ describe('Encryption', function() {
|
||||
|
||||
beforeEach(async (done) => {
|
||||
await setupDatabaseAndSynchronizer(1);
|
||||
//await setupDatabaseAndSynchronizer(2);
|
||||
//await switchClient(1);
|
||||
await switchClient(1);
|
||||
service = new EncryptionService();
|
||||
BaseItem.encryptionService_ = service;
|
||||
Setting.setValue('encryption.enabled', true);
|
||||
|
||||
16
CliClient/tests/enex_to_md/list5.html
Normal file
16
CliClient/tests/enex_to_md/list5.html
Normal file
@@ -0,0 +1,16 @@
|
||||
<ul>
|
||||
<li lang="en-US">
|
||||
<div>Protocols</div>
|
||||
</li>
|
||||
<ul type="circle">
|
||||
<li lang="en-US">
|
||||
<div>two common network protocols used to send data packets over a network</div>
|
||||
</li>
|
||||
<li lang="en-US">
|
||||
<div>TCP Transmission control protocol</div>
|
||||
</li>
|
||||
</ul>
|
||||
<li lang="en-US">
|
||||
<div>Network port - a network port is a process-specific or an application-specific software construct serving as a communication endpoint, which is used by the Transport Layer protocols of Internet Protocol suite, such as UDP and TCP</div>
|
||||
</li>
|
||||
</ul>
|
||||
7
CliClient/tests/enex_to_md/list5.md
Normal file
7
CliClient/tests/enex_to_md/list5.md
Normal file
@@ -0,0 +1,7 @@
|
||||
- Protocols
|
||||
|
||||
- two common network protocols used to send data packets over a network
|
||||
|
||||
- TCP Transmission control protocol
|
||||
|
||||
- Network port - a network port is a process-specific or an application-specific software construct serving as a communication endpoint, which is used by the Transport Layer protocols of Internet Protocol suite, such as UDP and TCP
|
||||
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)
|
||||
6
CliClient/tests/html_to_md/anchor_local.html
Normal file
6
CliClient/tests/html_to_md/anchor_local.html
Normal file
@@ -0,0 +1,6 @@
|
||||
<p><a href="#first">First</a></p>
|
||||
<p><a href="#second">Second</a></p>
|
||||
<p>Third</p>
|
||||
<p><a name="first"></a>First</p>
|
||||
<p><a id="second"></a>Second</p>
|
||||
<p><a id="third"></a>Third</p>
|
||||
11
CliClient/tests/html_to_md/anchor_local.md
Normal file
11
CliClient/tests/html_to_md/anchor_local.md
Normal file
@@ -0,0 +1,11 @@
|
||||
[First](#first)
|
||||
|
||||
[Second](#second)
|
||||
|
||||
Third
|
||||
|
||||
<a id="first"></a>First
|
||||
|
||||
<a id="second"></a>Second
|
||||
|
||||
Third
|
||||
@@ -1 +1 @@
|
||||
<a href="https://joplin.cozic.net"><h1 id="joplin"><img class="title-icon" src="https://joplin.cozic.net/images/Icon512.png">oplin</h1></a>
|
||||
<a href="https://joplinapp.org"><h1 id="joplin"><img class="title-icon" src="https://joplinapp.org/images/Icon512.png">oplin</h1></a>
|
||||
@@ -1 +1 @@
|
||||
[# oplin](https://joplin.cozic.net)
|
||||
[# oplin](https://joplinapp.org)
|
||||
@@ -1 +1 @@
|
||||
[Some text]()
|
||||
Some text
|
||||
42
CliClient/tests/html_to_md/table_with_empty_header.html
Normal file
42
CliClient/tests/html_to_md/table_with_empty_header.html
Normal file
@@ -0,0 +1,42 @@
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th></th>
|
||||
<th></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td><strong>Official Things</strong></td>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://nim-lang.org">Web Site</a></td>
|
||||
<td>The project’s entry point</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://github.com/nim-lang/nim">Source</a></td>
|
||||
<td>The github project</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://github.com/nim-lang/nimble">nimble</a></td>
|
||||
<td>The nim package manager</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://github.com/dom96/choosenim">choosenim</a></td>
|
||||
<td>Toolchain installer</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td> </td>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><strong>Community</strong></td>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://forum.nim-lang.org">Forums</a></td>
|
||||
<td>An async discussion board</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
9
CliClient/tests/html_to_md/table_with_empty_header.md
Normal file
9
CliClient/tests/html_to_md/table_with_empty_header.md
Normal file
@@ -0,0 +1,9 @@
|
||||
| | |
|
||||
| --- | --- |
|
||||
| **Official Things** | |
|
||||
| [Web Site](https://nim-lang.org) | The project’s entry point |
|
||||
| [Source](https://github.com/nim-lang/nim) | The github project |
|
||||
| [nimble](https://github.com/nim-lang/nimble) | The nim package manager |
|
||||
| [choosenim](https://github.com/dom96/choosenim) | Toolchain installer |
|
||||
| **Community** | |
|
||||
| [Forums](https://forum.nim-lang.org) | An async discussion board |
|
||||
@@ -47,5 +47,20 @@ describe('models_BaseItem', function() {
|
||||
|
||||
expect('ignore_me' in unserialized).toBe(false);
|
||||
}));
|
||||
|
||||
it('should not modify title when unserializing', asyncTest(async () => {
|
||||
let folder1 = await Folder.save({ title: "" });
|
||||
let folder2 = await Folder.save({ title: "folder1" });
|
||||
|
||||
let serialized1 = await Folder.serialize(folder1);
|
||||
let unserialized1 = await Folder.unserialize(serialized1);
|
||||
|
||||
expect(unserialized1.title).toBe(folder1.title);
|
||||
|
||||
let serialized2 = await Folder.serialize(folder2);
|
||||
let unserialized2 = await Folder.unserialize(serialized2);
|
||||
|
||||
expect(unserialized2.title).toBe(folder2.title);
|
||||
}));
|
||||
|
||||
});
|
||||
@@ -52,4 +52,77 @@ describe('models_Folder', function() {
|
||||
expect(all.length).toBe(0);
|
||||
}));
|
||||
|
||||
it('should sort by last modified, based on content', asyncTest(async () => {
|
||||
let folders;
|
||||
|
||||
let f1 = await Folder.save({ title: "folder1" }); await sleep(0.1);
|
||||
let f2 = await Folder.save({ title: "folder2" }); await sleep(0.1);
|
||||
let f3 = await Folder.save({ title: "folder3" }); await sleep(0.1);
|
||||
let n1 = await Note.save({ title: 'note1', parent_id: f2.id });
|
||||
|
||||
folders = await Folder.orderByLastModified(await Folder.all(), 'desc');
|
||||
expect(folders.length).toBe(3);
|
||||
expect(folders[0].id).toBe(f2.id);
|
||||
expect(folders[1].id).toBe(f3.id);
|
||||
expect(folders[2].id).toBe(f1.id);
|
||||
|
||||
let n2 = await Note.save({ title: 'note1', parent_id: f1.id });
|
||||
|
||||
folders = await Folder.orderByLastModified(await Folder.all(), 'desc');
|
||||
expect(folders[0].id).toBe(f1.id);
|
||||
expect(folders[1].id).toBe(f2.id);
|
||||
expect(folders[2].id).toBe(f3.id);
|
||||
|
||||
await Note.save({ id: n1.id, title: 'note1 mod' });
|
||||
|
||||
folders = await Folder.orderByLastModified(await Folder.all(), 'desc');
|
||||
expect(folders[0].id).toBe(f2.id);
|
||||
expect(folders[1].id).toBe(f1.id);
|
||||
expect(folders[2].id).toBe(f3.id);
|
||||
|
||||
folders = await Folder.orderByLastModified(await Folder.all(), 'asc');
|
||||
expect(folders[0].id).toBe(f3.id);
|
||||
expect(folders[1].id).toBe(f1.id);
|
||||
expect(folders[2].id).toBe(f2.id);
|
||||
}));
|
||||
|
||||
it('should sort by last modified, based on content (sub-folders too)', asyncTest(async () => {
|
||||
let folders;
|
||||
|
||||
let f1 = await Folder.save({ title: "folder1" }); await sleep(0.1);
|
||||
let f2 = await Folder.save({ title: "folder2" }); await sleep(0.1);
|
||||
let f3 = await Folder.save({ title: "folder3", parent_id: f1.id }); await sleep(0.1);
|
||||
let n1 = await Note.save({ title: 'note1', parent_id: f3.id });
|
||||
|
||||
folders = await Folder.orderByLastModified(await Folder.all(), 'desc');
|
||||
expect(folders.length).toBe(3);
|
||||
expect(folders[0].id).toBe(f1.id);
|
||||
expect(folders[1].id).toBe(f3.id);
|
||||
expect(folders[2].id).toBe(f2.id);
|
||||
|
||||
let n2 = await Note.save({ title: 'note2', parent_id: f2.id });
|
||||
folders = await Folder.orderByLastModified(await Folder.all(), 'desc');
|
||||
|
||||
expect(folders[0].id).toBe(f2.id);
|
||||
expect(folders[1].id).toBe(f1.id);
|
||||
expect(folders[2].id).toBe(f3.id);
|
||||
|
||||
await Note.save({ id: n1.id, title: 'note1 MOD' });
|
||||
|
||||
folders = await Folder.orderByLastModified(await Folder.all(), 'desc');
|
||||
expect(folders[0].id).toBe(f1.id);
|
||||
expect(folders[1].id).toBe(f3.id);
|
||||
expect(folders[2].id).toBe(f2.id);
|
||||
|
||||
let f4 = await Folder.save({ title: "folder4", parent_id: f1.id }); await sleep(0.1);
|
||||
let n3 = await Note.save({ title: 'note3', parent_id: f4.id });
|
||||
|
||||
folders = await Folder.orderByLastModified(await Folder.all(), 'desc');
|
||||
expect(folders.length).toBe(4);
|
||||
expect(folders[0].id).toBe(f1.id);
|
||||
expect(folders[1].id).toBe(f4.id);
|
||||
expect(folders[2].id).toBe(f3.id);
|
||||
expect(folders[3].id).toBe(f2.id);
|
||||
}));
|
||||
|
||||
});
|
||||
@@ -1,7 +1,7 @@
|
||||
require('app-module-path').addPath(__dirname);
|
||||
|
||||
const { time } = require('lib/time-utils.js');
|
||||
const { asyncTest, fileContentEqual, setupDatabase, setupDatabaseAndSynchronizer, db, synchronizer, fileApi, sleep, clearDatabase, switchClient, syncTargetId, objectsEqual, checkThrowAsync } = require('test-utils.js');
|
||||
const { asyncTest, fileContentEqual, revisionService, setupDatabase, setupDatabaseAndSynchronizer, db, synchronizer, fileApi, sleep, clearDatabase, switchClient, syncTargetId, objectsEqual, checkThrowAsync } = require('test-utils.js');
|
||||
const SearchEngine = require('lib/services/SearchEngine');
|
||||
const ResourceService = require('lib/services/ResourceService');
|
||||
const ItemChangeUtils = require('lib/services/ItemChangeUtils');
|
||||
@@ -34,19 +34,17 @@ describe('models_ItemChange', function() {
|
||||
const resourceService = new ResourceService();
|
||||
|
||||
await searchEngine.syncTables();
|
||||
|
||||
// If we run this now, it should not delete any change because
|
||||
// the resource service has not yet processed the change
|
||||
await ItemChangeUtils.deleteProcessedChanges();
|
||||
|
||||
expect(await ItemChange.lastChangeId()).toBe(1);
|
||||
|
||||
await resourceService.indexNoteResources();
|
||||
|
||||
// Now that the resource service has processed the change,
|
||||
// the change can be deleted.
|
||||
await ItemChangeUtils.deleteProcessedChanges();
|
||||
expect(await ItemChange.lastChangeId()).toBe(1);
|
||||
|
||||
await revisionService().collectRevisions();
|
||||
await ItemChangeUtils.deleteProcessedChanges();
|
||||
expect(await ItemChange.lastChangeId()).toBe(0);
|
||||
}));
|
||||
|
||||
|
||||
@@ -86,5 +86,32 @@ describe('models_Note', function() {
|
||||
expect(changedNote === note1).toBe(false);
|
||||
expect(!!changedNote.is_todo).toBe(false);
|
||||
}));
|
||||
|
||||
it('should serialize and unserialize without modifying data', asyncTest(async () => {
|
||||
let folder1 = await Folder.save({ title: "folder1"});
|
||||
const testCases = [
|
||||
[ {title: '', body:'Body and no title\nSecond line\nThird Line', parent_id: folder1.id},
|
||||
'', 'Body and no title\nSecond line\nThird Line'],
|
||||
[ {title: 'Note title', body:'Body and title', parent_id: folder1.id},
|
||||
'Note title', 'Body and title'],
|
||||
[ {title: 'Title and no body', body:'', parent_id: folder1.id},
|
||||
'Title and no body', ''],
|
||||
]
|
||||
|
||||
for (let i = 0; i < testCases.length; i++) {
|
||||
const t = testCases[i];
|
||||
|
||||
const input = t[0];
|
||||
const expectedTitle = t[1];
|
||||
const expectedBody = t[1];
|
||||
|
||||
let note1 = await Note.save(input);
|
||||
let serialized = await Note.serialize(note1);
|
||||
let unserialized = await Note.unserialize( serialized);
|
||||
|
||||
expect(unserialized.title).toBe(input.title);
|
||||
expect(unserialized.body).toBe(input.body);
|
||||
}
|
||||
}));
|
||||
|
||||
});
|
||||
@@ -8,10 +8,14 @@ const Resource = require('lib/models/Resource.js');
|
||||
const BaseModel = require('lib/BaseModel.js');
|
||||
const { shim } = require('lib/shim');
|
||||
|
||||
jasmine.DEFAULT_TIMEOUT_INTERVAL = 15000; // The first test is slow because the database needs to be built
|
||||
|
||||
process.on('unhandledRejection', (reason, p) => {
|
||||
console.log('Unhandled Rejection at: Promise', p, 'reason:', reason);
|
||||
});
|
||||
|
||||
const testImagePath = __dirname + '/../tests/support/photo.jpg';
|
||||
|
||||
describe('models_Resource', function() {
|
||||
|
||||
beforeEach(async (done) => {
|
||||
@@ -23,7 +27,7 @@ describe('models_Resource', function() {
|
||||
it('should have a "done" fetch_status when created locally', asyncTest(async () => {
|
||||
let folder1 = await Folder.save({ title: "folder1" });
|
||||
let note1 = await Note.save({ title: 'ma note', parent_id: folder1.id });
|
||||
await shim.attachFileToNote(note1, __dirname + '/../tests/support/photo.jpg');
|
||||
await shim.attachFileToNote(note1, testImagePath);
|
||||
let resource1 = (await Resource.all())[0];
|
||||
let ls = await Resource.localState(resource1);
|
||||
expect(ls.fetch_status).toBe(Resource.FETCH_STATUS_DONE);
|
||||
@@ -32,7 +36,7 @@ describe('models_Resource', function() {
|
||||
it('should have a default local state', asyncTest(async () => {
|
||||
let folder1 = await Folder.save({ title: "folder1" });
|
||||
let note1 = await Note.save({ title: 'ma note', parent_id: folder1.id });
|
||||
await shim.attachFileToNote(note1, __dirname + '/../tests/support/photo.jpg');
|
||||
await shim.attachFileToNote(note1, testImagePath);
|
||||
let resource1 = (await Resource.all())[0];
|
||||
let ls = await Resource.localState(resource1);
|
||||
expect(!ls.id).toBe(true);
|
||||
@@ -43,7 +47,7 @@ describe('models_Resource', function() {
|
||||
it('should save and delete local state', asyncTest(async () => {
|
||||
let folder1 = await Folder.save({ title: "folder1" });
|
||||
let note1 = await Note.save({ title: 'ma note', parent_id: folder1.id });
|
||||
await shim.attachFileToNote(note1, __dirname + '/../tests/support/photo.jpg');
|
||||
await shim.attachFileToNote(note1, testImagePath);
|
||||
let resource1 = (await Resource.all())[0];
|
||||
await Resource.setLocalState(resource1, { fetch_status: Resource.FETCH_STATUS_IDLE });
|
||||
|
||||
@@ -56,4 +60,31 @@ describe('models_Resource', function() {
|
||||
expect(!ls.id).toBe(true);
|
||||
}));
|
||||
|
||||
it('should resize the resource if the image is below the required dimensions', asyncTest(async () => {
|
||||
let folder1 = await Folder.save({ title: "folder1" });
|
||||
let note1 = await Note.save({ title: 'ma note', parent_id: folder1.id });
|
||||
const previousMax = Resource.IMAGE_MAX_DIMENSION;
|
||||
Resource.IMAGE_MAX_DIMENSION = 5;
|
||||
await shim.attachFileToNote(note1, testImagePath);
|
||||
Resource.IMAGE_MAX_DIMENSION = previousMax;
|
||||
let resource1 = (await Resource.all())[0];
|
||||
|
||||
const originalStat = await shim.fsDriver().stat(testImagePath);
|
||||
const newStat = await shim.fsDriver().stat(Resource.fullPath(resource1));
|
||||
|
||||
expect(newStat.size < originalStat.size).toBe(true);
|
||||
}));
|
||||
|
||||
it('should not resize the resource if the image is below the required dimensions', asyncTest(async () => {
|
||||
let folder1 = await Folder.save({ title: "folder1" });
|
||||
let note1 = await Note.save({ title: 'ma note', parent_id: folder1.id });
|
||||
await shim.attachFileToNote(note1, testImagePath);
|
||||
let resource1 = (await Resource.all())[0];
|
||||
|
||||
const originalStat = await shim.fsDriver().stat(testImagePath);
|
||||
const newStat = await shim.fsDriver().stat(Resource.fullPath(resource1));
|
||||
|
||||
expect(originalStat.size).toBe(newStat.size);
|
||||
}));
|
||||
|
||||
});
|
||||
104
CliClient/tests/models_Revision.js
Normal file
104
CliClient/tests/models_Revision.js
Normal file
@@ -0,0 +1,104 @@
|
||||
require('app-module-path').addPath(__dirname);
|
||||
|
||||
const { time } = require('lib/time-utils.js');
|
||||
const { asyncTest, fileContentEqual, setupDatabase, setupDatabaseAndSynchronizer, db, synchronizer, fileApi, sleep, clearDatabase, switchClient, syncTargetId, objectsEqual, checkThrowAsync } = require('test-utils.js');
|
||||
const Folder = require('lib/models/Folder.js');
|
||||
const Note = require('lib/models/Note.js');
|
||||
const NoteTag = require('lib/models/NoteTag.js');
|
||||
const Tag = require('lib/models/Tag.js');
|
||||
const Revision = require('lib/models/Revision.js');
|
||||
const BaseModel = require('lib/BaseModel.js');
|
||||
const { shim } = require('lib/shim');
|
||||
|
||||
process.on('unhandledRejection', (reason, p) => {
|
||||
console.log('Unhandled Rejection at: Promise', p, 'reason:', reason);
|
||||
});
|
||||
|
||||
describe('models_Revision', function() {
|
||||
|
||||
beforeEach(async (done) => {
|
||||
await setupDatabaseAndSynchronizer(1);
|
||||
await switchClient(1);
|
||||
done();
|
||||
});
|
||||
|
||||
it('should create patches of text and apply it', asyncTest(async () => {
|
||||
const note1 = await Note.save({ body: 'my note\nsecond line' });
|
||||
|
||||
const patch = Revision.createTextPatch(note1.body, 'my new note\nsecond line');
|
||||
const merged = Revision.applyTextPatch(note1.body, patch);
|
||||
|
||||
expect(merged).toBe('my new note\nsecond line');
|
||||
}));
|
||||
|
||||
it('should create patches of objects and apply it', asyncTest(async () => {
|
||||
const oldObject = {
|
||||
one: '123',
|
||||
two: '456',
|
||||
three: '789',
|
||||
};
|
||||
|
||||
const newObject = {
|
||||
one: '123',
|
||||
three: '999',
|
||||
}
|
||||
|
||||
const patch = Revision.createObjectPatch(oldObject, newObject);
|
||||
const merged = Revision.applyObjectPatch(oldObject, patch);
|
||||
|
||||
expect(JSON.stringify(merged)).toBe(JSON.stringify(newObject));
|
||||
}));
|
||||
|
||||
it('should move target revision to the top', asyncTest(async () => {
|
||||
const revs = [
|
||||
{ id: '123' },
|
||||
{ id: '456' },
|
||||
{ id: '789' },
|
||||
];
|
||||
|
||||
let newRevs;
|
||||
newRevs = Revision.moveRevisionToTop({ id: '456' }, revs);
|
||||
expect(newRevs[0].id).toBe('123');
|
||||
expect(newRevs[1].id).toBe('789');
|
||||
expect(newRevs[2].id).toBe('456');
|
||||
|
||||
newRevs = Revision.moveRevisionToTop({ id: '789' }, revs);
|
||||
expect(newRevs[0].id).toBe('123');
|
||||
expect(newRevs[1].id).toBe('456');
|
||||
expect(newRevs[2].id).toBe('789');
|
||||
}));
|
||||
|
||||
it('should create patch stats', asyncTest(async () => {
|
||||
const tests = [
|
||||
{
|
||||
patch: `@@ -625,16 +625,48 @@
|
||||
rrupted download
|
||||
+%0A- %5B %5D Fix mobile screen options`,
|
||||
expected: [-0, +32],
|
||||
},
|
||||
{
|
||||
patch: `@@ -564,17 +564,17 @@
|
||||
ages%0A- %5B
|
||||
-
|
||||
+x
|
||||
%5D Check `,
|
||||
expected: [-1, +1],
|
||||
},
|
||||
{
|
||||
patch: `@@ -1022,56 +1022,415 @@
|
||||
.%0A%0A#
|
||||
- How to view a note history%0A%0AWhile all the apps
|
||||
+%C2%A0How does it work?%0A%0AAll the apps save a version of the modified notes every 10 minutes.
|
||||
%0A%0A# `,
|
||||
expected: [-(19+27+2), 17+67+4],
|
||||
},
|
||||
];
|
||||
|
||||
for (const test of tests) {
|
||||
const stats = Revision.patchStats(test.patch);
|
||||
expect(stats.removed).toBe(-test.expected[0]);
|
||||
expect(stats.added).toBe(test.expected[1]);
|
||||
}
|
||||
}));
|
||||
|
||||
});
|
||||
@@ -4,6 +4,7 @@ const { time } = require('lib/time-utils.js');
|
||||
const { asyncTest, fileContentEqual, setupDatabase, setupDatabaseAndSynchronizer, db, synchronizer, fileApi, sleep, clearDatabase, switchClient, syncTargetId, objectsEqual, checkThrowAsync } = require('test-utils.js');
|
||||
const Folder = require('lib/models/Folder.js');
|
||||
const Note = require('lib/models/Note.js');
|
||||
const NoteTag = require('lib/models/NoteTag.js');
|
||||
const Tag = require('lib/models/Tag.js');
|
||||
const BaseModel = require('lib/BaseModel.js');
|
||||
const { shim } = require('lib/shim');
|
||||
@@ -42,4 +43,18 @@ describe('models_Tag', function() {
|
||||
expect(hasThrown).toBe(true);
|
||||
}));
|
||||
|
||||
it('should not return tags without notes', asyncTest(async () => {
|
||||
let folder1 = await Folder.save({ title: "folder1" });
|
||||
let note1 = await Note.save({ title: 'ma note', parent_id: folder1.id });
|
||||
await Tag.setNoteTagsByTitles(note1.id, ['un']);
|
||||
|
||||
let tags = await Tag.allWithNotes();
|
||||
expect(tags.length).toBe(1);
|
||||
|
||||
await Note.delete(note1.id);
|
||||
|
||||
tags = await Tag.allWithNotes();
|
||||
expect(tags.length).toBe(0);
|
||||
}));
|
||||
|
||||
});
|
||||
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 { asyncTest, fileContentEqual, setupDatabase, setupDatabaseAndSynchronizer, db, synchronizer, fileApi, sleep, clearDatabase, switchClient, syncTargetId, objectsEqual, checkThrowAsync } = require('test-utils.js');
|
||||
const { asyncTest, resourceService, decryptionWorker, encryptionService, loadEncryptionMasterKey, allSyncTargetItemsEncrypted, fileContentEqual, setupDatabase, setupDatabaseAndSynchronizer, db, synchronizer, fileApi, sleep, clearDatabase, switchClient, syncTargetId, objectsEqual, checkThrowAsync } = require('test-utils.js');
|
||||
const InteropService = require('lib/services/InteropService.js');
|
||||
const Folder = require('lib/models/Folder.js');
|
||||
const Note = require('lib/models/Note.js');
|
||||
@@ -15,6 +15,7 @@ const fs = require('fs-extra');
|
||||
const ArrayUtils = require('lib/ArrayUtils');
|
||||
const ObjectUtils = require('lib/ObjectUtils');
|
||||
const { shim } = require('lib/shim.js');
|
||||
const SearchEngine = require('lib/services/SearchEngine');
|
||||
|
||||
process.on('unhandledRejection', (reason, p) => {
|
||||
console.log('Unhandled Rejection at: Promise', p, 'reason:', reason);
|
||||
@@ -37,6 +38,7 @@ describe('services_ResourceService', function() {
|
||||
|
||||
beforeEach(async (done) => {
|
||||
await setupDatabaseAndSynchronizer(1);
|
||||
await setupDatabaseAndSynchronizer(2);
|
||||
await switchClient(1);
|
||||
done();
|
||||
});
|
||||
@@ -146,4 +148,69 @@ describe('services_ResourceService', function() {
|
||||
expect(before.last_seen_time).toBe(after.last_seen_time);
|
||||
}));
|
||||
|
||||
it('should not delete resources that are associated with an encrypted note', asyncTest(async () => {
|
||||
// https://github.com/laurent22/joplin/issues/1433
|
||||
//
|
||||
// Client 1 and client 2 have E2EE setup.
|
||||
//
|
||||
// - Client 1 creates note N1 and add resource R1 to it
|
||||
// - Client 1 syncs
|
||||
// - Client 2 syncs and get N1
|
||||
// - Client 2 add resource R2 to N1
|
||||
// - Client 2 syncs
|
||||
// - Client 1 syncs
|
||||
// - Client 1 runs resource indexer - but because N1 hasn't been decrypted yet, it found that R1 is no longer associated with any note
|
||||
// - Client 1 decrypts notes, but too late
|
||||
//
|
||||
// Eventually R1 is deleted because service thinks that it was at some point associated with a note, but no longer.
|
||||
|
||||
const masterKey = await loadEncryptionMasterKey();
|
||||
await encryptionService().enableEncryption(masterKey, '123456');
|
||||
await encryptionService().loadMasterKeysFromSettings();
|
||||
let folder1 = await Folder.save({ title: "folder1" });
|
||||
let note1 = await Note.save({ title: 'ma note', parent_id: folder1.id });
|
||||
await shim.attachFileToNote(note1, __dirname + '/../tests/support/photo.jpg'); // R1
|
||||
await resourceService().indexNoteResources();
|
||||
await synchronizer().start();
|
||||
expect(await allSyncTargetItemsEncrypted()).toBe(true);
|
||||
|
||||
await switchClient(2);
|
||||
|
||||
await synchronizer().start();
|
||||
await encryptionService().enableEncryption(masterKey, '123456');
|
||||
await encryptionService().loadMasterKeysFromSettings();
|
||||
await decryptionWorker().start();
|
||||
{
|
||||
const n1 = await Note.load(note1.id);
|
||||
await shim.attachFileToNote(n1, __dirname + '/../tests/support/photo.jpg'); // R2
|
||||
}
|
||||
await synchronizer().start();
|
||||
|
||||
await switchClient(1);
|
||||
|
||||
await synchronizer().start();
|
||||
await resourceService().indexNoteResources();
|
||||
await resourceService().deleteOrphanResources(0); // Previously, R1 would be deleted here because it's not indexed
|
||||
expect((await Resource.all()).length).toBe(2);
|
||||
}));
|
||||
|
||||
it('should double-check if the resource is still linked before deleting it', asyncTest(async () => {
|
||||
SearchEngine.instance().setDb(db()); // /!\ Note that we use the global search engine here, which we shouldn't but will work for now
|
||||
|
||||
let folder1 = await Folder.save({ title: "folder1" });
|
||||
let note1 = await Note.save({ title: 'ma note', parent_id: folder1.id });
|
||||
note1 = await shim.attachFileToNote(note1, __dirname + '/../tests/support/photo.jpg');
|
||||
await resourceService().indexNoteResources();
|
||||
const bodyWithResource = note1.body;
|
||||
await Note.save({ id: note1.id, body: '' });
|
||||
await resourceService().indexNoteResources();
|
||||
await Note.save({ id: note1.id, body: bodyWithResource });
|
||||
await SearchEngine.instance().syncTables();
|
||||
await resourceService().deleteOrphanResources(0);
|
||||
|
||||
expect((await Resource.all()).length).toBe(1); // It should not have deleted the resource
|
||||
const nr = (await NoteResource.all())[0];
|
||||
expect(!!nr.is_associated).toBe(true); // And it should have fixed the situation by re-indexing the note content
|
||||
}));
|
||||
|
||||
});
|
||||
420
CliClient/tests/services_Revision.js
Normal file
420
CliClient/tests/services_Revision.js
Normal file
@@ -0,0 +1,420 @@
|
||||
require('app-module-path').addPath(__dirname);
|
||||
|
||||
const { time } = require('lib/time-utils.js');
|
||||
const { asyncTest, fileContentEqual, setupDatabase, revisionService, setupDatabaseAndSynchronizer, db, synchronizer, fileApi, sleep, clearDatabase, switchClient, syncTargetId, objectsEqual, checkThrowAsync } = require('test-utils.js');
|
||||
const Folder = require('lib/models/Folder.js');
|
||||
const Setting = require('lib/models/Setting.js');
|
||||
const Note = require('lib/models/Note.js');
|
||||
const NoteTag = require('lib/models/NoteTag.js');
|
||||
const ItemChange = require('lib/models/ItemChange.js');
|
||||
const Tag = require('lib/models/Tag.js');
|
||||
const Revision = require('lib/models/Revision.js');
|
||||
const BaseModel = require('lib/BaseModel.js');
|
||||
const RevisionService = require('lib/services/RevisionService.js');
|
||||
const { shim } = require('lib/shim');
|
||||
|
||||
process.on('unhandledRejection', (reason, p) => {
|
||||
console.log('Unhandled Rejection at: Promise', p, 'reason:', reason);
|
||||
});
|
||||
|
||||
describe('services_Revision', function() {
|
||||
|
||||
beforeEach(async (done) => {
|
||||
await setupDatabaseAndSynchronizer(1);
|
||||
await switchClient(1);
|
||||
Setting.setValue('revisionService.intervalBetweenRevisions', 0)
|
||||
done();
|
||||
});
|
||||
|
||||
it('should create diff and rebuild notes', asyncTest(async () => {
|
||||
const service = new RevisionService();
|
||||
|
||||
const n1_v1 = await Note.save({ title: '', author: 'testing' });
|
||||
await service.collectRevisions();
|
||||
await Note.save({ id: n1_v1.id, title: 'hello', author: 'testing' });
|
||||
await service.collectRevisions();
|
||||
const n1_v2 = await Note.save({ id: n1_v1.id, title: 'hello welcome', author: '' });
|
||||
await service.collectRevisions();
|
||||
|
||||
const revisions = await Revision.allByType(BaseModel.TYPE_NOTE, n1_v1.id);
|
||||
expect(revisions.length).toBe(2);
|
||||
expect(revisions[1].parent_id).toBe(revisions[0].id);
|
||||
|
||||
const rev1 = await service.revisionNote(revisions, 0);
|
||||
expect(rev1.title).toBe('hello');
|
||||
expect(rev1.author).toBe('testing');
|
||||
|
||||
const rev2 = await service.revisionNote(revisions, 1);
|
||||
expect(rev2.title).toBe('hello welcome');
|
||||
expect(rev2.author).toBe('');
|
||||
|
||||
await time.sleep(0.5);
|
||||
|
||||
await service.deleteOldRevisions(400);
|
||||
const revisions2 = await Revision.allByType(BaseModel.TYPE_NOTE, n1_v1.id);
|
||||
expect(revisions2.length).toBe(0);
|
||||
}));
|
||||
|
||||
it('should delete old revisions (1 note, 2 rev)', asyncTest(async () => {
|
||||
const service = new RevisionService();
|
||||
|
||||
const n1_v0 = await Note.save({ title: '' });
|
||||
const n1_v1 = await Note.save({ id: n1_v0.id, title: 'hello' });
|
||||
await service.collectRevisions();
|
||||
await time.sleep(1);
|
||||
const n1_v2 = await Note.save({ id: n1_v1.id, title: 'hello welcome' });
|
||||
await service.collectRevisions();
|
||||
expect((await Revision.allByType(BaseModel.TYPE_NOTE, n1_v1.id)).length).toBe(2);
|
||||
|
||||
await service.deleteOldRevisions(1000);
|
||||
const revisions = await Revision.allByType(BaseModel.TYPE_NOTE, n1_v1.id);
|
||||
expect(revisions.length).toBe(1);
|
||||
|
||||
const rev1 = await service.revisionNote(revisions, 0);
|
||||
expect(rev1.title).toBe('hello welcome');
|
||||
}));
|
||||
|
||||
it('should delete old revisions (1 note, 3 rev)', asyncTest(async () => {
|
||||
const service = new RevisionService();
|
||||
|
||||
const n1_v0 = await Note.save({ title: '' });
|
||||
const n1_v1 = await Note.save({ id: n1_v0.id, title: 'one' });
|
||||
await service.collectRevisions();
|
||||
await time.sleep(1);
|
||||
const n1_v2 = await Note.save({ id: n1_v1.id, title: 'one two' });
|
||||
await service.collectRevisions();
|
||||
await time.sleep(1);
|
||||
const n1_v3 = await Note.save({ id: n1_v1.id, title: 'one two three' });
|
||||
await service.collectRevisions();
|
||||
|
||||
{
|
||||
await service.deleteOldRevisions(2000);
|
||||
const revisions = await Revision.allByType(BaseModel.TYPE_NOTE, n1_v1.id);
|
||||
expect(revisions.length).toBe(2);
|
||||
|
||||
const rev1 = await service.revisionNote(revisions, 0);
|
||||
expect(rev1.title).toBe('one two');
|
||||
|
||||
const rev2 = await service.revisionNote(revisions, 1);
|
||||
expect(rev2.title).toBe('one two three');
|
||||
}
|
||||
|
||||
{
|
||||
await service.deleteOldRevisions(1000);
|
||||
const revisions = await Revision.allByType(BaseModel.TYPE_NOTE, n1_v1.id);
|
||||
expect(revisions.length).toBe(1);
|
||||
|
||||
const rev1 = await service.revisionNote(revisions, 0);
|
||||
expect(rev1.title).toBe('one two three');
|
||||
}
|
||||
}));
|
||||
|
||||
it('should delete old revisions (2 notes, 2 rev)', asyncTest(async () => {
|
||||
const service = new RevisionService();
|
||||
|
||||
const n1_v0 = await Note.save({ title: '' });
|
||||
const n1_v1 = await Note.save({ id: n1_v0.id, title: 'note 1' });
|
||||
const n2_v0 = await Note.save({ title: '' });
|
||||
const n2_v1 = await Note.save({ id: n2_v0.id, title: 'note 2' });
|
||||
await service.collectRevisions();
|
||||
await time.sleep(1);
|
||||
const n1_v2 = await Note.save({ id: n1_v1.id, title: 'note 1 (v2)' });
|
||||
const n2_v2 = await Note.save({ id: n2_v1.id, title: 'note 2 (v2)' });
|
||||
await service.collectRevisions();
|
||||
|
||||
expect((await Revision.all()).length).toBe(4);
|
||||
|
||||
await service.deleteOldRevisions(1000);
|
||||
|
||||
{
|
||||
const revisions = await Revision.allByType(BaseModel.TYPE_NOTE, n1_v1.id);
|
||||
expect(revisions.length).toBe(1);
|
||||
const rev1 = await service.revisionNote(revisions, 0);
|
||||
expect(rev1.title).toBe('note 1 (v2)');
|
||||
}
|
||||
|
||||
{
|
||||
const revisions = await Revision.allByType(BaseModel.TYPE_NOTE, n2_v1.id);
|
||||
expect(revisions.length).toBe(1);
|
||||
const rev1 = await service.revisionNote(revisions, 0);
|
||||
expect(rev1.title).toBe('note 2 (v2)');
|
||||
}
|
||||
}));
|
||||
|
||||
it('should handle conflicts', asyncTest(async () => {
|
||||
const service = new RevisionService();
|
||||
|
||||
// A conflict happens in this case:
|
||||
// - Device 1 creates note1 (rev1)
|
||||
// - Device 2 syncs and get note1
|
||||
// - Device 1 modifies note1 (rev2)
|
||||
// - Device 2 modifies note1 (rev3)
|
||||
// When reconstructing the notes based on the revisions, we need to make sure it follow the right
|
||||
// "path". For example, to reconstruct the note at rev2 it would be:
|
||||
// rev1 => rev2
|
||||
// To reconstruct the note at rev3 it would be:
|
||||
// rev1 => rev3
|
||||
// And not, for example, rev1 => rev2 => rev3
|
||||
|
||||
const n1_v1 = await Note.save({ title: 'hello' });
|
||||
const noteId = n1_v1.id;
|
||||
const rev1 = await service.createNoteRevision_(n1_v1);
|
||||
const n1_v2 = await Note.save({ id: noteId, title: 'hello Paul' });
|
||||
const rev2 = await service.createNoteRevision_(n1_v2, rev1.id);
|
||||
const n1_v3 = await Note.save({ id: noteId, title: 'hello John' });
|
||||
const rev3 = await service.createNoteRevision_(n1_v3, rev1.id);
|
||||
|
||||
const revisions = await Revision.allByType(BaseModel.TYPE_NOTE, noteId);
|
||||
expect(revisions.length).toBe(3);
|
||||
expect(revisions[1].parent_id).toBe(rev1.id);
|
||||
expect(revisions[2].parent_id).toBe(rev1.id);
|
||||
|
||||
const revNote1 = await service.revisionNote(revisions, 0);
|
||||
const revNote2 = await service.revisionNote(revisions, 1);
|
||||
const revNote3 = await service.revisionNote(revisions, 2);
|
||||
expect(revNote1.title).toBe('hello');
|
||||
expect(revNote2.title).toBe('hello Paul');
|
||||
expect(revNote3.title).toBe('hello John');
|
||||
}));
|
||||
|
||||
it('should create a revision for notes that are older than a given interval', asyncTest(async () => {
|
||||
const n1 = await Note.save({ title: 'hello' });
|
||||
const noteId = n1.id;
|
||||
|
||||
await sleep(0.1);
|
||||
|
||||
// Set the interval in such a way that the note is considered an old one.
|
||||
Setting.setValue('revisionService.oldNoteInterval', 50);
|
||||
|
||||
// A revision is created the first time a note is overwritten with new content, and
|
||||
// if this note doesn't already have an existing revision.
|
||||
// This is mostly to handle old notes that existed before the revision service. If these
|
||||
// old notes are changed, there's a chance it's accidental or due to some bug, so we
|
||||
// want to preserve a revision just in case.
|
||||
|
||||
{
|
||||
await Note.save({ id: noteId, title: 'hello 2' });
|
||||
await revisionService().collectRevisions(); // Rev for old note created + Rev for new note
|
||||
const all = await Revision.allByType(BaseModel.TYPE_NOTE, noteId);
|
||||
expect(all.length).toBe(2);
|
||||
const revNote1 = await revisionService().revisionNote(all, 0);
|
||||
const revNote2 = await revisionService().revisionNote(all, 1);
|
||||
expect(revNote1.title).toBe('hello');
|
||||
expect(revNote2.title).toBe('hello 2');
|
||||
}
|
||||
|
||||
// If the note is saved a third time, we don't automatically create a revision. One
|
||||
// will be created x minutes later when the service collects revisions.
|
||||
|
||||
{
|
||||
await Note.save({ id: noteId, title: 'hello 3' });
|
||||
const all = await Revision.allByType(BaseModel.TYPE_NOTE, noteId);
|
||||
expect(all.length).toBe(2);
|
||||
}
|
||||
}));
|
||||
|
||||
it('should create a revision for notes that get deleted (recyle bin)', asyncTest(async () => {
|
||||
const n1 = await Note.save({ title: 'hello' });
|
||||
const noteId = n1.id;
|
||||
|
||||
await Note.delete(noteId);
|
||||
|
||||
await revisionService().collectRevisions();
|
||||
|
||||
const all = await Revision.allByType(BaseModel.TYPE_NOTE, noteId);
|
||||
expect(all.length).toBe(1);
|
||||
const rev1 = await revisionService().revisionNote(all, 0);
|
||||
expect(rev1.title).toBe('hello');
|
||||
}));
|
||||
|
||||
it('should not create a revision for notes that get deleted if there is already a revision', asyncTest(async () => {
|
||||
const n1 = await Note.save({ title: 'hello' });
|
||||
await revisionService().collectRevisions();
|
||||
const noteId = n1.id;
|
||||
await Note.save({ id: noteId, title: 'hello Paul' });
|
||||
await revisionService().collectRevisions(); // REV 1
|
||||
|
||||
expect((await Revision.allByType(BaseModel.TYPE_NOTE, n1.id)).length).toBe(1);
|
||||
|
||||
await Note.delete(noteId);
|
||||
|
||||
// At this point there is no need to create a new revision for the deleted note
|
||||
// because we already have the latest version as REV 1
|
||||
await revisionService().collectRevisions();
|
||||
|
||||
expect((await Revision.allByType(BaseModel.TYPE_NOTE, n1.id)).length).toBe(1);
|
||||
}));
|
||||
|
||||
it('should not create a revision for new note the first time they are saved', asyncTest(async () => {
|
||||
const n1 = await Note.save({ title: 'hello' });
|
||||
|
||||
{
|
||||
const revisions = await Revision.allByType(BaseModel.TYPE_NOTE, n1.id);
|
||||
expect(revisions.length).toBe(0);
|
||||
}
|
||||
|
||||
await revisionService().collectRevisions();
|
||||
|
||||
{
|
||||
const revisions = await Revision.allByType(BaseModel.TYPE_NOTE, n1.id);
|
||||
expect(revisions.length).toBe(0);
|
||||
}
|
||||
}));
|
||||
|
||||
it('should abort collecting revisions when one of them is encrypted', asyncTest(async () => {
|
||||
const n1 = await Note.save({ title: 'hello' }); // CHANGE 1
|
||||
await revisionService().collectRevisions();
|
||||
await Note.save({ id: n1.id, title: 'hello Ringo' }); // CHANGE 2
|
||||
await revisionService().collectRevisions();
|
||||
await Note.save({ id: n1.id, title: 'hello George' }); // CHANGE 3
|
||||
await revisionService().collectRevisions();
|
||||
|
||||
const revisions = await Revision.allByType(BaseModel.TYPE_NOTE, n1.id);
|
||||
expect(revisions.length).toBe(2);
|
||||
|
||||
const encryptedRevId = revisions[0].id;
|
||||
|
||||
// Simulate receiving an encrypted revision
|
||||
await Revision.save({ id: encryptedRevId, encryption_applied: 1 });
|
||||
await Note.save({ id: n1.id, title: 'hello Paul' }); // CHANGE 4
|
||||
|
||||
await revisionService().collectRevisions();
|
||||
|
||||
// Although change 4 is a note update, check that it has not been processed
|
||||
// by the collector, due to one of the revisions being encrypted.
|
||||
expect(await ItemChange.lastChangeId()).toBe(4);
|
||||
expect(Setting.value('revisionService.lastProcessedChangeId')).toBe(3);
|
||||
|
||||
// Simulate the revision being decrypted by DecryptionService
|
||||
await Revision.save({ id: encryptedRevId, encryption_applied: 0 });
|
||||
|
||||
await revisionService().collectRevisions();
|
||||
|
||||
// Now that the revision has been decrypted, all the changes can be processed
|
||||
expect(await ItemChange.lastChangeId()).toBe(4);
|
||||
expect(Setting.value('revisionService.lastProcessedChangeId')).toBe(4);
|
||||
}));
|
||||
|
||||
it('should not delete old revisions if one of them is still encrypted (1)', asyncTest(async () => {
|
||||
// Test case 1: Two revisions and the first one is encrypted.
|
||||
// Calling deleteOldRevisions() with low TTL, which means all revisions
|
||||
// should be deleted, but they won't be due to the encrypted one.
|
||||
|
||||
const n1_v0 = await Note.save({ title: '' });
|
||||
const n1_v1 = await Note.save({ id: n1_v0.id, title: 'hello' });
|
||||
await revisionService().collectRevisions(); // REV 1
|
||||
await time.sleep(0.1);
|
||||
const n1_v2 = await Note.save({ id: n1_v1.id, title: 'hello welcome' });
|
||||
await revisionService().collectRevisions(); // REV 2
|
||||
await time.sleep(0.1);
|
||||
|
||||
expect((await Revision.all()).length).toBe(2);
|
||||
|
||||
const revisions = await Revision.all();
|
||||
await Revision.save({ id: revisions[0].id, encryption_applied: 1 });
|
||||
|
||||
await revisionService().deleteOldRevisions(0);
|
||||
expect((await Revision.all()).length).toBe(2);
|
||||
|
||||
await Revision.save({ id: revisions[0].id, encryption_applied: 0 });
|
||||
|
||||
await revisionService().deleteOldRevisions(0);
|
||||
expect((await Revision.all()).length).toBe(0);
|
||||
}));
|
||||
|
||||
it('should not delete old revisions if one of them is still encrypted (2)', asyncTest(async () => {
|
||||
// Test case 2: Two revisions and the first one is encrypted.
|
||||
// Calling deleteOldRevisions() with higher TTL, which means the oldest
|
||||
// revision should be deleted, but it won't be due to the encrypted one.
|
||||
|
||||
const n1_v0 = await Note.save({ title: '' });
|
||||
const n1_v1 = await Note.save({ id: n1_v0.id, title: 'hello' });
|
||||
await revisionService().collectRevisions(); // REV 1
|
||||
await time.sleep(0.5);
|
||||
const n1_v2 = await Note.save({ id: n1_v1.id, title: 'hello welcome' });
|
||||
await revisionService().collectRevisions(); // REV 2
|
||||
|
||||
expect((await Revision.all()).length).toBe(2);
|
||||
|
||||
const revisions = await Revision.all();
|
||||
await Revision.save({ id: revisions[0].id, encryption_applied: 1 });
|
||||
|
||||
await revisionService().deleteOldRevisions(500);
|
||||
expect((await Revision.all()).length).toBe(2);
|
||||
}));
|
||||
|
||||
it('should not delete old revisions if one of them is still encrypted (3)', asyncTest(async () => {
|
||||
// Test case 2: Two revisions and the second one is encrypted.
|
||||
// Calling deleteOldRevisions() with higher TTL, which means the oldest
|
||||
// revision should be deleted, but it won't be due to the encrypted one.
|
||||
|
||||
const n1_v0 = await Note.save({ title: '' });
|
||||
const n1_v1 = await Note.save({ id: n1_v0.id, title: 'hello' });
|
||||
await revisionService().collectRevisions(); // REV 1
|
||||
await time.sleep(0.5);
|
||||
const n1_v2 = await Note.save({ id: n1_v1.id, title: 'hello welcome' });
|
||||
await revisionService().collectRevisions(); // REV 2
|
||||
|
||||
expect((await Revision.all()).length).toBe(2);
|
||||
|
||||
const revisions = await Revision.all();
|
||||
await Revision.save({ id: revisions[1].id, encryption_applied: 1 });
|
||||
|
||||
await revisionService().deleteOldRevisions(500);
|
||||
expect((await Revision.all()).length).toBe(2);
|
||||
|
||||
await Revision.save({ id: revisions[1].id, encryption_applied: 0 });
|
||||
|
||||
await revisionService().deleteOldRevisions(500);
|
||||
expect((await Revision.all()).length).toBe(1);
|
||||
}));
|
||||
|
||||
it('should not create a revision if the note has not changed', asyncTest(async () => {
|
||||
const n1_v0 = await Note.save({ title: '' });
|
||||
const n1_v1 = await Note.save({ id: n1_v0.id, title: 'hello' });
|
||||
await revisionService().collectRevisions(); // REV 1
|
||||
expect((await Revision.all()).length).toBe(1);
|
||||
|
||||
const n1_v2 = await Note.save({ id: n1_v0.id, title: 'hello' });
|
||||
await revisionService().collectRevisions(); // Note has not changed (except its timestamp) so don't create a revision
|
||||
expect((await Revision.all()).length).toBe(1);
|
||||
}));
|
||||
|
||||
it('should preserve user update time', asyncTest(async () => {
|
||||
// user_updated_time is kind of tricky and can be changed automatically in various
|
||||
// places so make sure it is saved correctly with the revision
|
||||
|
||||
const n1_v0 = await Note.save({ title: '' });
|
||||
const n1_v1 = await Note.save({ id: n1_v0.id, title: 'hello' });
|
||||
await revisionService().collectRevisions(); // REV 1
|
||||
expect((await Revision.all()).length).toBe(1);
|
||||
|
||||
const userUpdatedTime = Date.now() - 1000 * 60 * 60;
|
||||
const n1_v2 = await Note.save({ id: n1_v0.id, title: 'hello', updated_time: Date.now(), user_updated_time: userUpdatedTime }, { autoTimestamp: false });
|
||||
await revisionService().collectRevisions(); // Only the user timestamp has changed, but that needs to be saved
|
||||
|
||||
const revisions = await Revision.all();
|
||||
expect(revisions.length).toBe(2);
|
||||
|
||||
const revNote = await revisionService().revisionNote(revisions, 1);
|
||||
expect(revNote.user_updated_time).toBe(userUpdatedTime);
|
||||
}));
|
||||
|
||||
it('should not create a revision if there is already a recent one', asyncTest(async () => {
|
||||
const n1_v0 = await Note.save({ title: '' });
|
||||
const n1_v1 = await Note.save({ id: n1_v0.id, title: 'hello' });
|
||||
await revisionService().collectRevisions(); // REV 1
|
||||
|
||||
const n1_v2 = await Note.save({ id: n1_v0.id, title: 'hello 2' });
|
||||
await revisionService().collectRevisions(); // REV 2
|
||||
expect((await Revision.all()).length).toBe(2);
|
||||
|
||||
Setting.setValue('revisionService.intervalBetweenRevisions', 1000);
|
||||
|
||||
const n1_v3 = await Note.save({ id: n1_v0.id, title: 'hello 3' });
|
||||
await revisionService().collectRevisions(); // No rev because there's already a rev that is less than 1000 ms old
|
||||
|
||||
expect((await Revision.all()).length).toBe(2);
|
||||
}));
|
||||
|
||||
});
|
||||
@@ -111,6 +111,58 @@ describe('services_SearchEngine', function() {
|
||||
expect(rows[4].id).toBe(n5.id);
|
||||
}));
|
||||
|
||||
it('should order search results by relevance (last updated first)', asyncTest(async () => {
|
||||
let rows;
|
||||
|
||||
const n1 = await Note.save({ title: "abcd" });
|
||||
await sleep(0.1);
|
||||
const n2 = await Note.save({ title: "abcd" });
|
||||
await sleep(0.1);
|
||||
const n3 = await Note.save({ title: "abcd" });
|
||||
await sleep(0.1);
|
||||
|
||||
await engine.syncTables();
|
||||
rows = await engine.search('abcd');
|
||||
|
||||
expect(rows[0].id).toBe(n3.id);
|
||||
expect(rows[1].id).toBe(n2.id);
|
||||
expect(rows[2].id).toBe(n1.id);
|
||||
|
||||
await Note.save({ id: n1.id, title: "abcd" });
|
||||
|
||||
await engine.syncTables();
|
||||
rows = await engine.search('abcd');
|
||||
expect(rows[0].id).toBe(n1.id);
|
||||
expect(rows[1].id).toBe(n3.id);
|
||||
expect(rows[2].id).toBe(n2.id);
|
||||
}));
|
||||
|
||||
it('should order search results by relevance (completed to-dos last)', asyncTest(async () => {
|
||||
let rows;
|
||||
|
||||
const n1 = await Note.save({ title: "abcd", is_todo: 1 });
|
||||
await sleep(0.1);
|
||||
const n2 = await Note.save({ title: "abcd", is_todo: 1 });
|
||||
await sleep(0.1);
|
||||
const n3 = await Note.save({ title: "abcd", is_todo: 1 });
|
||||
await sleep(0.1);
|
||||
|
||||
await engine.syncTables();
|
||||
rows = await engine.search('abcd');
|
||||
|
||||
expect(rows[0].id).toBe(n3.id);
|
||||
expect(rows[1].id).toBe(n2.id);
|
||||
expect(rows[2].id).toBe(n1.id);
|
||||
|
||||
await Note.save({ id: n3.id, todo_completed: Date.now() });
|
||||
|
||||
await engine.syncTables();
|
||||
rows = await engine.search('abcd');
|
||||
expect(rows[0].id).toBe(n2.id);
|
||||
expect(rows[1].id).toBe(n1.id);
|
||||
expect(rows[2].id).toBe(n3.id);
|
||||
}));
|
||||
|
||||
it('should supports various query types', asyncTest(async () => {
|
||||
let rows;
|
||||
|
||||
@@ -204,6 +256,23 @@ describe('services_SearchEngine', function() {
|
||||
expect((await engine.search('말')).length).toBe(1);
|
||||
}));
|
||||
|
||||
it('should support field restricted queries with Chinese characters', asyncTest(async () => {
|
||||
let rows;
|
||||
const n1 = await Note.save({ title: "你好", body: "我是法国人" });
|
||||
|
||||
await engine.syncTables();
|
||||
|
||||
expect((await engine.search('title:你好*')).length).toBe(1);
|
||||
expect((await engine.search('body:你好')).length).toBe(0);
|
||||
expect((await engine.search('title:你好 body:法国人')).length).toBe(1);
|
||||
expect((await engine.search('title:你好 body:bla')).length).toBe(0);
|
||||
expect((await engine.search('title:你好 我是')).length).toBe(1);
|
||||
expect((await engine.search('title:bla 我是')).length).toBe(0);
|
||||
|
||||
// For non-alpha char, only the first field is looked at, the following ones are ignored
|
||||
expect((await engine.search('title:你好 title:hello')).length).toBe(1);
|
||||
}));
|
||||
|
||||
it('should parse normal query strings', asyncTest(async () => {
|
||||
let rows;
|
||||
|
||||
@@ -213,6 +282,7 @@ describe('services_SearchEngine', function() {
|
||||
['title:abcd efgh', { _: ['efgh'], title: ['abcd'] }],
|
||||
['title:abcd', { title: ['abcd'] }],
|
||||
['"abcd efgh"', { _: ['abcd efgh'] }],
|
||||
['title:abcd title:efgh', { title: ['abcd', 'efgh'] }],
|
||||
];
|
||||
|
||||
for (let i = 0; i < testCases.length; i++) {
|
||||
@@ -231,33 +301,6 @@ describe('services_SearchEngine', function() {
|
||||
}
|
||||
}));
|
||||
|
||||
// it('should parse query strings with wildcards', asyncTest(async () => {
|
||||
// let rows;
|
||||
|
||||
// const testCases = [
|
||||
// ['do*', ['do', 'dog', 'domino'], [] ],
|
||||
// // "*" is a wildcard only when used at the end (to search for documents with the specified prefix)
|
||||
// // If it's at the beginning, it's ignored, if it's in the middle, it's treated as a litteral "*".
|
||||
// ['*an*', ['an', 'anneau'], ['piano', 'plan'] ],
|
||||
// ['no*no', ['no*no'], ['nonono'] ],
|
||||
// ];
|
||||
|
||||
// for (let i = 0; i < testCases.length; i++) {
|
||||
// const t = testCases[i];
|
||||
// const input = t[0];
|
||||
// const shouldMatch = t[1];
|
||||
// const shouldNotMatch = t[2];
|
||||
// const regex = new RegExp(engine.parseQuery(input).terms._[0].value, 'gmi');
|
||||
|
||||
// for (let j = 0; j < shouldMatch.length; j++) {
|
||||
// const r = shouldMatch[j].match(regex);
|
||||
// expect(!!r).toBe(true, '"' + input + '" should match "' + shouldMatch[j] + '"');
|
||||
// }
|
||||
// }
|
||||
|
||||
// expect(engine.parseQuery('*').termCount).toBe(0);
|
||||
// }));
|
||||
|
||||
it('should handle queries with special characters', asyncTest(async () => {
|
||||
let rows;
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
require('app-module-path').addPath(__dirname);
|
||||
|
||||
const { time } = require('lib/time-utils.js');
|
||||
const { setupDatabase, setupDatabaseAndSynchronizer, db, synchronizer, fileApi, sleep, clearDatabase, switchClient, syncTargetId, encryptionService, loadEncryptionMasterKey, fileContentEqual, decryptionWorker, checkThrowAsync, asyncTest } = require('test-utils.js');
|
||||
const { setupDatabase, allSyncTargetItemsEncrypted, kvStore, revisionService, setupDatabaseAndSynchronizer, db, synchronizer, fileApi, sleep, clearDatabase, switchClient, syncTargetId, encryptionService, loadEncryptionMasterKey, fileContentEqual, decryptionWorker, checkThrowAsync, asyncTest } = require('test-utils.js');
|
||||
const { shim } = require('lib/shim.js');
|
||||
const fs = require('fs-extra');
|
||||
const Folder = require('lib/models/Folder.js');
|
||||
@@ -13,6 +13,7 @@ const { Database } = require('lib/database.js');
|
||||
const Setting = require('lib/models/Setting.js');
|
||||
const MasterKey = require('lib/models/MasterKey');
|
||||
const BaseItem = require('lib/models/BaseItem.js');
|
||||
const Revision = require('lib/models/Revision.js');
|
||||
const BaseModel = require('lib/BaseModel.js');
|
||||
const SyncTargetRegistry = require('lib/SyncTargetRegistry.js');
|
||||
const WelcomeUtils = require('lib/WelcomeUtils');
|
||||
@@ -23,51 +24,44 @@ process.on('unhandledRejection', (reason, p) => {
|
||||
|
||||
jasmine.DEFAULT_TIMEOUT_INTERVAL = 60000 + 30000; // The first test is slow because the database needs to be built
|
||||
|
||||
async function allItems() {
|
||||
async function allNotesFolders() {
|
||||
let folders = await Folder.all();
|
||||
let notes = await Note.all();
|
||||
return folders.concat(notes);
|
||||
}
|
||||
|
||||
async function allSyncTargetItemsEncrypted() {
|
||||
async function remoteItemsByTypes(types) {
|
||||
const list = await fileApi().list();
|
||||
if (list.has_more) throw new Error('Not implemented!!!');
|
||||
const files = list.items;
|
||||
|
||||
//console.info(Setting.value('resourceDir'));
|
||||
|
||||
let totalCount = 0;
|
||||
let encryptedCount = 0;
|
||||
for (let i = 0; i < files.length; i++) {
|
||||
const file = files[i];
|
||||
const remoteContentString = await fileApi().get(file.path);
|
||||
const remoteContent = await BaseItem.unserialize(remoteContentString);
|
||||
const ItemClass = BaseItem.itemClass(remoteContent);
|
||||
|
||||
if (!ItemClass.encryptionSupported()) continue;
|
||||
|
||||
totalCount++;
|
||||
|
||||
if (remoteContent.type_ === BaseModel.TYPE_RESOURCE) {
|
||||
const content = await fileApi().get('.resource/' + remoteContent.id);
|
||||
totalCount++;
|
||||
if (content.substr(0, 5) === 'JED01') output = encryptedCount++;
|
||||
}
|
||||
|
||||
if (!!remoteContent.encryption_applied) encryptedCount++;
|
||||
const output = [];
|
||||
for (const file of files) {
|
||||
const remoteContent = await fileApi().get(file.path);
|
||||
const content = await BaseItem.unserialize(remoteContent);
|
||||
if (types.indexOf(content.type_) < 0) continue;
|
||||
output.push(content);
|
||||
}
|
||||
|
||||
if (!totalCount) throw new Error('No encryptable item on sync target');
|
||||
|
||||
return totalCount === encryptedCount;
|
||||
return output;
|
||||
}
|
||||
|
||||
async function localItemsSameAsRemote(locals, expect) {
|
||||
async function remoteNotesAndFolders() {
|
||||
return remoteItemsByTypes([BaseModel.TYPE_NOTE, BaseModel.TYPE_FOLDER]);
|
||||
}
|
||||
|
||||
async function remoteNotesFoldersResources() {
|
||||
return remoteItemsByTypes([BaseModel.TYPE_NOTE, BaseModel.TYPE_FOLDER, BaseModel.TYPE_RESOURCE]);
|
||||
}
|
||||
|
||||
async function remoteResources() {
|
||||
return remoteItemsByTypes([BaseModel.TYPE_RESOURCE]);
|
||||
}
|
||||
|
||||
async function localNotesFoldersSameAsRemote(locals, expect) {
|
||||
let error = null;
|
||||
try {
|
||||
let files = await fileApi().list();
|
||||
files = files.items;
|
||||
|
||||
expect(locals.length).toBe(files.length);
|
||||
const nf = await remoteNotesAndFolders();
|
||||
expect(locals.length).toBe(nf.length);
|
||||
|
||||
for (let i = 0; i < locals.length; i++) {
|
||||
let dbItem = locals[i];
|
||||
@@ -77,12 +71,6 @@ async function localItemsSameAsRemote(locals, expect) {
|
||||
expect(!!remote).toBe(true);
|
||||
if (!remote) continue;
|
||||
|
||||
// if (syncTargetId() == SyncTargetRegistry.nameToId('filesystem')) {
|
||||
// expect(remote.updated_time).toBe(Math.floor(dbItem.updated_time / 1000) * 1000);
|
||||
// } else {
|
||||
// expect(remote.updated_time).toBe(dbItem.updated_time);
|
||||
// }
|
||||
|
||||
let remoteContent = await fileApi().get(path);
|
||||
|
||||
remoteContent = dbItem.type_ == BaseModel.TYPE_NOTE ? await Note.unserialize(remoteContent) : await Folder.unserialize(remoteContent);
|
||||
@@ -114,11 +102,11 @@ describe('Synchronizer', function() {
|
||||
let folder = await Folder.save({ title: "folder1" });
|
||||
await Note.save({ title: "un", parent_id: folder.id });
|
||||
|
||||
let all = await allItems();
|
||||
let all = await allNotesFolders();
|
||||
|
||||
await synchronizer().start();
|
||||
|
||||
await localItemsSameAsRemote(all, expect);
|
||||
await localNotesFoldersSameAsRemote(all, expect);
|
||||
}));
|
||||
|
||||
it('should update remote items', asyncTest(async () => {
|
||||
@@ -128,10 +116,10 @@ describe('Synchronizer', function() {
|
||||
|
||||
await Note.save({ title: "un UPDATE", id: note.id });
|
||||
|
||||
let all = await allItems();
|
||||
let all = await allNotesFolders();
|
||||
await synchronizer().start();
|
||||
|
||||
await localItemsSameAsRemote(all, expect);
|
||||
await localNotesFoldersSameAsRemote(all, expect);
|
||||
}));
|
||||
|
||||
it('should create local items', asyncTest(async () => {
|
||||
@@ -143,9 +131,9 @@ describe('Synchronizer', function() {
|
||||
|
||||
await synchronizer().start();
|
||||
|
||||
let all = await allItems();
|
||||
let all = await allNotesFolders();
|
||||
|
||||
await localItemsSameAsRemote(all, expect);
|
||||
await localNotesFoldersSameAsRemote(all, expect);
|
||||
}));
|
||||
|
||||
it('should update local items', asyncTest(async () => {
|
||||
@@ -170,9 +158,9 @@ describe('Synchronizer', function() {
|
||||
|
||||
await synchronizer().start();
|
||||
|
||||
let all = await allItems();
|
||||
let all = await allNotesFolders();
|
||||
|
||||
await localItemsSameAsRemote(all, expect);
|
||||
await localNotesFoldersSameAsRemote(all, expect);
|
||||
}));
|
||||
|
||||
it('should resolve note conflicts', asyncTest(async () => {
|
||||
@@ -264,11 +252,9 @@ describe('Synchronizer', function() {
|
||||
|
||||
await synchronizer().start();
|
||||
|
||||
let files = await fileApi().list();
|
||||
files = files.items;
|
||||
|
||||
expect(files.length).toBe(1);
|
||||
expect(files[0].path).toBe(Folder.systemPath(folder1));
|
||||
const remotes = await remoteNotesAndFolders();
|
||||
expect(remotes.length).toBe(1);
|
||||
expect(remotes[0].id).toBe(folder1.id);
|
||||
|
||||
let deletedItems = await BaseItem.deletedItems(syncTargetId());
|
||||
expect(deletedItems.length).toBe(0);
|
||||
@@ -311,7 +297,7 @@ describe('Synchronizer', function() {
|
||||
await switchClient(1);
|
||||
|
||||
context1 = await synchronizer().start({ context: context1 });
|
||||
let items = await allItems();
|
||||
let items = await allNotesFolders();
|
||||
expect(items.length).toBe(2);
|
||||
let deletedItems = await BaseItem.deletedItems(syncTargetId());
|
||||
expect(deletedItems.length).toBe(0);
|
||||
@@ -334,8 +320,8 @@ describe('Synchronizer', function() {
|
||||
|
||||
await synchronizer().start();
|
||||
|
||||
let all = await allItems();
|
||||
await localItemsSameAsRemote(all, expect);
|
||||
let all = await allNotesFolders();
|
||||
await localNotesFoldersSameAsRemote(all, expect);
|
||||
}));
|
||||
|
||||
it('should delete local folder', asyncTest(async () => {
|
||||
@@ -352,8 +338,8 @@ describe('Synchronizer', function() {
|
||||
await switchClient(1);
|
||||
|
||||
await synchronizer().start({ context: context1 });
|
||||
let items = await allItems();
|
||||
await localItemsSameAsRemote(items, expect);
|
||||
let items = await allNotesFolders();
|
||||
await localNotesFoldersSameAsRemote(items, expect);
|
||||
}));
|
||||
|
||||
it('should resolve conflict if remote folder has been deleted, but note has been added to folder locally', asyncTest(async () => {
|
||||
@@ -370,7 +356,7 @@ describe('Synchronizer', function() {
|
||||
|
||||
let note = await Note.save({ title: "note1", parent_id: folder1.id });
|
||||
await synchronizer().start();
|
||||
let items = await allItems();
|
||||
let items = await allNotesFolders();
|
||||
expect(items.length).toBe(1);
|
||||
expect(items[0].title).toBe('note1');
|
||||
expect(items[0].is_conflict).toBe(1);
|
||||
@@ -392,11 +378,11 @@ describe('Synchronizer', function() {
|
||||
await Note.delete(note.id);
|
||||
await synchronizer().start();
|
||||
|
||||
let items = await allItems();
|
||||
let items = await allNotesFolders();
|
||||
expect(items.length).toBe(1);
|
||||
expect(items[0].title).toBe('folder');
|
||||
|
||||
await localItemsSameAsRemote(items, expect);
|
||||
await localNotesFoldersSameAsRemote(items, expect);
|
||||
}));
|
||||
|
||||
it('should cross delete all folders', asyncTest(async () => {
|
||||
@@ -425,13 +411,13 @@ describe('Synchronizer', function() {
|
||||
|
||||
await synchronizer().start();
|
||||
|
||||
let items2 = await allItems();
|
||||
let items2 = await allNotesFolders();
|
||||
|
||||
await switchClient(1);
|
||||
|
||||
await synchronizer().start();
|
||||
|
||||
let items1 = await allItems();
|
||||
let items1 = await allNotesFolders();
|
||||
|
||||
expect(items1.length).toBe(0);
|
||||
expect(items1.length).toBe(items2.length);
|
||||
@@ -494,7 +480,7 @@ describe('Synchronizer', function() {
|
||||
|
||||
await synchronizer().start();
|
||||
|
||||
let items = await allItems();
|
||||
let items = await allNotesFolders();
|
||||
|
||||
expect(items.length).toBe(1);
|
||||
}));
|
||||
@@ -712,7 +698,7 @@ describe('Synchronizer', function() {
|
||||
let disabledItems = await BaseItem.syncDisabledItems(syncTargetId());
|
||||
expect(disabledItems.length).toBe(0);
|
||||
await Note.save({ id: noteId, title: "un mod", });
|
||||
synchronizer().testingHooks_ = ['rejectedByTarget'];
|
||||
synchronizer().testingHooks_ = ['notesRejectedByTarget'];
|
||||
await synchronizer().start();
|
||||
synchronizer().testingHooks_ = [];
|
||||
await synchronizer().start(); // Another sync to check that this item is now excluded from sync
|
||||
@@ -865,8 +851,8 @@ describe('Synchronizer', function() {
|
||||
await shim.attachFileToNote(note1, __dirname + '/../tests/support/photo.jpg');
|
||||
let resource1 = (await Resource.all())[0];
|
||||
let resourcePath1 = Resource.fullPath(resource1);
|
||||
await synchronizer().start();
|
||||
expect((await fileApi().list()).items.length).toBe(3);
|
||||
await synchronizer().start();
|
||||
expect((await remoteNotesFoldersResources()).length).toBe(3);
|
||||
|
||||
await switchClient(2);
|
||||
|
||||
@@ -879,7 +865,7 @@ describe('Synchronizer', function() {
|
||||
expect(ls.fetch_status).toBe(Resource.FETCH_STATUS_IDLE);
|
||||
|
||||
const fetcher = new ResourceFetcher(() => { return synchronizer().api() });
|
||||
fetcher.queueDownload(resource1_2.id);
|
||||
fetcher.queueDownload_(resource1_2.id);
|
||||
await fetcher.waitForAllFinished();
|
||||
|
||||
resource1_2 = await Resource.load(resource1.id);
|
||||
@@ -908,7 +894,7 @@ describe('Synchronizer', function() {
|
||||
// Simulate a failed download
|
||||
get: () => { return new Promise((resolve, reject) => { reject(new Error('did not work')) }); }
|
||||
} });
|
||||
fetcher.queueDownload(resource1.id);
|
||||
fetcher.queueDownload_(resource1.id);
|
||||
await fetcher.waitForAllFinished();
|
||||
|
||||
resource1 = await Resource.load(resource1.id);
|
||||
@@ -917,6 +903,29 @@ describe('Synchronizer', function() {
|
||||
expect(ls.fetch_error).toBe('did not work');
|
||||
}));
|
||||
|
||||
it('should set the resource file size if it is missing', asyncTest(async () => {
|
||||
while (insideBeforeEach) await time.msleep(500);
|
||||
|
||||
let folder1 = await Folder.save({ title: "folder1" });
|
||||
let note1 = await Note.save({ title: 'ma note', parent_id: folder1.id });
|
||||
await shim.attachFileToNote(note1, __dirname + '/../tests/support/photo.jpg');
|
||||
await synchronizer().start();
|
||||
|
||||
await switchClient(2);
|
||||
|
||||
await synchronizer().start();
|
||||
let r1 = (await Resource.all())[0];
|
||||
await Resource.setFileSizeOnly(r1.id, -1);
|
||||
r1 = await Resource.load(r1.id);
|
||||
expect(r1.size).toBe(-1);
|
||||
|
||||
const fetcher = new ResourceFetcher(() => { return synchronizer().api() });
|
||||
fetcher.queueDownload_(r1.id);
|
||||
await fetcher.waitForAllFinished();
|
||||
r1 = await Resource.load(r1.id);
|
||||
expect(r1.size).toBe(2720);
|
||||
}));
|
||||
|
||||
it('should delete resources', asyncTest(async () => {
|
||||
while (insideBeforeEach) await time.msleep(500);
|
||||
|
||||
@@ -933,11 +942,10 @@ describe('Synchronizer', function() {
|
||||
let allResources = await Resource.all();
|
||||
expect(allResources.length).toBe(1);
|
||||
let all = await fileApi().list();
|
||||
expect(all.items.length).toBe(3);
|
||||
expect((await remoteNotesFoldersResources()).length).toBe(3);
|
||||
await Resource.delete(resource1.id);
|
||||
await synchronizer().start();
|
||||
all = await fileApi().list();
|
||||
expect(all.items.length).toBe(2);
|
||||
expect((await remoteNotesFoldersResources()).length).toBe(2);
|
||||
|
||||
await switchClient(1);
|
||||
|
||||
@@ -966,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];
|
||||
@@ -1030,6 +1038,33 @@ describe('Synchronizer', function() {
|
||||
expect(allEncrypted).toBe(false);
|
||||
}));
|
||||
|
||||
it('should set the resource file size after decryption', asyncTest(async () => {
|
||||
Setting.setValue('encryption.enabled', true);
|
||||
const masterKey = await loadEncryptionMasterKey();
|
||||
|
||||
let folder1 = await Folder.save({ title: "folder1" });
|
||||
let note1 = await Note.save({ title: 'ma note', parent_id: folder1.id });
|
||||
await shim.attachFileToNote(note1, __dirname + '/../tests/support/photo.jpg');
|
||||
let resource1 = (await Resource.all())[0];
|
||||
await Resource.setFileSizeOnly(resource1.id, -1);
|
||||
let resourcePath1 = Resource.fullPath(resource1);
|
||||
await synchronizer().start();
|
||||
|
||||
await switchClient(2);
|
||||
|
||||
await synchronizer().start();
|
||||
Setting.setObjectKey('encryption.passwordCache', masterKey.id, '123456');
|
||||
await encryptionService().loadMasterKeysFromSettings();
|
||||
|
||||
const fetcher = new ResourceFetcher(() => { return synchronizer().api() });
|
||||
fetcher.queueDownload_(resource1.id);
|
||||
await fetcher.waitForAllFinished();
|
||||
await decryptionWorker().start();
|
||||
|
||||
const resource1_2 = await Resource.load(resource1.id);
|
||||
expect(resource1_2.size).toBe(2720);
|
||||
}));
|
||||
|
||||
it('should encrypt remote resources after encryption has been enabled', asyncTest(async () => {
|
||||
while (insideBeforeEach) await time.msleep(100);
|
||||
|
||||
@@ -1068,11 +1103,11 @@ describe('Synchronizer', function() {
|
||||
it('should create remote items with UTF-8 content', asyncTest(async () => {
|
||||
let folder = await Folder.save({ title: "Fahrräder" });
|
||||
await Note.save({ title: "Fahrräder", body: "Fahrräder", parent_id: folder.id });
|
||||
let all = await allItems();
|
||||
let all = await allNotesFolders();
|
||||
|
||||
await synchronizer().start();
|
||||
|
||||
await localItemsSameAsRemote(all, expect);
|
||||
await localNotesFoldersSameAsRemote(all, expect);
|
||||
}));
|
||||
|
||||
it("should update remote items but not pull remote changes", asyncTest(async () => {
|
||||
@@ -1090,7 +1125,7 @@ describe('Synchronizer', function() {
|
||||
|
||||
await Note.save({ title: "un UPDATE", id: note.id });
|
||||
await synchronizer().start({ syncSteps: ["update_remote"] });
|
||||
let all = await allItems();
|
||||
let all = await allNotesFolders();
|
||||
expect(all.length).toBe(2);
|
||||
|
||||
await switchClient(2);
|
||||
@@ -1100,11 +1135,8 @@ describe('Synchronizer', function() {
|
||||
expect(note2.title).toBe("un UPDATE");
|
||||
}));
|
||||
|
||||
it("should sync Welcome notebook and not duplicate it", asyncTest(async () => {
|
||||
// Create the Welcome items on two separate clients and verify
|
||||
// that they appear only once (due to having hard-coded IDs), that they are not duplicated.
|
||||
|
||||
Setting.setConstant('env', 'prod');
|
||||
it("should create a new Welcome notebook on each client", asyncTest(async () => {
|
||||
// Create the Welcome items on two separate clients
|
||||
|
||||
await WelcomeUtils.createWelcomeItems();
|
||||
await synchronizer().start();
|
||||
@@ -1114,7 +1146,7 @@ describe('Synchronizer', function() {
|
||||
await WelcomeUtils.createWelcomeItems();
|
||||
const beforeFolderCount = (await Folder.all()).length;
|
||||
const beforeNoteCount = (await Note.all()).length;
|
||||
expect(beforeFolderCount >= 1).toBe(true);
|
||||
expect(beforeFolderCount === 1).toBe(true);
|
||||
expect(beforeNoteCount > 1).toBe(true);
|
||||
|
||||
await synchronizer().start();
|
||||
@@ -1122,8 +1154,8 @@ describe('Synchronizer', function() {
|
||||
const afterFolderCount = (await Folder.all()).length;
|
||||
const afterNoteCount = (await Note.all()).length;
|
||||
|
||||
expect(afterFolderCount).toBe(beforeFolderCount);
|
||||
expect(afterNoteCount).toBe(beforeNoteCount);
|
||||
expect(afterFolderCount).toBe(beforeFolderCount * 2);
|
||||
expect(afterNoteCount).toBe(beforeNoteCount * 2);
|
||||
|
||||
// Changes to the Welcome items should be synced to all clients
|
||||
|
||||
@@ -1136,8 +1168,312 @@ describe('Synchronizer', function() {
|
||||
|
||||
await synchronizer().start();
|
||||
|
||||
const f1_1 = (await Folder.all())[0];
|
||||
const f1_1 = await Folder.load(f1.id);
|
||||
expect(f1_1.title).toBe('Welcome MOD');
|
||||
}));
|
||||
|
||||
it("should not save revisions when updating a note via sync", asyncTest(async () => {
|
||||
// When a note is updated, a revision of the original is created.
|
||||
// Here, on client 1, the note is updated for the first time, however since it is
|
||||
// via sync, we don't create a revision - that revision has already been created on client
|
||||
// 2 and is going to be synced.
|
||||
|
||||
const n1 = await Note.save({ title: 'testing' });
|
||||
await synchronizer().start();
|
||||
|
||||
await switchClient(2);
|
||||
|
||||
await synchronizer().start();
|
||||
await Note.save({ id: n1.id, title: 'mod from client 2' });
|
||||
await revisionService().collectRevisions();
|
||||
const allRevs1 = await Revision.allByType(BaseModel.TYPE_NOTE, n1.id);
|
||||
expect(allRevs1.length).toBe(1);
|
||||
await synchronizer().start();
|
||||
|
||||
await switchClient(1);
|
||||
|
||||
await synchronizer().start();
|
||||
const allRevs2 = await Revision.allByType(BaseModel.TYPE_NOTE, n1.id);
|
||||
expect(allRevs2.length).toBe(1);
|
||||
expect(allRevs2[0].id).toBe(allRevs1[0].id);
|
||||
}));
|
||||
|
||||
it("should not save revisions when deleting a note via sync", asyncTest(async () => {
|
||||
const n1 = await Note.save({ title: 'testing' });
|
||||
await synchronizer().start();
|
||||
|
||||
await switchClient(2);
|
||||
|
||||
await synchronizer().start();
|
||||
await Note.delete(n1.id);
|
||||
await revisionService().collectRevisions(); // REV 1
|
||||
{
|
||||
const allRevs = await Revision.allByType(BaseModel.TYPE_NOTE, n1.id);
|
||||
expect(allRevs.length).toBe(1);
|
||||
}
|
||||
await synchronizer().start();
|
||||
|
||||
await switchClient(1);
|
||||
|
||||
await synchronizer().start(); // The local note gets deleted here, however a new rev is *not* created
|
||||
{
|
||||
const allRevs = await Revision.allByType(BaseModel.TYPE_NOTE, n1.id);
|
||||
expect(allRevs.length).toBe(1);
|
||||
}
|
||||
|
||||
const notes = await Note.all();
|
||||
expect(notes.length).toBe(0);
|
||||
}));
|
||||
|
||||
it("should not save revisions when an item_change has been generated as a result of a sync", asyncTest(async () => {
|
||||
// When a note is modified an item_change object is going to be created. This
|
||||
// is used for example to tell the search engine, when note should be indexed. It is
|
||||
// also used by the revision service to tell what note should get a new revision.
|
||||
// When a note is modified via sync, this item_change object is also created. The issue
|
||||
// is that we don't want to create revisions for these particular item_changes, because
|
||||
// such revision has already been created on another client (whatever client initially
|
||||
// modified the note), and that rev is going to be synced.
|
||||
//
|
||||
// So in the end we need to make sure that we don't create these unecessary additional revisions.
|
||||
|
||||
const n1 = await Note.save({ title: 'testing' });
|
||||
await synchronizer().start();
|
||||
|
||||
await switchClient(2);
|
||||
|
||||
await synchronizer().start();
|
||||
await Note.save({ id: n1.id, title: 'mod from client 2' });
|
||||
await revisionService().collectRevisions();
|
||||
await synchronizer().start();
|
||||
|
||||
await switchClient(1);
|
||||
|
||||
await synchronizer().start();
|
||||
|
||||
{
|
||||
const allRevs = await Revision.allByType(BaseModel.TYPE_NOTE, n1.id);
|
||||
expect(allRevs.length).toBe(1);
|
||||
}
|
||||
|
||||
await revisionService().collectRevisions();
|
||||
|
||||
{
|
||||
const allRevs = await Revision.allByType(BaseModel.TYPE_NOTE, n1.id);
|
||||
expect(allRevs.length).toBe(1);
|
||||
}
|
||||
}));
|
||||
|
||||
it("should handle case when new rev is created on client, then older rev arrives later via sync", asyncTest(async () => {
|
||||
// - C1 creates note 1
|
||||
// - C1 modifies note 1 - REV1 created
|
||||
// - C1 sync
|
||||
// - C2 sync
|
||||
// - C2 receives note 1
|
||||
// - C2 modifies note 1 - REV2 created (but not based on REV1)
|
||||
// - C2 receives REV1
|
||||
//
|
||||
// In that case, we need to make sure that REV1 and REV2 are both valid and can be retrieved.
|
||||
// Even though REV1 was created before REV2, REV2 is *not* based on REV1. This is not ideal
|
||||
// due to unecessary data being saved, but a possible edge case and we simply need to check
|
||||
// all the data is valid.
|
||||
|
||||
const n1 = await Note.save({ title: 'note' });
|
||||
await Note.save({ id: n1.id, title: 'note REV1' });
|
||||
await revisionService().collectRevisions(); // REV1
|
||||
expect((await Revision.allByType(BaseModel.TYPE_NOTE, n1.id)).length).toBe(1);
|
||||
await synchronizer().start();
|
||||
|
||||
await switchClient(2);
|
||||
|
||||
synchronizer().testingHooks_ = ['skipRevisions'];
|
||||
await synchronizer().start();
|
||||
synchronizer().testingHooks_ = [];
|
||||
|
||||
await Note.save({ id: n1.id, title: 'note REV2' });
|
||||
await revisionService().collectRevisions(); // REV2
|
||||
expect((await Revision.allByType(BaseModel.TYPE_NOTE, n1.id)).length).toBe(1);
|
||||
await synchronizer().start(); // Sync the rev that had been skipped above with skipRevisions
|
||||
|
||||
const revisions = await Revision.allByType(BaseModel.TYPE_NOTE, n1.id);
|
||||
expect(revisions.length).toBe(2);
|
||||
|
||||
expect((await revisionService().revisionNote(revisions, 0)).title).toBe('note REV1');
|
||||
expect((await revisionService().revisionNote(revisions, 1)).title).toBe('note REV2');
|
||||
}));
|
||||
|
||||
it("should not download resources over the limit", asyncTest(async () => {
|
||||
const note1 = await Note.save({ title: 'note' });
|
||||
await shim.attachFileToNote(note1, __dirname + '/../tests/support/photo.jpg');
|
||||
await synchronizer().start();
|
||||
|
||||
await switchClient(2);
|
||||
|
||||
const previousMax = synchronizer().maxResourceSize_;
|
||||
synchronizer().maxResourceSize_ = 1;
|
||||
await synchronizer().start();
|
||||
synchronizer().maxResourceSize_ = previousMax;
|
||||
|
||||
const syncItems = await BaseItem.allSyncItems(syncTargetId());
|
||||
expect(syncItems.length).toBe(2);
|
||||
expect(syncItems[1].item_location).toBe(BaseItem.SYNC_ITEM_LOCATION_REMOTE);
|
||||
expect(syncItems[1].sync_disabled).toBe(1);
|
||||
}));
|
||||
|
||||
it("should not upload a resource if it has not been fetched yet", asyncTest(async () => {
|
||||
// In some rare cases, the synchronizer might try to upload a resource even though it
|
||||
// doesn't have the resource file. It can happen in this situation:
|
||||
// - C1 create resource
|
||||
// - C1 sync
|
||||
// - C2 sync
|
||||
// - C2 resource metadata is received but ResourceFetcher hasn't downloaded the file yet
|
||||
// - C2 enables E2EE - all the items are marked for forced sync
|
||||
// - C2 sync
|
||||
// The synchronizer will try to upload the resource, even though it doesn't have the file,
|
||||
// so we need to make sure it doesn't. But also that once it gets the file, the resource
|
||||
// does get uploaded.
|
||||
|
||||
const note1 = await Note.save({ title: 'note' });
|
||||
await shim.attachFileToNote(note1, __dirname + '/../tests/support/photo.jpg');
|
||||
const resource = (await Resource.all())[0];
|
||||
await Resource.setLocalState(resource.id, { fetch_status: Resource.FETCH_STATUS_IDLE });
|
||||
await synchronizer().start();
|
||||
|
||||
expect((await remoteResources()).length).toBe(0);
|
||||
|
||||
await Resource.setLocalState(resource.id, { fetch_status: Resource.FETCH_STATUS_DONE });
|
||||
await synchronizer().start();
|
||||
|
||||
expect((await remoteResources()).length).toBe(1);
|
||||
}));
|
||||
|
||||
it('should decrypt the resource metadata, but not try to decrypt the file, if it is not present', asyncTest(async () => {
|
||||
const note1 = await Note.save({ title: 'note' });
|
||||
await shim.attachFileToNote(note1, __dirname + '/../tests/support/photo.jpg');
|
||||
const masterKey = await loadEncryptionMasterKey();
|
||||
await encryptionService().enableEncryption(masterKey, '123456');
|
||||
await encryptionService().loadMasterKeysFromSettings();
|
||||
await synchronizer().start();
|
||||
expect(await allSyncTargetItemsEncrypted()).toBe(true);
|
||||
|
||||
await switchClient(2);
|
||||
|
||||
await synchronizer().start();
|
||||
Setting.setObjectKey('encryption.passwordCache', masterKey.id, '123456');
|
||||
await encryptionService().loadMasterKeysFromSettings();
|
||||
await decryptionWorker().start();
|
||||
|
||||
let resource = (await Resource.all())[0];
|
||||
|
||||
expect(!!resource.encryption_applied).toBe(false);
|
||||
expect(!!resource.encryption_blob_encrypted).toBe(true);
|
||||
|
||||
const resourceFetcher = new ResourceFetcher(() => { return synchronizer().api() });
|
||||
await resourceFetcher.start();
|
||||
await resourceFetcher.waitForAllFinished();
|
||||
|
||||
const ls = await Resource.localState(resource);
|
||||
expect(ls.fetch_status).toBe(Resource.FETCH_STATUS_DONE);
|
||||
|
||||
await decryptionWorker().start();
|
||||
resource = (await Resource.all())[0];
|
||||
|
||||
expect(!!resource.encryption_blob_encrypted).toBe(false);
|
||||
}));
|
||||
|
||||
it('should not create revisions when item is modified as a result of decryption', asyncTest(async () => {
|
||||
// Handle this scenario:
|
||||
// - C1 creates note
|
||||
// - C1 never changes it
|
||||
// - E2EE is enabled
|
||||
// - C1 sync
|
||||
// - More than one week later (as defined by oldNoteCutOffDate_), C2 sync
|
||||
// - C2 enters master password and note gets decrypted
|
||||
//
|
||||
// Technically at this point the note is modified (from encrypted to non-encrypted) and thus a ItemChange
|
||||
// object is created. The note is also older than oldNoteCutOffDate. However, this should not lead to the
|
||||
// creation of a revision because that change was not the result of a user action.
|
||||
// I guess that's the general rule - changes that come from user actions should result in revisions,
|
||||
// while automated changes (sync, decryption) should not.
|
||||
|
||||
const dateInPast = revisionService().oldNoteCutOffDate_() - 1000;
|
||||
|
||||
const note1 = await Note.save({ title: 'ma note', updated_time: dateInPast, created_time: dateInPast }, { autoTimestamp: false });
|
||||
const masterKey = await loadEncryptionMasterKey();
|
||||
await encryptionService().enableEncryption(masterKey, '123456');
|
||||
await encryptionService().loadMasterKeysFromSettings();
|
||||
await synchronizer().start();
|
||||
|
||||
await switchClient(2);
|
||||
|
||||
await synchronizer().start();
|
||||
|
||||
Setting.setObjectKey('encryption.passwordCache', masterKey.id, '123456');
|
||||
await encryptionService().loadMasterKeysFromSettings();
|
||||
await decryptionWorker().start();
|
||||
|
||||
await revisionService().collectRevisions();
|
||||
|
||||
expect((await Revision.all()).length).toBe(0);
|
||||
}));
|
||||
|
||||
it('should stop trying to decrypt item after a few attempts', asyncTest(async () => {
|
||||
let hasThrown;
|
||||
|
||||
const note = await Note.save({ title: 'ma note' });
|
||||
const masterKey = await loadEncryptionMasterKey();
|
||||
await encryptionService().enableEncryption(masterKey, '123456');
|
||||
await encryptionService().loadMasterKeysFromSettings();
|
||||
await synchronizer().start();
|
||||
|
||||
await switchClient(2);
|
||||
|
||||
await synchronizer().start();
|
||||
|
||||
// First, simulate a broken note and check that the decryption worker
|
||||
// gives up decrypting after a number of tries. This is mainly relevant
|
||||
// for data that crashes the mobile application - we don't want to keep
|
||||
// decrypting these.
|
||||
|
||||
const encryptedNote = await Note.load(note.id);
|
||||
const goodCipherText = encryptedNote.encryption_cipher_text;
|
||||
await Note.save({ id: note.id, encryption_cipher_text: 'doesntlookright' });
|
||||
|
||||
Setting.setObjectKey('encryption.passwordCache', masterKey.id, '123456');
|
||||
await encryptionService().loadMasterKeysFromSettings();
|
||||
|
||||
hasThrown = await checkThrowAsync(async () => await decryptionWorker().start({ errorHandler: 'throw' }));
|
||||
expect(hasThrown).toBe(true);
|
||||
|
||||
hasThrown = await checkThrowAsync(async () => await decryptionWorker().start({ errorHandler: 'throw' }));
|
||||
expect(hasThrown).toBe(true);
|
||||
|
||||
// Third time, an error is logged and no error is thrown
|
||||
hasThrown = await checkThrowAsync(async () => await decryptionWorker().start({ errorHandler: 'throw' }));
|
||||
expect(hasThrown).toBe(false);
|
||||
|
||||
const disabledItems = await decryptionWorker().decryptionDisabledItems();
|
||||
expect(disabledItems.length).toBe(1);
|
||||
expect(disabledItems[0].id).toBe(note.id);
|
||||
|
||||
expect((await kvStore().all()).length).toBe(1);
|
||||
await kvStore().clear();
|
||||
|
||||
// Now check that if it fails once but succeed the second time, the note
|
||||
// is correctly decrypted and the counters are cleared.
|
||||
|
||||
hasThrown = await checkThrowAsync(async () => await decryptionWorker().start({ errorHandler: 'throw' }));
|
||||
expect(hasThrown).toBe(true);
|
||||
|
||||
await Note.save({ id: note.id, encryption_cipher_text: goodCipherText });
|
||||
|
||||
hasThrown = await checkThrowAsync(async () => await decryptionWorker().start({ errorHandler: 'throw' }));
|
||||
expect(hasThrown).toBe(false);
|
||||
|
||||
const decryptedNote = await Note.load(note.id);
|
||||
expect(decryptedNote.title).toBe('ma note');
|
||||
|
||||
expect((await kvStore().all()).length).toBe(0);
|
||||
expect((await decryptionWorker().decryptionDisabledItems()).length).toBe(0);
|
||||
}));
|
||||
|
||||
});
|
||||
|
||||
@@ -8,6 +8,7 @@ const ItemChange = require('lib/models/ItemChange.js');
|
||||
const Resource = require('lib/models/Resource.js');
|
||||
const Tag = require('lib/models/Tag.js');
|
||||
const NoteTag = require('lib/models/NoteTag.js');
|
||||
const Revision = require('lib/models/Revision.js');
|
||||
const { Logger } = require('lib/logger.js');
|
||||
const Setting = require('lib/models/Setting.js');
|
||||
const MasterKey = require('lib/models/MasterKey');
|
||||
@@ -30,13 +31,19 @@ const SyncTargetNextcloud = require('lib/SyncTargetNextcloud.js');
|
||||
const SyncTargetDropbox = require('lib/SyncTargetDropbox.js');
|
||||
const EncryptionService = require('lib/services/EncryptionService.js');
|
||||
const DecryptionWorker = require('lib/services/DecryptionWorker.js');
|
||||
const ResourceService = require('lib/services/ResourceService.js');
|
||||
const RevisionService = require('lib/services/RevisionService.js');
|
||||
const KvStore = require('lib/services/KvStore.js');
|
||||
const WebDavApi = require('lib/WebDavApi');
|
||||
const DropboxApi = require('lib/DropboxApi');
|
||||
|
||||
let databases_ = [];
|
||||
let synchronizers_ = [];
|
||||
let encryptionServices_ = [];
|
||||
let revisionServices_ = [];
|
||||
let decryptionWorkers_ = [];
|
||||
let resourceServices_ = [];
|
||||
let kvStores_ = [];
|
||||
let fileApi_ = null;
|
||||
let currentClient_ = 1;
|
||||
|
||||
@@ -69,6 +76,11 @@ const sleepTime = syncTargetId_ == SyncTargetRegistry.nameToId('filesystem') ? 1
|
||||
|
||||
console.info('Testing with sync target: ' + SyncTargetRegistry.idToName(syncTargetId_));
|
||||
|
||||
const dbLogger = new Logger();
|
||||
dbLogger.addTarget('console');
|
||||
dbLogger.addTarget('file', { path: logDir + '/log.txt' });
|
||||
dbLogger.setLevel(Logger.LEVEL_WARN);
|
||||
|
||||
const logger = new Logger();
|
||||
logger.addTarget('console');
|
||||
logger.addTarget('file', { path: logDir + '/log.txt' });
|
||||
@@ -80,6 +92,7 @@ BaseItem.loadClass('Resource', Resource);
|
||||
BaseItem.loadClass('Tag', Tag);
|
||||
BaseItem.loadClass('NoteTag', NoteTag);
|
||||
BaseItem.loadClass('MasterKey', MasterKey);
|
||||
BaseItem.loadClass('Revision', Revision);
|
||||
|
||||
Setting.setConstant('appId', 'net.cozic.joplin-cli');
|
||||
Setting.setConstant('appType', 'cli');
|
||||
@@ -102,6 +115,8 @@ function sleep(n) {
|
||||
}
|
||||
|
||||
async function switchClient(id) {
|
||||
if (!databases_[id]) throw new Error('Call setupDatabaseAndSynchronizer(' + id + ') first!!');
|
||||
|
||||
await time.msleep(sleepTime); // Always leave a little time so that updated_time properties don't overlap
|
||||
await Setting.saveAll();
|
||||
|
||||
@@ -111,9 +126,11 @@ async function switchClient(id) {
|
||||
Note.db_ = databases_[id];
|
||||
BaseItem.db_ = databases_[id];
|
||||
Setting.db_ = databases_[id];
|
||||
Resource.db_ = databases_[id];
|
||||
|
||||
BaseItem.encryptionService_ = encryptionServices_[id];
|
||||
Resource.encryptionService_ = encryptionServices_[id];
|
||||
BaseItem.revisionService_ = revisionServices_[id];
|
||||
|
||||
Setting.setConstant('resourceDir', resourceDir(id));
|
||||
|
||||
@@ -125,21 +142,29 @@ async function clearDatabase(id = null) {
|
||||
|
||||
await ItemChange.waitForAllSaved();
|
||||
|
||||
let queries = [
|
||||
'DELETE FROM notes',
|
||||
'DELETE FROM folders',
|
||||
'DELETE FROM resources',
|
||||
'DELETE FROM tags',
|
||||
'DELETE FROM note_tags',
|
||||
'DELETE FROM master_keys',
|
||||
'DELETE FROM item_changes',
|
||||
'DELETE FROM note_resources',
|
||||
'DELETE FROM settings',
|
||||
'DELETE FROM deleted_items',
|
||||
'DELETE FROM sync_items',
|
||||
'DELETE FROM notes_normalized',
|
||||
const tableNames = [
|
||||
'notes',
|
||||
'folders',
|
||||
'resources',
|
||||
'tags',
|
||||
'note_tags',
|
||||
'master_keys',
|
||||
'item_changes',
|
||||
'note_resources',
|
||||
'settings',
|
||||
'deleted_items',
|
||||
'sync_items',
|
||||
'notes_normalized',
|
||||
'revisions',
|
||||
'key_values',
|
||||
];
|
||||
|
||||
const queries = [];
|
||||
for (const n of tableNames) {
|
||||
queries.push('DELETE FROM ' + n);
|
||||
queries.push('DELETE FROM sqlite_sequence WHERE name="' + n + '"'); // Reset autoincremented IDs
|
||||
}
|
||||
|
||||
await databases_[id].transactionExecBatch(queries);
|
||||
}
|
||||
|
||||
@@ -164,6 +189,7 @@ async function setupDatabase(id = null) {
|
||||
};
|
||||
|
||||
databases_[id] = new JoplinDatabase(new DatabaseDriverNode());
|
||||
databases_[id].setLogger(dbLogger);
|
||||
await databases_[id].open({ name: filePath });
|
||||
|
||||
BaseModel.db_ = databases_[id];
|
||||
@@ -196,8 +222,11 @@ async function setupDatabaseAndSynchronizer(id = null) {
|
||||
}
|
||||
|
||||
encryptionServices_[id] = new EncryptionService();
|
||||
revisionServices_[id] = new RevisionService();
|
||||
decryptionWorkers_[id] = new DecryptionWorker();
|
||||
decryptionWorkers_[id].setEncryptionService(encryptionServices_[id]);
|
||||
resourceServices_[id] = new ResourceService();
|
||||
kvStores_[id] = new KvStore();
|
||||
|
||||
await fileApi().clearRoot();
|
||||
}
|
||||
@@ -217,9 +246,28 @@ function encryptionService(id = null) {
|
||||
return encryptionServices_[id];
|
||||
}
|
||||
|
||||
function kvStore(id = null) {
|
||||
if (id === null) id = currentClient_;
|
||||
const o = kvStores_[id];
|
||||
o.setDb(db(id));
|
||||
return o;
|
||||
}
|
||||
|
||||
function revisionService(id = null) {
|
||||
if (id === null) id = currentClient_;
|
||||
return revisionServices_[id];
|
||||
}
|
||||
|
||||
function decryptionWorker(id = null) {
|
||||
if (id === null) id = currentClient_;
|
||||
return decryptionWorkers_[id];
|
||||
const o = decryptionWorkers_[id];
|
||||
o.setKvStore(kvStore(id));
|
||||
return o;
|
||||
}
|
||||
|
||||
function resourceService(id = null) {
|
||||
if (id === null) id = currentClient_;
|
||||
return resourceServices_[id];
|
||||
}
|
||||
|
||||
async function loadEncryptionMasterKey(id = null, useExisting = false) {
|
||||
@@ -314,4 +362,34 @@ function asyncTest(callback) {
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = { setupDatabase, setupDatabaseAndSynchronizer, db, synchronizer, fileApi, sleep, clearDatabase, switchClient, syncTargetId, objectsEqual, checkThrowAsync, encryptionService, loadEncryptionMasterKey, fileContentEqual, decryptionWorker, asyncTest };
|
||||
async function allSyncTargetItemsEncrypted() {
|
||||
const list = await fileApi().list();
|
||||
const files = list.items;
|
||||
|
||||
let totalCount = 0;
|
||||
let encryptedCount = 0;
|
||||
for (let i = 0; i < files.length; i++) {
|
||||
const file = files[i];
|
||||
const remoteContentString = await fileApi().get(file.path);
|
||||
const remoteContent = await BaseItem.unserialize(remoteContentString);
|
||||
const ItemClass = BaseItem.itemClass(remoteContent);
|
||||
|
||||
if (!ItemClass.encryptionSupported()) continue;
|
||||
|
||||
totalCount++;
|
||||
|
||||
if (remoteContent.type_ === BaseModel.TYPE_RESOURCE) {
|
||||
const content = await fileApi().get('.resource/' + remoteContent.id);
|
||||
totalCount++;
|
||||
if (content.substr(0, 5) === 'JED01') output = encryptedCount++;
|
||||
}
|
||||
|
||||
if (!!remoteContent.encryption_applied) encryptedCount++;
|
||||
}
|
||||
|
||||
if (!totalCount) throw new Error('No encryptable item on sync target');
|
||||
|
||||
return totalCount === encryptedCount;
|
||||
}
|
||||
|
||||
module.exports = { kvStore, resourceService, allSyncTargetItemsEncrypted, setupDatabase, revisionService, setupDatabaseAndSynchronizer, db, synchronizer, fileApi, sleep, clearDatabase, switchClient, syncTargetId, objectsEqual, checkThrowAsync, encryptionService, loadEncryptionMasterKey, fileContentEqual, decryptionWorker, asyncTest };
|
||||
|
||||
@@ -30,6 +30,7 @@ describe('urlUtils', function() {
|
||||
expect(urlUtils.prependBaseUrl('mailto:emailme@example.com', 'http://example.com')).toBe('mailto:emailme@example.com');
|
||||
expect(urlUtils.prependBaseUrl('javascript:var%20testing=true', 'http://example.com')).toBe('javascript:var%20testing=true');
|
||||
expect(urlUtils.prependBaseUrl('http://alreadyabsolute.com', 'http://example.com')).toBe('http://alreadyabsolute.com');
|
||||
expect(urlUtils.prependBaseUrl('#local-anchor', 'http://example.com')).toBe('#local-anchor');
|
||||
|
||||
done();
|
||||
});
|
||||
|
||||
@@ -23,11 +23,12 @@ window.joplinEnv = function() {
|
||||
return env_;
|
||||
}
|
||||
|
||||
async function browserCaptureVisibleTabs(windowId, options) {
|
||||
if (browserSupportsPromises_) return browser_.tabs.captureVisibleTab(windowId, { format: 'jpeg' });
|
||||
async function browserCaptureVisibleTabs(windowId) {
|
||||
const options = { format: 'jpeg' };
|
||||
if (browserSupportsPromises_) return browser_.tabs.captureVisibleTab(windowId, options);
|
||||
|
||||
return new Promise((resolve, reject) => {
|
||||
browser_.tabs.captureVisibleTab(windowId, { format: 'jpeg' }, (image) => {
|
||||
browser_.tabs.captureVisibleTab(windowId, options, (image) => {
|
||||
resolve(image);
|
||||
});
|
||||
});
|
||||
@@ -56,7 +57,7 @@ browser_.runtime.onMessage.addListener(async (command) => {
|
||||
|
||||
const zoom = await browserGetZoom();
|
||||
|
||||
const imageDataUrl = await browserCaptureVisibleTabs(null, { format: 'jpeg' });
|
||||
const imageDataUrl = await browserCaptureVisibleTabs(null);
|
||||
content = Object.assign({}, command.content);
|
||||
content.image_data_url = imageDataUrl;
|
||||
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
// https://github.com/mozilla/readability/tree/814f0a3884350b6f1adfdebb79ca3599e9806605
|
||||
|
||||
/*eslint-env es6:false*/
|
||||
/* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this file,
|
||||
@@ -496,17 +498,9 @@
|
||||
},
|
||||
setValue: function(newValue) {
|
||||
this._value = newValue;
|
||||
delete this._decodedValue;
|
||||
},
|
||||
setDecodedValue: function(newValue) {
|
||||
this._value = encodeHTML(newValue);
|
||||
this._decodedValue = newValue;
|
||||
},
|
||||
getDecodedValue: function() {
|
||||
if (typeof this._decodedValue === "undefined") {
|
||||
this._decodedValue = (this._value && decodeHTML(this._value)) || "";
|
||||
}
|
||||
return this._decodedValue;
|
||||
getEncodedValue: function() {
|
||||
return encodeHTML(this._value);
|
||||
},
|
||||
};
|
||||
|
||||
@@ -611,6 +605,13 @@
|
||||
};
|
||||
|
||||
var Element = function (tag) {
|
||||
// We use this to find the closing tag.
|
||||
this._matchingTag = tag;
|
||||
// We're explicitly a non-namespace aware parser, we just pretend it's all HTML.
|
||||
var lastColonIndex = tag.lastIndexOf(":");
|
||||
if (lastColonIndex != -1) {
|
||||
tag = tag.substring(lastColonIndex + 1);
|
||||
}
|
||||
this.attributes = [];
|
||||
this.childNodes = [];
|
||||
this.children = [];
|
||||
@@ -659,6 +660,14 @@
|
||||
this.setAttribute("src", str);
|
||||
},
|
||||
|
||||
get srcset() {
|
||||
return this.getAttribute("srcset") || "";
|
||||
},
|
||||
|
||||
set srcset(str) {
|
||||
this.setAttribute("srcset", str);
|
||||
},
|
||||
|
||||
get nodeName() {
|
||||
return this.tagName;
|
||||
},
|
||||
@@ -675,9 +684,9 @@
|
||||
for (var j = 0; j < child.attributes.length; j++) {
|
||||
var attr = child.attributes[j];
|
||||
// the attribute value will be HTML escaped.
|
||||
var val = attr.value;
|
||||
var val = attr.getEncodedValue();
|
||||
var quote = (val.indexOf('"') === -1 ? '"' : "'");
|
||||
arr.push(" " + attr.name + '=' + quote + val + quote);
|
||||
arr.push(" " + attr.name + "=" + quote + val + quote);
|
||||
}
|
||||
|
||||
if (child.localName in voidElems && !child.childNodes.length) {
|
||||
@@ -753,8 +762,9 @@
|
||||
getAttribute: function (name) {
|
||||
for (var i = this.attributes.length; --i >= 0;) {
|
||||
var attr = this.attributes[i];
|
||||
if (attr.name === name)
|
||||
return attr.getDecodedValue();
|
||||
if (attr.name === name) {
|
||||
return attr.value;
|
||||
}
|
||||
}
|
||||
return undefined;
|
||||
},
|
||||
@@ -763,11 +773,11 @@
|
||||
for (var i = this.attributes.length; --i >= 0;) {
|
||||
var attr = this.attributes[i];
|
||||
if (attr.name === name) {
|
||||
attr.setDecodedValue(value);
|
||||
attr.setValue(value);
|
||||
return;
|
||||
}
|
||||
}
|
||||
this.attributes.push(new Attribute(name, encodeHTML(value)));
|
||||
this.attributes.push(new Attribute(name, value));
|
||||
},
|
||||
|
||||
removeAttribute: function (name) {
|
||||
@@ -778,7 +788,13 @@
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
hasAttribute: function (name) {
|
||||
return this.attributes.some(function (attr) {
|
||||
return attr.name == name;
|
||||
});
|
||||
},
|
||||
};
|
||||
|
||||
var Style = function (node) {
|
||||
@@ -925,7 +941,7 @@
|
||||
// Read the attribute value (and consume the matching quote)
|
||||
var value = this.readString(c);
|
||||
|
||||
node.attributes.push(new Attribute(name, value));
|
||||
node.attributes.push(new Attribute(name, decodeHTML(value)));
|
||||
|
||||
return;
|
||||
},
|
||||
@@ -950,7 +966,7 @@
|
||||
strBuf.push(c);
|
||||
c = this.nextChar();
|
||||
}
|
||||
var tag = strBuf.join('');
|
||||
var tag = strBuf.join("");
|
||||
|
||||
if (!tag)
|
||||
return false;
|
||||
@@ -961,7 +977,9 @@
|
||||
while (c !== "/" && c !== ">") {
|
||||
if (c === undefined)
|
||||
return false;
|
||||
while (whitespace.indexOf(this.html[this.currentChar++]) != -1);
|
||||
while (whitespace.indexOf(this.html[this.currentChar++]) != -1) {
|
||||
// Advance cursor to first non-whitespace char.
|
||||
}
|
||||
this.currentChar--;
|
||||
c = this.nextChar();
|
||||
if (c !== "/" && c !== ">") {
|
||||
@@ -1055,9 +1073,10 @@
|
||||
return null;
|
||||
|
||||
// Read any text as Text node
|
||||
var textNode;
|
||||
if (c !== "<") {
|
||||
--this.currentChar;
|
||||
var textNode = new Text();
|
||||
textNode = new Text();
|
||||
var n = this.html.indexOf("<", this.currentChar);
|
||||
if (n === -1) {
|
||||
textNode.innerHTML = this.html.substring(this.currentChar, this.html.length);
|
||||
@@ -1069,6 +1088,18 @@
|
||||
return textNode;
|
||||
}
|
||||
|
||||
if (this.match("![CDATA[")) {
|
||||
var endChar = this.html.indexOf("]]>", this.currentChar);
|
||||
if (endChar === -1) {
|
||||
this.error("unclosed CDATA section");
|
||||
return null;
|
||||
}
|
||||
textNode = new Text();
|
||||
textNode.textContent = this.html.substring(this.currentChar, endChar);
|
||||
this.currentChar = endChar + ("]]>").length;
|
||||
return textNode;
|
||||
}
|
||||
|
||||
c = this.peekNext();
|
||||
|
||||
// Read Comment node. Normally, Comment nodes know their inner
|
||||
@@ -1100,7 +1131,7 @@
|
||||
// If this isn't a void Element, read its child nodes
|
||||
if (!closed) {
|
||||
this.readChildren(node);
|
||||
var closingTag = "</" + localName + ">";
|
||||
var closingTag = "</" + node._matchingTag + ">";
|
||||
if (!this.match(closingTag)) {
|
||||
this.error("expected '" + closingTag + "' and got " + this.html.substr(this.currentChar, closingTag.length));
|
||||
return null;
|
||||
|
||||
@@ -0,0 +1,99 @@
|
||||
// https://github.com/mozilla/readability/tree/814f0a3884350b6f1adfdebb79ca3599e9806605
|
||||
|
||||
/* eslint-env es6:false */
|
||||
/* globals exports */
|
||||
/*
|
||||
* Copyright (c) 2010 Arc90 Inc
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
/*
|
||||
* This code is heavily based on Arc90's readability.js (1.7.1) script
|
||||
* available at: http://code.google.com/p/arc90labs-readability
|
||||
*/
|
||||
|
||||
var REGEXPS = {
|
||||
// NOTE: These two regular expressions are duplicated in
|
||||
// Readability.js. Please keep both copies in sync.
|
||||
unlikelyCandidates: /-ad-|ai2html|banner|breadcrumbs|combx|comment|community|cover-wrap|disqus|extra|foot|gdpr|header|legends|menu|related|remark|replies|rss|shoutbox|sidebar|skyscraper|social|sponsor|supplemental|ad-break|agegate|pagination|pager|popup|yom-remote/i,
|
||||
okMaybeItsACandidate: /and|article|body|column|main|shadow/i,
|
||||
};
|
||||
|
||||
function isNodeVisible(node) {
|
||||
// Have to null-check node.style to deal with SVG and MathML nodes.
|
||||
return (!node.style || node.style.display != "none") && !node.hasAttribute("hidden");
|
||||
}
|
||||
|
||||
/**
|
||||
* Decides whether or not the document is reader-able without parsing the whole thing.
|
||||
*
|
||||
* @return boolean Whether or not we suspect Readability.parse() will suceeed at returning an article object.
|
||||
*/
|
||||
function isProbablyReaderable(doc, isVisible) {
|
||||
if (!isVisible) {
|
||||
isVisible = isNodeVisible;
|
||||
}
|
||||
|
||||
var nodes = doc.querySelectorAll("p, pre");
|
||||
|
||||
// Get <div> nodes which have <br> node(s) and append them into the `nodes` variable.
|
||||
// Some articles' DOM structures might look like
|
||||
// <div>
|
||||
// Sentences<br>
|
||||
// <br>
|
||||
// Sentences<br>
|
||||
// </div>
|
||||
var brNodes = doc.querySelectorAll("div > br");
|
||||
if (brNodes.length) {
|
||||
var set = new Set(nodes);
|
||||
[].forEach.call(brNodes, function(node) {
|
||||
set.add(node.parentNode);
|
||||
});
|
||||
nodes = Array.from(set);
|
||||
}
|
||||
|
||||
var score = 0;
|
||||
// This is a little cheeky, we use the accumulator 'score' to decide what to return from
|
||||
// this callback:
|
||||
return [].some.call(nodes, function(node) {
|
||||
if (!isVisible(node))
|
||||
return false;
|
||||
|
||||
var matchString = node.className + " " + node.id;
|
||||
if (REGEXPS.unlikelyCandidates.test(matchString) &&
|
||||
!REGEXPS.okMaybeItsACandidate.test(matchString)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (node.matches("li p")) {
|
||||
return false;
|
||||
}
|
||||
|
||||
var textContentLength = node.textContent.trim().length;
|
||||
if (textContentLength < 140) {
|
||||
return false;
|
||||
}
|
||||
|
||||
score += Math.sqrt(textContentLength - 140);
|
||||
|
||||
if (score > 20) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
});
|
||||
}
|
||||
|
||||
if (typeof exports === "object") {
|
||||
exports.isProbablyReaderable = isProbablyReaderable;
|
||||
}
|
||||
@@ -1,3 +1,5 @@
|
||||
// https://github.com/mozilla/readability/tree/814f0a3884350b6f1adfdebb79ca3599e9806605
|
||||
|
||||
/*eslint-env es6:false*/
|
||||
/*
|
||||
* Copyright (c) 2010 Arc90 Inc
|
||||
@@ -39,6 +41,7 @@ function Readability(doc, options) {
|
||||
this._articleTitle = null;
|
||||
this._articleByline = null;
|
||||
this._articleDir = null;
|
||||
this._articleSiteName = null;
|
||||
this._attempts = [];
|
||||
|
||||
// Configurable options
|
||||
@@ -111,15 +114,18 @@ Readability.prototype = {
|
||||
// All of the regular expressions in use within readability.
|
||||
// Defined up here so we don't instantiate them repeatedly in loops.
|
||||
REGEXPS: {
|
||||
unlikelyCandidates: /banner|breadcrumbs|combx|comment|community|cover-wrap|disqus|extra|foot|header|legends|menu|related|remark|replies|rss|shoutbox|sidebar|skyscraper|social|sponsor|supplemental|ad-break|agegate|pagination|pager|popup|yom-remote/i,
|
||||
// NOTE: These two regular expressions are duplicated in
|
||||
// Readability-readerable.js. Please keep both copies in sync.
|
||||
unlikelyCandidates: /-ad-|ai2html|banner|breadcrumbs|combx|comment|community|cover-wrap|disqus|extra|foot|gdpr|header|legends|menu|related|remark|replies|rss|shoutbox|sidebar|skyscraper|social|sponsor|supplemental|ad-break|agegate|pagination|pager|popup|yom-remote/i,
|
||||
okMaybeItsACandidate: /and|article|body|column|main|shadow/i,
|
||||
|
||||
positive: /article|body|content|entry|hentry|h-entry|main|page|pagination|post|text|blog|story/i,
|
||||
negative: /hidden|^hid$| hid$| hid |^hid |banner|combx|comment|com-|contact|foot|footer|footnote|masthead|media|meta|outbrain|promo|related|scroll|share|shoutbox|sidebar|skyscraper|sponsor|shopping|tags|tool|widget/i,
|
||||
negative: /hidden|^hid$| hid$| hid |^hid |banner|combx|comment|com-|contact|foot|footer|footnote|gdpr|masthead|media|meta|outbrain|promo|related|scroll|share|shoutbox|sidebar|skyscraper|sponsor|shopping|tags|tool|widget/i,
|
||||
extraneous: /print|archive|comment|discuss|e[\-]?mail|share|reply|all|login|sign|single|utility/i,
|
||||
byline: /byline|author|dateline|writtenby|p-author/i,
|
||||
replaceFonts: /<(\/?)font[^>]*>/gi,
|
||||
normalize: /\s{2,}/g,
|
||||
videos: /\/\/(www\.)?(dailymotion|youtube|youtube-nocookie|player\.vimeo)\.com/i,
|
||||
videos: /\/\/(www\.)?((dailymotion|youtube|youtube-nocookie|player\.vimeo|v\.qq)\.com|(archive|upload\.wikimedia)\.org|player\.twitch\.tv)/i,
|
||||
nextLink: /(next|weiter|continue|>([^\|]|$)|»([^\|]|$))/i,
|
||||
prevLink: /(prev|earl|old|new|<|«)/i,
|
||||
whitespace: /^\s*$/,
|
||||
@@ -260,7 +266,7 @@ Readability.prototype = {
|
||||
|
||||
_getAllNodesWithTag: function(node, tagNames) {
|
||||
if (node.querySelectorAll) {
|
||||
return node.querySelectorAll(tagNames.join(','));
|
||||
return node.querySelectorAll(tagNames.join(","));
|
||||
}
|
||||
return [].concat.apply([], tagNames.map(function(tag) {
|
||||
var collection = node.getElementsByTagName(tag);
|
||||
@@ -320,7 +326,7 @@ Readability.prototype = {
|
||||
return uri;
|
||||
}
|
||||
|
||||
var links = articleContent.getElementsByTagName("a");
|
||||
var links = this._getAllNodesWithTag(articleContent, ["a"]);
|
||||
this._forEachNode(links, function(link) {
|
||||
var href = link.getAttribute("href");
|
||||
if (href) {
|
||||
@@ -335,7 +341,7 @@ Readability.prototype = {
|
||||
}
|
||||
});
|
||||
|
||||
var imgs = articleContent.getElementsByTagName("img");
|
||||
var imgs = this._getAllNodesWithTag(articleContent, ["img"]);
|
||||
this._forEachNode(imgs, function(img) {
|
||||
var src = img.getAttribute("src");
|
||||
if (src) {
|
||||
@@ -355,11 +361,11 @@ Readability.prototype = {
|
||||
var origTitle = "";
|
||||
|
||||
try {
|
||||
curTitle = origTitle = doc.title;
|
||||
curTitle = origTitle = doc.title.trim();
|
||||
|
||||
// If they had an element with id "title" in their HTML
|
||||
if (typeof curTitle !== "string")
|
||||
curTitle = origTitle = this._getInnerText(doc.getElementsByTagName('title')[0]);
|
||||
curTitle = origTitle = this._getInnerText(doc.getElementsByTagName("title")[0]);
|
||||
} catch (e) {/* ignore exceptions setting the title. */}
|
||||
|
||||
var titleHadHierarchicalSeparators = false;
|
||||
@@ -370,44 +376,45 @@ Readability.prototype = {
|
||||
// If there's a separator in the title, first remove the final part
|
||||
if ((/ [\|\-\\\/>»] /).test(curTitle)) {
|
||||
titleHadHierarchicalSeparators = / [\\\/>»] /.test(curTitle);
|
||||
curTitle = origTitle.replace(/(.*)[\|\-\\\/>»] .*/gi, '$1');
|
||||
curTitle = origTitle.replace(/(.*)[\|\-\\\/>»] .*/gi, "$1");
|
||||
|
||||
// If the resulting title is too short (3 words or fewer), remove
|
||||
// the first part instead:
|
||||
if (wordCount(curTitle) < 3)
|
||||
curTitle = origTitle.replace(/[^\|\-\\\/>»]*[\|\-\\\/>»](.*)/gi, '$1');
|
||||
} else if (curTitle.indexOf(': ') !== -1) {
|
||||
curTitle = origTitle.replace(/[^\|\-\\\/>»]*[\|\-\\\/>»](.*)/gi, "$1");
|
||||
} else if (curTitle.indexOf(": ") !== -1) {
|
||||
// Check if we have an heading containing this exact string, so we
|
||||
// could assume it's the full title.
|
||||
var headings = this._concatNodeLists(
|
||||
doc.getElementsByTagName('h1'),
|
||||
doc.getElementsByTagName('h2')
|
||||
doc.getElementsByTagName("h1"),
|
||||
doc.getElementsByTagName("h2")
|
||||
);
|
||||
var trimmedTitle = curTitle.trim();
|
||||
var match = this._someNode(headings, function(heading) {
|
||||
return heading.textContent === curTitle;
|
||||
return heading.textContent.trim() === trimmedTitle;
|
||||
});
|
||||
|
||||
// If we don't, let's extract the title out of the original title string.
|
||||
if (!match) {
|
||||
curTitle = origTitle.substring(origTitle.lastIndexOf(':') + 1);
|
||||
curTitle = origTitle.substring(origTitle.lastIndexOf(":") + 1);
|
||||
|
||||
// If the title is now too short, try the first colon instead:
|
||||
if (wordCount(curTitle) < 3) {
|
||||
curTitle = origTitle.substring(origTitle.indexOf(':') + 1);
|
||||
curTitle = origTitle.substring(origTitle.indexOf(":") + 1);
|
||||
// But if we have too many words before the colon there's something weird
|
||||
// with the titles and the H tags so let's just use the original title instead
|
||||
} else if (wordCount(origTitle.substr(0, origTitle.indexOf(':'))) > 5) {
|
||||
} else if (wordCount(origTitle.substr(0, origTitle.indexOf(":"))) > 5) {
|
||||
curTitle = origTitle;
|
||||
}
|
||||
}
|
||||
} else if (curTitle.length > 150 || curTitle.length < 15) {
|
||||
var hOnes = doc.getElementsByTagName('h1');
|
||||
var hOnes = doc.getElementsByTagName("h1");
|
||||
|
||||
if (hOnes.length === 1)
|
||||
curTitle = this._getInnerText(hOnes[0]);
|
||||
}
|
||||
|
||||
curTitle = curTitle.trim();
|
||||
curTitle = curTitle.trim().replace(this.REGEXPS.normalize, " ");
|
||||
// If we now have 4 words or fewer as our title, and either no
|
||||
// 'hierarchical' separators (\, /, > or ») were found in the original
|
||||
// title or we decreased the number of words by more than 1 word, use
|
||||
@@ -497,7 +504,8 @@ Readability.prototype = {
|
||||
break;
|
||||
}
|
||||
|
||||
if (!this._isPhrasingContent(next)) break;
|
||||
if (!this._isPhrasingContent(next))
|
||||
break;
|
||||
|
||||
// Otherwise, make this node a child of the new <p>.
|
||||
var sibling = next.nextSibling;
|
||||
@@ -505,7 +513,12 @@ Readability.prototype = {
|
||||
next = sibling;
|
||||
}
|
||||
|
||||
while (p.lastChild && this._isWhitespace(p.lastChild)) p.removeChild(p.lastChild);
|
||||
while (p.lastChild && this._isWhitespace(p.lastChild)) {
|
||||
p.removeChild(p.lastChild);
|
||||
}
|
||||
|
||||
if (p.parentNode.tagName === "P")
|
||||
this._setNodeTag(p.parentNode, "DIV");
|
||||
}
|
||||
});
|
||||
},
|
||||
@@ -527,7 +540,16 @@ Readability.prototype = {
|
||||
replacement.readability = node.readability;
|
||||
|
||||
for (var i = 0; i < node.attributes.length; i++) {
|
||||
replacement.setAttribute(node.attributes[i].name, node.attributes[i].value);
|
||||
try {
|
||||
replacement.setAttribute(node.attributes[i].name, node.attributes[i].value);
|
||||
} catch (ex) {
|
||||
/* it's possible for setAttribute() to throw if the attribute name
|
||||
* isn't a valid XML Name. Such attributes can however be parsed from
|
||||
* source in HTML docs, see https://github.com/whatwg/html/issues/4275,
|
||||
* so we can hit them here and then throw. We don't care about such
|
||||
* attributes so we ignore them.
|
||||
*/
|
||||
}
|
||||
}
|
||||
return replacement;
|
||||
},
|
||||
@@ -547,6 +569,8 @@ Readability.prototype = {
|
||||
// visually linked to other content-ful elements (text, images, etc.).
|
||||
this._markDataTables(articleContent);
|
||||
|
||||
this._fixLazyImages(articleContent);
|
||||
|
||||
// Clean out junk from the article content
|
||||
this._cleanConditionally(articleContent, "form");
|
||||
this._cleanConditionally(articleContent, "fieldset");
|
||||
@@ -557,16 +581,21 @@ Readability.prototype = {
|
||||
this._clean(articleContent, "link");
|
||||
this._clean(articleContent, "aside");
|
||||
|
||||
// Clean out elements have "share" in their id/class combinations from final top candidates,
|
||||
// Clean out elements with little content that have "share" in their id/class combinations from final top candidates,
|
||||
// which means we don't remove the top candidates even they have "share".
|
||||
this._forEachNode(articleContent.children, function(topCandidate) {
|
||||
this._cleanMatchedNodes(topCandidate, /share/);
|
||||
|
||||
var shareElementThreshold = this.DEFAULT_CHAR_THRESHOLD;
|
||||
|
||||
this._forEachNode(articleContent.children, function (topCandidate) {
|
||||
this._cleanMatchedNodes(topCandidate, function (node, matchString) {
|
||||
return /share/.test(matchString) && node.textContent.length < shareElementThreshold;
|
||||
});
|
||||
});
|
||||
|
||||
// If there is only one h2 and its text content substantially equals article title,
|
||||
// they are probably using it as a header and not a subheader,
|
||||
// so remove it since we already extract the title separately.
|
||||
var h2 = articleContent.getElementsByTagName('h2');
|
||||
var h2 = articleContent.getElementsByTagName("h2");
|
||||
if (h2.length === 1) {
|
||||
var lengthSimilarRate = (h2[0].textContent.length - this._articleTitle.length) / this._articleTitle.length;
|
||||
if (Math.abs(lengthSimilarRate) < 0.5) {
|
||||
@@ -596,12 +625,12 @@ Readability.prototype = {
|
||||
this._cleanConditionally(articleContent, "div");
|
||||
|
||||
// Remove extra paragraphs
|
||||
this._removeNodes(articleContent.getElementsByTagName('p'), function (paragraph) {
|
||||
var imgCount = paragraph.getElementsByTagName('img').length;
|
||||
var embedCount = paragraph.getElementsByTagName('embed').length;
|
||||
var objectCount = paragraph.getElementsByTagName('object').length;
|
||||
this._removeNodes(articleContent.getElementsByTagName("p"), function (paragraph) {
|
||||
var imgCount = paragraph.getElementsByTagName("img").length;
|
||||
var embedCount = paragraph.getElementsByTagName("embed").length;
|
||||
var objectCount = paragraph.getElementsByTagName("object").length;
|
||||
// At this point, nasty iframes have been removed, only remain embedded video ones.
|
||||
var iframeCount = paragraph.getElementsByTagName('iframe').length;
|
||||
var iframeCount = paragraph.getElementsByTagName("iframe").length;
|
||||
var totalCount = imgCount + embedCount + objectCount + iframeCount;
|
||||
|
||||
return totalCount === 0 && !this._getInnerText(paragraph, false);
|
||||
@@ -612,6 +641,19 @@ Readability.prototype = {
|
||||
if (next && next.tagName == "P")
|
||||
br.parentNode.removeChild(br);
|
||||
});
|
||||
|
||||
// Remove single-cell tables
|
||||
this._forEachNode(this._getAllNodesWithTag(articleContent, ["table"]), function(table) {
|
||||
var tbody = this._hasSingleTagInsideElement(table, "TBODY") ? table.firstElementChild : table;
|
||||
if (this._hasSingleTagInsideElement(tbody, "TR")) {
|
||||
var row = tbody.firstElementChild;
|
||||
if (this._hasSingleTagInsideElement(row, "TD")) {
|
||||
var cell = row.firstElementChild;
|
||||
cell = this._setNodeTag(cell, this._everyNode(cell.childNodes, this._isPhrasingContent) ? "P" : "DIV");
|
||||
table.parentNode.replaceChild(cell, table);
|
||||
}
|
||||
}
|
||||
});
|
||||
},
|
||||
|
||||
/**
|
||||
@@ -625,34 +667,34 @@ Readability.prototype = {
|
||||
node.readability = {"contentScore": 0};
|
||||
|
||||
switch (node.tagName) {
|
||||
case 'DIV':
|
||||
case "DIV":
|
||||
node.readability.contentScore += 5;
|
||||
break;
|
||||
|
||||
case 'PRE':
|
||||
case 'TD':
|
||||
case 'BLOCKQUOTE':
|
||||
case "PRE":
|
||||
case "TD":
|
||||
case "BLOCKQUOTE":
|
||||
node.readability.contentScore += 3;
|
||||
break;
|
||||
|
||||
case 'ADDRESS':
|
||||
case 'OL':
|
||||
case 'UL':
|
||||
case 'DL':
|
||||
case 'DD':
|
||||
case 'DT':
|
||||
case 'LI':
|
||||
case 'FORM':
|
||||
case "ADDRESS":
|
||||
case "OL":
|
||||
case "UL":
|
||||
case "DL":
|
||||
case "DD":
|
||||
case "DT":
|
||||
case "LI":
|
||||
case "FORM":
|
||||
node.readability.contentScore -= 3;
|
||||
break;
|
||||
|
||||
case 'H1':
|
||||
case 'H2':
|
||||
case 'H3':
|
||||
case 'H4':
|
||||
case 'H5':
|
||||
case 'H6':
|
||||
case 'TH':
|
||||
case "H1":
|
||||
case "H2":
|
||||
case "H3":
|
||||
case "H4":
|
||||
case "H5":
|
||||
case "H6":
|
||||
case "TH":
|
||||
node.readability.contentScore -= 5;
|
||||
break;
|
||||
}
|
||||
@@ -691,37 +733,6 @@ Readability.prototype = {
|
||||
return node && node.nextElementSibling;
|
||||
},
|
||||
|
||||
/**
|
||||
* Like _getNextNode, but for DOM implementations with no
|
||||
* firstElementChild/nextElementSibling functionality...
|
||||
*/
|
||||
_getNextNodeNoElementProperties: function(node, ignoreSelfAndKids) {
|
||||
function nextSiblingEl(n) {
|
||||
do {
|
||||
n = n.nextSibling;
|
||||
} while (n && n.nodeType !== n.ELEMENT_NODE);
|
||||
return n;
|
||||
}
|
||||
// First check for kids if those aren't being ignored
|
||||
if (!ignoreSelfAndKids && node.children[0]) {
|
||||
return node.children[0];
|
||||
}
|
||||
// Then for siblings...
|
||||
var next = nextSiblingEl(node);
|
||||
if (next) {
|
||||
return next;
|
||||
}
|
||||
// And finally, move up the parent chain *and* find a sibling
|
||||
// (because this is depth-first traversal, we will have already
|
||||
// seen the parent nodes themselves).
|
||||
do {
|
||||
node = node.parentNode;
|
||||
if (node)
|
||||
next = nextSiblingEl(node);
|
||||
} while (node && !next);
|
||||
return node && next;
|
||||
},
|
||||
|
||||
_checkByline: function(node, matchString) {
|
||||
if (this._articleByline) {
|
||||
return false;
|
||||
@@ -729,9 +740,10 @@ Readability.prototype = {
|
||||
|
||||
if (node.getAttribute !== undefined) {
|
||||
var rel = node.getAttribute("rel");
|
||||
var itemprop = node.getAttribute("itemprop");
|
||||
}
|
||||
|
||||
if ((rel === "author" || this.REGEXPS.byline.test(matchString)) && this._isValidByline(node.textContent)) {
|
||||
if ((rel === "author" || (itemprop && itemprop.indexOf("author") !== -1) || this.REGEXPS.byline.test(matchString)) && this._isValidByline(node.textContent)) {
|
||||
this._articleByline = node.textContent.trim();
|
||||
return true;
|
||||
}
|
||||
@@ -784,6 +796,12 @@ Readability.prototype = {
|
||||
while (node) {
|
||||
var matchString = node.className + " " + node.id;
|
||||
|
||||
if (!this._isProbablyVisible(node)) {
|
||||
this.log("Removing hidden node - " + matchString);
|
||||
node = this._removeAndGetNext(node);
|
||||
continue;
|
||||
}
|
||||
|
||||
// Check to see if this node is a byline, and remove it if it is.
|
||||
if (this._checkByline(node, matchString)) {
|
||||
node = this._removeAndGetNext(node);
|
||||
@@ -794,6 +812,7 @@ Readability.prototype = {
|
||||
if (stripUnlikelyCandidates) {
|
||||
if (this.REGEXPS.unlikelyCandidates.test(matchString) &&
|
||||
!this.REGEXPS.okMaybeItsACandidate.test(matchString) &&
|
||||
!this._hasAncestorTag(node, "table") &&
|
||||
node.tagName !== "BODY" &&
|
||||
node.tagName !== "A") {
|
||||
this.log("Removing unlikely candidate - " + matchString);
|
||||
@@ -826,12 +845,14 @@ Readability.prototype = {
|
||||
if (p !== null) {
|
||||
p.appendChild(childNode);
|
||||
} else if (!this._isWhitespace(childNode)) {
|
||||
p = doc.createElement('p');
|
||||
p = doc.createElement("p");
|
||||
node.replaceChild(p, childNode);
|
||||
p.appendChild(childNode);
|
||||
}
|
||||
} else if (p !== null) {
|
||||
while (p.lastChild && this._isWhitespace(p.lastChild)) p.removeChild(p.lastChild);
|
||||
while (p.lastChild && this._isWhitespace(p.lastChild)) {
|
||||
p.removeChild(p.lastChild);
|
||||
}
|
||||
p = null;
|
||||
}
|
||||
childNode = nextSibling;
|
||||
@@ -841,7 +862,7 @@ Readability.prototype = {
|
||||
// element. DIVs with only a P element inside and no text content can be
|
||||
// safely converted into plain P elements to avoid confusing the scoring
|
||||
// algorithm with DIVs with are, in practice, paragraphs.
|
||||
if (this._hasSinglePInsideElement(node) && this._getLinkDensity(node) < 0.25) {
|
||||
if (this._hasSingleTagInsideElement(node, "P") && this._getLinkDensity(node) < 0.25) {
|
||||
var newNode = node.children[0];
|
||||
node.parentNode.replaceChild(newNode, node);
|
||||
node = newNode;
|
||||
@@ -862,7 +883,7 @@ Readability.prototype = {
|
||||
**/
|
||||
var candidates = [];
|
||||
this._forEachNode(elementsToScore, function(elementToScore) {
|
||||
if (!elementToScore.parentNode || typeof(elementToScore.parentNode.tagName) === 'undefined')
|
||||
if (!elementToScore.parentNode || typeof(elementToScore.parentNode.tagName) === "undefined")
|
||||
return;
|
||||
|
||||
// If this paragraph is less than 25 characters, don't even count it.
|
||||
@@ -881,17 +902,17 @@ Readability.prototype = {
|
||||
contentScore += 1;
|
||||
|
||||
// Add points for any commas within this paragraph.
|
||||
contentScore += innerText.split(',').length;
|
||||
contentScore += innerText.split(",").length;
|
||||
|
||||
// For every 100 characters in this paragraph, add another point. Up to 3 points.
|
||||
contentScore += Math.min(Math.floor(innerText.length / 100), 3);
|
||||
|
||||
// Initialize and score ancestors.
|
||||
this._forEachNode(ancestors, function(ancestor, level) {
|
||||
if (!ancestor.tagName || !ancestor.parentNode || typeof(ancestor.parentNode.tagName) === 'undefined')
|
||||
if (!ancestor.tagName || !ancestor.parentNode || typeof(ancestor.parentNode.tagName) === "undefined")
|
||||
return;
|
||||
|
||||
if (typeof(ancestor.readability) === 'undefined') {
|
||||
if (typeof(ancestor.readability) === "undefined") {
|
||||
this._initializeNode(ancestor);
|
||||
candidates.push(ancestor);
|
||||
}
|
||||
@@ -922,7 +943,7 @@ Readability.prototype = {
|
||||
var candidateScore = candidate.readability.contentScore * (1 - this._getLinkDensity(candidate));
|
||||
candidate.readability.contentScore = candidateScore;
|
||||
|
||||
this.log('Candidate:', candidate, "with score " + candidateScore);
|
||||
this.log("Candidate:", candidate, "with score " + candidateScore);
|
||||
|
||||
for (var t = 0; t < this._nbTopCandidates; t++) {
|
||||
var aTopCandidate = topCandidates[t];
|
||||
@@ -1041,8 +1062,8 @@ Readability.prototype = {
|
||||
var sibling = siblings[s];
|
||||
var append = false;
|
||||
|
||||
this.log("Looking at sibling node:", sibling, sibling.readability ? ("with score " + sibling.readability.contentScore) : '');
|
||||
this.log("Sibling has score", sibling.readability ? sibling.readability.contentScore : 'Unknown');
|
||||
this.log("Looking at sibling node:", sibling, sibling.readability ? ("with score " + sibling.readability.contentScore) : "");
|
||||
this.log("Sibling has score", sibling.readability ? sibling.readability.contentScore : "Unknown");
|
||||
|
||||
if (sibling === topCandidate) {
|
||||
append = true;
|
||||
@@ -1076,7 +1097,7 @@ Readability.prototype = {
|
||||
if (this.ALTER_TO_DIV_EXCEPTIONS.indexOf(sibling.nodeName) === -1) {
|
||||
// We have a node that isn't a common block level element, like a form or td tag.
|
||||
// Turn it into a div so it doesn't get filtered out later by accident.
|
||||
this.log("Altering sibling:", sibling, 'to div.');
|
||||
this.log("Altering sibling:", sibling, "to div.");
|
||||
|
||||
sibling = this._setNodeTag(sibling, "DIV");
|
||||
}
|
||||
@@ -1144,7 +1165,7 @@ Readability.prototype = {
|
||||
this._attempts.push({articleContent: articleContent, textLength: textLength});
|
||||
// No luck after removing flags, just return the longest text we found during the different loops
|
||||
this._attempts.sort(function (a, b) {
|
||||
return a.textLength < b.textLength;
|
||||
return b.textLength - a.textLength;
|
||||
});
|
||||
|
||||
// But first check if we actually have something
|
||||
@@ -1184,7 +1205,7 @@ Readability.prototype = {
|
||||
* @return Boolean - whether the input string is a byline.
|
||||
*/
|
||||
_isValidByline: function(byline) {
|
||||
if (typeof byline == 'string' || byline instanceof String) {
|
||||
if (typeof byline == "string" || byline instanceof String) {
|
||||
byline = byline.trim();
|
||||
return (byline.length > 0) && (byline.length < 100);
|
||||
}
|
||||
@@ -1201,61 +1222,75 @@ Readability.prototype = {
|
||||
var values = {};
|
||||
var metaElements = this._doc.getElementsByTagName("meta");
|
||||
|
||||
// Match "description", or Twitter's "twitter:description" (Cards)
|
||||
// in name attribute.
|
||||
var namePattern = /^\s*((twitter)\s*:\s*)?(description|title)\s*$/gi;
|
||||
// property is a space-separated list of values
|
||||
var propertyPattern = /\s*(dc|dcterm|og|twitter)\s*:\s*(author|creator|description|title|site_name)\s*/gi;
|
||||
|
||||
// Match Facebook's Open Graph title & description properties.
|
||||
var propertyPattern = /^\s*og\s*:\s*(description|title)\s*$/gi;
|
||||
// name is a single value
|
||||
var namePattern = /^\s*(?:(dc|dcterm|og|twitter|weibo:(article|webpage))\s*[\.:]\s*)?(author|creator|description|title|site_name)\s*$/i;
|
||||
|
||||
// Find description tags.
|
||||
this._forEachNode(metaElements, function(element) {
|
||||
var elementName = element.getAttribute("name");
|
||||
var elementProperty = element.getAttribute("property");
|
||||
|
||||
if ([elementName, elementProperty].indexOf("author") !== -1) {
|
||||
metadata.byline = element.getAttribute("content");
|
||||
var content = element.getAttribute("content");
|
||||
if (!content) {
|
||||
return;
|
||||
}
|
||||
|
||||
var matches = null;
|
||||
var name = null;
|
||||
if (namePattern.test(elementName)) {
|
||||
name = elementName;
|
||||
} else if (propertyPattern.test(elementProperty)) {
|
||||
name = elementProperty;
|
||||
}
|
||||
|
||||
if (name) {
|
||||
var content = element.getAttribute("content");
|
||||
if (elementProperty) {
|
||||
matches = elementProperty.match(propertyPattern);
|
||||
if (matches) {
|
||||
for (var i = matches.length - 1; i >= 0; i--) {
|
||||
// Convert to lowercase, and remove any whitespace
|
||||
// so we can match below.
|
||||
name = matches[i].toLowerCase().replace(/\s/g, "");
|
||||
// multiple authors
|
||||
values[name] = content.trim();
|
||||
}
|
||||
}
|
||||
}
|
||||
if (!matches && elementName && namePattern.test(elementName)) {
|
||||
name = elementName;
|
||||
if (content) {
|
||||
// Convert to lowercase and remove any whitespace
|
||||
// so we can match below.
|
||||
name = name.toLowerCase().replace(/\s/g, '');
|
||||
// Convert to lowercase, remove any whitespace, and convert dots
|
||||
// to colons so we can match below.
|
||||
name = name.toLowerCase().replace(/\s/g, "").replace(/\./g, ":");
|
||||
values[name] = content.trim();
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
if ("description" in values) {
|
||||
metadata.excerpt = values["description"];
|
||||
} else if ("og:description" in values) {
|
||||
// Use facebook open graph description.
|
||||
metadata.excerpt = values["og:description"];
|
||||
} else if ("twitter:description" in values) {
|
||||
// Use twitter cards description.
|
||||
metadata.excerpt = values["twitter:description"];
|
||||
// get title
|
||||
metadata.title = values["dc:title"] ||
|
||||
values["dcterm:title"] ||
|
||||
values["og:title"] ||
|
||||
values["weibo:article:title"] ||
|
||||
values["weibo:webpage:title"] ||
|
||||
values["title"] ||
|
||||
values["twitter:title"];
|
||||
|
||||
if (!metadata.title) {
|
||||
metadata.title = this._getArticleTitle();
|
||||
}
|
||||
|
||||
metadata.title = this._getArticleTitle();
|
||||
if (!metadata.title) {
|
||||
if ("og:title" in values) {
|
||||
// Use facebook open graph title.
|
||||
metadata.title = values["og:title"];
|
||||
} else if ("twitter:title" in values) {
|
||||
// Use twitter cards title.
|
||||
metadata.title = values["twitter:title"];
|
||||
}
|
||||
}
|
||||
// get author
|
||||
metadata.byline = values["dc:creator"] ||
|
||||
values["dcterm:creator"] ||
|
||||
values["author"];
|
||||
|
||||
// get description
|
||||
metadata.excerpt = values["dc:description"] ||
|
||||
values["dcterm:description"] ||
|
||||
values["og:description"] ||
|
||||
values["weibo:article:description"] ||
|
||||
values["weibo:webpage:description"] ||
|
||||
values["description"] ||
|
||||
values["twitter:description"];
|
||||
|
||||
// get site name
|
||||
metadata.siteName = values["og:site_name"];
|
||||
|
||||
return metadata;
|
||||
},
|
||||
@@ -1266,24 +1301,25 @@ Readability.prototype = {
|
||||
* @param Element
|
||||
**/
|
||||
_removeScripts: function(doc) {
|
||||
this._removeNodes(doc.getElementsByTagName('script'), function(scriptNode) {
|
||||
this._removeNodes(doc.getElementsByTagName("script"), function(scriptNode) {
|
||||
scriptNode.nodeValue = "";
|
||||
scriptNode.removeAttribute('src');
|
||||
scriptNode.removeAttribute("src");
|
||||
return true;
|
||||
});
|
||||
this._removeNodes(doc.getElementsByTagName('noscript'));
|
||||
this._removeNodes(doc.getElementsByTagName("noscript"));
|
||||
},
|
||||
|
||||
/**
|
||||
* Check if this node has only whitespace and a single P element
|
||||
* Check if this node has only whitespace and a single element with given tag
|
||||
* Returns false if the DIV node contains non-empty text nodes
|
||||
* or if it contains no P or more than 1 element.
|
||||
* or if it contains no element with given tag or more than 1 element.
|
||||
*
|
||||
* @param Element
|
||||
* @param string tag of child element
|
||||
**/
|
||||
_hasSinglePInsideElement: function(element) {
|
||||
// There should be exactly 1 element child which is a P:
|
||||
if (element.children.length != 1 || element.children[0].tagName !== "P") {
|
||||
_hasSingleTagInsideElement: function(element, tag) {
|
||||
// There should be exactly 1 element child with given tag
|
||||
if (element.children.length != 1 || element.children[0].tagName !== tag) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -1337,7 +1373,7 @@ Readability.prototype = {
|
||||
* @return string
|
||||
**/
|
||||
_getInnerText: function(e, normalizeSpaces) {
|
||||
normalizeSpaces = (typeof normalizeSpaces === 'undefined') ? true : normalizeSpaces;
|
||||
normalizeSpaces = (typeof normalizeSpaces === "undefined") ? true : normalizeSpaces;
|
||||
var textContent = e.textContent.trim();
|
||||
|
||||
if (normalizeSpaces) {
|
||||
@@ -1366,7 +1402,7 @@ Readability.prototype = {
|
||||
* @return void
|
||||
**/
|
||||
_cleanStyles: function(e) {
|
||||
if (!e || e.tagName.toLowerCase() === 'svg')
|
||||
if (!e || e.tagName.toLowerCase() === "svg")
|
||||
return;
|
||||
|
||||
// Remove `style` and deprecated presentational attributes
|
||||
@@ -1375,8 +1411,8 @@ Readability.prototype = {
|
||||
}
|
||||
|
||||
if (this.DEPRECATED_SIZE_ATTRIBUTE_ELEMS.indexOf(e.tagName) !== -1) {
|
||||
e.removeAttribute('width');
|
||||
e.removeAttribute('height');
|
||||
e.removeAttribute("width");
|
||||
e.removeAttribute("height");
|
||||
}
|
||||
|
||||
var cur = e.firstElementChild;
|
||||
@@ -1422,7 +1458,7 @@ Readability.prototype = {
|
||||
var weight = 0;
|
||||
|
||||
// Look for a special classname
|
||||
if (typeof(e.className) === 'string' && e.className !== '') {
|
||||
if (typeof(e.className) === "string" && e.className !== "") {
|
||||
if (this.REGEXPS.negative.test(e.className))
|
||||
weight -= 25;
|
||||
|
||||
@@ -1431,7 +1467,7 @@ Readability.prototype = {
|
||||
}
|
||||
|
||||
// Look for a special ID
|
||||
if (typeof(e.id) === 'string' && e.id !== '') {
|
||||
if (typeof(e.id) === "string" && e.id !== "") {
|
||||
if (this.REGEXPS.negative.test(e.id))
|
||||
weight -= 25;
|
||||
|
||||
@@ -1456,17 +1492,17 @@ Readability.prototype = {
|
||||
this._removeNodes(e.getElementsByTagName(tag), function(element) {
|
||||
// Allow youtube and vimeo videos through as people usually want to see those.
|
||||
if (isEmbed) {
|
||||
var attributeValues = [].map.call(element.attributes, function(attr) {
|
||||
return attr.value;
|
||||
}).join("|");
|
||||
|
||||
// First, check the elements attributes to see if any of them contain youtube or vimeo
|
||||
if (this.REGEXPS.videos.test(attributeValues))
|
||||
return false;
|
||||
for (var i = 0; i < element.attributes.length; i++) {
|
||||
if (this.REGEXPS.videos.test(element.attributes[i].value)) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
// Then check the elements inside this element for the same.
|
||||
if (this.REGEXPS.videos.test(element.innerHTML))
|
||||
// For embed with <object> tag, check inner HTML as well.
|
||||
if (element.tagName === "object" && this.REGEXPS.videos.test(element.innerHTML)) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
@@ -1584,6 +1620,39 @@ Readability.prototype = {
|
||||
}
|
||||
},
|
||||
|
||||
/* convert images and figures that have properties like data-src into images that can be loaded without JS */
|
||||
_fixLazyImages: function (root) {
|
||||
this._forEachNode(this._getAllNodesWithTag(root, ["img", "picture", "figure"]), function (elem) {
|
||||
// also check for "null" to work around https://github.com/jsdom/jsdom/issues/2580
|
||||
if ((!elem.src && (!elem.srcset || elem.srcset == "null")) || elem.className.toLowerCase().indexOf("lazy") !== -1) {
|
||||
for (var i = 0; i < elem.attributes.length; i++) {
|
||||
var attr = elem.attributes[i];
|
||||
if (attr.name === "src" || attr.name === "srcset") {
|
||||
continue;
|
||||
}
|
||||
var copyTo = null;
|
||||
if (/\.(jpg|jpeg|png|webp)\s+\d/.test(attr.value)) {
|
||||
copyTo = "srcset";
|
||||
} else if (/^\s*\S+\.(jpg|jpeg|png|webp)\S*\s*$/.test(attr.value)) {
|
||||
copyTo = "src";
|
||||
}
|
||||
if (copyTo) {
|
||||
//if this is an img or picture, set the attribute directly
|
||||
if (elem.tagName === "IMG" || elem.tagName === "PICTURE") {
|
||||
elem.setAttribute(copyTo, attr.value);
|
||||
} else if (elem.tagName === "FIGURE" && !this._getAllNodesWithTag(elem, ["img", "picture"]).length) {
|
||||
//if the item is a <figure> that does not contain an image or picture, create one and place it inside the figure
|
||||
//see the nytimes-3 testcase for an example
|
||||
var img = this._doc.createElement("img");
|
||||
img.setAttribute(copyTo, attr.value);
|
||||
elem.appendChild(img);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
},
|
||||
|
||||
/**
|
||||
* Clean an element of all tags of type "tag" if they look fishy.
|
||||
* "Fishy" is an algorithm based on content length, classnames, link density, number of images & embeds, etc.
|
||||
@@ -1602,11 +1671,16 @@ Readability.prototype = {
|
||||
//
|
||||
// TODO: Consider taking into account original contentScore here.
|
||||
this._removeNodes(e.getElementsByTagName(tag), function(node) {
|
||||
// First check if we're in a data table, in which case don't remove us.
|
||||
// First check if this node IS data table, in which case don't remove it.
|
||||
var isDataTable = function(t) {
|
||||
return t._readabilityDataTable;
|
||||
};
|
||||
|
||||
if (tag === "table" && isDataTable(node)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// Next check if we're inside a data table, in which case don't remove it as well.
|
||||
if (this._hasAncestorTag(node, "table", -1, isDataTable)) {
|
||||
return false;
|
||||
}
|
||||
@@ -1620,7 +1694,7 @@ Readability.prototype = {
|
||||
return true;
|
||||
}
|
||||
|
||||
if (this._getCharCount(node, ',') < 10) {
|
||||
if (this._getCharCount(node, ",") < 10) {
|
||||
// If there are not very many commas, and the number of
|
||||
// non-paragraph elements is more than paragraphs or other
|
||||
// ominous signs, remove the element.
|
||||
@@ -1630,10 +1704,25 @@ Readability.prototype = {
|
||||
var input = node.getElementsByTagName("input").length;
|
||||
|
||||
var embedCount = 0;
|
||||
var embeds = node.getElementsByTagName("embed");
|
||||
for (var ei = 0, il = embeds.length; ei < il; ei += 1) {
|
||||
if (!this.REGEXPS.videos.test(embeds[ei].src))
|
||||
embedCount += 1;
|
||||
var embeds = this._concatNodeLists(
|
||||
node.getElementsByTagName("object"),
|
||||
node.getElementsByTagName("embed"),
|
||||
node.getElementsByTagName("iframe"));
|
||||
|
||||
for (var i = 0; i < embeds.length; i++) {
|
||||
// If this embed has attribute that matches video regex, don't delete it.
|
||||
for (var j = 0; j < embeds[i].attributes.length; j++) {
|
||||
if (this.REGEXPS.videos.test(embeds[i].attributes[j].value)) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
// For embed with <object> tag, check inner HTML as well.
|
||||
if (embeds[i].tagName === "object" && this.REGEXPS.videos.test(embeds[i].innerHTML)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
embedCount++;
|
||||
}
|
||||
|
||||
var linkDensity = this._getLinkDensity(node);
|
||||
@@ -1654,17 +1743,17 @@ Readability.prototype = {
|
||||
},
|
||||
|
||||
/**
|
||||
* Clean out elements whose id/class combinations match specific string.
|
||||
* Clean out elements that match the specified conditions
|
||||
*
|
||||
* @param Element
|
||||
* @param RegExp match id/class combination.
|
||||
* @param Function determines whether a node should be removed
|
||||
* @return void
|
||||
**/
|
||||
_cleanMatchedNodes: function(e, regex) {
|
||||
_cleanMatchedNodes: function(e, filter) {
|
||||
var endOfSearchMarkerNode = this._getNextNode(e, true);
|
||||
var next = this._getNextNode(e);
|
||||
while (next && next != endOfSearchMarkerNode) {
|
||||
if (regex.test(next.className + " " + next.id)) {
|
||||
if (filter(next, next.className + " " + next.id)) {
|
||||
next = this._removeAndGetNext(next);
|
||||
} else {
|
||||
next = this._getNextNode(next);
|
||||
@@ -1680,7 +1769,7 @@ Readability.prototype = {
|
||||
**/
|
||||
_cleanHeaders: function(e) {
|
||||
for (var headerIndex = 1; headerIndex < 3; headerIndex += 1) {
|
||||
this._removeNodes(e.getElementsByTagName('h' + headerIndex), function (header) {
|
||||
this._removeNodes(e.getElementsByTagName("h" + headerIndex), function (header) {
|
||||
return this._getClassWeight(header) < 0;
|
||||
});
|
||||
}
|
||||
@@ -1694,63 +1783,8 @@ Readability.prototype = {
|
||||
this._flags = this._flags & ~flag;
|
||||
},
|
||||
|
||||
/**
|
||||
* Decides whether or not the document is reader-able without parsing the whole thing.
|
||||
*
|
||||
* @return boolean Whether or not we suspect parse() will suceeed at returning an article object.
|
||||
*/
|
||||
isProbablyReaderable: function(helperIsVisible) {
|
||||
var nodes = this._getAllNodesWithTag(this._doc, ["p", "pre"]);
|
||||
|
||||
// Get <div> nodes which have <br> node(s) and append them into the `nodes` variable.
|
||||
// Some articles' DOM structures might look like
|
||||
// <div>
|
||||
// Sentences<br>
|
||||
// <br>
|
||||
// Sentences<br>
|
||||
// </div>
|
||||
var brNodes = this._getAllNodesWithTag(this._doc, ["div > br"]);
|
||||
if (brNodes.length) {
|
||||
var set = new Set();
|
||||
[].forEach.call(brNodes, function(node) {
|
||||
set.add(node.parentNode);
|
||||
});
|
||||
nodes = [].concat.apply(Array.from(set), nodes);
|
||||
}
|
||||
|
||||
// FIXME we should have a fallback for helperIsVisible, but this is
|
||||
// problematic because of jsdom's elem.style handling - see
|
||||
// https://github.com/mozilla/readability/pull/186 for context.
|
||||
|
||||
var score = 0;
|
||||
// This is a little cheeky, we use the accumulator 'score' to decide what to return from
|
||||
// this callback:
|
||||
return this._someNode(nodes, function(node) {
|
||||
if (helperIsVisible && !helperIsVisible(node))
|
||||
return false;
|
||||
var matchString = node.className + " " + node.id;
|
||||
|
||||
if (this.REGEXPS.unlikelyCandidates.test(matchString) &&
|
||||
!this.REGEXPS.okMaybeItsACandidate.test(matchString)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (node.matches && node.matches("li p")) {
|
||||
return false;
|
||||
}
|
||||
|
||||
var textContentLength = node.textContent.trim().length;
|
||||
if (textContentLength < 140) {
|
||||
return false;
|
||||
}
|
||||
|
||||
score += Math.sqrt(textContentLength - 140);
|
||||
|
||||
if (score > 20) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
});
|
||||
_isProbablyVisible: function(node) {
|
||||
return (!node.style || node.style.display != "none") && !node.hasAttribute("hidden");
|
||||
},
|
||||
|
||||
/**
|
||||
@@ -1774,9 +1808,6 @@ Readability.prototype = {
|
||||
}
|
||||
}
|
||||
|
||||
if (typeof this._doc.documentElement.firstElementChild === "undefined") {
|
||||
this._getNextNode = this._getNextNodeNoElementProperties;
|
||||
}
|
||||
// Remove script tags from the document.
|
||||
this._removeScripts(this._doc);
|
||||
|
||||
@@ -1812,6 +1843,7 @@ Readability.prototype = {
|
||||
textContent: textContent,
|
||||
length: textContent.length,
|
||||
excerpt: metadata.excerpt,
|
||||
siteName: metadata.siteName || this._articleSiteName
|
||||
};
|
||||
}
|
||||
};
|
||||
|
||||
@@ -14,14 +14,40 @@
|
||||
browserSupportsPromises_ = false;
|
||||
}
|
||||
|
||||
function absoluteUrl(url) {
|
||||
if (!url) return url;
|
||||
const protocol = url.toLowerCase().split(':')[0];
|
||||
if (['http', 'https', 'file'].indexOf(protocol) >= 0) return url;
|
||||
|
||||
if (url.indexOf('//') === 0) {
|
||||
return location.protocol + url;
|
||||
} else if (url[0] === '/') {
|
||||
return location.protocol + '//' + location.host + url;
|
||||
} else {
|
||||
return baseUrl() + '/' + url;
|
||||
}
|
||||
}
|
||||
|
||||
function pageTitle() {
|
||||
const titleElements = document.getElementsByTagName("title");
|
||||
if (titleElements.length) return titleElements[0].text.trim();
|
||||
return document.title.trim();
|
||||
}
|
||||
|
||||
function pageLocationOrigin() {
|
||||
// location.origin normally returns the protocol + domain + port (eg. https://example.com:8080)
|
||||
// but for file:// protocol this is browser dependant and in particular Firefox returns "null"
|
||||
// in this case.
|
||||
|
||||
if (location.protocol === 'file:') {
|
||||
return 'file://';
|
||||
} else {
|
||||
return location.origin;
|
||||
}
|
||||
}
|
||||
|
||||
function baseUrl() {
|
||||
let output = location.origin + location.pathname;
|
||||
let output = pageLocationOrigin() + location.pathname;
|
||||
if (output[output.length - 1] !== '/') {
|
||||
output = output.split('/');
|
||||
output.pop();
|
||||
@@ -30,12 +56,13 @@
|
||||
return output;
|
||||
}
|
||||
|
||||
function getImageSizes(element) {
|
||||
function getImageSizes(element, forceAbsoluteUrls = false) {
|
||||
const images = element.getElementsByTagName('img');
|
||||
const output = {};
|
||||
for (let i = 0; i < images.length; i++) {
|
||||
const img = images[i];
|
||||
output[img.src] = {
|
||||
const src = forceAbsoluteUrls ? absoluteUrl(img.src) : img.src;
|
||||
output[src] = {
|
||||
width: img.width,
|
||||
height: img.height,
|
||||
naturalWidth: img.naturalWidth,
|
||||
@@ -45,8 +72,22 @@
|
||||
return output;
|
||||
}
|
||||
|
||||
function getAnchorNames(element) {
|
||||
const anchors = element.getElementsByTagName('a');
|
||||
const output = [];
|
||||
for (let i = 0; i < anchors.length; i++) {
|
||||
const anchor = anchors[i];
|
||||
if (anchor.id) {
|
||||
output.push(anchor.id);
|
||||
} else if (anchor.name) {
|
||||
output.push(anchor.name);
|
||||
}
|
||||
}
|
||||
return output;
|
||||
}
|
||||
|
||||
// Cleans up element by removing all its invisible children (which we don't want to render as Markdown)
|
||||
function cleanUpElement(element) {
|
||||
function cleanUpElement(element, imageSizes) {
|
||||
const childNodes = element.childNodes;
|
||||
|
||||
for (let i = 0; i < childNodes.length; i++) {
|
||||
@@ -58,11 +99,27 @@
|
||||
if (!isVisible) {
|
||||
element.removeChild(node);
|
||||
} else {
|
||||
cleanUpElement(node);
|
||||
|
||||
if (node.nodeName.toLowerCase() === 'img') {
|
||||
node.src = absoluteUrl(node.src);
|
||||
const imageSize = imageSizes[node.src];
|
||||
if (imageSize) {
|
||||
node.width = imageSize.width;
|
||||
node.height = imageSize.height;
|
||||
}
|
||||
}
|
||||
|
||||
cleanUpElement(node, imageSizes);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function documentForReadability() {
|
||||
// Readability directly change the passed document so clone it so as
|
||||
// to preserve the original web page.
|
||||
return document.cloneNode(true);
|
||||
}
|
||||
|
||||
function readabilityProcess() {
|
||||
var uri = {
|
||||
spec: location.href,
|
||||
@@ -72,10 +129,7 @@
|
||||
pathBase: location.protocol + "//" + location.host + location.pathname.substr(0, location.pathname.lastIndexOf("/") + 1)
|
||||
};
|
||||
|
||||
// Readability directly change the passed document so clone it so as
|
||||
// to preserve the original web page.
|
||||
const documentClone = document.cloneNode(true);
|
||||
const readability = new Readability(documentClone); // new window.Readability(uri, documentClone);
|
||||
const readability = new Readability(documentForReadability());
|
||||
const article = readability.parse();
|
||||
|
||||
if (!article) throw new Error('Could not parse HTML document with Readability');
|
||||
@@ -89,16 +143,17 @@
|
||||
async function prepareCommandResponse(command) {
|
||||
console.info('Got command: ' + command.name);
|
||||
|
||||
const clippedContentResponse = (title, html, imageSizes) => {
|
||||
const clippedContentResponse = (title, html, imageSizes, anchorNames) => {
|
||||
return {
|
||||
name: 'clippedContent',
|
||||
title: title,
|
||||
html: html,
|
||||
base_url: baseUrl(),
|
||||
url: location.origin + location.pathname + location.search,
|
||||
url: pageLocationOrigin() + location.pathname + location.search,
|
||||
parent_id: command.parent_id,
|
||||
tags: command.tags || '',
|
||||
image_sizes: imageSizes,
|
||||
anchor_names: anchorNames,
|
||||
};
|
||||
}
|
||||
|
||||
@@ -115,20 +170,27 @@
|
||||
response.warning = 'Could not retrieve simplified version of page - full page has been saved instead.';
|
||||
return response;
|
||||
}
|
||||
return clippedContentResponse(article.title, article.body, getImageSizes(document));
|
||||
return clippedContentResponse(article.title, article.body, getImageSizes(document), getAnchorNames(document));
|
||||
|
||||
} else if (command.name === "isProbablyReaderable") {
|
||||
|
||||
const ok = isProbablyReaderable(documentForReadability());
|
||||
console.info('isProbablyReaderable', ok);
|
||||
return { name: 'isProbablyReaderable', value: ok };
|
||||
|
||||
} else if (command.name === "completePageHtml") {
|
||||
|
||||
const cleanDocument = document.body.cloneNode(true);
|
||||
cleanUpElement(cleanDocument);
|
||||
return clippedContentResponse(pageTitle(), cleanDocument.innerHTML, getImageSizes(document));
|
||||
const imageSizes = getImageSizes(document, true);
|
||||
cleanUpElement(cleanDocument, imageSizes);
|
||||
return clippedContentResponse(pageTitle(), cleanDocument.innerHTML, imageSizes, getAnchorNames(document));
|
||||
|
||||
} else if (command.name === "selectedHtml") {
|
||||
|
||||
const range = window.getSelection().getRangeAt(0);
|
||||
const container = document.createElement('div');
|
||||
container.appendChild(range.cloneContents());
|
||||
return clippedContentResponse(pageTitle(), container.innerHTML, getImageSizes(document));
|
||||
return clippedContentResponse(pageTitle(), container.innerHTML, getImageSizes(document), getAnchorNames(document));
|
||||
|
||||
} else if (command.name === 'screenshot') {
|
||||
|
||||
@@ -230,7 +292,7 @@
|
||||
const content = {
|
||||
title: pageTitle(),
|
||||
crop_rect: selectionArea,
|
||||
url: location.origin + location.pathname,
|
||||
url: pageLocationOrigin() + location.pathname,
|
||||
parent_id: command.parent_id,
|
||||
tags: command.tags,
|
||||
};
|
||||
@@ -249,6 +311,11 @@
|
||||
|
||||
return {};
|
||||
|
||||
} else if (command.name === "pageUrl") {
|
||||
|
||||
let url = pageLocationOrigin() + location.pathname + location.search;
|
||||
return clippedContentResponse(pageTitle(), url, getImageSizes(document), getAnchorNames(document));
|
||||
|
||||
} else {
|
||||
throw new Error('Unknown command: ' + JSON.stringify(command));
|
||||
}
|
||||
|
||||
@@ -1,10 +1,12 @@
|
||||
{
|
||||
"manifest_version": 2,
|
||||
"name": "Joplin Web Clipper [DEV]",
|
||||
"version": "1.0.8",
|
||||
"version": "1.0.15",
|
||||
"description": "Capture and save web pages and screenshots from your browser to Joplin.",
|
||||
"homepage_url": "https://joplin.cozic.net",
|
||||
"homepage_url": "https://joplinapp.org",
|
||||
"content_security_policy": "script-src 'self' 'unsafe-eval'; object-src 'self'",
|
||||
"icons": {
|
||||
"32": "icons/32.png",
|
||||
"48": "icons/48.png",
|
||||
"96": "icons/96.png"
|
||||
},
|
||||
|
||||
1
Clipper/joplin-webclipper/popup/.env
Normal file
1
Clipper/joplin-webclipper/popup/.env
Normal file
@@ -0,0 +1 @@
|
||||
INLINE_RUNTIME_CHUNK=false
|
||||
22036
Clipper/joplin-webclipper/popup/package-lock.json
generated
22036
Clipper/joplin-webclipper/popup/package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@@ -7,7 +7,7 @@
|
||||
"react": "^16.3.2",
|
||||
"react-dom": "^16.3.2",
|
||||
"react-redux": "^5.0.7",
|
||||
"react-scripts": "1.1.4",
|
||||
"react-scripts": "^2.1.5",
|
||||
"redux": "^4.0.0"
|
||||
},
|
||||
"scripts": {
|
||||
@@ -19,7 +19,13 @@
|
||||
"postinstall": "node scripts/postinstall.js"
|
||||
},
|
||||
"devDependencies": {
|
||||
"cra-build-watch": "^1.0.1",
|
||||
"cra-build-watch": "^1.4.0",
|
||||
"fs-extra": "^6.0.1"
|
||||
}
|
||||
},
|
||||
"browserslist": [
|
||||
">0.2%",
|
||||
"not dead",
|
||||
"not ie <= 11",
|
||||
"not op_mini all"
|
||||
]
|
||||
}
|
||||
|
||||
@@ -7,6 +7,39 @@ import led_orange from './led_orange.png';
|
||||
const { connect } = require('react-redux');
|
||||
const { bridge } = require('./bridge');
|
||||
|
||||
class PreviewComponent extends React.PureComponent {
|
||||
|
||||
constructor() {
|
||||
super();
|
||||
|
||||
this.bodyRef = React.createRef();
|
||||
}
|
||||
|
||||
componentDidMount() {
|
||||
// Because the text size is made twice smaller with CSS, we need
|
||||
// to also reduce the size of the images
|
||||
const imgs = this.bodyRef.current.getElementsByTagName('img');
|
||||
for (const img of imgs) {
|
||||
img.width /= 2;
|
||||
img.height /= 2;
|
||||
}
|
||||
}
|
||||
|
||||
render() {
|
||||
return (
|
||||
<div className="Preview">
|
||||
<a className={"Confirm Button"} onClick={this.props.onConfirmClick}>Confirm</a>
|
||||
<h2>Preview:</h2>
|
||||
<input className={"Title"} value={this.props.title} onChange={this.props.onTitleChange}/>
|
||||
<div className={"BodyWrapper"}>
|
||||
<div className={"Body"} ref={this.bodyRef} dangerouslySetInnerHTML={{__html: this.props.body_html}}></div>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
class AppComponent extends Component {
|
||||
|
||||
constructor() {
|
||||
@@ -15,6 +48,7 @@ class AppComponent extends Component {
|
||||
this.state = ({
|
||||
contentScriptLoaded: false,
|
||||
selectedTags: [],
|
||||
contentScriptError: '',
|
||||
});
|
||||
|
||||
this.confirm_click = () => {
|
||||
@@ -49,6 +83,12 @@ class AppComponent extends Component {
|
||||
});
|
||||
}
|
||||
|
||||
this.clipUrl_click = () => {
|
||||
bridge().sendCommandToActiveTab({
|
||||
name: 'pageUrl',
|
||||
});
|
||||
}
|
||||
|
||||
this.clipScreenshot_click = async () => {
|
||||
try {
|
||||
const baseUrl = await bridge().clipperServerBaseUrl();
|
||||
@@ -67,7 +107,7 @@ class AppComponent extends Component {
|
||||
}
|
||||
|
||||
this.clipperServerHelpLink_click = () => {
|
||||
bridge().tabsCreate({ url: 'https://joplin.cozic.net/clipper' });
|
||||
bridge().tabsCreate({ url: 'https://joplinapp.org/clipper/' });
|
||||
}
|
||||
|
||||
this.folderSelect_change = (event) => {
|
||||
@@ -116,11 +156,19 @@ class AppComponent extends Component {
|
||||
async loadContentScripts() {
|
||||
await bridge().tabsExecuteScript({file: "/content_scripts/JSDOMParser.js"});
|
||||
await bridge().tabsExecuteScript({file: "/content_scripts/Readability.js"});
|
||||
await bridge().tabsExecuteScript({file: "/content_scripts/Readability-readerable.js"});
|
||||
await bridge().tabsExecuteScript({file: "/content_scripts/index.js"});
|
||||
}
|
||||
|
||||
async componentDidMount() {
|
||||
await this.loadContentScripts();
|
||||
try {
|
||||
await this.loadContentScripts();
|
||||
} catch (error) {
|
||||
console.error('Could not load content scripts', error);
|
||||
this.setState({ contentScriptError: error.message });
|
||||
return;
|
||||
}
|
||||
|
||||
this.setState({
|
||||
contentScriptLoaded: true,
|
||||
});
|
||||
@@ -144,6 +192,8 @@ class AppComponent extends Component {
|
||||
id: newFolderId,
|
||||
});
|
||||
}
|
||||
|
||||
bridge().sendCommandToActiveTab({ name: 'isProbablyReaderable' });
|
||||
}
|
||||
|
||||
componentDidUpdate() {
|
||||
@@ -160,7 +210,11 @@ class AppComponent extends Component {
|
||||
}
|
||||
|
||||
render() {
|
||||
if (!this.state.contentScriptLoaded) return 'Loading...';
|
||||
if (!this.state.contentScriptLoaded) {
|
||||
let msg = 'Loading...';
|
||||
if (this.state.contentScriptError) msg = 'The Joplin extension is not available on this tab due to: ' + this.state.contentScriptError;
|
||||
return <div style={{padding: 10, fontSize: 12, maxWidth: 200}}>{msg}</div>;
|
||||
}
|
||||
|
||||
const warningComponent = !this.props.warning ? null : <div className="Warning">{ this.props.warning }</div>
|
||||
|
||||
@@ -190,16 +244,12 @@ class AppComponent extends Component {
|
||||
</div>
|
||||
);
|
||||
} else if (hasContent) {
|
||||
previewComponent = (
|
||||
<div className="Preview">
|
||||
<h2>Preview:</h2>
|
||||
<input className={"Title"} value={content.title} onChange={this.contentTitle_change}/>
|
||||
<div className={"BodyWrapper"}>
|
||||
<div className={"Body"} dangerouslySetInnerHTML={{__html: content.body_html}}></div>
|
||||
</div>
|
||||
<a className={"Confirm Button"} onClick={this.confirm_click}>Confirm</a>
|
||||
</div>
|
||||
);
|
||||
previewComponent = <PreviewComponent
|
||||
onConfirmClick={this.confirm_click}
|
||||
title={content.title}
|
||||
body_html={content.body_html}
|
||||
onTitleChange={this.contentTitle_change}
|
||||
/>
|
||||
}
|
||||
|
||||
const clipperStatusComp = () => {
|
||||
@@ -260,11 +310,10 @@ class AppComponent extends Component {
|
||||
const tagsComp = () => {
|
||||
const comps = [];
|
||||
for (let i = 0; i < this.state.selectedTags.length; i++) {
|
||||
comps.push(<div>
|
||||
comps.push(<div key={i}>
|
||||
<input
|
||||
ref={'tagSelector' + i}
|
||||
data-index={i}
|
||||
key={i}
|
||||
type="text"
|
||||
list="tags"
|
||||
value={this.state.selectedTags[i]}
|
||||
@@ -288,14 +337,22 @@ class AppComponent extends Component {
|
||||
tagDataListOptions.push(<option key={tag.id}>{tag.title}</option>);
|
||||
}
|
||||
|
||||
let simplifiedPageButtonLabel = 'Clip simplified page';
|
||||
let simplifiedPageButtonTooltip = '';
|
||||
if (!this.props.isProbablyReaderable) {
|
||||
simplifiedPageButtonLabel += ' ⚠️';
|
||||
simplifiedPageButtonTooltip = 'It might not be possible to create a good simplified version of this page.\nYou may want to clip the complete page instead.';
|
||||
}
|
||||
|
||||
return (
|
||||
<div className="App">
|
||||
<div className="Controls">
|
||||
<ul>
|
||||
<li><a className="Button" onClick={this.clipSimplified_click}>Clip simplified page</a></li>
|
||||
<li><a className="Button" onClick={this.clipSimplified_click} title={simplifiedPageButtonTooltip}>{simplifiedPageButtonLabel}</a></li>
|
||||
<li><a className="Button" onClick={this.clipComplete_click}>Clip complete page</a></li>
|
||||
<li><a className="Button" onClick={this.clipSelection_click}>Clip selection</a></li>
|
||||
<li><a className="Button" onClick={this.clipScreenshot_click}>Clip screenshot</a></li>
|
||||
<li><a className="Button" onClick={this.clipUrl_click}>Clip URL</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
{ foldersComp() }
|
||||
@@ -324,6 +381,7 @@ const mapStateToProps = (state) => {
|
||||
folders: state.folders,
|
||||
tags: state.tags,
|
||||
selectedFolderId: state.selectedFolderId,
|
||||
isProbablyReaderable: state.isProbablyReaderable,
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
@@ -2,6 +2,10 @@ const randomClipperPort = require('./randomClipperPort');
|
||||
|
||||
class Bridge {
|
||||
|
||||
constructor() {
|
||||
this.nounce_ = Date.now();
|
||||
}
|
||||
|
||||
async init(browser, browserSupportsPromises, dispatch) {
|
||||
console.info('Popup: Init bridge');
|
||||
|
||||
@@ -30,10 +34,15 @@ class Bridge {
|
||||
parent_id: command.parent_id,
|
||||
tags: command.tags || '',
|
||||
image_sizes: command.image_sizes || {},
|
||||
anchor_names: command.anchor_names || [],
|
||||
};
|
||||
|
||||
this.dispatch({ type: 'CLIPPED_CONTENT_SET', content: content });
|
||||
}
|
||||
|
||||
if (command.name === 'isProbablyReaderable') {
|
||||
this.dispatch({ type: 'IS_PROBABLY_READERABLE', value: command.value });
|
||||
}
|
||||
}
|
||||
|
||||
this.browser_.runtime.onMessage.addListener(this.browser_notify);
|
||||
@@ -264,7 +273,7 @@ class Bridge {
|
||||
await this.tabsSendMessage(tabs[0].id, command);
|
||||
}
|
||||
|
||||
async clipperApiExec(method, path, body) {
|
||||
async clipperApiExec(method, path, query, body) {
|
||||
console.info('Popup: ' + method + ' ' + path);
|
||||
|
||||
const baseUrl = await this.clipperServerBaseUrl();
|
||||
@@ -278,7 +287,18 @@ class Bridge {
|
||||
|
||||
if (body) fetchOptions.body = typeof body === 'string' ? body : JSON.stringify(body);
|
||||
|
||||
const response = await fetch(baseUrl + "/" + path, fetchOptions)
|
||||
let queryString = '';
|
||||
if (query) {
|
||||
const s = [];
|
||||
for (const k in query) {
|
||||
if (!query.hasOwnProperty(k)) continue;
|
||||
s.push(encodeURIComponent(k) + '=' + encodeURIComponent(query[k]));
|
||||
}
|
||||
queryString = s.join('&');
|
||||
if (queryString) queryString = '?' + queryString;
|
||||
}
|
||||
|
||||
const response = await fetch(baseUrl + "/" + path + queryString, fetchOptions)
|
||||
if (!response.ok) {
|
||||
const msg = await response.text();
|
||||
throw new Error(msg);
|
||||
@@ -296,11 +316,39 @@ class Bridge {
|
||||
|
||||
if (!content) throw new Error('Cannot send empty content');
|
||||
|
||||
await this.clipperApiExec('POST', 'notes', content);
|
||||
// There is a bug in Chrome that somehow makes the app send the same request twice, which
|
||||
// results in Joplin having the same note twice. There's a 2-3 sec delay between
|
||||
// each request. The bug only happens the first time the extension popup is open and the
|
||||
// Complete button is clicked.
|
||||
//
|
||||
// It's beyond my understanding how it's happening. I don't know how this sendContentToJoplin function
|
||||
// can be called twice. But even if it is, logically, it's impossible that this
|
||||
// call below would be done with twice the same nounce. Even if the function sendContentToJoplin
|
||||
// is called twice in parallel, the increment is atomic and should result in two nounces
|
||||
// being generated. But it's not. Somehow the function below is called twice with the exact same nounce.
|
||||
//
|
||||
// It's also not something internal to Chrome that repeat the request since the error is caught
|
||||
// so it really seems like a double function call.
|
||||
//
|
||||
// So this is why below, when we get the duplicate nounce error, we just ignore it so as not to display
|
||||
// a useless error message. The whole nounce feature is not for security (it's not to prevent replay
|
||||
// attacks), but simply to detect these double-requests and ignore them on Joplin side.
|
||||
//
|
||||
// This nounce feature is optional, it's only active when the nounce query parameter is provided
|
||||
// so it shouldn't affect any other call.
|
||||
//
|
||||
// This is the perfect Heisenbug - it happens always when opening the popup the first time EXCEPT
|
||||
// when the debugger is open. Then everything is working fine and the bug NEVER EVER happens,
|
||||
// so it's impossible to understand what's going on.
|
||||
await this.clipperApiExec('POST', 'notes', { nounce: this.nounce_++ }, content);
|
||||
|
||||
this.dispatch({ type: 'CONTENT_UPLOAD', operation: { uploading: false, success: true } });
|
||||
} catch (error) {
|
||||
this.dispatch({ type: 'CONTENT_UPLOAD', operation: { uploading: false, success: false, errorMessage: error.message } });
|
||||
if (error.message === '{"error":"Duplicate Nounce"}') {
|
||||
this.dispatch({ type: 'CONTENT_UPLOAD', operation: { uploading: false, success: true } });
|
||||
} else {
|
||||
this.dispatch({ type: 'CONTENT_UPLOAD', operation: { uploading: false, success: false, errorMessage: error.message } });
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -19,6 +19,7 @@ const defaultState = {
|
||||
tags: [],
|
||||
selectedFolderId: null,
|
||||
env: 'prod',
|
||||
isProbablyReaderable: true,
|
||||
};
|
||||
|
||||
const reduxMiddleware = store => next => async (action) => {
|
||||
@@ -40,6 +41,11 @@ function reducer(state = defaultState, action) {
|
||||
newState = Object.assign({}, state);
|
||||
newState.warning = action.text;
|
||||
|
||||
} else if (action.type === 'IS_PROBABLY_READERABLE') {
|
||||
|
||||
newState = Object.assign({}, state);
|
||||
newState.isProbablyReaderable = action.value;
|
||||
|
||||
} else if (action.type === 'CLIPPED_CONTENT_SET') {
|
||||
|
||||
newState = Object.assign({}, state);
|
||||
|
||||
1
ElectronClient/.gitignore
vendored
1
ElectronClient/.gitignore
vendored
@@ -3,4 +3,5 @@ app/packageInfo.js
|
||||
dist/
|
||||
app/lib/
|
||||
app/gui/*.min.js
|
||||
app/plugins/*.min.js
|
||||
.DS_Store
|
||||
@@ -54,6 +54,10 @@ class ElectronAppWrapper {
|
||||
y: windowState.y,
|
||||
width: windowState.width,
|
||||
height: windowState.height,
|
||||
backgroundColor: '#fff', // required to enable sub pixel rendering, can't be in css
|
||||
webPreferences: {
|
||||
nodeIntegration: true,
|
||||
},
|
||||
};
|
||||
|
||||
// Linux icon workaround for bug https://github.com/electron-userland/electron-builder/issues/2098
|
||||
@@ -191,19 +195,24 @@ class ElectronAppWrapper {
|
||||
ensureSingleInstance() {
|
||||
if (this.env_ === 'dev') return false;
|
||||
|
||||
return new Promise((resolve, reject) => {
|
||||
const alreadyRunning = this.electronApp_.makeSingleInstance((commandLine, workingDirectory) => {
|
||||
const win = this.window();
|
||||
if (!win) return;
|
||||
if (win.isMinimized()) win.restore();
|
||||
win.show();
|
||||
win.focus();
|
||||
});
|
||||
const gotTheLock = this.electronApp_.requestSingleInstanceLock();
|
||||
|
||||
if (alreadyRunning) this.electronApp_.quit();
|
||||
if (!gotTheLock) {
|
||||
// Another instance is already running - exit
|
||||
this.electronApp_.quit();
|
||||
return true;
|
||||
}
|
||||
|
||||
resolve(alreadyRunning);
|
||||
// Someone tried to open a second instance - focus our window instead
|
||||
this.electronApp_.on('second-instance', (event, commandLine, workingDirectory) => {
|
||||
const win = this.window();
|
||||
if (!win) return;
|
||||
if (win.isMinimized()) win.restore();
|
||||
win.show();
|
||||
win.focus();
|
||||
});
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
async start() {
|
||||
@@ -211,8 +220,8 @@ class ElectronAppWrapper {
|
||||
// the "ready" event. So we use the function below to make sure that the app is ready.
|
||||
await this.waitForElectronAppReady();
|
||||
|
||||
const alreadyRunning = await this.ensureSingleInstance();
|
||||
if (alreadyRunning) return;
|
||||
const alreadyRunning = this.ensureSingleInstance();
|
||||
if (alreadyRunning) return;
|
||||
|
||||
this.createWindow();
|
||||
|
||||
|
||||
@@ -28,6 +28,13 @@ const ExternalEditWatcher = require('lib/services/ExternalEditWatcher');
|
||||
const { bridge } = require('electron').remote.require('./bridge');
|
||||
const Menu = bridge().Menu;
|
||||
const MenuItem = bridge().MenuItem;
|
||||
const PluginManager = require('lib/services/PluginManager');
|
||||
const RevisionService = require('lib/services/RevisionService');
|
||||
const MigrationService = require('lib/services/MigrationService');
|
||||
|
||||
const pluginClasses = [
|
||||
require('./plugins/GotoAnything.min'),
|
||||
];
|
||||
|
||||
const appDefaultState = Object.assign({}, defaultState, {
|
||||
route: {
|
||||
@@ -43,6 +50,7 @@ const appDefaultState = Object.assign({}, defaultState, {
|
||||
windowContentSize: bridge().windowContentSize(),
|
||||
watchedNoteFiles: [],
|
||||
lastEditorScrollPercents: {},
|
||||
noteDevToolsVisible: false,
|
||||
});
|
||||
|
||||
class Application extends BaseApplication {
|
||||
@@ -180,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);
|
||||
@@ -245,22 +259,41 @@ class Application extends BaseApplication {
|
||||
updateMenu(screen) {
|
||||
if (this.lastMenuScreen_ === screen) return;
|
||||
|
||||
const sortNoteItems = [];
|
||||
const sortNoteOptions = Setting.enumOptions('notes.sortOrder.field');
|
||||
for (let field in sortNoteOptions) {
|
||||
if (!sortNoteOptions.hasOwnProperty(field)) continue;
|
||||
sortNoteItems.push({
|
||||
label: sortNoteOptions[field],
|
||||
screens: ['Main'],
|
||||
const sortNoteFolderItems = (type) => {
|
||||
const sortItems = [];
|
||||
const sortOptions = Setting.enumOptions(type + '.sortOrder.field');
|
||||
for (let field in sortOptions) {
|
||||
if (!sortOptions.hasOwnProperty(field)) continue;
|
||||
sortItems.push({
|
||||
label: sortOptions[field],
|
||||
screens: ['Main'],
|
||||
type: 'checkbox',
|
||||
checked: Setting.value(type + '.sortOrder.field') === field,
|
||||
click: () => {
|
||||
Setting.setValue(type + '.sortOrder.field', field);
|
||||
this.refreshMenu();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
sortItems.push({ type: 'separator' });
|
||||
|
||||
sortItems.push({
|
||||
label: Setting.settingMetadata(type + '.sortOrder.reverse').label(),
|
||||
type: 'checkbox',
|
||||
checked: Setting.value('notes.sortOrder.field') === field,
|
||||
checked: Setting.value(type + '.sortOrder.reverse'),
|
||||
screens: ['Main'],
|
||||
click: () => {
|
||||
Setting.setValue('notes.sortOrder.field', field);
|
||||
this.refreshMenu();
|
||||
}
|
||||
Setting.setValue(type + '.sortOrder.reverse', !Setting.value(type + '.sortOrder.reverse'));
|
||||
},
|
||||
});
|
||||
|
||||
return sortItems;
|
||||
}
|
||||
|
||||
const sortNoteItems = sortNoteFolderItems('notes');
|
||||
const sortFolderItems = sortNoteFolderItems('folders');
|
||||
|
||||
const focusItems = [];
|
||||
|
||||
focusItems.push({
|
||||
@@ -289,6 +322,8 @@ class Application extends BaseApplication {
|
||||
|
||||
const importItems = [];
|
||||
const exportItems = [];
|
||||
const preferencesItems = [];
|
||||
const toolsItemsFirst = [];
|
||||
const ioService = new InteropService();
|
||||
const ioModules = ioService.modules();
|
||||
for (let i = 0; i < ioModules.length; i++) {
|
||||
@@ -336,6 +371,9 @@ class Application extends BaseApplication {
|
||||
importOptions.path = path;
|
||||
importOptions.format = module.format;
|
||||
importOptions.destinationFolderId = !module.isNoteArchive && moduleSource === 'file' ? selectedFolderId : null;
|
||||
importOptions.onError = (error) => {
|
||||
console.warn(error);
|
||||
}
|
||||
|
||||
const service = new InteropService();
|
||||
try {
|
||||
@@ -366,38 +404,203 @@ class Application extends BaseApplication {
|
||||
}
|
||||
});
|
||||
|
||||
const template = [
|
||||
{
|
||||
label: _('File'),
|
||||
submenu: [{
|
||||
label: _('New note'),
|
||||
accelerator: 'CommandOrControl+N',
|
||||
screens: ['Main'],
|
||||
click: () => {
|
||||
this.dispatch({
|
||||
type: 'WINDOW_COMMAND',
|
||||
name: 'newNote',
|
||||
});
|
||||
}
|
||||
}, {
|
||||
label: _('New to-do'),
|
||||
accelerator: 'CommandOrControl+T',
|
||||
screens: ['Main'],
|
||||
click: () => {
|
||||
this.dispatch({
|
||||
type: 'WINDOW_COMMAND',
|
||||
name: 'newTodo',
|
||||
});
|
||||
}
|
||||
}, {
|
||||
label: _('New notebook'),
|
||||
screens: ['Main'],
|
||||
click: () => {
|
||||
this.dispatch({
|
||||
type: 'WINDOW_COMMAND',
|
||||
name: 'newNotebook',
|
||||
});
|
||||
}
|
||||
/* We need a dummy entry, otherwise the ternary operator to show a
|
||||
* menu item only on a specific OS does not work. */
|
||||
const noItem = {
|
||||
type: 'separator',
|
||||
visible: false
|
||||
}
|
||||
|
||||
const syncStatusItem = {
|
||||
label: _('Synchronisation status'),
|
||||
click: () => {
|
||||
this.dispatch({
|
||||
type: 'NAV_GO',
|
||||
routeName: 'Status',
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
const newNoteItem = {
|
||||
label: _('New note'),
|
||||
accelerator: 'CommandOrControl+N',
|
||||
screens: ['Main'],
|
||||
click: () => {
|
||||
this.dispatch({
|
||||
type: 'WINDOW_COMMAND',
|
||||
name: 'newNote',
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
const newTodoItem = {
|
||||
label: _('New to-do'),
|
||||
accelerator: 'CommandOrControl+T',
|
||||
screens: ['Main'],
|
||||
click: () => {
|
||||
this.dispatch({
|
||||
type: 'WINDOW_COMMAND',
|
||||
name: 'newTodo',
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
const newNotebookItem = {
|
||||
label: _('New notebook'),
|
||||
screens: ['Main'],
|
||||
click: () => {
|
||||
this.dispatch({
|
||||
type: 'WINDOW_COMMAND',
|
||||
name: 'newNotebook',
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
const printItem = {
|
||||
label: _('Print'),
|
||||
accelerator: 'CommandOrControl+P',
|
||||
screens: ['Main'],
|
||||
click: () => {
|
||||
this.dispatch({
|
||||
type: 'WINDOW_COMMAND',
|
||||
name: 'print',
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
preferencesItems.push({
|
||||
label: _('General Options'),
|
||||
accelerator: 'CommandOrControl+,',
|
||||
click: () => {
|
||||
this.dispatch({
|
||||
type: 'NAV_GO',
|
||||
routeName: 'Config',
|
||||
});
|
||||
}
|
||||
}, {
|
||||
label: _('Encryption options'),
|
||||
click: () => {
|
||||
this.dispatch({
|
||||
type: 'NAV_GO',
|
||||
routeName: 'EncryptionConfig',
|
||||
});
|
||||
}
|
||||
}, {
|
||||
label: _('Web clipper options'),
|
||||
click: () => {
|
||||
this.dispatch({
|
||||
type: 'NAV_GO',
|
||||
routeName: 'ClipperConfig',
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
toolsItemsFirst.push(syncStatusItem, {
|
||||
type: 'separator',
|
||||
screens: ['Main'],
|
||||
});
|
||||
|
||||
const toolsItems = toolsItemsFirst.concat(preferencesItems);
|
||||
|
||||
function _checkForUpdates(ctx) {
|
||||
bridge().checkForUpdates(false, bridge().window(), ctx.checkForUpdateLoggerPath(), { includePreReleases: Setting.value('autoUpdate.includePreReleases') });
|
||||
}
|
||||
|
||||
function _showAbout() {
|
||||
const p = packageInfo;
|
||||
let message = [
|
||||
p.description,
|
||||
'',
|
||||
'Copyright © 2016-2019 Laurent Cozic',
|
||||
_('%s %s (%s, %s)', p.name, p.version, Setting.value('env'), process.platform),
|
||||
];
|
||||
bridge().showInfoMessageBox(message.join('\n'), {
|
||||
icon: bridge().electronApp().buildDir() + '/icons/32x32.png',
|
||||
});
|
||||
}
|
||||
|
||||
const rootMenuFile = {
|
||||
/* Using a dummy entry for macOS here, because first menu
|
||||
* becomes 'Joplin' and we need a nenu called 'File' later. */
|
||||
label: shim.isMac() ? '&JoplinMainMenu' : _('&File'),
|
||||
/* `&` before one of the char in the label name mean, that
|
||||
* <Alt + F> will open this menu. It's needed becase electron
|
||||
* opens the first menu on Alt press if no hotkey assigned.
|
||||
* Issue: https://github.com/laurent22/joplin/issues/934 */
|
||||
submenu: [{
|
||||
label: _('About Joplin'),
|
||||
visible: shim.isMac() ? true : false,
|
||||
click: () => _showAbout()
|
||||
}, {
|
||||
type: 'separator',
|
||||
visible: shim.isMac() ? true : false
|
||||
}, {
|
||||
label: _('Preferences...'),
|
||||
visible: shim.isMac() ? true : false,
|
||||
submenu: preferencesItems
|
||||
}, {
|
||||
label: _('Check for updates...'),
|
||||
visible: shim.isMac() ? true : false,
|
||||
click: () => _checkForUpdates(this)
|
||||
}, {
|
||||
type: 'separator',
|
||||
visible: shim.isMac() ? true : false
|
||||
},
|
||||
shim.isMac() ? noItem : newNoteItem,
|
||||
shim.isMac() ? noItem : newTodoItem,
|
||||
shim.isMac() ? noItem : newNotebookItem, {
|
||||
type: 'separator',
|
||||
visible: shim.isMac() ? false : true
|
||||
}, {
|
||||
label: _('Import'),
|
||||
visible: shim.isMac() ? false : true,
|
||||
submenu: importItems,
|
||||
}, {
|
||||
label: _('Export'),
|
||||
visible: shim.isMac() ? false : true,
|
||||
submenu: exportItems,
|
||||
}, {
|
||||
type: 'separator',
|
||||
}, {
|
||||
label: _('Synchronise'),
|
||||
accelerator: 'CommandOrControl+S',
|
||||
screens: ['Main'],
|
||||
click: async () => {
|
||||
this.dispatch({
|
||||
type: 'WINDOW_COMMAND',
|
||||
name: 'synchronize',
|
||||
});
|
||||
}
|
||||
}, shim.isMac() ? syncStatusItem : noItem, {
|
||||
type: 'separator',
|
||||
}, shim.isMac() ? noItem : printItem, {
|
||||
type: 'separator',
|
||||
platforms: ['darwin'],
|
||||
}, {
|
||||
label: _('Hide %s', 'Joplin'),
|
||||
platforms: ['darwin'],
|
||||
accelerator: 'CommandOrControl+H',
|
||||
click: () => { bridge().electronApp().hide() }
|
||||
}, {
|
||||
type: 'separator',
|
||||
}, {
|
||||
label: _('Quit'),
|
||||
accelerator: 'CommandOrControl+Q',
|
||||
click: () => { bridge().electronApp().quit() }
|
||||
}]
|
||||
};
|
||||
|
||||
const rootMenuFileMacOs = {
|
||||
label: _('&File'),
|
||||
visible: shim.isMac() ? true : false,
|
||||
submenu: [
|
||||
newNoteItem,
|
||||
newTodoItem,
|
||||
newNotebookItem, {
|
||||
label: _('Close Window'),
|
||||
platforms: ['darwin'],
|
||||
accelerator: 'Command+W',
|
||||
selector: 'performClose:',
|
||||
}, {
|
||||
type: 'separator',
|
||||
}, {
|
||||
@@ -408,33 +611,14 @@ class Application extends BaseApplication {
|
||||
submenu: exportItems,
|
||||
}, {
|
||||
type: 'separator',
|
||||
}, {
|
||||
label: _('Print'),
|
||||
accelerator: 'CommandOrControl+P',
|
||||
screens: ['Main'],
|
||||
click: () => {
|
||||
this.dispatch({
|
||||
type: 'WINDOW_COMMAND',
|
||||
name: 'print',
|
||||
});
|
||||
}
|
||||
}, {
|
||||
type: 'separator',
|
||||
platforms: ['darwin'],
|
||||
}, {
|
||||
label: _('Hide %s', 'Joplin'),
|
||||
platforms: ['darwin'],
|
||||
accelerator: 'CommandOrControl+H',
|
||||
click: () => { bridge().electronApp().hide() }
|
||||
}, {
|
||||
type: 'separator',
|
||||
}, {
|
||||
label: _('Quit'),
|
||||
accelerator: 'CommandOrControl+Q',
|
||||
click: () => { bridge().electronApp().quit() }
|
||||
}]
|
||||
}, {
|
||||
label: _('Edit'),
|
||||
},
|
||||
printItem
|
||||
]
|
||||
};
|
||||
|
||||
const rootMenus = {
|
||||
edit: {
|
||||
label: _('&Edit'),
|
||||
submenu: [{
|
||||
label: _('Copy'),
|
||||
role: 'copy',
|
||||
@@ -484,6 +668,16 @@ class Application extends BaseApplication {
|
||||
name: 'textLink',
|
||||
});
|
||||
},
|
||||
}, {
|
||||
label: _('Code'),
|
||||
screens: ['Main'],
|
||||
accelerator: 'CommandOrControl+`',
|
||||
click: () => {
|
||||
this.dispatch({
|
||||
type: 'WINDOW_COMMAND',
|
||||
name: 'textCode',
|
||||
});
|
||||
},
|
||||
}, {
|
||||
type: 'separator',
|
||||
screens: ['Main'],
|
||||
@@ -510,6 +704,16 @@ class Application extends BaseApplication {
|
||||
name: 'commandStartExternalEditing',
|
||||
});
|
||||
},
|
||||
}, {
|
||||
label: _('Tags'),
|
||||
screens: ['Main'],
|
||||
accelerator: 'CommandOrControl+Alt+T',
|
||||
click: () => {
|
||||
this.dispatch({
|
||||
type: 'WINDOW_COMMAND',
|
||||
name: 'setTags',
|
||||
});
|
||||
},
|
||||
}, {
|
||||
type: 'separator',
|
||||
screens: ['Main'],
|
||||
@@ -534,8 +738,9 @@ class Application extends BaseApplication {
|
||||
});
|
||||
},
|
||||
}],
|
||||
}, {
|
||||
label: _('View'),
|
||||
},
|
||||
view: {
|
||||
label: _('&View'),
|
||||
submenu: [{
|
||||
label: _('Toggle sidebar'),
|
||||
screens: ['Main'],
|
||||
@@ -564,13 +769,9 @@ class Application extends BaseApplication {
|
||||
screens: ['Main'],
|
||||
submenu: sortNoteItems,
|
||||
}, {
|
||||
label: Setting.settingMetadata('notes.sortOrder.reverse').label(),
|
||||
type: 'checkbox',
|
||||
checked: Setting.value('notes.sortOrder.reverse'),
|
||||
label: Setting.settingMetadata('folders.sortOrder.field').label(),
|
||||
screens: ['Main'],
|
||||
click: () => {
|
||||
Setting.setValue('notes.sortOrder.reverse', !Setting.value('notes.sortOrder.reverse'));
|
||||
},
|
||||
submenu: sortFolderItems,
|
||||
}, {
|
||||
label: Setting.settingMetadata('uncompletedTodosOnTop').label(),
|
||||
type: 'checkbox',
|
||||
@@ -595,80 +796,88 @@ class Application extends BaseApplication {
|
||||
screens: ['Main'],
|
||||
submenu: focusItems,
|
||||
}],
|
||||
}, {
|
||||
label: _('Tools'),
|
||||
submenu: [{
|
||||
label: _('Synchronisation status'),
|
||||
click: () => {
|
||||
this.dispatch({
|
||||
type: 'NAV_GO',
|
||||
routeName: 'Status',
|
||||
});
|
||||
}
|
||||
}, {
|
||||
type: 'separator',
|
||||
screens: ['Main'],
|
||||
},{
|
||||
label: _('Web clipper options'),
|
||||
click: () => {
|
||||
this.dispatch({
|
||||
type: 'NAV_GO',
|
||||
routeName: 'ClipperConfig',
|
||||
});
|
||||
}
|
||||
},{
|
||||
label: _('Encryption options'),
|
||||
click: () => {
|
||||
this.dispatch({
|
||||
type: 'NAV_GO',
|
||||
routeName: 'EncryptionConfig',
|
||||
});
|
||||
}
|
||||
},{
|
||||
label: _('General Options'),
|
||||
accelerator: 'CommandOrControl+,',
|
||||
click: () => {
|
||||
this.dispatch({
|
||||
type: 'NAV_GO',
|
||||
routeName: 'Config',
|
||||
});
|
||||
}
|
||||
}],
|
||||
}, {
|
||||
label: _('Help'),
|
||||
},
|
||||
tools: {
|
||||
label: _('&Tools'),
|
||||
submenu: shim.isMac() ? [] : toolsItems,
|
||||
},
|
||||
help: {
|
||||
label: _('&Help'),
|
||||
submenu: [{
|
||||
label: _('Website and documentation'),
|
||||
accelerator: 'F1',
|
||||
click () { bridge().openExternal('https://joplin.cozic.net') }
|
||||
click () { bridge().openExternal('https://joplinapp.org') }
|
||||
}, {
|
||||
label: _('Make a donation'),
|
||||
click () { bridge().openExternal('https://joplin.cozic.net/donate') }
|
||||
click () { bridge().openExternal('https://joplinapp.org/donate/') }
|
||||
}, {
|
||||
label: _('Check for updates...'),
|
||||
click: () => {
|
||||
bridge().checkForUpdates(false, bridge().window(), this.checkForUpdateLoggerPath(), { includePreReleases: Setting.value('autoUpdate.includePreReleases') });
|
||||
}
|
||||
visible: shim.isMac() ? false : true,
|
||||
click: () => _checkForUpdates(this)
|
||||
}, {
|
||||
type: 'separator',
|
||||
screens: ['Main'],
|
||||
}, {
|
||||
label: _('About Joplin'),
|
||||
label: _('Toggle development tools'),
|
||||
visible: true,
|
||||
click: () => {
|
||||
const p = packageInfo;
|
||||
let message = [
|
||||
p.description,
|
||||
'',
|
||||
'Copyright © 2016-2019 Laurent Cozic',
|
||||
_('%s %s (%s, %s)', p.name, p.version, Setting.value('env'), process.platform),
|
||||
];
|
||||
bridge().showInfoMessageBox(message.join('\n'), {
|
||||
icon: bridge().electronApp().buildDir() + '/icons/32x32.png',
|
||||
this.dispatch({
|
||||
type: 'NOTE_DEVTOOLS_TOGGLE',
|
||||
});
|
||||
}
|
||||
},
|
||||
}, {
|
||||
type: 'separator',
|
||||
visible: shim.isMac() ? false : true,
|
||||
screens: ['Main'],
|
||||
}, {
|
||||
label: _('About Joplin'),
|
||||
visible: shim.isMac() ? false : true,
|
||||
click: () => _showAbout()
|
||||
}]
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
if (shim.isMac()) {
|
||||
rootMenus.macOsApp = rootMenuFile;
|
||||
rootMenus.file = rootMenuFileMacOs;
|
||||
} else {
|
||||
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';
|
||||
itemParent.submenu.push(item);
|
||||
}
|
||||
|
||||
const template = [
|
||||
rootMenus.file,
|
||||
rootMenus.edit,
|
||||
rootMenus.view,
|
||||
rootMenus.tools,
|
||||
rootMenus.help,
|
||||
];
|
||||
|
||||
if (shim.isMac()) template.splice(0, 0, rootMenus.macOsApp);
|
||||
|
||||
function isEmptyMenu(template) {
|
||||
for (let i = 0; i < template.length; i++) {
|
||||
const t = template[i];
|
||||
@@ -782,6 +991,10 @@ class Application extends BaseApplication {
|
||||
bridge().window().webContents.openDevTools();
|
||||
}
|
||||
|
||||
PluginManager.instance().dispatch_ = this.dispatch.bind(this);
|
||||
PluginManager.instance().setLogger(reg.logger());
|
||||
PluginManager.instance().register(pluginClasses);
|
||||
|
||||
this.updateMenu('Main');
|
||||
|
||||
this.initRedux();
|
||||
@@ -876,6 +1089,13 @@ class Application extends BaseApplication {
|
||||
|
||||
ExternalEditWatcher.instance().setLogger(reg.logger());
|
||||
ExternalEditWatcher.instance().dispatch = this.store().dispatch;
|
||||
|
||||
RevisionService.instance().runInBackground();
|
||||
|
||||
// Make it available to the console window - useful to call revisionService.collectRevisions()
|
||||
window.revisionService = RevisionService.instance();
|
||||
window.migrationService = MigrationService.instance();
|
||||
window.decryptionWorker = DecryptionWorker.instance();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -77,13 +77,16 @@ class Bridge {
|
||||
});
|
||||
}
|
||||
|
||||
showConfirmMessageBox(message) {
|
||||
const result = this.showMessageBox_(this.window(), {
|
||||
showConfirmMessageBox(message, options = null) {
|
||||
if (options === null) options = {};
|
||||
|
||||
const result = this.showMessageBox_(this.window(), Object.assign({}, {
|
||||
type: 'question',
|
||||
message: message,
|
||||
cancelId: 1,
|
||||
buttons: [_('OK'), _('Cancel')],
|
||||
});
|
||||
}, options));
|
||||
|
||||
return result === 0;
|
||||
}
|
||||
|
||||
|
||||
@@ -120,14 +120,18 @@ function checkForUpdates(inBackground, window, logFilePath, options) {
|
||||
autoUpdateLogger_.info('Is Pre-release:', release.prerelease);
|
||||
|
||||
if (compareVersions(release.version, packageInfo.version) <= 0) {
|
||||
if (!checkInBackground_) dialog.showMessageBox({ message: _('Current version is up-to-date.') })
|
||||
if (!checkInBackground_) dialog.showMessageBox({
|
||||
type: 'info',
|
||||
message: _('Current version is up-to-date.'),
|
||||
buttons: [_('OK')],
|
||||
})
|
||||
} else {
|
||||
const releaseNotes = release.notes.trim() ? "\n\n" + release.notes.trim() : '';
|
||||
const newVersionString = release.prerelease ? _('%s (pre-release)', release.version) : release.version;
|
||||
|
||||
const buttonIndex = dialog.showMessageBox(parentWindow_, {
|
||||
type: 'info',
|
||||
message: _('An update is available, do you want to download it now?') + '\n\n' + _('Your version: v%s', packageInfo.version) + '\n' + _('New version: v%s', newVersionString) + releaseNotes,
|
||||
message: _('An update is available, do you want to download it now?') + '\n\n' + _('Your version: %s', packageInfo.version) + '\n' + _('New version: %s', newVersionString) + releaseNotes,
|
||||
buttons: [_('Yes'), _('No')]
|
||||
});
|
||||
|
||||
|
||||
@@ -3,7 +3,6 @@ const spawnSync = require('child_process').spawnSync;
|
||||
|
||||
const babelPath = __dirname + '/node_modules/.bin/babel' + (process.platform === 'win32' ? '.cmd' : '');
|
||||
const basePath = __dirname + '/../..';
|
||||
const guiPath = __dirname + '/gui';
|
||||
|
||||
function fileIsNewerThan(path1, path2) {
|
||||
if (!fs.existsSync(path2)) return true;
|
||||
@@ -14,35 +13,41 @@ function fileIsNewerThan(path1, path2) {
|
||||
return stat1.mtime > stat2.mtime;
|
||||
}
|
||||
|
||||
fs.readdirSync(guiPath).forEach((filename) => {
|
||||
const jsxPath = guiPath + '/' + filename;
|
||||
const p = jsxPath.split('.');
|
||||
if (p.length <= 1) return;
|
||||
const ext = p[p.length - 1];
|
||||
if (ext !== 'jsx') return;
|
||||
p.pop();
|
||||
function convertJsx(path) {
|
||||
fs.readdirSync(path).forEach((filename) => {
|
||||
const jsxPath = path + '/' + filename;
|
||||
const p = jsxPath.split('.');
|
||||
if (p.length <= 1) return;
|
||||
const ext = p[p.length - 1];
|
||||
if (ext !== 'jsx') return;
|
||||
p.pop();
|
||||
|
||||
const basePath = p.join('.');
|
||||
const basePath = p.join('.');
|
||||
|
||||
const jsPath = basePath + '.min.js';
|
||||
const jsPath = basePath + '.min.js';
|
||||
|
||||
if (fileIsNewerThan(jsxPath, jsPath)) {
|
||||
console.info('Compiling ' + jsxPath + '...');
|
||||
const result = spawnSync(babelPath, ['--presets', 'react', '--out-file', jsPath, jsxPath]);
|
||||
if (result.status !== 0) {
|
||||
const msg = [];
|
||||
if (result.stdout) msg.push(result.stdout.toString());
|
||||
if (result.stderr) msg.push(result.stderr.toString());
|
||||
console.error(msg.join('\n'));
|
||||
if (result.error) console.error(result.error);
|
||||
process.exit(result.status);
|
||||
if (fileIsNewerThan(jsxPath, jsPath)) {
|
||||
console.info('Compiling ' + jsxPath + '...');
|
||||
const result = spawnSync(babelPath, ['--presets', 'react', '--out-file', jsPath, jsxPath]);
|
||||
if (result.status !== 0) {
|
||||
const msg = [];
|
||||
if (result.stdout) msg.push(result.stdout.toString());
|
||||
if (result.stderr) msg.push(result.stderr.toString());
|
||||
console.error(msg.join('\n'));
|
||||
if (result.error) console.error(result.error);
|
||||
process.exit(result.status);
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
convertJsx(__dirname + '/gui');
|
||||
convertJsx(__dirname + '/plugins');
|
||||
|
||||
const libContent = [
|
||||
fs.readFileSync(basePath + '/ReactNativeClient/lib/string-utils-common.js', 'utf8'),
|
||||
fs.readFileSync(basePath + '/ReactNativeClient/lib/markJsUtils.js', 'utf8'),
|
||||
fs.readFileSync(basePath + '/ReactNativeClient/lib/MdToHtml/webviewLib.js', 'utf8'),
|
||||
];
|
||||
|
||||
fs.writeFileSync(__dirname + '/gui/note-viewer/lib.js', libContent.join('\n'), 'utf8');
|
||||
|
||||
50
ElectronClient/app/electronRebuild.js
Normal file
50
ElectronClient/app/electronRebuild.js
Normal file
@@ -0,0 +1,50 @@
|
||||
const execCommand = function(command) {
|
||||
const exec = require('child_process').exec
|
||||
|
||||
console.info('Running: ' + command);
|
||||
|
||||
return new Promise((resolve, reject) => {
|
||||
let childProcess = exec(command, (error, stdout, stderr) => {
|
||||
if (error) {
|
||||
if (error.signal == 'SIGTERM') {
|
||||
resolve('Process was killed');
|
||||
} else {
|
||||
reject(error);
|
||||
}
|
||||
} else {
|
||||
resolve(stdout.trim());
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
const isLinux = () => {
|
||||
return process && process.platform === 'linux';
|
||||
}
|
||||
|
||||
const isWindows = () => {
|
||||
return process && process.platform === 'win32';
|
||||
}
|
||||
|
||||
const isMac = () => {
|
||||
return process && process.platform === 'darwin';
|
||||
}
|
||||
|
||||
async function main() {
|
||||
// electron-rebuild --arch ia32 && electron-rebuild --arch x64
|
||||
|
||||
let exePath = __dirname + '/node_modules/.bin/electron-rebuild';
|
||||
if (isWindows()) exePath += '.cmd';
|
||||
|
||||
if (isWindows()) {
|
||||
console.info(await execCommand(['"' + exePath + '"', '--arch ia32'].join(' ')));
|
||||
console.info(await execCommand(['"' + exePath + '"', '--arch x64'].join(' ')));
|
||||
} else {
|
||||
console.info(await execCommand(['"' + exePath + '"'].join(' ')));
|
||||
}
|
||||
}
|
||||
|
||||
main().catch((error) => {
|
||||
console.error(error);
|
||||
process.exit(1);
|
||||
});
|
||||
@@ -76,6 +76,26 @@ class ConfigScreenComponent extends React.Component {
|
||||
</div>
|
||||
);
|
||||
|
||||
if (section.name === 'sync') {
|
||||
const syncTargetMd = SyncTargetRegistry.idToMetadata(settings['sync.target']);
|
||||
|
||||
if (syncTargetMd.supportsConfigCheck) {
|
||||
const messages = shared.checkSyncConfigMessages(this);
|
||||
const statusStyle = Object.assign({}, theme.textStyle, { marginTop: 10 });
|
||||
const statusComp = !messages.length ? null : (
|
||||
<div style={statusStyle}>
|
||||
{messages[0]}
|
||||
{messages.length >= 1 ? (<p>{messages[1]}</p>) : null}
|
||||
</div>);
|
||||
|
||||
settingComps.push(
|
||||
<div key="check_sync_config_button" style={this.rowStyle_}>
|
||||
<button disabled={this.state.checkSyncConfigResult === 'checking'} style={theme.buttonStyle} onClick={this.checkSyncConfig_}>{_('Check synchronisation configuration')}</button>
|
||||
{ statusComp }
|
||||
</div>);
|
||||
}
|
||||
}
|
||||
|
||||
return (
|
||||
<div key={key} style={sectionStyle}>
|
||||
<h2 style={headerStyle}>{Setting.sectionNameToLabel(section.name)}</h2>
|
||||
@@ -265,9 +285,12 @@ class ConfigScreenComponent extends React.Component {
|
||||
updateSettingValue(key, event.target.value);
|
||||
};
|
||||
|
||||
const label = [md.label()];
|
||||
if (md.unitLabel) label.push('(' + md.unitLabel() + ')');
|
||||
|
||||
return (
|
||||
<div key={key} style={rowStyle}>
|
||||
<div style={labelStyle}><label>{md.label()}</label></div>
|
||||
<div style={labelStyle}><label>{label.join(' ')}</label></div>
|
||||
<input type="number" style={controlStyle} value={this.state.settings[key]} onChange={(event) => {onNumChange(event)}} min={md.minimum} max={md.maximum} step={md.step}/>
|
||||
{ descriptionComp }
|
||||
</div>
|
||||
@@ -320,24 +343,6 @@ class ConfigScreenComponent extends React.Component {
|
||||
|
||||
const settingComps = shared.settingsToComponents2(this, 'desktop', settings);
|
||||
|
||||
const syncTargetMd = SyncTargetRegistry.idToMetadata(settings['sync.target']);
|
||||
|
||||
if (syncTargetMd.supportsConfigCheck) {
|
||||
const messages = shared.checkSyncConfigMessages(this);
|
||||
const statusStyle = Object.assign({}, theme.textStyle, { marginTop: 10 });
|
||||
const statusComp = !messages.length ? null : (
|
||||
<div style={statusStyle}>
|
||||
{messages[0]}
|
||||
{messages.length >= 1 ? (<p>{messages[1]}</p>) : null}
|
||||
</div>);
|
||||
|
||||
settingComps.push(
|
||||
<div key="check_sync_config_button" style={this.rowStyle_}>
|
||||
<button disabled={this.state.checkSyncConfigResult === 'checking'} style={buttonStyle} onClick={this.checkSyncConfig_}>{_('Check synchronisation configuration')}</button>
|
||||
{ statusComp }
|
||||
</div>);
|
||||
}
|
||||
|
||||
const buttonBarStyle = {
|
||||
display: 'flex',
|
||||
alignItems: 'center',
|
||||
|
||||
@@ -189,7 +189,7 @@ class EncryptionConfigScreenComponent extends React.Component {
|
||||
<div style={containerStyle}>
|
||||
{<div style={{backgroundColor: theme.warningBackgroundColor, paddingLeft: 10, paddingRight: 10, paddingTop: 2, paddingBottom: 2 }}>
|
||||
<p style={theme.textStyle}>
|
||||
<span>{_('For more information about End-To-End Encryption (E2EE) and advices on how to enable it please check the documentation:')}</span> <a onClick={() => {bridge().openExternal('https://joplin.cozic.net/e2ee')}} href="#">https://joplin.cozic.net/e2ee</a>
|
||||
<span>{_('For more information about End-To-End Encryption (E2EE) and advices on how to enable it please check the documentation:')}</span> <a onClick={() => {bridge().openExternal('https://joplinapp.org/e2ee/')}} href="#">https://joplinapp.org/e2ee/</a>
|
||||
</p>
|
||||
</div>}
|
||||
<h1 style={theme.h1Style}>{_('Status')}</h1>
|
||||
|
||||
@@ -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,9 +55,20 @@ 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://joplin.cozic.net/#searching');
|
||||
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_);
|
||||
@@ -102,11 +118,14 @@ class HeaderComponent extends React.Component {
|
||||
let icon = null;
|
||||
if (options.iconName) {
|
||||
const iconStyle = {
|
||||
fontSize: Math.round(style.fontSize * 1.4),
|
||||
fontSize: Math.round(style.fontSize * 1.1),
|
||||
color: style.color,
|
||||
};
|
||||
if (options.title) iconStyle.marginRight = 5;
|
||||
if (options.iconRotation) iconStyle.transform = 'rotate(' + options.iconRotation + 'deg)';
|
||||
if("undefined" != typeof(options.iconRotation)) {
|
||||
iconStyle.transition = "transform 0.15s ease-in-out";
|
||||
iconStyle.transform = 'rotate(' + options.iconRotation + 'deg)';
|
||||
}
|
||||
icon = <i style={iconStyle} className={"fa " + options.iconName}></i>
|
||||
}
|
||||
|
||||
@@ -135,8 +154,11 @@ class HeaderComponent extends React.Component {
|
||||
const inputStyle = {
|
||||
display: 'flex',
|
||||
flex: 1,
|
||||
paddingLeft: 4,
|
||||
paddingRight: 4,
|
||||
paddingLeft: 6,
|
||||
paddingRight: 6,
|
||||
paddingTop: 1, // vertical alignment with buttons
|
||||
paddingBottom: 0, // vertical alignment with buttons
|
||||
height: style.fontSize * 2,
|
||||
color: style.color,
|
||||
fontSize: style.fontSize,
|
||||
fontFamily: style.fontFamily,
|
||||
@@ -184,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="#"
|
||||
@@ -251,6 +274,7 @@ const mapStateToProps = (state) => {
|
||||
return {
|
||||
theme: state.settings.theme,
|
||||
windowCommand: state.windowCommand,
|
||||
notesParentType: state.notesParentType,
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user