You've already forked joplin
mirror of
https://github.com/laurent22/joplin.git
synced 2025-12-08 23:07:32 +02:00
Compare commits
749 Commits
android-v1
...
cli-v1.0.1
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
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 | ||
|
|
ea9f1dc91d | ||
|
|
2ef77dcf1f | ||
|
|
29e7ec4cc9 | ||
|
|
5710e3fad0 | ||
|
|
a03aa62d58 | ||
|
|
2203a39917 | ||
|
|
bc58668483 | ||
|
|
0b4650f355 | ||
|
|
aecdec48ad | ||
|
|
e49198a0d4 | ||
|
|
6aa4553dd3 | ||
|
|
860e8a8f5a | ||
|
|
434037d793 | ||
|
|
214eae27da | ||
|
|
0567188fa8 | ||
|
|
4326902683 | ||
|
|
da3589149d | ||
|
|
69b4b4d1f4 | ||
|
|
dd4b46a88b | ||
|
|
6f2253b2f4 | ||
|
|
4c00d9512e | ||
|
|
6f511cb1e6 | ||
|
|
029e84f538 | ||
|
|
42b1db1d08 | ||
|
|
9d4b34cad7 | ||
|
|
cd9aff0f59 | ||
|
|
032816fffc | ||
|
|
1408f06c8d | ||
|
|
49f8d0c6d8 | ||
|
|
0d6443c30a | ||
|
|
e62d91dda8 | ||
|
|
0e122c9dc5 | ||
|
|
c2bd453e8c | ||
|
|
949ea7afb7 | ||
|
|
9f575101d2 | ||
|
|
2b4470054e | ||
|
|
b220613e54 | ||
|
|
11328babe8 | ||
|
|
735bc92bc4 | ||
|
|
6894b9b1b7 | ||
|
|
4de7815f31 | ||
|
|
4ce7b48468 | ||
|
|
77e4cb87ad | ||
|
|
dd6b43035e | ||
|
|
e76094c546 | ||
|
|
9c00dc4cab | ||
|
|
fc416de348 | ||
|
|
a2156be4ec | ||
|
|
cf427eba0f | ||
|
|
0050c90678 | ||
|
|
5eeff02dbe | ||
|
|
eb283efc20 | ||
|
|
87121c9c21 | ||
|
|
a2dbbbf832 | ||
|
|
fd251cd9a9 | ||
|
|
8ced2d288e | ||
|
|
242926d381 | ||
|
|
8c9a148e71 | ||
|
|
9e165fc7dc | ||
|
|
f46e4e0cec | ||
|
|
efcf5ecef4 | ||
|
|
b6ba843d09 | ||
|
|
915112e274 | ||
|
|
cc8f8fcd2c | ||
|
|
bda3ea9a35 | ||
|
|
a7aed1f93a | ||
|
|
a33f602f3b | ||
|
|
4d08b49578 | ||
|
|
21e049ab45 | ||
|
|
1d4234caea | ||
|
|
d1269de3a7 | ||
|
|
8c19fcf8fc | ||
|
|
beaba2be55 | ||
|
|
32c9ad1d59 | ||
|
|
a194513252 | ||
|
|
cd93a1d1e1 | ||
|
|
2867728996 | ||
|
|
394cc78851 | ||
|
|
76f0a26322 | ||
|
|
92d7a577a0 | ||
|
|
9c1219b188 | ||
|
|
f62bbfe286 | ||
|
|
fef176eb96 | ||
|
|
ed541dac3b | ||
|
|
4a175b2158 | ||
|
|
4076899e11 | ||
|
|
998bdf3b56 | ||
|
|
76b211eb6d | ||
|
|
f781cb3922 | ||
|
|
ced3e5d623 | ||
|
|
2a4812cb87 | ||
|
|
1f384c7ae4 | ||
|
|
01a3285636 | ||
|
|
53166cb3f5 | ||
|
|
893462ae87 | ||
|
|
949dbf45f1 | ||
|
|
d7dc625042 | ||
|
|
cc91c77f9e | ||
|
|
4847fd76de | ||
|
|
25b711a8da | ||
|
|
b5e50fa62e | ||
|
|
28e40a5c86 | ||
|
|
a8a7b7c07b | ||
|
|
299008688d | ||
|
|
42a674008f | ||
|
|
8fdc0bf17c | ||
|
|
4e3896c108 | ||
|
|
96cd56548e | ||
|
|
739fb2c3d2 | ||
|
|
0c98573700 | ||
|
|
8dc0b34fdc | ||
|
|
384ca09842 | ||
|
|
97d86825c2 | ||
|
|
f5a824b1e6 | ||
|
|
4fc11e77e8 | ||
|
|
8d16ad7035 | ||
|
|
3b1d84b00b | ||
|
|
3f540da31b | ||
|
|
3a20f1c245 | ||
|
|
e803f0c545 | ||
|
|
c9495c23a6 | ||
|
|
26aae9eea5 | ||
|
|
7d92136467 | ||
|
|
a7896b43d7 | ||
|
|
2e12b2655b | ||
|
|
a1f0bd1e6c | ||
|
|
4472590133 | ||
|
|
64f1214ad9 | ||
|
|
bd465a72cf | ||
|
|
1d1c2a6925 | ||
|
|
d68ba32533 | ||
|
|
d1a316032d | ||
|
|
b465042a56 | ||
|
|
8ff2418b02 | ||
|
|
f6640bcc32 | ||
|
|
fa3c0fd18a | ||
|
|
2ac03c18c4 | ||
|
|
51ee6128f3 | ||
|
|
53478056de | ||
|
|
83c791564a | ||
|
|
65d0032995 | ||
|
|
37c4f99341 | ||
|
|
adbc873b2a | ||
|
|
3567a57d6a | ||
|
|
b4e9fb157f | ||
|
|
1be3646a04 | ||
|
|
46b82f877b | ||
|
|
ef56eb4a52 | ||
|
|
6989f9fd16 | ||
|
|
7c3e8547de | ||
|
|
8268c3edba | ||
|
|
a8cc8763b0 | ||
|
|
09b4acf087 | ||
|
|
3b719ce53b | ||
|
|
83281197f1 | ||
|
|
ffda04f9b4 | ||
|
|
606893286a | ||
|
|
075b71746a | ||
|
|
01f1f3e957 | ||
|
|
88a9d5e802 | ||
|
|
7eebfae1c3 | ||
|
|
340fe76b8f | ||
|
|
e83678df3a | ||
|
|
0bbbb49a31 | ||
|
|
0e61115857 | ||
|
|
8d3ac6f6fe | ||
|
|
86e644be9a | ||
|
|
30201249b5 | ||
|
|
41155f5ef4 | ||
|
|
f308fe71f9 | ||
|
|
5a00214fd2 | ||
|
|
1b3e0f65e1 | ||
|
|
7cfc537870 | ||
|
|
53513db5b5 | ||
|
|
59402cf198 | ||
|
|
12efc02d91 | ||
|
|
f38b907680 | ||
|
|
8fcb46ca4a | ||
|
|
71ec9a193f | ||
|
|
393a545548 | ||
|
|
f88449fbb0 | ||
|
|
50ad4d05f2 | ||
|
|
8d0e562c8a | ||
|
|
c98e67c003 | ||
|
|
5565538b80 | ||
|
|
958979e1d7 | ||
|
|
685845e097 | ||
|
|
3813f9e417 | ||
|
|
40cf3fb4d0 | ||
|
|
3f88b16603 | ||
|
|
32c02275a2 | ||
|
|
c0d679b6c2 | ||
|
|
eb789b9b9a | ||
|
|
b1898141c3 | ||
|
|
3231bfaff0 | ||
|
|
6bb09c9c30 | ||
|
|
35d3fe03ab | ||
|
|
f05929cd17 | ||
|
|
982c9828da | ||
|
|
d6eacb2b33 | ||
|
|
0abe213fc2 | ||
|
|
a6716d55c5 | ||
|
|
fa0572de77 | ||
|
|
6dca4a0d6b | ||
|
|
eacfe1a9ac | ||
|
|
c223cdf10a | ||
|
|
38c42b7a15 | ||
|
|
56432dc773 | ||
|
|
d3b4379161 | ||
|
|
8a6fcdbcae | ||
|
|
061ce646d2 | ||
|
|
5ec7c16e3e | ||
|
|
5d629508c1 | ||
|
|
0a6f8b0cfe | ||
|
|
460f826672 | ||
|
|
cb16a10121 | ||
|
|
3b6131f1ca | ||
|
|
57225a36b9 | ||
|
|
3e313399c2 | ||
|
|
7947e14792 | ||
|
|
71098102c5 | ||
|
|
8e601e80df | ||
|
|
3b14cfcc54 | ||
|
|
61a0e43092 | ||
|
|
d08aaffe41 | ||
|
|
7d0def30f0 | ||
|
|
bb45d72a56 | ||
|
|
3943192c5d | ||
|
|
18d76807f6 | ||
|
|
01a30a7ccf | ||
|
|
3fb35d043b | ||
|
|
9b51bd484d | ||
|
|
879b556845 | ||
|
|
0df2a501dd | ||
|
|
6f64fdffcc | ||
|
|
19252af345 | ||
|
|
897f53b13e | ||
|
|
45cd8b7e3c | ||
|
|
922bbdd1b6 | ||
|
|
c24135577c | ||
|
|
3240ff40bc | ||
|
|
58b68cab0c | ||
|
|
0a0afd7245 | ||
|
|
de01606bff | ||
|
|
046474b484 | ||
|
|
277b2b9298 | ||
|
|
0b7296ae95 | ||
|
|
ce87dd55f0 | ||
|
|
07b724d65b | ||
|
|
bc1984298f | ||
|
|
9ed0bdfed2 | ||
|
|
57628e8986 | ||
|
|
fc8f53fd0e | ||
|
|
efd7cc6a0c | ||
|
|
7bfc3e1256 | ||
|
|
7f6ca1e527 | ||
|
|
71d9b1d441 | ||
|
|
a3d64d0a90 | ||
|
|
e7ec2ce6cf | ||
|
|
61dbdd5f7c | ||
|
|
e6888c451d | ||
|
|
899219abd2 | ||
|
|
7a4c7a13eb | ||
|
|
e8797f49b9 | ||
|
|
e17f3051f0 | ||
|
|
06091933e1 | ||
|
|
b30c65dd89 | ||
|
|
0eb18d206d | ||
|
|
3a9948e528 | ||
|
|
2bcddd38b2 | ||
|
|
5ff8808f69 | ||
|
|
28b1d8a324 | ||
|
|
5c1dd79435 | ||
|
|
706d59a6cc | ||
|
|
251f1bba55 | ||
|
|
cb1fd85ca4 | ||
|
|
11ddc55911 | ||
|
|
ee106105d8 | ||
|
|
19f5a144e5 | ||
|
|
18717bac79 | ||
|
|
28fa83c406 | ||
|
|
258e514a91 | ||
|
|
f92546d6eb | ||
|
|
693456164b | ||
|
|
7cd3e6b1f7 | ||
|
|
764e63d869 | ||
|
|
2c6f47f277 | ||
|
|
e41896d6f3 | ||
|
|
990591cc80 | ||
|
|
7b85c33213 | ||
|
|
4b4d0e8b25 | ||
|
|
4fb6af3c62 | ||
|
|
d7ffe7e294 | ||
|
|
3ff139d445 | ||
|
|
40443e0134 | ||
|
|
1f927c1285 | ||
|
|
5e82e62335 | ||
|
|
de954827df | ||
|
|
2cb24bf198 | ||
|
|
739a6a4a9c | ||
|
|
dfcf1193dc | ||
|
|
c72f92e22f | ||
|
|
f6d01ce7e1 | ||
|
|
fed9700587 | ||
|
|
12a3a9a89e | ||
|
|
590c62c371 | ||
|
|
df41f64b3c | ||
|
|
1849355245 | ||
|
|
fa1b471ea4 | ||
|
|
0a67f8c947 | ||
|
|
621d0260f4 | ||
|
|
f93fca7c5b | ||
|
|
f4d830c2ef | ||
|
|
1aa2844efa | ||
|
|
f22b2adaad | ||
|
|
b547f9aa13 | ||
|
|
e4166e9da7 | ||
|
|
1634fdb421 | ||
|
|
7f51035f91 | ||
|
|
70e71cbc2a | ||
|
|
ffd03bf34c | ||
|
|
f59a3dee78 | ||
|
|
3ba3037242 | ||
|
|
dbb269fef6 | ||
|
|
e209189faa | ||
|
|
2d7065cde2 | ||
|
|
59f5972c93 | ||
|
|
8bac5275c3 | ||
|
|
58d748e235 | ||
|
|
e69ac3e62a | ||
|
|
7fc8ac4c0f | ||
|
|
069dce69cd | ||
|
|
3bdf621026 | ||
|
|
2f62897fb6 | ||
|
|
dbdd602f50 | ||
|
|
d66fa87b2b | ||
|
|
124a959c8d | ||
|
|
127dce1cd6 | ||
|
|
44986a35a4 | ||
|
|
ea516301fd | ||
|
|
90b684457a | ||
|
|
8517e2aa42 | ||
|
|
b880be8b7c | ||
|
|
57fd1a7588 | ||
|
|
5ed458f634 | ||
|
|
ac12143d00 | ||
|
|
b6c36d1961 | ||
|
|
3c2de70baa | ||
|
|
f6c5620682 | ||
|
|
79b6f64bd0 | ||
|
|
ed89f55bff | ||
|
|
8841a92142 | ||
|
|
0bd19c97eb | ||
|
|
2fd026d107 | ||
|
|
5e7eb37ca7 | ||
|
|
6b10d5d821 | ||
|
|
0f4dbfbcbf | ||
|
|
99493174ec | ||
|
|
333253fd4f | ||
|
|
01470e8d3b | ||
|
|
bda2fe6717 | ||
|
|
d1f4c5be18 | ||
|
|
377adea51d | ||
|
|
cda3d20834 | ||
|
|
d11870b1eb | ||
|
|
53bda3eea7 | ||
|
|
30165e8d6a | ||
|
|
2202eb6570 | ||
|
|
720927f488 | ||
|
|
2858c0fce0 | ||
|
|
36c3521f40 | ||
|
|
98a3b99d17 | ||
|
|
95a06c4531 | ||
|
|
6ea77b36ce | ||
|
|
0cd7ebf9d3 | ||
|
|
a816498fc6 | ||
|
|
549c1a6767 | ||
|
|
f87d1f11b0 | ||
|
|
fb913bc33c | ||
|
|
53d7a51cb0 | ||
|
|
12da48c756 | ||
|
|
a0a6bdb684 | ||
|
|
eb4aa2c026 | ||
|
|
a9e789f845 | ||
|
|
89b76918bd | ||
|
|
e98575643c | ||
|
|
7c9e7743f1 | ||
|
|
435aa4845b | ||
|
|
9841488ce4 | ||
|
|
9c907989a5 | ||
|
|
f684d8e59a | ||
|
|
a1ad6c9712 | ||
|
|
b6ca3090df | ||
|
|
ff2d793fbb | ||
|
|
fcfb7f1111 | ||
|
|
6125cde223 | ||
|
|
c83391e624 | ||
|
|
a3a818ea74 | ||
|
|
54a4965503 | ||
|
|
2233d88c01 | ||
|
|
9680ab74a3 | ||
|
|
ef711af5b5 | ||
|
|
8a619e4b8b | ||
|
|
bc09d2c640 | ||
|
|
f82dfde6f4 | ||
|
|
312c7f2d27 | ||
|
|
953cc327c6 | ||
|
|
14cff96713 | ||
|
|
34b9af2ce0 | ||
|
|
6a6ee280c3 | ||
|
|
861387707a | ||
|
|
830e665366 | ||
|
|
f14ae68ea0 | ||
|
|
c7084bf27e | ||
|
|
fc8ffcbe46 | ||
|
|
77f089654e | ||
|
|
e7a12bb0dd | ||
|
|
22fe3a4e44 | ||
|
|
afb8b92528 | ||
|
|
5178f99100 | ||
|
|
72af564382 | ||
|
|
0a2b83998c | ||
|
|
73e79213dc | ||
|
|
e31ffc9474 |
2
.gitignore
vendored
Executable file → Normal file
2
.gitignore
vendored
Executable file → Normal file
@@ -39,5 +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.
|
||||
|
||||
The [building\_win32\_tips on this page](./readme/building_win32_tips.md) might be helpful.
|
||||
|
||||
# Building the Mobile application
|
||||
|
||||
First you need to setup React Native to build projects with native code. For this, follow the instructions on the [Get Started](https://facebook.github.io/react-native/docs/getting-started.html) tutorial, in the "Building Projects with Native Code" tab.
|
||||
|
||||
@@ -12,9 +12,11 @@ If possible, **please provide a screenshot**. A screenshot showing the problem i
|
||||
|
||||
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.
|
||||
|
||||
# Adding new features
|
||||
# Creating a pull request
|
||||
|
||||
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. Of course you are free to create the pull request directly but it is not guaranteed it is going to be accepted.
|
||||
- If you want to add a new feature, consider asking about it before implementing it or checking existing discussions to make sure it is within the scope of the project. As a rule of thumb **if your change is likely to involve more than 50 lines of code, you should discuss it in the forum**, just so that you don't spend too much time implementing something that might not be accepted.
|
||||
|
||||
- Bug fixes are always welcome.
|
||||
|
||||
Building the apps is relatively easy - please [see the build instructions](https://github.com/laurent22/joplin/blob/master/BUILD.md) for more details.
|
||||
|
||||
@@ -23,4 +25,4 @@ Building the apps is relatively easy - please [see the build instructions](https
|
||||
There are only two rules, but not following them means the pull request will not be accepted (it can be accepted once the issues are fixed):
|
||||
|
||||
- **Please use tabs, NOT spaces.**
|
||||
- **Please do not add or remove optional characters, such as spaces or colons.** Please setup your editor so that it only changes what you are working on and is not making automated changes elsewhere. The reason for this is that small white space changes make diff hard to read and can cause needless conflicts.
|
||||
- **Please do not add or remove optional characters, such as spaces or colons.** Please setup your editor so that it only changes what you are working on and is not making automated changes elsewhere. The reason for this is that small white space changes make diff hard to read and can cause needless conflicts.
|
||||
|
||||
1
CliClient/.gitignore
vendored
1
CliClient/.gitignore
vendored
@@ -13,6 +13,7 @@ tests/fuzzing.*
|
||||
tests/fuzzing -*
|
||||
tests/logs/*
|
||||
tests/cli-integration/
|
||||
tests/tmp/
|
||||
*.mo
|
||||
*.*~
|
||||
tests/sync
|
||||
|
||||
@@ -21,8 +21,9 @@ const { _, setLocale, defaultLocale, closestSupportedLocale } = require('lib/loc
|
||||
const os = require('os');
|
||||
const fs = require('fs-extra');
|
||||
const { cliUtils } = require('./cli-utils.js');
|
||||
const EventEmitter = require('events');
|
||||
const Cache = require('lib/Cache');
|
||||
const WelcomeUtils = require('lib/WelcomeUtils');
|
||||
const RevisionService = require('lib/services/RevisionService');
|
||||
|
||||
class Application extends BaseApplication {
|
||||
|
||||
@@ -377,6 +378,8 @@ 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) {
|
||||
@@ -394,6 +397,12 @@ class Application extends BaseApplication {
|
||||
}
|
||||
process.exit(1);
|
||||
}
|
||||
|
||||
await Setting.saveAll();
|
||||
|
||||
// Need to call exit() explicitely, otherwise Node wait for any timeout to complete
|
||||
// https://stackoverflow.com/questions/18050095
|
||||
process.exit(0);
|
||||
} else { // Otherwise open the GUI
|
||||
this.initRedux();
|
||||
|
||||
@@ -414,6 +423,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('');
|
||||
|
||||
|
||||
299
CliClient/app/command-apidoc.js
Normal file
299
CliClient/app/command-apidoc.js
Normal file
@@ -0,0 +1,299 @@
|
||||
const { BaseCommand } = require('./base-command.js');
|
||||
const { _ } = require('lib/locale.js');
|
||||
const { cliUtils } = require('./cli-utils.js');
|
||||
const EncryptionService = require('lib/services/EncryptionService');
|
||||
const DecryptionWorker = require('lib/services/DecryptionWorker');
|
||||
const MasterKey = require('lib/models/MasterKey');
|
||||
const BaseItem = require('lib/models/BaseItem');
|
||||
const BaseModel = require('lib/BaseModel');
|
||||
const Setting = require('lib/models/Setting.js');
|
||||
const { toTitleCase } = require('lib/string-utils.js');
|
||||
const { reg } = require('lib/registry.js');
|
||||
const markdownUtils = require('lib/markdownUtils');
|
||||
const { Database } = require('lib/database.js');
|
||||
|
||||
class Command extends BaseCommand {
|
||||
|
||||
usage() {
|
||||
return 'apidoc';
|
||||
}
|
||||
|
||||
description() {
|
||||
return 'Build the API doc';
|
||||
}
|
||||
|
||||
createPropertiesTable(tableFields) {
|
||||
const headers = [
|
||||
{ name: 'name', label: 'Name' },
|
||||
{ name: 'type', label: 'Type', filter: (value) => {
|
||||
return Database.enumName('fieldType', value);
|
||||
}},
|
||||
{ name: 'description', label: 'Description' },
|
||||
];
|
||||
|
||||
return markdownUtils.createMarkdownTable(headers, tableFields);
|
||||
}
|
||||
|
||||
async action(args) {
|
||||
const models = [
|
||||
{
|
||||
type: BaseModel.TYPE_NOTE,
|
||||
},
|
||||
{
|
||||
type: BaseModel.TYPE_FOLDER,
|
||||
},
|
||||
{
|
||||
type: BaseModel.TYPE_RESOURCE,
|
||||
},
|
||||
{
|
||||
type: BaseModel.TYPE_TAG,
|
||||
},
|
||||
];
|
||||
|
||||
const lines = [];
|
||||
|
||||
lines.push('# Joplin API');
|
||||
lines.push('');
|
||||
|
||||
lines.push('When the Web Clipper service is enabled, Joplin exposes a [REST API](https://en.wikipedia.org/wiki/Representational_state_transfer) which allows third-party applications to access Joplin\'s data and to create, modify or delete notes, notebooks, resources or tags.');
|
||||
lines.push('');
|
||||
lines.push('In order to use it, you\'ll first need to find on which port the service is running. To do so, open the Web Clipper Options in Joplin and if the service is running it should tell you on which port. Normally it runs on port **41184**. If you want to find it programmatically, you may follow this kind of algorithm:');
|
||||
lines.push('');
|
||||
lines.push('```javascript');
|
||||
lines.push('let port = null;');
|
||||
lines.push('for (let portToTest = 41184; portToTest <= 41194; portToTest++) {');
|
||||
lines.push(' const result = pingPort(portToTest); // Call GET /ping');
|
||||
lines.push(' if (result == \'JoplinClipperServer\') {');
|
||||
lines.push(' port = portToTest; // Found the port');
|
||||
lines.push(' break;');
|
||||
lines.push(' }');
|
||||
lines.push('}');
|
||||
lines.push('```');
|
||||
lines.push('');
|
||||
|
||||
lines.push('# Authorisation')
|
||||
lines.push('');
|
||||
lines.push('To prevent unauthorised applications from accessing the API, the calls must be authentified. To do so, you must provide a token as a query parameter for each API call. You can get this token from the Joplin desktop application, on the Web Clipper Options screen.');
|
||||
lines.push('');
|
||||
lines.push('This would be an example of valid cURL call using a token:');
|
||||
lines.push('');
|
||||
lines.push('\tcurl http://localhost:41184/notes?token=ABCD123ABCD123ABCD123ABCD123ABCD123');
|
||||
lines.push('');
|
||||
lines.push('In the documentation below, the token will not be specified every time however you will need to include it.');
|
||||
lines.push('');
|
||||
|
||||
lines.push('# Using the API');
|
||||
lines.push('');
|
||||
lines.push('All the calls, unless noted otherwise, receives and send **JSON data**. For example to create a new note:');
|
||||
lines.push('');
|
||||
lines.push('\tcurl --data \'{ "title": "My note", "body": "Some note in **Markdown**"}\' http://localhost:41184/notes');
|
||||
lines.push('');
|
||||
lines.push('In the documentation below, the calls may include special parameters such as :id or :note_id. You would replace this with the item ID or note ID.');
|
||||
lines.push('');
|
||||
lines.push('For example, for the endpoint `DELETE /tags/:id/notes/:note_id`, to remove the tag with ID "ABCD1234" from the note with ID "EFGH789", you would run for example:');
|
||||
lines.push('');
|
||||
lines.push('\tcurl -X DELETE http://localhost:41184/tags/ABCD1234/notes/EFGH789');
|
||||
lines.push('');
|
||||
lines.push('The four verbs supported by the API are the following ones:');
|
||||
lines.push('');
|
||||
lines.push('* **GET**: To retrieve items (notes, notebooks, etc.).');
|
||||
lines.push('* **POST**: To create new items. In general most item properties are optional. If you omit any, a default value will be used.');
|
||||
lines.push('* **PUT**: To update an item. Note in a REST API, traditionally PUT is used to completely replace an item, however in this API it will only replace the properties that are provided. For example if you PUT {"title": "my new title"}, only the "title" property will be changed. The other properties will be left untouched (they won\'t be cleared nor changed).');
|
||||
lines.push('* **DELETE**: To delete items.');
|
||||
lines.push('');
|
||||
|
||||
lines.push('# Filtering data');
|
||||
lines.push('');
|
||||
lines.push('You can change the fields that will be returned by the API using the `fields=` query parameter, which takes a list of comma separated fields. For example, to get the longitude and latitude of a note, use this:');
|
||||
lines.push('');
|
||||
lines.push('\tcurl http://localhost:41184/notes/ABCD123?fields=longitude,latitude');
|
||||
lines.push('');
|
||||
lines.push('To get the IDs only of all the tags:');
|
||||
lines.push('');
|
||||
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.');
|
||||
lines.push('* All date/time are Unix timestamps in milliseconds.');
|
||||
lines.push('* Booleans are integer values 0 or 1.');
|
||||
lines.push('');
|
||||
|
||||
lines.push('# Testing if the service is available');
|
||||
lines.push('');
|
||||
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);
|
||||
const tableName = ModelClass.tableName();
|
||||
let tableFields = reg.db().tableFields(tableName, { includeDescription: true });
|
||||
const singular = tableName.substr(0, tableName.length - 1);
|
||||
|
||||
if (model.type === BaseModel.TYPE_NOTE) {
|
||||
tableFields = tableFields.slice();
|
||||
tableFields.push({
|
||||
name: 'body_html',
|
||||
type: Database.enumId('fieldType', 'text'),
|
||||
description: 'Note body, in HTML format',
|
||||
});
|
||||
tableFields.push({
|
||||
name: 'base_url',
|
||||
type: Database.enumId('fieldType', 'text'),
|
||||
description: 'If `body_html` is provided and contains relative URLs, provide the `base_url` parameter too so that all the URLs can be converted to absolute ones. The base URL is basically where the HTML was fetched from, minus the query (everything after the \'?\'). For example if the original page was `https://stackoverflow.com/search?q=%5Bjava%5D+test`, the base URL is `https://stackoverflow.com/search`.',
|
||||
});
|
||||
tableFields.push({
|
||||
name: 'image_data_url',
|
||||
type: Database.enumId('fieldType', 'text'),
|
||||
description: 'An image to attach to the note, in [Data URL](https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/Data_URIs) format.',
|
||||
});
|
||||
tableFields.push({
|
||||
name: 'crop_rect',
|
||||
type: Database.enumId('fieldType', 'text'),
|
||||
description: 'If an image is provided, you can also specify an optional rectangle that will be used to crop the image. In format `{ x: x, y: y, width: width, height: height }`',
|
||||
});
|
||||
// tableFields.push({
|
||||
// name: 'tags',
|
||||
// type: Database.enumId('fieldType', 'text'),
|
||||
// description: 'Comma-separated list of tags. eg. `tag1,tag2`.',
|
||||
// });
|
||||
}
|
||||
|
||||
lines.push('# ' + toTitleCase(tableName));
|
||||
lines.push('');
|
||||
|
||||
if (model.type === BaseModel.TYPE_FOLDER) {
|
||||
lines.push('This is actually a notebook. Internally notebooks are called "folders".');
|
||||
lines.push('');
|
||||
}
|
||||
|
||||
lines.push('## Properties');
|
||||
lines.push('');
|
||||
lines.push(this.createPropertiesTable(tableFields));
|
||||
lines.push('');
|
||||
|
||||
lines.push('## GET /' + tableName);
|
||||
lines.push('');
|
||||
lines.push('Gets all ' + tableName);
|
||||
lines.push('');
|
||||
|
||||
if (model.type === BaseModel.TYPE_FOLDER) {
|
||||
lines.push('The folders are returned as a tree. The sub-notebooks of a notebook, if any, are under the `children` key.');
|
||||
lines.push('');
|
||||
}
|
||||
|
||||
lines.push('## GET /' + tableName + '/:id');
|
||||
lines.push('');
|
||||
lines.push('Gets ' + singular + ' with ID :id');
|
||||
lines.push('');
|
||||
|
||||
if (model.type === BaseModel.TYPE_TAG) {
|
||||
lines.push('## GET /tags/:id/notes');
|
||||
lines.push('');
|
||||
lines.push('Gets all the notes with this tag.');
|
||||
lines.push('');
|
||||
}
|
||||
|
||||
if (model.type === BaseModel.TYPE_NOTE) {
|
||||
lines.push('## GET /notes/:id/tags');
|
||||
lines.push('');
|
||||
lines.push('Gets all the tags attached to this note.');
|
||||
lines.push('');
|
||||
}
|
||||
|
||||
if (model.type === BaseModel.TYPE_FOLDER) {
|
||||
lines.push('## GET /folders/:id/notes');
|
||||
lines.push('');
|
||||
lines.push('Gets all the notes inside this folder.');
|
||||
lines.push('');
|
||||
}
|
||||
|
||||
if (model.type === BaseModel.TYPE_RESOURCE) {
|
||||
lines.push('## GET /resources/:id/file');
|
||||
lines.push('');
|
||||
lines.push('Gets the actual file associated with this resource.');
|
||||
lines.push('');
|
||||
}
|
||||
|
||||
lines.push('## POST /' + tableName);
|
||||
lines.push('');
|
||||
lines.push('Creates a new ' + singular);
|
||||
lines.push('');
|
||||
|
||||
if (model.type === BaseModel.TYPE_RESOURCE) {
|
||||
lines.push('Creating a new resource is special because you also need to upload the file. Unlike other API calls, this one must have the "multipart/form-data" Content-Type. The file data must be passed to the "data" form field, and the other properties to the "props" form field. An example of a valid call with cURL would be:');
|
||||
lines.push('');
|
||||
lines.push('\tcurl -F \'data=@/path/to/file.jpg\' -F \'props={"title":"my resource title"}\' http://localhost:41184/resources');
|
||||
lines.push('');
|
||||
lines.push('The "data" field is required, while the "props" one is not. If not specified, default values will be used.');
|
||||
lines.push('');
|
||||
}
|
||||
|
||||
if (model.type === BaseModel.TYPE_TAG) {
|
||||
lines.push('## POST /tags/:id/notes');
|
||||
lines.push('');
|
||||
lines.push('Post a note to this endpoint to add the tag to the note. The note data must at least contain an ID property (all other properties will be ignored).');
|
||||
lines.push('');
|
||||
}
|
||||
|
||||
if (model.type === BaseModel.TYPE_NOTE) {
|
||||
lines.push('You can either specify the note body as Markdown by setting the `body` parameter, or in HTML by setting the `body_html`.');
|
||||
lines.push('');
|
||||
lines.push('Examples:');
|
||||
lines.push('');
|
||||
lines.push('* Create a note from some Markdown text');
|
||||
lines.push('');
|
||||
lines.push(' curl --data \'{ "title": "My note", "body": "Some note in **Markdown**"}\' http://127.0.0.1:41184/notes');
|
||||
lines.push('');
|
||||
lines.push('* Create a note from some HTML');
|
||||
lines.push('');
|
||||
lines.push(' curl --data \'{ "title": "My note", "body_html": "Some note in <b>HTML</b>"}\' http://127.0.0.1:41184/notes');
|
||||
lines.push('');
|
||||
lines.push('* Create a note and attach an image to it:');
|
||||
lines.push('');
|
||||
lines.push(' curl --data \'{ "title": "Image test", "body": "Here is Joplin icon:", "image_data_url": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAICAIAAABLbSncAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAANZJREFUeNoAyAA3/wFwtO3K6gUB/vz2+Prw9fj/+/r+/wBZKAAExOgF4/MC9ff+MRH6Ui4E+/0Bqc/zutj6AgT+/Pz7+vv7++nu82c4DlMqCvLs8goA/gL8/fz09fb59vXa6vzZ6vjT5fbn6voD/fwC8vX4UiT9Zi//APHyAP8ACgUBAPv5APz7BPj2+DIaC2o3E+3o6ywaC5fT6gD6/QD9/QEVf9kD+/dcLQgJA/7v8vqfwOf18wA1IAIEVycAyt//v9XvAPv7APz8LhoIAPz9Ri4OAgwARgx4W/6fVeEAAAAASUVORK5CYII="}\' http://127.0.0.1:41184/notes');
|
||||
lines.push('');
|
||||
lines.push('### Creating a note with a specific ID');
|
||||
lines.push('');
|
||||
lines.push('When a new note is created, it is automatically assigned a new unique ID so **normally you do not need to set the ID**. However, if for some reason you want to set it, you can supply it as the `id` property. It needs to be a 32 characters long hexadecimal string. **Make sure it is unique**, for example by generating it using whatever GUID function is available in your programming language.');
|
||||
lines.push('');
|
||||
lines.push(' curl --data \'{ "id": "00a87474082744c1a8515da6aa5792d2", "title": "My note with custom ID"}\' http://127.0.0.1:41184/notes');
|
||||
lines.push('');
|
||||
}
|
||||
|
||||
lines.push('## PUT /' + tableName + '/:id');
|
||||
lines.push('');
|
||||
lines.push('Sets the properties of the ' + singular + ' with ID :id');
|
||||
lines.push('');
|
||||
|
||||
lines.push('## DELETE /' + tableName + '/:id');
|
||||
lines.push('');
|
||||
lines.push('Deletes the ' + singular + ' with ID :id');
|
||||
lines.push('');
|
||||
|
||||
if (model.type === BaseModel.TYPE_TAG) {
|
||||
lines.push('## DELETE /tags/:id/notes/:note_id');
|
||||
lines.push('');
|
||||
lines.push('Remove the tag from the note.');
|
||||
lines.push('');
|
||||
}
|
||||
}
|
||||
|
||||
this.stdout(lines.join('\n'));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
module.exports = Command;
|
||||
@@ -26,7 +26,7 @@ class Command extends BaseCommand {
|
||||
const md = Setting.settingMetadata(name);
|
||||
let value = Setting.value(name);
|
||||
if (typeof value === 'object' || Array.isArray(value)) value = JSON.stringify(value);
|
||||
if (md.secure) value = '********';
|
||||
if (md.secure && value) value = '********';
|
||||
|
||||
if (Setting.isEnum(name)) {
|
||||
return _('%s = %s (%s)', name, value, Setting.enumOptionsDoc(name));
|
||||
|
||||
@@ -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) {
|
||||
@@ -47,63 +64,28 @@ class Command extends BaseCommand {
|
||||
}
|
||||
|
||||
if (args.command === 'decrypt') {
|
||||
while (true) {
|
||||
try {
|
||||
if (args.path) {
|
||||
const plainText = await EncryptionService.instance().decryptString(args.path);
|
||||
this.stdout(plainText);
|
||||
return;
|
||||
} else {
|
||||
if (process.stdin.isTTY) {
|
||||
this.stdout(_('Starting decryption... Please wait as it may take several minutes depending on how much there is to decrypt.'));
|
||||
await DecryptionWorker.instance().start();
|
||||
this.stdout(_('Completed decryption.'));
|
||||
return;
|
||||
} else {
|
||||
// var repl = require("repl");
|
||||
// var r = repl.start("node> ");
|
||||
if (args.path) {
|
||||
const plainText = await EncryptionService.instance().decryptString(args.path);
|
||||
this.stdout(plainText);
|
||||
} else {
|
||||
this.stdout(_('Starting decryption... Please wait as it may take several minutes depending on how much there is to decrypt.'));
|
||||
|
||||
const text = await new Promise((accept, reject) => {
|
||||
var buffer = '';
|
||||
process.stdin.setEncoding('utf8');
|
||||
process.stdin.on('data', function(chunk) {
|
||||
buffer += chunk;
|
||||
// process.stdout.write(chunk);
|
||||
});
|
||||
process.stdin.on('end', function() {
|
||||
accept(buffer.trim());
|
||||
});
|
||||
});
|
||||
|
||||
if (text.length > 0) {
|
||||
var cipherText = text;
|
||||
try {
|
||||
var item = await BaseItem.unserialize(text);
|
||||
cipherText = item.encryption_cipher_text;
|
||||
} catch (error) {
|
||||
// we already got the pure cipher text
|
||||
}
|
||||
const plainText = await EncryptionService.instance().decryptString(cipherText);
|
||||
this.stdout(plainText);
|
||||
}
|
||||
return;
|
||||
while (true) {
|
||||
try {
|
||||
await DecryptionWorker.instance().start();
|
||||
break;
|
||||
} catch (error) {
|
||||
if (error.code === 'masterKeyNotLoaded') {
|
||||
const ok = await askForMasterKey(error);
|
||||
if (!ok) return;
|
||||
continue;
|
||||
}
|
||||
}
|
||||
} 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();
|
||||
continue;
|
||||
}
|
||||
|
||||
throw error;
|
||||
throw error;
|
||||
}
|
||||
}
|
||||
|
||||
this.stdout(_('Completed decryption.'));
|
||||
}
|
||||
|
||||
return;
|
||||
@@ -114,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');
|
||||
@@ -215,4 +227,4 @@ class Command extends BaseCommand {
|
||||
|
||||
}
|
||||
|
||||
module.exports = Command;
|
||||
module.exports = Command;
|
||||
@@ -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()) {
|
||||
|
||||
@@ -49,35 +49,6 @@ class Command extends BaseCommand {
|
||||
type: 'SEARCH_SELECT',
|
||||
id: searchId,
|
||||
});
|
||||
|
||||
// let fields = Note.previewFields();
|
||||
// fields.push('body');
|
||||
// const notes = await Note.previews(folder ? folder.id : null, {
|
||||
// fields: fields,
|
||||
// anywherePattern: '*' + pattern + '*',
|
||||
// });
|
||||
|
||||
// const fragmentLength = 50;
|
||||
|
||||
// let parents = {};
|
||||
|
||||
// for (let i = 0; i < notes.length; i++) {
|
||||
// const note = notes[i];
|
||||
// const parent = parents[note.parent_id] ? parents[note.parent_id] : await Folder.load(note.parent_id);
|
||||
// parents[note.parent_id] = parent;
|
||||
|
||||
// const idx = note.body.indexOf(pattern);
|
||||
// let line = '';
|
||||
// if (idx >= 0) {
|
||||
// let fragment = note.body.substr(Math.max(0, idx - fragmentLength / 2), fragmentLength);
|
||||
// fragment = fragment.replace(/\n/g, ' ');
|
||||
// line = sprintf('%s: %s / %s: %s', BaseModel.shortId(note.id), parent.title, note.title, fragment);
|
||||
// } else {
|
||||
// line = sprintf('%s: %s / %s', BaseModel.shortId(note.id), parent.title, note.title);
|
||||
// }
|
||||
|
||||
// this.stdout(line);
|
||||
// }
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -4,6 +4,7 @@ const { _ } = require('lib/locale.js');
|
||||
const { OneDriveApiNodeUtils } = require('./onedrive-api-node-utils.js');
|
||||
const Setting = require('lib/models/Setting.js');
|
||||
const BaseItem = require('lib/models/BaseItem.js');
|
||||
const ResourceFetcher = require('lib/services/ResourceFetcher');
|
||||
const { Synchronizer } = require('lib/synchronizer.js');
|
||||
const { reg } = require('lib/registry.js');
|
||||
const { cliUtils } = require('./cli-utils.js');
|
||||
@@ -116,7 +117,6 @@ class Command extends BaseCommand {
|
||||
this.releaseLockFn_ = null;
|
||||
|
||||
// Lock is unique per profile/database
|
||||
// TODO: use SQLite database to do lock?
|
||||
const lockFilePath = require('os').tmpdir() + '/synclock_' + md5(escape(Setting.value('profileDir'))); // https://github.com/pvorb/node-md5/issues/41
|
||||
if (!await fs.pathExists(lockFilePath)) await fs.writeFile(lockFilePath, 'synclock');
|
||||
|
||||
@@ -191,6 +191,15 @@ class Command extends BaseCommand {
|
||||
}
|
||||
}
|
||||
|
||||
// When using the tool in command line mode, the ResourceFetcher service is
|
||||
// not going to be running in the background, so the resources need to be
|
||||
// explicitely downloaded below.
|
||||
if (!app().hasGui()) {
|
||||
this.stdout(_('Downloading resources...'));
|
||||
await ResourceFetcher.instance().fetchAll();
|
||||
await ResourceFetcher.instance().waitForAllFinished();
|
||||
}
|
||||
|
||||
await app().refreshCurrentFolder();
|
||||
} catch (error) {
|
||||
cleanUp();
|
||||
|
||||
@@ -32,8 +32,6 @@ class FolderListWidget extends ListWidget {
|
||||
output.push(_('Search:'));
|
||||
output.push(item.title);
|
||||
}
|
||||
|
||||
// if (item && item.id) output.push(item.id.substr(0, 5));
|
||||
|
||||
return output.join(' ');
|
||||
};
|
||||
@@ -85,7 +83,6 @@ class FolderListWidget extends ListWidget {
|
||||
}
|
||||
|
||||
set notesParentType(v) {
|
||||
//if (this.notesParentType_ === v) return;
|
||||
this.notesParentType_ = v;
|
||||
this.updateIndexFromSelectedItemId()
|
||||
this.invalidate();
|
||||
@@ -123,6 +120,14 @@ class FolderListWidget extends ListWidget {
|
||||
this.updateIndexFromSelectedItemId()
|
||||
this.invalidate();
|
||||
}
|
||||
|
||||
folderHasChildren_(folders, folderId) {
|
||||
for (let i = 0; i < folders.length; i++) {
|
||||
let folder = folders[i];
|
||||
if (folder.parent_id === folderId) return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
render() {
|
||||
if (this.updateItems_) {
|
||||
@@ -130,7 +135,19 @@ class FolderListWidget extends ListWidget {
|
||||
const wasSelectedItemId = this.selectedJoplinItemId;
|
||||
const previousParentType = this.notesParentType;
|
||||
|
||||
let newItems = this.folders.slice();
|
||||
let newItems = [];
|
||||
const orderFolders = (parentId) => {
|
||||
for (let i = 0; i < this.folders.length; i++) {
|
||||
const f = this.folders[i];
|
||||
const folderParentId = f.parent_id ? f.parent_id : '';
|
||||
if (folderParentId === parentId) {
|
||||
newItems.push(f);
|
||||
if (this.folderHasChildren_(this.folders, f.id)) orderFolders(f.id);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
orderFolders('');
|
||||
|
||||
if (this.tags.length) {
|
||||
if (newItems.length) newItems.push('-');
|
||||
|
||||
@@ -1,5 +1,8 @@
|
||||
#!/usr/bin/env node
|
||||
|
||||
// Use njstrace to find out what Node.js might be spending time on
|
||||
// var njstrace = require('njstrace').inject();
|
||||
|
||||
// Make it possible to require("/lib/...") without specifying full path
|
||||
require('app-module-path').addPath(__dirname);
|
||||
|
||||
@@ -19,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');
|
||||
@@ -40,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');
|
||||
|
||||
1949
CliClient/locales/ar.po
Normal file
1949
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»"
|
||||
@@ -460,6 +461,9 @@ msgstr "No es pot inicialitzar el sincronitzador."
|
||||
msgid "Starting synchronisation..."
|
||||
msgstr "Està començant la sincronització..."
|
||||
|
||||
msgid "Downloading resources..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Cancelling... Please wait."
|
||||
msgstr "S'està cancel·lant... Espereu."
|
||||
|
||||
@@ -586,6 +590,20 @@ msgstr ""
|
||||
msgid "Exporting to \"%s\" as \"%s\" format. Please wait..."
|
||||
msgstr "S'està exportant a «%s» com a format «%s». Espereu..."
|
||||
|
||||
msgid "Sidebar"
|
||||
msgstr ""
|
||||
|
||||
msgid "Note list"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Note title"
|
||||
msgstr "Títol del bloc de notes:"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Note body"
|
||||
msgstr "Blocs de notes"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Importing from \"%s\" as \"%s\" format. Please wait..."
|
||||
msgstr "S'està important des de «%s» com a format «%s». Espereu..."
|
||||
@@ -593,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"
|
||||
@@ -605,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"
|
||||
@@ -621,7 +668,11 @@ msgstr "Amaga %s"
|
||||
msgid "Quit"
|
||||
msgstr "Surt"
|
||||
|
||||
msgid "Edit"
|
||||
msgid "Close Window"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "&Edit"
|
||||
msgstr "Edita"
|
||||
|
||||
msgid "Copy"
|
||||
@@ -633,12 +684,19 @@ msgstr "Retalla"
|
||||
msgid "Paste"
|
||||
msgstr "Enganxa"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Select all"
|
||||
msgstr "Seleccioneu una data"
|
||||
|
||||
msgid "Bold"
|
||||
msgstr ""
|
||||
|
||||
msgid "Italic"
|
||||
msgstr ""
|
||||
|
||||
msgid "Link"
|
||||
msgstr ""
|
||||
|
||||
msgid "Insert Date Time"
|
||||
msgstr ""
|
||||
|
||||
@@ -648,7 +706,12 @@ msgstr ""
|
||||
msgid "Search in all the notes"
|
||||
msgstr "Cerca a totes les notes"
|
||||
|
||||
msgid "View"
|
||||
#, fuzzy
|
||||
msgid "Search in current note"
|
||||
msgstr "Cerca a totes les notes"
|
||||
|
||||
#, fuzzy
|
||||
msgid "&View"
|
||||
msgstr "Visualització"
|
||||
|
||||
msgid "Toggle sidebar"
|
||||
@@ -657,22 +720,16 @@ msgstr "Mostra o amaga la barra lateral"
|
||||
msgid "Toggle editor layout"
|
||||
msgstr "Canvia el disseny de l'editor"
|
||||
|
||||
msgid "Tools"
|
||||
#, fuzzy
|
||||
msgid "Focus"
|
||||
msgstr "Vés al cos"
|
||||
|
||||
#, 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"
|
||||
@@ -681,16 +738,6 @@ 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)"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Open %s"
|
||||
msgstr "Obre %s"
|
||||
@@ -707,15 +754,30 @@ msgstr "Cancel·la"
|
||||
msgid "Current version is up-to-date."
|
||||
msgstr "La versió actual està actualitzada"
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s (pre-release)"
|
||||
msgstr ""
|
||||
|
||||
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: %s"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "New version: %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Yes"
|
||||
msgstr "Sí"
|
||||
|
||||
msgid "No"
|
||||
msgstr "No"
|
||||
|
||||
msgid "Token has been copied to the clipboard!"
|
||||
msgstr ""
|
||||
|
||||
msgid "The web clipper service is enabled and set to auto-start."
|
||||
msgstr ""
|
||||
"El servei de desa-retalls de webs és actiu i configurat per a iniciar-se "
|
||||
@@ -766,13 +828,31 @@ msgstr "Pas 2: Instal·leu l'extensió"
|
||||
msgid "Download and install the relevant extension for your browser:"
|
||||
msgstr "Baixeu i instal·leu l'extensió adient per al vostre navegador:"
|
||||
|
||||
msgid "Check synchronisation configuration"
|
||||
msgstr "Comprova la configuració de la sincronització"
|
||||
#, fuzzy
|
||||
msgid "Advanced options"
|
||||
msgstr "Mostra les opcions avançades"
|
||||
|
||||
msgid "Authorisation token:"
|
||||
msgstr ""
|
||||
|
||||
msgid "Copy token"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"This authorisation token is only needed to allow third-party applications to "
|
||||
"access Joplin."
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Notes and settings are stored in: %s"
|
||||
msgstr "Les notes i la configuració es desen a: %s"
|
||||
|
||||
msgid "Check synchronisation configuration"
|
||||
msgstr "Comprova la configuració de la sincronització"
|
||||
|
||||
msgid "Browse..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Apply"
|
||||
msgstr ""
|
||||
|
||||
@@ -867,6 +947,10 @@ msgstr "Estat"
|
||||
msgid "Encryption is:"
|
||||
msgstr "El xifratge és:"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Usage"
|
||||
msgstr "Ús: %s"
|
||||
|
||||
msgid "Back"
|
||||
msgstr "Enrere"
|
||||
|
||||
@@ -917,28 +1001,6 @@ msgstr "Alguns elements no s'han pogut desxifrar."
|
||||
msgid "Set the password"
|
||||
msgstr "Establiu la contrasenya"
|
||||
|
||||
msgid "Add or remove tags"
|
||||
msgstr "Afegeix o suprimeix etiquetes"
|
||||
|
||||
msgid "Duplicate"
|
||||
msgstr ""
|
||||
|
||||
#, 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"
|
||||
|
||||
msgid "Copy Markdown link"
|
||||
msgstr "Copia l'enllaç Markdown"
|
||||
|
||||
msgid "Delete"
|
||||
msgstr "Suprimeix"
|
||||
|
||||
msgid "Delete notes?"
|
||||
msgstr "Voleu suprimir les notes?"
|
||||
|
||||
msgid "No notes in here. Create one by clicking on \"New note\"."
|
||||
msgstr "No hi ha cap nota aquí. Creeu-ne una fent clic a «Nota nova»."
|
||||
|
||||
@@ -954,6 +1016,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..."
|
||||
|
||||
@@ -970,6 +1059,9 @@ msgstr "Copia el camí al porta-retalls"
|
||||
msgid "Copy Link Address"
|
||||
msgstr ""
|
||||
|
||||
msgid "This attachment is not downloaded or not decrypted yet."
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Unsupported link or message: %s"
|
||||
msgstr "Missatge o enllaç no suportat: %s"
|
||||
@@ -982,6 +1074,9 @@ msgstr ""
|
||||
"Aquesta nota no té contingut. Feu clic a «%s» per a anar a l'editor i "
|
||||
"modificar-la."
|
||||
|
||||
msgid "Only one note can be printed or exported to PDF at a time."
|
||||
msgstr ""
|
||||
|
||||
msgid "strong text"
|
||||
msgstr ""
|
||||
|
||||
@@ -1007,9 +1102,6 @@ msgstr "Estableix una alarma"
|
||||
msgid "In: %s"
|
||||
msgstr "A: %s"
|
||||
|
||||
msgid "Note properties"
|
||||
msgstr ""
|
||||
|
||||
msgid "Hyperlink"
|
||||
msgstr ""
|
||||
|
||||
@@ -1072,24 +1164,83 @@ 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?"
|
||||
msgstr "Voleu suprimir aquesta cerca de la barra laterla?"
|
||||
|
||||
msgid "Delete"
|
||||
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."
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Fetching resources: %d"
|
||||
msgstr "Recursos: %d."
|
||||
|
||||
msgid "Please select where the sync status should be exported to"
|
||||
msgstr "Seleccioneu on s'hauria d'exportar l'estat de la sincronització"
|
||||
|
||||
msgid "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"
|
||||
@@ -1131,6 +1282,9 @@ msgstr ""
|
||||
"No es pot actualitzar el testimoni: manquen les dades d'autenticació. Si "
|
||||
"comenceu altre cop la sincronització, potser es corregeixi el problema."
|
||||
|
||||
msgid "Untitled"
|
||||
msgstr "Sense títol"
|
||||
|
||||
msgid ""
|
||||
"Could not synchronize with OneDrive.\n"
|
||||
"\n"
|
||||
@@ -1178,10 +1332,6 @@ msgstr "Elements remots suprimits: %d."
|
||||
msgid "Fetched items: %d/%d."
|
||||
msgstr "Elements obtinguts: %d/%d."
|
||||
|
||||
#, javascript-format
|
||||
msgid "State: %s."
|
||||
msgstr "Estat: %s"
|
||||
|
||||
msgid "Cancelling..."
|
||||
msgstr "S'està cancel·lant..."
|
||||
|
||||
@@ -1203,12 +1353,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"
|
||||
|
||||
@@ -1219,18 +1379,9 @@ 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ó"
|
||||
|
||||
msgid "Untitled"
|
||||
msgstr "Sense títol"
|
||||
|
||||
msgid "This note does not have geolocation information."
|
||||
msgstr "Aquesta nota no té informació de geolocalització."
|
||||
|
||||
@@ -1242,6 +1393,13 @@ 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 "Language"
|
||||
msgstr "Llengua"
|
||||
|
||||
@@ -1272,6 +1430,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"
|
||||
|
||||
@@ -1287,18 +1449,65 @@ 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"
|
||||
|
||||
msgid "Note: Does not work in all desktop environments."
|
||||
msgstr "Nota: no funciona en tots els entorns d'escriptori."
|
||||
|
||||
msgid ""
|
||||
"This will allow Joplin to run in the background. It is recommended to enable "
|
||||
"this setting so that your notes are constantly being synchronised, thus "
|
||||
"reducing the number of conflicts."
|
||||
msgstr ""
|
||||
|
||||
msgid "Start application minimised in the tray icon"
|
||||
msgstr ""
|
||||
|
||||
msgid "Global zoom percentage"
|
||||
msgstr "Percentatge de zoom global"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Editor font size"
|
||||
msgstr "Tipus de lletra de l'editor"
|
||||
|
||||
msgid "Editor font family"
|
||||
msgstr "Tipus de lletra de l'editor"
|
||||
|
||||
@@ -1313,6 +1522,13 @@ msgstr ""
|
||||
msgid "Automatically update the application"
|
||||
msgstr "Actualitza automàticament l'aplicació"
|
||||
|
||||
msgid "Get pre-releases when checking for updates"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "See the pre-release page for more details: %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Synchronisation interval"
|
||||
msgstr "Interval de sincronització"
|
||||
|
||||
@@ -1356,23 +1572,9 @@ msgstr ""
|
||||
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"
|
||||
|
||||
@@ -1401,10 +1603,46 @@ 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."
|
||||
|
||||
#, fuzzy
|
||||
msgid "General"
|
||||
msgstr "Opcions generals"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Synchronisation"
|
||||
msgstr "Estat de la sincronització"
|
||||
|
||||
msgid "Appearance"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Note"
|
||||
msgstr "Blocs de notes"
|
||||
|
||||
msgid "Plugins"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Application"
|
||||
msgstr "Surt de l'aplicació"
|
||||
|
||||
#, javascript-format
|
||||
msgid "The tag \"%s\" already exists. Please choose a different name."
|
||||
msgstr ""
|
||||
@@ -1421,6 +1659,13 @@ msgstr "Directori d'exportació del Joplin"
|
||||
msgid "Evernote Export File"
|
||||
msgstr "Fitxer d'exportació de l'Evernote"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Json Export Directory"
|
||||
msgstr "Directori d'exportació del Joplin"
|
||||
|
||||
msgid "File"
|
||||
msgstr "Fitxer"
|
||||
|
||||
msgid "Directory"
|
||||
msgstr "Directori"
|
||||
|
||||
@@ -1446,12 +1691,19 @@ msgstr "No hi ha dades per exportar."
|
||||
msgid "Please specify the notebook where the notes should be imported to."
|
||||
msgstr "Indiqueu el bloc de notes on s'haurien d'importar les notes."
|
||||
|
||||
msgid "Restored Notes"
|
||||
msgstr ""
|
||||
|
||||
msgid "Items that cannot be synchronised"
|
||||
msgstr "Elements que no s'han pogut sincronitzar"
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s (%s): %s"
|
||||
msgstr "%s (%s): %s"
|
||||
#, fuzzy, javascript-format
|
||||
msgid "%s (%s) could not be uploaded: %s"
|
||||
msgstr "No s'ha pogut desar el bloc de notes: %s"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Item \"%s\" could not be downloaded: %s"
|
||||
msgstr "No s'ha pogut desar el bloc de notes: %s"
|
||||
|
||||
msgid ""
|
||||
"These items will remain on the device but will not be uploaded to the sync "
|
||||
@@ -1495,6 +1747,12 @@ msgstr "Alarmes programades"
|
||||
msgid "On %s: %s"
|
||||
msgstr "A les %s.%s"
|
||||
|
||||
msgid "Permission to use camera"
|
||||
msgstr ""
|
||||
|
||||
msgid "Your permission to use your camera is required."
|
||||
msgstr ""
|
||||
|
||||
msgid "There are currently no notes. Create one by clicking on the (+) button."
|
||||
msgstr "Ara mateix no hi ha cap nota. Creeu-ne una fent clic en el botó (+)."
|
||||
|
||||
@@ -1523,6 +1781,10 @@ msgstr "Voleu moure %d notes al bloc de notes «%s»?"
|
||||
msgid "Press to set the decryption password."
|
||||
msgstr "Premeu per a establir la contrasenya de desxifratge."
|
||||
|
||||
#, fuzzy
|
||||
msgid "Clear alarm"
|
||||
msgstr "Estableix una alarma"
|
||||
|
||||
msgid "Save alarm"
|
||||
msgstr "Desa l'alarma"
|
||||
|
||||
@@ -1535,8 +1797,34 @@ msgstr "Confirmació"
|
||||
msgid "Cancel synchronisation"
|
||||
msgstr "Cancel·la la sincronització"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Checking... Please wait."
|
||||
msgstr "S'està cancel·lant... Espereu."
|
||||
|
||||
#, fuzzy
|
||||
msgid "Success! Synchronisation configuration appears to be correct."
|
||||
msgstr "Comprova la configuració de la sincronització"
|
||||
|
||||
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'aplicació s'ha autoritzat correctament."
|
||||
|
||||
#, javascript-format
|
||||
msgid ""
|
||||
"Could not authorise application:\n"
|
||||
"\n"
|
||||
"%s\n"
|
||||
"\n"
|
||||
"Please try again."
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Decrypting items: %d/%d"
|
||||
msgid "Decrypted items: %s / %s"
|
||||
msgstr "Elements obtinguts: %d/%d."
|
||||
|
||||
msgid "New tags:"
|
||||
@@ -1571,9 +1859,20 @@ msgstr ""
|
||||
msgid "Joplin website"
|
||||
msgstr "Lloc web del Joplin"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Database v%s"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "FTS enabled: %d"
|
||||
msgstr "Per suprimir: %d"
|
||||
|
||||
msgid "Login with Dropbox"
|
||||
msgstr "Inicia sessió amb Dropbox"
|
||||
|
||||
msgid "Enter code here"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Master Key %s"
|
||||
msgstr "Clau mestra %s"
|
||||
@@ -1626,6 +1925,10 @@ msgstr ""
|
||||
msgid "Unsupported image type: %s"
|
||||
msgstr "Tipus d'imatge no admesa: %s"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Take photo"
|
||||
msgstr "Adjunta una imatge"
|
||||
|
||||
msgid "Attach photo"
|
||||
msgstr "Adjunta una imatge"
|
||||
|
||||
@@ -1650,6 +1953,12 @@ msgstr "Mostra les metadades"
|
||||
msgid "View on map"
|
||||
msgstr "Mostra-ho al mapa"
|
||||
|
||||
msgid "Go to source URL"
|
||||
msgstr ""
|
||||
|
||||
msgid "Edit"
|
||||
msgstr "Edita"
|
||||
|
||||
msgid "Delete notebook"
|
||||
msgstr "Suprimeix el bloc de notes"
|
||||
|
||||
@@ -1673,5 +1982,22 @@ msgstr ""
|
||||
msgid "Welcome"
|
||||
msgstr "Benvingut"
|
||||
|
||||
#~ msgid "%s (%s): %s"
|
||||
#~ msgstr "%s (%s): %s"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "The path to synchronise with when file system synchronisation is enabled. "
|
||||
#~ "See `sync.target`."
|
||||
#~ msgstr ""
|
||||
#~ "El camí on sincronitzar en activar la sincronització del sistema. Vegeu "
|
||||
#~ "«sync.target»."
|
||||
|
||||
#, fuzzy
|
||||
#~ msgid "Joplin v%s"
|
||||
#~ msgstr "Lloc web del Joplin"
|
||||
|
||||
#~ msgid "State: %s."
|
||||
#~ msgstr "Estat: %s"
|
||||
|
||||
#~ msgid "A notebook with this title already exists: \"%s\""
|
||||
#~ msgstr "Ja existeix un bloc de notes amb aquest títol: «%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-"
|
||||
@@ -452,6 +453,9 @@ msgstr "Kan ikke initialisere synkroniseringen."
|
||||
msgid "Starting synchronisation..."
|
||||
msgstr "Starter synkronisering."
|
||||
|
||||
msgid "Downloading resources..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Cancelling... Please wait."
|
||||
msgstr "Annullerer... Vent venligst."
|
||||
|
||||
@@ -573,6 +577,20 @@ msgstr ""
|
||||
msgid "Exporting to \"%s\" as \"%s\" format. Please wait..."
|
||||
msgstr "Eksporterer til \"%s\" som \"%s\"-format. Vent venligst..."
|
||||
|
||||
msgid "Sidebar"
|
||||
msgstr ""
|
||||
|
||||
msgid "Note list"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Note title"
|
||||
msgstr "Notesbogs titel:"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Note body"
|
||||
msgstr "Notesbøger"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Importing from \"%s\" as \"%s\" format. Please wait..."
|
||||
msgstr "Importerer fra \"%s\" som \"%s\"-format. Vent venligst..."
|
||||
@@ -580,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"
|
||||
@@ -592,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"
|
||||
@@ -608,7 +655,11 @@ msgstr "Skjul %s"
|
||||
msgid "Quit"
|
||||
msgstr "Afslut"
|
||||
|
||||
msgid "Edit"
|
||||
msgid "Close Window"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "&Edit"
|
||||
msgstr "Ret"
|
||||
|
||||
msgid "Copy"
|
||||
@@ -620,12 +671,19 @@ msgstr "Klip"
|
||||
msgid "Paste"
|
||||
msgstr "Indsæt"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Select all"
|
||||
msgstr "Vælg dato"
|
||||
|
||||
msgid "Bold"
|
||||
msgstr ""
|
||||
|
||||
msgid "Italic"
|
||||
msgstr ""
|
||||
|
||||
msgid "Link"
|
||||
msgstr ""
|
||||
|
||||
msgid "Insert Date Time"
|
||||
msgstr ""
|
||||
|
||||
@@ -635,7 +693,12 @@ msgstr ""
|
||||
msgid "Search in all the notes"
|
||||
msgstr "Søg i alle noter"
|
||||
|
||||
msgid "View"
|
||||
#, fuzzy
|
||||
msgid "Search in current note"
|
||||
msgstr "Søg i alle noter"
|
||||
|
||||
#, fuzzy
|
||||
msgid "&View"
|
||||
msgstr "Vis"
|
||||
|
||||
msgid "Toggle sidebar"
|
||||
@@ -644,22 +707,16 @@ msgstr ""
|
||||
msgid "Toggle editor layout"
|
||||
msgstr "Skift editor layout"
|
||||
|
||||
msgid "Tools"
|
||||
#, fuzzy
|
||||
msgid "Focus"
|
||||
msgstr "Fokuser på brødtekst"
|
||||
|
||||
#, 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"
|
||||
@@ -668,16 +725,6 @@ 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)"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Open %s"
|
||||
msgstr "Åben %s"
|
||||
@@ -694,15 +741,30 @@ msgstr "Fortryd"
|
||||
msgid "Current version is up-to-date."
|
||||
msgstr "Aktuel version er nyeste."
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s (pre-release)"
|
||||
msgstr ""
|
||||
|
||||
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: %s"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "New version: %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Yes"
|
||||
msgstr "Ja"
|
||||
|
||||
msgid "No"
|
||||
msgstr "Nej"
|
||||
|
||||
msgid "Token has been copied to the clipboard!"
|
||||
msgstr ""
|
||||
|
||||
msgid "The web clipper service is enabled and set to auto-start."
|
||||
msgstr ""
|
||||
|
||||
@@ -746,13 +808,31 @@ msgstr ""
|
||||
msgid "Download and install the relevant extension for your browser:"
|
||||
msgstr ""
|
||||
|
||||
msgid "Check synchronisation configuration"
|
||||
msgstr "Check synkroniserings Indstillinger"
|
||||
#, fuzzy
|
||||
msgid "Advanced options"
|
||||
msgstr "Vis avancerede indstillinger"
|
||||
|
||||
msgid "Authorisation token:"
|
||||
msgstr ""
|
||||
|
||||
msgid "Copy token"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"This authorisation token is only needed to allow third-party applications to "
|
||||
"access Joplin."
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Notes and settings are stored in: %s"
|
||||
msgstr "Noter og indstillinger er gemt i: %s"
|
||||
|
||||
msgid "Check synchronisation configuration"
|
||||
msgstr "Check synkroniserings Indstillinger"
|
||||
|
||||
msgid "Browse..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Apply"
|
||||
msgstr ""
|
||||
|
||||
@@ -846,6 +926,10 @@ msgstr "Status"
|
||||
msgid "Encryption is:"
|
||||
msgstr "Kryptering er:"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Usage"
|
||||
msgstr "Forbrug: %s"
|
||||
|
||||
msgid "Back"
|
||||
msgstr "Tilbage"
|
||||
|
||||
@@ -898,29 +982,6 @@ msgstr "Nogle emner kan ikke krypteres."
|
||||
msgid "Set the password"
|
||||
msgstr "Indstil kodeord"
|
||||
|
||||
msgid "Add or remove tags"
|
||||
msgstr "Tilføj eller slet mærker"
|
||||
|
||||
msgid "Duplicate"
|
||||
msgstr ""
|
||||
|
||||
#, 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 "Copy Markdown link"
|
||||
msgstr "Markdown"
|
||||
|
||||
msgid "Delete"
|
||||
msgstr "Slet"
|
||||
|
||||
msgid "Delete notes?"
|
||||
msgstr "Slet noter?"
|
||||
|
||||
msgid "No notes in here. Create one by clicking on \"New note\"."
|
||||
msgstr "Der er ingen noter her. Opret en ved at klikke på \"Ny note\"."
|
||||
|
||||
@@ -934,6 +995,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..."
|
||||
|
||||
@@ -950,6 +1038,9 @@ msgstr ""
|
||||
msgid "Copy Link Address"
|
||||
msgstr ""
|
||||
|
||||
msgid "This attachment is not downloaded or not decrypted yet."
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Unsupported link or message: %s"
|
||||
msgstr "Ugyldigt- eller ulovligt link eller besked: %s"
|
||||
@@ -960,6 +1051,9 @@ msgid ""
|
||||
"note."
|
||||
msgstr "Denne note er tom. Klik på \"%s\" for at starte editor og rette noten."
|
||||
|
||||
msgid "Only one note can be printed or exported to PDF at a time."
|
||||
msgstr ""
|
||||
|
||||
msgid "strong text"
|
||||
msgstr ""
|
||||
|
||||
@@ -985,9 +1079,6 @@ msgstr "Indstil alarm"
|
||||
msgid "In: %s"
|
||||
msgstr "%s: %s"
|
||||
|
||||
msgid "Note properties"
|
||||
msgstr ""
|
||||
|
||||
msgid "Hyperlink"
|
||||
msgstr ""
|
||||
|
||||
@@ -1051,24 +1142,82 @@ 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?"
|
||||
msgstr "Slet denne søgning fra sidebjælke?"
|
||||
|
||||
msgid "Delete"
|
||||
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."
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Fetching resources: %d"
|
||||
msgstr "Ressourcer: %d."
|
||||
|
||||
msgid "Please select where the sync status should be exported to"
|
||||
msgstr "Vælg hvor sync status skal eksporteres til"
|
||||
|
||||
msgid "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"
|
||||
@@ -1110,6 +1259,9 @@ msgstr ""
|
||||
"Kan ikke opdatere token: Godkendelses data mangler. Prøv at starte "
|
||||
"synkronisering igen, det kan løse problemet."
|
||||
|
||||
msgid "Untitled"
|
||||
msgstr "Samlet"
|
||||
|
||||
msgid ""
|
||||
"Could not synchronize with OneDrive.\n"
|
||||
"\n"
|
||||
@@ -1157,10 +1309,6 @@ msgstr "Slettede fjern-emner: %d."
|
||||
msgid "Fetched items: %d/%d."
|
||||
msgstr "Hentede emner: %d/%d."
|
||||
|
||||
#, javascript-format
|
||||
msgid "State: %s."
|
||||
msgstr "Tilstand: %s."
|
||||
|
||||
msgid "Cancelling..."
|
||||
msgstr "Annullerer..."
|
||||
|
||||
@@ -1182,12 +1330,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"
|
||||
|
||||
@@ -1199,21 +1359,10 @@ 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."
|
||||
|
||||
msgid "Untitled"
|
||||
msgstr "Samlet"
|
||||
|
||||
msgid "This note does not have geolocation information."
|
||||
msgstr "Denne note har ingen geolokations oplysninger."
|
||||
|
||||
@@ -1225,6 +1374,13 @@ 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 "Language"
|
||||
msgstr "Sprog"
|
||||
|
||||
@@ -1256,6 +1412,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"
|
||||
|
||||
@@ -1271,18 +1431,65 @@ 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"
|
||||
|
||||
msgid "Note: Does not work in all desktop environments."
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"This will allow Joplin to run in the background. It is recommended to enable "
|
||||
"this setting so that your notes are constantly being synchronised, thus "
|
||||
"reducing the number of conflicts."
|
||||
msgstr ""
|
||||
|
||||
msgid "Start application minimised in the tray icon"
|
||||
msgstr ""
|
||||
|
||||
msgid "Global zoom percentage"
|
||||
msgstr "Global zoom procent"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Editor font size"
|
||||
msgstr "Rediger skrifttype"
|
||||
|
||||
msgid "Editor font family"
|
||||
msgstr "Rediger skrifttype"
|
||||
|
||||
@@ -1297,6 +1504,13 @@ msgstr ""
|
||||
msgid "Automatically update the application"
|
||||
msgstr "Automatisk app update"
|
||||
|
||||
msgid "Get pre-releases when checking for updates"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "See the pre-release page for more details: %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Synchronisation interval"
|
||||
msgstr "Synkroniserings interval"
|
||||
|
||||
@@ -1340,23 +1554,9 @@ msgstr ""
|
||||
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"
|
||||
|
||||
@@ -1385,10 +1585,46 @@ 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."
|
||||
|
||||
#, fuzzy
|
||||
msgid "General"
|
||||
msgstr "Generelle indstillinger"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Synchronisation"
|
||||
msgstr "Synkroniserings status"
|
||||
|
||||
msgid "Appearance"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Note"
|
||||
msgstr "Notesbøger"
|
||||
|
||||
msgid "Plugins"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Application"
|
||||
msgstr "Forlad/luk program."
|
||||
|
||||
#, javascript-format
|
||||
msgid "The tag \"%s\" already exists. Please choose a different name."
|
||||
msgstr ""
|
||||
@@ -1405,6 +1641,13 @@ msgstr "Joplin eksport mappe"
|
||||
msgid "Evernote Export File"
|
||||
msgstr "Evernote eksport fil"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Json Export Directory"
|
||||
msgstr "Joplin eksport mappe"
|
||||
|
||||
msgid "File"
|
||||
msgstr "Fil"
|
||||
|
||||
msgid "Directory"
|
||||
msgstr "Indeks"
|
||||
|
||||
@@ -1430,12 +1673,19 @@ msgstr "Der er ingen data at eksportere."
|
||||
msgid "Please specify the notebook where the notes should be imported to."
|
||||
msgstr "Angiv hvilken notesbog, noter skal importeres til."
|
||||
|
||||
msgid "Restored Notes"
|
||||
msgstr ""
|
||||
|
||||
msgid "Items that cannot be synchronised"
|
||||
msgstr "Emner kan ikke synkroniseres"
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s (%s): %s"
|
||||
msgstr "%s (%s): %s"
|
||||
#, fuzzy, javascript-format
|
||||
msgid "%s (%s) could not be uploaded: %s"
|
||||
msgstr "Notesbogen kan ikke gemmes: %s"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Item \"%s\" could not be downloaded: %s"
|
||||
msgstr "Notesbogen kan ikke gemmes: %s"
|
||||
|
||||
msgid ""
|
||||
"These items will remain on the device but will not be uploaded to the sync "
|
||||
@@ -1479,6 +1729,12 @@ msgstr "Kommende alarmer"
|
||||
msgid "On %s: %s"
|
||||
msgstr "På %s: %s"
|
||||
|
||||
msgid "Permission to use camera"
|
||||
msgstr ""
|
||||
|
||||
msgid "Your permission to use your camera is required."
|
||||
msgstr ""
|
||||
|
||||
msgid "There are currently no notes. Create one by clicking on the (+) button."
|
||||
msgstr "Der er ingen noter. Opret note ved at klikke på (+) knappen."
|
||||
|
||||
@@ -1507,6 +1763,10 @@ msgstr "Flyt %d noter til notesbogen \"%s\"?"
|
||||
msgid "Press to set the decryption password."
|
||||
msgstr "Klik for at gemme dekrypterings kodeord."
|
||||
|
||||
#, fuzzy
|
||||
msgid "Clear alarm"
|
||||
msgstr "Indstil alarm"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Save alarm"
|
||||
msgstr "Indstil alarm"
|
||||
@@ -1520,8 +1780,34 @@ msgstr "Bekræft"
|
||||
msgid "Cancel synchronisation"
|
||||
msgstr "Afbryd synkronisering"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Checking... Please wait."
|
||||
msgstr "Annullerer... Vent venligst."
|
||||
|
||||
#, fuzzy
|
||||
msgid "Success! Synchronisation configuration appears to be correct."
|
||||
msgstr "Check synkroniserings Indstillinger"
|
||||
|
||||
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 "Denne app er succesfuldt godkendt."
|
||||
|
||||
#, javascript-format
|
||||
msgid ""
|
||||
"Could not authorise application:\n"
|
||||
"\n"
|
||||
"%s\n"
|
||||
"\n"
|
||||
"Please try again."
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Decrypting items: %d/%d"
|
||||
msgid "Decrypted items: %s / %s"
|
||||
msgstr "Hentede emner: %d/%d."
|
||||
|
||||
msgid "New tags:"
|
||||
@@ -1549,10 +1835,21 @@ msgstr ""
|
||||
msgid "Joplin website"
|
||||
msgstr "Joplin hjemmeside"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Database v%s"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "FTS enabled: %d"
|
||||
msgstr "Til sletning: %d"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Login with Dropbox"
|
||||
msgstr "Log på med OneDrive"
|
||||
|
||||
msgid "Enter code here"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Master Key %s"
|
||||
msgstr "Hoved nøgle %s"
|
||||
@@ -1604,6 +1901,10 @@ msgstr ""
|
||||
msgid "Unsupported image type: %s"
|
||||
msgstr "Ulovlig billedtype: %s"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Take photo"
|
||||
msgstr "Vedhæft foto"
|
||||
|
||||
msgid "Attach photo"
|
||||
msgstr "Vedhæft foto"
|
||||
|
||||
@@ -1628,6 +1929,12 @@ msgstr "Vis metadata"
|
||||
msgid "View on map"
|
||||
msgstr "Vis på kort"
|
||||
|
||||
msgid "Go to source URL"
|
||||
msgstr ""
|
||||
|
||||
msgid "Edit"
|
||||
msgstr "Ret"
|
||||
|
||||
msgid "Delete notebook"
|
||||
msgstr "Slet notesbog"
|
||||
|
||||
@@ -1650,6 +1957,23 @@ msgstr "Du har ingen notesbøger. Opret en ved at klikke på (+) knappen."
|
||||
msgid "Welcome"
|
||||
msgstr "Velkommen"
|
||||
|
||||
#~ msgid "%s (%s): %s"
|
||||
#~ msgstr "%s (%s): %s"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "The path to synchronise with when file system synchronisation is enabled. "
|
||||
#~ "See `sync.target`."
|
||||
#~ msgstr ""
|
||||
#~ "Sti til synkronisering, når filsystem synkronisering er slået til. Se "
|
||||
#~ "`sync.target`."
|
||||
|
||||
#, fuzzy
|
||||
#~ msgid "Joplin v%s"
|
||||
#~ msgstr "Joplin hjemmeside"
|
||||
|
||||
#~ msgid "State: %s."
|
||||
#~ msgstr "Tilstand: %s."
|
||||
|
||||
#~ msgid "A notebook with this title already exists: \"%s\""
|
||||
#~ msgstr "En notesbog bruger allerede dette navn: \"%s\""
|
||||
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -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:"
|
||||
@@ -408,6 +408,9 @@ msgstr ""
|
||||
msgid "Starting synchronisation..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Downloading resources..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Cancelling... Please wait."
|
||||
msgstr ""
|
||||
|
||||
@@ -505,6 +508,18 @@ msgstr ""
|
||||
msgid "Exporting to \"%s\" as \"%s\" format. Please wait..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Sidebar"
|
||||
msgstr ""
|
||||
|
||||
msgid "Note list"
|
||||
msgstr ""
|
||||
|
||||
msgid "Note title"
|
||||
msgstr ""
|
||||
|
||||
msgid "Note body"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Importing from \"%s\" as \"%s\" format. Please wait..."
|
||||
msgstr ""
|
||||
@@ -512,7 +527,7 @@ msgstr ""
|
||||
msgid "PDF File"
|
||||
msgstr ""
|
||||
|
||||
msgid "File"
|
||||
msgid "Synchronisation status"
|
||||
msgstr ""
|
||||
|
||||
msgid "New note"
|
||||
@@ -524,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
|
||||
@@ -540,7 +583,10 @@ msgstr ""
|
||||
msgid "Quit"
|
||||
msgstr ""
|
||||
|
||||
msgid "Edit"
|
||||
msgid "Close Window"
|
||||
msgstr ""
|
||||
|
||||
msgid "&Edit"
|
||||
msgstr ""
|
||||
|
||||
msgid "Copy"
|
||||
@@ -552,12 +598,18 @@ msgstr ""
|
||||
msgid "Paste"
|
||||
msgstr ""
|
||||
|
||||
msgid "Select all"
|
||||
msgstr ""
|
||||
|
||||
msgid "Bold"
|
||||
msgstr ""
|
||||
|
||||
msgid "Italic"
|
||||
msgstr ""
|
||||
|
||||
msgid "Link"
|
||||
msgstr ""
|
||||
|
||||
msgid "Insert Date Time"
|
||||
msgstr ""
|
||||
|
||||
@@ -567,7 +619,10 @@ msgstr ""
|
||||
msgid "Search in all the notes"
|
||||
msgstr ""
|
||||
|
||||
msgid "View"
|
||||
msgid "Search in current note"
|
||||
msgstr ""
|
||||
|
||||
msgid "&View"
|
||||
msgstr ""
|
||||
|
||||
msgid "Toggle sidebar"
|
||||
@@ -576,22 +631,13 @@ msgstr ""
|
||||
msgid "Toggle editor layout"
|
||||
msgstr ""
|
||||
|
||||
msgid "Tools"
|
||||
msgid "Focus"
|
||||
msgstr ""
|
||||
|
||||
msgid "Synchronisation status"
|
||||
msgid "&Tools"
|
||||
msgstr ""
|
||||
|
||||
msgid "Web clipper options"
|
||||
msgstr ""
|
||||
|
||||
msgid "Encryption options"
|
||||
msgstr ""
|
||||
|
||||
msgid "General Options"
|
||||
msgstr ""
|
||||
|
||||
msgid "Help"
|
||||
msgid "&Help"
|
||||
msgstr ""
|
||||
|
||||
msgid "Website and documentation"
|
||||
@@ -600,16 +646,6 @@ msgstr ""
|
||||
msgid "Make a donation"
|
||||
msgstr ""
|
||||
|
||||
msgid "Check for updates..."
|
||||
msgstr ""
|
||||
|
||||
msgid "About Joplin"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s %s (%s, %s)"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Open %s"
|
||||
msgstr ""
|
||||
@@ -626,15 +662,30 @@ msgstr ""
|
||||
msgid "Current version is up-to-date."
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s (pre-release)"
|
||||
msgstr ""
|
||||
|
||||
msgid "An update is available, do you want to download it now?"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Your version: %s"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "New version: %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Yes"
|
||||
msgstr ""
|
||||
|
||||
msgid "No"
|
||||
msgstr ""
|
||||
|
||||
msgid "Token has been copied to the clipboard!"
|
||||
msgstr ""
|
||||
|
||||
msgid "The web clipper service is enabled and set to auto-start."
|
||||
msgstr ""
|
||||
|
||||
@@ -678,13 +729,30 @@ msgstr ""
|
||||
msgid "Download and install the relevant extension for your browser:"
|
||||
msgstr ""
|
||||
|
||||
msgid "Check synchronisation configuration"
|
||||
msgid "Advanced options"
|
||||
msgstr ""
|
||||
|
||||
msgid "Authorisation token:"
|
||||
msgstr ""
|
||||
|
||||
msgid "Copy token"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"This authorisation token is only needed to allow third-party applications to "
|
||||
"access Joplin."
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Notes and settings are stored in: %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Check synchronisation configuration"
|
||||
msgstr ""
|
||||
|
||||
msgid "Browse..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Apply"
|
||||
msgstr ""
|
||||
|
||||
@@ -763,6 +831,9 @@ msgstr ""
|
||||
msgid "Encryption is:"
|
||||
msgstr ""
|
||||
|
||||
msgid "Usage"
|
||||
msgstr ""
|
||||
|
||||
msgid "Back"
|
||||
msgstr ""
|
||||
|
||||
@@ -813,28 +884,6 @@ msgstr ""
|
||||
msgid "Set the password"
|
||||
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 "Copy Markdown link"
|
||||
msgstr ""
|
||||
|
||||
msgid "Delete"
|
||||
msgstr ""
|
||||
|
||||
msgid "Delete notes?"
|
||||
msgstr ""
|
||||
|
||||
msgid "No notes in here. Create one by clicking on \"New note\"."
|
||||
msgstr ""
|
||||
|
||||
@@ -848,6 +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 ""
|
||||
|
||||
@@ -864,6 +938,9 @@ msgstr ""
|
||||
msgid "Copy Link Address"
|
||||
msgstr ""
|
||||
|
||||
msgid "This attachment is not downloaded or not decrypted yet."
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Unsupported link or message: %s"
|
||||
msgstr ""
|
||||
@@ -874,6 +951,9 @@ msgid ""
|
||||
"note."
|
||||
msgstr ""
|
||||
|
||||
msgid "Only one note can be printed or exported to PDF at a time."
|
||||
msgstr ""
|
||||
|
||||
msgid "strong text"
|
||||
msgstr ""
|
||||
|
||||
@@ -899,9 +979,6 @@ msgstr ""
|
||||
msgid "In: %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Note properties"
|
||||
msgstr ""
|
||||
|
||||
msgid "Hyperlink"
|
||||
msgstr ""
|
||||
|
||||
@@ -963,24 +1040,78 @@ 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?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Rename"
|
||||
msgid "Delete"
|
||||
msgstr ""
|
||||
|
||||
msgid "Synchronise"
|
||||
msgid "Rename"
|
||||
msgstr ""
|
||||
|
||||
msgid "Notebooks"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Decrypting items: %d/%d"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Fetching resources: %d"
|
||||
msgstr ""
|
||||
|
||||
msgid "Please select where the sync status should be exported to"
|
||||
msgstr ""
|
||||
|
||||
msgid "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 ""
|
||||
@@ -1020,6 +1151,9 @@ msgid ""
|
||||
"synchronisation again may fix the problem."
|
||||
msgstr ""
|
||||
|
||||
msgid "Untitled"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"Could not synchronize with OneDrive.\n"
|
||||
"\n"
|
||||
@@ -1061,10 +1195,6 @@ msgstr ""
|
||||
msgid "Fetched items: %d/%d."
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "State: %s."
|
||||
msgstr ""
|
||||
|
||||
msgid "Cancelling..."
|
||||
msgstr ""
|
||||
|
||||
@@ -1086,12 +1216,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 ""
|
||||
|
||||
@@ -1102,18 +1242,9 @@ msgstr ""
|
||||
msgid "Notebooks cannot be named \"%s\", which is a reserved title."
|
||||
msgstr ""
|
||||
|
||||
msgid "title"
|
||||
msgstr ""
|
||||
|
||||
msgid "updated date"
|
||||
msgstr ""
|
||||
|
||||
msgid "created date"
|
||||
msgstr ""
|
||||
|
||||
msgid "Untitled"
|
||||
msgstr ""
|
||||
|
||||
msgid "This note does not have geolocation information."
|
||||
msgstr ""
|
||||
|
||||
@@ -1125,6 +1256,13 @@ 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 "Language"
|
||||
msgstr ""
|
||||
|
||||
@@ -1155,6 +1293,9 @@ msgstr ""
|
||||
msgid "Reverse sort order"
|
||||
msgstr ""
|
||||
|
||||
msgid "Sort notebooks by"
|
||||
msgstr ""
|
||||
|
||||
msgid "Save geo-location with notes"
|
||||
msgstr ""
|
||||
|
||||
@@ -1170,18 +1311,63 @@ 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 ""
|
||||
|
||||
msgid "Note: Does not work in all desktop environments."
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"This will allow Joplin to run in the background. It is recommended to enable "
|
||||
"this setting so that your notes are constantly being synchronised, thus "
|
||||
"reducing the number of conflicts."
|
||||
msgstr ""
|
||||
|
||||
msgid "Start application minimised in the tray icon"
|
||||
msgstr ""
|
||||
|
||||
msgid "Global zoom percentage"
|
||||
msgstr ""
|
||||
|
||||
msgid "Editor font size"
|
||||
msgstr ""
|
||||
|
||||
msgid "Editor font family"
|
||||
msgstr ""
|
||||
|
||||
@@ -1193,6 +1379,13 @@ msgstr ""
|
||||
msgid "Automatically update the application"
|
||||
msgstr ""
|
||||
|
||||
msgid "Get pre-releases when checking for updates"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "See the pre-release page for more details: %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Synchronisation interval"
|
||||
msgstr ""
|
||||
|
||||
@@ -1230,21 +1423,9 @@ 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 ""
|
||||
|
||||
@@ -1273,10 +1454,41 @@ 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 ""
|
||||
|
||||
msgid "General"
|
||||
msgstr ""
|
||||
|
||||
msgid "Synchronisation"
|
||||
msgstr ""
|
||||
|
||||
msgid "Appearance"
|
||||
msgstr ""
|
||||
|
||||
msgid "Note"
|
||||
msgstr ""
|
||||
|
||||
msgid "Plugins"
|
||||
msgstr ""
|
||||
|
||||
msgid "Application"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "The tag \"%s\" already exists. Please choose a different name."
|
||||
msgstr ""
|
||||
@@ -1293,6 +1505,12 @@ msgstr ""
|
||||
msgid "Evernote Export File"
|
||||
msgstr ""
|
||||
|
||||
msgid "Json Export Directory"
|
||||
msgstr ""
|
||||
|
||||
msgid "File"
|
||||
msgstr ""
|
||||
|
||||
msgid "Directory"
|
||||
msgstr ""
|
||||
|
||||
@@ -1316,11 +1534,18 @@ msgstr ""
|
||||
msgid "Please specify the notebook where the notes should be imported to."
|
||||
msgstr ""
|
||||
|
||||
msgid "Restored Notes"
|
||||
msgstr ""
|
||||
|
||||
msgid "Items that cannot be synchronised"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s (%s): %s"
|
||||
msgid "%s (%s) could not be uploaded: %s"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Item \"%s\" could not be downloaded: %s"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
@@ -1362,6 +1587,12 @@ msgstr ""
|
||||
msgid "On %s: %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Permission to use camera"
|
||||
msgstr ""
|
||||
|
||||
msgid "Your permission to use your camera is required."
|
||||
msgstr ""
|
||||
|
||||
msgid "There are currently no notes. Create one by clicking on the (+) button."
|
||||
msgstr ""
|
||||
|
||||
@@ -1390,6 +1621,9 @@ msgstr ""
|
||||
msgid "Press to set the decryption password."
|
||||
msgstr ""
|
||||
|
||||
msgid "Clear alarm"
|
||||
msgstr ""
|
||||
|
||||
msgid "Save alarm"
|
||||
msgstr ""
|
||||
|
||||
@@ -1402,8 +1636,31 @@ msgstr ""
|
||||
msgid "Cancel synchronisation"
|
||||
msgstr ""
|
||||
|
||||
msgid "Checking... Please wait."
|
||||
msgstr ""
|
||||
|
||||
msgid "Success! Synchronisation configuration appears to be correct."
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"Error. Please check that URL, username, password, etc. are correct and that "
|
||||
"the sync target is accessible. The reported error was:"
|
||||
msgstr ""
|
||||
|
||||
msgid "The application has been authorised!"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Decrypting items: %d/%d"
|
||||
msgid ""
|
||||
"Could not authorise application:\n"
|
||||
"\n"
|
||||
"%s\n"
|
||||
"\n"
|
||||
"Please try again."
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Decrypted items: %s / %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "New tags:"
|
||||
@@ -1431,9 +1688,20 @@ msgstr ""
|
||||
msgid "Joplin website"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Database v%s"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "FTS enabled: %d"
|
||||
msgstr ""
|
||||
|
||||
msgid "Login with Dropbox"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enter code here"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Master Key %s"
|
||||
msgstr ""
|
||||
@@ -1485,6 +1753,9 @@ msgstr ""
|
||||
msgid "Unsupported image type: %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Take photo"
|
||||
msgstr ""
|
||||
|
||||
msgid "Attach photo"
|
||||
msgstr ""
|
||||
|
||||
@@ -1509,6 +1780,12 @@ msgstr ""
|
||||
msgid "View on map"
|
||||
msgstr ""
|
||||
|
||||
msgid "Go to source URL"
|
||||
msgstr ""
|
||||
|
||||
msgid "Edit"
|
||||
msgstr ""
|
||||
|
||||
msgid "Delete notebook"
|
||||
msgstr ""
|
||||
|
||||
|
||||
1839
CliClient/locales/en_US.po
Normal file
1839
CliClient/locales/en_US.po
Normal file
File diff suppressed because it is too large
Load Diff
@@ -1,19 +1,21 @@
|
||||
# Joplin translation to Spanish (Spain)
|
||||
# Copyright (C) 2017 Lucas Vieites
|
||||
# Copyright (C) 2019 Andros Fenollosa
|
||||
# This file is distributed under the same license as the Joplin-CLI package.
|
||||
# Lucas Vieites <lucas.vieites@gmail.com>, 2017.
|
||||
# Andros Fenollosa <andros@fenollosa.email>, 2019.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Joplin-CLI 1.0.0\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"Last-Translator: Fernando Martín <f@mrtn.es>\n"
|
||||
"Last-Translator: Andros Fenollosa <andros@fenollosa.email>\n"
|
||||
"Language-Team: Spanish <lucas.vieites@gmail.com>\n"
|
||||
"Language: es_ES\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Generator: Poedit 1.8.11\n"
|
||||
"X-Generator: Poedit 2.2.1\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
"X-Poedit-SourceCharset: UTF-8\n"
|
||||
|
||||
@@ -35,7 +37,7 @@ msgid "No notebook selected."
|
||||
msgstr "No se ha seleccionado ninguna libreta."
|
||||
|
||||
msgid "No notebook has been specified."
|
||||
msgstr "Ninguna libreta fue especificada"
|
||||
msgstr "Ninguna libreta fue especificada."
|
||||
|
||||
msgid "Y"
|
||||
msgstr "Y"
|
||||
@@ -125,9 +127,10 @@ msgstr "Marca una tarea como hecha."
|
||||
msgid "Note is not a to-do: \"%s\""
|
||||
msgstr "La nota no es una tarea: \"%s\""
|
||||
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
"Manages E2EE configuration. Commands are `enable`, `disable`, `decrypt`, "
|
||||
"`status` and `target-status`."
|
||||
"`status`, `decrypt-file` and `target-status`."
|
||||
msgstr ""
|
||||
"Maneja la configuración E2EE. Comandos disponibles `enable`, `disable`, "
|
||||
"`decrypt`, `status` y `target-status`."
|
||||
@@ -457,10 +460,12 @@ msgstr "No se puede inicializar sincronizador."
|
||||
msgid "Starting synchronisation..."
|
||||
msgstr "Iniciando sincronización..."
|
||||
|
||||
msgid "Downloading resources..."
|
||||
msgstr "Descargando recursos..."
|
||||
|
||||
msgid "Cancelling... Please wait."
|
||||
msgstr "Cancelando... Por favor espere."
|
||||
|
||||
#, 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 "
|
||||
@@ -582,6 +587,18 @@ msgstr ""
|
||||
msgid "Exporting to \"%s\" as \"%s\" format. Please wait..."
|
||||
msgstr "Exportando el formato de \"%s\" a \"%s\". Por favor espere..."
|
||||
|
||||
msgid "Sidebar"
|
||||
msgstr "Barra lateral"
|
||||
|
||||
msgid "Note list"
|
||||
msgstr "Lista de notas"
|
||||
|
||||
msgid "Note title"
|
||||
msgstr "Titulo de nota"
|
||||
|
||||
msgid "Note body"
|
||||
msgstr "Cuerpo de nota"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Importing from \"%s\" as \"%s\" format. Please wait..."
|
||||
msgstr "Importando el formato de \"%s\" a \"%s\". Por favor espere..."
|
||||
@@ -589,8 +606,8 @@ msgstr "Importando el formato de \"%s\" a \"%s\". Por favor espere..."
|
||||
msgid "PDF File"
|
||||
msgstr "Archivo PDF"
|
||||
|
||||
msgid "File"
|
||||
msgstr "Archivo"
|
||||
msgid "Synchronisation status"
|
||||
msgstr "Estado de la sincronización"
|
||||
|
||||
msgid "New note"
|
||||
msgstr "Nueva nota"
|
||||
@@ -601,14 +618,42 @@ msgstr "Nueva lista de tareas"
|
||||
msgid "New notebook"
|
||||
msgstr "Nueva libreta"
|
||||
|
||||
msgid "Print"
|
||||
msgstr "Imprimir"
|
||||
|
||||
msgid "General Options"
|
||||
msgstr "Opciones generales"
|
||||
|
||||
msgid "Encryption options"
|
||||
msgstr "Opciones de cifrado"
|
||||
|
||||
msgid "Web clipper options"
|
||||
msgstr "Opciones de recorte web"
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s %s (%s, %s)"
|
||||
msgstr "%s %s (%s, %s)"
|
||||
|
||||
msgid "&File"
|
||||
msgstr "&Archivo"
|
||||
|
||||
msgid "About Joplin"
|
||||
msgstr "Acerca de Joplin"
|
||||
|
||||
msgid "Preferences..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Check for updates..."
|
||||
msgstr "Comprobar actualizaciones..."
|
||||
|
||||
msgid "Import"
|
||||
msgstr "Importar"
|
||||
|
||||
msgid "Export"
|
||||
msgstr "Exportar"
|
||||
|
||||
msgid "Print"
|
||||
msgstr "Imprimir"
|
||||
msgid "Synchronise"
|
||||
msgstr "Sincronizar"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Hide %s"
|
||||
@@ -617,8 +662,11 @@ msgstr "Oculta %s"
|
||||
msgid "Quit"
|
||||
msgstr "Salir"
|
||||
|
||||
msgid "Edit"
|
||||
msgstr "Editar"
|
||||
msgid "Close Window"
|
||||
msgstr ""
|
||||
|
||||
msgid "&Edit"
|
||||
msgstr "&Editar"
|
||||
|
||||
msgid "Copy"
|
||||
msgstr "Copiar"
|
||||
@@ -629,12 +677,18 @@ msgstr "Cortar"
|
||||
msgid "Paste"
|
||||
msgstr "Pegar"
|
||||
|
||||
msgid "Select all"
|
||||
msgstr "Seleccionar todo"
|
||||
|
||||
msgid "Bold"
|
||||
msgstr "Negrita"
|
||||
|
||||
msgid "Italic"
|
||||
msgstr "Cursiva"
|
||||
|
||||
msgid "Link"
|
||||
msgstr "Enlace"
|
||||
|
||||
msgid "Insert Date Time"
|
||||
msgstr "Introduce fecha"
|
||||
|
||||
@@ -644,8 +698,11 @@ msgstr "Editar con un editor externo"
|
||||
msgid "Search in all the notes"
|
||||
msgstr "Buscar en todas las notas"
|
||||
|
||||
msgid "View"
|
||||
msgstr "Ver"
|
||||
msgid "Search in current note"
|
||||
msgstr "Buscar en nota actual"
|
||||
|
||||
msgid "&View"
|
||||
msgstr "&Ver"
|
||||
|
||||
msgid "Toggle sidebar"
|
||||
msgstr "Cambia la barra lateral"
|
||||
@@ -653,23 +710,14 @@ msgstr "Cambia la barra lateral"
|
||||
msgid "Toggle editor layout"
|
||||
msgstr "Cambia el diseño del editor"
|
||||
|
||||
msgid "Tools"
|
||||
msgstr "Herramientas"
|
||||
msgid "Focus"
|
||||
msgstr "Foco"
|
||||
|
||||
msgid "Synchronisation status"
|
||||
msgstr "Estado de la sincronización"
|
||||
msgid "&Tools"
|
||||
msgstr "&Herramientas"
|
||||
|
||||
msgid "Web clipper options"
|
||||
msgstr "Opciones de recorte web"
|
||||
|
||||
msgid "Encryption options"
|
||||
msgstr "Opciones de cifrado"
|
||||
|
||||
msgid "General Options"
|
||||
msgstr "Opciones generales"
|
||||
|
||||
msgid "Help"
|
||||
msgstr "Ayuda"
|
||||
msgid "&Help"
|
||||
msgstr "&Ayuda"
|
||||
|
||||
msgid "Website and documentation"
|
||||
msgstr "Sitio web y documentación"
|
||||
@@ -677,16 +725,6 @@ msgstr "Sitio web y documentación"
|
||||
msgid "Make a donation"
|
||||
msgstr "Hacer una donación"
|
||||
|
||||
msgid "Check for updates..."
|
||||
msgstr "Comprobar actualizaciones..."
|
||||
|
||||
msgid "About Joplin"
|
||||
msgstr "Acerca de Joplin"
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s %s (%s, %s)"
|
||||
msgstr "%s %s (%s, %s)"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Open %s"
|
||||
msgstr "Abrir %s"
|
||||
@@ -703,15 +741,30 @@ msgstr "Cancelar"
|
||||
msgid "Current version is up-to-date."
|
||||
msgstr "La versión actual está actualizada."
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s (pre-release)"
|
||||
msgstr "%s (pre-lanzamiento)"
|
||||
|
||||
msgid "An update is available, do you want to download it now?"
|
||||
msgstr "Hay disponible una actualización. ¿Quiere descargarla ahora?"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Your version: %s"
|
||||
msgstr "Tu versión: %s"
|
||||
|
||||
#, javascript-format
|
||||
msgid "New version: %s"
|
||||
msgstr "Nueva versión: %s"
|
||||
|
||||
msgid "Yes"
|
||||
msgstr "Sí"
|
||||
|
||||
msgid "No"
|
||||
msgstr "No"
|
||||
|
||||
msgid "Token has been copied to the clipboard!"
|
||||
msgstr "¡El token ha sido copiado al portapapeles!"
|
||||
|
||||
msgid "The web clipper service is enabled and set to auto-start."
|
||||
msgstr ""
|
||||
"El servicio de recorte web está habilitado y configurado para que inicie "
|
||||
@@ -762,13 +815,30 @@ msgstr "Paso 2: Instalar la extensión"
|
||||
msgid "Download and install the relevant extension for your browser:"
|
||||
msgstr "Descargar e instalar para su navegador:"
|
||||
|
||||
msgid "Check synchronisation configuration"
|
||||
msgstr "Comprobar sincronización"
|
||||
msgid "Advanced options"
|
||||
msgstr "Opciones avanzadas"
|
||||
|
||||
msgid "Authorisation token:"
|
||||
msgstr "Token de autorización:"
|
||||
|
||||
msgid "Copy token"
|
||||
msgstr "Copiar token"
|
||||
|
||||
msgid ""
|
||||
"This authorisation token is only needed to allow third-party applications to "
|
||||
"access Joplin."
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Notes and settings are stored in: %s"
|
||||
msgstr "Las notas y los ajustes se guardan en: %s"
|
||||
|
||||
msgid "Check synchronisation configuration"
|
||||
msgstr "Comprobar sincronización"
|
||||
|
||||
msgid "Browse..."
|
||||
msgstr "Explorar..."
|
||||
|
||||
msgid "Apply"
|
||||
msgstr "Aplicar"
|
||||
|
||||
@@ -862,6 +932,9 @@ msgstr "Estado"
|
||||
msgid "Encryption is:"
|
||||
msgstr "El cifrado está:"
|
||||
|
||||
msgid "Usage"
|
||||
msgstr "Uso"
|
||||
|
||||
msgid "Back"
|
||||
msgstr "Atrás"
|
||||
|
||||
@@ -880,7 +953,7 @@ msgid "Notebook title:"
|
||||
msgstr "Título de libreta:"
|
||||
|
||||
msgid "Add or remove tags:"
|
||||
msgstr "Agregar o borrar etiquetas: "
|
||||
msgstr "Agregar o borrar etiquetas:"
|
||||
|
||||
msgid "Separate each tag by a comma."
|
||||
msgstr "Separar cada etiqueta por una coma."
|
||||
@@ -912,28 +985,6 @@ msgstr "No se han podido descifrar algunos elementos."
|
||||
msgid "Set the password"
|
||||
msgstr "Establecer la contraseña"
|
||||
|
||||
msgid "Add or remove tags"
|
||||
msgstr "Añadir o borrar etiquetas"
|
||||
|
||||
msgid "Duplicate"
|
||||
msgstr "Duplicado"
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s - Copy"
|
||||
msgstr "%s - Copiar"
|
||||
|
||||
msgid "Switch between note and to-do type"
|
||||
msgstr "Cambiar entre nota y lista de tareas"
|
||||
|
||||
msgid "Copy Markdown link"
|
||||
msgstr "Copiar el enlace de Markdown"
|
||||
|
||||
msgid "Delete"
|
||||
msgstr "Eliminar"
|
||||
|
||||
msgid "Delete notes?"
|
||||
msgstr "¿Desea eliminar notas?"
|
||||
|
||||
msgid "No notes in here. Create one by clicking on \"New note\"."
|
||||
msgstr "No hay ninguna nota. Cree una pulsando «Nota nueva»."
|
||||
|
||||
@@ -942,9 +993,36 @@ msgid ""
|
||||
msgstr "No hay ninguna libreta. Cree una pulsando en «Libreta nueva»."
|
||||
|
||||
msgid "Location"
|
||||
msgstr ""
|
||||
msgstr "Localización"
|
||||
|
||||
msgid "URL"
|
||||
msgstr "URL"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Note History"
|
||||
msgstr "Lista de notas"
|
||||
|
||||
msgid "Previous versions of this note"
|
||||
msgstr ""
|
||||
|
||||
msgid "Note properties"
|
||||
msgstr "Propiedades de nota"
|
||||
|
||||
#, 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 ha sido 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..."
|
||||
@@ -963,6 +1041,9 @@ msgstr "Copiar la ruta en el portapapeles"
|
||||
msgid "Copy Link Address"
|
||||
msgstr "Copiar enlace"
|
||||
|
||||
msgid "This attachment is not downloaded or not decrypted yet."
|
||||
msgstr "El adjunto no ha sido descargado o desencriptado todavía."
|
||||
|
||||
#, javascript-format
|
||||
msgid "Unsupported link or message: %s"
|
||||
msgstr "Enlace o mensaje no soportado: %s"
|
||||
@@ -975,6 +1056,9 @@ msgstr ""
|
||||
"Esta nota no tiene contenido. Pulse en \"%s\" para cambiar al editor y "
|
||||
"editar la nota."
|
||||
|
||||
msgid "Only one note can be printed or exported to PDF at a time."
|
||||
msgstr "Solo una nota puede ser impresa o exportada a PDF a la vez."
|
||||
|
||||
msgid "strong text"
|
||||
msgstr "texto destacado"
|
||||
|
||||
@@ -1000,9 +1084,6 @@ msgstr "Establecer alarma"
|
||||
msgid "In: %s"
|
||||
msgstr "En: %s"
|
||||
|
||||
msgid "Note properties"
|
||||
msgstr ""
|
||||
|
||||
msgid "Hyperlink"
|
||||
msgstr "Hipervínculo"
|
||||
|
||||
@@ -1064,24 +1145,81 @@ msgstr "Opciones de cifrado"
|
||||
msgid "Clipper Options"
|
||||
msgstr "Opciones de recorte"
|
||||
|
||||
msgid "Remove this tag from all the notes?"
|
||||
msgstr "¿Desea eliminar esta etiqueta de todas las notas?"
|
||||
#, javascript-format
|
||||
msgid ""
|
||||
"Delete notebook \"%s\"?\n"
|
||||
"\n"
|
||||
"All notes and sub-notebooks within this notebook will also be deleted."
|
||||
msgstr ""
|
||||
"Borrar Libreta \"%s\"?\n"
|
||||
"\n"
|
||||
"Todas las notas y sublibretas de esta libreta serán borradas."
|
||||
|
||||
#, javascript-format
|
||||
msgid "Remove tag \"%s\" from all notes?"
|
||||
msgstr "Desea borrar las etiquetas pertenecientes a \"%s\" de todas las notas?"
|
||||
|
||||
msgid "Remove this search from the sidebar?"
|
||||
msgstr "¿Desea eliminar esta búsqueda de la barra lateral?"
|
||||
|
||||
msgid "Delete"
|
||||
msgstr "Eliminar"
|
||||
|
||||
msgid "Rename"
|
||||
msgstr "Renombrar"
|
||||
|
||||
msgid "Synchronise"
|
||||
msgstr "Sincronizar"
|
||||
|
||||
msgid "Notebooks"
|
||||
msgstr "Libretas"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Decrypting items: %d/%d"
|
||||
msgstr "Descifrando elementos: %d/%d"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Fetching resources: %d"
|
||||
msgstr "Obteniendo refuersos: %d"
|
||||
|
||||
msgid "Please select where the sync status should be exported to"
|
||||
msgstr "Seleccione a dónde se debería exportar el estado de sincronización"
|
||||
|
||||
msgid "Add or remove tags"
|
||||
msgstr "Añadir o borrar etiquetas"
|
||||
|
||||
msgid "Duplicate"
|
||||
msgstr "Duplicado"
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s - Copy"
|
||||
msgstr "%s - Copiar"
|
||||
|
||||
msgid "Switch between note and to-do type"
|
||||
msgstr "Cambiar entre nota y lista de tareas"
|
||||
|
||||
msgid "Switch to note type"
|
||||
msgstr "Cambiar a nota"
|
||||
|
||||
msgid "Switch to to-do type"
|
||||
msgstr "Cambiar a lista de tareas"
|
||||
|
||||
msgid "Copy Markdown link"
|
||||
msgstr "Copiar el enlace de Markdown"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Delete note \"%s\"?"
|
||||
msgstr "¿Borrar nota \"%s\"?"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Delete these %d notes?"
|
||||
msgstr "Borrar %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 ""
|
||||
|
||||
msgid "Goto Anything..."
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Usage: %s"
|
||||
msgstr "Uso: %s"
|
||||
@@ -1123,6 +1261,9 @@ msgstr ""
|
||||
"No se ha podido actualizar token: faltan datos de autenticación. Reiniciar "
|
||||
"la sincronización podría solucionar el problema."
|
||||
|
||||
msgid "Untitled"
|
||||
msgstr "Sin título"
|
||||
|
||||
msgid ""
|
||||
"Could not synchronize with OneDrive.\n"
|
||||
"\n"
|
||||
@@ -1170,10 +1311,6 @@ msgstr "Elementos remotos borrados: %d."
|
||||
msgid "Fetched items: %d/%d."
|
||||
msgstr "Elementos obtenidos: %d/%d."
|
||||
|
||||
#, javascript-format
|
||||
msgid "State: %s."
|
||||
msgstr "Estado: «%s»."
|
||||
|
||||
msgid "Cancelling..."
|
||||
msgstr "Cancelando..."
|
||||
|
||||
@@ -1195,12 +1332,22 @@ msgstr "En progreso"
|
||||
msgid "Synchronisation is already in progress. State: %s"
|
||||
msgstr "La sincronización ya está en progreso. Estado: %s"
|
||||
|
||||
msgid ""
|
||||
"Unknown item type downloaded - please upgrade Joplin to the latest version"
|
||||
msgstr ""
|
||||
|
||||
msgid "Encrypted"
|
||||
msgstr "Cifrado"
|
||||
|
||||
msgid "Encrypted items cannot be modified"
|
||||
msgstr "Los elementos cifrados no pueden ser modificados"
|
||||
|
||||
msgid "title"
|
||||
msgstr "título"
|
||||
|
||||
msgid "updated date"
|
||||
msgstr "fecha de actualización"
|
||||
|
||||
msgid "Conflicts"
|
||||
msgstr "Conflictos"
|
||||
|
||||
@@ -1212,18 +1359,9 @@ msgid "Notebooks cannot be named \"%s\", which is a reserved title."
|
||||
msgstr ""
|
||||
"No se puede usar el nombre «%s» para una libreta; es un título reservado."
|
||||
|
||||
msgid "title"
|
||||
msgstr "título"
|
||||
|
||||
msgid "updated date"
|
||||
msgstr "fecha de actualización"
|
||||
|
||||
msgid "created date"
|
||||
msgstr "fecha de creación"
|
||||
|
||||
msgid "Untitled"
|
||||
msgstr "Sin título"
|
||||
|
||||
msgid "This note does not have geolocation information."
|
||||
msgstr "Esta nota no tiene informacion de geolocalización."
|
||||
|
||||
@@ -1235,6 +1373,16 @@ msgstr "No se ha podido copiar la nota a la libreta «%s»"
|
||||
msgid "Cannot move note to \"%s\" notebook"
|
||||
msgstr "No se ha podido mover la nota a la libreta «%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 ""
|
||||
"Atención: Si cambias esta ubicación, asegúrate de copiar todo tu contenido "
|
||||
"antes de sincronizarlo, de lo contrario todos los archivos serán eliminados. "
|
||||
"Consulte las preguntas frecuentes para obtener más detalles: %s"
|
||||
|
||||
msgid "Language"
|
||||
msgstr "Idioma"
|
||||
|
||||
@@ -1265,6 +1413,10 @@ msgstr "Ordenar notas por"
|
||||
msgid "Reverse sort order"
|
||||
msgstr "Invierte el orden"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Sort notebooks by"
|
||||
msgstr "Ordenar notas por"
|
||||
|
||||
msgid "Save geo-location with notes"
|
||||
msgstr "Guardar geolocalización en las notas"
|
||||
|
||||
@@ -1280,18 +1432,67 @@ msgstr "Foco en el cuerpo"
|
||||
msgid "When creating a new note:"
|
||||
msgstr "Cuando se crear una nota nueva:"
|
||||
|
||||
msgid "Enable soft breaks"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Enable math expressions"
|
||||
msgstr "Habilitar 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 icono en la bandeja"
|
||||
|
||||
msgid "Note: Does not work in all desktop environments."
|
||||
msgstr "Nota: No funciona en todos los entornos de escritorio."
|
||||
|
||||
msgid "Start application minimised in the tray icon"
|
||||
msgid ""
|
||||
"This will allow Joplin to run in the background. It is recommended to enable "
|
||||
"this setting so that your notes are constantly being synchronised, thus "
|
||||
"reducing the number of conflicts."
|
||||
msgstr ""
|
||||
"Esto permitirá que Joplin se ejecute en segundo plano. Se recomienda "
|
||||
"habilitar esta configuración para que sus notas estén sincronizadas "
|
||||
"constantemente, reduciendo así el número de conflictos."
|
||||
|
||||
msgid "Start application minimised in the tray icon"
|
||||
msgstr "Iniciar aplicación minimizada en el icono de la bandeja"
|
||||
|
||||
msgid "Global zoom percentage"
|
||||
msgstr "Establecer el porcentaje de aumento de la aplicación"
|
||||
|
||||
msgid "Editor font size"
|
||||
msgstr "Editar tamaño de fuente"
|
||||
|
||||
msgid "Editor font family"
|
||||
msgstr "Fuente del editor"
|
||||
|
||||
@@ -1306,6 +1507,13 @@ msgstr ""
|
||||
msgid "Automatically update the application"
|
||||
msgstr "Actualizar la aplicación automáticamente"
|
||||
|
||||
msgid "Get pre-releases when checking for updates"
|
||||
msgstr "Obtenga pre-lanzamientos cuando busque actualizaciones"
|
||||
|
||||
#, javascript-format
|
||||
msgid "See the pre-release page for more details: %s"
|
||||
msgstr "Ver la página de pre-lanzamiento para más detalles: %s"
|
||||
|
||||
msgid "Synchronisation interval"
|
||||
msgstr "Intervalo de sincronización"
|
||||
|
||||
@@ -1349,23 +1557,9 @@ msgstr ""
|
||||
msgid "Directory to synchronise with (absolute path)"
|
||||
msgstr "Directorio con el que sincronizarse (ruta completa)"
|
||||
|
||||
msgid ""
|
||||
"The path to synchronise with when file system synchronisation is enabled. "
|
||||
"See `sync.target`."
|
||||
msgstr ""
|
||||
"La ruta a la que sincronizar cuando se activa la sincronización con sistema "
|
||||
"de archivos. Vea «sync.target»."
|
||||
|
||||
msgid "Nextcloud WebDAV URL"
|
||||
msgstr "Servidor WebDAV de Nextcloud"
|
||||
|
||||
#, 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"
|
||||
|
||||
@@ -1399,13 +1593,45 @@ msgstr ""
|
||||
msgid "Ignore TLS certificate errors"
|
||||
msgstr "Ignorar errores en certificados TLS"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Enable note history"
|
||||
msgstr "Habilitar 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 "Opción inválida: «%s». Los valores posibles son: %s."
|
||||
|
||||
msgid "General"
|
||||
msgstr "General"
|
||||
|
||||
msgid "Synchronisation"
|
||||
msgstr "Sincronización"
|
||||
|
||||
msgid "Appearance"
|
||||
msgstr "Apariencia"
|
||||
|
||||
msgid "Note"
|
||||
msgstr "Nota"
|
||||
|
||||
msgid "Plugins"
|
||||
msgstr ""
|
||||
|
||||
msgid "Application"
|
||||
msgstr "Aplicación"
|
||||
|
||||
#, javascript-format
|
||||
msgid "The tag \"%s\" already exists. Please choose a different name."
|
||||
msgstr ""
|
||||
msgstr "La etiqueta \"%s\" ya existe. Por favor, busque un nuevo nombre."
|
||||
|
||||
msgid "Joplin Export File"
|
||||
msgstr "Archivo de exportación de Joplin"
|
||||
@@ -1419,6 +1645,12 @@ msgstr "Directorio para exportar de Joplin"
|
||||
msgid "Evernote Export File"
|
||||
msgstr "Archivo exportado de Evernote"
|
||||
|
||||
msgid "Json Export Directory"
|
||||
msgstr "Directorio para exportar JSON"
|
||||
|
||||
msgid "File"
|
||||
msgstr "Archivo"
|
||||
|
||||
msgid "Directory"
|
||||
msgstr "Directorio"
|
||||
|
||||
@@ -1444,12 +1676,19 @@ msgstr "No hay datos para exportar."
|
||||
msgid "Please specify the notebook where the notes should be imported to."
|
||||
msgstr "Por favor especifique la libreta donde las notas deben ser importadas."
|
||||
|
||||
msgid "Restored Notes"
|
||||
msgstr ""
|
||||
|
||||
msgid "Items that cannot be synchronised"
|
||||
msgstr "Elementos que no se pueden sincronizar"
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s (%s): %s"
|
||||
msgstr "%s (%s): %s"
|
||||
#, fuzzy, javascript-format
|
||||
msgid "%s (%s) could not be uploaded: %s"
|
||||
msgstr "No se ha podido abrir este archivo: %s"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Item \"%s\" could not be downloaded: %s"
|
||||
msgstr "No se ha podido abrir este archivo: %s"
|
||||
|
||||
msgid ""
|
||||
"These items will remain on the device but will not be uploaded to the sync "
|
||||
@@ -1493,6 +1732,12 @@ msgstr "Alarmas próximas"
|
||||
msgid "On %s: %s"
|
||||
msgstr "En %s: %s"
|
||||
|
||||
msgid "Permission to use camera"
|
||||
msgstr "Permiso para usar tu cámara"
|
||||
|
||||
msgid "Your permission to use your camera is required."
|
||||
msgstr "El permiso para usar tu cámara es necesario."
|
||||
|
||||
msgid "There are currently no notes. Create one by clicking on the (+) button."
|
||||
msgstr "No hay notas. Cree una pulsando en el botón (+)."
|
||||
|
||||
@@ -1521,6 +1766,9 @@ msgstr "¿Desea mover %d notas a libreta «%s»?"
|
||||
msgid "Press to set the decryption password."
|
||||
msgstr "Presione para establecer la contraseña de descifrado."
|
||||
|
||||
msgid "Clear alarm"
|
||||
msgstr "Quitar alarma"
|
||||
|
||||
msgid "Save alarm"
|
||||
msgstr "Establecer alarma"
|
||||
|
||||
@@ -1533,9 +1781,39 @@ msgstr "Confirmar"
|
||||
msgid "Cancel synchronisation"
|
||||
msgstr "Cancelar sincronización"
|
||||
|
||||
msgid "Checking... Please wait."
|
||||
msgstr "Comprobando... Por favor espere."
|
||||
|
||||
msgid "Success! Synchronisation configuration appears to be correct."
|
||||
msgstr "¡Éxito! La configuración de sincronización es correcta."
|
||||
|
||||
msgid ""
|
||||
"Error. Please check that URL, username, password, etc. are correct and that "
|
||||
"the sync target is accessible. The reported error was:"
|
||||
msgstr ""
|
||||
"Error. Por favor comprueba URL, nombre de usuario, contraseña, etc. son "
|
||||
"correctos y el servicio a sincronizar este accesible. El código de error fue:"
|
||||
|
||||
msgid "The application has been authorised!"
|
||||
msgstr "¡La aplicacion ha sido autorizada!"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Decrypting items: %d/%d"
|
||||
msgstr "Descifrando elementos: %d/%d."
|
||||
msgid ""
|
||||
"Could not authorise application:\n"
|
||||
"\n"
|
||||
"%s\n"
|
||||
"\n"
|
||||
"Please try again."
|
||||
msgstr ""
|
||||
"No se pudo autorizar aplicación:\n"
|
||||
"\n"
|
||||
"%s\n"
|
||||
"\n"
|
||||
"Por favor, vuelva a intentarlo."
|
||||
|
||||
#, javascript-format
|
||||
msgid "Decrypted items: %s / %s"
|
||||
msgstr "Descifrando elementos: %s / %s"
|
||||
|
||||
msgid "New tags:"
|
||||
msgstr "Nuevas etiquetas:"
|
||||
@@ -1569,9 +1847,20 @@ msgstr ""
|
||||
msgid "Joplin website"
|
||||
msgstr "Sitio web de Joplin"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Database v%s"
|
||||
msgstr "Base de datos v%s"
|
||||
|
||||
#, javascript-format
|
||||
msgid "FTS enabled: %d"
|
||||
msgstr "FTS activado: %d"
|
||||
|
||||
msgid "Login with Dropbox"
|
||||
msgstr "Acceder con Dropbox"
|
||||
|
||||
msgid "Enter code here"
|
||||
msgstr "Introduce código aquí"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Master Key %s"
|
||||
msgstr "Clave maestra %s"
|
||||
@@ -1624,6 +1913,9 @@ msgstr ""
|
||||
msgid "Unsupported image type: %s"
|
||||
msgstr "Tipo de imagen no soportado: %s"
|
||||
|
||||
msgid "Take photo"
|
||||
msgstr "Tomar foto"
|
||||
|
||||
msgid "Attach photo"
|
||||
msgstr "Adjuntar foto"
|
||||
|
||||
@@ -1648,6 +1940,12 @@ msgstr "Mostrar metadatos"
|
||||
msgid "View on map"
|
||||
msgstr "Ver en un mapa"
|
||||
|
||||
msgid "Go to source URL"
|
||||
msgstr "Ir a origen URL"
|
||||
|
||||
msgid "Edit"
|
||||
msgstr "Editar"
|
||||
|
||||
msgid "Delete notebook"
|
||||
msgstr "Borrar libreta"
|
||||
|
||||
@@ -1671,6 +1969,28 @@ msgstr ""
|
||||
msgid "Welcome"
|
||||
msgstr "Bienvenido"
|
||||
|
||||
#~ msgid "%s (%s): %s"
|
||||
#~ msgstr "%s (%s): %s"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "The path to synchronise with when file system synchronisation is enabled. "
|
||||
#~ "See `sync.target`."
|
||||
#~ msgstr ""
|
||||
#~ "La ruta a la que sincronizar cuando se activa la sincronización con "
|
||||
#~ "sistema de archivos. Vea «sync.target»."
|
||||
|
||||
#~ msgid "Joplin v%s"
|
||||
#~ msgstr "Joplin v%s"
|
||||
|
||||
#~ msgid "Remove?"
|
||||
#~ msgstr "¿Borrar?"
|
||||
|
||||
#~ msgid "Delete notes?"
|
||||
#~ msgstr "¿Desea eliminar notas?"
|
||||
|
||||
#~ msgid "State: %s."
|
||||
#~ msgstr "Estado: «%s»."
|
||||
|
||||
#~ msgid "A notebook with this title already exists: \"%s\""
|
||||
#~ msgstr "Ya existe una libreta con este nombre: «%s»"
|
||||
|
||||
@@ -1718,9 +2038,6 @@ msgstr "Bienvenido"
|
||||
#~ msgid "Give focus to previous pane"
|
||||
#~ msgstr "Enfocar el panel anterior"
|
||||
|
||||
#~ msgid "Enter command line mode"
|
||||
#~ msgstr "Entrar en modo línea de comandos"
|
||||
|
||||
#~ msgid "Exit command line mode"
|
||||
#~ msgstr "Salir del modo línea de comandos"
|
||||
|
||||
@@ -1730,9 +2047,6 @@ msgstr "Bienvenido"
|
||||
#~ msgid "Cancel the current command."
|
||||
#~ msgstr "Cancelar el comando actual."
|
||||
|
||||
#~ msgid "Exit the application."
|
||||
#~ msgstr "Salir de la aplicación."
|
||||
|
||||
#~ msgid "Delete the currently selected note or notebook."
|
||||
#~ msgstr "Eliminar la nota o libreta seleccionada."
|
||||
|
||||
@@ -1783,9 +2097,6 @@ msgstr "Bienvenido"
|
||||
#~ msgid "Delete notebook?"
|
||||
#~ msgstr "Eliminar libreta?"
|
||||
|
||||
#~ msgid "Delete notebook \"%s\"?"
|
||||
#~ msgstr "Elimina una libreta \"%s\"?"
|
||||
|
||||
#, fuzzy
|
||||
#~ msgid "File system synchronisation target directory"
|
||||
#~ msgstr "Sincronización de sistema de archivos en directorio objetivo"
|
||||
|
||||
@@ -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`."
|
||||
@@ -455,6 +456,9 @@ msgstr "Ezin has daiteke sinkronizazio prozesua."
|
||||
msgid "Starting synchronisation..."
|
||||
msgstr "Sinkronizazioa hasten..."
|
||||
|
||||
msgid "Downloading resources..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Cancelling... Please wait."
|
||||
msgstr "Bertan behera uzten... itxaron, mesedez."
|
||||
|
||||
@@ -579,6 +583,20 @@ msgstr ""
|
||||
msgid "Exporting to \"%s\" as \"%s\" format. Please wait..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Sidebar"
|
||||
msgstr ""
|
||||
|
||||
msgid "Note list"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Note title"
|
||||
msgstr "Koadernoaren izenburua: "
|
||||
|
||||
#, fuzzy
|
||||
msgid "Note body"
|
||||
msgstr "Koadernoak"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Importing from \"%s\" as \"%s\" format. Please wait..."
|
||||
msgstr ""
|
||||
@@ -587,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"
|
||||
@@ -599,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"
|
||||
|
||||
@@ -606,8 +653,8 @@ msgstr "Inportatu"
|
||||
msgid "Export"
|
||||
msgstr "Inportatu"
|
||||
|
||||
msgid "Print"
|
||||
msgstr ""
|
||||
msgid "Synchronise"
|
||||
msgstr "Sinkronizatu"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Hide %s"
|
||||
@@ -616,7 +663,11 @@ msgstr ""
|
||||
msgid "Quit"
|
||||
msgstr "Irten"
|
||||
|
||||
msgid "Edit"
|
||||
msgid "Close Window"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "&Edit"
|
||||
msgstr "Editatu"
|
||||
|
||||
msgid "Copy"
|
||||
@@ -628,12 +679,19 @@ msgstr "Moztu"
|
||||
msgid "Paste"
|
||||
msgstr "Itsatsi"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Select all"
|
||||
msgstr "Data aukeratu"
|
||||
|
||||
msgid "Bold"
|
||||
msgstr ""
|
||||
|
||||
msgid "Italic"
|
||||
msgstr ""
|
||||
|
||||
msgid "Link"
|
||||
msgstr ""
|
||||
|
||||
msgid "Insert Date Time"
|
||||
msgstr ""
|
||||
|
||||
@@ -643,7 +701,11 @@ msgstr ""
|
||||
msgid "Search in all the notes"
|
||||
msgstr "Bilatu ohar guztietan"
|
||||
|
||||
msgid "View"
|
||||
#, fuzzy
|
||||
msgid "Search in current note"
|
||||
msgstr "Bilatu ohar guztietan"
|
||||
|
||||
msgid "&View"
|
||||
msgstr ""
|
||||
|
||||
msgid "Toggle sidebar"
|
||||
@@ -652,22 +714,15 @@ msgstr ""
|
||||
msgid "Toggle editor layout"
|
||||
msgstr ""
|
||||
|
||||
msgid "Tools"
|
||||
msgstr "Tresnak"
|
||||
|
||||
msgid "Synchronisation status"
|
||||
msgstr "Sinkronizazioaren egoera"
|
||||
|
||||
msgid "Web clipper options"
|
||||
msgid "Focus"
|
||||
msgstr ""
|
||||
|
||||
msgid "Encryption options"
|
||||
msgstr "Zifratzeko aukerak"
|
||||
#, fuzzy
|
||||
msgid "&Tools"
|
||||
msgstr "Tresnak"
|
||||
|
||||
msgid "General Options"
|
||||
msgstr "Ezarpenak"
|
||||
|
||||
msgid "Help"
|
||||
#, fuzzy
|
||||
msgid "&Help"
|
||||
msgstr "Laguntza"
|
||||
|
||||
msgid "Website and documentation"
|
||||
@@ -677,16 +732,6 @@ msgstr "Web orria eta dokumentazioa (en)"
|
||||
msgid "Make a donation"
|
||||
msgstr "Web orria eta dokumentazioa (en)"
|
||||
|
||||
msgid "Check for updates..."
|
||||
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"
|
||||
@@ -703,9 +748,21 @@ msgstr "Utzi"
|
||||
msgid "Current version is up-to-date."
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s (pre-release)"
|
||||
msgstr ""
|
||||
|
||||
msgid "An update is available, do you want to download it now?"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Your version: %s"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "New version: %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Yes"
|
||||
msgstr ""
|
||||
|
||||
@@ -713,6 +770,9 @@ msgstr ""
|
||||
msgid "No"
|
||||
msgstr "E"
|
||||
|
||||
msgid "Token has been copied to the clipboard!"
|
||||
msgstr ""
|
||||
|
||||
msgid "The web clipper service is enabled and set to auto-start."
|
||||
msgstr ""
|
||||
|
||||
@@ -757,13 +817,31 @@ msgid "Download and install the relevant extension for your browser:"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Check synchronisation configuration"
|
||||
msgstr "Sinkronizazioa utzi"
|
||||
msgid "Advanced options"
|
||||
msgstr "Erakutsi aukera aurreratuak"
|
||||
|
||||
msgid "Authorisation token:"
|
||||
msgstr ""
|
||||
|
||||
msgid "Copy token"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"This authorisation token is only needed to allow third-party applications to "
|
||||
"access Joplin."
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Notes and settings are stored in: %s"
|
||||
msgstr "Oharrak eta ezarpenak hemen daude gordeta: %s"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Check synchronisation configuration"
|
||||
msgstr "Sinkronizazioa utzi"
|
||||
|
||||
msgid "Browse..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Apply"
|
||||
msgstr ""
|
||||
|
||||
@@ -854,6 +932,10 @@ msgstr "Egoera"
|
||||
msgid "Encryption is:"
|
||||
msgstr "Zifratua da:"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Usage"
|
||||
msgstr "Erabili: %s"
|
||||
|
||||
msgid "Back"
|
||||
msgstr "Atzera"
|
||||
|
||||
@@ -908,28 +990,6 @@ msgstr "Zenbait item ezin dira deszifratu."
|
||||
msgid "Set the password"
|
||||
msgstr "Ezarri pasahitza"
|
||||
|
||||
msgid "Add or remove tags"
|
||||
msgstr "Gehitu edo ezabatu etiketak"
|
||||
|
||||
msgid "Duplicate"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "%s - Copy"
|
||||
msgstr "Kopiatu"
|
||||
|
||||
msgid "Switch between note and to-do type"
|
||||
msgstr "Aldatu oharra eta zeregin eren artean."
|
||||
|
||||
msgid "Copy Markdown link"
|
||||
msgstr ""
|
||||
|
||||
msgid "Delete"
|
||||
msgstr "Ezabatu"
|
||||
|
||||
msgid "Delete notes?"
|
||||
msgstr "Oharrak ezabatu?"
|
||||
|
||||
msgid "No notes in here. Create one by clicking on \"New note\"."
|
||||
msgstr "Hemen ez dago oharrik. Sortu bat \"Ohar berria\" sakatuta."
|
||||
|
||||
@@ -943,6 +1003,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 ""
|
||||
|
||||
@@ -960,6 +1047,9 @@ msgstr ""
|
||||
msgid "Copy Link Address"
|
||||
msgstr ""
|
||||
|
||||
msgid "This attachment is not downloaded or not decrypted yet."
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Unsupported link or message: %s"
|
||||
msgstr "Esteka edo mezu ez dago onartua: %s"
|
||||
@@ -970,6 +1060,9 @@ msgid ""
|
||||
"note."
|
||||
msgstr ""
|
||||
|
||||
msgid "Only one note can be printed or exported to PDF at a time."
|
||||
msgstr ""
|
||||
|
||||
msgid "strong text"
|
||||
msgstr ""
|
||||
|
||||
@@ -995,9 +1088,6 @@ msgstr "Ezarri alarma"
|
||||
msgid "In: %s"
|
||||
msgstr "%s: %s"
|
||||
|
||||
msgid "Note properties"
|
||||
msgstr ""
|
||||
|
||||
msgid "Hyperlink"
|
||||
msgstr ""
|
||||
|
||||
@@ -1064,25 +1154,82 @@ 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?"
|
||||
msgstr "Kendu bilaketa hori ohar guztietatik?"
|
||||
|
||||
msgid "Delete"
|
||||
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."
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Fetching resources: %d"
|
||||
msgstr "Baliabideak: %d."
|
||||
|
||||
#, fuzzy
|
||||
msgid "Please select where the sync status should be exported to"
|
||||
msgstr "Aukeratu nora esportatu sinkronizazioaren egoera, mesedez"
|
||||
|
||||
msgid "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"
|
||||
@@ -1126,6 +1273,9 @@ msgstr ""
|
||||
"Tokena ezin eguneratu daiteke: egiaztatze-datuak desagertuta daude. Agian, "
|
||||
"berriro sinkronizatzeak arazoa konpon lezake."
|
||||
|
||||
msgid "Untitled"
|
||||
msgstr "Titulu gabekoa"
|
||||
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
"Could not synchronize with OneDrive.\n"
|
||||
@@ -1172,10 +1322,6 @@ msgstr "Urruneko itemak ezabatuta: %d."
|
||||
msgid "Fetched items: %d/%d."
|
||||
msgstr "Itemak eskuratuta: %d%d."
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "State: %s."
|
||||
msgstr "Egoera: \"%s\"."
|
||||
|
||||
msgid "Cancelling..."
|
||||
msgstr "Bertan behera uzten..."
|
||||
|
||||
@@ -1197,12 +1343,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"
|
||||
|
||||
@@ -1215,21 +1373,10 @@ 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."
|
||||
|
||||
msgid "Untitled"
|
||||
msgstr "Titulu gabekoa"
|
||||
|
||||
msgid "This note does not have geolocation information."
|
||||
msgstr "Ohar honek ez du geokokapen informaziorik."
|
||||
|
||||
@@ -1241,6 +1388,13 @@ 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 "Language"
|
||||
msgstr "Hizkuntza"
|
||||
|
||||
@@ -1274,6 +1428,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"
|
||||
|
||||
@@ -1291,12 +1449,55 @@ 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 ""
|
||||
|
||||
msgid "Note: Does not work in all desktop environments."
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"This will allow Joplin to run in the background. It is recommended to enable "
|
||||
"this setting so that your notes are constantly being synchronised, thus "
|
||||
"reducing the number of conflicts."
|
||||
msgstr ""
|
||||
|
||||
msgid "Start application minimised in the tray icon"
|
||||
msgstr ""
|
||||
|
||||
@@ -1304,6 +1505,10 @@ msgstr ""
|
||||
msgid "Global zoom percentage"
|
||||
msgstr "Ezarri aplikazioaren zoomaren ehunekoa"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Editor font size"
|
||||
msgstr "Oharra editatu."
|
||||
|
||||
msgid "Editor font family"
|
||||
msgstr ""
|
||||
|
||||
@@ -1315,6 +1520,13 @@ msgstr ""
|
||||
msgid "Automatically update the application"
|
||||
msgstr "Automatikoki eguneratu aplikazioa"
|
||||
|
||||
msgid "Get pre-releases when checking for updates"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "See the pre-release page for more details: %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Synchronisation interval"
|
||||
msgstr "Sinkronizazio tartea"
|
||||
|
||||
@@ -1359,22 +1571,9 @@ msgstr ""
|
||||
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"
|
||||
|
||||
@@ -1406,10 +1605,46 @@ 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."
|
||||
|
||||
#, fuzzy
|
||||
msgid "General"
|
||||
msgstr "Ezarpenak"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Synchronisation"
|
||||
msgstr "Sinkronizazioaren egoera"
|
||||
|
||||
msgid "Appearance"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Note"
|
||||
msgstr "Koadernoak"
|
||||
|
||||
msgid "Plugins"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Application"
|
||||
msgstr "Irten aplikaziotik"
|
||||
|
||||
#, javascript-format
|
||||
msgid "The tag \"%s\" already exists. Please choose a different name."
|
||||
msgstr ""
|
||||
@@ -1428,6 +1663,13 @@ msgstr ""
|
||||
msgid "Evernote Export File"
|
||||
msgstr "Evernotetik esportatutako fitxategiak"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Json Export Directory"
|
||||
msgstr "Evernotetik esportatutako fitxategiak"
|
||||
|
||||
msgid "File"
|
||||
msgstr "Fitxategia"
|
||||
|
||||
msgid "Directory"
|
||||
msgstr ""
|
||||
|
||||
@@ -1452,12 +1694,19 @@ msgstr ""
|
||||
msgid "Please specify the notebook where the notes should be imported to."
|
||||
msgstr "Aukeratu nora esportatu sinkronizazioaren egoera, mesedez"
|
||||
|
||||
msgid "Restored Notes"
|
||||
msgstr ""
|
||||
|
||||
msgid "Items that cannot be synchronised"
|
||||
msgstr "Itemok ezin sinkronizatu"
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s (%s): %s"
|
||||
msgstr "%s (%s): %s"
|
||||
#, fuzzy, javascript-format
|
||||
msgid "%s (%s) could not be uploaded: %s"
|
||||
msgstr "Koadernoa ezin gorde daiteke: %s"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Item \"%s\" could not be downloaded: %s"
|
||||
msgstr "Koadernoa ezin gorde daiteke: %s"
|
||||
|
||||
msgid ""
|
||||
"These items will remain on the device but will not be uploaded to the sync "
|
||||
@@ -1500,6 +1749,12 @@ msgstr "Hurrengo alarmak"
|
||||
msgid "On %s: %s"
|
||||
msgstr "On %s: %s"
|
||||
|
||||
msgid "Permission to use camera"
|
||||
msgstr ""
|
||||
|
||||
msgid "Your permission to use your camera is required."
|
||||
msgstr ""
|
||||
|
||||
msgid "There are currently no notes. Create one by clicking on the (+) button."
|
||||
msgstr "Ez dago oharrik. Sortu bat (+) botoian klik eginaz."
|
||||
|
||||
@@ -1528,6 +1783,10 @@ msgstr "Mugitu %d oharrak \"%s\" koadernora?"
|
||||
msgid "Press to set the decryption password."
|
||||
msgstr "Sakatu deszifratze pasahitza ezartzeko."
|
||||
|
||||
#, fuzzy
|
||||
msgid "Clear alarm"
|
||||
msgstr "Ezarri alarma"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Save alarm"
|
||||
msgstr "Ezarri alarma"
|
||||
@@ -1541,8 +1800,34 @@ msgstr "Baieztatu"
|
||||
msgid "Cancel synchronisation"
|
||||
msgstr "Sinkronizazioa utzi"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Checking... Please wait."
|
||||
msgstr "Bertan behera uzten... itxaron, mesedez."
|
||||
|
||||
#, fuzzy
|
||||
msgid "Success! Synchronisation configuration appears to be correct."
|
||||
msgstr "Sinkronizazioa utzi"
|
||||
|
||||
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 "Aplikazioak baimena hartu du."
|
||||
|
||||
#, javascript-format
|
||||
msgid ""
|
||||
"Could not authorise application:\n"
|
||||
"\n"
|
||||
"%s\n"
|
||||
"\n"
|
||||
"Please try again."
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Decrypting items: %d/%d"
|
||||
msgid "Decrypted items: %s / %s"
|
||||
msgstr "Itemak eskuratuta: %d%d."
|
||||
|
||||
msgid "New tags:"
|
||||
@@ -1570,10 +1855,22 @@ msgstr ""
|
||||
msgid "Joplin website"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Database v%s"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "FTS enabled: %d"
|
||||
msgstr "Ezabatzeko: %d"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Login with Dropbox"
|
||||
msgstr "Login with OneDrive"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Enter code here"
|
||||
msgstr "Sartu komando-lerro moduan "
|
||||
|
||||
#, javascript-format
|
||||
msgid "Master Key %s"
|
||||
msgstr "Pasahitz Nagusia %s"
|
||||
@@ -1625,6 +1922,10 @@ msgstr ""
|
||||
msgid "Unsupported image type: %s"
|
||||
msgstr "Irudi formatua ez onartua: %s"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Take photo"
|
||||
msgstr "Argazkia erantsi"
|
||||
|
||||
msgid "Attach photo"
|
||||
msgstr "Argazkia erantsi"
|
||||
|
||||
@@ -1649,6 +1950,12 @@ msgstr "Erakutsi metadatuak"
|
||||
msgid "View on map"
|
||||
msgstr "Ikusi mapan"
|
||||
|
||||
msgid "Go to source URL"
|
||||
msgstr ""
|
||||
|
||||
msgid "Edit"
|
||||
msgstr "Editatu"
|
||||
|
||||
msgid "Delete notebook"
|
||||
msgstr "Ezabatu koadernoa"
|
||||
|
||||
@@ -1671,6 +1978,19 @@ msgstr "Oraindik ez duzu koadernorik. Sortu bat (+) botoian sakatuta."
|
||||
msgid "Welcome"
|
||||
msgstr "Ongi etorri!"
|
||||
|
||||
#~ msgid "%s (%s): %s"
|
||||
#~ msgstr "%s (%s): %s"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "The path to synchronise with when file system synchronisation is enabled. "
|
||||
#~ "See `sync.target`."
|
||||
#~ msgstr ""
|
||||
#~ "Sinkronizazio sistema gaituta dagoenerako bide-izena. Ikus `sync.target`."
|
||||
|
||||
#, fuzzy
|
||||
#~ msgid "State: %s."
|
||||
#~ msgstr "Egoera: \"%s\"."
|
||||
|
||||
#~ msgid "A notebook with this title already exists: \"%s\""
|
||||
#~ msgstr "Dagoeneko bada koaderno bat izen horrekin: \"%s\""
|
||||
|
||||
@@ -1709,9 +2029,6 @@ msgstr "Ongi etorri!"
|
||||
#~ msgid "Give focus to previous pane"
|
||||
#~ msgstr "Eraman fokua aurreko panelera"
|
||||
|
||||
#~ msgid "Enter command line mode"
|
||||
#~ msgstr "Sartu komando-lerro moduan "
|
||||
|
||||
#~ msgid "Exit command line mode"
|
||||
#~ msgstr "Irten komando-lerro modutik"
|
||||
|
||||
@@ -1721,9 +2038,6 @@ msgstr "Ongi etorri!"
|
||||
#~ msgid "Cancel the current command."
|
||||
#~ msgstr "Utzi uneko komandoa"
|
||||
|
||||
#~ msgid "Exit the application."
|
||||
#~ msgstr "Irten aplikaziotik"
|
||||
|
||||
#~ msgid "Delete the currently selected note or notebook."
|
||||
#~ msgstr "Ezabatu aukeratutako oharra edo koadernoa"
|
||||
|
||||
|
||||
@@ -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.0.3\n"
|
||||
"X-Generator: Poedit 2.2.1\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 :"
|
||||
@@ -458,10 +459,12 @@ msgstr "Impossible d'initialiser la synchronisation."
|
||||
msgid "Starting synchronisation..."
|
||||
msgstr "Commencement de la synchronisation..."
|
||||
|
||||
msgid "Downloading resources..."
|
||||
msgstr "Téléchargement des ressources..."
|
||||
|
||||
msgid "Cancelling... Please wait."
|
||||
msgstr "Annulation... Veuillez attendre."
|
||||
|
||||
#, 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 "
|
||||
@@ -470,7 +473,7 @@ msgstr ""
|
||||
"<tag-command> peut être \"add\", \"remove\" ou \"list\" pour assigner ou "
|
||||
"enlever l'étiquette [tag] de la [note], our pour lister les notes associées "
|
||||
"avec l'étiquette [tag]. La commande `tag list` peut être utilisée pour "
|
||||
"lister les étiquettes."
|
||||
"lister les étiquettes (utilisez l'option -l pour les options complètes)."
|
||||
|
||||
#, javascript-format
|
||||
msgid "Invalid command: \"%s\""
|
||||
@@ -581,6 +584,18 @@ msgstr ""
|
||||
msgid "Exporting to \"%s\" as \"%s\" format. Please wait..."
|
||||
msgstr "Exporter vers \"%s\" au format \"%s\". Veuillez patienter..."
|
||||
|
||||
msgid "Sidebar"
|
||||
msgstr "Barre latérale"
|
||||
|
||||
msgid "Note list"
|
||||
msgstr "Liste de notes"
|
||||
|
||||
msgid "Note title"
|
||||
msgstr "Titre de la note"
|
||||
|
||||
msgid "Note body"
|
||||
msgstr "Corps de la note"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Importing from \"%s\" as \"%s\" format. Please wait..."
|
||||
msgstr "Importer depuis \"%s\" au format \"%s\". Veuillez patienter..."
|
||||
@@ -588,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"
|
||||
@@ -600,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"
|
||||
@@ -616,8 +659,11 @@ msgstr "Cacher %s"
|
||||
msgid "Quit"
|
||||
msgstr "Quitter"
|
||||
|
||||
msgid "Edit"
|
||||
msgstr "Édition"
|
||||
msgid "Close Window"
|
||||
msgstr ""
|
||||
|
||||
msgid "&Edit"
|
||||
msgstr "&Édition"
|
||||
|
||||
msgid "Copy"
|
||||
msgstr "Copier"
|
||||
@@ -628,12 +674,18 @@ msgstr "Couper"
|
||||
msgid "Paste"
|
||||
msgstr "Coller"
|
||||
|
||||
msgid "Select all"
|
||||
msgstr "Sélectionner tout"
|
||||
|
||||
msgid "Bold"
|
||||
msgstr "Gras"
|
||||
|
||||
msgid "Italic"
|
||||
msgstr "Italique"
|
||||
|
||||
msgid "Link"
|
||||
msgstr "Lien"
|
||||
|
||||
msgid "Insert Date Time"
|
||||
msgstr "Insérer la date et l'heure"
|
||||
|
||||
@@ -643,8 +695,11 @@ msgstr "Ouvrir dans un éditeur externe"
|
||||
msgid "Search in all the notes"
|
||||
msgstr "Chercher dans toutes les notes"
|
||||
|
||||
msgid "View"
|
||||
msgstr "Affichage"
|
||||
msgid "Search in current note"
|
||||
msgstr "Chercher dans la note en cours"
|
||||
|
||||
msgid "&View"
|
||||
msgstr "&Affichage"
|
||||
|
||||
msgid "Toggle sidebar"
|
||||
msgstr "Basculer barre latérale"
|
||||
@@ -652,23 +707,14 @@ msgstr "Basculer barre latérale"
|
||||
msgid "Toggle editor layout"
|
||||
msgstr "Basculer l'agencement de l'éditeur"
|
||||
|
||||
msgid "Tools"
|
||||
msgstr "Outils"
|
||||
msgid "Focus"
|
||||
msgstr "Naviguer"
|
||||
|
||||
msgid "Synchronisation status"
|
||||
msgstr "État de la synchronisation"
|
||||
msgid "&Tools"
|
||||
msgstr "&Outils"
|
||||
|
||||
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"
|
||||
@@ -676,16 +722,6 @@ 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)"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Open %s"
|
||||
msgstr "Ouvrir %s"
|
||||
@@ -702,16 +738,31 @@ msgstr "Annuler"
|
||||
msgid "Current version is up-to-date."
|
||||
msgstr "La version actuelle est à jour."
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s (pre-release)"
|
||||
msgstr "%s (pré-release)"
|
||||
|
||||
msgid "An update is available, do you want to download it now?"
|
||||
msgstr ""
|
||||
"Une mise à jour est disponible, souhaitez vous la télécharger maintenant ?"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Your version: %s"
|
||||
msgstr "Votre version : %s"
|
||||
|
||||
#, javascript-format
|
||||
msgid "New version: %s"
|
||||
msgstr "Nouvelle version : %s"
|
||||
|
||||
msgid "Yes"
|
||||
msgstr "Oui"
|
||||
|
||||
msgid "No"
|
||||
msgstr "Non"
|
||||
|
||||
msgid "Token has been copied to the clipboard!"
|
||||
msgstr "Le code d'authentification a été copié dans le presse-papiers !"
|
||||
|
||||
msgid "The web clipper service is enabled and set to auto-start."
|
||||
msgstr "Le service du Web Clipper est activé et démarrera automatiquement."
|
||||
|
||||
@@ -762,13 +813,32 @@ msgstr ""
|
||||
"Téléchargez et installez le module complémentaire correspondant à votre "
|
||||
"navigateur :"
|
||||
|
||||
msgid "Check synchronisation configuration"
|
||||
msgstr "Vérifier config synchronisation"
|
||||
msgid "Advanced options"
|
||||
msgstr "Options avancées"
|
||||
|
||||
msgid "Authorisation token:"
|
||||
msgstr "Code d'authentification :"
|
||||
|
||||
msgid "Copy token"
|
||||
msgstr "Copier le code"
|
||||
|
||||
msgid ""
|
||||
"This authorisation token is only needed to allow third-party applications to "
|
||||
"access Joplin."
|
||||
msgstr ""
|
||||
"Ce code d'authentification est nécessaire uniquement pour permettre aux "
|
||||
"logiciels tiers d'accéder aux données de Joplin."
|
||||
|
||||
#, javascript-format
|
||||
msgid "Notes and settings are stored in: %s"
|
||||
msgstr "Les notes et paramètres se trouve dans : %s"
|
||||
|
||||
msgid "Check synchronisation configuration"
|
||||
msgstr "Vérifier config synchronisation"
|
||||
|
||||
msgid "Browse..."
|
||||
msgstr "Parcourir…"
|
||||
|
||||
msgid "Apply"
|
||||
msgstr "Appliquer"
|
||||
|
||||
@@ -864,6 +934,9 @@ msgstr "État"
|
||||
msgid "Encryption is:"
|
||||
msgstr "Le chiffrement est :"
|
||||
|
||||
msgid "Usage"
|
||||
msgstr "Utilisation"
|
||||
|
||||
msgid "Back"
|
||||
msgstr "Retour"
|
||||
|
||||
@@ -916,28 +989,6 @@ msgstr "Certains objets ne peuvent être déchiffrés."
|
||||
msgid "Set the password"
|
||||
msgstr "Définir le mot de passe"
|
||||
|
||||
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 "Copy Markdown link"
|
||||
msgstr "Copier lien Markdown"
|
||||
|
||||
msgid "Delete"
|
||||
msgstr "Supprimer"
|
||||
|
||||
msgid "Delete notes?"
|
||||
msgstr "Supprimer les notes ?"
|
||||
|
||||
msgid "No notes in here. Create one by clicking on \"New note\"."
|
||||
msgstr ""
|
||||
"Pas de notes ici. Créez-en une en pressant le bouton \"Nouvelle note\"."
|
||||
@@ -949,9 +1000,36 @@ msgstr ""
|
||||
"carnet\"."
|
||||
|
||||
msgid "Location"
|
||||
msgstr ""
|
||||
msgstr "Lieu"
|
||||
|
||||
msgid "URL"
|
||||
msgstr "URL"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Note History"
|
||||
msgstr "Liste de notes"
|
||||
|
||||
msgid "Previous versions of this note"
|
||||
msgstr ""
|
||||
|
||||
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 ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "This note has no history"
|
||||
msgstr "Cette note a été modifiée :"
|
||||
|
||||
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..."
|
||||
@@ -970,6 +1048,9 @@ msgstr "Copier le chemin"
|
||||
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."
|
||||
|
||||
#, javascript-format
|
||||
msgid "Unsupported link or message: %s"
|
||||
msgstr "Lien ou message non géré : %s"
|
||||
@@ -982,6 +1063,11 @@ msgstr ""
|
||||
"Cette note n'a pas de contenu. Cliquer sur \"%s\" pour basculer vers "
|
||||
"l'éditeur et éditer cette note."
|
||||
|
||||
msgid "Only one note can be printed or exported to PDF at a time."
|
||||
msgstr ""
|
||||
"Les notes ne peuvent être imprimées ou exportées en PDF qu'une seule à la "
|
||||
"fois."
|
||||
|
||||
msgid "strong text"
|
||||
msgstr "texte en gras"
|
||||
|
||||
@@ -1007,9 +1093,6 @@ msgstr "Régler alarme"
|
||||
msgid "In: %s"
|
||||
msgstr "Dans : %s"
|
||||
|
||||
msgid "Note properties"
|
||||
msgstr ""
|
||||
|
||||
msgid "Hyperlink"
|
||||
msgstr "Lien"
|
||||
|
||||
@@ -1071,25 +1154,84 @@ 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 ?"
|
||||
|
||||
msgid "Delete"
|
||||
msgstr "Supprimer"
|
||||
|
||||
msgid "Rename"
|
||||
msgstr "Renommer"
|
||||
|
||||
msgid "Synchronise"
|
||||
msgstr "Synchroniser"
|
||||
|
||||
msgid "Notebooks"
|
||||
msgstr "Carnets"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Decrypting items: %d/%d"
|
||||
msgstr "Déchiffrement des objets : %d/%d"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Fetching resources: %d"
|
||||
msgstr "Tél. ressources : %d"
|
||||
|
||||
msgid "Please select where the sync status should be exported to"
|
||||
msgstr ""
|
||||
"Veuillez sélectionner un répertoire ou exporter l'état de la synchronisation"
|
||||
|
||||
msgid "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"
|
||||
@@ -1131,6 +1273,9 @@ msgstr ""
|
||||
"Impossible de rafraîchir la connexion à OneDrive. Démarrez la "
|
||||
"synchronisation à nouveau pour corriger le problème."
|
||||
|
||||
msgid "Untitled"
|
||||
msgstr "Sans titre"
|
||||
|
||||
msgid ""
|
||||
"Could not synchronize with OneDrive.\n"
|
||||
"\n"
|
||||
@@ -1178,10 +1323,6 @@ msgstr "Objets distants supprimés : %d."
|
||||
msgid "Fetched items: %d/%d."
|
||||
msgstr "Téléchargés : %d/%d."
|
||||
|
||||
#, javascript-format
|
||||
msgid "State: %s."
|
||||
msgstr "État : %s."
|
||||
|
||||
msgid "Cancelling..."
|
||||
msgstr "Annulation..."
|
||||
|
||||
@@ -1203,12 +1344,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 ""
|
||||
|
||||
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"
|
||||
|
||||
@@ -1219,18 +1370,9 @@ 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"
|
||||
|
||||
msgid "Untitled"
|
||||
msgstr "Sans titre"
|
||||
|
||||
msgid "This note does not have geolocation information."
|
||||
msgstr "Cette note n'a pas d'information d'emplacement."
|
||||
|
||||
@@ -1242,6 +1384,16 @@ 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 "Language"
|
||||
msgstr "Langue"
|
||||
|
||||
@@ -1272,6 +1424,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"
|
||||
|
||||
@@ -1287,18 +1442,66 @@ 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"
|
||||
|
||||
msgid "Note: Does not work in all desktop environments."
|
||||
msgstr "Note : Ne fonctionne pas dans tous les environnements de bureau."
|
||||
|
||||
msgid "Start application minimised in the tray icon"
|
||||
msgid ""
|
||||
"This will allow Joplin to run in the background. It is recommended to enable "
|
||||
"this setting so that your notes are constantly being synchronised, thus "
|
||||
"reducing the number of conflicts."
|
||||
msgstr ""
|
||||
"Cela permettra à Joplin de s'exécuter en arrière-plan. Il est recommandé "
|
||||
"d'activer ce réglage pour que vos notes soient constamment synchronisées, "
|
||||
"donc réduire le nombre de conflits."
|
||||
|
||||
msgid "Start application minimised in the tray icon"
|
||||
msgstr "Démarrer minimisé dans la zone de notification"
|
||||
|
||||
msgid "Global zoom percentage"
|
||||
msgstr "Niveau de zoom"
|
||||
|
||||
msgid "Editor font size"
|
||||
msgstr "Taille police éditeur"
|
||||
|
||||
msgid "Editor font family"
|
||||
msgstr "Police de l'éditeur"
|
||||
|
||||
@@ -1313,6 +1516,13 @@ msgstr ""
|
||||
msgid "Automatically update the application"
|
||||
msgstr "Mettre à jour le logiciel automatiquement"
|
||||
|
||||
msgid "Get pre-releases when checking for updates"
|
||||
msgstr "Recevoir les pré-release lors de la vérification des mises à jour"
|
||||
|
||||
#, javascript-format
|
||||
msgid "See the pre-release page for more details: %s"
|
||||
msgstr "Voir la page des pré-release pour plus de détails : %s"
|
||||
|
||||
msgid "Synchronisation interval"
|
||||
msgstr "Intervalle de synchronisation"
|
||||
|
||||
@@ -1355,23 +1565,9 @@ msgstr ""
|
||||
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 ""
|
||||
|
||||
msgid "Nextcloud username"
|
||||
msgstr "Nextcloud : Nom utilisateur"
|
||||
|
||||
@@ -1405,13 +1601,45 @@ msgstr ""
|
||||
msgid "Ignore TLS certificate errors"
|
||||
msgstr "Ignorer les erreurs de certificats TLS"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Enable note history"
|
||||
msgstr "Activer les notes de bas de page"
|
||||
|
||||
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 "Option invalide: \"%s\". Les valeurs possibles sont : %s."
|
||||
|
||||
msgid "General"
|
||||
msgstr "Général"
|
||||
|
||||
msgid "Synchronisation"
|
||||
msgstr "Synchronisation"
|
||||
|
||||
msgid "Appearance"
|
||||
msgstr "Apparence"
|
||||
|
||||
msgid "Note"
|
||||
msgstr "Note"
|
||||
|
||||
msgid "Plugins"
|
||||
msgstr "Modules"
|
||||
|
||||
msgid "Application"
|
||||
msgstr "Application"
|
||||
|
||||
#, javascript-format
|
||||
msgid "The tag \"%s\" already exists. Please choose a different name."
|
||||
msgstr ""
|
||||
msgstr "L'étiquette \"%s\" existe déjà. Veuillez choisir un autre nom."
|
||||
|
||||
msgid "Joplin Export File"
|
||||
msgstr "Fichier d'export Joplin"
|
||||
@@ -1425,6 +1653,12 @@ msgstr "Dossier d'export Joplin"
|
||||
msgid "Evernote Export File"
|
||||
msgstr "Fichiers d'export Evernote"
|
||||
|
||||
msgid "Json Export Directory"
|
||||
msgstr "Dossier d'export JSON"
|
||||
|
||||
msgid "File"
|
||||
msgstr "Fichier"
|
||||
|
||||
msgid "Directory"
|
||||
msgstr "Dossier"
|
||||
|
||||
@@ -1450,12 +1684,19 @@ msgstr "Il n'y a pas de données à exporter."
|
||||
msgid "Please specify the notebook where the notes should be imported to."
|
||||
msgstr "Veuillez sélectionner le carnet où les notes doivent être importées."
|
||||
|
||||
msgid "Restored Notes"
|
||||
msgstr ""
|
||||
|
||||
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"
|
||||
#, fuzzy, javascript-format
|
||||
msgid "%s (%s) could not be uploaded: %s"
|
||||
msgstr "Ce fichier n'a pas pu être ouvert : %s"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Item \"%s\" could not be downloaded: %s"
|
||||
msgstr "Ce fichier n'a pas pu être ouvert : %s"
|
||||
|
||||
msgid ""
|
||||
"These items will remain on the device but will not be uploaded to the sync "
|
||||
@@ -1499,6 +1740,12 @@ msgstr "Alarmes à venir"
|
||||
msgid "On %s: %s"
|
||||
msgstr "Le %s : %s"
|
||||
|
||||
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."
|
||||
|
||||
msgid "There are currently no notes. Create one by clicking on the (+) button."
|
||||
msgstr ""
|
||||
"Ce carnet ne contient aucune note. Créez-en une en appuyant sur le bouton "
|
||||
@@ -1529,6 +1776,9 @@ msgstr "Déplacer %d notes vers carnet \"%s\" ?"
|
||||
msgid "Press to set the decryption password."
|
||||
msgstr "Définir mot de passe de synchronisation."
|
||||
|
||||
msgid "Clear alarm"
|
||||
msgstr "Enlever l'alarme"
|
||||
|
||||
msgid "Save alarm"
|
||||
msgstr "Enregistrer alarme"
|
||||
|
||||
@@ -1541,9 +1791,39 @@ msgstr "Confirmer"
|
||||
msgid "Cancel synchronisation"
|
||||
msgstr "Annuler synchronisation"
|
||||
|
||||
msgid "Checking... Please wait."
|
||||
msgstr "Vérification... Veuillez attendre."
|
||||
|
||||
msgid "Success! Synchronisation configuration appears to be correct."
|
||||
msgstr "La configuration de la synchronisation semble correcte."
|
||||
|
||||
msgid ""
|
||||
"Error. Please check that URL, username, password, etc. are correct and that "
|
||||
"the sync target is accessible. The reported error was:"
|
||||
msgstr ""
|
||||
"Erreur. Veuillez vérifier que l'URL, le nom, le mot de passe, etc. sont "
|
||||
"corrects et que la destination est accessible. L'erreur reportée est :"
|
||||
|
||||
msgid "The application has been authorised!"
|
||||
msgstr "Le logiciel a été autorisé !"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Decrypting items: %d/%d"
|
||||
msgstr "Déchiffrement des objets : %d/%d"
|
||||
msgid ""
|
||||
"Could not authorise application:\n"
|
||||
"\n"
|
||||
"%s\n"
|
||||
"\n"
|
||||
"Please try again."
|
||||
msgstr ""
|
||||
"Impossible d'autoriser le logiciel :\n"
|
||||
"\n"
|
||||
"%s\n"
|
||||
"\n"
|
||||
"Veuillez réessayer."
|
||||
|
||||
#, javascript-format
|
||||
msgid "Decrypted items: %s / %s"
|
||||
msgstr "Déchiffrement : %s / %s"
|
||||
|
||||
msgid "New tags:"
|
||||
msgstr "Nouvelles étiquettes :"
|
||||
@@ -1576,9 +1856,20 @@ msgstr "- Position : Pour attacher à une note les coordonnées GPS."
|
||||
msgid "Joplin website"
|
||||
msgstr "Site web de Joplin"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Database v%s"
|
||||
msgstr "Base de données v%s"
|
||||
|
||||
#, javascript-format
|
||||
msgid "FTS enabled: %d"
|
||||
msgstr "FTS activé : %d"
|
||||
|
||||
msgid "Login with Dropbox"
|
||||
msgstr "Se connecter à Dropbox"
|
||||
|
||||
msgid "Enter code here"
|
||||
msgstr "Entrez le code ici"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Master Key %s"
|
||||
msgstr "Clef maître %s"
|
||||
@@ -1631,6 +1922,9 @@ msgstr ""
|
||||
msgid "Unsupported image type: %s"
|
||||
msgstr "Type d'image non géré : %s"
|
||||
|
||||
msgid "Take photo"
|
||||
msgstr "Prendre une photo"
|
||||
|
||||
msgid "Attach photo"
|
||||
msgstr "Attacher une photo"
|
||||
|
||||
@@ -1655,6 +1949,12 @@ msgstr "Voir métadonnées"
|
||||
msgid "View on map"
|
||||
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"
|
||||
|
||||
@@ -1679,6 +1979,31 @@ msgstr ""
|
||||
msgid "Welcome"
|
||||
msgstr "Bienvenue"
|
||||
|
||||
#~ msgid "%s (%s): %s"
|
||||
#~ msgstr "%s (%s) : %s"
|
||||
|
||||
#~ msgid "Table of contents"
|
||||
#~ msgstr "Table des matières"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "The path to synchronise with when file system synchronisation is enabled. "
|
||||
#~ "See `sync.target`."
|
||||
#~ msgstr ""
|
||||
#~ "Le chemin du répertoire avec lequel synchroniser lorsque la "
|
||||
#~ "synchronisation par système de fichier est activée. Voir `sync.target`."
|
||||
|
||||
#~ msgid "Joplin v%s"
|
||||
#~ msgstr "Joplin v%s"
|
||||
|
||||
#~ msgid "Remove?"
|
||||
#~ msgstr "Supprimer ?"
|
||||
|
||||
#~ msgid "Delete notes?"
|
||||
#~ msgstr "Supprimer les notes ?"
|
||||
|
||||
#~ msgid "State: %s."
|
||||
#~ msgstr "État : %s."
|
||||
|
||||
#~ msgid "A notebook with this title already exists: \"%s\""
|
||||
#~ msgstr "Un carnet avec ce titre existe déjà : \"%s\""
|
||||
|
||||
@@ -1726,9 +2051,6 @@ msgstr "Bienvenue"
|
||||
#~ msgid "Give focus to previous pane"
|
||||
#~ msgstr "Activer le volet précédent"
|
||||
|
||||
#~ msgid "Enter command line mode"
|
||||
#~ msgstr "Démarrer le mode de ligne de commande"
|
||||
|
||||
#~ msgid "Exit command line mode"
|
||||
#~ msgstr "Sortir du mode de ligne de commande"
|
||||
|
||||
@@ -1798,9 +2120,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»."
|
||||
@@ -452,6 +453,9 @@ msgstr "Non é posíbel iniciar o sincronizador."
|
||||
msgid "Starting synchronisation..."
|
||||
msgstr "Iniciando sincronización..."
|
||||
|
||||
msgid "Downloading resources..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Cancelling... Please wait."
|
||||
msgstr "Cancelando... Agarde."
|
||||
|
||||
@@ -573,6 +577,20 @@ msgstr ""
|
||||
msgid "Exporting to \"%s\" as \"%s\" format. Please wait..."
|
||||
msgstr "Exportando a «%s» como formato «%s». Agarde..."
|
||||
|
||||
msgid "Sidebar"
|
||||
msgstr ""
|
||||
|
||||
msgid "Note list"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Note title"
|
||||
msgstr "Título do caderno:"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Note body"
|
||||
msgstr "Cadernos"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Importing from \"%s\" as \"%s\" format. Please wait..."
|
||||
msgstr "Importando de «%s» como formato «%s». Agarde..."
|
||||
@@ -580,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"
|
||||
@@ -592,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"
|
||||
@@ -608,7 +655,11 @@ msgstr "Ocultar %s"
|
||||
msgid "Quit"
|
||||
msgstr "Saír"
|
||||
|
||||
msgid "Edit"
|
||||
msgid "Close Window"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "&Edit"
|
||||
msgstr "Edtar"
|
||||
|
||||
msgid "Copy"
|
||||
@@ -620,12 +671,19 @@ msgstr "Cortar"
|
||||
msgid "Paste"
|
||||
msgstr "Pegar"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Select all"
|
||||
msgstr "Seleccionar data"
|
||||
|
||||
msgid "Bold"
|
||||
msgstr ""
|
||||
|
||||
msgid "Italic"
|
||||
msgstr ""
|
||||
|
||||
msgid "Link"
|
||||
msgstr ""
|
||||
|
||||
msgid "Insert Date Time"
|
||||
msgstr ""
|
||||
|
||||
@@ -635,7 +693,12 @@ msgstr ""
|
||||
msgid "Search in all the notes"
|
||||
msgstr "Buscar en todas as notas"
|
||||
|
||||
msgid "View"
|
||||
#, fuzzy
|
||||
msgid "Search in current note"
|
||||
msgstr "Buscar en todas as notas"
|
||||
|
||||
#, fuzzy
|
||||
msgid "&View"
|
||||
msgstr "Vista"
|
||||
|
||||
msgid "Toggle sidebar"
|
||||
@@ -644,22 +707,16 @@ msgstr ""
|
||||
msgid "Toggle editor layout"
|
||||
msgstr "Cambiar a disposición do editor"
|
||||
|
||||
msgid "Tools"
|
||||
#, fuzzy
|
||||
msgid "Focus"
|
||||
msgstr "Focar no corpo"
|
||||
|
||||
#, 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"
|
||||
@@ -668,16 +725,6 @@ 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)"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Open %s"
|
||||
msgstr "Abrir %s"
|
||||
@@ -694,15 +741,30 @@ msgstr "Cancelar"
|
||||
msgid "Current version is up-to-date."
|
||||
msgstr "A versión actual está actualizada."
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s (pre-release)"
|
||||
msgstr ""
|
||||
|
||||
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: %s"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "New version: %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Yes"
|
||||
msgstr "Si"
|
||||
|
||||
msgid "No"
|
||||
msgstr "Non"
|
||||
|
||||
msgid "Token has been copied to the clipboard!"
|
||||
msgstr ""
|
||||
|
||||
msgid "The web clipper service is enabled and set to auto-start."
|
||||
msgstr ""
|
||||
|
||||
@@ -746,13 +808,31 @@ msgstr ""
|
||||
msgid "Download and install the relevant extension for your browser:"
|
||||
msgstr ""
|
||||
|
||||
msgid "Check synchronisation configuration"
|
||||
msgstr "Comprobar a configuración da sincronización"
|
||||
#, fuzzy
|
||||
msgid "Advanced options"
|
||||
msgstr "Mostrar opcións avanzadas"
|
||||
|
||||
msgid "Authorisation token:"
|
||||
msgstr ""
|
||||
|
||||
msgid "Copy token"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"This authorisation token is only needed to allow third-party applications to "
|
||||
"access Joplin."
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Notes and settings are stored in: %s"
|
||||
msgstr "As notas e axustes gardáronse en: %s"
|
||||
|
||||
msgid "Check synchronisation configuration"
|
||||
msgstr "Comprobar a configuración da sincronización"
|
||||
|
||||
msgid "Browse..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Apply"
|
||||
msgstr ""
|
||||
|
||||
@@ -844,6 +924,10 @@ msgstr "Estado"
|
||||
msgid "Encryption is:"
|
||||
msgstr "O cifrado é:"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Usage"
|
||||
msgstr "Uso: %s"
|
||||
|
||||
msgid "Back"
|
||||
msgstr "Anterior"
|
||||
|
||||
@@ -895,29 +979,6 @@ msgstr "Non é posíbel descifrar algúns elementos."
|
||||
msgid "Set the password"
|
||||
msgstr "Estabelecer un contrasinal"
|
||||
|
||||
msgid "Add or remove tags"
|
||||
msgstr "Engadir ou eliminar etiquetas"
|
||||
|
||||
msgid "Duplicate"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "%s - Copy"
|
||||
msgstr "Copiar"
|
||||
|
||||
msgid "Switch between note and to-do type"
|
||||
msgstr "Cambiar entre notas e tarefas"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Copy Markdown link"
|
||||
msgstr "Markdown"
|
||||
|
||||
msgid "Delete"
|
||||
msgstr "Eliminar"
|
||||
|
||||
msgid "Delete notes?"
|
||||
msgstr "Desexa eliminar as notas?"
|
||||
|
||||
msgid "No notes in here. Create one by clicking on \"New note\"."
|
||||
msgstr "Aquí non hai notas. Cree unha premendo en «Nova nota»."
|
||||
|
||||
@@ -931,6 +992,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…"
|
||||
|
||||
@@ -947,6 +1035,9 @@ msgstr ""
|
||||
msgid "Copy Link Address"
|
||||
msgstr ""
|
||||
|
||||
msgid "This attachment is not downloaded or not decrypted yet."
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Unsupported link or message: %s"
|
||||
msgstr "Ligazón ou mensaxe incompatíbeis: %s"
|
||||
@@ -959,6 +1050,9 @@ msgstr ""
|
||||
"Esta nota non ten contido. Prema en «%s» para ir ao editor e modificar a "
|
||||
"nota."
|
||||
|
||||
msgid "Only one note can be printed or exported to PDF at a time."
|
||||
msgstr ""
|
||||
|
||||
msgid "strong text"
|
||||
msgstr ""
|
||||
|
||||
@@ -984,9 +1078,6 @@ msgstr "Estabelecer alarma"
|
||||
msgid "In: %s"
|
||||
msgstr "%s: %s"
|
||||
|
||||
msgid "Note properties"
|
||||
msgstr ""
|
||||
|
||||
msgid "Hyperlink"
|
||||
msgstr ""
|
||||
|
||||
@@ -1050,24 +1141,83 @@ 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?"
|
||||
msgstr "Desexa eliminar esta busca da barra lateral?"
|
||||
|
||||
msgid "Delete"
|
||||
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."
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Fetching resources: %d"
|
||||
msgstr "Recursos: %d."
|
||||
|
||||
msgid "Please select where the sync status should be exported to"
|
||||
msgstr "Seleccione onde exportar o estado da sincronización"
|
||||
|
||||
msgid "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"
|
||||
@@ -1109,6 +1259,9 @@ msgstr ""
|
||||
"Non é posíbel actualizar o «token»: faltan datos da autenticación. Iniciar a "
|
||||
"sincronización de novo pode arranxar o problema."
|
||||
|
||||
msgid "Untitled"
|
||||
msgstr "Sen título"
|
||||
|
||||
msgid ""
|
||||
"Could not synchronize with OneDrive.\n"
|
||||
"\n"
|
||||
@@ -1156,10 +1309,6 @@ msgstr "Elementos remotos borrados: %d."
|
||||
msgid "Fetched items: %d/%d."
|
||||
msgstr "Elementos obtidos: %d/%d."
|
||||
|
||||
#, javascript-format
|
||||
msgid "State: %s."
|
||||
msgstr "Estado: %s."
|
||||
|
||||
msgid "Cancelling..."
|
||||
msgstr "Cancelando..."
|
||||
|
||||
@@ -1181,12 +1330,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"
|
||||
|
||||
@@ -1198,21 +1359,10 @@ 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."
|
||||
|
||||
msgid "Untitled"
|
||||
msgstr "Sen título"
|
||||
|
||||
msgid "This note does not have geolocation information."
|
||||
msgstr "Esta nota non ten información de xeolocalización."
|
||||
|
||||
@@ -1224,6 +1374,13 @@ 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 "Language"
|
||||
msgstr "Idioma"
|
||||
|
||||
@@ -1255,6 +1412,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"
|
||||
|
||||
@@ -1270,18 +1431,65 @@ 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"
|
||||
|
||||
msgid "Note: Does not work in all desktop environments."
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"This will allow Joplin to run in the background. It is recommended to enable "
|
||||
"this setting so that your notes are constantly being synchronised, thus "
|
||||
"reducing the number of conflicts."
|
||||
msgstr ""
|
||||
|
||||
msgid "Start application minimised in the tray icon"
|
||||
msgstr ""
|
||||
|
||||
msgid "Global zoom percentage"
|
||||
msgstr "Porcentaxe de ampliación"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Editor font size"
|
||||
msgstr "Familia de tipos de letra do editor"
|
||||
|
||||
msgid "Editor font family"
|
||||
msgstr "Familia de tipos de letra do editor"
|
||||
|
||||
@@ -1296,6 +1504,13 @@ msgstr ""
|
||||
msgid "Automatically update the application"
|
||||
msgstr "Actualizar automaticamente o aplicativo"
|
||||
|
||||
msgid "Get pre-releases when checking for updates"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "See the pre-release page for more details: %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Synchronisation interval"
|
||||
msgstr "Intervalo de sincronización"
|
||||
|
||||
@@ -1339,23 +1554,9 @@ msgstr ""
|
||||
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"
|
||||
|
||||
@@ -1384,10 +1585,46 @@ 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."
|
||||
|
||||
#, fuzzy
|
||||
msgid "General"
|
||||
msgstr "Opcións xerais"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Synchronisation"
|
||||
msgstr "Estado da sincronización"
|
||||
|
||||
msgid "Appearance"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Note"
|
||||
msgstr "Cadernos"
|
||||
|
||||
msgid "Plugins"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Application"
|
||||
msgstr "Sae do aplicativo."
|
||||
|
||||
#, javascript-format
|
||||
msgid "The tag \"%s\" already exists. Please choose a different name."
|
||||
msgstr ""
|
||||
@@ -1404,6 +1641,13 @@ msgstr "Cartafol de exportación do Joplin"
|
||||
msgid "Evernote Export File"
|
||||
msgstr "Ficheiro de exportación de Evernote"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Json Export Directory"
|
||||
msgstr "Cartafol de exportación do Joplin"
|
||||
|
||||
msgid "File"
|
||||
msgstr "Ficheiro"
|
||||
|
||||
msgid "Directory"
|
||||
msgstr "Cartafol"
|
||||
|
||||
@@ -1429,12 +1673,19 @@ msgstr "Non hai datos para exportar."
|
||||
msgid "Please specify the notebook where the notes should be imported to."
|
||||
msgstr "Indique o caderno ao que importar as notas."
|
||||
|
||||
msgid "Restored Notes"
|
||||
msgstr ""
|
||||
|
||||
msgid "Items that cannot be synchronised"
|
||||
msgstr "Elementos que non se poden sincronizar"
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s (%s): %s"
|
||||
msgstr "%s (%s): %s"
|
||||
#, fuzzy, javascript-format
|
||||
msgid "%s (%s) could not be uploaded: %s"
|
||||
msgstr "Non foi posíbel gardar o caderno: %s"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Item \"%s\" could not be downloaded: %s"
|
||||
msgstr "Non foi posíbel gardar o caderno: %s"
|
||||
|
||||
msgid ""
|
||||
"These items will remain on the device but will not be uploaded to the sync "
|
||||
@@ -1478,6 +1729,12 @@ msgstr "Alarmas próximas"
|
||||
msgid "On %s: %s"
|
||||
msgstr "En %s: %s"
|
||||
|
||||
msgid "Permission to use camera"
|
||||
msgstr ""
|
||||
|
||||
msgid "Your permission to use your camera is required."
|
||||
msgstr ""
|
||||
|
||||
msgid "There are currently no notes. Create one by clicking on the (+) button."
|
||||
msgstr "Non ten notas actualmente. Cree unha premendo no botón (+)."
|
||||
|
||||
@@ -1506,6 +1763,10 @@ msgstr "Mover %d notas para o caderno \"%s\"?"
|
||||
msgid "Press to set the decryption password."
|
||||
msgstr "Prema para estabelecer o contrasinal de descifrado."
|
||||
|
||||
#, fuzzy
|
||||
msgid "Clear alarm"
|
||||
msgstr "Estabelecer alarma"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Save alarm"
|
||||
msgstr "Estabelecer alarma"
|
||||
@@ -1519,8 +1780,34 @@ msgstr "Confirmar"
|
||||
msgid "Cancel synchronisation"
|
||||
msgstr "Cancelar sincronización"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Checking... Please wait."
|
||||
msgstr "Cancelando... Agarde."
|
||||
|
||||
#, fuzzy
|
||||
msgid "Success! Synchronisation configuration appears to be correct."
|
||||
msgstr "Comprobar a configuración da sincronización"
|
||||
|
||||
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 "O aplicativo foi autorizado correctamente."
|
||||
|
||||
#, javascript-format
|
||||
msgid ""
|
||||
"Could not authorise application:\n"
|
||||
"\n"
|
||||
"%s\n"
|
||||
"\n"
|
||||
"Please try again."
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Decrypting items: %d/%d"
|
||||
msgid "Decrypted items: %s / %s"
|
||||
msgstr "Elementos obtidos: %d/%d."
|
||||
|
||||
msgid "New tags:"
|
||||
@@ -1548,10 +1835,21 @@ msgstr ""
|
||||
msgid "Joplin website"
|
||||
msgstr "Sitio web de Joplin"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Database v%s"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "FTS enabled: %d"
|
||||
msgstr "Borrar: %d"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Login with Dropbox"
|
||||
msgstr "Acceder con OneDrive"
|
||||
|
||||
msgid "Enter code here"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Master Key %s"
|
||||
msgstr "Chave mestra %s"
|
||||
@@ -1603,6 +1901,10 @@ msgstr ""
|
||||
msgid "Unsupported image type: %s"
|
||||
msgstr "Tipo de imaxe incompatíbel: %s"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Take photo"
|
||||
msgstr "Anexar foto"
|
||||
|
||||
msgid "Attach photo"
|
||||
msgstr "Anexar foto"
|
||||
|
||||
@@ -1627,6 +1929,12 @@ msgstr "Mostrar metadatos"
|
||||
msgid "View on map"
|
||||
msgstr "Ver no mapa"
|
||||
|
||||
msgid "Go to source URL"
|
||||
msgstr ""
|
||||
|
||||
msgid "Edit"
|
||||
msgstr "Edtar"
|
||||
|
||||
msgid "Delete notebook"
|
||||
msgstr "Eliminar caderno"
|
||||
|
||||
@@ -1649,5 +1957,22 @@ msgstr "Non ten cadernos actualmente. Cree un premendo no botón (+)."
|
||||
msgid "Welcome"
|
||||
msgstr "Benvido/a"
|
||||
|
||||
#~ msgid "%s (%s): %s"
|
||||
#~ msgstr "%s (%s): %s"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "The path to synchronise with when file system synchronisation is enabled. "
|
||||
#~ "See `sync.target`."
|
||||
#~ msgstr ""
|
||||
#~ "Ruta para sincronizar cando estea activada a sincronización do sistema de "
|
||||
#~ "ficheiros. Vexa «sync.target»."
|
||||
|
||||
#, fuzzy
|
||||
#~ msgid "Joplin v%s"
|
||||
#~ msgstr "Sitio web de Joplin"
|
||||
|
||||
#~ msgid "State: %s."
|
||||
#~ msgstr "Estado: %s."
|
||||
|
||||
#~ msgid "A notebook with this title already exists: \"%s\""
|
||||
#~ msgstr "Xa existe un caderno con ese título: «%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:"
|
||||
@@ -455,6 +455,9 @@ msgstr "Ne mogu započeti sinkronizaciju."
|
||||
msgid "Starting synchronisation..."
|
||||
msgstr "Započinjem sinkronizaciju..."
|
||||
|
||||
msgid "Downloading resources..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Cancelling... Please wait."
|
||||
msgstr "Prekidam... Pričekaj."
|
||||
|
||||
@@ -576,6 +579,20 @@ msgstr ""
|
||||
msgid "Exporting to \"%s\" as \"%s\" format. Please wait..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Sidebar"
|
||||
msgstr ""
|
||||
|
||||
msgid "Note list"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Note title"
|
||||
msgstr "Naslov bilježnice:"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Note body"
|
||||
msgstr "Bilježnice"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Importing from \"%s\" as \"%s\" format. Please wait..."
|
||||
msgstr ""
|
||||
@@ -584,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"
|
||||
@@ -596,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"
|
||||
|
||||
@@ -603,8 +650,8 @@ msgstr "Uvoz"
|
||||
msgid "Export"
|
||||
msgstr "Uvoz"
|
||||
|
||||
msgid "Print"
|
||||
msgstr ""
|
||||
msgid "Synchronise"
|
||||
msgstr "Sinkroniziraj"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Hide %s"
|
||||
@@ -613,7 +660,11 @@ msgstr ""
|
||||
msgid "Quit"
|
||||
msgstr "Izađi"
|
||||
|
||||
msgid "Edit"
|
||||
msgid "Close Window"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "&Edit"
|
||||
msgstr "Uredi"
|
||||
|
||||
msgid "Copy"
|
||||
@@ -625,12 +676,19 @@ msgstr "Izreži"
|
||||
msgid "Paste"
|
||||
msgstr "Zalijepi"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Select all"
|
||||
msgstr "Odaberi datum"
|
||||
|
||||
msgid "Bold"
|
||||
msgstr ""
|
||||
|
||||
msgid "Italic"
|
||||
msgstr ""
|
||||
|
||||
msgid "Link"
|
||||
msgstr ""
|
||||
|
||||
msgid "Insert Date Time"
|
||||
msgstr ""
|
||||
|
||||
@@ -640,7 +698,11 @@ msgstr ""
|
||||
msgid "Search in all the notes"
|
||||
msgstr "Pretraži u svim bilješkama"
|
||||
|
||||
msgid "View"
|
||||
#, fuzzy
|
||||
msgid "Search in current note"
|
||||
msgstr "Pretraži u svim bilješkama"
|
||||
|
||||
msgid "&View"
|
||||
msgstr ""
|
||||
|
||||
msgid "Toggle sidebar"
|
||||
@@ -649,23 +711,16 @@ msgstr ""
|
||||
msgid "Toggle editor layout"
|
||||
msgstr ""
|
||||
|
||||
msgid "Tools"
|
||||
msgstr "Alati"
|
||||
|
||||
msgid "Synchronisation status"
|
||||
msgstr "Status sinkronizacije"
|
||||
|
||||
msgid "Web clipper options"
|
||||
msgstr ""
|
||||
|
||||
msgid "Encryption options"
|
||||
msgstr ""
|
||||
#, fuzzy
|
||||
msgid "Focus"
|
||||
msgstr "Naslov bilješke:"
|
||||
|
||||
#, fuzzy
|
||||
msgid "General Options"
|
||||
msgstr "Opcije"
|
||||
msgid "&Tools"
|
||||
msgstr "Alati"
|
||||
|
||||
msgid "Help"
|
||||
#, fuzzy
|
||||
msgid "&Help"
|
||||
msgstr "Pomoć"
|
||||
|
||||
msgid "Website and documentation"
|
||||
@@ -675,16 +730,6 @@ msgstr "Website i dokumentacija"
|
||||
msgid "Make a donation"
|
||||
msgstr "Website i dokumentacija"
|
||||
|
||||
msgid "Check for updates..."
|
||||
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"
|
||||
@@ -701,9 +746,21 @@ msgstr "Odustani"
|
||||
msgid "Current version is up-to-date."
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s (pre-release)"
|
||||
msgstr ""
|
||||
|
||||
msgid "An update is available, do you want to download it now?"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Your version: %s"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "New version: %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Yes"
|
||||
msgstr ""
|
||||
|
||||
@@ -711,6 +768,9 @@ msgstr ""
|
||||
msgid "No"
|
||||
msgstr "N"
|
||||
|
||||
msgid "Token has been copied to the clipboard!"
|
||||
msgstr ""
|
||||
|
||||
msgid "The web clipper service is enabled and set to auto-start."
|
||||
msgstr ""
|
||||
|
||||
@@ -755,13 +815,31 @@ msgid "Download and install the relevant extension for your browser:"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Check synchronisation configuration"
|
||||
msgstr "Prekini sinkronizaciju"
|
||||
msgid "Advanced options"
|
||||
msgstr "Prikaži napredne opcije"
|
||||
|
||||
msgid "Authorisation token:"
|
||||
msgstr ""
|
||||
|
||||
msgid "Copy token"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"This authorisation token is only needed to allow third-party applications to "
|
||||
"access Joplin."
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Notes and settings are stored in: %s"
|
||||
msgstr "Bilješke i postavke su pohranjene u: %s"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Check synchronisation configuration"
|
||||
msgstr "Prekini sinkronizaciju"
|
||||
|
||||
msgid "Browse..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Apply"
|
||||
msgstr ""
|
||||
|
||||
@@ -840,6 +918,10 @@ msgstr "Status"
|
||||
msgid "Encryption is:"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Usage"
|
||||
msgstr "Korištenje: %s"
|
||||
|
||||
msgid "Back"
|
||||
msgstr "Natrag"
|
||||
|
||||
@@ -895,28 +977,6 @@ msgstr "Neke stavke se ne mogu sinkronizirati."
|
||||
msgid "Set the password"
|
||||
msgstr ""
|
||||
|
||||
msgid "Add or remove tags"
|
||||
msgstr "Dodaj ili makni oznake"
|
||||
|
||||
msgid "Duplicate"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "%s - Copy"
|
||||
msgstr "Kopiraj"
|
||||
|
||||
msgid "Switch between note and to-do type"
|
||||
msgstr "Zamijeni bilješku i zadatak"
|
||||
|
||||
msgid "Copy Markdown link"
|
||||
msgstr ""
|
||||
|
||||
msgid "Delete"
|
||||
msgstr "Obriši"
|
||||
|
||||
msgid "Delete notes?"
|
||||
msgstr "Obriši bilješke?"
|
||||
|
||||
msgid "No notes in here. Create one by clicking on \"New note\"."
|
||||
msgstr "Ovdje nema bilješki. Stvori novu pritiskom na \"Nova bilješka\"."
|
||||
|
||||
@@ -930,6 +990,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 ""
|
||||
|
||||
@@ -947,6 +1034,9 @@ msgstr ""
|
||||
msgid "Copy Link Address"
|
||||
msgstr ""
|
||||
|
||||
msgid "This attachment is not downloaded or not decrypted yet."
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Unsupported link or message: %s"
|
||||
msgstr "Nepodržana poveznica ili poruka: %s"
|
||||
@@ -957,6 +1047,9 @@ msgid ""
|
||||
"note."
|
||||
msgstr ""
|
||||
|
||||
msgid "Only one note can be printed or exported to PDF at a time."
|
||||
msgstr ""
|
||||
|
||||
msgid "strong text"
|
||||
msgstr ""
|
||||
|
||||
@@ -982,9 +1075,6 @@ msgstr "Postavi upozorenje"
|
||||
msgid "In: %s"
|
||||
msgstr "%s: %s"
|
||||
|
||||
msgid "Note properties"
|
||||
msgstr ""
|
||||
|
||||
msgid "Hyperlink"
|
||||
msgstr ""
|
||||
|
||||
@@ -1050,24 +1140,82 @@ 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?"
|
||||
msgstr "Makni ovu pretragu iz izbornika?"
|
||||
|
||||
msgid "Delete"
|
||||
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."
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Fetching resources: %d"
|
||||
msgstr "Resursi: %d."
|
||||
|
||||
msgid "Please select where the sync status should be exported to"
|
||||
msgstr "Odaberi lokaciju za izvoz statusa sinkronizacije"
|
||||
|
||||
msgid "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"
|
||||
@@ -1107,6 +1255,9 @@ msgid ""
|
||||
"synchronisation again may fix the problem."
|
||||
msgstr "Nedostaju podaci za ovjeru. Pokušaj ponovo započeti sinkronizaciju."
|
||||
|
||||
msgid "Untitled"
|
||||
msgstr "Nenaslovljen"
|
||||
|
||||
msgid ""
|
||||
"Could not synchronize with OneDrive.\n"
|
||||
"\n"
|
||||
@@ -1154,10 +1305,6 @@ msgstr "Obrisane udaljene stavke: %d."
|
||||
msgid "Fetched items: %d/%d."
|
||||
msgstr "Stvorene lokalne stavke: %d."
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "State: %s."
|
||||
msgstr "Stanje: \"%s\"."
|
||||
|
||||
msgid "Cancelling..."
|
||||
msgstr "Prekidam..."
|
||||
|
||||
@@ -1179,6 +1326,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 ""
|
||||
|
||||
@@ -1186,6 +1337,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"
|
||||
|
||||
@@ -1197,21 +1356,10 @@ 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."
|
||||
|
||||
msgid "Untitled"
|
||||
msgstr "Nenaslovljen"
|
||||
|
||||
msgid "This note does not have geolocation information."
|
||||
msgstr "Ova bilješka nema geolokacijske informacije."
|
||||
|
||||
@@ -1223,6 +1371,13 @@ 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 "Language"
|
||||
msgstr "Jezik"
|
||||
|
||||
@@ -1256,6 +1411,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"
|
||||
|
||||
@@ -1274,18 +1433,64 @@ 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 ""
|
||||
|
||||
msgid "Note: Does not work in all desktop environments."
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"This will allow Joplin to run in the background. It is recommended to enable "
|
||||
"this setting so that your notes are constantly being synchronised, thus "
|
||||
"reducing the number of conflicts."
|
||||
msgstr ""
|
||||
|
||||
msgid "Start application minimised in the tray icon"
|
||||
msgstr ""
|
||||
|
||||
msgid "Global zoom percentage"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Editor font size"
|
||||
msgstr "Uredi bilješku."
|
||||
|
||||
msgid "Editor font family"
|
||||
msgstr ""
|
||||
|
||||
@@ -1297,6 +1502,13 @@ msgstr ""
|
||||
msgid "Automatically update the application"
|
||||
msgstr "Automatsko instaliranje nove verzije"
|
||||
|
||||
msgid "Get pre-releases when checking for updates"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "See the pre-release page for more details: %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Synchronisation interval"
|
||||
msgstr "Interval sinkronizacije"
|
||||
|
||||
@@ -1338,23 +1550,9 @@ 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 ""
|
||||
|
||||
@@ -1383,10 +1581,46 @@ 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."
|
||||
|
||||
#, fuzzy
|
||||
msgid "General"
|
||||
msgstr "Opcije"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Synchronisation"
|
||||
msgstr "Status sinkronizacije"
|
||||
|
||||
msgid "Appearance"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Note"
|
||||
msgstr "Bilježnice"
|
||||
|
||||
msgid "Plugins"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Application"
|
||||
msgstr "Izađi iz aplikacije."
|
||||
|
||||
#, javascript-format
|
||||
msgid "The tag \"%s\" already exists. Please choose a different name."
|
||||
msgstr ""
|
||||
@@ -1405,6 +1639,13 @@ msgstr ""
|
||||
msgid "Evernote Export File"
|
||||
msgstr "Evernote izvozne datoteke"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Json Export Directory"
|
||||
msgstr "Evernote izvozne datoteke"
|
||||
|
||||
msgid "File"
|
||||
msgstr "Datoteka"
|
||||
|
||||
msgid "Directory"
|
||||
msgstr ""
|
||||
|
||||
@@ -1429,12 +1670,19 @@ msgstr ""
|
||||
msgid "Please specify the notebook where the notes should be imported to."
|
||||
msgstr "Odaberi lokaciju za izvoz statusa sinkronizacije"
|
||||
|
||||
msgid "Restored Notes"
|
||||
msgstr ""
|
||||
|
||||
msgid "Items that cannot be synchronised"
|
||||
msgstr "Stavke koje se ne mogu sinkronizirati"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "%s (%s): %s"
|
||||
msgstr "%s %s (%s)"
|
||||
msgid "%s (%s) could not be uploaded: %s"
|
||||
msgstr "Bilježnicu nije moguće snimiti: %s"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Item \"%s\" could not be downloaded: %s"
|
||||
msgstr "Bilježnicu nije moguće snimiti: %s"
|
||||
|
||||
msgid ""
|
||||
"These items will remain on the device but will not be uploaded to the sync "
|
||||
@@ -1475,6 +1723,12 @@ msgstr "Nadolazeća upozorenja"
|
||||
msgid "On %s: %s"
|
||||
msgstr "On %s: %s"
|
||||
|
||||
msgid "Permission to use camera"
|
||||
msgstr ""
|
||||
|
||||
msgid "Your permission to use your camera is required."
|
||||
msgstr ""
|
||||
|
||||
msgid "There are currently no notes. Create one by clicking on the (+) button."
|
||||
msgstr "Trenutno nema bilješki. Stvori novu klikom na (+) gumb."
|
||||
|
||||
@@ -1503,6 +1757,10 @@ msgstr "Premjesti %d bilješke u bilježnicu \"%s\"?"
|
||||
msgid "Press to set the decryption password."
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Clear alarm"
|
||||
msgstr "Postavi upozorenje"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Save alarm"
|
||||
msgstr "Postavi upozorenje"
|
||||
@@ -1516,8 +1774,34 @@ msgstr "Potvrdi"
|
||||
msgid "Cancel synchronisation"
|
||||
msgstr "Prekini sinkronizaciju"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Checking... Please wait."
|
||||
msgstr "Prekidam... Pričekaj."
|
||||
|
||||
#, fuzzy
|
||||
msgid "Success! Synchronisation configuration appears to be correct."
|
||||
msgstr "Prekini sinkronizaciju"
|
||||
|
||||
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 "Aplikacija je uspješno autorizirana."
|
||||
|
||||
#, javascript-format
|
||||
msgid ""
|
||||
"Could not authorise application:\n"
|
||||
"\n"
|
||||
"%s\n"
|
||||
"\n"
|
||||
"Please try again."
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Decrypting items: %d/%d"
|
||||
msgid "Decrypted items: %s / %s"
|
||||
msgstr "Stvorene lokalne stavke: %d."
|
||||
|
||||
msgid "New tags:"
|
||||
@@ -1545,10 +1829,22 @@ msgstr ""
|
||||
msgid "Joplin website"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Database v%s"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "FTS enabled: %d"
|
||||
msgstr "Za brisanje: %d"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Login with Dropbox"
|
||||
msgstr "Prijavi se u OneDrive"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Enter code here"
|
||||
msgstr "Otvori naredbeni redak"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Master Key %s"
|
||||
msgstr ""
|
||||
@@ -1601,6 +1897,10 @@ msgstr ""
|
||||
msgid "Unsupported image type: %s"
|
||||
msgstr "Nepodržana vrsta slike: %s"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Take photo"
|
||||
msgstr "Priloži sliku"
|
||||
|
||||
msgid "Attach photo"
|
||||
msgstr "Priloži sliku"
|
||||
|
||||
@@ -1625,6 +1925,12 @@ msgstr "Prikaži metapodatke"
|
||||
msgid "View on map"
|
||||
msgstr "Vidi na karti"
|
||||
|
||||
msgid "Go to source URL"
|
||||
msgstr ""
|
||||
|
||||
msgid "Edit"
|
||||
msgstr "Uredi"
|
||||
|
||||
msgid "Delete notebook"
|
||||
msgstr "Obriši bilježnicu"
|
||||
|
||||
@@ -1647,6 +1953,21 @@ msgstr "Trenutno nemaš nijednu bilježnicu. Stvori novu klikom na (+) gumb."
|
||||
msgid "Welcome"
|
||||
msgstr "Dobro došli"
|
||||
|
||||
#, fuzzy
|
||||
#~ msgid "%s (%s): %s"
|
||||
#~ msgstr "%s %s (%s)"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "The path to synchronise with when file system synchronisation is enabled. "
|
||||
#~ "See `sync.target`."
|
||||
#~ msgstr ""
|
||||
#~ "Putanja do direktorija za sinkronizaciju u slučaju kad je sinkronizacija "
|
||||
#~ "sa datotečnim sustavom omogućena. Vidi `sync.target`."
|
||||
|
||||
#, fuzzy
|
||||
#~ msgid "State: %s."
|
||||
#~ msgstr "Stanje: \"%s\"."
|
||||
|
||||
#~ msgid "A notebook with this title already exists: \"%s\""
|
||||
#~ msgstr "Bilježnica s ovim naslovom već postoji: \"%s\""
|
||||
|
||||
@@ -1684,9 +2005,6 @@ msgstr "Dobro došli"
|
||||
#~ msgid "Give focus to previous pane"
|
||||
#~ msgstr "Fokusiraj prethodno okno"
|
||||
|
||||
#~ msgid "Enter command line mode"
|
||||
#~ msgstr "Otvori naredbeni redak"
|
||||
|
||||
#~ msgid "Exit command line mode"
|
||||
#~ msgstr "Napusti naredbeni redak"
|
||||
|
||||
@@ -1696,9 +2014,6 @@ msgstr "Dobro došli"
|
||||
#~ msgid "Cancel the current command."
|
||||
#~ msgstr "Prekini trenutnu naredbu."
|
||||
|
||||
#~ msgid "Exit the application."
|
||||
#~ msgstr "Izađi iz aplikacije."
|
||||
|
||||
#~ msgid "Delete the currently selected note or notebook."
|
||||
#~ msgstr "Obriši odabranu bilješku ili bilježnicu."
|
||||
|
||||
|
||||
@@ -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\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`."
|
||||
@@ -461,6 +462,9 @@ msgstr "Non è possibile inizializzare il sincronizzatore."
|
||||
msgid "Starting synchronisation..."
|
||||
msgstr "Inizio sincronizzazione..."
|
||||
|
||||
msgid "Downloading resources..."
|
||||
msgstr "Scaricamento risorse…"
|
||||
|
||||
msgid "Cancelling... Please wait."
|
||||
msgstr "Cancellazione... Attendere per favore."
|
||||
|
||||
@@ -563,6 +567,13 @@ msgid ""
|
||||
"\n"
|
||||
"For example, to create a notebook press `mb`; to create a note press `mn`."
|
||||
msgstr ""
|
||||
"Benvenuto in Joplin!\n"
|
||||
"\n"
|
||||
"Digita `:help shortcuts` per la lista delle scorciatoie da tastiera, oppure "
|
||||
"solo `:help` per le informazioni di utilizzo.\n"
|
||||
"\n"
|
||||
"Per esempio, per creare un taccuino digita `mb`; per creare una nota digita "
|
||||
"`mn`."
|
||||
|
||||
msgid ""
|
||||
"One or more items are currently encrypted and you may need to supply a "
|
||||
@@ -579,6 +590,20 @@ msgstr ""
|
||||
msgid "Exporting to \"%s\" as \"%s\" format. Please wait..."
|
||||
msgstr "Esportazione da \"%s\" come formato \"%s\". Si prega di attendere..."
|
||||
|
||||
msgid "Sidebar"
|
||||
msgstr ""
|
||||
|
||||
msgid "Note list"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Note title"
|
||||
msgstr "Titolo del Taccuino:"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Note body"
|
||||
msgstr "Taccuini"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Importing from \"%s\" as \"%s\" format. Please wait..."
|
||||
msgstr "Importazione da \"%s\" come formato \"%s\". Si prega di attendere..."
|
||||
@@ -586,8 +611,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"
|
||||
@@ -598,14 +623,43 @@ 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)"
|
||||
|
||||
#, fuzzy
|
||||
msgid "&File"
|
||||
msgstr "File"
|
||||
|
||||
msgid "About Joplin"
|
||||
msgstr "Informazione su Joplin"
|
||||
|
||||
msgid "Preferences..."
|
||||
msgstr ""
|
||||
|
||||
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"
|
||||
@@ -614,7 +668,11 @@ msgstr "Nascondi %s"
|
||||
msgid "Quit"
|
||||
msgstr "Esci"
|
||||
|
||||
msgid "Edit"
|
||||
msgid "Close Window"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "&Edit"
|
||||
msgstr "Modifica"
|
||||
|
||||
msgid "Copy"
|
||||
@@ -626,12 +684,18 @@ msgstr "Taglia"
|
||||
msgid "Paste"
|
||||
msgstr "Incolla"
|
||||
|
||||
msgid "Select all"
|
||||
msgstr "Seleziona tutto"
|
||||
|
||||
msgid "Bold"
|
||||
msgstr "Grasseto"
|
||||
|
||||
msgid "Italic"
|
||||
msgstr "Corsivo"
|
||||
|
||||
msgid "Link"
|
||||
msgstr ""
|
||||
|
||||
msgid "Insert Date Time"
|
||||
msgstr "Inserisci data e ora"
|
||||
|
||||
@@ -641,7 +705,11 @@ msgstr "Modifica in un editor esterno"
|
||||
msgid "Search in all the notes"
|
||||
msgstr "Cerca in tutte le note"
|
||||
|
||||
msgid "View"
|
||||
msgid "Search in current note"
|
||||
msgstr "Cerca nella nota corrente"
|
||||
|
||||
#, fuzzy
|
||||
msgid "&View"
|
||||
msgstr "Vista"
|
||||
|
||||
msgid "Toggle sidebar"
|
||||
@@ -650,22 +718,16 @@ msgstr "Attiva / disattiva barra laterale"
|
||||
msgid "Toggle editor layout"
|
||||
msgstr "Attiva / disattiva il layout dell'editor"
|
||||
|
||||
msgid "Tools"
|
||||
#, fuzzy
|
||||
msgid "Focus"
|
||||
msgstr "Focus sul testo"
|
||||
|
||||
#, fuzzy
|
||||
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"
|
||||
#, fuzzy
|
||||
msgid "&Help"
|
||||
msgstr "Aiuto"
|
||||
|
||||
msgid "Website and documentation"
|
||||
@@ -674,16 +736,6 @@ 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)"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Open %s"
|
||||
msgstr "Aprire %s"
|
||||
@@ -700,15 +752,30 @@ msgstr "Cancella"
|
||||
msgid "Current version is up-to-date."
|
||||
msgstr "La versione attuale è aggiornata."
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s (pre-release)"
|
||||
msgstr ""
|
||||
|
||||
msgid "An update is available, do you want to download it now?"
|
||||
msgstr "È disponibile un aggiornamento, vuoi scaricarlo ora?"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Your version: %s"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "New version: %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Yes"
|
||||
msgstr "Sì"
|
||||
|
||||
msgid "No"
|
||||
msgstr "No"
|
||||
|
||||
msgid "Token has been copied to the clipboard!"
|
||||
msgstr ""
|
||||
|
||||
msgid "The web clipper service is enabled and set to auto-start."
|
||||
msgstr ""
|
||||
"Il servizio Web clipper è abilitato e impostato per l'avvio automatico."
|
||||
@@ -758,13 +825,31 @@ 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:"
|
||||
|
||||
msgid "Check synchronisation configuration"
|
||||
msgstr "Controlla la configurazione della sincronizzazione"
|
||||
#, fuzzy
|
||||
msgid "Advanced options"
|
||||
msgstr "Mostra opzioni avanzate"
|
||||
|
||||
msgid "Authorisation token:"
|
||||
msgstr ""
|
||||
|
||||
msgid "Copy token"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"This authorisation token is only needed to allow third-party applications to "
|
||||
"access Joplin."
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Notes and settings are stored in: %s"
|
||||
msgstr "Le note e le impostazioni sono memorizzate in: %s"
|
||||
|
||||
msgid "Check synchronisation configuration"
|
||||
msgstr "Controlla la configurazione della sincronizzazione"
|
||||
|
||||
msgid "Browse..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Apply"
|
||||
msgstr "Applica"
|
||||
|
||||
@@ -860,6 +945,10 @@ msgstr "Stato"
|
||||
msgid "Encryption is:"
|
||||
msgstr "La crittografia è:"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Usage"
|
||||
msgstr "Uso: %s"
|
||||
|
||||
msgid "Back"
|
||||
msgstr "Indietro"
|
||||
|
||||
@@ -910,28 +999,6 @@ msgstr "Alcuni elementi non possono essere decodificati."
|
||||
msgid "Set the password"
|
||||
msgstr "Imposta la password"
|
||||
|
||||
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 "Copy Markdown link"
|
||||
msgstr "Copia il link Markdown"
|
||||
|
||||
msgid "Delete"
|
||||
msgstr "Elimina"
|
||||
|
||||
msgid "Delete notes?"
|
||||
msgstr "Eliminare le note?"
|
||||
|
||||
msgid "No notes in here. Create one by clicking on \"New note\"."
|
||||
msgstr "Non è presente nessuna nota. Creane una cliccando \"Nuova nota\"."
|
||||
|
||||
@@ -947,6 +1014,33 @@ msgstr ""
|
||||
msgid "URL"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Note History"
|
||||
msgstr "Taccuini"
|
||||
|
||||
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 "Questa note è stata modificata:"
|
||||
|
||||
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 "Apri ..."
|
||||
|
||||
@@ -963,6 +1057,9 @@ msgstr "Copia il percorso negli appunti"
|
||||
msgid "Copy Link Address"
|
||||
msgstr "Copia l'indirizzo del link"
|
||||
|
||||
msgid "This attachment is not downloaded or not decrypted yet."
|
||||
msgstr "Questo allegato non è ancora stato scaricato o decriptato."
|
||||
|
||||
#, javascript-format
|
||||
msgid "Unsupported link or message: %s"
|
||||
msgstr "Link o Messaggio non supportato: %s"
|
||||
@@ -975,6 +1072,9 @@ msgstr ""
|
||||
"Questa nota non ha contenuto. Fai clic su \"%s\" per attivare l'editor e "
|
||||
"modificare la nota."
|
||||
|
||||
msgid "Only one note can be printed or exported to PDF at a time."
|
||||
msgstr ""
|
||||
|
||||
msgid "strong text"
|
||||
msgstr "Testo grasseto"
|
||||
|
||||
@@ -1000,9 +1100,6 @@ msgstr "Imposta Allarme"
|
||||
msgid "In: %s"
|
||||
msgstr "In: %s"
|
||||
|
||||
msgid "Note properties"
|
||||
msgstr ""
|
||||
|
||||
msgid "Hyperlink"
|
||||
msgstr "Collegamento ipertestuale"
|
||||
|
||||
@@ -1065,24 +1162,80 @@ msgstr "Opzioni di crittografia"
|
||||
msgid "Clipper Options"
|
||||
msgstr "Opzioni 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 ""
|
||||
"Eliminare taccuino? Anche tutte le note e cartelle di questo taccuino "
|
||||
"saranno cancellati."
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Remove tag \"%s\" from all notes?"
|
||||
msgstr "Rimuovere questa etichetta da tutte le note?"
|
||||
|
||||
msgid "Remove this search from the sidebar?"
|
||||
msgstr "Rimuovere questa ricerca dalla barra laterale?"
|
||||
|
||||
msgid "Delete"
|
||||
msgstr "Elimina"
|
||||
|
||||
msgid "Rename"
|
||||
msgstr "Rinomina"
|
||||
|
||||
msgid "Synchronise"
|
||||
msgstr "Sincronizza"
|
||||
|
||||
msgid "Notebooks"
|
||||
msgstr "Taccuini"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Decrypting items: %d/%d"
|
||||
msgstr "Decrittografia Elementi: %d/%d"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Fetching resources: %d"
|
||||
msgstr "Risorse: %d."
|
||||
|
||||
msgid "Please select where the sync status should be exported to"
|
||||
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"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Delete note \"%s\"?"
|
||||
msgstr "Eliminare il taccuino \"%s\"?"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Delete these %d notes?"
|
||||
msgstr "Cancellare queste 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"
|
||||
@@ -1124,6 +1277,9 @@ msgstr ""
|
||||
"Non è possibile aggiornare il token. mancano i dati di autenticazione. "
|
||||
"Ricominciare la sincronizzazione da capo potrebbe risolvere il problema."
|
||||
|
||||
msgid "Untitled"
|
||||
msgstr "Senza titolo"
|
||||
|
||||
msgid ""
|
||||
"Could not synchronize with OneDrive.\n"
|
||||
"\n"
|
||||
@@ -1171,10 +1327,6 @@ msgstr "Elementi remoti eliminati: %d."
|
||||
msgid "Fetched items: %d/%d."
|
||||
msgstr "Elementi recuperati: %d/%d."
|
||||
|
||||
#, javascript-format
|
||||
msgid "State: %s."
|
||||
msgstr "Stato: %s."
|
||||
|
||||
msgid "Cancelling..."
|
||||
msgstr "Cancellazione..."
|
||||
|
||||
@@ -1196,12 +1348,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"
|
||||
|
||||
@@ -1212,18 +1374,9 @@ 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"
|
||||
|
||||
msgid "Untitled"
|
||||
msgstr "Senza titolo"
|
||||
|
||||
msgid "This note does not have geolocation information."
|
||||
msgstr "Questa nota non ha informazione sulla geolocalizzazione."
|
||||
|
||||
@@ -1235,6 +1388,13 @@ 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 "Language"
|
||||
msgstr "Linguaggio"
|
||||
|
||||
@@ -1265,6 +1425,10 @@ msgstr "Ordina le note per"
|
||||
msgid "Reverse sort order"
|
||||
msgstr "Inverti l'ordine"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Sort notebooks by"
|
||||
msgstr "Ordina le note per"
|
||||
|
||||
msgid "Save geo-location with notes"
|
||||
msgstr "Salva geolocalizzazione con le note"
|
||||
|
||||
@@ -1272,28 +1436,77 @@ msgid "When creating a new to-do:"
|
||||
msgstr "Quando crei un nuovo \"Cose-da-fare\":"
|
||||
|
||||
msgid "Focus title"
|
||||
msgstr ""
|
||||
msgstr "Focus sul titolo"
|
||||
|
||||
msgid "Focus body"
|
||||
msgstr ""
|
||||
msgstr "Focus sul testo"
|
||||
|
||||
msgid "When creating a new note:"
|
||||
msgstr "Quando si crea una nuova nota:"
|
||||
|
||||
msgid "Enable soft breaks"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Enable math expressions"
|
||||
msgstr "Attiva Crittografia"
|
||||
|
||||
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 "Visualizza tray icon"
|
||||
|
||||
msgid "Note: Does not work in all desktop environments."
|
||||
msgstr "Nota: non funziona in tutti gli ambienti desktop."
|
||||
|
||||
msgid ""
|
||||
"This will allow Joplin to run in the background. It is recommended to enable "
|
||||
"this setting so that your notes are constantly being synchronised, thus "
|
||||
"reducing the number of conflicts."
|
||||
msgstr ""
|
||||
"Questo consentirà Joplin di essere in esecuzione in background. E’ "
|
||||
"raccomandata l’attivazione di questa impostazione per sincronizzare "
|
||||
"costantemente le tue note e quindi ridurre il numero di conflitti."
|
||||
|
||||
msgid "Start application minimised in the tray icon"
|
||||
msgstr ""
|
||||
|
||||
msgid "Global zoom percentage"
|
||||
msgstr "Percentuale di zoom globale"
|
||||
|
||||
msgid "Editor font size"
|
||||
msgstr "Editor dimensione caratteri"
|
||||
|
||||
msgid "Editor font family"
|
||||
msgstr "Editor Famiglia Caratteri"
|
||||
msgstr "Editor famiglia caratteri"
|
||||
|
||||
msgid ""
|
||||
"This must be *monospace* font or it will not work properly. If the font is "
|
||||
@@ -1306,6 +1519,13 @@ msgstr ""
|
||||
msgid "Automatically update the application"
|
||||
msgstr "Aggiorna automaticamente l'applicazione"
|
||||
|
||||
msgid "Get pre-releases when checking for updates"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "See the pre-release page for more details: %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Synchronisation interval"
|
||||
msgstr "Intervallo di sincronizzazione"
|
||||
|
||||
@@ -1348,23 +1568,9 @@ msgstr ""
|
||||
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"
|
||||
|
||||
@@ -1398,16 +1604,52 @@ msgstr ""
|
||||
msgid "Ignore TLS certificate errors"
|
||||
msgstr "Ignora gli errori del certificato TLS"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Enable note history"
|
||||
msgstr "Attiva Crittografia"
|
||||
|
||||
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 "Oprione non valida: \"%s\". I valori possibili sono: %s."
|
||||
msgstr "Opzione non valida: \"%s\". I valori possibili sono: %s."
|
||||
|
||||
#, fuzzy
|
||||
msgid "General"
|
||||
msgstr "Opzioni Generali"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Synchronisation"
|
||||
msgstr "Stato di sincronizzazione"
|
||||
|
||||
msgid "Appearance"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Note"
|
||||
msgstr "Taccuini"
|
||||
|
||||
msgid "Plugins"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Application"
|
||||
msgstr "Esci dall'applicazione."
|
||||
|
||||
#, javascript-format
|
||||
msgid "The tag \"%s\" already exists. Please choose a different name."
|
||||
msgstr ""
|
||||
msgstr "Il tag \"%s\" esiste già. Scegliere un nome differente."
|
||||
|
||||
msgid "Joplin Export File"
|
||||
msgstr "Esposta files di Joplin"
|
||||
msgstr "Esporta file di Joplin"
|
||||
|
||||
msgid "Markdown"
|
||||
msgstr "Markdown"
|
||||
@@ -1418,6 +1660,12 @@ msgstr "Cartella di esportazione di Joplin"
|
||||
msgid "Evernote Export File"
|
||||
msgstr "Esporta files di Evernote"
|
||||
|
||||
msgid "Json Export Directory"
|
||||
msgstr "Cartella di esportazione JSON"
|
||||
|
||||
msgid "File"
|
||||
msgstr "File"
|
||||
|
||||
msgid "Directory"
|
||||
msgstr "Cartella"
|
||||
|
||||
@@ -1443,12 +1691,19 @@ msgstr "Non ci sono dati da esportare."
|
||||
msgid "Please specify the notebook where the notes should be imported to."
|
||||
msgstr "Si prega di specificare il Taccuino in cui importare le note."
|
||||
|
||||
msgid "Restored Notes"
|
||||
msgstr ""
|
||||
|
||||
msgid "Items that cannot be synchronised"
|
||||
msgstr "Elementi che non possono essere sincronizzati"
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s (%s): %s"
|
||||
msgstr "%s (%s): %s"
|
||||
#, fuzzy, javascript-format
|
||||
msgid "%s (%s) could not be uploaded: %s"
|
||||
msgstr "Questo file non può essere aperto: %s"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Item \"%s\" could not be downloaded: %s"
|
||||
msgstr "Questo file non può essere aperto: %s"
|
||||
|
||||
msgid ""
|
||||
"These items will remain on the device but will not be uploaded to the sync "
|
||||
@@ -1492,6 +1747,12 @@ msgstr "Avviso imminente"
|
||||
msgid "On %s: %s"
|
||||
msgstr "Su %s: %s"
|
||||
|
||||
msgid "Permission to use camera"
|
||||
msgstr "Permesso di usare la fotocamera"
|
||||
|
||||
msgid "Your permission to use your camera is required."
|
||||
msgstr ""
|
||||
|
||||
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 (+)."
|
||||
|
||||
@@ -1520,6 +1781,10 @@ 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"
|
||||
|
||||
msgid "Save alarm"
|
||||
msgstr "Salva Allarme"
|
||||
|
||||
@@ -1532,8 +1797,34 @@ msgstr "Conferma"
|
||||
msgid "Cancel synchronisation"
|
||||
msgstr "Cancella la sincronizzazione"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Checking... Please wait."
|
||||
msgstr "Cancellazione... Attendere per favore."
|
||||
|
||||
#, fuzzy
|
||||
msgid "Success! Synchronisation configuration appears to be correct."
|
||||
msgstr "Controlla la configurazione della sincronizzazione"
|
||||
|
||||
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."
|
||||
|
||||
#, javascript-format
|
||||
msgid "Decrypting items: %d/%d"
|
||||
msgid ""
|
||||
"Could not authorise application:\n"
|
||||
"\n"
|
||||
"%s\n"
|
||||
"\n"
|
||||
"Please try again."
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Decrypted items: %s / %s"
|
||||
msgstr "Decrittografia Elementi: %d/%d"
|
||||
|
||||
msgid "New tags:"
|
||||
@@ -1567,11 +1858,22 @@ msgstr ""
|
||||
"geografica ad una nota."
|
||||
|
||||
msgid "Joplin website"
|
||||
msgstr "Siro web Joplin"
|
||||
msgstr "Sito web Joplin"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Database v%s"
|
||||
msgstr "Database v%s"
|
||||
|
||||
#, javascript-format
|
||||
msgid "FTS enabled: %d"
|
||||
msgstr "FTS attivato: %d"
|
||||
|
||||
msgid "Login with Dropbox"
|
||||
msgstr "Login Dropbox"
|
||||
|
||||
msgid "Enter code here"
|
||||
msgstr "Inserisci qui il codice"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Master Key %s"
|
||||
msgstr "Chiave Master %s"
|
||||
@@ -1624,6 +1926,9 @@ msgstr ""
|
||||
msgid "Unsupported image type: %s"
|
||||
msgstr "Tipo di immagine non supportata: %s"
|
||||
|
||||
msgid "Take photo"
|
||||
msgstr "Scatta foto"
|
||||
|
||||
msgid "Attach photo"
|
||||
msgstr "Allega foto"
|
||||
|
||||
@@ -1648,6 +1953,12 @@ msgstr "Mostra i metadati"
|
||||
msgid "View on map"
|
||||
msgstr "Guarda sulla mappa"
|
||||
|
||||
msgid "Go to source URL"
|
||||
msgstr ""
|
||||
|
||||
msgid "Edit"
|
||||
msgstr "Modifica"
|
||||
|
||||
msgid "Delete notebook"
|
||||
msgstr "Cancella Taccuino"
|
||||
|
||||
@@ -1671,6 +1982,25 @@ msgstr ""
|
||||
msgid "Welcome"
|
||||
msgstr "Benvenuto"
|
||||
|
||||
#~ msgid "%s (%s): %s"
|
||||
#~ msgstr "%s (%s): %s"
|
||||
|
||||
#~ 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 "Joplin v%s"
|
||||
#~ msgstr "Joplin v%s"
|
||||
|
||||
#~ msgid "Delete notes?"
|
||||
#~ msgstr "Eliminare le note?"
|
||||
|
||||
#~ msgid "State: %s."
|
||||
#~ msgstr "Stato: %s."
|
||||
|
||||
#~ msgid "A notebook with this title already exists: \"%s\""
|
||||
#~ msgstr "Esiste già un Taccuino col titolo \"%s\""
|
||||
|
||||
@@ -1725,9 +2055,6 @@ msgstr "Benvenuto"
|
||||
#~ msgid "Give focus to previous pane"
|
||||
#~ msgstr "Pannello precedente"
|
||||
|
||||
#~ msgid "Enter command line mode"
|
||||
#~ msgstr "Accedi alla modalità linea di comando"
|
||||
|
||||
#~ msgid "Exit command line mode"
|
||||
#~ msgstr "Esci dalla modalità linea di comando"
|
||||
|
||||
@@ -1737,9 +2064,6 @@ msgstr "Benvenuto"
|
||||
#~ msgid "Cancel the current command."
|
||||
#~ msgstr "Cancella il comando corrente."
|
||||
|
||||
#~ msgid "Exit the application."
|
||||
#~ msgstr "Esci dall'applicazione."
|
||||
|
||||
#~ msgid "Delete the currently selected note or notebook."
|
||||
#~ msgstr "Elimina la nota o il taccuino selezionato."
|
||||
|
||||
@@ -1786,8 +2110,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"
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -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:"
|
||||
@@ -408,6 +408,9 @@ msgstr ""
|
||||
msgid "Starting synchronisation..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Downloading resources..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Cancelling... Please wait."
|
||||
msgstr ""
|
||||
|
||||
@@ -505,6 +508,18 @@ msgstr ""
|
||||
msgid "Exporting to \"%s\" as \"%s\" format. Please wait..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Sidebar"
|
||||
msgstr ""
|
||||
|
||||
msgid "Note list"
|
||||
msgstr ""
|
||||
|
||||
msgid "Note title"
|
||||
msgstr ""
|
||||
|
||||
msgid "Note body"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Importing from \"%s\" as \"%s\" format. Please wait..."
|
||||
msgstr ""
|
||||
@@ -512,7 +527,7 @@ msgstr ""
|
||||
msgid "PDF File"
|
||||
msgstr ""
|
||||
|
||||
msgid "File"
|
||||
msgid "Synchronisation status"
|
||||
msgstr ""
|
||||
|
||||
msgid "New note"
|
||||
@@ -524,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
|
||||
@@ -540,7 +583,10 @@ msgstr ""
|
||||
msgid "Quit"
|
||||
msgstr ""
|
||||
|
||||
msgid "Edit"
|
||||
msgid "Close Window"
|
||||
msgstr ""
|
||||
|
||||
msgid "&Edit"
|
||||
msgstr ""
|
||||
|
||||
msgid "Copy"
|
||||
@@ -552,12 +598,18 @@ msgstr ""
|
||||
msgid "Paste"
|
||||
msgstr ""
|
||||
|
||||
msgid "Select all"
|
||||
msgstr ""
|
||||
|
||||
msgid "Bold"
|
||||
msgstr ""
|
||||
|
||||
msgid "Italic"
|
||||
msgstr ""
|
||||
|
||||
msgid "Link"
|
||||
msgstr ""
|
||||
|
||||
msgid "Insert Date Time"
|
||||
msgstr ""
|
||||
|
||||
@@ -567,7 +619,10 @@ msgstr ""
|
||||
msgid "Search in all the notes"
|
||||
msgstr ""
|
||||
|
||||
msgid "View"
|
||||
msgid "Search in current note"
|
||||
msgstr ""
|
||||
|
||||
msgid "&View"
|
||||
msgstr ""
|
||||
|
||||
msgid "Toggle sidebar"
|
||||
@@ -576,22 +631,13 @@ msgstr ""
|
||||
msgid "Toggle editor layout"
|
||||
msgstr ""
|
||||
|
||||
msgid "Tools"
|
||||
msgid "Focus"
|
||||
msgstr ""
|
||||
|
||||
msgid "Synchronisation status"
|
||||
msgid "&Tools"
|
||||
msgstr ""
|
||||
|
||||
msgid "Web clipper options"
|
||||
msgstr ""
|
||||
|
||||
msgid "Encryption options"
|
||||
msgstr ""
|
||||
|
||||
msgid "General Options"
|
||||
msgstr ""
|
||||
|
||||
msgid "Help"
|
||||
msgid "&Help"
|
||||
msgstr ""
|
||||
|
||||
msgid "Website and documentation"
|
||||
@@ -600,16 +646,6 @@ msgstr ""
|
||||
msgid "Make a donation"
|
||||
msgstr ""
|
||||
|
||||
msgid "Check for updates..."
|
||||
msgstr ""
|
||||
|
||||
msgid "About Joplin"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s %s (%s, %s)"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Open %s"
|
||||
msgstr ""
|
||||
@@ -626,15 +662,30 @@ msgstr ""
|
||||
msgid "Current version is up-to-date."
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s (pre-release)"
|
||||
msgstr ""
|
||||
|
||||
msgid "An update is available, do you want to download it now?"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Your version: %s"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "New version: %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Yes"
|
||||
msgstr ""
|
||||
|
||||
msgid "No"
|
||||
msgstr ""
|
||||
|
||||
msgid "Token has been copied to the clipboard!"
|
||||
msgstr ""
|
||||
|
||||
msgid "The web clipper service is enabled and set to auto-start."
|
||||
msgstr ""
|
||||
|
||||
@@ -678,13 +729,30 @@ msgstr ""
|
||||
msgid "Download and install the relevant extension for your browser:"
|
||||
msgstr ""
|
||||
|
||||
msgid "Check synchronisation configuration"
|
||||
msgid "Advanced options"
|
||||
msgstr ""
|
||||
|
||||
msgid "Authorisation token:"
|
||||
msgstr ""
|
||||
|
||||
msgid "Copy token"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"This authorisation token is only needed to allow third-party applications to "
|
||||
"access Joplin."
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Notes and settings are stored in: %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Check synchronisation configuration"
|
||||
msgstr ""
|
||||
|
||||
msgid "Browse..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Apply"
|
||||
msgstr ""
|
||||
|
||||
@@ -763,6 +831,9 @@ msgstr ""
|
||||
msgid "Encryption is:"
|
||||
msgstr ""
|
||||
|
||||
msgid "Usage"
|
||||
msgstr ""
|
||||
|
||||
msgid "Back"
|
||||
msgstr ""
|
||||
|
||||
@@ -813,28 +884,6 @@ msgstr ""
|
||||
msgid "Set the password"
|
||||
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 "Copy Markdown link"
|
||||
msgstr ""
|
||||
|
||||
msgid "Delete"
|
||||
msgstr ""
|
||||
|
||||
msgid "Delete notes?"
|
||||
msgstr ""
|
||||
|
||||
msgid "No notes in here. Create one by clicking on \"New note\"."
|
||||
msgstr ""
|
||||
|
||||
@@ -848,6 +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 ""
|
||||
|
||||
@@ -864,6 +938,9 @@ msgstr ""
|
||||
msgid "Copy Link Address"
|
||||
msgstr ""
|
||||
|
||||
msgid "This attachment is not downloaded or not decrypted yet."
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Unsupported link or message: %s"
|
||||
msgstr ""
|
||||
@@ -874,6 +951,9 @@ msgid ""
|
||||
"note."
|
||||
msgstr ""
|
||||
|
||||
msgid "Only one note can be printed or exported to PDF at a time."
|
||||
msgstr ""
|
||||
|
||||
msgid "strong text"
|
||||
msgstr ""
|
||||
|
||||
@@ -899,9 +979,6 @@ msgstr ""
|
||||
msgid "In: %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Note properties"
|
||||
msgstr ""
|
||||
|
||||
msgid "Hyperlink"
|
||||
msgstr ""
|
||||
|
||||
@@ -963,24 +1040,78 @@ 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?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Rename"
|
||||
msgid "Delete"
|
||||
msgstr ""
|
||||
|
||||
msgid "Synchronise"
|
||||
msgid "Rename"
|
||||
msgstr ""
|
||||
|
||||
msgid "Notebooks"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Decrypting items: %d/%d"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Fetching resources: %d"
|
||||
msgstr ""
|
||||
|
||||
msgid "Please select where the sync status should be exported to"
|
||||
msgstr ""
|
||||
|
||||
msgid "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 ""
|
||||
@@ -1020,6 +1151,9 @@ msgid ""
|
||||
"synchronisation again may fix the problem."
|
||||
msgstr ""
|
||||
|
||||
msgid "Untitled"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"Could not synchronize with OneDrive.\n"
|
||||
"\n"
|
||||
@@ -1061,10 +1195,6 @@ msgstr ""
|
||||
msgid "Fetched items: %d/%d."
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "State: %s."
|
||||
msgstr ""
|
||||
|
||||
msgid "Cancelling..."
|
||||
msgstr ""
|
||||
|
||||
@@ -1086,12 +1216,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 ""
|
||||
|
||||
@@ -1102,18 +1242,9 @@ msgstr ""
|
||||
msgid "Notebooks cannot be named \"%s\", which is a reserved title."
|
||||
msgstr ""
|
||||
|
||||
msgid "title"
|
||||
msgstr ""
|
||||
|
||||
msgid "updated date"
|
||||
msgstr ""
|
||||
|
||||
msgid "created date"
|
||||
msgstr ""
|
||||
|
||||
msgid "Untitled"
|
||||
msgstr ""
|
||||
|
||||
msgid "This note does not have geolocation information."
|
||||
msgstr ""
|
||||
|
||||
@@ -1125,6 +1256,13 @@ 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 "Language"
|
||||
msgstr ""
|
||||
|
||||
@@ -1155,6 +1293,9 @@ msgstr ""
|
||||
msgid "Reverse sort order"
|
||||
msgstr ""
|
||||
|
||||
msgid "Sort notebooks by"
|
||||
msgstr ""
|
||||
|
||||
msgid "Save geo-location with notes"
|
||||
msgstr ""
|
||||
|
||||
@@ -1170,18 +1311,63 @@ 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 ""
|
||||
|
||||
msgid "Note: Does not work in all desktop environments."
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"This will allow Joplin to run in the background. It is recommended to enable "
|
||||
"this setting so that your notes are constantly being synchronised, thus "
|
||||
"reducing the number of conflicts."
|
||||
msgstr ""
|
||||
|
||||
msgid "Start application minimised in the tray icon"
|
||||
msgstr ""
|
||||
|
||||
msgid "Global zoom percentage"
|
||||
msgstr ""
|
||||
|
||||
msgid "Editor font size"
|
||||
msgstr ""
|
||||
|
||||
msgid "Editor font family"
|
||||
msgstr ""
|
||||
|
||||
@@ -1193,6 +1379,13 @@ msgstr ""
|
||||
msgid "Automatically update the application"
|
||||
msgstr ""
|
||||
|
||||
msgid "Get pre-releases when checking for updates"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "See the pre-release page for more details: %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Synchronisation interval"
|
||||
msgstr ""
|
||||
|
||||
@@ -1230,21 +1423,9 @@ 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 ""
|
||||
|
||||
@@ -1273,10 +1454,41 @@ 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 ""
|
||||
|
||||
msgid "General"
|
||||
msgstr ""
|
||||
|
||||
msgid "Synchronisation"
|
||||
msgstr ""
|
||||
|
||||
msgid "Appearance"
|
||||
msgstr ""
|
||||
|
||||
msgid "Note"
|
||||
msgstr ""
|
||||
|
||||
msgid "Plugins"
|
||||
msgstr ""
|
||||
|
||||
msgid "Application"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "The tag \"%s\" already exists. Please choose a different name."
|
||||
msgstr ""
|
||||
@@ -1293,6 +1505,12 @@ msgstr ""
|
||||
msgid "Evernote Export File"
|
||||
msgstr ""
|
||||
|
||||
msgid "Json Export Directory"
|
||||
msgstr ""
|
||||
|
||||
msgid "File"
|
||||
msgstr ""
|
||||
|
||||
msgid "Directory"
|
||||
msgstr ""
|
||||
|
||||
@@ -1316,11 +1534,18 @@ msgstr ""
|
||||
msgid "Please specify the notebook where the notes should be imported to."
|
||||
msgstr ""
|
||||
|
||||
msgid "Restored Notes"
|
||||
msgstr ""
|
||||
|
||||
msgid "Items that cannot be synchronised"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s (%s): %s"
|
||||
msgid "%s (%s) could not be uploaded: %s"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Item \"%s\" could not be downloaded: %s"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
@@ -1362,6 +1587,12 @@ msgstr ""
|
||||
msgid "On %s: %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Permission to use camera"
|
||||
msgstr ""
|
||||
|
||||
msgid "Your permission to use your camera is required."
|
||||
msgstr ""
|
||||
|
||||
msgid "There are currently no notes. Create one by clicking on the (+) button."
|
||||
msgstr ""
|
||||
|
||||
@@ -1390,6 +1621,9 @@ msgstr ""
|
||||
msgid "Press to set the decryption password."
|
||||
msgstr ""
|
||||
|
||||
msgid "Clear alarm"
|
||||
msgstr ""
|
||||
|
||||
msgid "Save alarm"
|
||||
msgstr ""
|
||||
|
||||
@@ -1402,8 +1636,31 @@ msgstr ""
|
||||
msgid "Cancel synchronisation"
|
||||
msgstr ""
|
||||
|
||||
msgid "Checking... Please wait."
|
||||
msgstr ""
|
||||
|
||||
msgid "Success! Synchronisation configuration appears to be correct."
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"Error. Please check that URL, username, password, etc. are correct and that "
|
||||
"the sync target is accessible. The reported error was:"
|
||||
msgstr ""
|
||||
|
||||
msgid "The application has been authorised!"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Decrypting items: %d/%d"
|
||||
msgid ""
|
||||
"Could not authorise application:\n"
|
||||
"\n"
|
||||
"%s\n"
|
||||
"\n"
|
||||
"Please try again."
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Decrypted items: %s / %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "New tags:"
|
||||
@@ -1431,9 +1688,20 @@ msgstr ""
|
||||
msgid "Joplin website"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Database v%s"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "FTS enabled: %d"
|
||||
msgstr ""
|
||||
|
||||
msgid "Login with Dropbox"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enter code here"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Master Key %s"
|
||||
msgstr ""
|
||||
@@ -1485,6 +1753,9 @@ msgstr ""
|
||||
msgid "Unsupported image type: %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Take photo"
|
||||
msgstr ""
|
||||
|
||||
msgid "Attach photo"
|
||||
msgstr ""
|
||||
|
||||
@@ -1509,6 +1780,12 @@ msgstr ""
|
||||
msgid "View on map"
|
||||
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` 입니다."
|
||||
@@ -446,10 +447,12 @@ msgstr "동기화를 시작할 수 없습니다."
|
||||
msgid "Starting synchronisation..."
|
||||
msgstr "동기화를 시작합니다..."
|
||||
|
||||
msgid "Downloading resources..."
|
||||
msgstr "리소스 다운로드 중..."
|
||||
|
||||
msgid "Cancelling... Please wait."
|
||||
msgstr "취소하는 중입니다... 잠시만 기다리세요."
|
||||
|
||||
#, 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 "
|
||||
@@ -457,7 +460,8 @@ msgid ""
|
||||
msgstr ""
|
||||
"[note]로부터 [tag]를 지우거나 지정할 때, 아니면 [tag]와 관련된 노트의 목록을 "
|
||||
"확인할 때 <tag-command>로 \"add\", \"remove\" 또는 \"list\" 를 사용할 수 있습"
|
||||
"니다. `tag list` 명령어로 모든 태그의 목록을 확인할 수 있습니다."
|
||||
"니다. `tag list` 명령어로 모든 태그의 목록을 확인할 수 있습니다 (옵션 -l 사"
|
||||
"용 가능)."
|
||||
|
||||
#, javascript-format
|
||||
msgid "Invalid command: \"%s\""
|
||||
@@ -565,6 +569,20 @@ msgstr ""
|
||||
msgid "Exporting to \"%s\" as \"%s\" format. Please wait..."
|
||||
msgstr "\"%s\"에 \"%s\" 포맷으로 내보내는 중입니다. 잠시만 기다리세요..."
|
||||
|
||||
msgid "Sidebar"
|
||||
msgstr ""
|
||||
|
||||
msgid "Note list"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Note title"
|
||||
msgstr "노트북 제목:"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Note body"
|
||||
msgstr "노트북"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Importing from \"%s\" as \"%s\" format. Please wait..."
|
||||
msgstr "\"%s\"에서 \"%s\" 포맷으로 가져오는 중입니다. 잠시만 기다리세요..."
|
||||
@@ -572,8 +590,8 @@ msgstr "\"%s\"에서 \"%s\" 포맷으로 가져오는 중입니다. 잠시만
|
||||
msgid "PDF File"
|
||||
msgstr "PDF 파일"
|
||||
|
||||
msgid "File"
|
||||
msgstr "파일"
|
||||
msgid "Synchronisation status"
|
||||
msgstr "동기화 상태"
|
||||
|
||||
msgid "New note"
|
||||
msgstr "새 노트"
|
||||
@@ -584,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"
|
||||
@@ -600,7 +647,11 @@ msgstr "%s 숨기기"
|
||||
msgid "Quit"
|
||||
msgstr "종료"
|
||||
|
||||
msgid "Edit"
|
||||
msgid "Close Window"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "&Edit"
|
||||
msgstr "편집"
|
||||
|
||||
msgid "Copy"
|
||||
@@ -612,12 +663,18 @@ msgstr "잘라내기"
|
||||
msgid "Paste"
|
||||
msgstr "붙여넣기"
|
||||
|
||||
msgid "Select all"
|
||||
msgstr "모두 선택"
|
||||
|
||||
msgid "Bold"
|
||||
msgstr "굵게"
|
||||
|
||||
msgid "Italic"
|
||||
msgstr "기울임"
|
||||
|
||||
msgid "Link"
|
||||
msgstr ""
|
||||
|
||||
msgid "Insert Date Time"
|
||||
msgstr "날짜와 시간 입력"
|
||||
|
||||
@@ -627,7 +684,11 @@ msgstr "외부 편집기에서 편집하기"
|
||||
msgid "Search in all the notes"
|
||||
msgstr "모든 노트에서 검색"
|
||||
|
||||
msgid "View"
|
||||
msgid "Search in current note"
|
||||
msgstr "현재 노트에서 검색"
|
||||
|
||||
#, fuzzy
|
||||
msgid "&View"
|
||||
msgstr "보기"
|
||||
|
||||
msgid "Toggle sidebar"
|
||||
@@ -636,22 +697,16 @@ msgstr "사이드바 표시 전환"
|
||||
msgid "Toggle editor layout"
|
||||
msgstr "편집기 배치 형태 전환"
|
||||
|
||||
msgid "Tools"
|
||||
#, fuzzy
|
||||
msgid "Focus"
|
||||
msgstr "내용에 포커스"
|
||||
|
||||
#, 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"
|
||||
@@ -660,16 +715,6 @@ 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)"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Open %s"
|
||||
msgstr "%s 열기"
|
||||
@@ -686,15 +731,30 @@ msgstr "취소"
|
||||
msgid "Current version is up-to-date."
|
||||
msgstr "현재 버전은 최신입니다."
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s (pre-release)"
|
||||
msgstr "%s (프리-릴리즈)"
|
||||
|
||||
msgid "An update is available, do you want to download it now?"
|
||||
msgstr "업데이트가 있습니다. 지금 다운로드할까요?"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Your version: %s"
|
||||
msgstr "현재 버전: %s"
|
||||
|
||||
#, javascript-format
|
||||
msgid "New version: %s"
|
||||
msgstr "새 버전: %s"
|
||||
|
||||
msgid "Yes"
|
||||
msgstr "예"
|
||||
|
||||
msgid "No"
|
||||
msgstr "아니오"
|
||||
|
||||
msgid "Token has been copied to the clipboard!"
|
||||
msgstr "토큰이 클립보드로 복사되었습니다!"
|
||||
|
||||
msgid "The web clipper service is enabled and set to auto-start."
|
||||
msgstr "웹 수집기 서비스가 활성화되었고 자동으로 시작하도록 설정되었습니다."
|
||||
|
||||
@@ -742,13 +802,32 @@ msgstr "2단계: 확장 기능 설치"
|
||||
msgid "Download and install the relevant extension for your browser:"
|
||||
msgstr "브라우저에 적절한 확장 기능을 다운로드 및 설치하세요:"
|
||||
|
||||
msgid "Check synchronisation configuration"
|
||||
msgstr "동기화 설정 확인"
|
||||
msgid "Advanced options"
|
||||
msgstr "고급 옵션"
|
||||
|
||||
msgid "Authorisation token:"
|
||||
msgstr "인증 토큰:"
|
||||
|
||||
msgid "Copy token"
|
||||
msgstr "토큰 복사"
|
||||
|
||||
msgid ""
|
||||
"This authorisation token is only needed to allow third-party applications to "
|
||||
"access Joplin."
|
||||
msgstr ""
|
||||
"이 인증 토큰은 오직 서드파티 애플리케이션에서 조플린을 접근할 때만 필요합니"
|
||||
"다."
|
||||
|
||||
#, javascript-format
|
||||
msgid "Notes and settings are stored in: %s"
|
||||
msgstr "노트와 설정값이 다음에 저장되었습니다: %s"
|
||||
|
||||
msgid "Check synchronisation configuration"
|
||||
msgstr "동기화 설정 확인"
|
||||
|
||||
msgid "Browse..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Apply"
|
||||
msgstr "적용"
|
||||
|
||||
@@ -840,6 +919,10 @@ msgstr "상태"
|
||||
msgid "Encryption is:"
|
||||
msgstr "암호화는 다음과 같습니다:"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Usage"
|
||||
msgstr "사용량: %s"
|
||||
|
||||
msgid "Back"
|
||||
msgstr "뒤로 가기"
|
||||
|
||||
@@ -890,28 +973,6 @@ msgstr "일부 항목들은 암호화할 수 없습니다."
|
||||
msgid "Set the password"
|
||||
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 "Copy Markdown link"
|
||||
msgstr "마크다운 링크 복사"
|
||||
|
||||
msgid "Delete"
|
||||
msgstr "삭제"
|
||||
|
||||
msgid "Delete notes?"
|
||||
msgstr "노트를 삭제할까요?"
|
||||
|
||||
msgid "No notes in here. Create one by clicking on \"New note\"."
|
||||
msgstr "노트가 없습니다. '새 노트'를 선택해서 노트를 새로 만드세요."
|
||||
|
||||
@@ -920,9 +981,36 @@ msgid ""
|
||||
msgstr "노트북이 없습니다. '새 노트북'을 선택해서 노트북을 새로 만드세요."
|
||||
|
||||
msgid "Location"
|
||||
msgstr ""
|
||||
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..."
|
||||
@@ -941,6 +1029,9 @@ msgstr "경로를 클립보드에 복사"
|
||||
msgid "Copy Link Address"
|
||||
msgstr "링크 주소 복사"
|
||||
|
||||
msgid "This attachment is not downloaded or not decrypted yet."
|
||||
msgstr "이 첨부는 아직 다운로드 또는 복호화 되지 않았습니다."
|
||||
|
||||
#, javascript-format
|
||||
msgid "Unsupported link or message: %s"
|
||||
msgstr "지원하지 않는 링크 또는 메세지: %s"
|
||||
@@ -953,6 +1044,9 @@ msgstr ""
|
||||
"비어있는 노트입니다. \"%s\" 항목을 선택해서 편집기를 전환하고 노트를 편집하세"
|
||||
"요."
|
||||
|
||||
msgid "Only one note can be printed or exported to PDF at a time."
|
||||
msgstr "한 번에 오직 하나의 노트만 출력하거나 내보내기 할 수 있습니다."
|
||||
|
||||
msgid "strong text"
|
||||
msgstr "중요 텍스트"
|
||||
|
||||
@@ -978,9 +1072,6 @@ msgstr "알람 설정"
|
||||
msgid "In: %s"
|
||||
msgstr "내부: %s"
|
||||
|
||||
msgid "Note properties"
|
||||
msgstr ""
|
||||
|
||||
msgid "Hyperlink"
|
||||
msgstr "하이퍼링크"
|
||||
|
||||
@@ -1042,24 +1133,80 @@ 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?"
|
||||
msgstr "사이드바에서 이 검색 항목을 제거할까요?"
|
||||
|
||||
msgid "Delete"
|
||||
msgstr "삭제"
|
||||
|
||||
msgid "Rename"
|
||||
msgstr "이름 바꾸기"
|
||||
|
||||
msgid "Synchronise"
|
||||
msgstr "동기화"
|
||||
|
||||
msgid "Notebooks"
|
||||
msgstr "노트북"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Decrypting items: %d/%d"
|
||||
msgstr "복호화 항목: %d/%d"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Fetching resources: %d"
|
||||
msgstr "리소스 가져오는 중: %d."
|
||||
|
||||
msgid "Please select where the sync status should be exported to"
|
||||
msgstr "동기화 상태를 내보낼 대상을 선택하세요"
|
||||
|
||||
msgid "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"
|
||||
@@ -1101,6 +1248,9 @@ msgstr ""
|
||||
"토큰 새로고침 불가: 인증 데이터를 찾을 수 없습니다. 동기화를 다시 시도하면 문"
|
||||
"제가 해결될수도 있습니다."
|
||||
|
||||
msgid "Untitled"
|
||||
msgstr "제목 없음"
|
||||
|
||||
msgid ""
|
||||
"Could not synchronize with OneDrive.\n"
|
||||
"\n"
|
||||
@@ -1148,10 +1298,6 @@ msgstr "원격 항목 삭제됨: %d."
|
||||
msgid "Fetched items: %d/%d."
|
||||
msgstr "가져온 항목: %d/%d."
|
||||
|
||||
#, javascript-format
|
||||
msgid "State: %s."
|
||||
msgstr "상태: %s."
|
||||
|
||||
msgid "Cancelling..."
|
||||
msgstr "취소하는 중..."
|
||||
|
||||
@@ -1173,12 +1319,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 "충돌"
|
||||
|
||||
@@ -1189,18 +1345,9 @@ 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 "만들어진 날짜"
|
||||
|
||||
msgid "Untitled"
|
||||
msgstr "제목 없음"
|
||||
|
||||
msgid "This note does not have geolocation information."
|
||||
msgstr "이 노트는 지리적 위치 정보를 포함하고 있지 않습니다."
|
||||
|
||||
@@ -1212,6 +1359,15 @@ 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 "Language"
|
||||
msgstr "언어"
|
||||
|
||||
@@ -1242,6 +1398,10 @@ msgstr "노트를 다음 기준으로 정렬"
|
||||
msgid "Reverse sort order"
|
||||
msgstr "정렬 순서 반전"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Sort notebooks by"
|
||||
msgstr "노트를 다음 기준으로 정렬"
|
||||
|
||||
msgid "Save geo-location with notes"
|
||||
msgstr "노트에 지리적 위치 정보 포함시키기"
|
||||
|
||||
@@ -1257,18 +1417,66 @@ 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 "트레이 아이콘 표시"
|
||||
|
||||
msgid "Note: Does not work in all desktop environments."
|
||||
msgstr "참고사항: 모든 데스크탑 환경에서 작동하는 것은 아닙니다."
|
||||
|
||||
msgid "Start application minimised in the tray icon"
|
||||
msgid ""
|
||||
"This will allow Joplin to run in the background. It is recommended to enable "
|
||||
"this setting so that your notes are constantly being synchronised, thus "
|
||||
"reducing the number of conflicts."
|
||||
msgstr ""
|
||||
"조플린을 백그라운드에서 구동합니다. 노트가 정기적으로 동기화 되어 충돌 횟수"
|
||||
"를 줄이기 위해 이 옵션을 활성화 하는 것을 추천합니다."
|
||||
|
||||
msgid "Start application minimised in the tray icon"
|
||||
msgstr "트레이 아이콘에 최소화 된 상태로 애플리케이션 시작"
|
||||
|
||||
msgid "Global zoom percentage"
|
||||
msgstr "전체적 확대 비율"
|
||||
|
||||
msgid "Editor font size"
|
||||
msgstr "편집기 글꼴 크기"
|
||||
|
||||
msgid "Editor font family"
|
||||
msgstr "편집기 글꼴 집합"
|
||||
|
||||
@@ -1283,6 +1491,13 @@ msgstr ""
|
||||
msgid "Automatically update the application"
|
||||
msgstr "애플리케이션을 자동으로 업데이트"
|
||||
|
||||
msgid "Get pre-releases when checking for updates"
|
||||
msgstr "업데이트 확인 시 프리-릴리즈 받기"
|
||||
|
||||
#, javascript-format
|
||||
msgid "See the pre-release page for more details: %s"
|
||||
msgstr "자세한 내용은 프리-릴리즈 페이지를 참조하세요: %s"
|
||||
|
||||
msgid "Synchronisation interval"
|
||||
msgstr "동기화 간격"
|
||||
|
||||
@@ -1324,23 +1539,9 @@ 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 ""
|
||||
"파일 시스템 동기화가 활성화된 경우에 동기화를 할 경로입니다. `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 사용자 이름"
|
||||
|
||||
@@ -1373,13 +1574,49 @@ 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\"."
|
||||
|
||||
#, fuzzy
|
||||
msgid "General"
|
||||
msgstr "일반 옵션"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Synchronisation"
|
||||
msgstr "동기화 상태"
|
||||
|
||||
msgid "Appearance"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Note"
|
||||
msgstr "노트북"
|
||||
|
||||
msgid "Plugins"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Application"
|
||||
msgstr "위치"
|
||||
|
||||
#, javascript-format
|
||||
msgid "The tag \"%s\" already exists. Please choose a different name."
|
||||
msgstr ""
|
||||
msgstr "태그 \"%s\"(이)가 이미 존재합니다. 다른 이름을 선택해 주세요."
|
||||
|
||||
msgid "Joplin Export File"
|
||||
msgstr "조플린 내보내기 파일"
|
||||
@@ -1393,6 +1630,12 @@ msgstr "조플린 내보내기 폴더"
|
||||
msgid "Evernote Export File"
|
||||
msgstr "에버노트 내보내기 파일"
|
||||
|
||||
msgid "Json Export Directory"
|
||||
msgstr "Json 내보내기 폴더"
|
||||
|
||||
msgid "File"
|
||||
msgstr "파일"
|
||||
|
||||
msgid "Directory"
|
||||
msgstr "폴더"
|
||||
|
||||
@@ -1418,12 +1661,19 @@ msgstr "내보낼 데이터가 없습니다."
|
||||
msgid "Please specify the notebook where the notes should be imported to."
|
||||
msgstr "노트를 가져와서 저장할 노트북을 지정하세요."
|
||||
|
||||
msgid "Restored Notes"
|
||||
msgstr ""
|
||||
|
||||
msgid "Items that cannot be synchronised"
|
||||
msgstr "동기화를 할 수 없는 항목"
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s (%s): %s"
|
||||
msgstr "%s (%s): %s"
|
||||
#, fuzzy, javascript-format
|
||||
msgid "%s (%s) could not be uploaded: %s"
|
||||
msgstr "다음 파일을 열 수 없습니다: %s"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Item \"%s\" could not be downloaded: %s"
|
||||
msgstr "다음 파일을 열 수 없습니다: %s"
|
||||
|
||||
msgid ""
|
||||
"These items will remain on the device but will not be uploaded to the sync "
|
||||
@@ -1467,6 +1717,12 @@ msgstr "다가오는 예정된 알람"
|
||||
msgid "On %s: %s"
|
||||
msgstr "%s: %s"
|
||||
|
||||
msgid "Permission to use camera"
|
||||
msgstr "카메라 사용 허가"
|
||||
|
||||
msgid "Your permission to use your camera is required."
|
||||
msgstr "카메라 사용을 허가가 요구됩니다."
|
||||
|
||||
msgid "There are currently no notes. Create one by clicking on the (+) button."
|
||||
msgstr "노트가 없습니다. (+) 버튼을 선택해 새로 만드세요."
|
||||
|
||||
@@ -1495,6 +1751,9 @@ msgstr "%d 노트를 \"%s\" 노트북으로 옮길까요?"
|
||||
msgid "Press to set the decryption password."
|
||||
msgstr "복호화 암호를 설정하려면 누르세요."
|
||||
|
||||
msgid "Clear alarm"
|
||||
msgstr "알람 취소"
|
||||
|
||||
msgid "Save alarm"
|
||||
msgstr "알람 저장"
|
||||
|
||||
@@ -1507,9 +1766,39 @@ msgstr "확인"
|
||||
msgid "Cancel synchronisation"
|
||||
msgstr "동기화 취소"
|
||||
|
||||
msgid "Checking... Please wait."
|
||||
msgstr "확인 중입니다... 잠시만 기다리세요."
|
||||
|
||||
msgid "Success! Synchronisation configuration appears to be correct."
|
||||
msgstr "성공! 동기화 설정이 올바릅니다."
|
||||
|
||||
msgid ""
|
||||
"Error. Please check that URL, username, password, etc. are correct and that "
|
||||
"the sync target is accessible. The reported error was:"
|
||||
msgstr ""
|
||||
"Error. Please check that URL, username, password, etc. are correct and that "
|
||||
"the sync target is accessible. The reported error was:"
|
||||
|
||||
msgid "The application has been authorised!"
|
||||
msgstr "애플리케이션이 성공적으로 허가되었습니다."
|
||||
|
||||
#, javascript-format
|
||||
msgid "Decrypting items: %d/%d"
|
||||
msgstr "복호화 항목: %d/%d"
|
||||
msgid ""
|
||||
"Could not authorise application:\n"
|
||||
"\n"
|
||||
"%s\n"
|
||||
"\n"
|
||||
"Please try again."
|
||||
msgstr ""
|
||||
"애플리케이션을 허가할 수 없습니다:\n"
|
||||
"\n"
|
||||
"%s\n"
|
||||
"\n"
|
||||
"다시 시도해 주세요."
|
||||
|
||||
#, javascript-format
|
||||
msgid "Decrypted items: %s / %s"
|
||||
msgstr "복호화된 항목: %s / %s"
|
||||
|
||||
msgid "New tags:"
|
||||
msgstr "새 태그:"
|
||||
@@ -1540,9 +1829,20 @@ msgstr "- 위치: 지리적 위치 정보를 노트에 첨부하기 위해서
|
||||
msgid "Joplin website"
|
||||
msgstr "조플린 웹사이트"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Database v%s"
|
||||
msgstr "데이터베이스 v%s"
|
||||
|
||||
#, javascript-format
|
||||
msgid "FTS enabled: %d"
|
||||
msgstr "FTS 활성됨: %d"
|
||||
|
||||
msgid "Login with Dropbox"
|
||||
msgstr "Dropbox로 로그인"
|
||||
|
||||
msgid "Enter code here"
|
||||
msgstr "여기에 코드를 입력하세요"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Master Key %s"
|
||||
msgstr "관리자 키 %s"
|
||||
@@ -1594,6 +1894,9 @@ msgstr "조플린 모바일 앱은 현재 해당 형식의 링크를 지원하
|
||||
msgid "Unsupported image type: %s"
|
||||
msgstr "지원하지 않는 이미지 형식: %s"
|
||||
|
||||
msgid "Take photo"
|
||||
msgstr "사진 찍기"
|
||||
|
||||
msgid "Attach photo"
|
||||
msgstr "사진 첨부"
|
||||
|
||||
@@ -1618,6 +1921,12 @@ msgstr "메타데이터 표시"
|
||||
msgid "View on map"
|
||||
msgstr "지도에 표시"
|
||||
|
||||
msgid "Go to source URL"
|
||||
msgstr "소스 URL로 이동"
|
||||
|
||||
msgid "Edit"
|
||||
msgstr "편집"
|
||||
|
||||
msgid "Delete notebook"
|
||||
msgstr "노트북 삭제"
|
||||
|
||||
@@ -1640,5 +1949,21 @@ msgstr "노트북이 없습니다. (+) 버튼을 눌러 새로 만드세요."
|
||||
msgid "Welcome"
|
||||
msgstr "환영합니다"
|
||||
|
||||
#~ msgid "%s (%s): %s"
|
||||
#~ msgstr "%s (%s): %s"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "The path to synchronise with when file system synchronisation is enabled. "
|
||||
#~ "See `sync.target`."
|
||||
#~ msgstr ""
|
||||
#~ "파일 시스템 동기화가 활성화된 경우에 동기화를 할 경로입니다. `sync.target`"
|
||||
#~ "를 참조하세요."
|
||||
|
||||
#~ msgid "Joplin v%s"
|
||||
#~ msgstr "조플린 v%s"
|
||||
|
||||
#~ msgid "State: %s."
|
||||
#~ msgstr "상태: %s."
|
||||
|
||||
#~ msgid "A notebook with this title already exists: \"%s\""
|
||||
#~ msgstr "같은 제목의 노트북이 이미 있습니다: \"%s\""
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -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`."
|
||||
@@ -456,6 +457,9 @@ msgstr "Kan de synchronisatie niet starten."
|
||||
msgid "Starting synchronisation..."
|
||||
msgstr "Synchronisatie starten..."
|
||||
|
||||
msgid "Downloading resources..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Cancelling... Please wait."
|
||||
msgstr "Annuleren.. Even geduld."
|
||||
|
||||
@@ -581,6 +585,20 @@ msgstr ""
|
||||
msgid "Exporting to \"%s\" as \"%s\" format. Please wait..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Sidebar"
|
||||
msgstr ""
|
||||
|
||||
msgid "Note list"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Note title"
|
||||
msgstr "Notitieboek titel:"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Note body"
|
||||
msgstr "Notitieboeken"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Importing from \"%s\" as \"%s\" format. Please wait..."
|
||||
msgstr ""
|
||||
@@ -589,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"
|
||||
@@ -601,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"
|
||||
|
||||
@@ -608,8 +655,8 @@ msgstr "Importeer"
|
||||
msgid "Export"
|
||||
msgstr "Importeer"
|
||||
|
||||
msgid "Print"
|
||||
msgstr ""
|
||||
msgid "Synchronise"
|
||||
msgstr "Synchroniseer"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Hide %s"
|
||||
@@ -618,7 +665,11 @@ msgstr ""
|
||||
msgid "Quit"
|
||||
msgstr "Stop"
|
||||
|
||||
msgid "Edit"
|
||||
msgid "Close Window"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "&Edit"
|
||||
msgstr "Bewerk"
|
||||
|
||||
msgid "Copy"
|
||||
@@ -630,12 +681,19 @@ msgstr "Knip"
|
||||
msgid "Paste"
|
||||
msgstr "Plak"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Select all"
|
||||
msgstr "Selecteer datum"
|
||||
|
||||
msgid "Bold"
|
||||
msgstr ""
|
||||
|
||||
msgid "Italic"
|
||||
msgstr ""
|
||||
|
||||
msgid "Link"
|
||||
msgstr ""
|
||||
|
||||
msgid "Insert Date Time"
|
||||
msgstr ""
|
||||
|
||||
@@ -645,7 +703,11 @@ msgstr ""
|
||||
msgid "Search in all the notes"
|
||||
msgstr "Zoek in alle notities"
|
||||
|
||||
msgid "View"
|
||||
#, fuzzy
|
||||
msgid "Search in current note"
|
||||
msgstr "Zoek in alle notities"
|
||||
|
||||
msgid "&View"
|
||||
msgstr ""
|
||||
|
||||
msgid "Toggle sidebar"
|
||||
@@ -654,22 +716,15 @@ msgstr ""
|
||||
msgid "Toggle editor layout"
|
||||
msgstr ""
|
||||
|
||||
msgid "Tools"
|
||||
msgstr "Tools"
|
||||
|
||||
msgid "Synchronisation status"
|
||||
msgstr "Synchronisatie status"
|
||||
|
||||
msgid "Web clipper options"
|
||||
msgid "Focus"
|
||||
msgstr ""
|
||||
|
||||
msgid "Encryption options"
|
||||
msgstr "Versleutelopties"
|
||||
#, fuzzy
|
||||
msgid "&Tools"
|
||||
msgstr "Tools"
|
||||
|
||||
msgid "General Options"
|
||||
msgstr "Algemene opties"
|
||||
|
||||
msgid "Help"
|
||||
#, fuzzy
|
||||
msgid "&Help"
|
||||
msgstr "Help"
|
||||
|
||||
msgid "Website and documentation"
|
||||
@@ -679,16 +734,6 @@ msgstr "Website en documentatie"
|
||||
msgid "Make a donation"
|
||||
msgstr "Website en documentatie"
|
||||
|
||||
msgid "Check for updates..."
|
||||
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"
|
||||
@@ -705,9 +750,21 @@ msgstr "Annuleer"
|
||||
msgid "Current version is up-to-date."
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s (pre-release)"
|
||||
msgstr ""
|
||||
|
||||
msgid "An update is available, do you want to download it now?"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Your version: %s"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "New version: %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Yes"
|
||||
msgstr ""
|
||||
|
||||
@@ -715,6 +772,9 @@ msgstr ""
|
||||
msgid "No"
|
||||
msgstr "N"
|
||||
|
||||
msgid "Token has been copied to the clipboard!"
|
||||
msgstr ""
|
||||
|
||||
msgid "The web clipper service is enabled and set to auto-start."
|
||||
msgstr ""
|
||||
|
||||
@@ -759,13 +819,31 @@ msgid "Download and install the relevant extension for your browser:"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Check synchronisation configuration"
|
||||
msgstr "Annuleer synchronisatie"
|
||||
msgid "Advanced options"
|
||||
msgstr "Toon geavanceerde opties"
|
||||
|
||||
msgid "Authorisation token:"
|
||||
msgstr ""
|
||||
|
||||
msgid "Copy token"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"This authorisation token is only needed to allow third-party applications to "
|
||||
"access Joplin."
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Notes and settings are stored in: %s"
|
||||
msgstr "Notities en instellingen zijn opgeslaan in %s"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Check synchronisation configuration"
|
||||
msgstr "Annuleer synchronisatie"
|
||||
|
||||
msgid "Browse..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Apply"
|
||||
msgstr ""
|
||||
|
||||
@@ -856,6 +934,10 @@ msgstr "Status"
|
||||
msgid "Encryption is:"
|
||||
msgstr "Versleuteling is:"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Usage"
|
||||
msgstr "Gebruik: %s"
|
||||
|
||||
msgid "Back"
|
||||
msgstr "Terug"
|
||||
|
||||
@@ -910,28 +992,6 @@ msgstr "Sommige items kunnen niet gedecodeerd worden."
|
||||
msgid "Set the password"
|
||||
msgstr "Stel wachtwoord in"
|
||||
|
||||
msgid "Add or remove tags"
|
||||
msgstr "Voeg tag toe of verwijder tag"
|
||||
|
||||
msgid "Duplicate"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "%s - Copy"
|
||||
msgstr "Kopieer"
|
||||
|
||||
msgid "Switch between note and to-do type"
|
||||
msgstr "Wissel tussen notitie en to-do type"
|
||||
|
||||
msgid "Copy Markdown link"
|
||||
msgstr ""
|
||||
|
||||
msgid "Delete"
|
||||
msgstr "Verwijderen"
|
||||
|
||||
msgid "Delete notes?"
|
||||
msgstr "Notities verwijderen?"
|
||||
|
||||
msgid "No notes in here. Create one by clicking on \"New note\"."
|
||||
msgstr "Geen notities. Maak een notitie door op \"Nieuwe notitie\" te klikken."
|
||||
|
||||
@@ -947,6 +1007,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 ""
|
||||
|
||||
@@ -964,6 +1051,9 @@ msgstr ""
|
||||
msgid "Copy Link Address"
|
||||
msgstr ""
|
||||
|
||||
msgid "This attachment is not downloaded or not decrypted yet."
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Unsupported link or message: %s"
|
||||
msgstr "Link of bericht \"%s\" wordt niet ondersteund"
|
||||
@@ -974,6 +1064,9 @@ msgid ""
|
||||
"note."
|
||||
msgstr ""
|
||||
|
||||
msgid "Only one note can be printed or exported to PDF at a time."
|
||||
msgstr ""
|
||||
|
||||
msgid "strong text"
|
||||
msgstr ""
|
||||
|
||||
@@ -999,9 +1092,6 @@ msgstr "Zet melding"
|
||||
msgid "In: %s"
|
||||
msgstr "%s: %s"
|
||||
|
||||
msgid "Note properties"
|
||||
msgstr ""
|
||||
|
||||
msgid "Hyperlink"
|
||||
msgstr ""
|
||||
|
||||
@@ -1067,24 +1157,83 @@ 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?"
|
||||
msgstr "Dit item verwijderen van de zijbalk?"
|
||||
|
||||
msgid "Delete"
|
||||
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."
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Fetching resources: %d"
|
||||
msgstr "Middelen: %d."
|
||||
|
||||
msgid "Please select where the sync status should be exported to"
|
||||
msgstr "Selecteer waar de synchronisatie status naar geëxporteerd moet worden"
|
||||
|
||||
msgid "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"
|
||||
@@ -1127,6 +1276,9 @@ msgstr ""
|
||||
"Kan token niet vernieuwen: authenticatiedata ontbreekt. Herstarten van de "
|
||||
"synchronisatie kan het probleem eventueel oplossen. "
|
||||
|
||||
msgid "Untitled"
|
||||
msgstr "Untitled"
|
||||
|
||||
msgid ""
|
||||
"Could not synchronize with OneDrive.\n"
|
||||
"\n"
|
||||
@@ -1174,10 +1326,6 @@ msgstr "Verwijderde remote items: %d."
|
||||
msgid "Fetched items: %d/%d."
|
||||
msgstr "Opgehaalde items: %d/%d."
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "State: %s."
|
||||
msgstr "Status: \"%s\""
|
||||
|
||||
msgid "Cancelling..."
|
||||
msgstr "Annuleren..."
|
||||
|
||||
@@ -1199,12 +1347,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"
|
||||
|
||||
@@ -1218,21 +1378,10 @@ 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."
|
||||
|
||||
msgid "Untitled"
|
||||
msgstr "Untitled"
|
||||
|
||||
msgid "This note does not have geolocation information."
|
||||
msgstr "Deze notitie bevat geen geo-locatie informatie."
|
||||
|
||||
@@ -1244,6 +1393,13 @@ 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 "Language"
|
||||
msgstr "Taal"
|
||||
|
||||
@@ -1277,6 +1433,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"
|
||||
|
||||
@@ -1294,18 +1454,65 @@ 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 ""
|
||||
|
||||
msgid "Note: Does not work in all desktop environments."
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"This will allow Joplin to run in the background. It is recommended to enable "
|
||||
"this setting so that your notes are constantly being synchronised, thus "
|
||||
"reducing the number of conflicts."
|
||||
msgstr ""
|
||||
|
||||
msgid "Start application minimised in the tray icon"
|
||||
msgstr ""
|
||||
|
||||
msgid "Global zoom percentage"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Editor font size"
|
||||
msgstr "Bewerk notitie."
|
||||
|
||||
msgid "Editor font family"
|
||||
msgstr ""
|
||||
|
||||
@@ -1317,6 +1524,13 @@ msgstr ""
|
||||
msgid "Automatically update the application"
|
||||
msgstr "Update de applicatie automatisch"
|
||||
|
||||
msgid "Get pre-releases when checking for updates"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "See the pre-release page for more details: %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Synchronisation interval"
|
||||
msgstr "Synchronisatie interval"
|
||||
|
||||
@@ -1359,23 +1573,9 @@ 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 ""
|
||||
|
||||
@@ -1406,10 +1606,46 @@ 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."
|
||||
|
||||
#, fuzzy
|
||||
msgid "General"
|
||||
msgstr "Algemene opties"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Synchronisation"
|
||||
msgstr "Synchronisatie status"
|
||||
|
||||
msgid "Appearance"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Note"
|
||||
msgstr "Notitieboeken"
|
||||
|
||||
msgid "Plugins"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Application"
|
||||
msgstr "Sluit de applicatie."
|
||||
|
||||
#, javascript-format
|
||||
msgid "The tag \"%s\" already exists. Please choose a different name."
|
||||
msgstr ""
|
||||
@@ -1428,6 +1664,13 @@ msgstr ""
|
||||
msgid "Evernote Export File"
|
||||
msgstr "Exporteer Evernote bestanden"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Json Export Directory"
|
||||
msgstr "Exporteer Evernote bestanden"
|
||||
|
||||
msgid "File"
|
||||
msgstr "Bestand"
|
||||
|
||||
msgid "Directory"
|
||||
msgstr ""
|
||||
|
||||
@@ -1452,12 +1695,19 @@ msgstr ""
|
||||
msgid "Please specify the notebook where the notes should be imported to."
|
||||
msgstr "Selecteer waar de synchronisatie status naar geëxporteerd moet worden"
|
||||
|
||||
msgid "Restored Notes"
|
||||
msgstr ""
|
||||
|
||||
msgid "Items that cannot be synchronised"
|
||||
msgstr "Items die niet gesynchroniseerd kunnen worden"
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s (%s): %s"
|
||||
msgstr "%s (%s): %s"
|
||||
#, fuzzy, javascript-format
|
||||
msgid "%s (%s) could not be uploaded: %s"
|
||||
msgstr "Het notitieboek kon niet opgeslaan worden: %s"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Item \"%s\" could not be downloaded: %s"
|
||||
msgstr "Het notitieboek kon niet opgeslaan worden: %s"
|
||||
|
||||
msgid ""
|
||||
"These items will remain on the device but will not be uploaded to the sync "
|
||||
@@ -1501,6 +1751,12 @@ msgstr "Meldingen"
|
||||
msgid "On %s: %s"
|
||||
msgstr "Op %s: %s"
|
||||
|
||||
msgid "Permission to use camera"
|
||||
msgstr ""
|
||||
|
||||
msgid "Your permission to use your camera is required."
|
||||
msgstr ""
|
||||
|
||||
msgid "There are currently no notes. Create one by clicking on the (+) button."
|
||||
msgstr ""
|
||||
"Er zijn momenteel geen notities. Maak een notitie door op (+) te klikken."
|
||||
@@ -1530,6 +1786,10 @@ msgstr "Verplaats %d notities naar notitieboek \"%s\"?"
|
||||
msgid "Press to set the decryption password."
|
||||
msgstr "Klik om het decryptie wachtwoord in te stellen"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Clear alarm"
|
||||
msgstr "Zet melding"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Save alarm"
|
||||
msgstr "Zet melding"
|
||||
@@ -1543,8 +1803,34 @@ msgstr "Bevestig"
|
||||
msgid "Cancel synchronisation"
|
||||
msgstr "Annuleer synchronisatie"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Checking... Please wait."
|
||||
msgstr "Annuleren.. Even geduld."
|
||||
|
||||
#, fuzzy
|
||||
msgid "Success! Synchronisation configuration appears to be correct."
|
||||
msgstr "Annuleer synchronisatie"
|
||||
|
||||
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 "De applicatie is succesvol geauthenticeerd."
|
||||
|
||||
#, javascript-format
|
||||
msgid ""
|
||||
"Could not authorise application:\n"
|
||||
"\n"
|
||||
"%s\n"
|
||||
"\n"
|
||||
"Please try again."
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Decrypting items: %d/%d"
|
||||
msgid "Decrypted items: %s / %s"
|
||||
msgstr "Opgehaalde items: %d/%d."
|
||||
|
||||
msgid "New tags:"
|
||||
@@ -1572,10 +1858,22 @@ msgstr ""
|
||||
msgid "Joplin website"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Database v%s"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "FTS enabled: %d"
|
||||
msgstr "Verwijderen: %d"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Login with Dropbox"
|
||||
msgstr "Log in met OneDrive"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Enter code here"
|
||||
msgstr "Ga naar command line modus"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Master Key %s"
|
||||
msgstr "Hoofdsleutel: %s"
|
||||
@@ -1627,6 +1925,10 @@ msgstr ""
|
||||
msgid "Unsupported image type: %s"
|
||||
msgstr "Afbeeldingstype %s wordt niet ondersteund"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Take photo"
|
||||
msgstr "Voeg foto toe"
|
||||
|
||||
msgid "Attach photo"
|
||||
msgstr "Voeg foto toe"
|
||||
|
||||
@@ -1651,6 +1953,12 @@ msgstr "Toon metadata"
|
||||
msgid "View on map"
|
||||
msgstr "Toon op de kaart"
|
||||
|
||||
msgid "Go to source URL"
|
||||
msgstr ""
|
||||
|
||||
msgid "Edit"
|
||||
msgstr "Bewerk"
|
||||
|
||||
msgid "Delete notebook"
|
||||
msgstr "Verwijder notitieboek"
|
||||
|
||||
@@ -1675,6 +1983,20 @@ msgstr ""
|
||||
msgid "Welcome"
|
||||
msgstr "Welkom"
|
||||
|
||||
#~ msgid "%s (%s): %s"
|
||||
#~ msgstr "%s (%s): %s"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "The path to synchronise with when file system synchronisation is enabled. "
|
||||
#~ "See `sync.target`."
|
||||
#~ msgstr ""
|
||||
#~ "Het pad om mee te synchroniseren als bestandssysteem synchronisatie is "
|
||||
#~ "ingeschakeld. Zie `sync.target`."
|
||||
|
||||
#, fuzzy
|
||||
#~ msgid "State: %s."
|
||||
#~ msgstr "Status: \"%s\""
|
||||
|
||||
#~ msgid "A notebook with this title already exists: \"%s\""
|
||||
#~ msgstr "Er bestaat al een notitieboek met \"%s\" als titel"
|
||||
|
||||
@@ -1713,9 +2035,6 @@ msgstr "Welkom"
|
||||
#~ msgid "Give focus to previous pane"
|
||||
#~ msgstr "Focus op het vorige paneel"
|
||||
|
||||
#~ msgid "Enter command line mode"
|
||||
#~ msgstr "Ga naar command line modus"
|
||||
|
||||
#~ msgid "Exit command line mode"
|
||||
#~ msgstr "Ga uit command line modus"
|
||||
|
||||
@@ -1725,9 +2044,6 @@ msgstr "Welkom"
|
||||
#~ msgid "Cancel the current command."
|
||||
#~ msgstr "Annuleer het huidige commando."
|
||||
|
||||
#~ msgid "Exit the application."
|
||||
#~ msgstr "Sluit de applicatie."
|
||||
|
||||
#~ msgid "Delete the currently selected note or notebook."
|
||||
#~ msgstr ""
|
||||
#~ "Verwijder de geselecteerde notitie of het geselecteerde notitieboek."
|
||||
|
||||
@@ -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`."
|
||||
@@ -457,6 +458,9 @@ msgstr "De synchronisatie kan niet worden geïnitaliseerd."
|
||||
msgid "Starting synchronisation..."
|
||||
msgstr "Bezig met starten van synchronisatie..."
|
||||
|
||||
msgid "Downloading resources..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Cancelling... Please wait."
|
||||
msgstr "Bezig met annuleren... Even geduld."
|
||||
|
||||
@@ -582,6 +586,20 @@ msgstr ""
|
||||
msgid "Exporting to \"%s\" as \"%s\" format. Please wait..."
|
||||
msgstr "Bezig met exporteren van \"%s\" in het formaat \"%s\". Even geduld..."
|
||||
|
||||
msgid "Sidebar"
|
||||
msgstr ""
|
||||
|
||||
msgid "Note list"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Note title"
|
||||
msgstr "Titel van notitieboek:"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Note body"
|
||||
msgstr "Notitieboeken"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Importing from \"%s\" as \"%s\" format. Please wait..."
|
||||
msgstr "Bezig met importeren van \"%s\" in het formaat \"%s\". Even geduld..."
|
||||
@@ -589,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"
|
||||
@@ -601,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"
|
||||
@@ -617,7 +664,11 @@ msgstr "%s verbergen"
|
||||
msgid "Quit"
|
||||
msgstr "Afsluiten"
|
||||
|
||||
msgid "Edit"
|
||||
msgid "Close Window"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "&Edit"
|
||||
msgstr "Bewerken"
|
||||
|
||||
msgid "Copy"
|
||||
@@ -629,12 +680,19 @@ msgstr "Knippen"
|
||||
msgid "Paste"
|
||||
msgstr "Plakken"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Select all"
|
||||
msgstr "Datum kiezen"
|
||||
|
||||
msgid "Bold"
|
||||
msgstr "Vetgedrukt"
|
||||
|
||||
msgid "Italic"
|
||||
msgstr "Cursief"
|
||||
|
||||
msgid "Link"
|
||||
msgstr ""
|
||||
|
||||
msgid "Insert Date Time"
|
||||
msgstr "Datum en tijd invoegen"
|
||||
|
||||
@@ -644,7 +702,12 @@ msgstr "Bewerken in externe bewerker"
|
||||
msgid "Search in all the notes"
|
||||
msgstr "Alle notities doorzoeken"
|
||||
|
||||
msgid "View"
|
||||
#, fuzzy
|
||||
msgid "Search in current note"
|
||||
msgstr "Alle notities doorzoeken"
|
||||
|
||||
#, fuzzy
|
||||
msgid "&View"
|
||||
msgstr "Beeld"
|
||||
|
||||
msgid "Toggle sidebar"
|
||||
@@ -653,22 +716,16 @@ msgstr "Zijbalk tonen/verbergen"
|
||||
msgid "Toggle editor layout"
|
||||
msgstr "Bewerkindeling tonen/verbergen"
|
||||
|
||||
msgid "Tools"
|
||||
#, fuzzy
|
||||
msgid "Focus"
|
||||
msgstr "Inhoud focussen"
|
||||
|
||||
#, 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"
|
||||
@@ -677,16 +734,6 @@ 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)"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Open %s"
|
||||
msgstr "%s openen"
|
||||
@@ -703,15 +750,30 @@ msgstr "Annuleren"
|
||||
msgid "Current version is up-to-date."
|
||||
msgstr "De huidige versie is up-to-date."
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s (pre-release)"
|
||||
msgstr ""
|
||||
|
||||
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: %s"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "New version: %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Yes"
|
||||
msgstr "Ja"
|
||||
|
||||
msgid "No"
|
||||
msgstr "Nee"
|
||||
|
||||
msgid "Token has been copied to the clipboard!"
|
||||
msgstr ""
|
||||
|
||||
msgid "The web clipper service is enabled and set to auto-start."
|
||||
msgstr "De webclipper-dienst is ingeschakeld en wordt automatisch opgestart."
|
||||
|
||||
@@ -761,13 +823,31 @@ msgstr "Stap 2: Installeer de extensie"
|
||||
msgid "Download and install the relevant extension for your browser:"
|
||||
msgstr "Download en installeer de bijbehorende extensie in je browser:"
|
||||
|
||||
msgid "Check synchronisation configuration"
|
||||
msgstr "Synchronisatieconfiguratie controleren"
|
||||
#, fuzzy
|
||||
msgid "Advanced options"
|
||||
msgstr "Geavanceerde opties tonen"
|
||||
|
||||
msgid "Authorisation token:"
|
||||
msgstr ""
|
||||
|
||||
msgid "Copy token"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"This authorisation token is only needed to allow third-party applications to "
|
||||
"access Joplin."
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Notes and settings are stored in: %s"
|
||||
msgstr "Notities en instellingen worden opgeslagen in: %s"
|
||||
|
||||
msgid "Check synchronisation configuration"
|
||||
msgstr "Synchronisatieconfiguratie controleren"
|
||||
|
||||
msgid "Browse..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Apply"
|
||||
msgstr "Toepassen"
|
||||
|
||||
@@ -862,6 +942,10 @@ msgstr "Status"
|
||||
msgid "Encryption is:"
|
||||
msgstr "Gebruikte versleuteling:"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Usage"
|
||||
msgstr "Gebruik: %s"
|
||||
|
||||
msgid "Back"
|
||||
msgstr "Terug"
|
||||
|
||||
@@ -914,28 +998,6 @@ msgstr "Sommige items kunnen niet worden ontsleuteled."
|
||||
msgid "Set the password"
|
||||
msgstr "Wachtwoord instellen"
|
||||
|
||||
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"
|
||||
|
||||
msgid "Copy Markdown link"
|
||||
msgstr "Markdownlink kopiëren"
|
||||
|
||||
msgid "Delete"
|
||||
msgstr "Verwijderen"
|
||||
|
||||
msgid "Delete notes?"
|
||||
msgstr "Notities verwijderen?"
|
||||
|
||||
msgid "No notes in here. Create one by clicking on \"New note\"."
|
||||
msgstr ""
|
||||
"Er zijn hier geen notities. Creëer een notitie door de klikken op \"Nieuwe "
|
||||
@@ -953,6 +1015,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..."
|
||||
|
||||
@@ -969,6 +1058,9 @@ msgstr "Pad kopiëren naar klembord"
|
||||
msgid "Copy Link Address"
|
||||
msgstr "Linkadres kopiëren"
|
||||
|
||||
msgid "This attachment is not downloaded or not decrypted yet."
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Unsupported link or message: %s"
|
||||
msgstr "Niet-ondersteunde link of bericht: %s"
|
||||
@@ -981,6 +1073,9 @@ msgstr ""
|
||||
"Deze notitie bevat geen inhoud. Klik op \"%s\" om de bewerker te openen en "
|
||||
"de notitie te bewerken."
|
||||
|
||||
msgid "Only one note can be printed or exported to PDF at a time."
|
||||
msgstr ""
|
||||
|
||||
msgid "strong text"
|
||||
msgstr "vetgedrukte tekst"
|
||||
|
||||
@@ -1006,9 +1101,6 @@ msgstr "Alarm instellen"
|
||||
msgid "In: %s"
|
||||
msgstr "In: %s"
|
||||
|
||||
msgid "Note properties"
|
||||
msgstr ""
|
||||
|
||||
msgid "Hyperlink"
|
||||
msgstr "Hyperlink"
|
||||
|
||||
@@ -1070,24 +1162,82 @@ 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?"
|
||||
msgstr "Wil je deze zoekopdracht verwijderen uit de zijbalk?"
|
||||
|
||||
msgid "Delete"
|
||||
msgstr "Verwijderen"
|
||||
|
||||
msgid "Rename"
|
||||
msgstr "Naam wijzigen"
|
||||
|
||||
msgid "Synchronise"
|
||||
msgstr "Synchroniseren"
|
||||
|
||||
msgid "Notebooks"
|
||||
msgstr "Notitieboeken"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Decrypting items: %d/%d"
|
||||
msgstr "Bezig met ontsleutelen van items: %d/%d"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Fetching resources: %d"
|
||||
msgstr "Bronnen: %d."
|
||||
|
||||
msgid "Please select where the sync status should be exported to"
|
||||
msgstr "Kies waar de synchronisatiestatus naar moet worden geëxporteerd"
|
||||
|
||||
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"
|
||||
@@ -1129,6 +1279,9 @@ msgstr ""
|
||||
"Kan toegangssleutel niet verversen: de authenticatiegegevens ontbreken. "
|
||||
"Probeer om de synchronisatie opnieuw te starten."
|
||||
|
||||
msgid "Untitled"
|
||||
msgstr "Naamloos"
|
||||
|
||||
msgid ""
|
||||
"Could not synchronize with OneDrive.\n"
|
||||
"\n"
|
||||
@@ -1176,10 +1329,6 @@ msgstr "Externe items verwijderd: %d."
|
||||
msgid "Fetched items: %d/%d."
|
||||
msgstr "Items opgehaald: %d/%d."
|
||||
|
||||
#, javascript-format
|
||||
msgid "State: %s."
|
||||
msgstr "Status: %s."
|
||||
|
||||
msgid "Cancelling..."
|
||||
msgstr "Bezig met annuleren..."
|
||||
|
||||
@@ -1201,12 +1350,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"
|
||||
|
||||
@@ -1217,18 +1376,9 @@ 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"
|
||||
|
||||
msgid "Untitled"
|
||||
msgstr "Naamloos"
|
||||
|
||||
msgid "This note does not have geolocation information."
|
||||
msgstr "Deze notitie bevat geen locatie-informatie."
|
||||
|
||||
@@ -1240,6 +1390,13 @@ 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 "Language"
|
||||
msgstr "Taal"
|
||||
|
||||
@@ -1270,6 +1427,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"
|
||||
|
||||
@@ -1285,18 +1446,65 @@ 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"
|
||||
|
||||
msgid "Note: Does not work in all desktop environments."
|
||||
msgstr "Let op: dit werkt niet in alle werkomgevingen."
|
||||
|
||||
msgid ""
|
||||
"This will allow Joplin to run in the background. It is recommended to enable "
|
||||
"this setting so that your notes are constantly being synchronised, thus "
|
||||
"reducing the number of conflicts."
|
||||
msgstr ""
|
||||
|
||||
msgid "Start application minimised in the tray icon"
|
||||
msgstr ""
|
||||
|
||||
msgid "Global zoom percentage"
|
||||
msgstr "Globaal zoompercentage"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Editor font size"
|
||||
msgstr "Lettertype van bewerker"
|
||||
|
||||
msgid "Editor font family"
|
||||
msgstr "Lettertype van bewerker"
|
||||
|
||||
@@ -1311,6 +1519,13 @@ msgstr ""
|
||||
msgid "Automatically update the application"
|
||||
msgstr "Applicatie automatisch bijwerken"
|
||||
|
||||
msgid "Get pre-releases when checking for updates"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "See the pre-release page for more details: %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Synchronisation interval"
|
||||
msgstr "Synchronisatietussenpoos"
|
||||
|
||||
@@ -1354,23 +1569,9 @@ msgstr ""
|
||||
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"
|
||||
|
||||
@@ -1404,10 +1605,46 @@ 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."
|
||||
|
||||
#, fuzzy
|
||||
msgid "General"
|
||||
msgstr "Algemene opties"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Synchronisation"
|
||||
msgstr "Synchronisatiestatus"
|
||||
|
||||
msgid "Appearance"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Note"
|
||||
msgstr "Notitieboeken"
|
||||
|
||||
msgid "Plugins"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Application"
|
||||
msgstr "Sluit de applicatie af."
|
||||
|
||||
#, javascript-format
|
||||
msgid "The tag \"%s\" already exists. Please choose a different name."
|
||||
msgstr ""
|
||||
@@ -1424,6 +1661,13 @@ msgstr "Joplin-exportmap"
|
||||
msgid "Evernote Export File"
|
||||
msgstr "Evernote-exportbestand"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Json Export Directory"
|
||||
msgstr "Joplin-exportmap"
|
||||
|
||||
msgid "File"
|
||||
msgstr "Bestand"
|
||||
|
||||
msgid "Directory"
|
||||
msgstr "Map"
|
||||
|
||||
@@ -1450,12 +1694,19 @@ msgid "Please specify the notebook where the notes should be imported to."
|
||||
msgstr ""
|
||||
"Geef het notitieboek op waar de notities naar moeten worden geïmporteerd."
|
||||
|
||||
msgid "Restored Notes"
|
||||
msgstr ""
|
||||
|
||||
msgid "Items that cannot be synchronised"
|
||||
msgstr "Items die niet kunnen worden gesynchroniseerd"
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s (%s): %s"
|
||||
msgstr "%s (%s): %s"
|
||||
#, fuzzy, javascript-format
|
||||
msgid "%s (%s) could not be uploaded: %s"
|
||||
msgstr "Dit bestand kan niet worden geopend: %s"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Item \"%s\" could not be downloaded: %s"
|
||||
msgstr "Dit bestand kan niet worden geopend: %s"
|
||||
|
||||
msgid ""
|
||||
"These items will remain on the device but will not be uploaded to the sync "
|
||||
@@ -1500,6 +1751,12 @@ msgstr "Aankomende alarmen"
|
||||
msgid "On %s: %s"
|
||||
msgstr "Op %s: %s"
|
||||
|
||||
msgid "Permission to use camera"
|
||||
msgstr ""
|
||||
|
||||
msgid "Your permission to use your camera is required."
|
||||
msgstr ""
|
||||
|
||||
msgid "There are currently no notes. Create one by clicking on the (+) button."
|
||||
msgstr ""
|
||||
"Er zijn momenteel geen notities. Creëer een notitie door te drukken op de "
|
||||
@@ -1530,6 +1787,10 @@ msgstr "%d notities verplaatsen naar notitieboek \"%s\"?"
|
||||
msgid "Press to set the decryption password."
|
||||
msgstr "Druk om het ontsleutelwachtwoord in te stellen."
|
||||
|
||||
#, fuzzy
|
||||
msgid "Clear alarm"
|
||||
msgstr "Alarm instellen"
|
||||
|
||||
msgid "Save alarm"
|
||||
msgstr "Alarm opslaam"
|
||||
|
||||
@@ -1542,8 +1803,34 @@ msgstr "Bevestigen"
|
||||
msgid "Cancel synchronisation"
|
||||
msgstr "Synchronisatie annuleren"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Checking... Please wait."
|
||||
msgstr "Bezig met annuleren... Even geduld."
|
||||
|
||||
#, fuzzy
|
||||
msgid "Success! Synchronisation configuration appears to be correct."
|
||||
msgstr "Synchronisatieconfiguratie controleren"
|
||||
|
||||
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 "De applicatie is geautoriseerd."
|
||||
|
||||
#, javascript-format
|
||||
msgid "Decrypting items: %d/%d"
|
||||
msgid ""
|
||||
"Could not authorise application:\n"
|
||||
"\n"
|
||||
"%s\n"
|
||||
"\n"
|
||||
"Please try again."
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Decrypted items: %s / %s"
|
||||
msgstr "Bezig met ontsleutelen van items: %d/%d"
|
||||
|
||||
msgid "New tags:"
|
||||
@@ -1576,9 +1863,20 @@ msgstr "- Locatie: zodat je locatie-informatie kunt toevoegen aan een notitie."
|
||||
msgid "Joplin website"
|
||||
msgstr "Joplin-website"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Database v%s"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "FTS enabled: %d"
|
||||
msgstr "Te verwijderen: %d"
|
||||
|
||||
msgid "Login with Dropbox"
|
||||
msgstr "Inloggen met Dropbox"
|
||||
|
||||
msgid "Enter code here"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Master Key %s"
|
||||
msgstr "Hoofdsleutel %s"
|
||||
@@ -1630,6 +1928,10 @@ msgstr "De mobiele Joplin-app ondersteunt momenteel niet dit soort links: %s"
|
||||
msgid "Unsupported image type: %s"
|
||||
msgstr "Niet-ondersteunde afbeeldingssoort: %s"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Take photo"
|
||||
msgstr "Foto bijvoegen"
|
||||
|
||||
msgid "Attach photo"
|
||||
msgstr "Foto bijvoegen"
|
||||
|
||||
@@ -1654,6 +1956,12 @@ msgstr "Metagegevens tonen"
|
||||
msgid "View on map"
|
||||
msgstr "Tonen op kaart"
|
||||
|
||||
msgid "Go to source URL"
|
||||
msgstr ""
|
||||
|
||||
msgid "Edit"
|
||||
msgstr "Bewerken"
|
||||
|
||||
msgid "Delete notebook"
|
||||
msgstr "Notitieboek verwijderen"
|
||||
|
||||
@@ -1678,5 +1986,22 @@ msgstr ""
|
||||
msgid "Welcome"
|
||||
msgstr "Welkom"
|
||||
|
||||
#~ msgid "%s (%s): %s"
|
||||
#~ msgstr "%s (%s): %s"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "The path to synchronise with when file system synchronisation is enabled. "
|
||||
#~ "See `sync.target`."
|
||||
#~ msgstr ""
|
||||
#~ "Het pad waarnaar gesynchroniseerd moet worden als bestandssysteem-"
|
||||
#~ "synchronisatie is ingeschakeld. Zie `sync.target`."
|
||||
|
||||
#, fuzzy
|
||||
#~ msgid "Joplin v%s"
|
||||
#~ msgstr "Joplin-website"
|
||||
|
||||
#~ msgid "State: %s."
|
||||
#~ msgstr "Status: %s."
|
||||
|
||||
#~ msgid "A notebook with this title already exists: \"%s\""
|
||||
#~ msgstr "Er bestaat al een notitieboek met deze titel: \"%s\""
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
# SOME DESCRIPTIVE TITLE.
|
||||
# pt_BR locale strings - Joplin.
|
||||
# Copyright (C) YEAR Laurent Cozic
|
||||
# This file is distributed under the same license as the Joplin-CLI package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
||||
# Updated by Renato Xavier da Silveira Rosa <renatoxsr@gmail.com>, 2018.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
@@ -13,7 +14,7 @@ msgstr ""
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Generator: Poedit 2.0.7\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."
|
||||
@@ -123,9 +124,10 @@ msgstr "Marca uma tarefa como feita."
|
||||
msgid "Note is not a to-do: \"%s\""
|
||||
msgstr "Nota não é uma tarefa: \"%s\""
|
||||
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
"Manages E2EE configuration. Commands are `enable`, `disable`, `decrypt`, "
|
||||
"`status` 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`."
|
||||
@@ -147,7 +149,7 @@ msgid "Completed decryption."
|
||||
msgstr "Decriptação completada."
|
||||
|
||||
msgid "Enabled"
|
||||
msgstr "Desabilitado"
|
||||
msgstr "Habilitado"
|
||||
|
||||
msgid "Disabled"
|
||||
msgstr "Desabilitado"
|
||||
@@ -162,8 +164,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."
|
||||
@@ -454,10 +456,12 @@ msgstr "Não é possível inicializar o sincronizador."
|
||||
msgid "Starting synchronisation..."
|
||||
msgstr "Iniciando sincronização..."
|
||||
|
||||
msgid "Downloading resources..."
|
||||
msgstr "Baixando os recursos..."
|
||||
|
||||
msgid "Cancelling... Please wait."
|
||||
msgstr "Cancelando... Aguarde."
|
||||
|
||||
#, 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 "
|
||||
@@ -465,7 +469,8 @@ msgid ""
|
||||
msgstr ""
|
||||
"<tag-command> pode ser \"add\", \"remove\" ou \"list\" para atribuir ou "
|
||||
"remover [tag] de [nota], ou para listar as notas associadas a [tag]. O "
|
||||
"comando `taglist` pode ser usado para listar todas as tags."
|
||||
"comando `tag list` pode ser usado para listar todas as tags (use -l para "
|
||||
"opção longa)."
|
||||
|
||||
#, javascript-format
|
||||
msgid "Invalid command: \"%s\""
|
||||
@@ -578,6 +583,20 @@ msgstr ""
|
||||
msgid "Exporting to \"%s\" as \"%s\" format. Please wait..."
|
||||
msgstr "Exportando para \"%s\" com o formato \"%s\". Por favor, aguarde..."
|
||||
|
||||
msgid "Sidebar"
|
||||
msgstr ""
|
||||
|
||||
msgid "Note list"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Note title"
|
||||
msgstr "Título do caderno:"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Note body"
|
||||
msgstr "Cadernos"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Importing from \"%s\" as \"%s\" format. Please wait..."
|
||||
msgstr "Importando de \"%s\" com o formato \"%s\". Por favor, aguarde..."
|
||||
@@ -585,8 +604,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"
|
||||
@@ -597,14 +616,43 @@ 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)"
|
||||
|
||||
#, fuzzy
|
||||
msgid "&File"
|
||||
msgstr "Arquivo"
|
||||
|
||||
msgid "About Joplin"
|
||||
msgstr "Sobre o Joplin"
|
||||
|
||||
msgid "Preferences..."
|
||||
msgstr ""
|
||||
|
||||
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"
|
||||
@@ -613,7 +661,11 @@ msgstr "Ocultar %s"
|
||||
msgid "Quit"
|
||||
msgstr "Sair"
|
||||
|
||||
msgid "Edit"
|
||||
msgid "Close Window"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "&Edit"
|
||||
msgstr "Editar"
|
||||
|
||||
msgid "Copy"
|
||||
@@ -625,12 +677,18 @@ msgstr "Cortar"
|
||||
msgid "Paste"
|
||||
msgstr "Colar"
|
||||
|
||||
msgid "Select all"
|
||||
msgstr "Selecionar tudo"
|
||||
|
||||
msgid "Bold"
|
||||
msgstr "Negrito"
|
||||
|
||||
msgid "Italic"
|
||||
msgstr "Itálico"
|
||||
|
||||
msgid "Link"
|
||||
msgstr ""
|
||||
|
||||
msgid "Insert Date Time"
|
||||
msgstr "Inserir Data e Hora"
|
||||
|
||||
@@ -640,7 +698,11 @@ msgstr "Editar com editor externo"
|
||||
msgid "Search in all the notes"
|
||||
msgstr "Pesquisar em todas as notas"
|
||||
|
||||
msgid "View"
|
||||
msgid "Search in current note"
|
||||
msgstr "Pesquisar na nota atual"
|
||||
|
||||
#, fuzzy
|
||||
msgid "&View"
|
||||
msgstr "Visualizar"
|
||||
|
||||
msgid "Toggle sidebar"
|
||||
@@ -649,22 +711,16 @@ msgstr "Alternar barra lateral"
|
||||
msgid "Toggle editor layout"
|
||||
msgstr "Alternar layout do editor"
|
||||
|
||||
msgid "Tools"
|
||||
#, fuzzy
|
||||
msgid "Focus"
|
||||
msgstr "Focar no corpo"
|
||||
|
||||
#, fuzzy
|
||||
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"
|
||||
#, fuzzy
|
||||
msgid "&Help"
|
||||
msgstr "Ajuda"
|
||||
|
||||
msgid "Website and documentation"
|
||||
@@ -673,16 +729,6 @@ 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)"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Open %s"
|
||||
msgstr "Abrir %s"
|
||||
@@ -699,15 +745,30 @@ msgstr "Cancelar"
|
||||
msgid "Current version is up-to-date."
|
||||
msgstr "A versão atual está atualizada."
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s (pre-release)"
|
||||
msgstr ""
|
||||
|
||||
msgid "An update is available, do you want to download it now?"
|
||||
msgstr "Uma atualização está disponível, você quer baixar agora?"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Your version: %s"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "New version: %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Yes"
|
||||
msgstr "Sim"
|
||||
|
||||
msgid "No"
|
||||
msgstr "Não"
|
||||
|
||||
msgid "Token has been copied to the clipboard!"
|
||||
msgstr "Token foi copiado para a área de transferência!"
|
||||
|
||||
msgid "The web clipper service is enabled and set to auto-start."
|
||||
msgstr ""
|
||||
"O serviço de web clipper está habilitado e configurado para auto-start."
|
||||
@@ -718,7 +779,7 @@ msgstr "Status: Iniciado, na porta %d"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Status: %s"
|
||||
msgstr "Status: \"%s\"."
|
||||
msgstr "Status: %s"
|
||||
|
||||
msgid "Disable Web Clipper Service"
|
||||
msgstr "Desabilitar serviço Web Clipper"
|
||||
@@ -757,13 +818,32 @@ msgstr "Passo 2: Instalar a extensão"
|
||||
msgid "Download and install the relevant extension for your browser:"
|
||||
msgstr "Baixe e instale a extensão relevante para seu browser:"
|
||||
|
||||
msgid "Check synchronisation configuration"
|
||||
msgstr "Verificar a configuração da sincronização"
|
||||
msgid "Advanced options"
|
||||
msgstr "Mostrar opções avançadas"
|
||||
|
||||
msgid "Authorisation token:"
|
||||
msgstr "Token de autorização:"
|
||||
|
||||
msgid "Copy token"
|
||||
msgstr "Copiar token"
|
||||
|
||||
msgid ""
|
||||
"This authorisation token is only needed to allow third-party applications to "
|
||||
"access Joplin."
|
||||
msgstr ""
|
||||
"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 "Check synchronisation configuration"
|
||||
msgstr "Verificar a configuração da sincronização"
|
||||
|
||||
msgid "Browse..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Apply"
|
||||
msgstr "Aplicar"
|
||||
|
||||
@@ -857,6 +937,10 @@ msgstr "Status"
|
||||
msgid "Encryption is:"
|
||||
msgstr "Encriptação está:"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Usage"
|
||||
msgstr "Uso: %s"
|
||||
|
||||
msgid "Back"
|
||||
msgstr "Voltar"
|
||||
|
||||
@@ -908,28 +992,6 @@ msgstr "Alguns itens não podem ser decriptados."
|
||||
msgid "Set the password"
|
||||
msgstr "Configurar a senha"
|
||||
|
||||
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 "Copy Markdown link"
|
||||
msgstr "Copiar link de Markdown"
|
||||
|
||||
msgid "Delete"
|
||||
msgstr "Excluir"
|
||||
|
||||
msgid "Delete notes?"
|
||||
msgstr "Excluir notas?"
|
||||
|
||||
msgid "No notes in here. Create one by clicking on \"New note\"."
|
||||
msgstr "Não há notas aqui. Crie uma, clicando em \"Nova nota\"."
|
||||
|
||||
@@ -938,9 +1000,36 @@ msgid ""
|
||||
msgstr "Atualmente, não há cadernos. Crie um, clicando em \"Novo caderno\"."
|
||||
|
||||
msgid "Location"
|
||||
msgstr ""
|
||||
msgstr "Localização"
|
||||
|
||||
msgid "URL"
|
||||
msgstr "URL"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Note History"
|
||||
msgstr "Cadernos"
|
||||
|
||||
msgid "Previous versions of this note"
|
||||
msgstr ""
|
||||
|
||||
msgid "Note properties"
|
||||
msgstr "Propriedades da nota"
|
||||
|
||||
#, 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..."
|
||||
@@ -959,6 +1048,9 @@ msgstr "Copiar caminho para a área de transferência"
|
||||
msgid "Copy Link Address"
|
||||
msgstr "Copiar endereço do link"
|
||||
|
||||
msgid "This attachment is not downloaded or not decrypted yet."
|
||||
msgstr "O anexo ainda não foi baixado ou decriptado."
|
||||
|
||||
#, javascript-format
|
||||
msgid "Unsupported link or message: %s"
|
||||
msgstr "Link ou mensagem não suportada: %s"
|
||||
@@ -971,6 +1063,9 @@ msgstr ""
|
||||
"Esta nota não possui conteúdo. Clique em \"%s\" para alternar para o editor, "
|
||||
"e edite a nota."
|
||||
|
||||
msgid "Only one note can be printed or exported to PDF at a time."
|
||||
msgstr ""
|
||||
|
||||
msgid "strong text"
|
||||
msgstr "texto forte"
|
||||
|
||||
@@ -996,9 +1091,6 @@ msgstr "Definir alarme"
|
||||
msgid "In: %s"
|
||||
msgstr "Em: %s"
|
||||
|
||||
msgid "Note properties"
|
||||
msgstr ""
|
||||
|
||||
msgid "Hyperlink"
|
||||
msgstr "Hiperlink"
|
||||
|
||||
@@ -1024,7 +1116,7 @@ msgid "Click to stop external editing"
|
||||
msgstr "Clique para encerrar edição externa"
|
||||
|
||||
msgid "Watching..."
|
||||
msgstr "Verificando..."
|
||||
msgstr "Observando alterações..."
|
||||
|
||||
msgid "to-do"
|
||||
msgstr "tarefa"
|
||||
@@ -1060,26 +1152,82 @@ msgstr "Opções de Encriptação"
|
||||
msgid "Clipper Options"
|
||||
msgstr "Opções do 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 ""
|
||||
"Excluir o caderno? Todas as notas e sub-cadernos dentro deste também serão "
|
||||
"excluídas."
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Remove tag \"%s\" from all notes?"
|
||||
msgstr "Remover esta tag de todas as notas?"
|
||||
|
||||
msgid "Remove this search from the sidebar?"
|
||||
msgstr "Remover essa pesquisa da barra lateral?"
|
||||
|
||||
msgid "Delete"
|
||||
msgstr "Excluir"
|
||||
|
||||
msgid "Rename"
|
||||
msgstr "Renomear"
|
||||
|
||||
msgid "Synchronise"
|
||||
msgstr "Sincronizar"
|
||||
|
||||
msgid "Notebooks"
|
||||
msgstr "Cadernos"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Decrypting items: %d/%d"
|
||||
msgstr "Decriptando itens: %d/%d"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Fetching resources: %d"
|
||||
msgstr "Buscando recursos: %d"
|
||||
|
||||
msgid "Please select where the sync status should be exported to"
|
||||
msgstr ""
|
||||
"Favor selecionar o local para onde o status de sincronia deveria ser "
|
||||
"exportado"
|
||||
|
||||
msgid "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"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Delete note \"%s\"?"
|
||||
msgstr "Apagar o caderno \"%s\"?"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Delete these %d notes?"
|
||||
msgstr "Excluir 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"
|
||||
@@ -1121,6 +1269,9 @@ msgstr ""
|
||||
"Não é possível atualizar token: faltam dados de autenticação. Iniciar a "
|
||||
"sincronização novamente pode corrigir o problema."
|
||||
|
||||
msgid "Untitled"
|
||||
msgstr "Sem título"
|
||||
|
||||
msgid ""
|
||||
"Could not synchronize with OneDrive.\n"
|
||||
"\n"
|
||||
@@ -1168,10 +1319,6 @@ msgstr "Itens remotos excluídos: %d."
|
||||
msgid "Fetched items: %d/%d."
|
||||
msgstr "Itens pesquisados: %d/%d."
|
||||
|
||||
#, javascript-format
|
||||
msgid "State: %s."
|
||||
msgstr "Estado: \"%s\"."
|
||||
|
||||
msgid "Cancelling..."
|
||||
msgstr "Cancelando..."
|
||||
|
||||
@@ -1193,12 +1340,22 @@ 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 ""
|
||||
|
||||
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"
|
||||
|
||||
@@ -1210,18 +1367,9 @@ 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 ataualização"
|
||||
|
||||
msgid "created date"
|
||||
msgstr "data de criação"
|
||||
|
||||
msgid "Untitled"
|
||||
msgstr "Sem título"
|
||||
|
||||
msgid "This note does not have geolocation information."
|
||||
msgstr "Esta nota não possui informações de geolocalização."
|
||||
|
||||
@@ -1233,6 +1381,16 @@ 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 "Language"
|
||||
msgstr "Idioma"
|
||||
|
||||
@@ -1261,7 +1419,11 @@ msgid "Sort notes by"
|
||||
msgstr "Ordenar notas por"
|
||||
|
||||
msgid "Reverse sort order"
|
||||
msgstr "Inverter ordem de classificação."
|
||||
msgstr "Inverter ordem de classificação"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Sort notebooks by"
|
||||
msgstr "Ordenar notas por"
|
||||
|
||||
msgid "Save geo-location with notes"
|
||||
msgstr "Salvar geolocalização com notas"
|
||||
@@ -1278,18 +1440,67 @@ msgstr "Focar no corpo"
|
||||
msgid "When creating a new note:"
|
||||
msgstr "Quando criar uma nota nova:"
|
||||
|
||||
msgid "Enable soft breaks"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Enable math expressions"
|
||||
msgstr "Habilitar encriptação"
|
||||
|
||||
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 "Exibir tray icon"
|
||||
|
||||
msgid "Note: Does not work in all desktop environments."
|
||||
msgstr "Nota: não funciona em todos os ambientes de desktop"
|
||||
msgstr "Nota: não funciona em todos os ambientes de desktop."
|
||||
|
||||
msgid ""
|
||||
"This will allow Joplin to run in the background. It is recommended to enable "
|
||||
"this setting so that your notes are constantly being synchronised, thus "
|
||||
"reducing the number of conflicts."
|
||||
msgstr ""
|
||||
"Isso irá permitir que o Joplin continue sendo executado em segundo plano. É "
|
||||
"recomendado que você habilita essa configuração para que suas notas "
|
||||
"sejamconstantemente sincronizadas, de modo a reduzir as chances de conflitos."
|
||||
|
||||
msgid "Start application minimised in the tray icon"
|
||||
msgstr ""
|
||||
msgstr "Iniciar aplicativo minimizado na barra de tarefas"
|
||||
|
||||
msgid "Global zoom percentage"
|
||||
msgstr "Porcentagem global do zoom"
|
||||
|
||||
msgid "Editor font size"
|
||||
msgstr "Tamanho da fonte no Editor"
|
||||
|
||||
msgid "Editor font family"
|
||||
msgstr "Família de fontes do editor"
|
||||
|
||||
@@ -1303,6 +1514,13 @@ msgstr ""
|
||||
msgid "Automatically update the application"
|
||||
msgstr "Atualizar automaticamente o aplicativo"
|
||||
|
||||
msgid "Get pre-releases when checking for updates"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "See the pre-release page for more details: %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Synchronisation interval"
|
||||
msgstr "Intervalo de sincronização"
|
||||
|
||||
@@ -1345,23 +1563,9 @@ msgstr ""
|
||||
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 ""
|
||||
|
||||
msgid "Nextcloud username"
|
||||
msgstr "Usuário da Nextcloud"
|
||||
|
||||
@@ -1390,18 +1594,54 @@ msgstr ""
|
||||
"os certificados, ou caminhos para arquivos cert. Por exemplo, /my/cert_dir, /"
|
||||
"other/custom.pem. Note que se você fizer mudanças nas configurações de TLS, "
|
||||
"você tem que salvar as mudanças antes de clicar em \"Verificar a "
|
||||
"configuração da sincronização\""
|
||||
"configuração da sincronização\"."
|
||||
|
||||
msgid "Ignore TLS certificate errors"
|
||||
msgstr "Ignorar erros de certificados TLS"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Enable note history"
|
||||
msgstr "Habilitar encriptação"
|
||||
|
||||
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 da opção inválida: \"%s\". Os valores possíveis são: %s."
|
||||
|
||||
#, fuzzy
|
||||
msgid "General"
|
||||
msgstr "Opções Gerais"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Synchronisation"
|
||||
msgstr "Status de sincronização"
|
||||
|
||||
msgid "Appearance"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Note"
|
||||
msgstr "Cadernos"
|
||||
|
||||
msgid "Plugins"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Application"
|
||||
msgstr "Localização"
|
||||
|
||||
#, javascript-format
|
||||
msgid "The tag \"%s\" already exists. Please choose a different name."
|
||||
msgstr ""
|
||||
msgstr "A tag \"%s\" já existe. Escolha um nome diferente."
|
||||
|
||||
msgid "Joplin Export File"
|
||||
msgstr "Arquivo de Exportação do Joplin"
|
||||
@@ -1415,8 +1655,14 @@ msgstr "Diretório de Exportação do Joplin"
|
||||
msgid "Evernote Export File"
|
||||
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"
|
||||
msgstr "Diretório"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Cannot load \"%s\" module for format \"%s\""
|
||||
@@ -1441,12 +1687,19 @@ msgid "Please specify the notebook where the notes should be imported to."
|
||||
msgstr ""
|
||||
"Por favor, especifique o caderno para onde as notas deveriam ser importadas."
|
||||
|
||||
msgid "Restored Notes"
|
||||
msgstr ""
|
||||
|
||||
msgid "Items that cannot be synchronised"
|
||||
msgstr "Os itens não podem ser sincronizados"
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s (%s): %s"
|
||||
msgstr "%s (%s): %s"
|
||||
#, fuzzy, javascript-format
|
||||
msgid "%s (%s) could not be uploaded: %s"
|
||||
msgstr "Este arquivo não pôde ser aberto: %s"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Item \"%s\" could not be downloaded: %s"
|
||||
msgstr "Este arquivo não pôde ser aberto: %s"
|
||||
|
||||
msgid ""
|
||||
"These items will remain on the device but will not be uploaded to the sync "
|
||||
@@ -1490,6 +1743,12 @@ msgstr "Próximos alarmes"
|
||||
msgid "On %s: %s"
|
||||
msgstr "Em %s: %s"
|
||||
|
||||
msgid "Permission to use camera"
|
||||
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â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 (+)."
|
||||
|
||||
@@ -1518,6 +1777,9 @@ msgstr "Mover %d notas para o caderno \"%s\"?"
|
||||
msgid "Press to set the decryption password."
|
||||
msgstr "Pressione para configurar a senha de decriptação."
|
||||
|
||||
msgid "Clear alarm"
|
||||
msgstr "Limpar alarme"
|
||||
|
||||
msgid "Save alarm"
|
||||
msgstr "Salvar alarme"
|
||||
|
||||
@@ -1530,9 +1792,40 @@ msgstr "Confirmar"
|
||||
msgid "Cancel synchronisation"
|
||||
msgstr "Cancelar sincronização"
|
||||
|
||||
msgid "Checking... Please wait."
|
||||
msgstr "Verificando... Por favor aguarde."
|
||||
|
||||
msgid "Success! Synchronisation configuration appears to be correct."
|
||||
msgstr "Sucesso! A configuração da sincronização parece estar correta."
|
||||
|
||||
msgid ""
|
||||
"Error. Please check that URL, username, password, etc. are correct and that "
|
||||
"the sync target is accessible. The reported error was:"
|
||||
msgstr ""
|
||||
"Erro. Verifique se a URL, nome de usuário, senha, etc., estão corretos e "
|
||||
"tenha certeza que o destino da sincronização está acessível. O erro "
|
||||
"reportado foi:"
|
||||
|
||||
msgid "The application has been authorised!"
|
||||
msgstr "O aplicativo foi autorizado!"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Decrypting items: %d/%d"
|
||||
msgstr "Decriptando itens: %d/%d."
|
||||
msgid ""
|
||||
"Could not authorise application:\n"
|
||||
"\n"
|
||||
"%s\n"
|
||||
"\n"
|
||||
"Please try again."
|
||||
msgstr ""
|
||||
"Não foi possível autorizar o aplicativo:\n"
|
||||
"\n"
|
||||
"%s\n"
|
||||
"\n"
|
||||
"Por favor tente novamente."
|
||||
|
||||
#, javascript-format
|
||||
msgid "Decrypted items: %s / %s"
|
||||
msgstr "Itens decriptados: %s / %s"
|
||||
|
||||
msgid "New tags:"
|
||||
msgstr "Novas tags:"
|
||||
@@ -1552,8 +1845,8 @@ msgid ""
|
||||
"- Storage: to allow attaching files to notes and to enable filesystem "
|
||||
"synchronisation."
|
||||
msgstr ""
|
||||
"- Armazenamento: para permitir anexar arquivos a notas, e para permitir a "
|
||||
"sincronização do sistema de arquivos "
|
||||
"- Armazenamento: para permitir anexar arquivos a notas e para permitir a "
|
||||
"sincronização do sistema de arquivos."
|
||||
|
||||
msgid "- Camera: to allow taking a picture and attaching it to a note."
|
||||
msgstr "- Câmera: para permitir tirar fotos e anexar a uma nota."
|
||||
@@ -1566,9 +1859,21 @@ msgstr ""
|
||||
msgid "Joplin website"
|
||||
msgstr "Site do Joplin"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Database v%s"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "FTS enabled: %d"
|
||||
msgstr "Para excluir: %d"
|
||||
|
||||
msgid "Login with Dropbox"
|
||||
msgstr "Login com Dropbox"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Enter code here"
|
||||
msgstr "Entrar no modo de linha de comando"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Master Key %s"
|
||||
msgstr "Chave Master %s"
|
||||
@@ -1620,6 +1925,9 @@ msgstr "O app mobile do Joplin não suporta, atualmente, esse tipo de link: %s"
|
||||
msgid "Unsupported image type: %s"
|
||||
msgstr "Tipo de imagem não suportada: %s"
|
||||
|
||||
msgid "Take photo"
|
||||
msgstr "Tirar foto"
|
||||
|
||||
msgid "Attach photo"
|
||||
msgstr "Anexar foto"
|
||||
|
||||
@@ -1644,6 +1952,12 @@ msgstr "Exibir metadados"
|
||||
msgid "View on map"
|
||||
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"
|
||||
|
||||
@@ -1666,6 +1980,26 @@ msgstr "Você não possui cadernos. Crie um clicando no botão (+)."
|
||||
msgid "Welcome"
|
||||
msgstr "Bem-vindo"
|
||||
|
||||
#~ msgid "%s (%s): %s"
|
||||
#~ msgstr "%s (%s): %s"
|
||||
|
||||
#~ 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`."
|
||||
|
||||
#, fuzzy
|
||||
#~ msgid "Joplin v%s"
|
||||
#~ msgstr "Site do Joplin"
|
||||
|
||||
#~ msgid "Delete notes?"
|
||||
#~ msgstr "Excluir notas?"
|
||||
|
||||
#~ msgid "State: %s."
|
||||
#~ msgstr "Estado: \"%s\"."
|
||||
|
||||
#~ msgid "A notebook with this title already exists: \"%s\""
|
||||
#~ msgstr "Já existe caderno com este título: \"%s\""
|
||||
|
||||
@@ -1706,9 +2040,6 @@ msgstr "Bem-vindo"
|
||||
#~ msgid "Give focus to previous pane"
|
||||
#~ msgstr "Dar o foco para o painel anterior"
|
||||
|
||||
#~ msgid "Enter command line mode"
|
||||
#~ msgstr "Entrar no modo de linha de comando"
|
||||
|
||||
#~ msgid "Exit command line mode"
|
||||
#~ msgstr "Sair do modo de linha de comando"
|
||||
|
||||
@@ -1762,8 +2093,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:"
|
||||
@@ -414,6 +414,9 @@ msgstr "Nu se poate inițializa sincronizatorul."
|
||||
msgid "Starting synchronisation..."
|
||||
msgstr "Se începe sincronizarea..."
|
||||
|
||||
msgid "Downloading resources..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Cancelling... Please wait."
|
||||
msgstr "Se anulează... Vă rugăm să așteptați."
|
||||
|
||||
@@ -518,6 +521,20 @@ msgstr ""
|
||||
msgid "Exporting to \"%s\" as \"%s\" format. Please wait..."
|
||||
msgstr "Se exportă către \"%s\" în format \"%s\". Vă rugăm să așteotați..."
|
||||
|
||||
msgid "Sidebar"
|
||||
msgstr ""
|
||||
|
||||
msgid "Note list"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Note title"
|
||||
msgstr "Titlul caietului de notițe:"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Note body"
|
||||
msgstr "Caiete de notițe"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Importing from \"%s\" as \"%s\" format. Please wait..."
|
||||
msgstr ""
|
||||
@@ -525,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ță"
|
||||
@@ -537,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"
|
||||
@@ -553,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"
|
||||
@@ -565,12 +615,19 @@ msgstr "Tăiați"
|
||||
msgid "Paste"
|
||||
msgstr "Lipește"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Select all"
|
||||
msgstr "Selectați data"
|
||||
|
||||
msgid "Bold"
|
||||
msgstr ""
|
||||
|
||||
msgid "Italic"
|
||||
msgstr ""
|
||||
|
||||
msgid "Link"
|
||||
msgstr ""
|
||||
|
||||
msgid "Insert Date Time"
|
||||
msgstr ""
|
||||
|
||||
@@ -580,7 +637,12 @@ msgstr "Editați într-un editor extern"
|
||||
msgid "Search in all the notes"
|
||||
msgstr "Căutați în toate notițele"
|
||||
|
||||
msgid "View"
|
||||
#, fuzzy
|
||||
msgid "Search in current note"
|
||||
msgstr "Căutați în toate notițele"
|
||||
|
||||
#, fuzzy
|
||||
msgid "&View"
|
||||
msgstr "Vizualizați"
|
||||
|
||||
msgid "Toggle sidebar"
|
||||
@@ -589,22 +651,15 @@ msgstr ""
|
||||
msgid "Toggle editor layout"
|
||||
msgstr ""
|
||||
|
||||
msgid "Tools"
|
||||
msgstr "Unelte"
|
||||
|
||||
msgid "Synchronisation status"
|
||||
msgstr "Statusul sincronizării"
|
||||
|
||||
msgid "Web clipper options"
|
||||
msgid "Focus"
|
||||
msgstr ""
|
||||
|
||||
msgid "Encryption options"
|
||||
msgstr "Opțiuni de criptare"
|
||||
#, fuzzy
|
||||
msgid "&Tools"
|
||||
msgstr "Unelte"
|
||||
|
||||
msgid "General Options"
|
||||
msgstr "Opțiuni Generale"
|
||||
|
||||
msgid "Help"
|
||||
#, fuzzy
|
||||
msgid "&Help"
|
||||
msgstr "Ajutor"
|
||||
|
||||
msgid "Website and documentation"
|
||||
@@ -613,16 +668,6 @@ 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)"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Open %s"
|
||||
msgstr "Deschideți %s"
|
||||
@@ -639,15 +684,30 @@ msgstr "Anulați"
|
||||
msgid "Current version is up-to-date."
|
||||
msgstr "Versiunea curentă este actualizată."
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s (pre-release)"
|
||||
msgstr ""
|
||||
|
||||
msgid "An update is available, do you want to download it now?"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Your version: %s"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "New version: %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Yes"
|
||||
msgstr "Da"
|
||||
|
||||
msgid "No"
|
||||
msgstr "Nu"
|
||||
|
||||
msgid "Token has been copied to the clipboard!"
|
||||
msgstr ""
|
||||
|
||||
msgid "The web clipper service is enabled and set to auto-start."
|
||||
msgstr ""
|
||||
|
||||
@@ -691,13 +751,31 @@ msgstr "Pasul 2: Instalați extensia"
|
||||
msgid "Download and install the relevant extension for your browser:"
|
||||
msgstr ""
|
||||
|
||||
msgid "Check synchronisation configuration"
|
||||
#, fuzzy
|
||||
msgid "Advanced options"
|
||||
msgstr "Afișați opțiunile avansate"
|
||||
|
||||
msgid "Authorisation token:"
|
||||
msgstr ""
|
||||
|
||||
msgid "Copy token"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"This authorisation token is only needed to allow third-party applications to "
|
||||
"access Joplin."
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Notes and settings are stored in: %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Check synchronisation configuration"
|
||||
msgstr ""
|
||||
|
||||
msgid "Browse..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Apply"
|
||||
msgstr "Aplicați"
|
||||
|
||||
@@ -776,6 +854,10 @@ msgstr "Status"
|
||||
msgid "Encryption is:"
|
||||
msgstr "Criptarea este:"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Usage"
|
||||
msgstr "Utilizare: %s"
|
||||
|
||||
msgid "Back"
|
||||
msgstr "Înapoi"
|
||||
|
||||
@@ -826,28 +908,6 @@ msgstr "Câțiva itemi nu pot fi descriptați."
|
||||
msgid "Set the password"
|
||||
msgstr "Setați parola"
|
||||
|
||||
msgid "Add or remove tags"
|
||||
msgstr "Adăugați ori eliminați etichete"
|
||||
|
||||
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ă"
|
||||
|
||||
msgid "Copy Markdown link"
|
||||
msgstr "Copiați link-ul Markdown"
|
||||
|
||||
msgid "Delete"
|
||||
msgstr "Ștergeți"
|
||||
|
||||
msgid "Delete notes?"
|
||||
msgstr "Ștergeți notițele?"
|
||||
|
||||
msgid "No notes in here. Create one by clicking on \"New note\"."
|
||||
msgstr ""
|
||||
|
||||
@@ -861,6 +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..."
|
||||
|
||||
@@ -877,6 +964,9 @@ msgstr "Copiați locația în clipboard"
|
||||
msgid "Copy Link Address"
|
||||
msgstr "Copați adresa link-ului"
|
||||
|
||||
msgid "This attachment is not downloaded or not decrypted yet."
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Unsupported link or message: %s"
|
||||
msgstr ""
|
||||
@@ -887,6 +977,9 @@ msgid ""
|
||||
"note."
|
||||
msgstr ""
|
||||
|
||||
msgid "Only one note can be printed or exported to PDF at a time."
|
||||
msgstr ""
|
||||
|
||||
msgid "strong text"
|
||||
msgstr ""
|
||||
|
||||
@@ -912,9 +1005,6 @@ msgstr "Setați alarma"
|
||||
msgid "In: %s"
|
||||
msgstr "În: %s"
|
||||
|
||||
msgid "Note properties"
|
||||
msgstr ""
|
||||
|
||||
msgid "Hyperlink"
|
||||
msgstr "Hyperlink"
|
||||
|
||||
@@ -976,24 +1066,81 @@ 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?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Delete"
|
||||
msgstr "Ștergeți"
|
||||
|
||||
msgid "Rename"
|
||||
msgstr "Redenumiți"
|
||||
|
||||
msgid "Synchronise"
|
||||
msgstr "Sincronizați"
|
||||
|
||||
msgid "Notebooks"
|
||||
msgstr "Caiete de notițe"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Decrypting items: %d/%d"
|
||||
msgstr "Se decriptează itemi: %d/%d"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Fetching resources: %d"
|
||||
msgstr "Resurse: %d."
|
||||
|
||||
msgid "Please select where the sync status should be exported to"
|
||||
msgstr ""
|
||||
|
||||
msgid "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"
|
||||
@@ -1033,6 +1180,9 @@ msgid ""
|
||||
"synchronisation again may fix the problem."
|
||||
msgstr ""
|
||||
|
||||
msgid "Untitled"
|
||||
msgstr "Fără denumire"
|
||||
|
||||
msgid ""
|
||||
"Could not synchronize with OneDrive.\n"
|
||||
"\n"
|
||||
@@ -1074,10 +1224,6 @@ msgstr ""
|
||||
msgid "Fetched items: %d/%d."
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "State: %s."
|
||||
msgstr "Statut: %s."
|
||||
|
||||
msgid "Cancelling..."
|
||||
msgstr "Se amână..."
|
||||
|
||||
@@ -1099,12 +1245,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"
|
||||
|
||||
@@ -1115,18 +1271,9 @@ 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"
|
||||
|
||||
msgid "Untitled"
|
||||
msgstr "Fără denumire"
|
||||
|
||||
msgid "This note does not have geolocation information."
|
||||
msgstr ""
|
||||
|
||||
@@ -1138,6 +1285,13 @@ 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 "Language"
|
||||
msgstr "Limbă"
|
||||
|
||||
@@ -1168,6 +1322,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"
|
||||
|
||||
@@ -1183,18 +1341,65 @@ 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"
|
||||
|
||||
msgid "Note: Does not work in all desktop environments."
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"This will allow Joplin to run in the background. It is recommended to enable "
|
||||
"this setting so that your notes are constantly being synchronised, thus "
|
||||
"reducing the number of conflicts."
|
||||
msgstr ""
|
||||
|
||||
msgid "Start application minimised in the tray icon"
|
||||
msgstr ""
|
||||
|
||||
msgid "Global zoom percentage"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Editor font size"
|
||||
msgstr "Editează notiță."
|
||||
|
||||
msgid "Editor font family"
|
||||
msgstr ""
|
||||
|
||||
@@ -1206,6 +1411,13 @@ msgstr ""
|
||||
msgid "Automatically update the application"
|
||||
msgstr "Actualizați automat aplicația"
|
||||
|
||||
msgid "Get pre-releases when checking for updates"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "See the pre-release page for more details: %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Synchronisation interval"
|
||||
msgstr "Intervalul de sincronizare"
|
||||
|
||||
@@ -1243,21 +1455,9 @@ 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"
|
||||
|
||||
@@ -1286,10 +1486,46 @@ 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 ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "General"
|
||||
msgstr "Opțiuni Generale"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Synchronisation"
|
||||
msgstr "Statusul sincronizării"
|
||||
|
||||
msgid "Appearance"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Note"
|
||||
msgstr "Caiete de notițe"
|
||||
|
||||
msgid "Plugins"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Application"
|
||||
msgstr "Duplicați"
|
||||
|
||||
#, javascript-format
|
||||
msgid "The tag \"%s\" already exists. Please choose a different name."
|
||||
msgstr ""
|
||||
@@ -1306,6 +1542,12 @@ msgstr ""
|
||||
msgid "Evernote Export File"
|
||||
msgstr ""
|
||||
|
||||
msgid "Json Export Directory"
|
||||
msgstr ""
|
||||
|
||||
msgid "File"
|
||||
msgstr "Fișier"
|
||||
|
||||
msgid "Directory"
|
||||
msgstr ""
|
||||
|
||||
@@ -1329,12 +1571,19 @@ msgstr "Nu există date de exportat."
|
||||
msgid "Please specify the notebook where the notes should be imported to."
|
||||
msgstr ""
|
||||
|
||||
msgid "Restored Notes"
|
||||
msgstr ""
|
||||
|
||||
msgid "Items that cannot be synchronised"
|
||||
msgstr "Itemii nu pot fi sincronizați"
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s (%s): %s"
|
||||
msgstr "%s (%s): %s"
|
||||
#, fuzzy, javascript-format
|
||||
msgid "%s (%s) could not be uploaded: %s"
|
||||
msgstr "Acest fișier nu a putut fi deschis: %s"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Item \"%s\" could not be downloaded: %s"
|
||||
msgstr "Acest fișier nu a putut fi deschis: %s"
|
||||
|
||||
msgid ""
|
||||
"These items will remain on the device but will not be uploaded to the sync "
|
||||
@@ -1375,6 +1624,12 @@ msgstr "Alarmele următoare"
|
||||
msgid "On %s: %s"
|
||||
msgstr "Pe %s: %s"
|
||||
|
||||
msgid "Permission to use camera"
|
||||
msgstr ""
|
||||
|
||||
msgid "Your permission to use your camera is required."
|
||||
msgstr ""
|
||||
|
||||
msgid "There are currently no notes. Create one by clicking on the (+) button."
|
||||
msgstr ""
|
||||
|
||||
@@ -1403,6 +1658,10 @@ msgstr "Mutați %d notițe în caietul de notițe \"%s\"?"
|
||||
msgid "Press to set the decryption password."
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Clear alarm"
|
||||
msgstr "Setați alarma"
|
||||
|
||||
msgid "Save alarm"
|
||||
msgstr "Salvați alarma"
|
||||
|
||||
@@ -1415,8 +1674,32 @@ msgstr "Confirmați"
|
||||
msgid "Cancel synchronisation"
|
||||
msgstr "Amânați sincronizarea"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Checking... Please wait."
|
||||
msgstr "Se anulează... Vă rugăm să așteptați."
|
||||
|
||||
msgid "Success! Synchronisation configuration appears to be correct."
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"Error. Please check that URL, username, password, etc. are correct and that "
|
||||
"the sync target is accessible. The reported error was:"
|
||||
msgstr ""
|
||||
|
||||
msgid "The application has been authorised!"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Decrypting items: %d/%d"
|
||||
msgid ""
|
||||
"Could not authorise application:\n"
|
||||
"\n"
|
||||
"%s\n"
|
||||
"\n"
|
||||
"Please try again."
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Decrypted items: %s / %s"
|
||||
msgstr "Se decriptează itemi: %d/%d"
|
||||
|
||||
msgid "New tags:"
|
||||
@@ -1444,9 +1727,20 @@ msgstr ""
|
||||
msgid "Joplin website"
|
||||
msgstr "Website Joplin"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Database v%s"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "FTS enabled: %d"
|
||||
msgstr "De șters: %d"
|
||||
|
||||
msgid "Login with Dropbox"
|
||||
msgstr "Autentificați-vă cu Dropbox"
|
||||
|
||||
msgid "Enter code here"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Master Key %s"
|
||||
msgstr ""
|
||||
@@ -1498,6 +1792,10 @@ msgstr ""
|
||||
msgid "Unsupported image type: %s"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Take photo"
|
||||
msgstr "Atașează imagine"
|
||||
|
||||
msgid "Attach photo"
|
||||
msgstr "Atașează imagine"
|
||||
|
||||
@@ -1522,6 +1820,12 @@ msgstr "Afișați metadatele"
|
||||
msgid "View on map"
|
||||
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"
|
||||
|
||||
@@ -1545,5 +1849,15 @@ msgstr ""
|
||||
msgid "Welcome"
|
||||
msgstr "Bine ați venit"
|
||||
|
||||
#~ msgid "%s (%s): %s"
|
||||
#~ msgstr "%s (%s): %s"
|
||||
|
||||
#, fuzzy
|
||||
#~ msgid "Joplin v%s"
|
||||
#~ msgstr "Website Joplin"
|
||||
|
||||
#~ msgid "State: %s."
|
||||
#~ msgstr "Statut: %s."
|
||||
|
||||
#~ msgid "A notebook with this title already exists: \"%s\""
|
||||
#~ msgstr "Un caiet de notițe cu acest titlu există deja: \"%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`."
|
||||
@@ -455,6 +456,9 @@ msgstr "Ni moč zagnati sinhronizatorja."
|
||||
msgid "Starting synchronisation..."
|
||||
msgstr "Sinhronizacija se začenja."
|
||||
|
||||
msgid "Downloading resources..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Cancelling... Please wait."
|
||||
msgstr "V preklicu...Prosim počakajte."
|
||||
|
||||
@@ -579,6 +583,20 @@ msgstr ""
|
||||
msgid "Exporting to \"%s\" as \"%s\" format. Please wait..."
|
||||
msgstr "Izvažam v \"%s\" kot \"%s\" format. Prosim počakajte..."
|
||||
|
||||
msgid "Sidebar"
|
||||
msgstr ""
|
||||
|
||||
msgid "Note list"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Note title"
|
||||
msgstr "Naslov beležnice:"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Note body"
|
||||
msgstr "Beležnice"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Importing from \"%s\" as \"%s\" format. Please wait..."
|
||||
msgstr "Uvažam v \"%s\" kot \"%s\" format. Prosim počakajte..."
|
||||
@@ -586,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"
|
||||
@@ -598,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"
|
||||
@@ -614,7 +661,11 @@ msgstr "Skrij %s"
|
||||
msgid "Quit"
|
||||
msgstr "Izhod"
|
||||
|
||||
msgid "Edit"
|
||||
msgid "Close Window"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "&Edit"
|
||||
msgstr "Uredi"
|
||||
|
||||
msgid "Copy"
|
||||
@@ -626,12 +677,19 @@ msgstr "Izreži"
|
||||
msgid "Paste"
|
||||
msgstr "Prilepi"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Select all"
|
||||
msgstr "Izberi datum"
|
||||
|
||||
msgid "Bold"
|
||||
msgstr ""
|
||||
|
||||
msgid "Italic"
|
||||
msgstr ""
|
||||
|
||||
msgid "Link"
|
||||
msgstr ""
|
||||
|
||||
msgid "Insert Date Time"
|
||||
msgstr ""
|
||||
|
||||
@@ -641,7 +699,12 @@ msgstr ""
|
||||
msgid "Search in all the notes"
|
||||
msgstr "Išči znotraj vseh zabeležk"
|
||||
|
||||
msgid "View"
|
||||
#, fuzzy
|
||||
msgid "Search in current note"
|
||||
msgstr "Išči znotraj vseh zabeležk"
|
||||
|
||||
#, fuzzy
|
||||
msgid "&View"
|
||||
msgstr "Pogled"
|
||||
|
||||
msgid "Toggle sidebar"
|
||||
@@ -650,22 +713,16 @@ msgstr ""
|
||||
msgid "Toggle editor layout"
|
||||
msgstr "Spremeni izgled urejevalnika"
|
||||
|
||||
msgid "Tools"
|
||||
#, fuzzy
|
||||
msgid "Focus"
|
||||
msgstr "Fokusiraj vsebino"
|
||||
|
||||
#, 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"
|
||||
@@ -674,16 +731,6 @@ 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)"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Open %s"
|
||||
msgstr "Odpri %s"
|
||||
@@ -700,15 +747,30 @@ msgstr "Prekliči"
|
||||
msgid "Current version is up-to-date."
|
||||
msgstr "Sedanja verzija je najnovejša."
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s (pre-release)"
|
||||
msgstr ""
|
||||
|
||||
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: %s"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "New version: %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Yes"
|
||||
msgstr "Da"
|
||||
|
||||
msgid "No"
|
||||
msgstr "Ne"
|
||||
|
||||
msgid "Token has been copied to the clipboard!"
|
||||
msgstr ""
|
||||
|
||||
msgid "The web clipper service is enabled and set to auto-start."
|
||||
msgstr ""
|
||||
|
||||
@@ -752,13 +814,31 @@ msgstr ""
|
||||
msgid "Download and install the relevant extension for your browser:"
|
||||
msgstr ""
|
||||
|
||||
msgid "Check synchronisation configuration"
|
||||
msgstr "Preveri nastavitve sinhronizacije"
|
||||
#, fuzzy
|
||||
msgid "Advanced options"
|
||||
msgstr "Pokaži napredne možnosti"
|
||||
|
||||
msgid "Authorisation token:"
|
||||
msgstr ""
|
||||
|
||||
msgid "Copy token"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"This authorisation token is only needed to allow third-party applications to "
|
||||
"access Joplin."
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Notes and settings are stored in: %s"
|
||||
msgstr "Zabeležke in nastavitve so shranjene v: %s"
|
||||
|
||||
msgid "Check synchronisation configuration"
|
||||
msgstr "Preveri nastavitve sinhronizacije"
|
||||
|
||||
msgid "Browse..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Apply"
|
||||
msgstr ""
|
||||
|
||||
@@ -852,6 +932,10 @@ msgstr "Status"
|
||||
msgid "Encryption is:"
|
||||
msgstr "Enkripcija je:"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Usage"
|
||||
msgstr "Uporaba: %s"
|
||||
|
||||
msgid "Back"
|
||||
msgstr "Nazaj"
|
||||
|
||||
@@ -905,29 +989,6 @@ msgstr "Nekateri predmeti ne morejo biti dekriptirani."
|
||||
msgid "Set the password"
|
||||
msgstr "Nastavi geslo"
|
||||
|
||||
msgid "Add or remove tags"
|
||||
msgstr "Dodaj ali odstrani oznake"
|
||||
|
||||
msgid "Duplicate"
|
||||
msgstr ""
|
||||
|
||||
#, 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 "Copy Markdown link"
|
||||
msgstr "Sistem označevanja"
|
||||
|
||||
msgid "Delete"
|
||||
msgstr "Izbriši"
|
||||
|
||||
msgid "Delete notes?"
|
||||
msgstr "Izbriši zabeležke?"
|
||||
|
||||
msgid "No notes in here. Create one by clicking on \"New note\"."
|
||||
msgstr ""
|
||||
"Trenutno ni tukaj nobene zabeležke. Ustvarite jo z klikom na \"Nova zabeležka"
|
||||
@@ -945,6 +1006,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..."
|
||||
|
||||
@@ -961,6 +1049,9 @@ msgstr ""
|
||||
msgid "Copy Link Address"
|
||||
msgstr ""
|
||||
|
||||
msgid "This attachment is not downloaded or not decrypted yet."
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Unsupported link or message: %s"
|
||||
msgstr "Nepodprta povezava ali sporočilo: %s"
|
||||
@@ -973,6 +1064,9 @@ msgstr ""
|
||||
"Ta zabeležka nima vsebine. Kliknite na \"%s\" da menjate med urejevalnikom "
|
||||
"in urejanje zabeležke."
|
||||
|
||||
msgid "Only one note can be printed or exported to PDF at a time."
|
||||
msgstr ""
|
||||
|
||||
msgid "strong text"
|
||||
msgstr ""
|
||||
|
||||
@@ -998,9 +1092,6 @@ msgstr "Nastavi alarm"
|
||||
msgid "In: %s"
|
||||
msgstr "%s: %s"
|
||||
|
||||
msgid "Note properties"
|
||||
msgstr ""
|
||||
|
||||
msgid "Hyperlink"
|
||||
msgstr ""
|
||||
|
||||
@@ -1064,24 +1155,84 @@ 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?"
|
||||
msgstr "Odstranite ta iskalni niz iz stranske vrstice?"
|
||||
|
||||
msgid "Delete"
|
||||
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."
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Fetching resources: %d"
|
||||
msgstr "Viri: %d."
|
||||
|
||||
msgid "Please select where the sync status should be exported to"
|
||||
msgstr "Prosim izberite, kam želite izvoziti sinhronizacijski status"
|
||||
|
||||
msgid "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"
|
||||
@@ -1123,6 +1274,9 @@ msgstr ""
|
||||
"Ne gre osvežiti tokena: manjkajo podatki o avtentikaciji. Ponovno zaženite "
|
||||
"sinhronizacijo, da morda popravite težavo."
|
||||
|
||||
msgid "Untitled"
|
||||
msgstr "Neimenovano"
|
||||
|
||||
msgid ""
|
||||
"Could not synchronize with OneDrive.\n"
|
||||
"\n"
|
||||
@@ -1170,10 +1324,6 @@ msgstr "Izbrisani oddaljeni predmeti: %d."
|
||||
msgid "Fetched items: %d/%d."
|
||||
msgstr "Preneseni predmeti: %d/%d."
|
||||
|
||||
#, javascript-format
|
||||
msgid "State: %s."
|
||||
msgstr "Stanje: %s."
|
||||
|
||||
msgid "Cancelling..."
|
||||
msgstr "V preklicu..."
|
||||
|
||||
@@ -1195,12 +1345,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"
|
||||
|
||||
@@ -1212,21 +1374,10 @@ 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."
|
||||
|
||||
msgid "Untitled"
|
||||
msgstr "Neimenovano"
|
||||
|
||||
msgid "This note does not have geolocation information."
|
||||
msgstr "Ta zabeležke nima geografske lokacije."
|
||||
|
||||
@@ -1238,6 +1389,13 @@ 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 "Language"
|
||||
msgstr "Jezik"
|
||||
|
||||
@@ -1269,6 +1427,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"
|
||||
|
||||
@@ -1284,18 +1446,65 @@ 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)"
|
||||
|
||||
msgid "Note: Does not work in all desktop environments."
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"This will allow Joplin to run in the background. It is recommended to enable "
|
||||
"this setting so that your notes are constantly being synchronised, thus "
|
||||
"reducing the number of conflicts."
|
||||
msgstr ""
|
||||
|
||||
msgid "Start application minimised in the tray icon"
|
||||
msgstr ""
|
||||
|
||||
msgid "Global zoom percentage"
|
||||
msgstr "Celokupen procent povečave"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Editor font size"
|
||||
msgstr "Družina urejevalnika besedilnega stila"
|
||||
|
||||
msgid "Editor font family"
|
||||
msgstr "Družina urejevalnika besedilnega stila"
|
||||
|
||||
@@ -1310,6 +1519,13 @@ msgstr ""
|
||||
msgid "Automatically update the application"
|
||||
msgstr "Samodejno posodobi aplikacijo"
|
||||
|
||||
msgid "Get pre-releases when checking for updates"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "See the pre-release page for more details: %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Synchronisation interval"
|
||||
msgstr "Časovni interval sinhronizacije"
|
||||
|
||||
@@ -1353,23 +1569,9 @@ msgstr ""
|
||||
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"
|
||||
|
||||
@@ -1398,10 +1600,46 @@ 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."
|
||||
|
||||
#, fuzzy
|
||||
msgid "General"
|
||||
msgstr "Splošne možnosti"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Synchronisation"
|
||||
msgstr "Status sinhronizacije"
|
||||
|
||||
msgid "Appearance"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Note"
|
||||
msgstr "Beležnice"
|
||||
|
||||
msgid "Plugins"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Application"
|
||||
msgstr "Izhod iz aplikacije."
|
||||
|
||||
#, javascript-format
|
||||
msgid "The tag \"%s\" already exists. Please choose a different name."
|
||||
msgstr ""
|
||||
@@ -1418,6 +1656,13 @@ msgstr "Joplin izvozno mesto"
|
||||
msgid "Evernote Export File"
|
||||
msgstr "Evernote izvozna datoteka"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Json Export Directory"
|
||||
msgstr "Joplin izvozno mesto"
|
||||
|
||||
msgid "File"
|
||||
msgstr "Datoteka"
|
||||
|
||||
msgid "Directory"
|
||||
msgstr "Mesto datoteke"
|
||||
|
||||
@@ -1443,12 +1688,19 @@ msgstr "Ni datotek za izvoz."
|
||||
msgid "Please specify the notebook where the notes should be imported to."
|
||||
msgstr "Prosim navedite beležnico, kamor želite uvoziti zabeležke."
|
||||
|
||||
msgid "Restored Notes"
|
||||
msgstr ""
|
||||
|
||||
msgid "Items that cannot be synchronised"
|
||||
msgstr "Predmeti ne morejo biti sinhronizirani"
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s (%s): %s"
|
||||
msgstr "%s (%s): %s"
|
||||
#, fuzzy, javascript-format
|
||||
msgid "%s (%s) could not be uploaded: %s"
|
||||
msgstr "Beležnica ne more biti shranjena: %s"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Item \"%s\" could not be downloaded: %s"
|
||||
msgstr "Beležnica ne more biti shranjena: %s"
|
||||
|
||||
msgid ""
|
||||
"These items will remain on the device but will not be uploaded to the sync "
|
||||
@@ -1492,6 +1744,12 @@ msgstr "Prihajajoči alarmi"
|
||||
msgid "On %s: %s"
|
||||
msgstr "Vključeno %s: %s"
|
||||
|
||||
msgid "Permission to use camera"
|
||||
msgstr ""
|
||||
|
||||
msgid "Your permission to use your camera is required."
|
||||
msgstr ""
|
||||
|
||||
msgid "There are currently no notes. Create one by clicking on the (+) button."
|
||||
msgstr "Trenutno ni zabeležk. Ustvarite jo s klikom na (+) gumb."
|
||||
|
||||
@@ -1520,6 +1778,10 @@ msgstr "Premakni %d zabeležk v beležnico \"%s\"?"
|
||||
msgid "Press to set the decryption password."
|
||||
msgstr "Klikni za nastavitev dekripcijskega gesla."
|
||||
|
||||
#, fuzzy
|
||||
msgid "Clear alarm"
|
||||
msgstr "Nastavi alarm"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Save alarm"
|
||||
msgstr "Nastavi alarm"
|
||||
@@ -1533,8 +1795,34 @@ msgstr "Potrdi"
|
||||
msgid "Cancel synchronisation"
|
||||
msgstr "Prekliči sinhronizacijo"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Checking... Please wait."
|
||||
msgstr "V preklicu...Prosim počakajte."
|
||||
|
||||
#, fuzzy
|
||||
msgid "Success! Synchronisation configuration appears to be correct."
|
||||
msgstr "Preveri nastavitve sinhronizacije"
|
||||
|
||||
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 "Aplikacija je bila uspešno avtorizirana."
|
||||
|
||||
#, javascript-format
|
||||
msgid ""
|
||||
"Could not authorise application:\n"
|
||||
"\n"
|
||||
"%s\n"
|
||||
"\n"
|
||||
"Please try again."
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Decrypting items: %d/%d"
|
||||
msgid "Decrypted items: %s / %s"
|
||||
msgstr "Preneseni predmeti: %d/%d."
|
||||
|
||||
msgid "New tags:"
|
||||
@@ -1562,10 +1850,21 @@ msgstr ""
|
||||
msgid "Joplin website"
|
||||
msgstr "Joplin spletna stran"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Database v%s"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "FTS enabled: %d"
|
||||
msgstr "Za izbris: %d"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Login with Dropbox"
|
||||
msgstr "Prijavi se z OneDrive"
|
||||
|
||||
msgid "Enter code here"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Master Key %s"
|
||||
msgstr "Glavno geslo %s"
|
||||
@@ -1617,6 +1916,10 @@ msgstr ""
|
||||
msgid "Unsupported image type: %s"
|
||||
msgstr "Nepodprt tip slike: %s"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Take photo"
|
||||
msgstr "Pripni fotografijo"
|
||||
|
||||
msgid "Attach photo"
|
||||
msgstr "Pripni fotografijo"
|
||||
|
||||
@@ -1641,6 +1944,12 @@ msgstr "Prikaži meta podatke"
|
||||
msgid "View on map"
|
||||
msgstr "Prikaži na zemljevidu"
|
||||
|
||||
msgid "Go to source URL"
|
||||
msgstr ""
|
||||
|
||||
msgid "Edit"
|
||||
msgstr "Uredi"
|
||||
|
||||
msgid "Delete notebook"
|
||||
msgstr "Izbriši beležnico"
|
||||
|
||||
@@ -1663,6 +1972,23 @@ msgstr "Trenutno nimate nobene beležnice. Ustvarite jo s klikom na (+) gumb."
|
||||
msgid "Welcome"
|
||||
msgstr "Dobrodošli"
|
||||
|
||||
#~ msgid "%s (%s): %s"
|
||||
#~ msgstr "%s (%s): %s"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "The path to synchronise with when file system synchronisation is enabled. "
|
||||
#~ "See `sync.target`."
|
||||
#~ msgstr ""
|
||||
#~ "Pot za sinhronizacijo, ki bo uporabljena ob omogočeni sinhronizaciji. "
|
||||
#~ "Poglej `sync.target`."
|
||||
|
||||
#, fuzzy
|
||||
#~ msgid "Joplin v%s"
|
||||
#~ msgstr "Joplin spletna stran"
|
||||
|
||||
#~ msgid "State: %s."
|
||||
#~ msgstr "Stanje: %s."
|
||||
|
||||
#~ msgid "A notebook with this title already exists: \"%s\""
|
||||
#~ msgstr "Beležnica s tem naslovom že obstaja: \"%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`."
|
||||
@@ -461,19 +462,21 @@ msgstr "Kan inte initiera synkroniseraren."
|
||||
msgid "Starting synchronisation..."
|
||||
msgstr "Startar synkronisering..."
|
||||
|
||||
msgid "Downloading resources..."
|
||||
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\""
|
||||
@@ -586,6 +589,18 @@ msgstr ""
|
||||
msgid "Exporting to \"%s\" as \"%s\" format. Please wait..."
|
||||
msgstr "Exportera till \"%s\" som \"%s\" format. Vänta..."
|
||||
|
||||
msgid "Sidebar"
|
||||
msgstr "Sidofältet"
|
||||
|
||||
msgid "Note list"
|
||||
msgstr "Anteckningsboken"
|
||||
|
||||
msgid "Note title"
|
||||
msgstr "Rubriken"
|
||||
|
||||
msgid "Note body"
|
||||
msgstr "Texten"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Importing from \"%s\" as \"%s\" format. Please wait..."
|
||||
msgstr "Importerar från \"%s\" som \"%s\" format. Vänta..."
|
||||
@@ -593,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"
|
||||
@@ -605,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"
|
||||
@@ -621,7 +665,11 @@ msgstr "Dölj %s"
|
||||
msgid "Quit"
|
||||
msgstr "Avsluta"
|
||||
|
||||
msgid "Edit"
|
||||
msgid "Close Window"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "&Edit"
|
||||
msgstr "Redigera"
|
||||
|
||||
msgid "Copy"
|
||||
@@ -633,12 +681,18 @@ msgstr "Klipp ut"
|
||||
msgid "Paste"
|
||||
msgstr "Klistra in"
|
||||
|
||||
msgid "Select all"
|
||||
msgstr "Välj alla"
|
||||
|
||||
msgid "Bold"
|
||||
msgstr "Fet"
|
||||
|
||||
msgid "Italic"
|
||||
msgstr "Kursiv"
|
||||
|
||||
msgid "Link"
|
||||
msgstr "Länk"
|
||||
|
||||
msgid "Insert Date Time"
|
||||
msgstr "Infoga datumtid"
|
||||
|
||||
@@ -648,7 +702,11 @@ msgstr "Redigera i extern redigerare"
|
||||
msgid "Search in all the notes"
|
||||
msgstr "Sök i alla anteckningarna"
|
||||
|
||||
msgid "View"
|
||||
msgid "Search in current note"
|
||||
msgstr "Sök i aktuell anteckning"
|
||||
|
||||
#, fuzzy
|
||||
msgid "&View"
|
||||
msgstr "Visa"
|
||||
|
||||
msgid "Toggle sidebar"
|
||||
@@ -657,22 +715,15 @@ msgstr "Växla sidofältet"
|
||||
msgid "Toggle editor layout"
|
||||
msgstr "Växla redigeringslayout"
|
||||
|
||||
msgid "Tools"
|
||||
msgid "Focus"
|
||||
msgstr "Fokus"
|
||||
|
||||
#, 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"
|
||||
@@ -681,16 +732,6 @@ 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)"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Open %s"
|
||||
msgstr "Öppna %s"
|
||||
@@ -707,15 +748,30 @@ msgstr "Avbryt"
|
||||
msgid "Current version is up-to-date."
|
||||
msgstr "Nuvarande version är uppdaterad."
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s (pre-release)"
|
||||
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: %s"
|
||||
msgstr "Din version: %s"
|
||||
|
||||
#, javascript-format
|
||||
msgid "New version: %s"
|
||||
msgstr "Ny version: %s"
|
||||
|
||||
msgid "Yes"
|
||||
msgstr "Ja"
|
||||
|
||||
msgid "No"
|
||||
msgstr "Nej"
|
||||
|
||||
msgid "Token has been copied to the clipboard!"
|
||||
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."
|
||||
|
||||
@@ -764,13 +820,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:"
|
||||
|
||||
msgid "Check synchronisation configuration"
|
||||
msgstr "Kontrollera synkroniseringskonfigurationen"
|
||||
msgid "Advanced options"
|
||||
msgstr "Avancerade alternativ"
|
||||
|
||||
msgid "Authorisation token:"
|
||||
msgstr "Auktoriserings token:"
|
||||
|
||||
msgid "Copy token"
|
||||
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 "Check synchronisation configuration"
|
||||
msgstr "Kontrollera synkroniseringskonfigurationen"
|
||||
|
||||
msgid "Browse..."
|
||||
msgstr "Bläddra..."
|
||||
|
||||
msgid "Apply"
|
||||
msgstr "Tillämpa"
|
||||
|
||||
@@ -865,6 +940,9 @@ msgstr "Tillstånd"
|
||||
msgid "Encryption is:"
|
||||
msgstr "Kryptering är:"
|
||||
|
||||
msgid "Usage"
|
||||
msgstr "Användning"
|
||||
|
||||
msgid "Back"
|
||||
msgstr "Tillbaka"
|
||||
|
||||
@@ -917,28 +995,6 @@ msgstr "Några objekt kan inte dekrypteras."
|
||||
msgid "Set the password"
|
||||
msgstr "Ställ in lösenord"
|
||||
|
||||
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"
|
||||
|
||||
msgid "Copy Markdown link"
|
||||
msgstr "Kopiera Markdown-länk"
|
||||
|
||||
msgid "Delete"
|
||||
msgstr "Ta bort"
|
||||
|
||||
msgid "Delete notes?"
|
||||
msgstr "Ta bort anteckningar?"
|
||||
|
||||
msgid "No notes in here. Create one by clicking on \"New note\"."
|
||||
msgstr "Inga anteckningar här. Skapa en genom att klicka på \"Ny anteckning\"."
|
||||
|
||||
@@ -949,9 +1005,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..."
|
||||
@@ -970,6 +1053,9 @@ msgstr "Kopiera sökväg till urklipp"
|
||||
msgid "Copy Link Address"
|
||||
msgstr "Kopiera länkadress"
|
||||
|
||||
msgid "This attachment is not downloaded or not decrypted yet."
|
||||
msgstr "Denna bilaga är inte nedladdad eller ännu inte dekrypterad."
|
||||
|
||||
#, javascript-format
|
||||
msgid "Unsupported link or message: %s"
|
||||
msgstr "Länk eller meddelande stöds inte: %s"
|
||||
@@ -982,6 +1068,10 @@ msgstr ""
|
||||
"Den här anteckningen har inget innehåll. Klicka på \"%s\" för att växla "
|
||||
"redigeraren och redigera anteckningen."
|
||||
|
||||
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"
|
||||
|
||||
@@ -1007,9 +1097,6 @@ msgstr "Sätt alarm"
|
||||
msgid "In: %s"
|
||||
msgstr "I: %s"
|
||||
|
||||
msgid "Note properties"
|
||||
msgstr ""
|
||||
|
||||
msgid "Hyperlink"
|
||||
msgstr "Hyperlänk"
|
||||
|
||||
@@ -1071,24 +1158,82 @@ 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?"
|
||||
msgstr "Ta bort den här sökningen från sidofältet?"
|
||||
|
||||
msgid "Delete"
|
||||
msgstr "Ta bort"
|
||||
|
||||
msgid "Rename"
|
||||
msgstr "Byt namn"
|
||||
|
||||
msgid "Synchronise"
|
||||
msgstr "Synkronisera"
|
||||
|
||||
msgid "Notebooks"
|
||||
msgstr "Anteckningsböcker"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Decrypting items: %d/%d"
|
||||
msgstr "Dekrypterar objekt: %d/%d"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Fetching resources: %d"
|
||||
msgstr "Hämtar resurser: %d"
|
||||
|
||||
msgid "Please select where the sync status should be exported to"
|
||||
msgstr "Välj vart synkroniseringstillståndet ska exporteras till"
|
||||
|
||||
msgid "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"
|
||||
@@ -1130,6 +1275,9 @@ msgstr ""
|
||||
"Kan inte uppdatera token: autentiseringsdata saknas. Om du startar "
|
||||
"synkroniseringen igen kan det lösa problemet."
|
||||
|
||||
msgid "Untitled"
|
||||
msgstr "Utan titel"
|
||||
|
||||
msgid ""
|
||||
"Could not synchronize with OneDrive.\n"
|
||||
"\n"
|
||||
@@ -1177,10 +1325,6 @@ msgstr "Borttagna fjärrobjekt: %d."
|
||||
msgid "Fetched items: %d/%d."
|
||||
msgstr "Hämtade objekt: %d/%d."
|
||||
|
||||
#, javascript-format
|
||||
msgid "State: %s."
|
||||
msgstr "Tillstånd: %s."
|
||||
|
||||
msgid "Cancelling..."
|
||||
msgstr "Avbryter..."
|
||||
|
||||
@@ -1202,12 +1346,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"
|
||||
|
||||
@@ -1219,17 +1373,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"
|
||||
|
||||
msgid "Untitled"
|
||||
msgstr "Utan titel"
|
||||
msgstr "skapad datum"
|
||||
|
||||
msgid "This note does not have geolocation information."
|
||||
msgstr "Denna anteckning har inte geolokaliseringsinformation."
|
||||
@@ -1242,6 +1387,16 @@ 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 "Language"
|
||||
msgstr "Språk"
|
||||
|
||||
@@ -1272,6 +1427,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"
|
||||
|
||||
@@ -1287,18 +1446,67 @@ 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"
|
||||
|
||||
msgid "Note: Does not work in all desktop environments."
|
||||
msgstr "Obs: Fungerar inte i alla skrivbordsmiljöer."
|
||||
|
||||
msgid "Start application minimised in the tray icon"
|
||||
msgid ""
|
||||
"This will allow Joplin to run in the background. It is recommended to enable "
|
||||
"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 "Starta programmet minimerat"
|
||||
|
||||
msgid "Global zoom percentage"
|
||||
msgstr "Global zoomprocent"
|
||||
|
||||
msgid "Editor font size"
|
||||
msgstr "Redigerarens teckenstorlek"
|
||||
|
||||
msgid "Editor font family"
|
||||
msgstr "Redigerarens typsnittsfamilj"
|
||||
|
||||
@@ -1313,6 +1521,13 @@ msgstr ""
|
||||
msgid "Automatically update the application"
|
||||
msgstr "Uppdatera programmet automatiskt"
|
||||
|
||||
msgid "Get pre-releases when checking for updates"
|
||||
msgstr "Inkludera även förhandsversionen vid uppdateringar"
|
||||
|
||||
#, javascript-format
|
||||
msgid "See the pre-release page for more details: %s"
|
||||
msgstr "Se sidan för förhandsversioner för mer information: %s"
|
||||
|
||||
msgid "Synchronisation interval"
|
||||
msgstr "Synkroniseringsintervall"
|
||||
|
||||
@@ -1355,23 +1570,9 @@ msgstr ""
|
||||
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"
|
||||
|
||||
@@ -1405,13 +1606,46 @@ 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."
|
||||
|
||||
#, fuzzy
|
||||
msgid "General"
|
||||
msgstr "Allmänna inställningar"
|
||||
|
||||
msgid "Synchronisation"
|
||||
msgstr "Synkronisering"
|
||||
|
||||
msgid "Appearance"
|
||||
msgstr "Utseende"
|
||||
|
||||
msgid "Note"
|
||||
msgstr "Anteckning"
|
||||
|
||||
msgid "Plugins"
|
||||
msgstr ""
|
||||
|
||||
msgid "Application"
|
||||
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"
|
||||
@@ -1425,6 +1659,12 @@ msgstr "Joplin-exporteringskatalog"
|
||||
msgid "Evernote Export File"
|
||||
msgstr "Evernote-exporteringsfil"
|
||||
|
||||
msgid "Json Export Directory"
|
||||
msgstr "Joplin-exportkatalog"
|
||||
|
||||
msgid "File"
|
||||
msgstr "Fil"
|
||||
|
||||
msgid "Directory"
|
||||
msgstr "Katalog"
|
||||
|
||||
@@ -1450,12 +1690,19 @@ msgstr "Det finns ingen data att exportera."
|
||||
msgid "Please specify the notebook where the notes should be imported to."
|
||||
msgstr "Ange anteckningsboken som anteckningarna ska importeras till."
|
||||
|
||||
msgid "Restored Notes"
|
||||
msgstr ""
|
||||
|
||||
msgid "Items that cannot be synchronised"
|
||||
msgstr "Objekt som inte kan synkroniseras"
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s (%s): %s"
|
||||
msgstr "%s (%s): %s"
|
||||
#, fuzzy, javascript-format
|
||||
msgid "%s (%s) could not be uploaded: %s"
|
||||
msgstr "Den här filen kunde inte öppnas: %s"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Item \"%s\" could not be downloaded: %s"
|
||||
msgstr "Den här filen kunde inte öppnas: %s"
|
||||
|
||||
msgid ""
|
||||
"These items will remain on the device but will not be uploaded to the sync "
|
||||
@@ -1499,6 +1746,12 @@ msgstr "Kommande larm"
|
||||
msgid "On %s: %s"
|
||||
msgstr "På %s: %s"
|
||||
|
||||
msgid "Permission to use camera"
|
||||
msgstr "Tillåtelse att använda kameran"
|
||||
|
||||
msgid "Your permission to use your camera is required."
|
||||
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 ""
|
||||
"Det finns för närvarande inga anteckningar. Skapa en genom att klicka på (+)-"
|
||||
@@ -1529,6 +1782,9 @@ msgstr "Flytta %d anteckningar till anteckningsboken \"%s\"?"
|
||||
msgid "Press to set the decryption password."
|
||||
msgstr "Tryck för att ställa in dekrypteringslösenordet."
|
||||
|
||||
msgid "Clear alarm"
|
||||
msgstr "Ta bort alarm"
|
||||
|
||||
msgid "Save alarm"
|
||||
msgstr "Spara alarm"
|
||||
|
||||
@@ -1541,9 +1797,39 @@ msgstr "Bekräfta"
|
||||
msgid "Cancel synchronisation"
|
||||
msgstr "Avbryt synkronisering"
|
||||
|
||||
msgid "Checking... Please wait."
|
||||
msgstr "Kontrollerar... vänta."
|
||||
|
||||
msgid "Success! Synchronisation configuration appears to be correct."
|
||||
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:"
|
||||
|
||||
msgid "The application has been authorised!"
|
||||
msgstr "Programmet har blivit godkänt!"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Decrypting items: %d/%d"
|
||||
msgstr "Dekrypterar objekt: %d/%d"
|
||||
msgid ""
|
||||
"Could not authorise application:\n"
|
||||
"\n"
|
||||
"%s\n"
|
||||
"\n"
|
||||
"Please try again."
|
||||
msgstr ""
|
||||
"Kunde inte auktorisera programmet:\n"
|
||||
"\n"
|
||||
"%s\n"
|
||||
"\n"
|
||||
"Försök igen."
|
||||
|
||||
#, javascript-format
|
||||
msgid "Decrypted items: %s / %s"
|
||||
msgstr "Antal dekrypterade objekt: %s / %s"
|
||||
|
||||
msgid "New tags:"
|
||||
msgstr "Nya taggar:"
|
||||
@@ -1578,9 +1864,20 @@ msgstr ""
|
||||
msgid "Joplin website"
|
||||
msgstr "Joplin-webbplats"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Database v%s"
|
||||
msgstr "Databas v%s"
|
||||
|
||||
#, javascript-format
|
||||
msgid "FTS enabled: %d"
|
||||
msgstr "FTS aktiverat: %d"
|
||||
|
||||
msgid "Login with Dropbox"
|
||||
msgstr "Logga in med Dropbox"
|
||||
|
||||
msgid "Enter code here"
|
||||
msgstr "Ange kod här"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Master Key %s"
|
||||
msgstr "Huvudnyckel %s"
|
||||
@@ -1633,6 +1930,9 @@ msgstr ""
|
||||
msgid "Unsupported image type: %s"
|
||||
msgstr "Bildstorlek som inte stöds: %s"
|
||||
|
||||
msgid "Take photo"
|
||||
msgstr "Ta ett foto"
|
||||
|
||||
msgid "Attach photo"
|
||||
msgstr "Bifoga foto"
|
||||
|
||||
@@ -1657,6 +1957,12 @@ msgstr "Visa metadata"
|
||||
msgid "View on map"
|
||||
msgstr "Visa på karta"
|
||||
|
||||
msgid "Go to source URL"
|
||||
msgstr "Gå till källans URL"
|
||||
|
||||
msgid "Edit"
|
||||
msgstr "Redigera"
|
||||
|
||||
msgid "Delete notebook"
|
||||
msgstr "Ta bort anteckningsbok"
|
||||
|
||||
@@ -1682,5 +1988,21 @@ msgstr ""
|
||||
msgid "Welcome"
|
||||
msgstr "Välkommen"
|
||||
|
||||
#~ msgid "%s (%s): %s"
|
||||
#~ msgstr "%s (%s): %s"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "The path to synchronise with when file system synchronisation is enabled. "
|
||||
#~ "See `sync.target`."
|
||||
#~ msgstr ""
|
||||
#~ "Sökvägen att synkronisera med när synkronisering av filsystem är "
|
||||
#~ "aktiverat. Se `sync.target`."
|
||||
|
||||
#~ msgid "Joplin v%s"
|
||||
#~ msgstr "Joplin v%s"
|
||||
|
||||
#~ msgid "State: %s."
|
||||
#~ msgstr "Tillstånd: %s."
|
||||
|
||||
#~ msgid "A notebook with this title already exists: \"%s\""
|
||||
#~ msgstr "En anteckningsbok med denna titel finns redan: \"%s\""
|
||||
|
||||
1961
CliClient/locales/tr_TR.po
Normal file
1961
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`。"
|
||||
@@ -431,6 +432,9 @@ msgstr "無法初始化同步器。"
|
||||
msgid "Starting synchronisation..."
|
||||
msgstr "正在啟動同步..."
|
||||
|
||||
msgid "Downloading resources..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Cancelling... Please wait."
|
||||
msgstr "正在取消中...請稍候。"
|
||||
|
||||
@@ -545,6 +549,20 @@ msgstr ""
|
||||
msgid "Exporting to \"%s\" as \"%s\" format. Please wait..."
|
||||
msgstr "匯出到 \"%s\" 為 \"%s\" 格式。請稍候..."
|
||||
|
||||
msgid "Sidebar"
|
||||
msgstr ""
|
||||
|
||||
msgid "Note list"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Note title"
|
||||
msgstr "記事本標題:"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Note body"
|
||||
msgstr "記事本"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Importing from \"%s\" as \"%s\" format. Please wait..."
|
||||
msgstr "從 \"%s\" 匯入為 \"%s\" 格式。請稍候..."
|
||||
@@ -552,8 +570,8 @@ msgstr "從 \"%s\" 匯入為 \"%s\" 格式。請稍候..."
|
||||
msgid "PDF File"
|
||||
msgstr "PDF 檔案"
|
||||
|
||||
msgid "File"
|
||||
msgstr "檔案"
|
||||
msgid "Synchronisation status"
|
||||
msgstr "顯示同步狀態"
|
||||
|
||||
msgid "New note"
|
||||
msgstr "新增記事"
|
||||
@@ -564,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"
|
||||
@@ -580,7 +627,11 @@ msgstr "隱藏 %s"
|
||||
msgid "Quit"
|
||||
msgstr "結束"
|
||||
|
||||
msgid "Edit"
|
||||
msgid "Close Window"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "&Edit"
|
||||
msgstr "編輯"
|
||||
|
||||
msgid "Copy"
|
||||
@@ -592,12 +643,19 @@ msgstr "剪下"
|
||||
msgid "Paste"
|
||||
msgstr "貼上"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Select all"
|
||||
msgstr "選擇日期"
|
||||
|
||||
msgid "Bold"
|
||||
msgstr "粗體"
|
||||
|
||||
msgid "Italic"
|
||||
msgstr "斜體"
|
||||
|
||||
msgid "Link"
|
||||
msgstr ""
|
||||
|
||||
msgid "Insert Date Time"
|
||||
msgstr "插入日期時間"
|
||||
|
||||
@@ -607,7 +665,12 @@ msgstr "使用外部編輯器編輯"
|
||||
msgid "Search in all the notes"
|
||||
msgstr "在所有記事中搜尋"
|
||||
|
||||
msgid "View"
|
||||
#, fuzzy
|
||||
msgid "Search in current note"
|
||||
msgstr "在所有記事中搜尋"
|
||||
|
||||
#, fuzzy
|
||||
msgid "&View"
|
||||
msgstr "檢視"
|
||||
|
||||
msgid "Toggle sidebar"
|
||||
@@ -616,22 +679,16 @@ msgstr "顯示 / 隱藏側邊欄"
|
||||
msgid "Toggle editor layout"
|
||||
msgstr "切換編輯器佈局"
|
||||
|
||||
msgid "Tools"
|
||||
#, fuzzy
|
||||
msgid "Focus"
|
||||
msgstr "游標置於內文"
|
||||
|
||||
#, 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"
|
||||
@@ -640,16 +697,6 @@ 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)"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Open %s"
|
||||
msgstr "開啟 %s"
|
||||
@@ -666,15 +713,30 @@ msgstr "取消"
|
||||
msgid "Current version is up-to-date."
|
||||
msgstr "此版本是最新的。"
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s (pre-release)"
|
||||
msgstr ""
|
||||
|
||||
msgid "An update is available, do you want to download it now?"
|
||||
msgstr "有可用的更新,您需要立即下載嗎?"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Your version: %s"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "New version: %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Yes"
|
||||
msgstr "是"
|
||||
|
||||
msgid "No"
|
||||
msgstr "否"
|
||||
|
||||
msgid "Token has been copied to the clipboard!"
|
||||
msgstr ""
|
||||
|
||||
msgid "The web clipper service is enabled and set to auto-start."
|
||||
msgstr "Web clipper 服務已啟用,並設置為自動啟動。"
|
||||
|
||||
@@ -720,13 +782,31 @@ msgstr "步驟 2: 安裝插件"
|
||||
msgid "Download and install the relevant extension for your browser:"
|
||||
msgstr "下載並安裝瀏覽器插件:"
|
||||
|
||||
msgid "Check synchronisation configuration"
|
||||
msgstr "檢測同步設置"
|
||||
#, fuzzy
|
||||
msgid "Advanced options"
|
||||
msgstr "顯示進階選項"
|
||||
|
||||
msgid "Authorisation token:"
|
||||
msgstr ""
|
||||
|
||||
msgid "Copy token"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"This authorisation token is only needed to allow third-party applications to "
|
||||
"access Joplin."
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Notes and settings are stored in: %s"
|
||||
msgstr "所有記事和設置均儲存於: %s"
|
||||
|
||||
msgid "Check synchronisation configuration"
|
||||
msgstr "檢測同步設置"
|
||||
|
||||
msgid "Browse..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Apply"
|
||||
msgstr "套用"
|
||||
|
||||
@@ -814,6 +894,10 @@ msgstr "狀態"
|
||||
msgid "Encryption is:"
|
||||
msgstr "加密:"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Usage"
|
||||
msgstr "使用資訊: %s"
|
||||
|
||||
msgid "Back"
|
||||
msgstr "返回"
|
||||
|
||||
@@ -864,28 +948,6 @@ msgstr "有些項目不能解密。"
|
||||
msgid "Set the password"
|
||||
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 "Copy Markdown link"
|
||||
msgstr "複製 Markdown 連結"
|
||||
|
||||
msgid "Delete"
|
||||
msgstr "刪除"
|
||||
|
||||
msgid "Delete notes?"
|
||||
msgstr "刪除此記事?"
|
||||
|
||||
msgid "No notes in here. Create one by clicking on \"New note\"."
|
||||
msgstr "當前沒有任何筆記。通過按一下 \"新增筆記\" 去建立。"
|
||||
|
||||
@@ -899,6 +961,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 "開啟..."
|
||||
|
||||
@@ -915,6 +1004,9 @@ msgstr "複製路徑到剪貼板"
|
||||
msgid "Copy Link Address"
|
||||
msgstr "複製鏈接位址"
|
||||
|
||||
msgid "This attachment is not downloaded or not decrypted yet."
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Unsupported link or message: %s"
|
||||
msgstr "不支援的鏈接或訊息: %s"
|
||||
@@ -925,6 +1017,9 @@ msgid ""
|
||||
"note."
|
||||
msgstr "此筆記沒有內容。按一下 \"%s\" 切換到編輯模式並編輯筆記。"
|
||||
|
||||
msgid "Only one note can be printed or exported to PDF at a time."
|
||||
msgstr ""
|
||||
|
||||
msgid "strong text"
|
||||
msgstr "重要文字 <strong>"
|
||||
|
||||
@@ -950,9 +1045,6 @@ msgstr "設置提醒"
|
||||
msgid "In: %s"
|
||||
msgstr "在: %s"
|
||||
|
||||
msgid "Note properties"
|
||||
msgstr ""
|
||||
|
||||
msgid "Hyperlink"
|
||||
msgstr "超連結"
|
||||
|
||||
@@ -1014,24 +1106,80 @@ 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?"
|
||||
msgstr "是否從側邊欄中刪除此搜索?"
|
||||
|
||||
msgid "Delete"
|
||||
msgstr "刪除"
|
||||
|
||||
msgid "Rename"
|
||||
msgstr "重新命名"
|
||||
|
||||
msgid "Synchronise"
|
||||
msgstr "進行同步"
|
||||
|
||||
msgid "Notebooks"
|
||||
msgstr "記事本"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Decrypting items: %d/%d"
|
||||
msgstr "正在解密項目: %d/%d 項"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Fetching resources: %d"
|
||||
msgstr "資源: %d。"
|
||||
|
||||
msgid "Please select where the sync status should be exported to"
|
||||
msgstr "請選擇將同步狀態導出到的位置"
|
||||
|
||||
msgid "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"
|
||||
@@ -1071,6 +1219,9 @@ msgid ""
|
||||
"synchronisation again may fix the problem."
|
||||
msgstr "無法刷新 token: 缺少身份驗證資料。再次啟動同步可能會解決此問題。"
|
||||
|
||||
msgid "Untitled"
|
||||
msgstr "未命名"
|
||||
|
||||
msgid ""
|
||||
"Could not synchronize with OneDrive.\n"
|
||||
"\n"
|
||||
@@ -1117,10 +1268,6 @@ msgstr "已刪除的遠端項目: %d 項"
|
||||
msgid "Fetched items: %d/%d."
|
||||
msgstr "已擷取的本地項目: %d/%d 項"
|
||||
|
||||
#, javascript-format
|
||||
msgid "State: %s."
|
||||
msgstr "狀態: %s。"
|
||||
|
||||
msgid "Cancelling..."
|
||||
msgstr "正在取消中..."
|
||||
|
||||
@@ -1142,12 +1289,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 "衝突"
|
||||
|
||||
@@ -1158,18 +1315,9 @@ 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 "建立日期"
|
||||
|
||||
msgid "Untitled"
|
||||
msgstr "未命名"
|
||||
|
||||
msgid "This note does not have geolocation information."
|
||||
msgstr "此記事沒有地理位置定位資訊。"
|
||||
|
||||
@@ -1181,6 +1329,13 @@ 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 "Language"
|
||||
msgstr "語言"
|
||||
|
||||
@@ -1211,6 +1366,10 @@ msgstr "排序記事"
|
||||
msgid "Reverse sort order"
|
||||
msgstr "顛倒排序順序"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Sort notebooks by"
|
||||
msgstr "排序記事"
|
||||
|
||||
msgid "Save geo-location with notes"
|
||||
msgstr "在記事中保存地理位置資訊"
|
||||
|
||||
@@ -1226,18 +1385,65 @@ 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 "顯示系統匣圖示"
|
||||
|
||||
msgid "Note: Does not work in all desktop environments."
|
||||
msgstr "注意: 不是在全部桌面環境中都能發揮作用。"
|
||||
|
||||
msgid ""
|
||||
"This will allow Joplin to run in the background. It is recommended to enable "
|
||||
"this setting so that your notes are constantly being synchronised, thus "
|
||||
"reducing the number of conflicts."
|
||||
msgstr ""
|
||||
|
||||
msgid "Start application minimised in the tray icon"
|
||||
msgstr ""
|
||||
|
||||
msgid "Global zoom percentage"
|
||||
msgstr "整體縮放比例 (%)"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Editor font size"
|
||||
msgstr "編輯器字型系列"
|
||||
|
||||
msgid "Editor font family"
|
||||
msgstr "編輯器字型系列"
|
||||
|
||||
@@ -1251,6 +1457,13 @@ msgstr ""
|
||||
msgid "Automatically update the application"
|
||||
msgstr "自動更新應用程式"
|
||||
|
||||
msgid "Get pre-releases when checking for updates"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "See the pre-release page for more details: %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Synchronisation interval"
|
||||
msgstr "同步時間間隔"
|
||||
|
||||
@@ -1292,21 +1505,9 @@ 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 "啟用檔案系統同步時要同步的路徑。請參閱 `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 用戶名稱"
|
||||
|
||||
@@ -1338,10 +1539,46 @@ 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。"
|
||||
|
||||
#, fuzzy
|
||||
msgid "General"
|
||||
msgstr "一般選項"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Synchronisation"
|
||||
msgstr "顯示同步狀態"
|
||||
|
||||
msgid "Appearance"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Note"
|
||||
msgstr "記事本"
|
||||
|
||||
msgid "Plugins"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Application"
|
||||
msgstr "離開本程式。"
|
||||
|
||||
#, javascript-format
|
||||
msgid "The tag \"%s\" already exists. Please choose a different name."
|
||||
msgstr ""
|
||||
@@ -1358,6 +1595,13 @@ msgstr "Joplin 匯出目錄"
|
||||
msgid "Evernote Export File"
|
||||
msgstr "Evernote 匯出檔"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Json Export Directory"
|
||||
msgstr "Joplin 匯出目錄"
|
||||
|
||||
msgid "File"
|
||||
msgstr "檔案"
|
||||
|
||||
msgid "Directory"
|
||||
msgstr "目錄"
|
||||
|
||||
@@ -1381,12 +1625,19 @@ msgstr "沒有資料可匯出。"
|
||||
msgid "Please specify the notebook where the notes should be imported to."
|
||||
msgstr "請指定將記事匯入到的筆記本。"
|
||||
|
||||
msgid "Restored Notes"
|
||||
msgstr ""
|
||||
|
||||
msgid "Items that cannot be synchronised"
|
||||
msgstr "無法同步的項目"
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s (%s): %s"
|
||||
msgstr "%s (%s): %s"
|
||||
#, fuzzy, javascript-format
|
||||
msgid "%s (%s) could not be uploaded: %s"
|
||||
msgstr "無法開啟檔案: %s"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Item \"%s\" could not be downloaded: %s"
|
||||
msgstr "無法開啟檔案: %s"
|
||||
|
||||
msgid ""
|
||||
"These items will remain on the device but will not be uploaded to the sync "
|
||||
@@ -1429,6 +1680,12 @@ msgstr "將會發生的提醒事項"
|
||||
msgid "On %s: %s"
|
||||
msgstr "在 %s: %s"
|
||||
|
||||
msgid "Permission to use camera"
|
||||
msgstr ""
|
||||
|
||||
msgid "Your permission to use your camera is required."
|
||||
msgstr ""
|
||||
|
||||
msgid "There are currently no notes. Create one by clicking on the (+) button."
|
||||
msgstr "您當前沒有任何筆記。通過按一下 (+) 鍵去新增一則筆記。"
|
||||
|
||||
@@ -1457,6 +1714,10 @@ msgstr "移動 %d 記事到記事本 \"%s\"?"
|
||||
msgid "Press to set the decryption password."
|
||||
msgstr "按下以設置解密密碼。"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Clear alarm"
|
||||
msgstr "設置提醒"
|
||||
|
||||
msgid "Save alarm"
|
||||
msgstr "儲存提醒事項"
|
||||
|
||||
@@ -1469,8 +1730,34 @@ msgstr "確認"
|
||||
msgid "Cancel synchronisation"
|
||||
msgstr "取消同步"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Checking... Please wait."
|
||||
msgstr "正在取消中...請稍候。"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Success! Synchronisation configuration appears to be correct."
|
||||
msgstr "檢測同步設置"
|
||||
|
||||
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 "應用程式已成功取得權限。"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Decrypting items: %d/%d"
|
||||
msgid ""
|
||||
"Could not authorise application:\n"
|
||||
"\n"
|
||||
"%s\n"
|
||||
"\n"
|
||||
"Please try again."
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Decrypted items: %s / %s"
|
||||
msgstr "正在解密項目: %d/%d 項"
|
||||
|
||||
msgid "New tags:"
|
||||
@@ -1500,9 +1787,20 @@ msgstr "- 位置: 允許將地理位置資訊附加到筆記。"
|
||||
msgid "Joplin website"
|
||||
msgstr "Joplin 官方網站"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Database v%s"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "FTS enabled: %d"
|
||||
msgstr "標示刪除: %d"
|
||||
|
||||
msgid "Login with Dropbox"
|
||||
msgstr "以 Dropbox 登錄"
|
||||
|
||||
msgid "Enter code here"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Master Key %s"
|
||||
msgstr "主密碼 %s"
|
||||
@@ -1554,6 +1852,10 @@ msgstr "Joplin 移動應用程式暫時不支援此類型的連結: %s"
|
||||
msgid "Unsupported image type: %s"
|
||||
msgstr "不支援的圖像類型: %s"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Take photo"
|
||||
msgstr "附加相片"
|
||||
|
||||
msgid "Attach photo"
|
||||
msgstr "附加相片"
|
||||
|
||||
@@ -1578,6 +1880,12 @@ msgstr "顯示後設資料 (metadata)"
|
||||
msgid "View on map"
|
||||
msgstr "在地圖上顯示"
|
||||
|
||||
msgid "Go to source URL"
|
||||
msgstr ""
|
||||
|
||||
msgid "Edit"
|
||||
msgstr "編輯"
|
||||
|
||||
msgid "Delete notebook"
|
||||
msgstr "刪除記事本"
|
||||
|
||||
@@ -1598,5 +1906,20 @@ msgstr "您當前沒有任何筆記本。通過按一下 (+) 鍵去建立一本
|
||||
msgid "Welcome"
|
||||
msgstr "歡迎"
|
||||
|
||||
#~ msgid "%s (%s): %s"
|
||||
#~ msgstr "%s (%s): %s"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "The path to synchronise with when file system synchronisation is enabled. "
|
||||
#~ "See `sync.target`."
|
||||
#~ msgstr "啟用檔案系統同步時要同步的路徑。請參閱 `sync.target`。"
|
||||
|
||||
#, fuzzy
|
||||
#~ msgid "Joplin v%s"
|
||||
#~ msgstr "Joplin 官方網站"
|
||||
|
||||
#~ msgid "State: %s."
|
||||
#~ msgstr "狀態: %s。"
|
||||
|
||||
#~ msgid "A notebook with this title already exists: \"%s\""
|
||||
#~ msgstr "同名筆記本已經存在: \"%s\""
|
||||
|
||||
1466
CliClient/package-lock.json
generated
1466
CliClient/package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@@ -15,11 +15,12 @@
|
||||
"years": [
|
||||
2016,
|
||||
2017,
|
||||
2018
|
||||
2018,
|
||||
2019
|
||||
],
|
||||
"owner": "Laurent Cozic"
|
||||
},
|
||||
"version": "1.0.114",
|
||||
"version": "1.0.129",
|
||||
"bin": {
|
||||
"joplin": "./main.js"
|
||||
},
|
||||
@@ -31,18 +32,23 @@
|
||||
"async-mutex": "^0.1.3",
|
||||
"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",
|
||||
"html-entities": "^1.2.1",
|
||||
"html-minifier": "^3.5.15",
|
||||
"image-data-uri": "^2.0.0",
|
||||
"image-type": "^3.0.0",
|
||||
"joplin-turndown": "^4.0.8",
|
||||
"joplin-turndown-plugin-gfm": "^1.0.7",
|
||||
"joplin-turndown": "^4.0.11",
|
||||
"joplin-turndown-plugin-gfm": "^1.0.8",
|
||||
"jssha": "^2.3.0",
|
||||
"levenshtein": "^1.0.5",
|
||||
"lodash": "^4.17.4",
|
||||
"markdown-it": "^8.4.2",
|
||||
"md5": "^2.2.1",
|
||||
"mime": "^2.0.3",
|
||||
"moment": "^2.18.1",
|
||||
@@ -56,9 +62,9 @@
|
||||
"redux": "^3.7.2",
|
||||
"sax": "^1.2.2",
|
||||
"server-destroy": "^1.0.1",
|
||||
"sharp": "^0.18.4",
|
||||
"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",
|
||||
|
||||
@@ -26,11 +26,20 @@ npm test tests-build/encryption.js
|
||||
npm test tests-build/EnexToMd.js
|
||||
npm test tests-build/HtmlToMd.js
|
||||
npm test tests-build/markdownUtils.js
|
||||
npm test tests-build/models_BaseItem.js
|
||||
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_Tag.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_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/synchronizer.js
|
||||
npm test tests-build/urlUtils.js
|
||||
@@ -1,5 +1,6 @@
|
||||
require('app-module-path').addPath(__dirname);
|
||||
|
||||
const os = require('os');
|
||||
const { time } = require('lib/time-utils.js');
|
||||
const { filename } = require('lib/path-utils.js');
|
||||
const { asyncTest, fileContentEqual, setupDatabase, setupDatabaseAndSynchronizer, db, synchronizer, fileApi, sleep, clearDatabase, switchClient, syncTargetId, objectsEqual, checkThrowAsync } = require('test-utils.js');
|
||||
@@ -34,12 +35,17 @@ 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);
|
||||
const expectedMd = await shim.fsDriver().readFile(mdPath);
|
||||
let expectedMd = await shim.fsDriver().readFile(mdPath);
|
||||
|
||||
const actualMd = await enexXmlToMd('<div>' + html + '</div>', []);
|
||||
let actualMd = await enexXmlToMd('<div>' + html + '</div>', []);
|
||||
|
||||
if (os.EOL === '\r\n') {
|
||||
expectedMd = expectedMd.replace(/\r\n/g, '\n')
|
||||
actualMd = actualMd.replace(/\r\n/g, '\n')
|
||||
}
|
||||
|
||||
if (actualMd !== expectedMd) {
|
||||
console.info('');
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
require('app-module-path').addPath(__dirname);
|
||||
|
||||
const os = require('os');
|
||||
const { time } = require('lib/time-utils.js');
|
||||
const { filename } = require('lib/path-utils.js');
|
||||
const { asyncTest, fileContentEqual, setupDatabase, setupDatabaseAndSynchronizer, db, synchronizer, fileApi, sleep, clearDatabase, switchClient, syncTargetId, objectsEqual, checkThrowAsync } = require('test-utils.js');
|
||||
@@ -36,12 +37,17 @@ describe('HtmlToMd', function() {
|
||||
const htmlPath = basePath + '/' + htmlFilename;
|
||||
const mdPath = basePath + '/' + filename(htmlFilename) + '.md';
|
||||
|
||||
// if (htmlFilename !== 'code_1.html') continue;
|
||||
// if (htmlFilename !== 'picture.html') continue;
|
||||
|
||||
const html = await shim.fsDriver().readFile(htmlPath);
|
||||
const expectedMd = await shim.fsDriver().readFile(mdPath);
|
||||
let expectedMd = await shim.fsDriver().readFile(mdPath);
|
||||
|
||||
const actualMd = await htmlToMd.parse('<div>' + html + '</div>', []);
|
||||
let actualMd = await htmlToMd.parse('<div>' + html + '</div>', []);
|
||||
|
||||
if (os.EOL === '\r\n') {
|
||||
expectedMd = expectedMd.replace(/\r\n/g, '\n')
|
||||
actualMd = actualMd.replace(/\r\n/g, '\n')
|
||||
}
|
||||
|
||||
if (actualMd !== expectedMd) {
|
||||
console.info('');
|
||||
|
||||
45
CliClient/tests/StringUtils.js
Normal file
45
CliClient/tests/StringUtils.js
Normal file
@@ -0,0 +1,45 @@
|
||||
require('app-module-path').addPath(__dirname);
|
||||
|
||||
const { time } = require('lib/time-utils.js');
|
||||
const { fileContentEqual, setupDatabase, setupDatabaseAndSynchronizer, db, synchronizer, fileApi, sleep, clearDatabase, switchClient, syncTargetId, objectsEqual, checkThrowAsync } = require('test-utils.js');
|
||||
const StringUtils = require('lib/string-utils');
|
||||
|
||||
process.on('unhandledRejection', (reason, p) => {
|
||||
console.log('Unhandled Rejection at: Promise', p, 'reason:', reason);
|
||||
});
|
||||
|
||||
describe('StringUtils', function() {
|
||||
|
||||
beforeEach(async (done) => {
|
||||
done();
|
||||
});
|
||||
|
||||
it('should surround keywords with strings', async (done) => {
|
||||
const testCases = [
|
||||
[[], 'test', 'a', 'b', 'test'],
|
||||
[['test'], 'test', 'a', 'b', 'atestb'],
|
||||
[['test'], 'Test', 'a', 'b', 'aTestb'],
|
||||
[['te[]st'], 'Te[]st', 'a', 'b', 'aTe[]stb'],
|
||||
// [['test1', 'test2'], 'bla test1 blabla test1 bla test2 not this one - test22', 'a', 'b', 'bla atest1b blabla atest1b bla atest2b not this one - test22'],
|
||||
[['test1', 'test2'], 'bla test1 test1 bla test2', '<span class="highlighted-keyword">', '</span>', 'bla <span class="highlighted-keyword">test1</span> <span class="highlighted-keyword">test1</span> bla <span class="highlighted-keyword">test2</span>'],
|
||||
// [[{ type:'regex', value:'test.*?'}], 'bla test1 test1 bla test2 test tttest', 'a', 'b', 'bla atest1b atest1b bla atest2b atestb tttest'],
|
||||
];
|
||||
|
||||
for (let i = 0; i < testCases.length; i++) {
|
||||
const t = testCases[i];
|
||||
|
||||
const keywords = t[0];
|
||||
const input = t[1];
|
||||
const prefix = t[2];
|
||||
const suffix = t[3];
|
||||
const expected = t[4];
|
||||
|
||||
const actual = StringUtils.surroundKeywords(keywords, input, prefix, suffix);
|
||||
|
||||
expect(actual).toBe(expected, 'Test case ' + i);
|
||||
}
|
||||
|
||||
done();
|
||||
});
|
||||
|
||||
});
|
||||
@@ -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);
|
||||
|
||||
5
CliClient/tests/enex_to_md/list4.html
Normal file
5
CliClient/tests/enex_to_md/list4.html
Normal file
@@ -0,0 +1,5 @@
|
||||
<ul>
|
||||
<li><div>This note has an unordered list</div></li>
|
||||
<li><div>List item</div></li>
|
||||
<li><div>List item</div></li>
|
||||
</ul>
|
||||
3
CliClient/tests/enex_to_md/list4.md
Normal file
3
CliClient/tests/enex_to_md/list4.md
Normal file
@@ -0,0 +1,3 @@
|
||||
- This note has an unordered list
|
||||
- List item
|
||||
- List item
|
||||
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
|
||||
@@ -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)
|
||||
@@ -0,0 +1 @@
|
||||
<a href="http://example.com/That is not right"/>Testing</a>
|
||||
@@ -0,0 +1 @@
|
||||
[Testing](http://example.com/That%20is%20not%20right)
|
||||
47
CliClient/tests/html_to_md/picture.html
Normal file
47
CliClient/tests/html_to_md/picture.html
Normal file
@@ -0,0 +1,47 @@
|
||||
<figure itemprop="associatedMedia image" itemscope="" itemtype="http://schema.org/ImageObject" data-component="image" data-media-id="75583fcfe2eb74f1e89ea320355ff4156f4ade7b" id="img-1">
|
||||
<meta itemprop="representativeOfPage" content="true">
|
||||
<meta itemprop="url" content="https://i.guim.co.uk/img/media/75583fcfe2eb74f1e89ea320355ff4156f4ade7b/0_49_3904_2342/master/3904.jpg?width=700&quality=85&auto=format&fit=max&s=2a6a7ba9738c6a6a79eab39ba46c34cd">
|
||||
<meta itemprop="width" content="3904">
|
||||
<meta itemprop="height" content="2342">
|
||||
<a href="#img-1" data-link-name="Launch Article Lightbox" data-is-ajax="">
|
||||
<div>
|
||||
<picture>
|
||||
<!--[if IE 9]><video style="display: none;"><![endif]-->
|
||||
<source media="(min-width: 980px) and (-webkit-min-device-pixel-ratio: 1.25), (min-width: 980px) and (min-resolution: 120dpi)" sizes="620px" srcset="https://i.guim.co.uk/img/media/75583fcfe2eb74f1e89ea320355ff4156f4ade7b/0_49_3904_2342/master/3904.jpg?width=620&quality=45&auto=format&fit=max&dpr=2&s=bacff59339e5ba117f957c24218ef76b 1240w">
|
||||
<source media="(min-width: 980px)" sizes="620px" srcset="https://i.guim.co.uk/img/media/75583fcfe2eb74f1e89ea320355ff4156f4ade7b/0_49_3904_2342/master/3904.jpg?width=620&quality=85&auto=format&fit=max&s=f1427ce6689688d3d6e0087fe9cb5c18 620w">
|
||||
<source media="(min-width: 740px) and (-webkit-min-device-pixel-ratio: 1.25), (min-width: 740px) and (min-resolution: 120dpi)" sizes="700px" srcset="https://i.guim.co.uk/img/media/75583fcfe2eb74f1e89ea320355ff4156f4ade7b/0_49_3904_2342/master/3904.jpg?width=700&quality=45&auto=format&fit=max&dpr=2&s=70accd3c6e7d2c36f5ccc7321eab097e 1400w">
|
||||
<source media="(min-width: 740px)" sizes="700px" srcset="https://i.guim.co.uk/img/media/75583fcfe2eb74f1e89ea320355ff4156f4ade7b/0_49_3904_2342/master/3904.jpg?width=700&quality=85&auto=format&fit=max&s=2a6a7ba9738c6a6a79eab39ba46c34cd 700w">
|
||||
<source media="(min-width: 660px) and (-webkit-min-device-pixel-ratio: 1.25), (min-width: 660px) and (min-resolution: 120dpi)" sizes="620px" srcset="https://i.guim.co.uk/img/media/75583fcfe2eb74f1e89ea320355ff4156f4ade7b/0_49_3904_2342/master/3904.jpg?width=620&quality=45&auto=format&fit=max&dpr=2&s=bacff59339e5ba117f957c24218ef76b 1240w">
|
||||
<source media="(min-width: 660px)" sizes="620px" srcset="https://i.guim.co.uk/img/media/75583fcfe2eb74f1e89ea320355ff4156f4ade7b/0_49_3904_2342/master/3904.jpg?width=620&quality=85&auto=format&fit=max&s=f1427ce6689688d3d6e0087fe9cb5c18 620w">
|
||||
<source media="(min-width: 480px) and (-webkit-min-device-pixel-ratio: 1.25), (min-width: 480px) and (min-resolution: 120dpi)" sizes="645px" srcset="https://i.guim.co.uk/img/media/75583fcfe2eb74f1e89ea320355ff4156f4ade7b/0_49_3904_2342/master/3904.jpg?width=645&quality=45&auto=format&fit=max&dpr=2&s=6751fcff1b880acc45ed5aab6511a2ca 1290w">
|
||||
<source media="(min-width: 480px)" sizes="645px" srcset="https://i.guim.co.uk/img/media/75583fcfe2eb74f1e89ea320355ff4156f4ade7b/0_49_3904_2342/master/3904.jpg?width=645&quality=85&auto=format&fit=max&s=d18702564383ce5d613d22b96ec6d726 645w">
|
||||
<source media="(min-width: 0px) and (-webkit-min-device-pixel-ratio: 1.25), (min-width: 0px) and (min-resolution: 120dpi)" sizes="465px" srcset="https://i.guim.co.uk/img/media/75583fcfe2eb74f1e89ea320355ff4156f4ade7b/0_49_3904_2342/master/3904.jpg?width=465&quality=45&auto=format&fit=max&dpr=2&s=a7b87fb26b9813d197f3c236a5282ca4 930w">
|
||||
<source media="(min-width: 0px)" sizes="465px" srcset="https://i.guim.co.uk/img/media/75583fcfe2eb74f1e89ea320355ff4156f4ade7b/0_49_3904_2342/master/3904.jpg?width=465&quality=85&auto=format&fit=max&s=821ae9e950ae92371b40a35e98a31116 465w">
|
||||
<!--[if IE 9]></video><![endif]-->
|
||||
<img itemprop="contentUrl" alt="A blood moon" src="https://i.guim.co.uk/img/media/75583fcfe2eb74f1e89ea320355ff4156f4ade7b/0_49_3904_2342/master/3904.jpg?width=300&quality=85&auto=format&fit=max&s=1e9b643d2c109a1e271f50046eac1324">
|
||||
</picture>
|
||||
</div>
|
||||
<span>
|
||||
<svg width="22" height="22" viewBox="0 0 22 22">
|
||||
<path d="M3.4 20.2L9 14.5 7.5 13l-5.7 5.6L1 14H0v7.5l.5.5H8v-1l-4.6-.8M18.7 1.9L13 7.6 14.4 9l5.7-5.7.5 4.7h1.2V.6l-.5-.5H14v1.2l4.7.6"></path>
|
||||
</svg>
|
||||
</span>
|
||||
</a>
|
||||
|
||||
<label for="show-caption">
|
||||
<span>
|
||||
<svg width="6" height="14" viewBox="0 0 6 14">
|
||||
<path d="M4.6 12l-.4 1.4c-.7.2-1.9.6-3 .6-.7 0-1.2-.2-1.2-.9 0-.2 0-.3.1-.5l2-6.7H.7l.4-1.5 4.2-.6h.2L3 12h1.6zm-.3-9.2c-.9 0-1.4-.5-1.4-1.3C2.9.5 3.7 0 4.6 0 5.4 0 6 .5 6 1.3c0 1-.8 1.5-1.7 1.5z"></path>
|
||||
</svg>
|
||||
</span>
|
||||
</label>
|
||||
<figcaption itemprop="description">
|
||||
<span>
|
||||
<svg width="11" height="10" viewBox="0 0 11 10">
|
||||
<path fill-rule="evenodd" d="M5.5 0L11 10H0z"></path>
|
||||
</svg>
|
||||
</span>
|
||||
A blood moon last occurred in July 2018, though clouds largely obscured the celestial phenomenon in the UK.
|
||||
Photograph: JM F Almeida/Getty Images
|
||||
</figcaption>
|
||||
</figure>
|
||||
3
CliClient/tests/html_to_md/picture.md
Normal file
3
CliClient/tests/html_to_md/picture.md
Normal file
@@ -0,0 +1,3 @@
|
||||
[](#img-1)
|
||||
|
||||
A blood moon last occurred in July 2018, though clouds largely obscured the celestial phenomenon in the UK. Photograph: JM F Almeida/Getty Images
|
||||
29
CliClient/tests/html_to_md/picture_with_no_img.html
Normal file
29
CliClient/tests/html_to_md/picture_with_no_img.html
Normal file
@@ -0,0 +1,29 @@
|
||||
Some pictures:
|
||||
|
||||
<picture>
|
||||
<!--[if IE 9]><video style="display: none;"><![endif]-->
|
||||
<source media="(min-width: 768px) and (-webkit-min-device-pixel-ratio: 1.25), (min-width: px) and (min-resolution: 120dpi)" sizes="588px" data-srcset="https://static2.cbrimages.com/wp-content/uploads/2018/09/Die-01-cvrA.jpg?q=35&w=588&h=900&fit=crop&dpr=1.5 882w" srcset="https://static2.cbrimages.com/wp-content/uploads/2018/09/Die-01-cvrA.jpg?q=35&w=588&h=900&fit=crop&dpr=1.5 882w">
|
||||
<source media="(min-width: 768px)" sizes="588px" data-srcset="https://static2.cbrimages.com/wp-content/uploads/2018/09/Die-01-cvrA.jpg?q=35&w=588&h=900&fit=crop 588w" srcset="https://static2.cbrimages.com/wp-content/uploads/2018/09/Die-01-cvrA.jpg?q=35&w=588&h=900&fit=crop 588w">
|
||||
<source media="(min-width: 481px) and (-webkit-min-device-pixel-ratio: 1.25), (min-width: px) and (min-resolution: 120dpi)" sizes="588px" data-srcset="https://static2.cbrimages.com/wp-content/uploads/2018/09/Die-01-cvrA.jpg?q=35&w=588&h=900&fit=crop&dpr=1.5 882w" srcset="https://static2.cbrimages.com/wp-content/uploads/2018/09/Die-01-cvrA.jpg?q=35&w=588&h=900&fit=crop&dpr=1.5 882w">
|
||||
<source media="(min-width: 481px)" sizes="588px" data-srcset="https://static2.cbrimages.com/wp-content/uploads/2018/09/Die-01-cvrA.jpg?q=35&w=588&h=900&fit=crop 588w" srcset="https://static2.cbrimages.com/wp-content/uploads/2018/09/Die-01-cvrA.jpg?q=35&w=588&h=900&fit=crop 588w">
|
||||
<source media="(min-width: 321px) and (-webkit-min-device-pixel-ratio: 1.25), (min-width: px) and (min-resolution: 120dpi)" sizes="450px" data-srcset="https://static2.cbrimages.com/wp-content/uploads/2018/09/Die-01-cvrA.jpg?q=35&w=450&h=688&fit=crop&dpr=1.5 675w" srcset="https://static2.cbrimages.com/wp-content/uploads/2018/09/Die-01-cvrA.jpg?q=35&w=450&h=688&fit=crop&dpr=1.5 675w">
|
||||
<source media="(min-width: 321px)" sizes="450px" data-srcset="https://static2.cbrimages.com/wp-content/uploads/2018/09/Die-01-cvrA.jpg?q=35&w=450&h=688&fit=crop 450w" srcset="https://static2.cbrimages.com/wp-content/uploads/2018/09/Die-01-cvrA.jpg?q=35&w=450&h=688&fit=crop 450w">
|
||||
<source media="(min-width: 0px) and (-webkit-min-device-pixel-ratio: 1.25), (min-width: px) and (min-resolution: 120dpi)" sizes="320px" data-srcset="https://static2.cbrimages.com/wp-content/uploads/2018/09/Die-01-cvrA.jpg?q=35&w=320&h=489&fit=crop&dpr=1.5 480w" srcset="https://static2.cbrimages.com/wp-content/uploads/2018/09/Die-01-cvrA.jpg?q=35&w=320&h=489&fit=crop&dpr=1.5 480w">
|
||||
<source media="(min-width: 0px)" sizes="320px" data-srcset="https://static2.cbrimages.com/wp-content/uploads/2018/09/Die-01-cvrA.jpg?q=35&w=320&h=489&fit=crop 320w" srcset="https://static2.cbrimages.com/wp-content/uploads/2018/09/Die-01-cvrA.jpg?q=35&w=320&h=489&fit=crop 320w">
|
||||
<!--[if IE 9]></video><![endif]-->
|
||||
<img class=" lazyloaded" title="" alt="" id="img-id-0">
|
||||
</picture>
|
||||
|
||||
<picture>
|
||||
<!--[if IE 9]><video style="display: none;"><![endif]-->
|
||||
<source media="(min-width: 768px) and (-webkit-min-device-pixel-ratio: 1.25), (min-width: px) and (min-resolution: 120dpi)" sizes="588px" data-srcset="https://static2.cbrimages.com/wp-content/uploads/2018/09/Die-01-cvrA.jpg?q=35&w=588&h=900&fit=crop&dpr=1.5 882w" srcset="https://static2.cbrimages.com/wp-content/uploads/2018/09/Die-01-cvrA.jpg?q=35&w=588&h=900&fit=crop&dpr=1.5 882w">
|
||||
<source media="(min-width: 768px)" sizes="588px" data-srcset="https://static2.cbrimages.com/wp-content/uploads/2018/09/Die-01-cvrA.jpg?q=35&w=588&h=900&fit=crop 588w" srcset="https://static2.cbrimages.com/wp-content/uploads/2018/09/Die-01-cvrA.jpg?q=35&w=588&h=900&fit=crop 588w">
|
||||
<source media="(min-width: 481px) and (-webkit-min-device-pixel-ratio: 1.25), (min-width: px) and (min-resolution: 120dpi)" sizes="588px" data-srcset="https://static2.cbrimages.com/wp-content/uploads/2018/09/Die-01-cvrA.jpg?q=35&w=588&h=900&fit=crop&dpr=1.5 882w" srcset="https://static2.cbrimages.com/wp-content/uploads/2018/09/Die-01-cvrA.jpg?q=35&w=588&h=900&fit=crop&dpr=1.5 882w">
|
||||
<source media="(min-width: 481px)" sizes="588px" data-srcset="https://static2.cbrimages.com/wp-content/uploads/2018/09/Die-01-cvrA.jpg?q=35&w=588&h=900&fit=crop 588w" srcset="https://static2.cbrimages.com/wp-content/uploads/2018/09/Die-01-cvrA.jpg?q=35&w=588&h=900&fit=crop 588w">
|
||||
<source media="(min-width: 321px) and (-webkit-min-device-pixel-ratio: 1.25), (min-width: px) and (min-resolution: 120dpi)" sizes="450px" data-srcset="https://static2.cbrimages.com/wp-content/uploads/2018/09/Die-01-cvrA.jpg?q=35&w=450&h=688&fit=crop&dpr=1.5 675w" srcset="https://static2.cbrimages.com/wp-content/uploads/2018/09/Die-01-cvrA.jpg?q=35&w=450&h=688&fit=crop&dpr=1.5 675w">
|
||||
<source media="(min-width: 321px)" sizes="450px" data-srcset="https://static2.cbrimages.com/wp-content/uploads/2018/09/Die-01-cvrA.jpg?q=35&w=450&h=688&fit=crop 450w" srcset="https://static2.cbrimages.com/wp-content/uploads/2018/09/Die-01-cvrA.jpg?q=35&w=450&h=688&fit=crop 450w">
|
||||
<source media="(min-width: 0px) and (-webkit-min-device-pixel-ratio: 1.25), (min-width: px) and (min-resolution: 120dpi)" sizes="320px" data-srcset="https://static2.cbrimages.com/wp-content/uploads/2018/09/Die-01-cvrA.jpg?q=35&w=320&h=489&fit=crop&dpr=1.5 480w" srcset="https://static2.cbrimages.com/wp-content/uploads/2018/09/Die-01-cvrA.jpg?q=35&w=320&h=489&fit=crop&dpr=1.5 480w">
|
||||
<source media="(min-width: 0px)" sizes="320px" data-srcset="https://static2.cbrimages.com/wp-content/uploads/2018/09/Die-01-cvrA.jpg?q=35&w=320&h=489&fit=crop 320w" srcset="https://static2.cbrimages.com/wp-content/uploads/2018/09/Die-01-cvrA.jpg?q=35&w=320&h=489&fit=crop 320w">
|
||||
<!--[if IE 9]></video><![endif]-->
|
||||
<img class=" lazyloaded" title="" alt="" id="img-id-0" src="http://example.com/test.gif">
|
||||
</picture>
|
||||
1
CliClient/tests/html_to_md/picture_with_no_img.md
Normal file
1
CliClient/tests/html_to_md/picture_with_no_img.md
Normal file
@@ -0,0 +1 @@
|
||||
Some pictures:  
|
||||
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 |
|
||||
@@ -39,6 +39,7 @@ describe('markdownUtils', function() {
|
||||
['', ['http://test.com/img.png']],
|
||||
[' ', ['http://test.com/img.png', 'http://test.com/img2.png']],
|
||||
['', ['http://test.com/img.png']],
|
||||
['.png)', ['https://test.com/ohoh_(123).png']],
|
||||
];
|
||||
|
||||
for (let i = 0; i < testCases.length; i++) {
|
||||
|
||||
66
CliClient/tests/models_BaseItem.js
Normal file
66
CliClient/tests/models_BaseItem.js
Normal file
@@ -0,0 +1,66 @@
|
||||
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 BaseItem = require('lib/models/BaseItem.js');
|
||||
const Resource = require('lib/models/Resource.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);
|
||||
});
|
||||
|
||||
async function allItems() {
|
||||
let folders = await Folder.all();
|
||||
let notes = await Note.all();
|
||||
return folders.concat(notes);
|
||||
}
|
||||
|
||||
describe('models_BaseItem', function() {
|
||||
|
||||
beforeEach(async (done) => {
|
||||
await setupDatabaseAndSynchronizer(1);
|
||||
await switchClient(1);
|
||||
done();
|
||||
});
|
||||
|
||||
// it('should be able to exclude keys when syncing', 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');
|
||||
// let resource1 = (await Resource.all())[0];
|
||||
// console.info(await Resource.serializeForSync(resource1));
|
||||
// }));
|
||||
|
||||
// This is to handle the case where a property is removed from a BaseItem table - in that case files in
|
||||
// the sync target will still have the old property but we don't need it locally.
|
||||
it('should ignore properties that are present in sync file but not in database when serialising', asyncTest(async () => {
|
||||
let folder = await Folder.save({ title: "folder1" });
|
||||
|
||||
let serialized = await Folder.serialize(folder);
|
||||
serialized += "\nignore_me: true"
|
||||
|
||||
let unserialized = await Folder.unserialize(serialized);
|
||||
|
||||
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);
|
||||
}));
|
||||
|
||||
});
|
||||
51
CliClient/tests/models_ItemChange.js
Normal file
51
CliClient/tests/models_ItemChange.js
Normal file
@@ -0,0 +1,51 @@
|
||||
require('app-module-path').addPath(__dirname);
|
||||
|
||||
const { time } = require('lib/time-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');
|
||||
const Note = require('lib/models/Note');
|
||||
const Setting = require('lib/models/Setting');
|
||||
const ItemChange = require('lib/models/ItemChange');
|
||||
|
||||
process.on('unhandledRejection', (reason, p) => {
|
||||
console.log('Unhandled Rejection at: Promise', p, 'reason:', reason);
|
||||
});
|
||||
|
||||
let searchEngine = null;
|
||||
|
||||
describe('models_ItemChange', function() {
|
||||
|
||||
beforeEach(async (done) => {
|
||||
await setupDatabaseAndSynchronizer(1);
|
||||
searchEngine = new SearchEngine();
|
||||
searchEngine.setDb(db());
|
||||
done();
|
||||
});
|
||||
|
||||
it('should delete old changes that have been processed', asyncTest(async () => {
|
||||
const n1 = await Note.save({ title: "abcd efgh" }); // 3
|
||||
|
||||
await ItemChange.waitForAllSaved();
|
||||
|
||||
expect(await ItemChange.lastChangeId()).toBe(1);
|
||||
|
||||
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();
|
||||
await ItemChangeUtils.deleteProcessedChanges();
|
||||
expect(await ItemChange.lastChangeId()).toBe(1);
|
||||
|
||||
await revisionService().collectRevisions();
|
||||
await ItemChangeUtils.deleteProcessedChanges();
|
||||
expect(await ItemChange.lastChangeId()).toBe(0);
|
||||
}));
|
||||
|
||||
});
|
||||
@@ -5,6 +5,7 @@ const { asyncTest, fileContentEqual, setupDatabase, setupDatabaseAndSynchronizer
|
||||
const Folder = require('lib/models/Folder.js');
|
||||
const Note = require('lib/models/Note.js');
|
||||
const BaseModel = require('lib/BaseModel.js');
|
||||
const ArrayUtils = require('lib/ArrayUtils.js');
|
||||
const { shim } = require('lib/shim');
|
||||
|
||||
process.on('unhandledRejection', (reason, p) => {
|
||||
@@ -34,6 +35,83 @@ describe('models_Note', function() {
|
||||
expect(items.length).toBe(2);
|
||||
expect(items[0].type_).toBe(BaseModel.TYPE_NOTE);
|
||||
expect(items[1].type_).toBe(BaseModel.TYPE_RESOURCE);
|
||||
|
||||
const resource2 = await shim.createResourceFromPath(__dirname + '/../tests/support/photo.jpg');
|
||||
const resource3 = await shim.createResourceFromPath(__dirname + '/../tests/support/photo.jpg');
|
||||
note2.body += '<img alt="bla" src=":/' + resource2.id + '"/>';
|
||||
note2.body += '<img src=\':/' + resource3.id + '\' />';
|
||||
items = await Note.linkedItems(note2.body);
|
||||
expect(items.length).toBe(4);
|
||||
}));
|
||||
|
||||
it('should find linked items', asyncTest(async () => {
|
||||
const testCases = [
|
||||
['[](:/06894e83b8f84d3d8cbe0f1587f9e226)', ['06894e83b8f84d3d8cbe0f1587f9e226']],
|
||||
['[](:/06894e83b8f84d3d8cbe0f1587f9e226) [](:/06894e83b8f84d3d8cbe0f1587f9e226)', ['06894e83b8f84d3d8cbe0f1587f9e226']],
|
||||
['[](:/06894e83b8f84d3d8cbe0f1587f9e226) [](:/06894e83b8f84d3d8cbe0f1587f9e227)', ['06894e83b8f84d3d8cbe0f1587f9e226', '06894e83b8f84d3d8cbe0f1587f9e227']],
|
||||
['[](:/06894e83b8f84d3d8cbe0f1587f9e226 "some title")', ['06894e83b8f84d3d8cbe0f1587f9e226']],
|
||||
];
|
||||
|
||||
for (let i = 0; i < testCases.length; i++) {
|
||||
const t = testCases[i];
|
||||
|
||||
const input = t[0];
|
||||
const expected = t[1];
|
||||
const actual = Note.linkedItemIds(input);
|
||||
const contentEquals = ArrayUtils.contentEquals(actual, expected);
|
||||
|
||||
// console.info(contentEquals, input, expected, actual);
|
||||
|
||||
expect(contentEquals).toBe(true);
|
||||
}
|
||||
}));
|
||||
|
||||
it('should change the type of notes', asyncTest(async () => {
|
||||
let folder1 = await Folder.save({ title: "folder1" });
|
||||
let note1 = await Note.save({ title: 'ma note', parent_id: folder1.id });
|
||||
note1 = await Note.load(note1.id);
|
||||
|
||||
let changedNote = Note.changeNoteType(note1, 'todo');
|
||||
expect(changedNote === note1).toBe(false);
|
||||
expect(!!changedNote.is_todo).toBe(true);
|
||||
await Note.save(changedNote);
|
||||
|
||||
note1 = await Note.load(note1.id);
|
||||
changedNote = Note.changeNoteType(note1, 'todo');
|
||||
expect(changedNote === note1).toBe(true);
|
||||
expect(!!changedNote.is_todo).toBe(true);
|
||||
|
||||
note1 = await Note.load(note1.id);
|
||||
changedNote = Note.changeNoteType(note1, 'note');
|
||||
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);
|
||||
}
|
||||
}));
|
||||
|
||||
});
|
||||
90
CliClient/tests/models_Resource.js
Normal file
90
CliClient/tests/models_Resource.js
Normal file
@@ -0,0 +1,90 @@
|
||||
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 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) => {
|
||||
await setupDatabaseAndSynchronizer(1);
|
||||
await switchClient(1);
|
||||
done();
|
||||
});
|
||||
|
||||
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, testImagePath);
|
||||
let resource1 = (await Resource.all())[0];
|
||||
let ls = await Resource.localState(resource1);
|
||||
expect(ls.fetch_status).toBe(Resource.FETCH_STATUS_DONE);
|
||||
}));
|
||||
|
||||
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, testImagePath);
|
||||
let resource1 = (await Resource.all())[0];
|
||||
let ls = await Resource.localState(resource1);
|
||||
expect(!ls.id).toBe(true);
|
||||
expect(ls.resource_id).toBe(resource1.id);
|
||||
expect(ls.fetch_status).toBe(Resource.FETCH_STATUS_DONE);
|
||||
}));
|
||||
|
||||
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, testImagePath);
|
||||
let resource1 = (await Resource.all())[0];
|
||||
await Resource.setLocalState(resource1, { fetch_status: Resource.FETCH_STATUS_IDLE });
|
||||
|
||||
let ls = await Resource.localState(resource1);
|
||||
expect(!!ls.id).toBe(true);
|
||||
expect(ls.fetch_status).toBe(Resource.FETCH_STATUS_IDLE);
|
||||
|
||||
await Resource.delete(resource1.id);
|
||||
ls = await Resource.localState(resource1);
|
||||
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);
|
||||
}));
|
||||
|
||||
});
|
||||
71
CliClient/tests/models_Revision.js
Normal file
71
CliClient/tests/models_Revision.js
Normal file
@@ -0,0 +1,71 @@
|
||||
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');
|
||||
}));
|
||||
|
||||
});
|
||||
@@ -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);
|
||||
}));
|
||||
|
||||
});
|
||||
76
CliClient/tests/pathUtils.js
Normal file
76
CliClient/tests/pathUtils.js
Normal file
@@ -0,0 +1,76 @@
|
||||
require('app-module-path').addPath(__dirname);
|
||||
|
||||
const { extractExecutablePath, quotePath, unquotePath, friendlySafeFilename } = require('lib/path-utils.js');
|
||||
const { fileContentEqual, setupDatabase, setupDatabaseAndSynchronizer, db, synchronizer, fileApi, sleep, clearDatabase, switchClient, syncTargetId, objectsEqual, checkThrowAsync } = require('test-utils.js');
|
||||
|
||||
process.on('unhandledRejection', (reason, p) => {
|
||||
console.log('Unhandled Rejection at: Promise', p, 'reason:', reason);
|
||||
});
|
||||
|
||||
describe('pathUtils', function() {
|
||||
|
||||
beforeEach(async (done) => {
|
||||
done();
|
||||
});
|
||||
|
||||
it('should create friendly safe filename', async (done) => {
|
||||
const testCases = [
|
||||
['生活', '生活'],
|
||||
['not/good', 'not_good'],
|
||||
['really/not/good', 'really_not_good'],
|
||||
['con', '___'],
|
||||
['no space at the end ', 'no space at the end'],
|
||||
['nor dots...', 'nor dots'],
|
||||
[' no space before either', 'no space before either'],
|
||||
['thatsreallylongthatsreallylongthatsreallylongthatsreallylongthatsreallylongthatsreallylongthatsreallylongthatsreallylongthatsreallylongthatsreallylongthatsreallylongthatsreallylongthatsreallylongthatsreallylongthatsreallylongthatsreallylongthatsreallylongthatsreallylong', 'thatsreallylongthatsreallylongthatsreallylongthatsreallylongthatsreallylongthatsreallylongthatsreallylongthatsreallylongthatsreallylongthatsreallylongthatsreallylongthatsreallylongthatsreallylongthatsreallylongthatsreallylongthatsreallylongthatsreallylong'],
|
||||
];
|
||||
|
||||
for (let i = 0; i < testCases.length; i++) {
|
||||
const t = testCases[i];
|
||||
expect(friendlySafeFilename(t[0])).toBe(t[1]);
|
||||
}
|
||||
|
||||
expect(!!friendlySafeFilename('')).toBe(true);
|
||||
expect(!!friendlySafeFilename('...')).toBe(true);
|
||||
|
||||
done();
|
||||
});
|
||||
|
||||
it('should quote and unquote paths', async (done) => {
|
||||
const testCases = [
|
||||
['', ''],
|
||||
['/my/path', '/my/path'],
|
||||
['/my/path with spaces', '"/my/path with spaces"'],
|
||||
['/my/weird"path', '"/my/weird\\"path"'],
|
||||
['c:\\Windows\\test.dll', 'c:\\Windows\\test.dll'],
|
||||
['c:\\Windows\\test test.dll', '"c:\\Windows\\test test.dll"'],
|
||||
];
|
||||
|
||||
for (let i = 0; i < testCases.length; i++) {
|
||||
const t = testCases[i];
|
||||
expect(quotePath(t[0])).toBe(t[1]);
|
||||
expect(unquotePath(quotePath(t[0]))).toBe(t[0]);
|
||||
}
|
||||
|
||||
done();
|
||||
});
|
||||
|
||||
it('should extract executable path from command', async (done) => {
|
||||
const testCases = [
|
||||
['', ''],
|
||||
['/my/cmd -some -args', '/my/cmd'],
|
||||
['"/my/cmd" -some -args', '"/my/cmd"'],
|
||||
['"/my/cmd"', '"/my/cmd"'],
|
||||
['"/my/cmd and space" -some -flags', '"/my/cmd and space"'],
|
||||
['"" -some -flags', '""'],
|
||||
];
|
||||
|
||||
for (let i = 0; i < testCases.length; i++) {
|
||||
const t = testCases[i];
|
||||
expect(extractExecutablePath(t[0])).toBe(t[1]);
|
||||
}
|
||||
|
||||
done();
|
||||
});
|
||||
|
||||
});
|
||||
@@ -310,4 +310,51 @@ describe('services_InteropService', function() {
|
||||
expect(note2_2.body.indexOf(note1_2.id) >= 0).toBe(true);
|
||||
}));
|
||||
|
||||
it('should export into json format', asyncTest(async () => {
|
||||
const service = new InteropService();
|
||||
let folder1 = await Folder.save({ title: 'folder1' });
|
||||
let note1 = await Note.save({ title: 'ma note', parent_id: folder1.id });
|
||||
note1 = await Note.load(note1.id);
|
||||
const filePath = exportDir();
|
||||
|
||||
await service.export({ path: filePath, format: 'json' });
|
||||
|
||||
// verify that the json files exist and can be parsed
|
||||
const items = [folder1, note1];
|
||||
for (let i = 0; i < items.length; i++) {
|
||||
const jsonFile = filePath + '/' + items[i].id + '.json';
|
||||
let json = await fs.readFile(jsonFile, 'utf-8');
|
||||
let obj = JSON.parse(json);
|
||||
expect(obj.id).toBe(items[i].id);
|
||||
expect(obj.type_).toBe(items[i].type_);
|
||||
expect(obj.title).toBe(items[i].title);
|
||||
expect(obj.body).toBe(items[i].body);
|
||||
}
|
||||
}));
|
||||
|
||||
it('should export MD with unicode filenames', asyncTest(async () => {
|
||||
const service = new InteropService();
|
||||
let folder1 = await Folder.save({ title: 'folder1' });
|
||||
let folder2 = await Folder.save({ title: 'ジョプリン' });
|
||||
let note1 = await Note.save({ title: '生活', parent_id: folder1.id });
|
||||
let note2 = await Note.save({ title: '生活', parent_id: folder1.id });
|
||||
let note2b = await Note.save({ title: '生活', parent_id: folder1.id });
|
||||
let note3 = await Note.save({ title: '', parent_id: folder1.id });
|
||||
let note4 = await Note.save({ title: '', parent_id: folder1.id });
|
||||
let note5 = await Note.save({ title: 'salut, ça roule ?', parent_id: folder1.id });
|
||||
let note6 = await Note.save({ title: 'ジョプリン', parent_id: folder2.id });
|
||||
|
||||
const outDir = exportDir();
|
||||
|
||||
await service.export({ path: outDir, format: 'md' });
|
||||
|
||||
expect(await shim.fsDriver().exists(outDir + '/folder1/生活.md')).toBe(true);
|
||||
expect(await shim.fsDriver().exists(outDir + '/folder1/生活 (1).md')).toBe(true);
|
||||
expect(await shim.fsDriver().exists(outDir + '/folder1/生活 (2).md')).toBe(true);
|
||||
expect(await shim.fsDriver().exists(outDir + '/folder1/Untitled.md')).toBe(true);
|
||||
expect(await shim.fsDriver().exists(outDir + '/folder1/Untitled (1).md')).toBe(true);
|
||||
expect(await shim.fsDriver().exists(outDir + '/folder1/salut, ça roule _.md')).toBe(true);
|
||||
expect(await shim.fsDriver().exists(outDir + '/ジョプリン/ジョプリン.md')).toBe(true);
|
||||
}));
|
||||
|
||||
});
|
||||
@@ -1,19 +1,21 @@
|
||||
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');
|
||||
const Tag = require('lib/models/Tag.js');
|
||||
const NoteTag = require('lib/models/NoteTag.js');
|
||||
const Resource = require('lib/models/Resource.js');
|
||||
const ItemChange = require('lib/models/ItemChange.js');
|
||||
const NoteResource = require('lib/models/NoteResource.js');
|
||||
const ResourceService = require('lib/services/ResourceService.js');
|
||||
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);
|
||||
@@ -36,6 +38,7 @@ describe('services_ResourceService', function() {
|
||||
|
||||
beforeEach(async (done) => {
|
||||
await setupDatabaseAndSynchronizer(1);
|
||||
await setupDatabaseAndSynchronizer(2);
|
||||
await switchClient(1);
|
||||
done();
|
||||
});
|
||||
@@ -79,7 +82,6 @@ describe('services_ResourceService', function() {
|
||||
let note2 = await Note.save({ title: 'ma deuxième note', parent_id: folder1.id });
|
||||
note1 = await shim.attachFileToNote(note1, __dirname + '/../tests/support/photo.jpg');
|
||||
let resource1 = (await Resource.all())[0];
|
||||
const resourcePath = Resource.fullPath(resource1);
|
||||
|
||||
await service.indexNoteResources();
|
||||
|
||||
@@ -106,4 +108,109 @@ describe('services_ResourceService', function() {
|
||||
expect((await Resource.all()).length).toBe(1);
|
||||
}));
|
||||
|
||||
it('should not delete resource if it is used in an IMG tag', asyncTest(async () => {
|
||||
const service = new ResourceService();
|
||||
|
||||
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');
|
||||
let resource1 = (await Resource.all())[0];
|
||||
|
||||
await service.indexNoteResources();
|
||||
|
||||
await Note.save({ id: note1.id, body: 'This is HTML: <img src=":/' + resource1.id + '"/>' });
|
||||
|
||||
await service.indexNoteResources();
|
||||
|
||||
await service.deleteOrphanResources(0);
|
||||
|
||||
expect(!!(await Resource.load(resource1.id))).toBe(true);
|
||||
}));
|
||||
|
||||
it('should not process twice the same change', asyncTest(async () => {
|
||||
const service = new ResourceService();
|
||||
|
||||
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');
|
||||
let resource1 = (await Resource.all())[0];
|
||||
|
||||
await service.indexNoteResources();
|
||||
|
||||
const before = (await NoteResource.all())[0];
|
||||
|
||||
await time.sleep(0.1);
|
||||
|
||||
await service.indexNoteResources();
|
||||
|
||||
const after = (await NoteResource.all())[0];
|
||||
|
||||
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);
|
||||
}));
|
||||
|
||||
});
|
||||
326
CliClient/tests/services_SearchEngine.js
Normal file
326
CliClient/tests/services_SearchEngine.js
Normal file
@@ -0,0 +1,326 @@
|
||||
require('app-module-path').addPath(__dirname);
|
||||
|
||||
const { time } = require('lib/time-utils.js');
|
||||
const { fileContentEqual, setupDatabase, setupDatabaseAndSynchronizer, asyncTest, db, synchronizer, fileApi, sleep, clearDatabase, switchClient, syncTargetId, objectsEqual, checkThrowAsync } = require('test-utils.js');
|
||||
const SearchEngine = require('lib/services/SearchEngine');
|
||||
const Note = require('lib/models/Note');
|
||||
const ItemChange = require('lib/models/ItemChange');
|
||||
const Setting = require('lib/models/Setting');
|
||||
|
||||
process.on('unhandledRejection', (reason, p) => {
|
||||
console.log('Unhandled Rejection at: Promise', p, 'reason:', reason);
|
||||
});
|
||||
|
||||
let engine = null;
|
||||
|
||||
describe('services_SearchEngine', function() {
|
||||
|
||||
beforeEach(async (done) => {
|
||||
await setupDatabaseAndSynchronizer(1);
|
||||
await switchClient(1);
|
||||
|
||||
engine = new SearchEngine();
|
||||
engine.setDb(db());
|
||||
|
||||
done();
|
||||
});
|
||||
|
||||
it('should keep the content and FTS table in sync', asyncTest(async () => {
|
||||
let rows, n1, n2, n3;
|
||||
|
||||
n1 = await Note.save({ title: "a" });
|
||||
n2 = await Note.save({ title: "b" });
|
||||
await engine.syncTables();
|
||||
rows = await engine.search('a');
|
||||
expect(rows.length).toBe(1);
|
||||
expect(rows[0].title).toBe('a');
|
||||
|
||||
await Note.delete(n1.id);
|
||||
await engine.syncTables();
|
||||
rows = await engine.search('a');
|
||||
expect(rows.length).toBe(0);
|
||||
rows = await engine.search('b');
|
||||
expect(rows[0].title).toBe('b');
|
||||
|
||||
await Note.save({ id: n2.id, title: 'c' });
|
||||
await engine.syncTables();
|
||||
rows = await engine.search('b');
|
||||
expect(rows.length).toBe(0);
|
||||
rows = await engine.search('c');
|
||||
expect(rows[0].title).toBe('c');
|
||||
|
||||
await Note.save({ id: n2.id, encryption_applied: 1 });
|
||||
await engine.syncTables();
|
||||
rows = await engine.search('c');
|
||||
expect(rows.length).toBe(0);
|
||||
|
||||
await Note.save({ id: n2.id, encryption_applied: 0 });
|
||||
await engine.syncTables();
|
||||
rows = await engine.search('c');
|
||||
expect(rows.length).toBe(1);
|
||||
}));
|
||||
|
||||
it('should, after initial indexing, save the last change ID', asyncTest(async () => {
|
||||
const n1 = await Note.save({ title: "abcd efgh" }); // 3
|
||||
const n2 = await Note.save({ title: "abcd aaaaa abcd abcd" }); // 1
|
||||
|
||||
expect(Setting.value('searchEngine.initialIndexingDone')).toBe(false);
|
||||
|
||||
await ItemChange.waitForAllSaved();
|
||||
const lastChangeId = await ItemChange.lastChangeId();
|
||||
|
||||
await engine.syncTables();
|
||||
|
||||
expect(Setting.value('searchEngine.lastProcessedChangeId')).toBe(lastChangeId);
|
||||
expect(Setting.value('searchEngine.initialIndexingDone')).toBe(true);
|
||||
}));
|
||||
|
||||
|
||||
it('should order search results by relevance (1)', asyncTest(async () => {
|
||||
const n1 = await Note.save({ title: "abcd efgh" }); // 3
|
||||
const n2 = await Note.save({ title: "abcd aaaaa abcd abcd" }); // 1
|
||||
const n3 = await Note.save({ title: "abcd aaaaa bbbb eeee abcd" }); // 2
|
||||
|
||||
await engine.syncTables();
|
||||
const rows = await engine.search('abcd');
|
||||
|
||||
expect(rows[0].id).toBe(n2.id);
|
||||
expect(rows[1].id).toBe(n3.id);
|
||||
expect(rows[2].id).toBe(n1.id);
|
||||
}));
|
||||
|
||||
it('should order search results by relevance (2)', asyncTest(async () => {
|
||||
// 1
|
||||
const n1 = await Note.save({ title: "abcd efgh", body: "XX abcd XX efgh" });
|
||||
// 4
|
||||
const n2 = await Note.save({ title: "abcd aaaaa bbbb eeee efgh" });
|
||||
// 3
|
||||
const n3 = await Note.save({ title: "abcd aaaaa efgh" });
|
||||
// 2
|
||||
const n4 = await Note.save({ title: "blablablabla blabla bla abcd X efgh" });
|
||||
// 5
|
||||
const n5 = await Note.save({ title: "occurence many times but very abcd spread appart spread appart spread appart spread appart spread appart efgh occurence many times but very abcd spread appart spread appart spread appart spread appart spread appart efgh occurence many times but very abcd spread appart spread appart spread appart spread appart spread appart efgh occurence many times but very abcd spread appart spread appart spread appart spread appart spread appart efgh occurence many times but very abcd spread appart spread appart spread appart spread appart spread appart efgh" });
|
||||
|
||||
await engine.syncTables();
|
||||
const rows = await engine.search('abcd efgh');
|
||||
|
||||
expect(rows[0].id).toBe(n1.id);
|
||||
expect(rows[1].id).toBe(n4.id);
|
||||
expect(rows[2].id).toBe(n3.id);
|
||||
expect(rows[3].id).toBe(n2.id);
|
||||
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;
|
||||
|
||||
const n1 = await Note.save({ title: "abcd efgh ijkl", body: "aaaa bbbb" });
|
||||
const n2 = await Note.save({ title: "iiii efgh bbbb", body: "aaaa bbbb" });
|
||||
const n3 = await Note.save({ title: "Агентство Рейтер" });
|
||||
const n4 = await Note.save({ title: "Dog" });
|
||||
const n5 = await Note.save({ title: "СООБЩИЛО" });
|
||||
|
||||
await engine.syncTables();
|
||||
|
||||
rows = await engine.search('abcd ijkl');
|
||||
expect(rows.length).toBe(1);
|
||||
|
||||
rows = await engine.search('"abcd ijkl"');
|
||||
expect(rows.length).toBe(0);
|
||||
|
||||
rows = await engine.search('"abcd efgh"');
|
||||
expect(rows.length).toBe(1);
|
||||
|
||||
rows = await engine.search('title:abcd');
|
||||
expect(rows.length).toBe(1);
|
||||
|
||||
rows = await engine.search('title:efgh');
|
||||
expect(rows.length).toBe(2);
|
||||
|
||||
rows = await engine.search('body:abcd');
|
||||
expect(rows.length).toBe(0);
|
||||
|
||||
rows = await engine.search('body:bbbb');
|
||||
expect(rows.length).toBe(2);
|
||||
|
||||
rows = await engine.search('body:bbbb iiii');
|
||||
expect(rows.length).toBe(1);
|
||||
|
||||
rows = await engine.search('Рейтер');
|
||||
expect(rows.length).toBe(1);
|
||||
|
||||
rows = await engine.search('рейтер');
|
||||
expect(rows.length).toBe(1);
|
||||
|
||||
rows = await engine.search('Dog');
|
||||
expect(rows.length).toBe(1);
|
||||
|
||||
rows = await engine.search('dog');
|
||||
expect(rows.length).toBe(1);
|
||||
|
||||
rows = await engine.search('сообщило');
|
||||
expect(rows.length).toBe(1);
|
||||
}));
|
||||
|
||||
it('should support queries with or without accents', asyncTest(async () => {
|
||||
let rows;
|
||||
const n1 = await Note.save({ title: "père noël" });
|
||||
|
||||
await engine.syncTables();
|
||||
|
||||
expect((await engine.search('père')).length).toBe(1);
|
||||
expect((await engine.search('pere')).length).toBe(1);
|
||||
expect((await engine.search('noe*')).length).toBe(1);
|
||||
expect((await engine.search('noë*')).length).toBe(1);
|
||||
}));
|
||||
|
||||
it('should support queries with Chinese characters', asyncTest(async () => {
|
||||
let rows;
|
||||
const n1 = await Note.save({ title: "我是法国人" });
|
||||
|
||||
await engine.syncTables();
|
||||
|
||||
expect((await engine.search('我')).length).toBe(1);
|
||||
expect((await engine.search('法国人')).length).toBe(1);
|
||||
}));
|
||||
|
||||
it('should support queries with Japanese characters', asyncTest(async () => {
|
||||
let rows;
|
||||
const n1 = await Note.save({ title: "私は日本語を話すことができません" });
|
||||
|
||||
await engine.syncTables();
|
||||
|
||||
expect((await engine.search('日本')).length).toBe(1);
|
||||
expect((await engine.search('できません')).length).toBe(1);
|
||||
}));
|
||||
|
||||
it('should support queries with Korean characters', asyncTest(async () => {
|
||||
let rows;
|
||||
const n1 = await Note.save({ title: "이것은 한국말이다" });
|
||||
|
||||
await engine.syncTables();
|
||||
|
||||
expect((await engine.search('이것은')).length).toBe(1);
|
||||
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;
|
||||
|
||||
const testCases = [
|
||||
['abcd efgh', { _: ['abcd', 'efgh'] }],
|
||||
['abcd efgh', { _: ['abcd', 'efgh'] }],
|
||||
['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++) {
|
||||
const t = testCases[i];
|
||||
const input = t[0];
|
||||
const expected = t[1];
|
||||
const actual = engine.parseQuery(input);
|
||||
|
||||
const _Values = actual.terms._ ? actual.terms._.map(v => v.value) : undefined;
|
||||
const titleValues = actual.terms.title ? actual.terms.title.map(v => v.value) : undefined;
|
||||
const bodyValues = actual.terms.body ? actual.terms.body.map(v => v.value) : undefined;
|
||||
|
||||
expect(JSON.stringify(_Values)).toBe(JSON.stringify(expected._), 'Test case (_) ' + i);
|
||||
expect(JSON.stringify(titleValues)).toBe(JSON.stringify(expected.title), 'Test case (title) ' + i);
|
||||
expect(JSON.stringify(bodyValues)).toBe(JSON.stringify(expected.body), 'Test case (body) ' + i);
|
||||
}
|
||||
}));
|
||||
|
||||
it('should handle queries with special characters', asyncTest(async () => {
|
||||
let rows;
|
||||
|
||||
const testCases = [
|
||||
['did-not-match', 'did-not-match'],
|
||||
['does match', 'does match'],
|
||||
];
|
||||
|
||||
for (let i = 0; i < testCases.length; i++) {
|
||||
const t = testCases[i];
|
||||
const content = t[0];
|
||||
const query = t[1];
|
||||
|
||||
const n = await Note.save({ title: content });
|
||||
await engine.syncTables();
|
||||
rows = await engine.search(query);
|
||||
expect(rows.length).toBe(1);
|
||||
|
||||
await Note.delete(n.id);
|
||||
}
|
||||
}));
|
||||
|
||||
});
|
||||
300
CliClient/tests/services_rest_Api.js
Normal file
300
CliClient/tests/services_rest_Api.js
Normal file
@@ -0,0 +1,300 @@
|
||||
require('app-module-path').addPath(__dirname);
|
||||
|
||||
const { time } = require('lib/time-utils.js');
|
||||
const { fileContentEqual, setupDatabase, setupDatabaseAndSynchronizer, db, synchronizer, fileApi, sleep, clearDatabase, switchClient, syncTargetId, objectsEqual, checkThrowAsync } = require('test-utils.js');
|
||||
const markdownUtils = require('lib/markdownUtils.js');
|
||||
const Api = require('lib/services/rest/Api');
|
||||
const Folder = require('lib/models/Folder');
|
||||
const Note = require('lib/models/Note');
|
||||
const Tag = require('lib/models/Tag');
|
||||
const Resource = require('lib/models/Resource');
|
||||
|
||||
jasmine.DEFAULT_TIMEOUT_INTERVAL = 10000;
|
||||
|
||||
process.on('unhandledRejection', (reason, p) => {
|
||||
console.log('Unhandled Rejection at: Promise', p, 'reason:', reason);
|
||||
});
|
||||
|
||||
let api = null;
|
||||
|
||||
describe('services_rest_Api', function() {
|
||||
|
||||
beforeEach(async (done) => {
|
||||
api = new Api();
|
||||
await setupDatabaseAndSynchronizer(1);
|
||||
await switchClient(1);
|
||||
done();
|
||||
});
|
||||
|
||||
it('should ping', async (done) => {
|
||||
const response = await api.route('GET', 'ping');
|
||||
expect(response).toBe('JoplinClipperServer');
|
||||
done();
|
||||
});
|
||||
|
||||
it('should handle Not Found errors', async (done) => {
|
||||
const hasThrown = await checkThrowAsync(async () => await api.route('GET', 'pong'));
|
||||
expect(hasThrown).toBe(true);
|
||||
done();
|
||||
});
|
||||
|
||||
it('should get folders', async (done) => {
|
||||
let f1 = await Folder.save({ title: "mon carnet" });
|
||||
const response = await api.route('GET', 'folders');
|
||||
expect(response.length).toBe(1);
|
||||
expect(response[0].title).toBe('mon carnet');
|
||||
done();
|
||||
});
|
||||
|
||||
it('should update folders', async (done) => {
|
||||
let f1 = await Folder.save({ title: "mon carnet" });
|
||||
const response = await api.route('PUT', 'folders/' + f1.id, null, JSON.stringify({
|
||||
title: 'modifié',
|
||||
}));
|
||||
|
||||
let f1b = await Folder.load(f1.id);
|
||||
expect(f1b.title).toBe('modifié');
|
||||
|
||||
done();
|
||||
});
|
||||
|
||||
it('should delete folders', async (done) => {
|
||||
let f1 = await Folder.save({ title: "mon carnet" });
|
||||
await api.route('DELETE', 'folders/' + f1.id);
|
||||
|
||||
let f1b = await Folder.load(f1.id);
|
||||
expect(!f1b).toBe(true);
|
||||
|
||||
done();
|
||||
});
|
||||
|
||||
it('should create folders', async (done) => {
|
||||
const response = await api.route('POST', 'folders', null, JSON.stringify({
|
||||
title: 'from api',
|
||||
}));
|
||||
|
||||
expect(!!response.id).toBe(true);
|
||||
|
||||
let f = await Folder.all();
|
||||
expect(f.length).toBe(1);
|
||||
expect(f[0].title).toBe('from api');
|
||||
|
||||
done();
|
||||
});
|
||||
|
||||
it('should get one folder', async (done) => {
|
||||
let f1 = await Folder.save({ title: "mon carnet" });
|
||||
const response = await api.route('GET', 'folders/' + f1.id);
|
||||
expect(response.id).toBe(f1.id);
|
||||
|
||||
const hasThrown = await checkThrowAsync(async () => await api.route('GET', 'folders/doesntexist'));
|
||||
expect(hasThrown).toBe(true);
|
||||
|
||||
done();
|
||||
});
|
||||
|
||||
it('should get the folder notes', async (done) => {
|
||||
let f1 = await Folder.save({ title: "mon carnet" });
|
||||
const response2 = await api.route('GET', 'folders/' + f1.id + '/notes');
|
||||
expect(response2.length).toBe(0);
|
||||
|
||||
const n1 = await Note.save({ title: 'un', parent_id: f1.id });
|
||||
const n2 = await Note.save({ title: 'deux', parent_id: f1.id });
|
||||
const response = await api.route('GET', 'folders/' + f1.id + '/notes');
|
||||
expect(response.length).toBe(2);
|
||||
|
||||
done();
|
||||
});
|
||||
|
||||
it('should fail on invalid paths', async (done) => {
|
||||
const hasThrown = await checkThrowAsync(async () => await api.route('GET', 'schtroumpf'));
|
||||
expect(hasThrown).toBe(true);
|
||||
|
||||
done();
|
||||
});
|
||||
|
||||
it('should get notes', async (done) => {
|
||||
let response = null;
|
||||
const f1 = await Folder.save({ title: "mon carnet" });
|
||||
const f2 = await Folder.save({ title: "mon deuxième carnet" });
|
||||
const n1 = await Note.save({ title: 'un', parent_id: f1.id });
|
||||
const n2 = await Note.save({ title: 'deux', parent_id: f1.id });
|
||||
const n3 = await Note.save({ title: 'trois', parent_id: f2.id });
|
||||
|
||||
response = await api.route('GET', 'notes');
|
||||
expect(response.length).toBe(3);
|
||||
|
||||
response = await api.route('GET', 'notes/' + n1.id);
|
||||
expect(response.id).toBe(n1.id);
|
||||
|
||||
response = await api.route('GET', 'notes/' + n3.id, { fields: 'id,title' });
|
||||
expect(Object.getOwnPropertyNames(response).length).toBe(3);
|
||||
expect(response.id).toBe(n3.id);
|
||||
expect(response.title).toBe('trois');
|
||||
|
||||
done();
|
||||
});
|
||||
|
||||
it('should create notes', async (done) => {
|
||||
let response = null;
|
||||
const f = await Folder.save({ title: "mon carnet" });
|
||||
|
||||
response = await api.route('POST', 'notes', null, JSON.stringify({
|
||||
title: 'testing',
|
||||
parent_id: f.id,
|
||||
}));
|
||||
expect(response.title).toBe('testing');
|
||||
expect(!!response.id).toBe(true);
|
||||
|
||||
response = await api.route('POST', 'notes', null, JSON.stringify({
|
||||
title: 'testing',
|
||||
parent_id: f.id,
|
||||
}));
|
||||
expect(response.title).toBe('testing');
|
||||
expect(!!response.id).toBe(true);
|
||||
|
||||
done();
|
||||
});
|
||||
|
||||
it('should create notes with supplied ID', async (done) => {
|
||||
let response = null;
|
||||
const f = await Folder.save({ title: "mon carnet" });
|
||||
|
||||
response = await api.route('POST', 'notes', null, JSON.stringify({
|
||||
id: '12345678123456781234567812345678',
|
||||
title: 'testing',
|
||||
parent_id: f.id,
|
||||
}));
|
||||
expect(response.id).toBe('12345678123456781234567812345678');
|
||||
|
||||
done();
|
||||
});
|
||||
|
||||
it('should create folders with supplied ID', async (done) => {
|
||||
const response = await api.route('POST', 'folders', null, JSON.stringify({
|
||||
id: '12345678123456781234567812345678',
|
||||
title: 'from api',
|
||||
}));
|
||||
|
||||
expect(response.id).toBe('12345678123456781234567812345678');
|
||||
|
||||
done();
|
||||
});
|
||||
|
||||
it('should create notes with images', async (done) => {
|
||||
let response = null;
|
||||
const f = await Folder.save({ title: "mon carnet" });
|
||||
|
||||
response = await api.route('POST', 'notes', null, JSON.stringify({
|
||||
title: 'testing image',
|
||||
parent_id: f.id,
|
||||
image_data_url: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAICAIAAABLbSncAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAANZJREFUeNoAyAA3/wFwtO3K6gUB/vz2+Prw9fj/+/r+/wBZKAAExOgF4/MC9ff+MRH6Ui4E+/0Bqc/zutj6AgT+/Pz7+vv7++nu82c4DlMqCvLs8goA/gL8/fz09fb59vXa6vzZ6vjT5fbn6voD/fwC8vX4UiT9Zi//APHyAP8ACgUBAPv5APz7BPj2+DIaC2o3E+3o6ywaC5fT6gD6/QD9/QEVf9kD+/dcLQgJA/7v8vqfwOf18wA1IAIEVycAyt//v9XvAPv7APz8LhoIAPz9Ri4OAgwARgx4W/6fVeEAAAAASUVORK5CYII="
|
||||
}));
|
||||
|
||||
const resources = await Resource.all();
|
||||
expect(resources.length).toBe(1);
|
||||
|
||||
const resource = resources[0];
|
||||
expect(response.body.indexOf(resource.id) >= 0).toBe(true);
|
||||
|
||||
done();
|
||||
});
|
||||
|
||||
it('should create notes from HTML', async (done) => {
|
||||
let response = null;
|
||||
const f = await Folder.save({ title: "mon carnet" });
|
||||
|
||||
response = await api.route('POST', 'notes', null, JSON.stringify({
|
||||
title: 'testing HTML',
|
||||
parent_id: f.id,
|
||||
body_html: '<b>Bold text</b>',
|
||||
}));
|
||||
|
||||
expect(response.body).toBe('**Bold text**');
|
||||
|
||||
done();
|
||||
});
|
||||
|
||||
it('should filter fields', async (done) => {
|
||||
let f = api.fields_({ query: { fields: 'one,two' } }, []);
|
||||
expect(f.length).toBe(2);
|
||||
expect(f[0]).toBe('one');
|
||||
expect(f[1]).toBe('two');
|
||||
|
||||
f = api.fields_({ query: { fields: 'one ,, two ' } }, []);
|
||||
expect(f.length).toBe(2);
|
||||
expect(f[0]).toBe('one');
|
||||
expect(f[1]).toBe('two');
|
||||
|
||||
f = api.fields_({ query: { fields: ' ' } }, ['def']);
|
||||
expect(f.length).toBe(1);
|
||||
expect(f[0]).toBe('def');
|
||||
|
||||
done();
|
||||
});
|
||||
|
||||
it('should handle tokens', async (done) => {
|
||||
api = new Api('mytoken');
|
||||
|
||||
let hasThrown = await checkThrowAsync(async () => await api.route('GET', 'notes'));
|
||||
expect(hasThrown).toBe(true);
|
||||
|
||||
const response = await api.route('GET', 'notes', { token: 'mytoken' })
|
||||
expect(response.length).toBe(0);
|
||||
|
||||
hasThrown = await checkThrowAsync(async () => await api.route('POST', 'notes', null, JSON.stringify({title:'testing'})));
|
||||
expect(hasThrown).toBe(true);
|
||||
|
||||
done();
|
||||
});
|
||||
|
||||
it('should add tags to notes', async (done) => {
|
||||
const tag = await Tag.save({ title: "mon étiquette" });
|
||||
const note = await Note.save({ title: "ma note" });
|
||||
|
||||
const response = await api.route('POST', 'tags/' + tag.id + '/notes', null, JSON.stringify({
|
||||
id: note.id,
|
||||
}));
|
||||
|
||||
const noteIds = await Tag.noteIds(tag.id);
|
||||
expect(noteIds[0]).toBe(note.id);
|
||||
|
||||
done();
|
||||
});
|
||||
|
||||
it('should remove tags from notes', async (done) => {
|
||||
const tag = await Tag.save({ title: "mon étiquette" });
|
||||
const note = await Note.save({ title: "ma note" });
|
||||
await Tag.addNote(tag.id, note.id);
|
||||
|
||||
const response = await api.route('DELETE', 'tags/' + tag.id + '/notes/' + note.id);
|
||||
|
||||
const noteIds = await Tag.noteIds(tag.id);
|
||||
expect(noteIds.length).toBe(0);
|
||||
|
||||
done();
|
||||
});
|
||||
|
||||
it('should list all tag notes', async (done) => {
|
||||
const tag = await Tag.save({ title: "mon étiquette" });
|
||||
const tag2 = await Tag.save({ title: "mon étiquette 2" });
|
||||
const note1 = await Note.save({ title: "ma note un" });
|
||||
const note2 = await Note.save({ title: "ma note deux" });
|
||||
await Tag.addNote(tag.id, note1.id);
|
||||
await Tag.addNote(tag.id, note2.id);
|
||||
|
||||
const response = await api.route('GET', 'tags/' + tag.id + '/notes');
|
||||
expect(response.length).toBe(2);
|
||||
expect('id' in response[0]).toBe(true);
|
||||
expect('title' in response[0]).toBe(true);
|
||||
|
||||
const response2 = await api.route('GET', 'notes/' + note1.id + '/tags');
|
||||
expect(response2.length).toBe(1);
|
||||
await Tag.addNote(tag2.id, note1.id);
|
||||
const response3 = await api.route('GET', 'notes/' + note1.id + '/tags');
|
||||
expect(response3.length).toBe(2);
|
||||
|
||||
done();
|
||||
});
|
||||
|
||||
});
|
||||
@@ -1,19 +1,22 @@
|
||||
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, 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');
|
||||
const Note = require('lib/models/Note.js');
|
||||
const Resource = require('lib/models/Resource.js');
|
||||
const ResourceFetcher = require('lib/services/ResourceFetcher');
|
||||
const Tag = require('lib/models/Tag.js');
|
||||
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');
|
||||
|
||||
process.on('unhandledRejection', (reason, p) => {
|
||||
console.log('Unhandled Rejection at: Promise', p, 'reason:', reason);
|
||||
@@ -21,51 +24,40 @@ 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 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];
|
||||
@@ -75,12 +67,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);
|
||||
@@ -112,11 +98,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 () => {
|
||||
@@ -126,10 +112,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 () => {
|
||||
@@ -141,9 +127,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 () => {
|
||||
@@ -168,9 +154,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 () => {
|
||||
@@ -262,11 +248,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);
|
||||
@@ -309,7 +293,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);
|
||||
@@ -332,8 +316,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 () => {
|
||||
@@ -350,8 +334,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 () => {
|
||||
@@ -368,7 +352,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);
|
||||
@@ -390,11 +374,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 () => {
|
||||
@@ -423,13 +407,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);
|
||||
@@ -492,7 +476,7 @@ describe('Synchronizer', function() {
|
||||
|
||||
await synchronizer().start();
|
||||
|
||||
let items = await allItems();
|
||||
let items = await allNotesFolders();
|
||||
|
||||
expect(items.length).toBe(1);
|
||||
}));
|
||||
@@ -710,7 +694,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
|
||||
@@ -863,8 +847,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);
|
||||
|
||||
@@ -872,12 +856,72 @@ describe('Synchronizer', function() {
|
||||
let allResources = await Resource.all();
|
||||
expect(allResources.length).toBe(1);
|
||||
let resource1_2 = allResources[0];
|
||||
let resourcePath1_2 = Resource.fullPath(resource1_2);
|
||||
|
||||
let ls = await Resource.localState(resource1_2);
|
||||
expect(resource1_2.id).toBe(resource1.id);
|
||||
expect(ls.fetch_status).toBe(Resource.FETCH_STATUS_IDLE);
|
||||
|
||||
const fetcher = new ResourceFetcher(() => { return synchronizer().api() });
|
||||
fetcher.queueDownload(resource1_2.id);
|
||||
await fetcher.waitForAllFinished();
|
||||
|
||||
resource1_2 = await Resource.load(resource1.id);
|
||||
ls = await Resource.localState(resource1_2);
|
||||
expect(ls.fetch_status).toBe(Resource.FETCH_STATUS_DONE);
|
||||
|
||||
let resourcePath1_2 = Resource.fullPath(resource1_2);
|
||||
expect(fileContentEqual(resourcePath1, resourcePath1_2)).toBe(true);
|
||||
}));
|
||||
|
||||
it('should handle resource download errors', 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');
|
||||
let resource1 = (await Resource.all())[0];
|
||||
let resourcePath1 = Resource.fullPath(resource1);
|
||||
await synchronizer().start();
|
||||
|
||||
await switchClient(2);
|
||||
|
||||
await synchronizer().start();
|
||||
|
||||
const fetcher = new ResourceFetcher(() => { return {
|
||||
// Simulate a failed download
|
||||
get: () => { return new Promise((resolve, reject) => { reject(new Error('did not work')) }); }
|
||||
} });
|
||||
fetcher.queueDownload(resource1.id);
|
||||
await fetcher.waitForAllFinished();
|
||||
|
||||
resource1 = await Resource.load(resource1.id);
|
||||
let ls = await Resource.localState(resource1);
|
||||
expect(ls.fetch_status).toBe(Resource.FETCH_STATUS_ERROR);
|
||||
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);
|
||||
|
||||
@@ -894,11 +938,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);
|
||||
|
||||
@@ -926,6 +969,10 @@ describe('Synchronizer', function() {
|
||||
Setting.setObjectKey('encryption.passwordCache', masterKey.id, '123456');
|
||||
await encryptionService().loadMasterKeysFromSettings();
|
||||
|
||||
const fetcher = new ResourceFetcher(() => { return synchronizer().api() });
|
||||
fetcher.queueDownload(resource1.id);
|
||||
await fetcher.waitForAllFinished();
|
||||
|
||||
let resource1_2 = (await Resource.all())[0];
|
||||
resource1_2 = await Resource.decrypt(resource1_2);
|
||||
let resourcePath1_2 = Resource.fullPath(resource1_2);
|
||||
@@ -987,6 +1034,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);
|
||||
|
||||
@@ -1025,11 +1099,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 () => {
|
||||
@@ -1047,7 +1121,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);
|
||||
@@ -1057,4 +1131,193 @@ describe('Synchronizer', function() {
|
||||
expect(note2.title).toBe("un UPDATE");
|
||||
}));
|
||||
|
||||
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();
|
||||
|
||||
await switchClient(2);
|
||||
|
||||
await WelcomeUtils.createWelcomeItems();
|
||||
const beforeFolderCount = (await Folder.all()).length;
|
||||
const beforeNoteCount = (await Note.all()).length;
|
||||
expect(beforeFolderCount === 1).toBe(true);
|
||||
expect(beforeNoteCount > 1).toBe(true);
|
||||
|
||||
await synchronizer().start();
|
||||
|
||||
const afterFolderCount = (await Folder.all()).length;
|
||||
const afterNoteCount = (await Note.all()).length;
|
||||
|
||||
expect(afterFolderCount).toBe(beforeFolderCount * 2);
|
||||
expect(afterNoteCount).toBe(beforeNoteCount * 2);
|
||||
|
||||
// Changes to the Welcome items should be synced to all clients
|
||||
|
||||
const f1 = (await Folder.all())[0];
|
||||
await Folder.save({ id: f1.id, title: 'Welcome MOD' });
|
||||
|
||||
await synchronizer().start();
|
||||
|
||||
await switchClient(1);
|
||||
|
||||
await synchronizer().start();
|
||||
|
||||
const f1_1 = await Folder.load(f1.id);
|
||||
expect(f1_1.title).toBe('Welcome MOD');
|
||||
|
||||
// Now check that it created the duplicate tag
|
||||
|
||||
const tags = await Tag.modelSelectAll('SELECT * FROM tags WHERE title = "organising"');
|
||||
expect(tags.length).toBe(2);
|
||||
}));
|
||||
|
||||
it("should not save revisions when updating a note via sync", asyncTest(async () => {
|
||||
// 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);
|
||||
}));
|
||||
|
||||
});
|
||||
|
||||
@@ -4,9 +4,11 @@ const { DatabaseDriverNode } = require('lib/database-driver-node.js');
|
||||
const BaseModel = require('lib/BaseModel.js');
|
||||
const Folder = require('lib/models/Folder.js');
|
||||
const Note = require('lib/models/Note.js');
|
||||
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');
|
||||
@@ -29,13 +31,17 @@ 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 WebDavApi = require('lib/WebDavApi');
|
||||
const DropboxApi = require('lib/DropboxApi');
|
||||
|
||||
let databases_ = [];
|
||||
let synchronizers_ = [];
|
||||
let encryptionServices_ = [];
|
||||
let revisionServices_ = [];
|
||||
let decryptionWorkers_ = [];
|
||||
let resourceServices_ = [];
|
||||
let fileApi_ = null;
|
||||
let currentClient_ = 1;
|
||||
|
||||
@@ -48,7 +54,9 @@ EncryptionService.fsDriver_ = fsDriver;
|
||||
FileApiDriverLocal.fsDriver_ = fsDriver;
|
||||
|
||||
const logDir = __dirname + '/../tests/logs';
|
||||
const tempDir = __dirname + '/../tests/tmp';
|
||||
fs.mkdirpSync(logDir, 0o755);
|
||||
fs.mkdirpSync(tempDir, 0o755);
|
||||
|
||||
SyncTargetRegistry.addClass(SyncTargetMemory);
|
||||
SyncTargetRegistry.addClass(SyncTargetFilesystem);
|
||||
@@ -77,9 +85,11 @@ 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');
|
||||
Setting.setConstant('tempDir', tempDir);
|
||||
|
||||
BaseService.logger_ = logger;
|
||||
|
||||
@@ -98,6 +108,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();
|
||||
|
||||
@@ -107,9 +119,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));
|
||||
|
||||
@@ -119,20 +133,30 @@ async function switchClient(id) {
|
||||
async function clearDatabase(id = null) {
|
||||
if (id === null) id = currentClient_;
|
||||
|
||||
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',
|
||||
await ItemChange.waitForAllSaved();
|
||||
|
||||
const tableNames = [
|
||||
'notes',
|
||||
'folders',
|
||||
'resources',
|
||||
'tags',
|
||||
'note_tags',
|
||||
'master_keys',
|
||||
'item_changes',
|
||||
'note_resources',
|
||||
'settings',
|
||||
'deleted_items',
|
||||
'sync_items',
|
||||
'notes_normalized',
|
||||
'revisions',
|
||||
];
|
||||
|
||||
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);
|
||||
}
|
||||
|
||||
@@ -157,6 +181,7 @@ async function setupDatabase(id = null) {
|
||||
};
|
||||
|
||||
databases_[id] = new JoplinDatabase(new DatabaseDriverNode());
|
||||
databases_[id].setLogger(logger);
|
||||
await databases_[id].open({ name: filePath });
|
||||
|
||||
BaseModel.db_ = databases_[id];
|
||||
@@ -189,8 +214,10 @@ 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();
|
||||
|
||||
await fileApi().clearRoot();
|
||||
}
|
||||
@@ -210,11 +237,21 @@ function encryptionService(id = null) {
|
||||
return encryptionServices_[id];
|
||||
}
|
||||
|
||||
function revisionService(id = null) {
|
||||
if (id === null) id = currentClient_;
|
||||
return revisionServices_[id];
|
||||
}
|
||||
|
||||
function decryptionWorker(id = null) {
|
||||
if (id === null) id = currentClient_;
|
||||
return decryptionWorkers_[id];
|
||||
}
|
||||
|
||||
function resourceService(id = null) {
|
||||
if (id === null) id = currentClient_;
|
||||
return resourceServices_[id];
|
||||
}
|
||||
|
||||
async function loadEncryptionMasterKey(id = null, useExisting = false) {
|
||||
const service = encryptionService(id);
|
||||
|
||||
@@ -307,4 +344,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 = { resourceService, allSyncTargetItemsEncrypted, setupDatabase, revisionService, setupDatabaseAndSynchronizer, db, synchronizer, fileApi, sleep, clearDatabase, switchClient, syncTargetId, objectsEqual, checkThrowAsync, encryptionService, loadEncryptionMasterKey, fileContentEqual, decryptionWorker, asyncTest };
|
||||
|
||||
1
CliClientDemo/.gitignore
vendored
1
CliClientDemo/.gitignore
vendored
@@ -1 +0,0 @@
|
||||
node_modules
|
||||
Binary file not shown.
@@ -1,31 +0,0 @@
|
||||
#!/usr/bin/env node
|
||||
|
||||
'use strict';
|
||||
|
||||
const spawn = require('child_process').spawn;
|
||||
const os = require('os');
|
||||
const fs = require('fs-extra');
|
||||
|
||||
const joplinPath = __dirname + '/node_modules/.bin/joplin';
|
||||
const profileDir = os.homedir() + '/.config/demo-joplin';
|
||||
const dbFilename = 'database.sqlite';
|
||||
|
||||
fs.ensureDirSync(profileDir);
|
||||
if (!fs.pathExistsSync(profileDir + '/' + dbFilename)) {
|
||||
fs.copySync(__dirname + '/' + dbFilename, profileDir + '/' + dbFilename);
|
||||
}
|
||||
|
||||
const opt = {
|
||||
cwd: __dirname,
|
||||
env: (function() {
|
||||
process.env.NODE_PATH = '.';
|
||||
return process.env;
|
||||
}()),
|
||||
stdio: [process.stdin, process.stdout, process.stderr]
|
||||
};
|
||||
|
||||
const app = spawn(joplinPath, ['--is-demo', '--profile', profileDir], opt);
|
||||
|
||||
app.on('close', (code) => {
|
||||
process.exit(code);
|
||||
});
|
||||
2124
CliClientDemo/package-lock.json
generated
2124
CliClientDemo/package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@@ -1,33 +0,0 @@
|
||||
{
|
||||
"name": "demo-joplin",
|
||||
"version": "1.0.8",
|
||||
"description": "Demo for Joplin CLI",
|
||||
"bin": {
|
||||
"demo-joplin": "./index.js"
|
||||
},
|
||||
"bugs": {
|
||||
"url": "https://github.com/laurent22/joplin/issues"
|
||||
},
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/laurent22/joplin"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=8.7.0"
|
||||
},
|
||||
"copyright": {
|
||||
"title": "Demo for Joplin CLI",
|
||||
"years": [
|
||||
2016,
|
||||
2017,
|
||||
2018
|
||||
],
|
||||
"owner": "Laurent Cozic"
|
||||
},
|
||||
"dependencies": {
|
||||
"fs-extra": "^4.0.2",
|
||||
"joplin": "^0.10.69"
|
||||
},
|
||||
"author": "Laurent Cozic",
|
||||
"license": "MIT"
|
||||
}
|
||||
@@ -1,5 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
|
||||
npm version patch
|
||||
npm publish
|
||||
@@ -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,6 +14,20 @@
|
||||
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('//')) {
|
||||
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();
|
||||
@@ -30,8 +44,24 @@
|
||||
return output;
|
||||
}
|
||||
|
||||
function getImageSizes(element, forceAbsoluteUrls = false) {
|
||||
const images = element.getElementsByTagName('img');
|
||||
const output = {};
|
||||
for (let i = 0; i < images.length; i++) {
|
||||
const img = images[i];
|
||||
const src = forceAbsoluteUrls ? absoluteUrl(img.src) : img.src;
|
||||
output[src] = {
|
||||
width: img.width,
|
||||
height: img.height,
|
||||
naturalWidth: img.naturalWidth,
|
||||
naturalHeight: img.naturalHeight,
|
||||
};
|
||||
}
|
||||
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++) {
|
||||
@@ -43,11 +73,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,
|
||||
@@ -57,10 +103,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');
|
||||
@@ -74,14 +117,16 @@
|
||||
async function prepareCommandResponse(command) {
|
||||
console.info('Got command: ' + command.name);
|
||||
|
||||
const clippedContentResponse = (title, html) => {
|
||||
const clippedContentResponse = (title, html, imageSizes) => {
|
||||
return {
|
||||
name: 'clippedContent',
|
||||
title: title,
|
||||
html: html,
|
||||
base_url: baseUrl(),
|
||||
url: location.origin + location.pathname,
|
||||
url: location.origin + location.pathname + location.search,
|
||||
parent_id: command.parent_id,
|
||||
tags: command.tags || '',
|
||||
image_sizes: imageSizes,
|
||||
};
|
||||
}
|
||||
|
||||
@@ -98,20 +143,27 @@
|
||||
response.warning = 'Could not retrieve simplified version of page - full page has been saved instead.';
|
||||
return response;
|
||||
}
|
||||
return clippedContentResponse(article.title, article.body);
|
||||
return clippedContentResponse(article.title, article.body, getImageSizes(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);
|
||||
const imageSizes = getImageSizes(document, true);
|
||||
cleanUpElement(cleanDocument, imageSizes);
|
||||
return clippedContentResponse(pageTitle(), cleanDocument.innerHTML, imageSizes);
|
||||
|
||||
} 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);
|
||||
return clippedContentResponse(pageTitle(), container.innerHTML, getImageSizes(document));
|
||||
|
||||
} else if (command.name === 'screenshot') {
|
||||
|
||||
@@ -137,6 +189,7 @@
|
||||
messageComp.style.maxWidth = messageCompWidth + 'px'
|
||||
messageComp.style.border = '1px solid black'
|
||||
messageComp.style.background = 'white'
|
||||
messageComp.style.color = 'black';
|
||||
messageComp.style.top = '10px'
|
||||
messageComp.style.textAlign = 'center';
|
||||
messageComp.style.padding = '10px'
|
||||
@@ -214,6 +267,7 @@
|
||||
crop_rect: selectionArea,
|
||||
url: location.origin + location.pathname,
|
||||
parent_id: command.parent_id,
|
||||
tags: command.tags,
|
||||
};
|
||||
|
||||
browser_.runtime.sendMessage({
|
||||
@@ -230,6 +284,11 @@
|
||||
|
||||
return {};
|
||||
|
||||
} else if (command.name === "pageUrl") {
|
||||
|
||||
let url = location.origin + location.pathname + location.search;
|
||||
return clippedContentResponse(pageTitle(), url, getImageSizes(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.6",
|
||||
"version": "1.0.14",
|
||||
"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
|
||||
@@ -1,5 +1,7 @@
|
||||
<!DOCTYPE html>
|
||||
|
||||
<!-- NOTE: I think this is not used at all -->
|
||||
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
|
||||
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"
|
||||
]
|
||||
}
|
||||
|
||||
@@ -100,21 +100,34 @@
|
||||
flex: 0;
|
||||
}
|
||||
|
||||
.App .Folders {
|
||||
.App .Folders,
|
||||
.App .Tags {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
align-items: center;
|
||||
align-items: top;
|
||||
padding: 5px 0;
|
||||
}
|
||||
|
||||
.App .Folders label {
|
||||
.App .Folders label,
|
||||
.App .Tags label {
|
||||
flex: 0;
|
||||
white-space: nowrap;
|
||||
margin-right: .5em;
|
||||
}
|
||||
|
||||
.App .Folders select {
|
||||
flex: 1;
|
||||
margin-left: 10px;
|
||||
}
|
||||
|
||||
.App .Tags input {
|
||||
display: inline-block;
|
||||
flex: 1;
|
||||
margin-bottom: .5em;
|
||||
}
|
||||
|
||||
.App .ClearTagButton {
|
||||
margin-left: .5em;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.App .StatusBar {
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user