You've already forked joplin
mirror of
https://github.com/laurent22/joplin.git
synced 2025-08-27 20:29:45 +02:00
Compare commits
667 Commits
cli-v1.0.1
...
cli-v1.0.1
Author | SHA1 | Date | |
---|---|---|---|
|
bac546c090 | ||
|
058b6265a6 | ||
|
d4234b8921 | ||
|
18762cd4d5 | ||
|
9a2a223650 | ||
|
a0ad2b24b1 | ||
|
211c02c7de | ||
|
a3279ab164 | ||
|
d0ce79d81b | ||
|
e896be48f0 | ||
|
a806d753c4 | ||
|
ab4fd9ed53 | ||
|
9c98fb5312 | ||
|
c0dd8d0332 | ||
|
60a1f96b4f | ||
|
40dfb730dc | ||
|
4e72a8f3a5 | ||
|
3da32f007e | ||
|
4af8bb8e8d | ||
|
a6f190766c | ||
|
fa3f0d2071 | ||
|
8d6cfdc292 | ||
|
48f0c1c37b | ||
|
17584b52af | ||
|
c05bc899eb | ||
|
c9f6ce7496 | ||
|
67d2c454ee | ||
|
83c3c027d0 | ||
|
3cac187023 | ||
|
3800b0bf47 | ||
|
41b2eb8871 | ||
|
bc84cdda7d | ||
|
6d77394196 | ||
|
968bba4d8e | ||
|
cdd8090f33 | ||
|
1be26e4497 | ||
|
cc51ba4f90 | ||
|
85984109b5 | ||
|
689a12cdfb | ||
|
abd74db112 | ||
|
cb06dab16f | ||
|
d2a7e46c1a | ||
|
2997b0f2c4 | ||
|
f450ef09cc | ||
|
316746605e | ||
|
5522d11eed | ||
|
67266af1ae | ||
|
273c0f432c | ||
|
d346cdb897 | ||
|
57a4b48c9b | ||
|
c3b1018929 | ||
|
a2ba64ccf5 | ||
|
26d91e355a | ||
|
7bf394d8d5 | ||
|
cdf6f9c436 | ||
|
dece5d8de7 | ||
|
33b8da98af | ||
|
0386534b3a | ||
|
885858dcb4 | ||
|
8c5d82fab2 | ||
|
c683c1b8ec | ||
|
cde5aa9b06 | ||
|
d3ba6798d7 | ||
|
1f42c10c2a | ||
|
14f6108e57 | ||
|
9512a08810 | ||
|
78b8648945 | ||
|
71e01e5566 | ||
|
01614b5a13 | ||
|
7153c06e88 | ||
|
30969f8ab6 | ||
|
19f9c4f540 | ||
|
5b5e07d4dc | ||
|
4ab1fb3ec5 | ||
|
9dedb832fc | ||
|
b8b487991d | ||
|
f10ba28e0c | ||
|
22398e69c5 | ||
|
0eb51e6bb0 | ||
|
9436075fdf | ||
|
409494afbb | ||
|
a544ebd451 | ||
|
8350a6cc12 | ||
|
b5e7dc5304 | ||
|
a11171d73a | ||
|
4706abbc06 | ||
|
58b307ba02 | ||
|
3281ab05b1 | ||
|
3a32e79001 | ||
|
d91b3624e9 | ||
|
d02ced59f8 | ||
|
ba3abf7c4c | ||
|
cc24398e71 | ||
|
27d0a8f6e7 | ||
|
4788c46e2c | ||
|
0370c7b627 | ||
|
5cbae74086 | ||
|
008e30bdb7 | ||
|
a5f17fad58 | ||
|
22c3646fc6 | ||
|
a3e7f0b5ef | ||
|
9f5da92ab4 | ||
|
fdafe3b947 | ||
|
6dec711a0a | ||
|
ec67bc7f1a | ||
|
47aaf639b3 | ||
|
51233c2745 | ||
|
90bc84c010 | ||
|
7f1e684dab | ||
|
5f28d0ec24 | ||
|
348c4ad3a3 | ||
|
f90cc8d67d | ||
|
d3e9ffcaea | ||
|
b0a4a10dcc | ||
|
8ef5c96cb6 | ||
|
6be36ffe17 | ||
|
7d7975daf4 | ||
|
c98644b72f | ||
|
8a097fb79c | ||
|
f71e7f4fd3 | ||
|
9c8add97e7 | ||
|
b099c811cc | ||
|
a8ae0f8078 | ||
|
d355169b60 | ||
|
08295525de | ||
|
fdcf27fc65 | ||
|
f2c82b05d9 | ||
|
add9dda759 | ||
|
fbba4a1ec4 | ||
|
154d303463 | ||
|
fdef2db232 | ||
|
d49fa8e42b | ||
|
871d3cb87d | ||
|
f1d751b356 | ||
|
60c1939d26 | ||
|
d2aaac22e5 | ||
|
c6842a8591 | ||
|
60e9abdd61 | ||
|
9796630aa2 | ||
|
7230cdea33 | ||
|
6460907976 | ||
|
d7a50a1b48 | ||
|
4a88343372 | ||
|
74c2bbc2f0 | ||
|
5ed5d16716 | ||
|
43083b0b7a | ||
|
a4e5054008 | ||
|
02eb2f2e45 | ||
|
5d015bf746 | ||
|
ce5db5a5c1 | ||
|
cdcc3902c5 | ||
|
309835f2fe | ||
|
eca0ab0ef6 | ||
|
4ce35ee1ed | ||
|
8856456afd | ||
|
4259d900f4 | ||
|
438c448ef7 | ||
|
0fb5b35212 | ||
|
b69efb4970 | ||
|
44ea237538 | ||
|
a58316b24c | ||
|
df95d01f6e | ||
|
d6924893e5 | ||
|
0f04ea4f70 | ||
|
4b8026cf83 | ||
|
a98a586295 | ||
|
29ec7ba03a | ||
|
a35cc23d28 | ||
|
20a8ddd841 | ||
|
774fc9ce53 | ||
|
84ab395fae | ||
|
edc4dc5801 | ||
|
6e128a7285 | ||
|
ff977cebaf | ||
|
5bcd5f050a | ||
|
fe57f163f3 | ||
|
cb24db4e39 | ||
|
e93d96193c | ||
|
637a4dc1f9 | ||
|
2c522637ef | ||
|
8fbb1fd246 | ||
|
75b7e7d999 | ||
|
7e2e901035 | ||
|
a73a1f896c | ||
|
ae7f0e8ffb | ||
|
08343e6be9 | ||
|
9cb3496159 | ||
|
37b035d0d0 | ||
|
f37ac8b5de | ||
|
343d04b05d | ||
|
e92741edd6 | ||
|
8565cd7d40 | ||
|
58e299383d | ||
|
bcb44aa532 | ||
|
0c552feb57 | ||
|
cd1aa57243 | ||
|
c9098b0489 | ||
|
117ce52597 | ||
|
1836b9a0b0 | ||
|
563a4b7bd8 | ||
|
2a5648d1a7 | ||
|
5b425f9178 | ||
|
820e32ddca | ||
|
b873e706ca | ||
|
f0f6e7c856 | ||
|
1ff3c7d074 | ||
|
393bb8993e | ||
|
00ddb1eb64 | ||
|
cd518776a9 | ||
|
391f7d22a3 | ||
|
effbf10571 | ||
|
4405e94e0c | ||
|
69f1b72127 | ||
|
383fa2e278 | ||
|
573100c203 | ||
|
348efdd7b6 | ||
|
cb9cc95e6a | ||
|
1994b334fa | ||
|
3e5a9cdb97 | ||
|
ae863c95c7 | ||
|
e89e5efb62 | ||
|
9f2ce06829 | ||
|
ec89ebc6b0 | ||
|
f3e9668eb7 | ||
|
cc7e2fc456 | ||
|
172d925f0f | ||
|
8a8ecaade3 | ||
|
d21a3f0bca | ||
|
9322212601 | ||
|
691eefec2f | ||
|
50b66cceca | ||
|
c7c57ab2a5 | ||
|
558b6443bc | ||
|
335b43ead4 | ||
|
e648392330 | ||
|
ab29d7e872 | ||
|
d7fae6b5b8 | ||
|
4ba4910a9c | ||
|
fe9a037cf9 | ||
|
2f14832c34 | ||
|
52ace55db0 | ||
|
224a4d786b | ||
|
3ea97ad9ff | ||
|
e7a56bb2b1 | ||
|
e4aed469d7 | ||
|
15a42a3729 | ||
|
0b9e007b46 | ||
|
88561a6c3c | ||
|
e6b77c3381 | ||
|
f7e1589476 | ||
|
0379523eaf | ||
|
5db7502fe4 | ||
|
1578188fde | ||
|
e8e1a0fe4d | ||
|
8059009ff3 | ||
|
32865f065c | ||
|
e03ef78049 | ||
|
45a820bb35 | ||
|
3c26159b79 | ||
|
cf67e0d4af | ||
|
1b2767167d | ||
|
f07bb5c275 | ||
|
0e2cc418e2 | ||
|
0340456d55 | ||
|
7aea2cec69 | ||
|
fa83107840 | ||
|
bb0bf46f81 | ||
|
694c3fed2d | ||
|
772e39b710 | ||
|
05e0a2c29d | ||
|
78e0efb95f | ||
|
a5f749cfd2 | ||
|
3d6c932e1b | ||
|
4488a1b95f | ||
|
e2808a90c6 | ||
|
755a972e02 | ||
|
8b1de22049 | ||
|
a9735123b7 | ||
|
5ccafa2838 | ||
|
e2926a4f82 | ||
|
09df315639 | ||
|
5a9b3b6c7c | ||
|
6da6f35ddd | ||
|
dcb5590842 | ||
|
5135c8a782 | ||
|
1b2f4fb036 | ||
|
76a4a445f0 | ||
|
20abb125a5 | ||
|
be9e50b4a1 | ||
|
02bfcf577d | ||
|
038efa10f2 | ||
|
dfa692569b | ||
|
9abc6a2e44 | ||
|
11f23f4e00 | ||
|
6a7d40d171 | ||
|
bf5601429e | ||
|
73ae8aaf2f | ||
|
7eb7bd98f3 | ||
|
10e22654ea | ||
|
ccfc80ad04 | ||
|
5e95278084 | ||
|
d69ba6bc75 | ||
|
d28fbe2d3b | ||
|
415e7b84da | ||
|
ac4986b620 | ||
|
9a4f4cbb65 | ||
|
8e32957111 | ||
|
91aa3703d4 | ||
|
a889762056 | ||
|
6478d6c9c9 | ||
|
7a681d0a4a | ||
|
83b6eba8bd | ||
|
2766ded5f6 | ||
|
ca0d966ed9 | ||
|
386c583b0e | ||
|
b3d34ad7e9 | ||
|
ba5c636dda | ||
|
ea16f6e0b1 | ||
|
0dd0dc5489 | ||
|
f3ab21ff43 | ||
|
5ac6b46efd | ||
|
6548f30a4b | ||
|
849d7983f6 | ||
|
e32e4423db | ||
|
7f5bf131a8 | ||
|
87a639df2b | ||
|
bdd8eab87e | ||
|
b9e5c8a387 | ||
|
d646a2dd01 | ||
|
71a3a0176e | ||
|
a363d119cf | ||
|
ff08bdbc0b | ||
|
71efff6827 | ||
|
7595fe4a8c | ||
|
7697e75466 | ||
|
b8fbaa2029 | ||
|
38bc750ecf | ||
|
6cfacb1a48 | ||
|
0b9078d034 | ||
|
86dc72b204 | ||
|
64b7bc3d62 | ||
|
086f9e1123 | ||
|
4fe70fe8ee | ||
|
95a1f40404 | ||
|
88f04509ee | ||
|
7eebd544d6 | ||
|
e369a8decf | ||
|
ad8054ba4b | ||
|
b47cb4e29a | ||
|
8c42ddf6c3 | ||
|
f7fcabbf41 | ||
|
38a51070fc | ||
|
44fa099a77 | ||
|
af6f3999df | ||
|
6fbeb35951 | ||
|
b2eadffde0 | ||
|
200ba2775f | ||
|
39ba021a79 | ||
|
2c6b291b9b | ||
|
770846be2e | ||
|
af4aa01b75 | ||
|
1bf2bec805 | ||
|
3a41ac9be0 | ||
|
f2c9cdd7f1 | ||
|
058f418cc7 | ||
|
5fa84b0dfb | ||
|
ec8ec3e38d | ||
|
0e6190b42b | ||
|
fcfee36c8c | ||
|
1d3d3b99bb | ||
|
2f80bf9647 | ||
|
675a4c795f | ||
|
ed3361df57 | ||
|
87396572e4 | ||
|
143b610291 | ||
|
c952c4591f | ||
|
e418701e68 | ||
|
6fc0ee3062 | ||
|
7b42d7d2c8 | ||
|
eb083ae925 | ||
|
905e65365f | ||
|
a0c04c0e6a | ||
|
635baa5b6f | ||
|
7591b614c5 | ||
|
5b5ec682c0 | ||
|
b0a80ddf65 | ||
|
893531f8c7 | ||
|
3d498e7a75 | ||
|
45ad201132 | ||
|
6e64b950ca | ||
|
6d4e67769c | ||
|
3aa0394062 | ||
|
b65767a43c | ||
|
3a9817d11e | ||
|
6a42ef50ec | ||
|
35b6b3fc46 | ||
|
f5515e3496 | ||
|
fd509bb4af | ||
|
b21c0f5d69 | ||
|
1033b3626f | ||
|
f407c8d756 | ||
|
6436dff94b | ||
|
3f7b4e10b6 | ||
|
36168a9a5d | ||
|
118540c733 | ||
|
cd5d412c69 | ||
|
e29fb3eb66 | ||
|
8ff1668c8f | ||
|
14fc73b388 | ||
|
f34330f101 | ||
|
2ba50321d4 | ||
|
38177c7e54 | ||
|
687e308a73 | ||
|
490db0db62 | ||
|
feb5f17479 | ||
|
fbb3543818 | ||
|
30d0dfb424 | ||
|
7239a2013c | ||
|
2361c5a5e7 | ||
|
38e8a881d5 | ||
|
d45d1b4225 | ||
|
e9c88dfdc4 | ||
|
fbb0ac5892 | ||
|
7a902bbd25 | ||
|
c75618eb8f | ||
|
74ee629266 | ||
|
8ecc58e1bf | ||
|
71078637db | ||
|
5460a977b1 | ||
|
a0dd0702fb | ||
|
3e48992eb4 | ||
|
bdb31f2890 | ||
|
0255546ae1 | ||
|
d066350eea | ||
|
a1e3260309 | ||
|
be1f57a8a6 | ||
|
ca4dfe0f0f | ||
|
fa69957d3f | ||
|
f7203ed7e2 | ||
|
331858bd4f | ||
|
4d2c9523a3 | ||
|
4d9d84a8f3 | ||
|
ec1089870f | ||
|
dbedefc021 | ||
|
f6b0da3f5e | ||
|
85bf89fd97 | ||
|
c2a80b12f0 | ||
|
981c97cca5 | ||
|
091cbc5355 | ||
|
e5a8114887 | ||
|
4779fc6f43 | ||
|
86e7daaec4 | ||
|
cab73a26e7 | ||
|
554ddb3b51 | ||
|
3b22bdb8ae | ||
|
5fdd07679e | ||
|
69f75a1520 | ||
|
f9b7acb8b1 | ||
|
91f700ad54 | ||
|
966aca7753 | ||
|
4de8816ed5 | ||
|
bea68a1056 | ||
|
6fea7116b6 | ||
|
2955914ca5 | ||
|
fd150b5b9d | ||
|
334ffad196 | ||
|
a796a9d179 | ||
|
917dcea28a | ||
|
c901228dc5 | ||
|
da21580785 | ||
|
4d92187327 | ||
|
207d433fb3 | ||
|
ffc311d7bd | ||
|
a1e8e71359 | ||
|
7942e74dc6 | ||
|
c4e21c2b6a | ||
|
0a06aa6f9f | ||
|
f985cfa25c | ||
|
6e143aef5c | ||
|
bf16aa6192 | ||
|
d96c58d192 | ||
|
e7e0264411 | ||
|
430a11282b | ||
|
9957b2798c | ||
|
2c5b0010bf | ||
|
1e3c6ed98c | ||
|
484f290eb0 | ||
|
06ad539941 | ||
|
5b84e80ac4 | ||
|
ca0f349348 | ||
|
d79089aea3 | ||
|
03611ad5ca | ||
|
c78c1cd3cf | ||
|
55afa7b5b7 | ||
|
a6c407b62b | ||
|
21897a3cd4 | ||
|
5796dd2098 | ||
|
d050071437 | ||
|
eaf8510f49 | ||
|
6ee2595dce | ||
|
0ecf2d6d9a | ||
|
50fd075168 | ||
|
6fa76bb83a | ||
|
b175c1fc94 | ||
|
b461625518 | ||
|
3819897ba1 | ||
|
6a031857ba | ||
|
0e57b7eb46 | ||
|
e21a0ba5b7 | ||
|
78f731e616 | ||
|
f6688a65ae | ||
|
035b9c6d1a | ||
|
266ff244d9 | ||
|
de1bfa5c34 | ||
|
478b8f00d8 | ||
|
860d2fd7f5 | ||
|
6ce091f4d8 | ||
|
ce595ac5e4 | ||
|
267436a00d | ||
|
97e0f4258a | ||
|
faa6ccc150 | ||
|
349cade946 | ||
|
0200aa92de | ||
|
60ed2cbee5 | ||
|
0e7b2f36c8 | ||
|
4083221b21 | ||
|
d55c511b4a | ||
|
7863e1dffe | ||
|
7cfdf778de | ||
|
075e55c077 | ||
|
dc818e8a0c | ||
|
caa58dd913 | ||
|
c84c3cd026 | ||
|
bda5ac9fb5 | ||
|
f928f645e5 | ||
|
53d7e906d4 | ||
|
e670b5d03f | ||
|
2a7d555859 | ||
|
e6675f500c | ||
|
c3f20d3ebc | ||
|
ff257060d1 | ||
|
68cde202a4 | ||
|
1a7a87e170 | ||
|
2990642923 | ||
|
0818de036e | ||
|
122bc29035 | ||
|
861cf8a1b2 | ||
|
7d6959e9e4 | ||
|
85091052e7 | ||
|
f46ad5bfda | ||
|
29f7937fc2 | ||
|
7fae9fda10 | ||
|
a37961dccc | ||
|
55155646aa | ||
|
7bffe86439 | ||
|
86136e0c6c | ||
|
21ae447d9c | ||
|
ad211b4b4e | ||
|
d6218f35fe | ||
|
7af0dcd19a | ||
|
e1a52c5606 | ||
|
468c345527 | ||
|
041bdc08a2 | ||
|
7535f1a8c6 | ||
|
0b24433db3 | ||
|
f7de0c5ffd | ||
|
62c48b9a46 | ||
|
3fafda9684 | ||
|
2cf1cda128 | ||
|
fedee9499b | ||
|
7c6c7f34ba | ||
|
0d65edd0e8 | ||
|
d57520c66a | ||
|
fa28ae1433 | ||
|
0acf9823e5 | ||
|
799ad5f1da | ||
|
9f6b3ccf40 | ||
|
df714c357d | ||
|
de5fdc84f8 | ||
|
b5b228af15 | ||
|
7a85628f46 | ||
|
075e76fc4b | ||
|
172a98fed4 | ||
|
409bdd7b78 | ||
|
d012c689e1 | ||
|
89ec0629e6 | ||
|
b3475ae195 | ||
|
a72ab67473 | ||
|
90fbfec914 | ||
|
49ef023a90 | ||
|
64bfd74f18 | ||
|
655e35056e | ||
|
a13ba63ab8 | ||
|
e2e00d4c87 | ||
|
159dc44f6c | ||
|
8fe2091926 | ||
|
c362c38dc0 | ||
|
316a52bbc2 | ||
|
0de9f6f944 | ||
|
3ba021fdd9 | ||
|
04c6579f2c | ||
|
bc7bd456a7 | ||
|
6d7511efbb | ||
|
a0fb99d78f | ||
|
685a52c2c5 | ||
|
fc77419ca1 | ||
|
bab3a12e92 | ||
|
21f0b90f48 | ||
|
83682ab513 | ||
|
7b987b5a8f | ||
|
cb5aa425c8 | ||
|
dd222381dd | ||
|
d7210811f6 | ||
|
3a43cfeebf | ||
|
31e33c6628 | ||
|
875f8d6997 | ||
|
aaaf27af6e | ||
|
43624ffa75 | ||
|
996b6623f1 | ||
|
613041b806 | ||
|
ff1d01a864 | ||
|
bcbbe10bf8 | ||
|
3de0abfc84 | ||
|
133fd03469 | ||
|
4f97c5c017 | ||
|
2d8fbac58c | ||
|
95f7ac4a4a | ||
|
6a56a6ccf0 | ||
|
1eb8df9fa6 | ||
|
485b4baebb | ||
|
5590d887c9 | ||
|
d00bfa997e | ||
|
1a8590e9b9 | ||
|
5a978977df | ||
|
5d763c7e6c | ||
|
050b089e72 | ||
|
733ea4027c | ||
|
10500c78b1 | ||
|
0040cc02a2 | ||
|
74afd20f0c | ||
|
dc9bde2184 | ||
|
5243ea7eb2 | ||
|
7d93492658 | ||
|
c6b56345f5 | ||
|
8a6fe20a69 | ||
|
6bcbedd6a4 | ||
|
4c935b78f9 | ||
|
94cddda6d0 | ||
|
1924ea062c | ||
|
07e88b2eeb | ||
|
e4a08c29d7 | ||
|
d60afcaabe | ||
|
1a091460ca | ||
|
8ebaa7f6eb | ||
|
e2a64e21a2 | ||
|
78ddd22f09 | ||
|
c546b7076a | ||
|
0e2bb5d784 | ||
|
5c069c38f5 | ||
|
451b9c0ae9 | ||
|
047897621a | ||
|
52e5cec585 | ||
|
bc98b65efa | ||
|
9250e77862 | ||
|
cd69e71945 | ||
|
e705e6e990 | ||
|
4638f11c5e |
48
.eslintignore
Normal file
48
.eslintignore
Normal file
@@ -0,0 +1,48 @@
|
||||
*.min.js
|
||||
.git/
|
||||
.github/
|
||||
_mydocs/
|
||||
_releases/
|
||||
Assets/
|
||||
CliClient/build
|
||||
CliClient/locales
|
||||
CliClient/node_modules
|
||||
CliClient/tests-build
|
||||
CliClient/tests/enex_to_md
|
||||
CliClient/tests/html_to_md
|
||||
CliClient/tests/logs
|
||||
CliClient/tests/support
|
||||
CliClient/tests/sync
|
||||
CliClient/tests/tmp
|
||||
Clipper/joplin-webclipper/content_scripts/JSDOMParser.js
|
||||
Clipper/joplin-webclipper/content_scripts/Readability-readerable.js
|
||||
Clipper/joplin-webclipper/content_scripts/Readability.js
|
||||
Clipper/joplin-webclipper/dist
|
||||
Clipper/joplin-webclipper/icons
|
||||
Clipper/joplin-webclipper/popup/build
|
||||
Clipper/joplin-webclipper/popup/node_modules
|
||||
docs/
|
||||
ElectronClient/app/dist
|
||||
ElectronClient/app/lib
|
||||
ElectronClient/app/lib/vendor/sjcl-rn.js
|
||||
ElectronClient/app/lib/vendor/sjcl.js
|
||||
ElectronClient/app/locales
|
||||
ElectronClient/app/node_modules
|
||||
highlight.pack.js
|
||||
node_modules/
|
||||
ReactNativeClient/android
|
||||
ReactNativeClient/ios
|
||||
ReactNativeClient/lib/vendor/
|
||||
ReactNativeClient/lib/welcomeAssets.js
|
||||
ReactNativeClient/locales
|
||||
ReactNativeClient/node_modules
|
||||
readme/
|
||||
Tools/node_modules
|
||||
Tools/PortableAppsLauncher
|
||||
Server/.git/
|
||||
Server/.github/
|
||||
Server/docs/
|
||||
Server/dist/
|
||||
Server/bin/
|
||||
Server/node_modules/
|
||||
ElectronClient/app/packageInfo.js
|
85
.eslintrc.js
Normal file
85
.eslintrc.js
Normal file
@@ -0,0 +1,85 @@
|
||||
module.exports = {
|
||||
'env': {
|
||||
'browser': true,
|
||||
'es6': true,
|
||||
'node': true,
|
||||
},
|
||||
"parser": "@typescript-eslint/parser",
|
||||
'extends': ['eslint:recommended'],
|
||||
'globals': {
|
||||
'Atomics': 'readonly',
|
||||
'SharedArrayBuffer': 'readonly',
|
||||
|
||||
// Jasmine variables
|
||||
'expect': 'readonly',
|
||||
'describe': 'readonly',
|
||||
'it': 'readonly',
|
||||
'beforeEach': 'readonly',
|
||||
'jasmine': 'readonly',
|
||||
|
||||
// React Native variables
|
||||
'__DEV__': 'readonly',
|
||||
|
||||
// Clipper variables
|
||||
'browserSupportsPromises_': true,
|
||||
'chrome': 'readonly',
|
||||
'browser': 'readonly',
|
||||
},
|
||||
'parserOptions': {
|
||||
'ecmaVersion': 2018,
|
||||
"ecmaFeatures": {
|
||||
"jsx": true,
|
||||
},
|
||||
"sourceType": "module",
|
||||
},
|
||||
'rules': {
|
||||
// -------------------------------
|
||||
// Code correctness
|
||||
// -------------------------------
|
||||
"react/jsx-uses-react": "error",
|
||||
"react/jsx-uses-vars": "error",
|
||||
"no-unused-vars": "error",
|
||||
"no-constant-condition": 0,
|
||||
"no-prototype-builtins": 0,
|
||||
// This error is always a false positive so far since it detects
|
||||
// possible race conditions in contexts where we know it cannot happen.
|
||||
"require-atomic-updates": 0,
|
||||
// "no-lonely-if": "error",
|
||||
|
||||
// -------------------------------
|
||||
// Formatting
|
||||
// -------------------------------
|
||||
"space-in-parens": ["error", "never"],
|
||||
"semi": ["error", "always"],
|
||||
"eol-last": ["error", "always"],
|
||||
"quotes": ["error", "single"],
|
||||
"indent": ["error", "tab"],
|
||||
"comma-dangle": ["error", "always-multiline"],
|
||||
"no-trailing-spaces": "error",
|
||||
"linebreak-style": ["error", "unix"],
|
||||
"prefer-template": ["error"],
|
||||
"template-curly-spacing": ["error", "never"],
|
||||
"key-spacing": ["error", {
|
||||
"beforeColon": false,
|
||||
"afterColon": true,
|
||||
"mode": "strict"
|
||||
}],
|
||||
"block-spacing": ["error"],
|
||||
"brace-style": ["error", "1tbs", { "allowSingleLine": true }],
|
||||
"no-spaced-func": ["error"],
|
||||
"func-call-spacing": ["error"],
|
||||
"space-before-function-paren": ["error", {
|
||||
"anonymous": "never",
|
||||
"named": "never",
|
||||
"asyncArrow": "always"
|
||||
}],
|
||||
"multiline-comment-style": ["error", "separate-lines"],
|
||||
"space-before-blocks": "error",
|
||||
"spaced-comment": ["error", "always"],
|
||||
"keyword-spacing": ["error", { "before": true, "after": true }]
|
||||
},
|
||||
"plugins": [
|
||||
"react",
|
||||
"@typescript-eslint",
|
||||
],
|
||||
};
|
5
.github/FUNDING.yml
vendored
Normal file
5
.github/FUNDING.yml
vendored
Normal file
@@ -0,0 +1,5 @@
|
||||
# These are supported funding model platforms
|
||||
|
||||
patreon: joplin
|
||||
github: laurent22
|
||||
custom: https://joplinapp.org/donate/
|
9
.github/ISSUE_TEMPLATE.md
vendored
Normal file
9
.github/ISSUE_TEMPLATE.md
vendored
Normal file
@@ -0,0 +1,9 @@
|
||||
👉 Please follow one of these issue templates:
|
||||
- https://github.com/laurent22/joplin/issues/new/choose
|
||||
|
||||
⚠️
|
||||
The GitHub issue tracker is for **bugs** and **security issues** ONLY. For feature requests and support, please use the forum:
|
||||
https://discourse.joplinapp.org/
|
||||
⚠️
|
||||
|
||||
Note: to keep the backlog clean and actionable, issues may be immediately closed if they do not follow one of the above issue templates.
|
48
.github/ISSUE_TEMPLATE/bug_report.md
vendored
Normal file
48
.github/ISSUE_TEMPLATE/bug_report.md
vendored
Normal file
@@ -0,0 +1,48 @@
|
||||
---
|
||||
name: "🐛 Bug Report"
|
||||
about: Report a reproducible bug or regression in Joplin.
|
||||
title: ''
|
||||
labels: 'bug'
|
||||
|
||||
---
|
||||
|
||||
<!--
|
||||
Please provide a clear and concise description of what the bug is. (In the section Steps To Reproduce.)
|
||||
Include screenshots if needed.
|
||||
Please test using the latest Joplin release to make sure your issue has not already been fixed.
|
||||
-->
|
||||
|
||||
<!--
|
||||
IMPORTANT: If you are reporting a clipper bug, please include an example URL that shows the issue.
|
||||
Without the URL the issue is likely to be closed.
|
||||
-->
|
||||
|
||||
## Environment
|
||||
|
||||
Joplin version:
|
||||
Platform:
|
||||
OS specifcs:
|
||||
<!--
|
||||
Platform can be one of: macOS, Linux, Windows, Android, iOS, terminal (or a combination)
|
||||
OS specifcs: e.g. OS version, Linux distribution, Android/iOS version, ...
|
||||
-->
|
||||
|
||||
## Steps To Reproduce
|
||||
|
||||
1.
|
||||
2.
|
||||
|
||||
<!--
|
||||
Issues without reproduction steps are likely to stall.
|
||||
-->
|
||||
|
||||
Describe what you expected to happen:
|
||||
|
||||
|
||||
|
||||
## Logfile
|
||||
|
||||
<!--
|
||||
Please attach a debug log. Issues without a debug log are likely to stall.
|
||||
For information on how to collect a log file: https://joplinapp.org/debugging/
|
||||
-->
|
29
.github/ISSUE_TEMPLATE/question.md
vendored
Normal file
29
.github/ISSUE_TEMPLATE/question.md
vendored
Normal file
@@ -0,0 +1,29 @@
|
||||
---
|
||||
name: "🤔 Questions and Help"
|
||||
about: The issue tracker is not for questions. Please ask questions on https://discourse.joplinapp.org/.
|
||||
title: ''
|
||||
labels: 'invalid'
|
||||
|
||||
---
|
||||
|
||||
⚠🚨⛔ The issue tracker is not for questions. ⛔🚨⚠
|
||||
|
||||
As it happens, support requests that are created as issues are likely to be closed. We want to make sure you are able to find the help you seek.
|
||||
|
||||
## Questions and Help
|
||||
|
||||
Please read the [documentation](https://joplinapp.org/) and [FAQ](https://joplinapp.org/faq/) first.
|
||||
|
||||
### https://discourse.joplinapp.org/
|
||||
|
||||
If you have still questions related to Joplin, please open a topic in the [forum](https://discourse.joplinapp.org/).
|
||||
You can use your GitHub credentials to login to the forum.
|
||||
|
||||
## Links
|
||||
|
||||
- Documentation: https://joplinapp.org
|
||||
- FAQ: https://joplinapp.org/faq/
|
||||
- Forum: https://discourse.joplinapp.org
|
||||
- How to enable end-to-end encryption: https://joplinapp.org/e2ee/
|
||||
- API documentation: https://joplinapp.org/api/
|
||||
- How to enable debug mode: https://joplinapp.org/debugging/
|
@@ -6,6 +6,8 @@ Please prefix the title with the platform you are targetting:
|
||||
- "Mobile" for the mobile app (or "Android" / "iOS" if the pull request only applies to one of the mobile platforms)
|
||||
- "CLI" for the CLI app
|
||||
|
||||
If it's not related to any platform (such as a translation, change to the documentation, etc.), simply don't add a platform.
|
||||
|
||||
For example: "Desktop: Added new setting to change font", or "Mobile: Fixed config screen error"
|
||||
|
||||
PLEASE READ THE GUIDE FIRST: https://github.com/laurent22/joplin/blob/master/CONTRIBUTING.md
|
25
.github/lock.yml
vendored
Normal file
25
.github/lock.yml
vendored
Normal file
@@ -0,0 +1,25 @@
|
||||
# Configuration for Lock Threads - https://github.com/dessant/lock-threads
|
||||
# Number of days of inactivity before a closed issue or pull request is locked
|
||||
daysUntilLock: 7
|
||||
# Skip issues and pull requests created before a given timestamp. Timestamp must
|
||||
# follow ISO 8601 (`YYYY-MM-DD`). Set to `false` to disable
|
||||
skipCreatedBefore: false
|
||||
# Issues and pull requests with these labels will be ignored. Set to `[]` to disable
|
||||
exemptLabels: []
|
||||
# Label to add before locking, such as `outdated`. Set to `false` to disable
|
||||
lockLabel: false
|
||||
# Comment to post before locking. Set to `false` to disable
|
||||
lockComment: false
|
||||
# Assign `resolved` as the reason for locking. Set to `false` to disable
|
||||
setLockReason: false
|
||||
# Limit to only `issues` or `pulls`
|
||||
only: issues
|
||||
# Optionally, specify configuration settings just for `issues` or `pulls`
|
||||
# issues:
|
||||
# exemptLabels:
|
||||
# - help-wanted
|
||||
# lockLabel: outdated
|
||||
# pulls:
|
||||
# daysUntilLock: 30
|
||||
# Repository to extend settings from
|
||||
# _extends: repo
|
25
.github/stale.yml
vendored
Normal file
25
.github/stale.yml
vendored
Normal file
@@ -0,0 +1,25 @@
|
||||
# Configuration for probot-stale - https://github.com/probot/stale
|
||||
# Number of days of inactivity before an issue becomes stale
|
||||
daysUntilStale: 90
|
||||
# Number of days of inactivity before a stale issue is closed
|
||||
daysUntilClose: 7
|
||||
# Issues with these labels will never be considered stale
|
||||
exemptLabels:
|
||||
- "good first issue"
|
||||
- "essential"
|
||||
- "essential-reviewed"
|
||||
- "help wanted"
|
||||
- "nice to have"
|
||||
- "upstream"
|
||||
- "backlog"
|
||||
# Label to use when marking an issue as stale
|
||||
staleLabel: stale
|
||||
# Comment to post when marking an issue as stale. Set to `false` to disable
|
||||
markComment: >
|
||||
Hey there, it looks like there has been no activity on this issue recently. Has the issue been fixed, or does it still require the community's attention? This issue may be closed if no further activity occurs.
|
||||
You may also label this issue as "backlog" and I will leave it open.
|
||||
Thank you for your contributions.
|
||||
# Comment to post when closing a stale issue. Set to `false` to disable
|
||||
closeComment: >
|
||||
Closing this issue after a prolonged period of inactivity. If this issue is still present in the latest release, please feel free to create a new issue with up-to-date information.
|
||||
only: issues
|
3
.gitignore
vendored
3
.gitignore
vendored
@@ -42,4 +42,5 @@ ReactNativeClient/lib/csstojs/
|
||||
ReactNativeClient/lib/rnInjectedJs/
|
||||
ElectronClient/app/gui/note-viewer/fonts/
|
||||
ElectronClient/app/gui/note-viewer/lib.js
|
||||
Tools/commit_hook.txt
|
||||
Tools/commit_hook.txt
|
||||
.vscode/*
|
||||
|
45
.travis.yml
45
.travis.yml
@@ -1,5 +1,5 @@
|
||||
# Only build tags (Doesn't work - doesn't build anything)
|
||||
if: tag IS present
|
||||
if: tag IS present OR type = pull_request
|
||||
|
||||
rvm: 2.3.3
|
||||
|
||||
@@ -54,8 +54,47 @@ before_install:
|
||||
|
||||
script:
|
||||
- |
|
||||
# Install tools
|
||||
npm install
|
||||
cd Tools
|
||||
npm install
|
||||
cd ../ElectronClient/app
|
||||
cd ..
|
||||
|
||||
# Run test units.
|
||||
# Only do it for pull requests because Travis randomly fails to run them
|
||||
# and that would break the desktop release.
|
||||
if [ "$TRAVIS_PULL_REQUEST" != "false" ]; then
|
||||
cd CliClient
|
||||
npm install
|
||||
./run_test.sh
|
||||
testResult=$?
|
||||
if [ $testResult -ne 0 ]; then
|
||||
exit $testResult
|
||||
fi
|
||||
cd ..
|
||||
fi
|
||||
|
||||
# Run linter for pull requests only - this is so that
|
||||
# bypassing eslint is allowed for urgent fixes.
|
||||
if [ "$TRAVIS_PULL_REQUEST" != "false" ]; then
|
||||
npm run linter-ci ./
|
||||
testResult=$?
|
||||
if [ $testResult -ne 0 ]; then
|
||||
exit $testResult
|
||||
fi
|
||||
fi
|
||||
|
||||
# Find out if we should run the build or not. Electron-builder gets stuck when
|
||||
# builing PRs so we disable it in this case. The Linux build should provide
|
||||
# enough info if the app builds or not.
|
||||
# https://github.com/electron-userland/electron-builder/issues/4263
|
||||
if [ "$TRAVIS_PULL_REQUEST" != "false" ]; then
|
||||
if [ "$TRAVIS_OS_NAME" == "osx" ]; then
|
||||
exit 0
|
||||
fi
|
||||
fi
|
||||
|
||||
# Prepare the Electron app and build it
|
||||
cd ElectronClient/app
|
||||
rsync -aP --delete ../../ReactNativeClient/lib/ lib/
|
||||
npm install && yarn dist
|
||||
npm install && USE_HARD_LINKS=false yarn dist
|
||||
|
Binary file not shown.
Before Width: | Height: | Size: 986 B |
BIN
Assets/AdresseSupport.png
Normal file
BIN
Assets/AdresseSupport.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 9.6 KiB |
BIN
Assets/AdresseTranslation.png
Normal file
BIN
Assets/AdresseTranslation.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 9.7 KiB |
12
BUILD.md
12
BUILD.md
@@ -3,6 +3,7 @@
|
||||
# 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.
|
||||
- In general, most of the backend (anything to do with the database, synchronisation, data import or export, etc.) is shared across all the apps, so when making a change please consider how it will affect all the apps.
|
||||
|
||||
## macOS dependencies
|
||||
|
||||
@@ -18,11 +19,10 @@
|
||||
|
||||
# Building the tools
|
||||
|
||||
Before building any of the applications, you need to build the tools:
|
||||
Before building any of the applications, you need to build the tools and pre-commit hooks:
|
||||
|
||||
```
|
||||
cd Tools
|
||||
npm install
|
||||
npm install && cd Tools && npm install
|
||||
```
|
||||
|
||||
# Building the Electron application
|
||||
@@ -59,11 +59,13 @@ If node-gyp does not works (MSBUILD: error MSB3428: Could not load the Visual C+
|
||||
|
||||
If `yarn dist` fails, it may need administrative rights.
|
||||
|
||||
If you get an `error MSB8020: The build tools for v140 cannot be found.` try to run with a different toolset version, eg `npm install --toolset=v141` (See [here](https://github.com/mapbox/node-sqlite3/issues/1124) for more info).
|
||||
|
||||
The [building\_win32\_tips on this page](./readme/building_win32_tips.md) might be helpful.
|
||||
|
||||
# Building the Mobile application
|
||||
|
||||
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.
|
||||
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 "React Native CLI Quickstart" tab.
|
||||
|
||||
Then, from `/ReactNativeClient`, run `npm install`, then `react-native run-ios` or `react-native run-android`.
|
||||
|
||||
@@ -76,4 +78,4 @@ npm install
|
||||
rsync --delete -aP ../ReactNativeClient/locales/ build/locales/
|
||||
```
|
||||
|
||||
Run `run.sh` to start the application for testing.
|
||||
Run `run.sh` to start the application for testing.
|
||||
|
@@ -1,28 +1,74 @@
|
||||
# User support
|
||||
|
||||
For general discussion about Joplin, user support, software development questions, and to discuss new features, please go to the [Joplin Forum](https://discourse.joplin.cozic.net/). It is possible to login with your GitHub account.
|
||||
The [Joplin Forum](https://discourse.joplinapp.org/) is the community driven place for user support, general discussion about Joplin, problems with installation, new features and software development questions. It is possible to login with your GitHub account. Don't use the issue tracker for support questions.
|
||||
|
||||
# Reporting a bug
|
||||
|
||||
Please check first that it [has not already been reported](https://github.com/laurent22/joplin/issues?utf8=%E2%9C%93&q=is%3Aissue). Also consider [enabling debug mode](https://github.com/laurent22/joplin/blob/master/readme/debugging.md) before reporting the issue so that you can provide as much details as possible to help fix it.
|
||||
File bugs in the [Github Issue Tracker](https://github.com/laurent22/joplin/issues?utf8=%E2%9C%93&q=is%3Aissue). Please follow these guidelines:
|
||||
|
||||
If possible, **please provide a screenshot**. A screenshot showing the problem is often more useful than a paragraph describing it as it can make it immediately clear what the issue is.
|
||||
- Search existing issues first, make sure yours hasn't already been reported.
|
||||
- Consider [enabling debug mode](https://joplinapp.org/debugging/) so that you can provide as much details as possible when reporting the issue.
|
||||
- Stay on topic, but describe the issue in detail so that others can reproduce it.
|
||||
- **Provide a screenshot** if possible. A screenshot showing the problem is often more useful than a paragraph describing it.
|
||||
- For web clipper bugs, **please provide the URL causing the issue**. Sometimes the clipper works in one page but not in another so it is important to know what URL has a problem.
|
||||
|
||||
# Feature requests
|
||||
|
||||
Again, please check that it has not already been requested. If it has, simply **up-vote the issue** - the ones with the most up-votes are likely to be implemented. "+1" comments are not tracked.
|
||||
Please check that your request has not already been posted in the [Github Issue Tracker](https://github.com/laurent22/joplin/issues?utf8=%E2%9C%93&q=is%3Aissue). If it has, **up-voting the issue** increases the chances it'll be noticed and implemented in the future. "+1" comments are not tracked.
|
||||
|
||||
# Creating a pull request
|
||||
As a general rule, suggestions to *improve Joplin* should be posted first in the [Joplin Forum](https://discourse.joplinapp.org/) for discussion.
|
||||
|
||||
- If you want to add a new feature, consider asking about it before implementing it or checking existing discussions to make sure it is within the scope of the project. As a rule of thumb **if your change is likely to involve more than 50 lines of code, you should discuss it in the forum**, just so that you don't spend too much time implementing something that might not be accepted.
|
||||
Avoid listing multiple requests in one report in the [Github Issue Tracker](https://github.com/laurent22/joplin/issues?utf8=%E2%9C%93&q=is%3Aissue). One issue per request makes it easier to track and discuss it.
|
||||
|
||||
- Bug fixes are always welcome.
|
||||
Finally, when submitting a pull request, don't forget to [test your code](#unit-tests).
|
||||
|
||||
# Contribute to the project
|
||||
|
||||
## Contributing to Joplin's translation
|
||||
|
||||
Joplin is available in multiple languages thanks to the help of its users. You can help translate Joplin to your language or keep it up to date. Please read the documentation about [Localisation](https://joplinapp.org/#localisation).
|
||||
|
||||
## Contributing to Joplin's code
|
||||
|
||||
If you want to start contributing to the project's code, please follow these guidelines before creating a pull request:
|
||||
|
||||
- Bug fixes are always welcome. Start by reviewing the [list of bugs](https://github.com/laurent22/joplin/issues?q=is%3Aissue+is%3Aopen+label%3Abug)
|
||||
- A good way to easily start contributing is to pick and work on a [good first issue](https://github.com/laurent22/joplin/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22). We try to make these issues as clear as possible and provide basic info on how the code should be changed, and if something is unclear feel free to ask for more information on the issue.
|
||||
- Before adding a new feature, ask about it in the [Github Issue Tracker](https://github.com/laurent22/joplin/issues?utf8=%E2%9C%93&q=is%3Aissue) or the [Joplin Forum](https://discourse.joplinapp.org/), or check if existing discussions exist to make sure the new functionality is desired.
|
||||
- **Changes that will consist in more than 50 lines of code should be discussed the [Joplin Forum](https://discourse.joplinapp.org/)**, so that you don't spend too much time implementing something that might not be accepted.
|
||||
|
||||
Building the apps is relatively easy - please [see the build instructions](https://github.com/laurent22/joplin/blob/master/BUILD.md) for more details.
|
||||
|
||||
# Coding style
|
||||
## Coding style
|
||||
|
||||
There are only two rules, but not following them means the pull request will not be accepted (it can be accepted once the issues are fixed):
|
||||
Coding style is enforced by a pre-commit hook that runs eslint. This hook is installed whenever running `npm install` on any of the application directory. If for some reason the pre-commit hook didn't get installed, you can manually install it by running `npm install` at the root of the repository.
|
||||
|
||||
- **Please use tabs, NOT spaces.**
|
||||
- **Please do not add or remove optional characters, such as spaces or colons.** Please setup your editor so that it only changes what you are working on and is not making automated changes elsewhere. The reason for this is that small white space changes make diff hard to read and can cause needless conflicts.
|
||||
## Unit tests
|
||||
|
||||
When submitting a pull request for a new feature or bug fix, please add unit tests for your code. Unit testing GUI changes is not always possible so it is not required, but any change in a file under /lib for example should be unit tested.
|
||||
|
||||
The tests are under CliClient/tests. To get them running, you first need to build the CLI app:
|
||||
|
||||
cd CliClient
|
||||
npm i
|
||||
|
||||
To run the test units, you must have an instance of the cli app running. In a first window navigate into `CliClient` and run:
|
||||
|
||||
```sh
|
||||
./run.sh
|
||||
```
|
||||
|
||||
> If you get an error like `Error: Cannot find module '../locales/index.js'`, this means you must (a) rebuild translations or (b) take > them from one of the other apps. To do option b, you can run the following command to copy them from the `ReactNativeClient` directory:>
|
||||
>
|
||||
> ```sh
|
||||
> cd .. # Return to the root of the project
|
||||
> rsync -aP ./ReactNativeClient/locales/ ./CliClient/build/locales/
|
||||
> ```
|
||||
|
||||
Then run the tests in a second window. To run all the test units:
|
||||
|
||||
./run_test.sh
|
||||
|
||||
To run just one particular file:
|
||||
|
||||
./run_test.sh markdownUtils # Don't add the .js extension
|
||||
|
13
CliClient/.eslintrc.js
Normal file
13
CliClient/.eslintrc.js
Normal file
@@ -0,0 +1,13 @@
|
||||
module.exports = {
|
||||
"overrides": [
|
||||
{
|
||||
"files": ["tests/**/*.js"],
|
||||
'rules': {
|
||||
// Ignore all unused function arguments, because in some
|
||||
// case they are kept to indicate the function signature.
|
||||
"no-unused-vars": ["error", { "argsIgnorePattern": ".*" }],
|
||||
"@typescript-eslint/no-unused-vars": 0,
|
||||
}
|
||||
},
|
||||
],
|
||||
};
|
@@ -1,14 +1,11 @@
|
||||
const { _ } = require('lib/locale.js');
|
||||
const { Logger } = require('lib/logger.js');
|
||||
const Resource = require('lib/models/Resource.js');
|
||||
const { netUtils } = require('lib/net-utils.js');
|
||||
|
||||
const http = require("http");
|
||||
const urlParser = require("url");
|
||||
const http = require('http');
|
||||
const urlParser = require('url');
|
||||
const enableServerDestroy = require('server-destroy');
|
||||
|
||||
class ResourceServer {
|
||||
|
||||
constructor() {
|
||||
this.server_ = null;
|
||||
this.logger_ = new Logger();
|
||||
@@ -31,7 +28,7 @@ class ResourceServer {
|
||||
|
||||
baseUrl() {
|
||||
if (!this.port_) return '';
|
||||
return 'http://127.0.0.1:' + this.port_;
|
||||
return `http://127.0.0.1:${this.port_}`;
|
||||
}
|
||||
|
||||
setLinkHandler(handler) {
|
||||
@@ -40,7 +37,7 @@ class ResourceServer {
|
||||
|
||||
async start() {
|
||||
this.port_ = await netUtils.findAvailablePort([9167, 9267, 8167, 8267]);
|
||||
if (!this.port_) {
|
||||
if (!this.port_) {
|
||||
this.logger().error('Could not find available port to start resource server. Please report the error at https://github.com/laurent22/joplin');
|
||||
return;
|
||||
}
|
||||
@@ -48,16 +45,15 @@ class ResourceServer {
|
||||
this.server_ = http.createServer();
|
||||
|
||||
this.server_.on('request', async (request, response) => {
|
||||
|
||||
const writeResponse = (message) => {
|
||||
const writeResponse = message => {
|
||||
response.write(message);
|
||||
response.end();
|
||||
}
|
||||
};
|
||||
|
||||
const url = urlParser.parse(request.url, true);
|
||||
let resourceId = url.pathname.split('/');
|
||||
if (resourceId.length < 2) {
|
||||
writeResponse('Error: could not get resource ID from path name: ' + url.pathname);
|
||||
writeResponse(`Error: could not get resource ID from path name: ${url.pathname}`);
|
||||
return;
|
||||
}
|
||||
resourceId = resourceId[1];
|
||||
@@ -66,9 +62,10 @@ class ResourceServer {
|
||||
|
||||
try {
|
||||
const done = await this.linkHandler_(resourceId, response);
|
||||
if (!done) throw new Error('Unhandled resource: ' + resourceId);
|
||||
if (!done) throw new Error(`Unhandled resource: ${resourceId}`);
|
||||
} catch (error) {
|
||||
response.setHeader('Content-Type', 'text/plain');
|
||||
// eslint-disable-next-line require-atomic-updates
|
||||
response.statusCode = 400;
|
||||
response.write(error.message);
|
||||
}
|
||||
@@ -76,7 +73,7 @@ class ResourceServer {
|
||||
response.end();
|
||||
});
|
||||
|
||||
this.server_.on('error', (error) => {
|
||||
this.server_.on('error', error => {
|
||||
this.logger().error('Resource server:', error);
|
||||
});
|
||||
|
||||
@@ -91,7 +88,6 @@ class ResourceServer {
|
||||
if (this.server_) this.server_.destroy();
|
||||
this.server_ = null;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
module.exports = ResourceServer;
|
||||
module.exports = ResourceServer;
|
||||
|
@@ -5,13 +5,12 @@ const Tag = require('lib/models/Tag.js');
|
||||
const BaseModel = require('lib/BaseModel.js');
|
||||
const Note = require('lib/models/Note.js');
|
||||
const Resource = require('lib/models/Resource.js');
|
||||
const { cliUtils } = require('./cli-utils.js');
|
||||
const { reducer, defaultState } = require('lib/reducer.js');
|
||||
const { splitCommandString } = require('lib/string-utils.js');
|
||||
const { reg } = require('lib/registry.js');
|
||||
const { _ } = require('lib/locale.js');
|
||||
const Entities = require('html-entities').AllHtmlEntities;
|
||||
const htmlentities = (new Entities()).encode;
|
||||
const htmlentities = new Entities().encode;
|
||||
|
||||
const chalk = require('chalk');
|
||||
const tk = require('terminal-kit');
|
||||
@@ -20,12 +19,10 @@ const Renderer = require('tkwidgets/framework/Renderer.js');
|
||||
const DecryptionWorker = require('lib/services/DecryptionWorker');
|
||||
|
||||
const BaseWidget = require('tkwidgets/BaseWidget.js');
|
||||
const ListWidget = require('tkwidgets/ListWidget.js');
|
||||
const TextWidget = require('tkwidgets/TextWidget.js');
|
||||
const HLayoutWidget = require('tkwidgets/HLayoutWidget.js');
|
||||
const VLayoutWidget = require('tkwidgets/VLayoutWidget.js');
|
||||
const ReduxRootWidget = require('tkwidgets/ReduxRootWidget.js');
|
||||
const RootWidget = require('tkwidgets/RootWidget.js');
|
||||
const WindowWidget = require('tkwidgets/WindowWidget.js');
|
||||
|
||||
const NoteWidget = require('./gui/NoteWidget.js');
|
||||
@@ -37,7 +34,6 @@ const StatusBarWidget = require('./gui/StatusBarWidget.js');
|
||||
const ConsoleWidget = require('./gui/ConsoleWidget.js');
|
||||
|
||||
class AppGui {
|
||||
|
||||
constructor(app, store, keymap) {
|
||||
try {
|
||||
this.app_ = app;
|
||||
@@ -50,12 +46,12 @@ class AppGui {
|
||||
// Some keys are directly handled by the tkwidget framework
|
||||
// so they need to be remapped in a different way.
|
||||
this.tkWidgetKeys_ = {
|
||||
'focus_next': 'TAB',
|
||||
'focus_previous': 'SHIFT_TAB',
|
||||
'move_up': 'UP',
|
||||
'move_down': 'DOWN',
|
||||
'page_down': 'PAGE_DOWN',
|
||||
'page_up': 'PAGE_UP',
|
||||
focus_next: 'TAB',
|
||||
focus_previous: 'SHIFT_TAB',
|
||||
move_up: 'UP',
|
||||
move_down: 'DOWN',
|
||||
page_down: 'PAGE_DOWN',
|
||||
page_up: 'PAGE_UP',
|
||||
};
|
||||
|
||||
this.renderer_ = null;
|
||||
@@ -64,7 +60,7 @@ class AppGui {
|
||||
|
||||
this.renderer_ = new Renderer(this.term(), this.rootWidget_);
|
||||
|
||||
this.app_.on('modelAction', async (event) => {
|
||||
this.app_.on('modelAction', async event => {
|
||||
await this.handleModelAction(event.action);
|
||||
});
|
||||
|
||||
@@ -83,7 +79,7 @@ class AppGui {
|
||||
reg.setupRecurrentSync();
|
||||
DecryptionWorker.instance().scheduleStart();
|
||||
} catch (error) {
|
||||
this.fullScreen(false);
|
||||
if (this.term_) { this.fullScreen(false); }
|
||||
console.error(error);
|
||||
process.exit(1);
|
||||
}
|
||||
@@ -134,7 +130,7 @@ class AppGui {
|
||||
};
|
||||
folderList.name = 'folderList';
|
||||
folderList.vStretch = true;
|
||||
folderList.on('currentItemChange', async (event) => {
|
||||
folderList.on('currentItemChange', async event => {
|
||||
const item = folderList.currentItem;
|
||||
|
||||
if (item === '-') {
|
||||
@@ -169,7 +165,7 @@ class AppGui {
|
||||
});
|
||||
}
|
||||
});
|
||||
this.rootWidget_.connect(folderList, (state) => {
|
||||
this.rootWidget_.connect(folderList, state => {
|
||||
return {
|
||||
selectedFolderId: state.selectedFolderId,
|
||||
selectedTagId: state.selectedTagId,
|
||||
@@ -196,7 +192,7 @@ class AppGui {
|
||||
id: note ? note.id : null,
|
||||
});
|
||||
});
|
||||
this.rootWidget_.connect(noteList, (state) => {
|
||||
this.rootWidget_.connect(noteList, state => {
|
||||
return {
|
||||
selectedNoteId: state.selectedNoteIds.length ? state.selectedNoteIds[0] : null,
|
||||
items: state.notes,
|
||||
@@ -210,7 +206,7 @@ class AppGui {
|
||||
borderBottomWidth: 1,
|
||||
borderLeftWidth: 1,
|
||||
};
|
||||
this.rootWidget_.connect(noteText, (state) => {
|
||||
this.rootWidget_.connect(noteText, state => {
|
||||
return {
|
||||
noteId: state.selectedNoteIds.length ? state.selectedNoteIds[0] : null,
|
||||
notes: state.notes,
|
||||
@@ -225,7 +221,7 @@ class AppGui {
|
||||
borderLeftWidth: 1,
|
||||
borderRightWidth: 1,
|
||||
};
|
||||
this.rootWidget_.connect(noteMetadata, (state) => {
|
||||
this.rootWidget_.connect(noteMetadata, state => {
|
||||
return { noteId: state.selectedNoteIds.length ? state.selectedNoteIds[0] : null };
|
||||
});
|
||||
noteMetadata.hide();
|
||||
@@ -292,7 +288,7 @@ class AppGui {
|
||||
if (!cmd) return;
|
||||
const isConfigPassword = cmd.indexOf('config ') >= 0 && cmd.indexOf('password') >= 0;
|
||||
if (isConfigPassword) return;
|
||||
this.stdout(chalk.cyan.bold('> ' + cmd));
|
||||
this.stdout(chalk.cyan.bold(`> ${cmd}`));
|
||||
}
|
||||
|
||||
setupKeymap(keymap) {
|
||||
@@ -301,7 +297,7 @@ class AppGui {
|
||||
for (let i = 0; i < keymap.length; i++) {
|
||||
const item = Object.assign({}, keymap[i]);
|
||||
|
||||
if (!item.command) throw new Error('Missing command for keymap item: ' + JSON.stringify(item));
|
||||
if (!item.command) throw new Error(`Missing command for keymap item: ${JSON.stringify(item)}`);
|
||||
|
||||
if (!('type' in item)) item.type = 'exec';
|
||||
|
||||
@@ -408,7 +404,7 @@ class AppGui {
|
||||
activeListItem() {
|
||||
const widget = this.widget('mainWindow').focusedWidget;
|
||||
if (!widget) return null;
|
||||
|
||||
|
||||
if (widget.name == 'noteList' || widget.name == 'folderList') {
|
||||
return widget.currentItem;
|
||||
}
|
||||
@@ -430,25 +426,21 @@ class AppGui {
|
||||
}
|
||||
|
||||
async processFunctionCommand(cmd) {
|
||||
|
||||
if (cmd === 'activate') {
|
||||
|
||||
const w = this.widget('mainWindow').focusedWidget;
|
||||
if (w.name === 'folderList') {
|
||||
this.widget('noteList').focus();
|
||||
} else if (w.name === 'noteList' || w.name === 'noteText') {
|
||||
this.processPromptCommand('edit $n');
|
||||
}
|
||||
|
||||
} else if (cmd === 'delete') {
|
||||
|
||||
if (this.widget('folderList').hasFocus) {
|
||||
const item = this.widget('folderList').selectedJoplinItem;
|
||||
|
||||
if (!item) return;
|
||||
|
||||
if (item.type_ === BaseModel.TYPE_FOLDER) {
|
||||
await this.processPromptCommand('rmbook ' + item.id);
|
||||
await this.processPromptCommand(`rmbook ${item.id}`);
|
||||
} else if (item.type_ === BaseModel.TYPE_TAG) {
|
||||
this.stdout(_('To delete a tag, untag the associated notes.'));
|
||||
} else if (item.type_ === BaseModel.TYPE_SEARCH) {
|
||||
@@ -462,9 +454,7 @@ class AppGui {
|
||||
} else {
|
||||
this.stdout(_('Please select the note or notebook to be deleted first.'));
|
||||
}
|
||||
|
||||
} else if (cmd === 'toggle_console') {
|
||||
|
||||
if (!this.consoleIsShown()) {
|
||||
this.showConsole();
|
||||
this.minimizeConsole();
|
||||
@@ -475,22 +465,15 @@ class AppGui {
|
||||
this.maximizeConsole();
|
||||
}
|
||||
}
|
||||
|
||||
} else if (cmd === 'toggle_metadata') {
|
||||
|
||||
this.toggleNoteMetadata();
|
||||
|
||||
} else if (cmd === 'enter_command_line_mode') {
|
||||
|
||||
const cmd = await this.widget('statusBar').prompt();
|
||||
if (!cmd) return;
|
||||
this.addCommandToConsole(cmd);
|
||||
await this.processPromptCommand(cmd);
|
||||
|
||||
await this.processPromptCommand(cmd);
|
||||
} else {
|
||||
|
||||
throw new Error('Unknown command: ' + cmd);
|
||||
|
||||
throw new Error(`Unknown command: ${cmd}`);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -501,7 +484,7 @@ class AppGui {
|
||||
|
||||
// this.logger().debug('Got command: ' + cmd);
|
||||
|
||||
try {
|
||||
try {
|
||||
let note = this.widget('noteList').currentItem;
|
||||
let folder = this.widget('folderList').currentItem;
|
||||
let args = splitCommandString(cmd);
|
||||
@@ -511,7 +494,7 @@ class AppGui {
|
||||
args[i] = note ? note.id : '';
|
||||
} else if (args[i] == '$b') {
|
||||
args[i] = folder ? folder.id : '';
|
||||
} else if (args[i] == '$c') {
|
||||
} else if (args[i] == '$c') {
|
||||
const item = this.activeListItem();
|
||||
args[i] = item ? item.id : '';
|
||||
}
|
||||
@@ -523,7 +506,7 @@ class AppGui {
|
||||
}
|
||||
|
||||
this.widget('console').scrollBottom();
|
||||
|
||||
|
||||
// Invalidate so that the screen is redrawn in case inputting a command has moved
|
||||
// the GUI up (in particular due to autocompletion), it's moved back to the right position.
|
||||
this.widget('root').invalidate();
|
||||
@@ -603,17 +586,17 @@ class AppGui {
|
||||
async setupResourceServer() {
|
||||
const linkStyle = chalk.blue.underline;
|
||||
const noteTextWidget = this.widget('noteText');
|
||||
const resourceIdRegex = /^:\/[a-f0-9]+$/i
|
||||
const resourceIdRegex = /^:\/[a-f0-9]+$/i;
|
||||
const noteLinks = {};
|
||||
|
||||
const hasProtocol = function(s, protocols) {
|
||||
if (!s) return false;
|
||||
s = s.trim().toLowerCase();
|
||||
for (let i = 0; i < protocols.length; i++) {
|
||||
if (s.indexOf(protocols[i] + '://') === 0) return true;
|
||||
if (s.indexOf(`${protocols[i]}://`) === 0) return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
};
|
||||
|
||||
// By default, before the server is started, only the regular
|
||||
// URLs appear in blue.
|
||||
@@ -637,29 +620,31 @@ class AppGui {
|
||||
const link = noteLinks[path];
|
||||
|
||||
if (link.type === 'url') {
|
||||
response.writeHead(302, { 'Location': link.url });
|
||||
response.writeHead(302, { Location: link.url });
|
||||
return true;
|
||||
}
|
||||
|
||||
if (link.type === 'item') {
|
||||
const itemId = link.id;
|
||||
let item = await BaseItem.loadItemById(itemId);
|
||||
if (!item) throw new Error('No item with ID ' + itemId); // Should be nearly impossible
|
||||
if (!item) throw new Error(`No item with ID ${itemId}`); // Should be nearly impossible
|
||||
|
||||
if (item.type_ === BaseModel.TYPE_RESOURCE) {
|
||||
if (item.mime) response.setHeader('Content-Type', item.mime);
|
||||
response.write(await Resource.content(item));
|
||||
} else if (item.type_ === BaseModel.TYPE_NOTE) {
|
||||
const html = [`
|
||||
const html = [
|
||||
`
|
||||
<!DOCTYPE html>
|
||||
<html class="client-nojs" lang="en" dir="ltr">
|
||||
<head><meta charset="UTF-8"/></head><body>
|
||||
`];
|
||||
html.push('<pre>' + htmlentities(item.title) + '\n\n' + htmlentities(item.body) + '</pre>');
|
||||
`,
|
||||
];
|
||||
html.push(`<pre>${htmlentities(item.title)}\n\n${htmlentities(item.body)}</pre>`);
|
||||
html.push('</body></html>');
|
||||
response.write(html.join(''));
|
||||
} else {
|
||||
throw new Error('Unsupported item type: ' + item.type_);
|
||||
throw new Error(`Unsupported item type: ${item.type_}`);
|
||||
}
|
||||
|
||||
return true;
|
||||
@@ -679,7 +664,7 @@ class AppGui {
|
||||
noteLinks[index] = {
|
||||
type: 'item',
|
||||
id: url.substr(2),
|
||||
};
|
||||
};
|
||||
} else if (hasProtocol(url, ['http', 'https', 'file', 'ftp'])) {
|
||||
noteLinks[index] = {
|
||||
type: 'url',
|
||||
@@ -691,7 +676,7 @@ class AppGui {
|
||||
return url;
|
||||
}
|
||||
|
||||
return linkStyle(this.resourceServer_.baseUrl() + '/' + index);
|
||||
return linkStyle(`${this.resourceServer_.baseUrl()}/${index}`);
|
||||
},
|
||||
};
|
||||
}
|
||||
@@ -710,8 +695,7 @@ class AppGui {
|
||||
|
||||
term.grabInput();
|
||||
|
||||
term.on('key', async (name, matches, data) => {
|
||||
|
||||
term.on('key', async (name) => {
|
||||
// -------------------------------------------------------------------------
|
||||
// Handle special shortcuts
|
||||
// -------------------------------------------------------------------------
|
||||
@@ -729,13 +713,13 @@ class AppGui {
|
||||
return;
|
||||
}
|
||||
|
||||
if (name === 'CTRL_C' ) {
|
||||
if (name === 'CTRL_C') {
|
||||
const cmd = this.app().currentCommand();
|
||||
if (!cmd || !cmd.cancellable() || this.commandCancelCalled_) {
|
||||
this.stdout(_('Press Ctrl+D or type "exit" to exit the application'));
|
||||
} else {
|
||||
this.commandCancelCalled_ = true;
|
||||
await cmd.cancel()
|
||||
await cmd.cancel();
|
||||
this.commandCancelCalled_ = false;
|
||||
}
|
||||
return;
|
||||
@@ -744,8 +728,8 @@ class AppGui {
|
||||
// -------------------------------------------------------------------------
|
||||
// Build up current shortcut
|
||||
// -------------------------------------------------------------------------
|
||||
|
||||
const now = (new Date()).getTime();
|
||||
|
||||
const now = new Date().getTime();
|
||||
|
||||
if (now - this.lastShortcutKeyTime_ > 800 || this.isSpecialKey(name)) {
|
||||
this.currentShortcutKeys_ = [name];
|
||||
@@ -793,7 +777,7 @@ class AppGui {
|
||||
} else if (keymapItem.type === 'tkwidgets') {
|
||||
this.widget('root').handleKey(this.tkWidgetKeys_[keymapItem.command]);
|
||||
} else {
|
||||
throw new Error('Unknown command type: ' + JSON.stringify(keymapItem));
|
||||
throw new Error(`Unknown command type: ${JSON.stringify(keymapItem)}`);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -813,7 +797,6 @@ class AppGui {
|
||||
process.exit(1);
|
||||
});
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
AppGui.INPUT_MODE_NORMAL = 1;
|
||||
|
@@ -1,10 +1,5 @@
|
||||
const { BaseApplication } = require('lib/BaseApplication');
|
||||
const { createStore, applyMiddleware } = require('redux');
|
||||
const { reducer, defaultState } = require('lib/reducer.js');
|
||||
const { JoplinDatabase } = require('lib/joplin-database.js');
|
||||
const { Database } = require('lib/database.js');
|
||||
const { FoldersScreenUtils } = require('lib/folders-screen-utils.js');
|
||||
const { DatabaseDriverNode } = require('lib/database-driver-node.js');
|
||||
const ResourceService = require('lib/services/ResourceService');
|
||||
const BaseModel = require('lib/BaseModel.js');
|
||||
const Folder = require('lib/models/Folder.js');
|
||||
@@ -12,21 +7,15 @@ const BaseItem = require('lib/models/BaseItem.js');
|
||||
const Note = require('lib/models/Note.js');
|
||||
const Tag = require('lib/models/Tag.js');
|
||||
const Setting = require('lib/models/Setting.js');
|
||||
const { Logger } = require('lib/logger.js');
|
||||
const { sprintf } = require('sprintf-js');
|
||||
const { reg } = require('lib/registry.js');
|
||||
const { fileExtension } = require('lib/path-utils.js');
|
||||
const { shim } = require('lib/shim.js');
|
||||
const { _, setLocale, defaultLocale, closestSupportedLocale } = require('lib/locale.js');
|
||||
const os = require('os');
|
||||
const { _ } = require('lib/locale.js');
|
||||
const fs = require('fs-extra');
|
||||
const { cliUtils } = require('./cli-utils.js');
|
||||
const Cache = require('lib/Cache');
|
||||
const WelcomeUtils = require('lib/WelcomeUtils');
|
||||
const RevisionService = require('lib/services/RevisionService');
|
||||
|
||||
class Application extends BaseApplication {
|
||||
|
||||
constructor() {
|
||||
super();
|
||||
|
||||
@@ -75,7 +64,7 @@ class Application extends BaseApplication {
|
||||
// const response = await cliUtils.promptMcq(msg, answers);
|
||||
// if (!response) return null;
|
||||
|
||||
return output[response - 1];
|
||||
// return output[response - 1];
|
||||
} else {
|
||||
return output.length ? output[0] : null;
|
||||
}
|
||||
@@ -97,10 +86,12 @@ class Application extends BaseApplication {
|
||||
const parent = options.parent ? options.parent : app().currentFolder();
|
||||
const ItemClass = BaseItem.itemClass(type);
|
||||
|
||||
if (type == BaseModel.TYPE_NOTE && pattern.indexOf('*') >= 0) { // Handle it as pattern
|
||||
if (type == BaseModel.TYPE_NOTE && pattern.indexOf('*') >= 0) {
|
||||
// Handle it as pattern
|
||||
if (!parent) throw new Error(_('No notebook selected.'));
|
||||
return await Note.previews(parent.id, { titlePattern: pattern });
|
||||
} else { // Single item
|
||||
} else {
|
||||
// Single item
|
||||
let item = null;
|
||||
if (type == BaseModel.TYPE_NOTE) {
|
||||
if (!parent) throw new Error(_('No notebook has been specified.'));
|
||||
@@ -126,15 +117,15 @@ class Application extends BaseApplication {
|
||||
}
|
||||
|
||||
setupCommand(cmd) {
|
||||
cmd.setStdout((text) => {
|
||||
cmd.setStdout(text => {
|
||||
return this.stdout(text);
|
||||
});
|
||||
|
||||
cmd.setDispatcher((action) => {
|
||||
cmd.setDispatcher(action => {
|
||||
if (this.store()) {
|
||||
return this.store().dispatch(action);
|
||||
} else {
|
||||
return (action) => {};
|
||||
return () => {};
|
||||
}
|
||||
});
|
||||
|
||||
@@ -145,10 +136,10 @@ class Application extends BaseApplication {
|
||||
if (!options.answers) options.answers = options.booleanAnswerDefault === 'y' ? [_('Y'), _('n')] : [_('N'), _('y')];
|
||||
|
||||
if (options.type == 'boolean') {
|
||||
message += ' (' + options.answers.join('/') + ')';
|
||||
message += ` (${options.answers.join('/')})`;
|
||||
}
|
||||
|
||||
let answer = await this.gui().prompt('', message + ' ', options);
|
||||
let answer = await this.gui().prompt('', `${message} `, options);
|
||||
|
||||
if (options.type === 'boolean') {
|
||||
if (answer === null) return false; // Pressed ESCAPE
|
||||
@@ -185,12 +176,12 @@ class Application extends BaseApplication {
|
||||
|
||||
commands(uiType = null) {
|
||||
if (!this.allCommandsLoaded_) {
|
||||
fs.readdirSync(__dirname).forEach((path) => {
|
||||
fs.readdirSync(__dirname).forEach(path => {
|
||||
if (path.indexOf('command-') !== 0) return;
|
||||
const ext = fileExtension(path)
|
||||
const ext = fileExtension(path);
|
||||
if (ext != 'js') return;
|
||||
|
||||
let CommandClass = require('./' + path);
|
||||
let CommandClass = require(`./${path}`);
|
||||
let cmd = new CommandClass();
|
||||
if (!cmd.enabled()) return;
|
||||
cmd = this.setupCommand(cmd);
|
||||
@@ -257,7 +248,7 @@ class Application extends BaseApplication {
|
||||
|
||||
let CommandClass = null;
|
||||
try {
|
||||
CommandClass = require(__dirname + '/command-' + name + '.js');
|
||||
CommandClass = require(`${__dirname}/command-${name}.js`);
|
||||
} catch (error) {
|
||||
if (error.message && error.message.indexOf('Cannot find module') >= 0) {
|
||||
let e = new Error(_('No such command: %s', name));
|
||||
@@ -276,19 +267,27 @@ class Application extends BaseApplication {
|
||||
|
||||
dummyGui() {
|
||||
return {
|
||||
isDummy: () => { return true; },
|
||||
prompt: (initialText = '', promptString = '', options = null) => { return cliUtils.prompt(initialText, promptString, options); },
|
||||
isDummy: () => {
|
||||
return true;
|
||||
},
|
||||
prompt: (initialText = '', promptString = '', options = null) => {
|
||||
return cliUtils.prompt(initialText, promptString, options);
|
||||
},
|
||||
showConsole: () => {},
|
||||
maximizeConsole: () => {},
|
||||
stdout: (text) => { console.info(text); },
|
||||
fullScreen: (b=true) => {},
|
||||
stdout: text => {
|
||||
console.info(text);
|
||||
},
|
||||
fullScreen: () => {},
|
||||
exit: () => {},
|
||||
showModalOverlay: (text) => {},
|
||||
showModalOverlay: () => {},
|
||||
hideModalOverlay: () => {},
|
||||
stdoutMaxWidth: () => { return 100; },
|
||||
stdoutMaxWidth: () => {
|
||||
return 100;
|
||||
},
|
||||
forceRender: () => {},
|
||||
termSaveState: () => {},
|
||||
termRestoreState: (state) => {},
|
||||
termRestoreState: () => {},
|
||||
};
|
||||
}
|
||||
|
||||
@@ -300,7 +299,7 @@ class Application extends BaseApplication {
|
||||
|
||||
let outException = null;
|
||||
try {
|
||||
if (this.gui().isDummy() && !this.activeCommand_.supportsUi('cli')) throw new Error(_('The command "%s" is only available in GUI mode', this.activeCommand_.name()));
|
||||
if (this.gui().isDummy() && !this.activeCommand_.supportsUi('cli')) throw new Error(_('The command "%s" is only available in GUI mode', this.activeCommand_.name()));
|
||||
const cmdArgs = cliUtils.makeCommandArgs(this.activeCommand_, argv);
|
||||
await this.activeCommand_.action(cmdArgs);
|
||||
} catch (error) {
|
||||
@@ -316,24 +315,24 @@ class Application extends BaseApplication {
|
||||
|
||||
async loadKeymaps() {
|
||||
const defaultKeyMap = [
|
||||
{ "keys": [":"], "type": "function", "command": "enter_command_line_mode" },
|
||||
{ "keys": ["TAB"], "type": "function", "command": "focus_next" },
|
||||
{ "keys": ["SHIFT_TAB"], "type": "function", "command": "focus_previous" },
|
||||
{ "keys": ["UP"], "type": "function", "command": "move_up" },
|
||||
{ "keys": ["DOWN"], "type": "function", "command": "move_down" },
|
||||
{ "keys": ["PAGE_UP"], "type": "function", "command": "page_up" },
|
||||
{ "keys": ["PAGE_DOWN"], "type": "function", "command": "page_down" },
|
||||
{ "keys": ["ENTER"], "type": "function", "command": "activate" },
|
||||
{ "keys": ["DELETE", "BACKSPACE"], "type": "function", "command": "delete" },
|
||||
{ "keys": [" "], "command": "todo toggle $n" },
|
||||
{ "keys": ["tc"], "type": "function", "command": "toggle_console" },
|
||||
{ "keys": ["tm"], "type": "function", "command": "toggle_metadata" },
|
||||
{ "keys": ["/"], "type": "prompt", "command": "search \"\"", "cursorPosition": -2 },
|
||||
{ "keys": ["mn"], "type": "prompt", "command": "mknote \"\"", "cursorPosition": -2 },
|
||||
{ "keys": ["mt"], "type": "prompt", "command": "mktodo \"\"", "cursorPosition": -2 },
|
||||
{ "keys": ["mb"], "type": "prompt", "command": "mkbook \"\"", "cursorPosition": -2 },
|
||||
{ "keys": ["yn"], "type": "prompt", "command": "cp $n \"\"", "cursorPosition": -2 },
|
||||
{ "keys": ["dn"], "type": "prompt", "command": "mv $n \"\"", "cursorPosition": -2 }
|
||||
{ keys: [':'], type: 'function', command: 'enter_command_line_mode' },
|
||||
{ keys: ['TAB'], type: 'function', command: 'focus_next' },
|
||||
{ keys: ['SHIFT_TAB'], type: 'function', command: 'focus_previous' },
|
||||
{ keys: ['UP'], type: 'function', command: 'move_up' },
|
||||
{ keys: ['DOWN'], type: 'function', command: 'move_down' },
|
||||
{ keys: ['PAGE_UP'], type: 'function', command: 'page_up' },
|
||||
{ keys: ['PAGE_DOWN'], type: 'function', command: 'page_down' },
|
||||
{ keys: ['ENTER'], type: 'function', command: 'activate' },
|
||||
{ keys: ['DELETE', 'BACKSPACE'], type: 'function', command: 'delete' },
|
||||
{ keys: [' '], command: 'todo toggle $n' },
|
||||
{ keys: ['tc'], type: 'function', command: 'toggle_console' },
|
||||
{ keys: ['tm'], type: 'function', command: 'toggle_metadata' },
|
||||
{ keys: ['/'], type: 'prompt', command: 'search ""', cursorPosition: -2 },
|
||||
{ keys: ['mn'], type: 'prompt', command: 'mknote ""', cursorPosition: -2 },
|
||||
{ keys: ['mt'], type: 'prompt', command: 'mktodo ""', cursorPosition: -2 },
|
||||
{ keys: ['mb'], type: 'prompt', command: 'mkbook ""', cursorPosition: -2 },
|
||||
{ keys: ['yn'], type: 'prompt', command: 'cp $n ""', cursorPosition: -2 },
|
||||
{ keys: ['dn'], type: 'prompt', command: 'mv $n ""', cursorPosition: -2 },
|
||||
];
|
||||
|
||||
// Filter the keymap item by command so that items in keymap.json can override
|
||||
@@ -341,10 +340,10 @@ class Application extends BaseApplication {
|
||||
const itemsByCommand = {};
|
||||
|
||||
for (let i = 0; i < defaultKeyMap.length; i++) {
|
||||
itemsByCommand[defaultKeyMap[i].command] = defaultKeyMap[i]
|
||||
itemsByCommand[defaultKeyMap[i].command] = defaultKeyMap[i];
|
||||
}
|
||||
|
||||
const filePath = Setting.value('profileDir') + '/keymap.json';
|
||||
const filePath = `${Setting.value('profileDir')}/keymap.json`;
|
||||
if (await fs.pathExists(filePath)) {
|
||||
try {
|
||||
let configString = await fs.readFile(filePath, 'utf-8');
|
||||
@@ -356,7 +355,7 @@ class Application extends BaseApplication {
|
||||
}
|
||||
} catch (error) {
|
||||
let msg = error.message ? error.message : '';
|
||||
msg = 'Could not load keymap ' + filePath + '\n' + msg;
|
||||
msg = `Could not load keymap ${filePath}\n${msg}`;
|
||||
error.message = msg;
|
||||
throw error;
|
||||
}
|
||||
@@ -368,18 +367,28 @@ class Application extends BaseApplication {
|
||||
output.push(itemsByCommand[n]);
|
||||
}
|
||||
|
||||
// Map reserved shortcuts to their equivalent key
|
||||
// https://github.com/cronvel/terminal-kit/issues/101
|
||||
for (let i = 0; i < output.length; i++) {
|
||||
const newKeys = output[i].keys.map(k => {
|
||||
k = k.replace(/CTRL_H/g, 'BACKSPACE');
|
||||
k = k.replace(/CTRL_I/g, 'TAB');
|
||||
k = k.replace(/CTRL_M/g, 'ENTER');
|
||||
return k;
|
||||
});
|
||||
output[i].keys = newKeys;
|
||||
}
|
||||
|
||||
return output;
|
||||
}
|
||||
|
||||
async start(argv) {
|
||||
argv = await super.start(argv);
|
||||
|
||||
cliUtils.setStdout((object) => {
|
||||
cliUtils.setStdout(object => {
|
||||
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) {
|
||||
@@ -387,6 +396,8 @@ class Application extends BaseApplication {
|
||||
|
||||
this.currentFolder_ = await Folder.load(Setting.value('activeFolderId'));
|
||||
|
||||
await this.applySettingsSideEffects();
|
||||
|
||||
try {
|
||||
await this.execCommand(argv);
|
||||
} catch (error) {
|
||||
@@ -400,10 +411,11 @@ class Application extends BaseApplication {
|
||||
|
||||
await Setting.saveAll();
|
||||
|
||||
// Need to call exit() explicitely, otherwise Node wait for any timeout to complete
|
||||
// Need to call exit() explicitly, otherwise Node wait for any timeout to complete
|
||||
// https://stackoverflow.com/questions/18050095
|
||||
process.exit(0);
|
||||
} else { // Otherwise open the GUI
|
||||
} else {
|
||||
// Otherwise open the GUI
|
||||
this.initRedux();
|
||||
|
||||
const keymap = await this.loadKeymaps();
|
||||
@@ -423,7 +435,7 @@ class Application extends BaseApplication {
|
||||
const tags = await Tag.allWithNotes();
|
||||
|
||||
ResourceService.runInBackground();
|
||||
|
||||
|
||||
RevisionService.instance().runInBackground();
|
||||
|
||||
this.dispatch({
|
||||
@@ -437,7 +449,6 @@ class Application extends BaseApplication {
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
let application_ = null;
|
||||
@@ -448,4 +459,4 @@ function app() {
|
||||
return application_;
|
||||
}
|
||||
|
||||
module.exports = { app };
|
||||
module.exports = { app };
|
||||
|
@@ -10,42 +10,47 @@ async function handleAutocompletionPromise(line) {
|
||||
// Auto-complete the command name
|
||||
const names = await app().commandNames();
|
||||
let words = getArguments(line);
|
||||
//If there is only one word and it is not already a command name then you
|
||||
//should look for commmands it could be
|
||||
// If there is only one word and it is not already a command name then you
|
||||
// should look for commands it could be
|
||||
if (words.length == 1) {
|
||||
if (names.indexOf(words[0]) === -1) {
|
||||
let x = names.filter((n) => n.indexOf(words[0]) === 0);
|
||||
let x = names.filter(n => n.indexOf(words[0]) === 0);
|
||||
if (x.length === 1) {
|
||||
return x[0] + ' ';
|
||||
return `${x[0]} `;
|
||||
}
|
||||
return x.length > 0 ? x.map((a) => a + ' ') : line;
|
||||
return x.length > 0 ? x.map(a => `${a} `) : line;
|
||||
} else {
|
||||
return line;
|
||||
}
|
||||
}
|
||||
//There is more than one word and it is a command
|
||||
// There is more than one word and it is a command
|
||||
const metadata = (await app().commandMetadata())[words[0]];
|
||||
//If for some reason this command does not have any associated metadata
|
||||
//just don't autocomplete. However, this should not happen.
|
||||
// If for some reason this command does not have any associated metadata
|
||||
// just don't autocomplete. However, this should not happen.
|
||||
if (metadata === undefined) {
|
||||
return line;
|
||||
}
|
||||
//complete an option
|
||||
|
||||
if (words[0] === 'tag' && words[1] === 'notetags') {
|
||||
metadata.usage = 'tag <tag-command> <note>';
|
||||
}
|
||||
|
||||
// complete an option
|
||||
let next = words.length > 1 ? words[words.length - 1] : '';
|
||||
let l = [];
|
||||
if (next[0] === '-') {
|
||||
for (let i = 0; i<metadata.options.length; i++) {
|
||||
for (let i = 0; i < metadata.options.length; i++) {
|
||||
const options = metadata.options[i][0].split(' ');
|
||||
//if there are multiple options then they will be separated by comma and
|
||||
//space. The comma should be removed
|
||||
// if there are multiple options then they will be separated by comma and
|
||||
// space. The comma should be removed
|
||||
if (options[0][options[0].length - 1] === ',') {
|
||||
options[0] = options[0].slice(0, -1);
|
||||
}
|
||||
if (words.includes(options[0]) || words.includes(options[1])) {
|
||||
continue;
|
||||
}
|
||||
//First two elements are the flag and the third is the description
|
||||
//Only autocomplete long
|
||||
// First two elements are the flag and the third is the description
|
||||
// Only autocomplete long
|
||||
if (options.length > 1 && options[1].indexOf(next) === 0) {
|
||||
l.push(options[1]);
|
||||
} else if (options[0].indexOf(next) === 0) {
|
||||
@@ -55,44 +60,43 @@ async function handleAutocompletionPromise(line) {
|
||||
if (l.length === 0) {
|
||||
return line;
|
||||
}
|
||||
let ret = l.map(a=>toCommandLine(a));
|
||||
ret.prefix = toCommandLine(words.slice(0, -1)) + ' ';
|
||||
let ret = l.map(a => toCommandLine(a));
|
||||
ret.prefix = `${toCommandLine(words.slice(0, -1))} `;
|
||||
return ret;
|
||||
}
|
||||
//Complete an argument
|
||||
//Determine the number of positional arguments by counting the number of
|
||||
//words that don't start with a - less one for the command name
|
||||
const positionalArgs = words.filter((a)=>a.indexOf('-') !== 0).length - 1;
|
||||
// Complete an argument
|
||||
// Determine the number of positional arguments by counting the number of
|
||||
// words that don't start with a - less one for the command name
|
||||
const positionalArgs = words.filter(a => a.indexOf('-') !== 0).length - 1;
|
||||
|
||||
let cmdUsage = yargParser(metadata.usage)['_'];
|
||||
cmdUsage.splice(0, 1);
|
||||
|
||||
if (cmdUsage.length >= positionalArgs) {
|
||||
|
||||
let argName = cmdUsage[positionalArgs - 1];
|
||||
argName = cliUtils.parseCommandArg(argName).name;
|
||||
|
||||
const currentFolder = app().currentFolder();
|
||||
|
||||
if (argName == 'note' || argName == 'note-pattern') {
|
||||
const notes = currentFolder ? await Note.previews(currentFolder.id, { titlePattern: next + '*' }) : [];
|
||||
l.push(...notes.map((n) => n.title));
|
||||
const notes = currentFolder ? await Note.previews(currentFolder.id, { titlePattern: `${next}*` }) : [];
|
||||
l.push(...notes.map(n => n.title));
|
||||
}
|
||||
|
||||
if (argName == 'notebook') {
|
||||
const folders = await Folder.search({ titlePattern: next + '*' });
|
||||
l.push(...folders.map((n) => n.title));
|
||||
const folders = await Folder.search({ titlePattern: `${next}*` });
|
||||
l.push(...folders.map(n => n.title));
|
||||
}
|
||||
|
||||
if (argName == 'item') {
|
||||
const notes = currentFolder ? await Note.previews(currentFolder.id, { titlePattern: next + '*' }) : [];
|
||||
const folders = await Folder.search({ titlePattern: next + '*' });
|
||||
l.push(...notes.map((n) => n.title), folders.map((n) => n.title));
|
||||
const notes = currentFolder ? await Note.previews(currentFolder.id, { titlePattern: `${next}*` }) : [];
|
||||
const folders = await Folder.search({ titlePattern: `${next}*` });
|
||||
l.push(...notes.map(n => n.title), folders.map(n => n.title));
|
||||
}
|
||||
|
||||
if (argName == 'tag') {
|
||||
let tags = await Tag.search({ titlePattern: next + '*' });
|
||||
l.push(...tags.map((n) => n.title));
|
||||
let tags = await Tag.search({ titlePattern: `${next}*` });
|
||||
l.push(...tags.map(n => n.title));
|
||||
}
|
||||
|
||||
if (argName == 'file') {
|
||||
@@ -101,7 +105,7 @@ async function handleAutocompletionPromise(line) {
|
||||
}
|
||||
|
||||
if (argName == 'tag-command') {
|
||||
let c = filterList(['add', 'remove', 'list'], next);
|
||||
let c = filterList(['add', 'remove', 'list', 'notetags'], next);
|
||||
l.push(...c);
|
||||
}
|
||||
|
||||
@@ -113,12 +117,11 @@ async function handleAutocompletionPromise(line) {
|
||||
if (l.length === 1) {
|
||||
return toCommandLine([...words.slice(0, -1), l[0]]);
|
||||
} else if (l.length > 1) {
|
||||
let ret = l.map(a=>toCommandLine(a));
|
||||
ret.prefix = toCommandLine(words.slice(0, -1)) + ' ';
|
||||
let ret = l.map(a => toCommandLine(a));
|
||||
ret.prefix = `${toCommandLine(words.slice(0, -1))} `;
|
||||
return ret;
|
||||
}
|
||||
return line;
|
||||
|
||||
}
|
||||
function handleAutocompletion(str, callback) {
|
||||
handleAutocompletionPromise(str).then(function(res) {
|
||||
@@ -127,22 +130,24 @@ function handleAutocompletion(str, callback) {
|
||||
}
|
||||
function toCommandLine(args) {
|
||||
if (Array.isArray(args)) {
|
||||
return args.map(function(a) {
|
||||
if(a.indexOf('"') !== -1 || a.indexOf(' ') !== -1) {
|
||||
return "'" + a + "'";
|
||||
} else if (a.indexOf("'") !== -1) {
|
||||
return '"' + a + '"';
|
||||
} else {
|
||||
return a;
|
||||
}
|
||||
}).join(' ');
|
||||
return args
|
||||
.map(function(a) {
|
||||
if (a.indexOf('"') !== -1 || a.indexOf(' ') !== -1) {
|
||||
return `'${a}'`;
|
||||
} else if (a.indexOf('\'') !== -1) {
|
||||
return `"${a}"`;
|
||||
} else {
|
||||
return a;
|
||||
}
|
||||
})
|
||||
.join(' ');
|
||||
} else {
|
||||
if(args.indexOf('"') !== -1 || args.indexOf(' ') !== -1) {
|
||||
return "'" + args + "' ";
|
||||
} else if (args.indexOf("'") !== -1) {
|
||||
return '"' + args + '" ';
|
||||
if (args.indexOf('"') !== -1 || args.indexOf(' ') !== -1) {
|
||||
return `'${args}' `;
|
||||
} else if (args.indexOf('\'') !== -1) {
|
||||
return `"${args}" `;
|
||||
} else {
|
||||
return args + ' ';
|
||||
return `${args} `;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -151,27 +156,26 @@ function getArguments(line) {
|
||||
let inDoubleQuotes = false;
|
||||
let currentWord = '';
|
||||
let parsed = [];
|
||||
for(let i = 0; i<line.length; i++) {
|
||||
if(line[i] === '"') {
|
||||
if(inDoubleQuotes) {
|
||||
for (let i = 0; i < line.length; i++) {
|
||||
if (line[i] === '"') {
|
||||
if (inDoubleQuotes) {
|
||||
inDoubleQuotes = false;
|
||||
//maybe push word to parsed?
|
||||
//currentWord += '"';
|
||||
// maybe push word to parsed?
|
||||
// currentWord += '"';
|
||||
} else {
|
||||
inDoubleQuotes = true;
|
||||
//currentWord += '"';
|
||||
// currentWord += '"';
|
||||
}
|
||||
} else if(line[i] === "'") {
|
||||
if(inSingleQuotes) {
|
||||
} else if (line[i] === '\'') {
|
||||
if (inSingleQuotes) {
|
||||
inSingleQuotes = false;
|
||||
//maybe push word to parsed?
|
||||
//currentWord += "'";
|
||||
// maybe push word to parsed?
|
||||
// currentWord += "'";
|
||||
} else {
|
||||
inSingleQuotes = true;
|
||||
//currentWord += "'";
|
||||
// currentWord += "'";
|
||||
}
|
||||
} else if (/\s/.test(line[i]) &&
|
||||
!(inDoubleQuotes || inSingleQuotes)) {
|
||||
} else if (/\s/.test(line[i]) && !(inDoubleQuotes || inSingleQuotes)) {
|
||||
if (currentWord !== '') {
|
||||
parsed.push(currentWord);
|
||||
currentWord = '';
|
||||
|
@@ -2,7 +2,6 @@ const { _ } = require('lib/locale.js');
|
||||
const { reg } = require('lib/registry.js');
|
||||
|
||||
class BaseCommand {
|
||||
|
||||
constructor() {
|
||||
this.stdout_ = null;
|
||||
this.prompt_ = null;
|
||||
@@ -20,7 +19,7 @@ class BaseCommand {
|
||||
throw new Error('Description not defined');
|
||||
}
|
||||
|
||||
async action(args) {
|
||||
async action() {
|
||||
throw new Error('Action not defined');
|
||||
}
|
||||
|
||||
@@ -93,7 +92,6 @@ class BaseCommand {
|
||||
logger() {
|
||||
return reg.logger();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
module.exports = { BaseCommand };
|
||||
module.exports = { BaseCommand };
|
||||
|
@@ -1,7 +1,7 @@
|
||||
const fs = require('fs-extra');
|
||||
const { fileExtension, basename, dirname } = require('lib/path-utils.js');
|
||||
const { fileExtension, dirname } = require('lib/path-utils.js');
|
||||
const wrap_ = require('word-wrap');
|
||||
const { _, setLocale, languageCode } = require('lib/locale.js');
|
||||
const { languageCode } = require('lib/locale.js');
|
||||
|
||||
const rootDir = dirname(dirname(__dirname));
|
||||
const MAX_WIDTH = 78;
|
||||
@@ -22,14 +22,14 @@ function renderOptions(options) {
|
||||
let option = options[i];
|
||||
const flag = option[0];
|
||||
const indent = INDENT + INDENT + ' '.repeat(optionColWidth + 2);
|
||||
|
||||
|
||||
let r = wrap(option[1], indent);
|
||||
r = r.substr(flag.length + (INDENT + INDENT).length);
|
||||
r = INDENT + INDENT + flag + r;
|
||||
output.push(r);
|
||||
}
|
||||
|
||||
return output.join("\n");
|
||||
return output.join('\n');
|
||||
}
|
||||
|
||||
function renderCommand(cmd) {
|
||||
@@ -44,17 +44,17 @@ function renderCommand(cmd) {
|
||||
output.push('');
|
||||
output.push(optionString);
|
||||
}
|
||||
return output.join("\n");
|
||||
return output.join('\n');
|
||||
}
|
||||
|
||||
function getCommands() {
|
||||
let output = [];
|
||||
fs.readdirSync(__dirname).forEach((path) => {
|
||||
fs.readdirSync(__dirname).forEach(path => {
|
||||
if (path.indexOf('command-') !== 0) return;
|
||||
const ext = fileExtension(path)
|
||||
const ext = fileExtension(path);
|
||||
if (ext != 'js') return;
|
||||
|
||||
let CommandClass = require('./' + path);
|
||||
let CommandClass = require(`./${path}`);
|
||||
let cmd = new CommandClass();
|
||||
if (!cmd.enabled()) return;
|
||||
if (cmd.hidden()) return;
|
||||
@@ -87,14 +87,14 @@ function getHeader() {
|
||||
let description = [];
|
||||
description.push('Joplin is a note taking and to-do application, which can handle a large number of notes organised into notebooks.');
|
||||
description.push('The notes are searchable, can be copied, tagged and modified with your own text editor.');
|
||||
description.push("\n\n");
|
||||
description.push('\n\n');
|
||||
description.push('The notes can be synchronised with various target including the file system (for example with a network directory) or with Microsoft OneDrive.');
|
||||
description.push("\n\n");
|
||||
description.push('\n\n');
|
||||
description.push('Notes exported from Evenotes via .enex files can be imported into Joplin, including the formatted content, resources (images, attachments, etc.) and complete metadata (geolocation, updated time, created time, etc.).');
|
||||
|
||||
output.push(wrap(description.join(''), INDENT));
|
||||
|
||||
return output.join("\n");
|
||||
return output.join('\n');
|
||||
}
|
||||
|
||||
function getFooter() {
|
||||
@@ -102,18 +102,18 @@ function getFooter() {
|
||||
|
||||
output.push('WEBSITE');
|
||||
output.push('');
|
||||
output.push(INDENT + 'https://joplinapp.org');
|
||||
output.push(`${INDENT}https://joplinapp.org`);
|
||||
|
||||
output.push('');
|
||||
|
||||
output.push('LICENSE');
|
||||
output.push('');
|
||||
let filePath = rootDir + '/LICENSE_' + languageCode();
|
||||
if (!fs.existsSync(filePath)) filePath = rootDir + '/LICENSE';
|
||||
let filePath = `${rootDir}/LICENSE_${languageCode()}`;
|
||||
if (!fs.existsSync(filePath)) filePath = `${rootDir}/LICENSE`;
|
||||
const licenseText = fs.readFileSync(filePath, 'utf8');
|
||||
output.push(wrap(licenseText, INDENT));
|
||||
|
||||
return output.join("\n");
|
||||
return output.join('\n');
|
||||
}
|
||||
|
||||
async function main() {
|
||||
@@ -128,12 +128,12 @@ async function main() {
|
||||
}
|
||||
|
||||
const headerText = getHeader();
|
||||
const commandsText = commandBlocks.join("\n\n");
|
||||
const commandsText = commandBlocks.join('\n\n');
|
||||
const footerText = getFooter();
|
||||
|
||||
console.info(headerText + "\n\n" + 'USAGE' + "\n\n" + commandsText + "\n\n" + footerText);
|
||||
console.info(`${headerText}\n\n` + 'USAGE' + `\n\n${commandsText}\n\n${footerText}`);
|
||||
}
|
||||
|
||||
main().catch((error) => {
|
||||
main().catch(error => {
|
||||
console.error(error);
|
||||
});
|
||||
});
|
||||
|
@@ -1,4 +1,4 @@
|
||||
"use strict"
|
||||
'use strict';
|
||||
|
||||
const fs = require('fs-extra');
|
||||
const { Logger } = require('lib/logger.js');
|
||||
@@ -10,14 +10,14 @@ const Folder = require('lib/models/Folder.js');
|
||||
const Note = require('lib/models/Note.js');
|
||||
const Setting = require('lib/models/Setting.js');
|
||||
const { sprintf } = require('sprintf-js');
|
||||
const exec = require('child_process').exec
|
||||
const exec = require('child_process').exec;
|
||||
|
||||
process.on('unhandledRejection', (reason, p) => {
|
||||
console.error('Unhandled promise rejection', p, 'reason:', reason);
|
||||
});
|
||||
|
||||
const baseDir = dirname(__dirname) + '/tests/cli-integration';
|
||||
const joplinAppPath = __dirname + '/main.js';
|
||||
const baseDir = `${dirname(__dirname)}/tests/cli-integration`;
|
||||
const joplinAppPath = `${__dirname}/main.js`;
|
||||
|
||||
const logger = new Logger();
|
||||
logger.addTarget('console');
|
||||
@@ -32,17 +32,17 @@ db.setLogger(dbLogger);
|
||||
|
||||
function createClient(id) {
|
||||
return {
|
||||
'id': id,
|
||||
'profileDir': baseDir + '/client' + id,
|
||||
id: id,
|
||||
profileDir: `${baseDir}/client${id}`,
|
||||
};
|
||||
}
|
||||
|
||||
const client = createClient(1);
|
||||
|
||||
function execCommand(client, command, options = {}) {
|
||||
let exePath = 'node ' + joplinAppPath;
|
||||
let cmd = exePath + ' --update-geolocation-disabled --env dev --profile ' + client.profileDir + ' ' + command;
|
||||
logger.info(client.id + ': ' + command);
|
||||
function execCommand(client, command) {
|
||||
let exePath = `node ${joplinAppPath}`;
|
||||
let cmd = `${exePath} --update-geolocation-disabled --env dev --profile ${client.profileDir} ${command}`;
|
||||
logger.info(`${client.id}: ${command}`);
|
||||
|
||||
return new Promise((resolve, reject) => {
|
||||
exec(cmd, (error, stdout, stderr) => {
|
||||
@@ -72,14 +72,7 @@ function assertEquals(expected, real) {
|
||||
}
|
||||
|
||||
async function clearDatabase() {
|
||||
await db.transactionExecBatch([
|
||||
'DELETE FROM folders',
|
||||
'DELETE FROM notes',
|
||||
'DELETE FROM tags',
|
||||
'DELETE FROM note_tags',
|
||||
'DELETE FROM resources',
|
||||
'DELETE FROM deleted_items',
|
||||
]);
|
||||
await db.transactionExecBatch(['DELETE FROM folders', 'DELETE FROM notes', 'DELETE FROM tags', 'DELETE FROM note_tags', 'DELETE FROM resources', 'DELETE FROM deleted_items']);
|
||||
}
|
||||
|
||||
const testUnits = {};
|
||||
@@ -101,7 +94,7 @@ testUnits.testFolders = async () => {
|
||||
|
||||
folders = await Folder.all();
|
||||
assertEquals(0, folders.length);
|
||||
}
|
||||
};
|
||||
|
||||
testUnits.testNotes = async () => {
|
||||
await execCommand(client, 'mkbook nb1');
|
||||
@@ -121,16 +114,16 @@ testUnits.testNotes = async () => {
|
||||
notes = await Note.all();
|
||||
assertEquals(2, notes.length);
|
||||
|
||||
await execCommand(client, "rm -f 'blabla*'");
|
||||
await execCommand(client, 'rm -f \'blabla*\'');
|
||||
|
||||
notes = await Note.all();
|
||||
assertEquals(2, notes.length);
|
||||
|
||||
await execCommand(client, "rm -f 'n*'");
|
||||
await execCommand(client, 'rm -f \'n*\'');
|
||||
|
||||
notes = await Note.all();
|
||||
assertEquals(0, notes.length);
|
||||
}
|
||||
};
|
||||
|
||||
testUnits.testCat = async () => {
|
||||
await execCommand(client, 'mkbook nb1');
|
||||
@@ -145,7 +138,7 @@ testUnits.testCat = async () => {
|
||||
|
||||
r = await execCommand(client, 'cat -v mynote');
|
||||
assertTrue(r.indexOf(note.id) >= 0);
|
||||
}
|
||||
};
|
||||
|
||||
testUnits.testConfig = async () => {
|
||||
await execCommand(client, 'config editor vim');
|
||||
@@ -159,7 +152,7 @@ testUnits.testConfig = async () => {
|
||||
let r = await execCommand(client, 'config');
|
||||
assertTrue(r.indexOf('editor') >= 0);
|
||||
assertTrue(r.indexOf('subl') >= 0);
|
||||
}
|
||||
};
|
||||
|
||||
testUnits.testCp = async () => {
|
||||
await execCommand(client, 'mkbook nb2');
|
||||
@@ -180,7 +173,7 @@ testUnits.testCp = async () => {
|
||||
notes = await Note.previews(f2.id);
|
||||
assertEquals(1, notes.length);
|
||||
assertEquals(notesF1[0].title, notes[0].title);
|
||||
}
|
||||
};
|
||||
|
||||
testUnits.testLs = async () => {
|
||||
await execCommand(client, 'mkbook nb1');
|
||||
@@ -190,7 +183,7 @@ testUnits.testLs = async () => {
|
||||
|
||||
assertTrue(r.indexOf('note1') >= 0);
|
||||
assertTrue(r.indexOf('note2') >= 0);
|
||||
}
|
||||
};
|
||||
|
||||
testUnits.testMv = async () => {
|
||||
await execCommand(client, 'mkbook nb2');
|
||||
@@ -210,21 +203,21 @@ testUnits.testMv = async () => {
|
||||
await execCommand(client, 'mknote note2');
|
||||
await execCommand(client, 'mknote note3');
|
||||
await execCommand(client, 'mknote blabla');
|
||||
await execCommand(client, "mv 'note*' nb2");
|
||||
await execCommand(client, 'mv \'note*\' nb2');
|
||||
|
||||
notes1 = await Note.previews(f1.id);
|
||||
notes2 = await Note.previews(f2.id);
|
||||
|
||||
assertEquals(1, notes1.length);
|
||||
assertEquals(4, notes2.length);
|
||||
}
|
||||
};
|
||||
|
||||
async function main(argv) {
|
||||
async function main() {
|
||||
await fs.remove(baseDir);
|
||||
|
||||
logger.info(await execCommand(client, 'version'));
|
||||
|
||||
await db.open({ name: client.profileDir + '/database.sqlite' });
|
||||
await db.open({ name: `${client.profileDir}/database.sqlite` });
|
||||
BaseModel.db_ = db;
|
||||
await Setting.load();
|
||||
|
||||
@@ -237,13 +230,13 @@ async function main(argv) {
|
||||
|
||||
await clearDatabase();
|
||||
let testName = n.substr(4).toLowerCase();
|
||||
process.stdout.write(testName + ': ');
|
||||
process.stdout.write(`${testName}: `);
|
||||
await testUnits[n]();
|
||||
console.info('');
|
||||
}
|
||||
}
|
||||
|
||||
main(process.argv).catch((error) => {
|
||||
main(process.argv).catch(error => {
|
||||
console.info('');
|
||||
logger.error(error);
|
||||
});
|
||||
});
|
||||
|
@@ -5,7 +5,7 @@ const stringPadding = require('string-padding');
|
||||
|
||||
const cliUtils = {};
|
||||
|
||||
cliUtils.printArray = function(logFunction, rows, headers = null) {
|
||||
cliUtils.printArray = function(logFunction, rows) {
|
||||
if (!rows.length) return '';
|
||||
|
||||
const ALIGN_LEFT = 0;
|
||||
@@ -16,7 +16,7 @@ cliUtils.printArray = function(logFunction, rows, headers = null) {
|
||||
|
||||
for (let i = 0; i < rows.length; i++) {
|
||||
let row = rows[i];
|
||||
|
||||
|
||||
for (let j = 0; j < row.length; j++) {
|
||||
let item = row[j];
|
||||
let width = item ? item.toString().length : 0;
|
||||
@@ -26,7 +26,6 @@ cliUtils.printArray = function(logFunction, rows, headers = null) {
|
||||
}
|
||||
}
|
||||
|
||||
let lines = [];
|
||||
for (let row = 0; row < rows.length; row++) {
|
||||
let line = [];
|
||||
for (let col = 0; col < colWidths.length; col++) {
|
||||
@@ -37,7 +36,7 @@ cliUtils.printArray = function(logFunction, rows, headers = null) {
|
||||
}
|
||||
logFunction(line.join(' '));
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
cliUtils.parseFlags = function(flags) {
|
||||
let output = {};
|
||||
@@ -56,10 +55,10 @@ cliUtils.parseFlags = function(flags) {
|
||||
}
|
||||
}
|
||||
return output;
|
||||
}
|
||||
};
|
||||
|
||||
cliUtils.parseCommandArg = function(arg) {
|
||||
if (arg.length <= 2) throw new Error('Invalid command arg: ' + arg);
|
||||
if (arg.length <= 2) throw new Error(`Invalid command arg: ${arg}`);
|
||||
|
||||
const c1 = arg[0];
|
||||
const c2 = arg[arg.length - 1];
|
||||
@@ -70,9 +69,9 @@ cliUtils.parseCommandArg = function(arg) {
|
||||
} else if (c1 == '[' && c2 == ']') {
|
||||
return { required: false, name: name };
|
||||
} else {
|
||||
throw new Error('Invalid command arg: ' + arg);
|
||||
throw new Error(`Invalid command arg: ${arg}`);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
cliUtils.makeCommandArgs = function(cmd, argv) {
|
||||
let cmdUsage = cmd.usage();
|
||||
@@ -83,9 +82,8 @@ cliUtils.makeCommandArgs = function(cmd, argv) {
|
||||
let booleanFlags = [];
|
||||
let aliases = {};
|
||||
for (let i = 0; i < options.length; i++) {
|
||||
if (options[i].length != 2) throw new Error('Invalid options: ' + options[i]);
|
||||
if (options[i].length != 2) throw new Error(`Invalid options: ${options[i]}`);
|
||||
let flags = options[i][0];
|
||||
let text = options[i][1];
|
||||
|
||||
flags = cliUtils.parseFlags(flags);
|
||||
|
||||
@@ -125,27 +123,27 @@ cliUtils.makeCommandArgs = function(cmd, argv) {
|
||||
output.options = argOptions;
|
||||
|
||||
return output;
|
||||
}
|
||||
};
|
||||
|
||||
cliUtils.promptMcq = function(message, answers) {
|
||||
const readline = require('readline');
|
||||
|
||||
const rl = readline.createInterface({
|
||||
input: process.stdin,
|
||||
output: process.stdout
|
||||
output: process.stdout,
|
||||
});
|
||||
|
||||
message += "\n\n";
|
||||
message += '\n\n';
|
||||
for (let n in answers) {
|
||||
if (!answers.hasOwnProperty(n)) continue;
|
||||
message += _('%s: %s', n, answers[n]) + "\n";
|
||||
message += `${_('%s: %s', n, answers[n])}\n`;
|
||||
}
|
||||
|
||||
message += "\n";
|
||||
message += '\n';
|
||||
message += _('Your choice: ');
|
||||
|
||||
return new Promise((resolve, reject) => {
|
||||
rl.question(message, (answer) => {
|
||||
rl.question(message, answer => {
|
||||
rl.close();
|
||||
|
||||
if (!(answer in answers)) {
|
||||
@@ -156,7 +154,7 @@ cliUtils.promptMcq = function(message, answers) {
|
||||
resolve(answer);
|
||||
});
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
cliUtils.promptConfirm = function(message, answers = null) {
|
||||
if (!answers) answers = [_('Y'), _('n')];
|
||||
@@ -164,23 +162,24 @@ cliUtils.promptConfirm = function(message, answers = null) {
|
||||
|
||||
const rl = readline.createInterface({
|
||||
input: process.stdin,
|
||||
output: process.stdout
|
||||
output: process.stdout,
|
||||
});
|
||||
|
||||
message += ' (' + answers.join('/') + ')';
|
||||
message += ` (${answers.join('/')})`;
|
||||
|
||||
return new Promise((resolve, reject) => {
|
||||
rl.question(message + ' ', (answer) => {
|
||||
return new Promise((resolve) => {
|
||||
rl.question(`${message} `, answer => {
|
||||
const ok = !answer || answer.toLowerCase() == answers[0].toLowerCase();
|
||||
rl.close();
|
||||
resolve(ok);
|
||||
});
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
// Note: initialText is there to have the same signature as statusBar.prompt() so that
|
||||
// it can be a drop-in replacement, however initialText is not used (and cannot be
|
||||
// with readline.question?).
|
||||
// eslint-disable-next-line no-unused-vars, @typescript-eslint/no-unused-vars
|
||||
cliUtils.prompt = function(initialText = '', promptString = ':', options = null) {
|
||||
if (!options) options = {};
|
||||
|
||||
@@ -189,10 +188,9 @@ cliUtils.prompt = function(initialText = '', promptString = ':', options = null)
|
||||
|
||||
const mutableStdout = new Writable({
|
||||
write: function(chunk, encoding, callback) {
|
||||
if (!this.muted)
|
||||
process.stdout.write(chunk, encoding);
|
||||
if (!this.muted) process.stdout.write(chunk, encoding);
|
||||
callback();
|
||||
}
|
||||
},
|
||||
});
|
||||
|
||||
const rl = readline.createInterface({
|
||||
@@ -201,18 +199,18 @@ cliUtils.prompt = function(initialText = '', promptString = ':', options = null)
|
||||
terminal: true,
|
||||
});
|
||||
|
||||
return new Promise((resolve, reject) => {
|
||||
return new Promise((resolve) => {
|
||||
mutableStdout.muted = false;
|
||||
|
||||
rl.question(promptString, (answer) => {
|
||||
rl.question(promptString, answer => {
|
||||
rl.close();
|
||||
if (!!options.secure) this.stdout_('');
|
||||
if (options.secure) this.stdout_('');
|
||||
resolve(answer);
|
||||
});
|
||||
|
||||
mutableStdout.muted = !!options.secure;
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
let redrawStarted_ = false;
|
||||
let redrawLastLog_ = null;
|
||||
@@ -220,7 +218,7 @@ let redrawLastUpdateTime_ = 0;
|
||||
|
||||
cliUtils.setStdout = function(v) {
|
||||
this.stdout_ = v;
|
||||
}
|
||||
};
|
||||
|
||||
cliUtils.redraw = function(s) {
|
||||
const now = time.unixMs();
|
||||
@@ -233,8 +231,8 @@ cliUtils.redraw = function(s) {
|
||||
redrawLastLog_ = s;
|
||||
}
|
||||
|
||||
redrawStarted_ = true;
|
||||
}
|
||||
redrawStarted_ = true;
|
||||
};
|
||||
|
||||
cliUtils.redrawDone = function() {
|
||||
if (!redrawStarted_) return;
|
||||
@@ -245,6 +243,6 @@ cliUtils.redrawDone = function() {
|
||||
|
||||
redrawLastLog_ = null;
|
||||
redrawStarted_ = false;
|
||||
}
|
||||
};
|
||||
|
||||
module.exports = { cliUtils };
|
||||
module.exports = { cliUtils };
|
||||
|
@@ -1,19 +1,12 @@
|
||||
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';
|
||||
}
|
||||
@@ -23,18 +16,22 @@ class Command extends BaseCommand {
|
||||
}
|
||||
|
||||
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);
|
||||
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) {
|
||||
async action() {
|
||||
const models = [
|
||||
{
|
||||
type: BaseModel.TYPE_NOTE,
|
||||
@@ -70,8 +67,8 @@ class Command extends BaseCommand {
|
||||
lines.push('}');
|
||||
lines.push('```');
|
||||
lines.push('');
|
||||
|
||||
lines.push('# Authorisation')
|
||||
|
||||
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('');
|
||||
@@ -171,7 +168,7 @@ class Command extends BaseCommand {
|
||||
// });
|
||||
}
|
||||
|
||||
lines.push('# ' + toTitleCase(tableName));
|
||||
lines.push(`# ${toTitleCase(tableName)}`);
|
||||
lines.push('');
|
||||
|
||||
if (model.type === BaseModel.TYPE_FOLDER) {
|
||||
@@ -184,9 +181,9 @@ class Command extends BaseCommand {
|
||||
lines.push(this.createPropertiesTable(tableFields));
|
||||
lines.push('');
|
||||
|
||||
lines.push('## GET /' + tableName);
|
||||
lines.push(`## GET /${tableName}`);
|
||||
lines.push('');
|
||||
lines.push('Gets all ' + tableName);
|
||||
lines.push(`Gets all ${tableName}`);
|
||||
lines.push('');
|
||||
|
||||
if (model.type === BaseModel.TYPE_FOLDER) {
|
||||
@@ -194,9 +191,9 @@ class Command extends BaseCommand {
|
||||
lines.push('');
|
||||
}
|
||||
|
||||
lines.push('## GET /' + tableName + '/:id');
|
||||
lines.push(`## GET /${tableName}/:id`);
|
||||
lines.push('');
|
||||
lines.push('Gets ' + singular + ' with ID :id');
|
||||
lines.push(`Gets ${singular} with ID :id`);
|
||||
lines.push('');
|
||||
|
||||
if (model.type === BaseModel.TYPE_TAG) {
|
||||
@@ -211,6 +208,11 @@ class Command extends BaseCommand {
|
||||
lines.push('');
|
||||
lines.push('Gets all the tags attached to this note.');
|
||||
lines.push('');
|
||||
|
||||
lines.push('## GET /notes/:id/resources');
|
||||
lines.push('');
|
||||
lines.push('Gets all the resources attached to this note.');
|
||||
lines.push('');
|
||||
}
|
||||
|
||||
if (model.type === BaseModel.TYPE_FOLDER) {
|
||||
@@ -227,9 +229,9 @@ class Command extends BaseCommand {
|
||||
lines.push('');
|
||||
}
|
||||
|
||||
lines.push('## POST /' + tableName);
|
||||
lines.push(`## POST /${tableName}`);
|
||||
lines.push('');
|
||||
lines.push('Creates a new ' + singular);
|
||||
lines.push(`Creates a new ${singular}`);
|
||||
lines.push('');
|
||||
|
||||
if (model.type === BaseModel.TYPE_RESOURCE) {
|
||||
@@ -273,14 +275,14 @@ class Command extends BaseCommand {
|
||||
lines.push('');
|
||||
}
|
||||
|
||||
lines.push('## PUT /' + tableName + '/:id');
|
||||
lines.push(`## PUT /${tableName}/:id`);
|
||||
lines.push('');
|
||||
lines.push('Sets the properties of the ' + singular + ' with ID :id');
|
||||
lines.push(`Sets the properties of the ${singular} with ID :id`);
|
||||
lines.push('');
|
||||
|
||||
lines.push('## DELETE /' + tableName + '/:id');
|
||||
lines.push(`## DELETE /${tableName}/:id`);
|
||||
lines.push('');
|
||||
lines.push('Deletes the ' + singular + ' with ID :id');
|
||||
lines.push(`Deletes the ${singular} with ID :id`);
|
||||
lines.push('');
|
||||
|
||||
if (model.type === BaseModel.TYPE_TAG) {
|
||||
@@ -293,7 +295,6 @@ class Command extends BaseCommand {
|
||||
|
||||
this.stdout(lines.join('\n'));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
module.exports = Command;
|
||||
|
@@ -3,10 +3,8 @@ const { app } = require('./app.js');
|
||||
const { _ } = require('lib/locale.js');
|
||||
const BaseModel = require('lib/BaseModel.js');
|
||||
const { shim } = require('lib/shim.js');
|
||||
const fs = require('fs-extra');
|
||||
|
||||
class Command extends BaseCommand {
|
||||
|
||||
usage() {
|
||||
return 'attach <note> <file>';
|
||||
}
|
||||
@@ -26,7 +24,6 @@ class Command extends BaseCommand {
|
||||
|
||||
await shim.attachFileToNote(note, localFilePath);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
module.exports = Command;
|
||||
module.exports = Command;
|
||||
|
@@ -2,11 +2,9 @@ const { BaseCommand } = require('./base-command.js');
|
||||
const { app } = require('./app.js');
|
||||
const { _ } = require('lib/locale.js');
|
||||
const BaseModel = require('lib/BaseModel.js');
|
||||
const Folder = require('lib/models/Folder.js');
|
||||
const Note = require('lib/models/Note.js');
|
||||
|
||||
class Command extends BaseCommand {
|
||||
|
||||
usage() {
|
||||
return 'cat <note>';
|
||||
}
|
||||
@@ -16,9 +14,7 @@ class Command extends BaseCommand {
|
||||
}
|
||||
|
||||
options() {
|
||||
return [
|
||||
['-v, --verbose', _('Displays the complete information about note.')],
|
||||
];
|
||||
return [['-v, --verbose', _('Displays the complete information about note.')]];
|
||||
}
|
||||
|
||||
async action(args) {
|
||||
@@ -30,10 +26,13 @@ class Command extends BaseCommand {
|
||||
const content = args.options.verbose ? await Note.serialize(item) : await Note.serializeForEdit(item);
|
||||
this.stdout(content);
|
||||
|
||||
app().gui().showConsole();
|
||||
app().gui().maximizeConsole();
|
||||
app()
|
||||
.gui()
|
||||
.showConsole();
|
||||
app()
|
||||
.gui()
|
||||
.maximizeConsole();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
module.exports = Command;
|
||||
module.exports = Command;
|
||||
|
@@ -4,25 +4,22 @@ const { app } = require('./app.js');
|
||||
const Setting = require('lib/models/Setting.js');
|
||||
|
||||
class Command extends BaseCommand {
|
||||
|
||||
usage() {
|
||||
return 'config [name] [value]';
|
||||
}
|
||||
|
||||
description() {
|
||||
return _("Gets or sets a config value. If [value] is not provided, it will show the value of [name]. If neither [name] nor [value] is provided, it will list the current configuration.");
|
||||
return _('Gets or sets a config value. If [value] is not provided, it will show the value of [name]. If neither [name] nor [value] is provided, it will list the current configuration.');
|
||||
}
|
||||
|
||||
options() {
|
||||
return [
|
||||
['-v, --verbose', _('Also displays unset and hidden config variables.')],
|
||||
];
|
||||
return [['-v, --verbose', _('Also displays unset and hidden config variables.')]];
|
||||
}
|
||||
|
||||
async action(args) {
|
||||
const verbose = args.options.verbose;
|
||||
|
||||
const renderKeyValue = (name) => {
|
||||
const renderKeyValue = name => {
|
||||
const md = Setting.settingMetadata(name);
|
||||
let value = Setting.value(name);
|
||||
if (typeof value === 'object' || Array.isArray(value)) value = JSON.stringify(value);
|
||||
@@ -33,7 +30,7 @@ class Command extends BaseCommand {
|
||||
} else {
|
||||
return _('%s = %s', name, value);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
if (!args.name && !args.value) {
|
||||
let keys = Setting.keys(!verbose, 'cli');
|
||||
@@ -43,15 +40,23 @@ class Command extends BaseCommand {
|
||||
if (!verbose && !value) continue;
|
||||
this.stdout(renderKeyValue(keys[i]));
|
||||
}
|
||||
app().gui().showConsole();
|
||||
app().gui().maximizeConsole();
|
||||
app()
|
||||
.gui()
|
||||
.showConsole();
|
||||
app()
|
||||
.gui()
|
||||
.maximizeConsole();
|
||||
return;
|
||||
}
|
||||
|
||||
if (args.name && !args.value) {
|
||||
this.stdout(renderKeyValue(args.name));
|
||||
app().gui().showConsole();
|
||||
app().gui().maximizeConsole();
|
||||
app()
|
||||
.gui()
|
||||
.showConsole();
|
||||
app()
|
||||
.gui()
|
||||
.maximizeConsole();
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -64,7 +69,6 @@ class Command extends BaseCommand {
|
||||
|
||||
await Setting.saveAll();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
module.exports = Command;
|
||||
module.exports = Command;
|
||||
|
@@ -2,11 +2,9 @@ const { BaseCommand } = require('./base-command.js');
|
||||
const { app } = require('./app.js');
|
||||
const { _ } = require('lib/locale.js');
|
||||
const BaseModel = require('lib/BaseModel.js');
|
||||
const Folder = require('lib/models/Folder.js');
|
||||
const Note = require('lib/models/Note.js');
|
||||
|
||||
class Command extends BaseCommand {
|
||||
|
||||
usage() {
|
||||
return 'cp <note> [notebook]';
|
||||
}
|
||||
@@ -33,7 +31,6 @@ class Command extends BaseCommand {
|
||||
Note.updateGeolocation(newNote.id);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
module.exports = Command;
|
||||
module.exports = Command;
|
||||
|
@@ -2,12 +2,10 @@ const { BaseCommand } = require('./base-command.js');
|
||||
const { app } = require('./app.js');
|
||||
const { _ } = require('lib/locale.js');
|
||||
const BaseModel = require('lib/BaseModel.js');
|
||||
const Folder = require('lib/models/Folder.js');
|
||||
const Note = require('lib/models/Note.js');
|
||||
const { time } = require('lib/time-utils.js');
|
||||
|
||||
class Command extends BaseCommand {
|
||||
|
||||
usage() {
|
||||
return 'done <note>';
|
||||
}
|
||||
@@ -35,7 +33,6 @@ class Command extends BaseCommand {
|
||||
async action(args) {
|
||||
await Command.handleAction(this, args, true);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
module.exports = Command;
|
||||
module.exports = Command;
|
||||
|
@@ -1,12 +1,9 @@
|
||||
const { BaseCommand } = require('./base-command.js');
|
||||
const { app } = require('./app.js');
|
||||
const { _ } = require('lib/locale.js');
|
||||
const Folder = require('lib/models/Folder.js');
|
||||
const Note = require('lib/models/Note.js');
|
||||
const Tag = require('lib/models/Tag.js');
|
||||
|
||||
class Command extends BaseCommand {
|
||||
|
||||
usage() {
|
||||
return 'dump';
|
||||
}
|
||||
@@ -19,7 +16,7 @@ class Command extends BaseCommand {
|
||||
return true;
|
||||
}
|
||||
|
||||
async action(args) {
|
||||
async action() {
|
||||
let items = [];
|
||||
let folders = await Folder.all();
|
||||
for (let i = 0; i < folders.length; i++) {
|
||||
@@ -35,10 +32,9 @@ class Command extends BaseCommand {
|
||||
}
|
||||
|
||||
items = items.concat(tags);
|
||||
|
||||
|
||||
this.stdout(JSON.stringify(items));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
module.exports = Command;
|
||||
module.exports = Command;
|
||||
|
@@ -1,9 +1,7 @@
|
||||
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 Setting = require('lib/models/Setting.js');
|
||||
const { shim } = require('lib/shim');
|
||||
@@ -12,7 +10,6 @@ const imageType = require('image-type');
|
||||
const readChunk = require('read-chunk');
|
||||
|
||||
class Command extends BaseCommand {
|
||||
|
||||
usage() {
|
||||
return 'e2ee <command> [path]';
|
||||
}
|
||||
@@ -35,7 +32,7 @@ class Command extends BaseCommand {
|
||||
|
||||
const options = args.options;
|
||||
|
||||
const askForMasterKey = async (error) => {
|
||||
const askForMasterKey = async error => {
|
||||
const masterKeyId = error.masterKeyId;
|
||||
const password = await this.prompt(_('Enter master password:'), { type: 'string', secure: true });
|
||||
if (!password) {
|
||||
@@ -45,7 +42,7 @@ class Command extends BaseCommand {
|
||||
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 });
|
||||
@@ -53,7 +50,15 @@ class Command extends BaseCommand {
|
||||
this.stdout(_('Operation cancelled'));
|
||||
return;
|
||||
}
|
||||
|
||||
const password2 = await this.prompt(_('Confirm password:'), { type: 'string', secure: true });
|
||||
if (!password2) {
|
||||
this.stdout(_('Operation cancelled'));
|
||||
return;
|
||||
}
|
||||
if (password !== password2) {
|
||||
this.stdout(_('Passwords do not match!'));
|
||||
return;
|
||||
}
|
||||
await EncryptionService.instance().generateMasterKeyAndEnableEncryption(password);
|
||||
return;
|
||||
}
|
||||
@@ -100,13 +105,13 @@ class Command extends BaseCommand {
|
||||
while (true) {
|
||||
try {
|
||||
const outputDir = options.output ? options.output : require('os').tmpdir();
|
||||
let outFile = outputDir + '/' + pathUtils.filename(args.path) + '.' + Date.now() + '.bin';
|
||||
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;
|
||||
const newOutFile = `${outFile}.${detectedType.ext}`;
|
||||
await shim.fsDriver().move(outFile, newOutFile);
|
||||
outFile = newOutFile;
|
||||
}
|
||||
@@ -128,19 +133,17 @@ class Command extends BaseCommand {
|
||||
|
||||
if (args.command === 'target-status') {
|
||||
const fs = require('fs-extra');
|
||||
const pathUtils = require('lib/path-utils.js');
|
||||
const fsDriver = new (require('lib/fs-driver-node.js').FsDriverNode)();
|
||||
|
||||
const targetPath = args.path;
|
||||
if (!targetPath) throw new Error('Please specify the sync target path.');
|
||||
|
||||
const dirPaths = function(targetPath) {
|
||||
let paths = [];
|
||||
fs.readdirSync(targetPath).forEach((path) => {
|
||||
fs.readdirSync(targetPath).forEach(path => {
|
||||
paths.push(path);
|
||||
});
|
||||
return paths;
|
||||
}
|
||||
};
|
||||
|
||||
let itemCount = 0;
|
||||
let resourceCount = 0;
|
||||
@@ -155,7 +158,7 @@ class Command extends BaseCommand {
|
||||
|
||||
for (let i = 0; i < paths.length; i++) {
|
||||
const path = paths[i];
|
||||
const fullPath = targetPath + '/' + path;
|
||||
const fullPath = `${targetPath}/${path}`;
|
||||
const stat = await fs.stat(fullPath);
|
||||
|
||||
// this.stdout(fullPath);
|
||||
@@ -165,7 +168,7 @@ class Command extends BaseCommand {
|
||||
for (let j = 0; j < resourcePaths.length; j++) {
|
||||
const resourcePath = resourcePaths[j];
|
||||
resourceCount++;
|
||||
const fullResourcePath = fullPath + '/' + resourcePath;
|
||||
const fullResourcePath = `${fullPath}/${resourcePath}`;
|
||||
const isEncrypted = await EncryptionService.instance().fileIsEncrypted(fullResourcePath);
|
||||
if (isEncrypted) {
|
||||
encryptedResourceCount++;
|
||||
@@ -199,9 +202,9 @@ class Command extends BaseCommand {
|
||||
}
|
||||
}
|
||||
|
||||
this.stdout('Encrypted items: ' + encryptedItemCount + '/' + itemCount);
|
||||
this.stdout('Encrypted resources: ' + encryptedResourceCount + '/' + resourceCount);
|
||||
this.stdout('Other items (never encrypted): ' + otherItemCount);
|
||||
this.stdout(`Encrypted items: ${encryptedItemCount}/${itemCount}`);
|
||||
this.stdout(`Encrypted resources: ${encryptedResourceCount}/${resourceCount}`);
|
||||
this.stdout(`Other items (never encrypted): ${otherItemCount}`);
|
||||
|
||||
if (options.verbose) {
|
||||
this.stdout('');
|
||||
@@ -224,7 +227,6 @@ class Command extends BaseCommand {
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
module.exports = Command;
|
||||
module.exports = Command;
|
||||
|
@@ -1,17 +1,14 @@
|
||||
const fs = require('fs-extra');
|
||||
const { BaseCommand } = require('./base-command.js');
|
||||
const { splitCommandString } = require('lib/string-utils.js');
|
||||
const { uuid } = require('lib/uuid.js');
|
||||
const { app } = require('./app.js');
|
||||
const { _ } = require('lib/locale.js');
|
||||
const Folder = require('lib/models/Folder.js');
|
||||
const Note = require('lib/models/Note.js');
|
||||
const Setting = require('lib/models/Setting.js');
|
||||
const BaseModel = require('lib/BaseModel.js');
|
||||
const { cliUtils } = require('./cli-utils.js');
|
||||
const { time } = require('lib/time-utils.js');
|
||||
|
||||
class Command extends BaseCommand {
|
||||
|
||||
usage() {
|
||||
return 'edit <note>';
|
||||
}
|
||||
@@ -21,20 +18,19 @@ class Command extends BaseCommand {
|
||||
}
|
||||
|
||||
async action(args) {
|
||||
let watcher = null;
|
||||
let tempFilePath = null;
|
||||
|
||||
const onFinishedEditing = async () => {
|
||||
if (tempFilePath) fs.removeSync(tempFilePath);
|
||||
}
|
||||
};
|
||||
|
||||
const textEditorPath = () => {
|
||||
if (Setting.value('editor')) return Setting.value('editor');
|
||||
if (process.env.EDITOR) return process.env.EDITOR;
|
||||
throw new Error(_('No text editor is defined. Please set it using `config editor <editor-path>`'));
|
||||
}
|
||||
};
|
||||
|
||||
try {
|
||||
try {
|
||||
// -------------------------------------------------------------------------
|
||||
// Load note or create it if it doesn't exist
|
||||
// -------------------------------------------------------------------------
|
||||
@@ -58,14 +54,14 @@ class Command extends BaseCommand {
|
||||
// -------------------------------------------------------------------------
|
||||
|
||||
let editorPath = textEditorPath();
|
||||
let editorArgs = editorPath.split(' ');
|
||||
let editorArgs = splitCommandString(editorPath);
|
||||
|
||||
editorPath = editorArgs[0];
|
||||
editorArgs = editorArgs.splice(1);
|
||||
|
||||
const originalContent = await Note.serializeForEdit(note);
|
||||
|
||||
tempFilePath = Setting.value('tempDir') + '/' + uuid.create() + '.md';
|
||||
tempFilePath = `${Setting.value('tempDir')}/${uuid.create()}.md`;
|
||||
editorArgs.push(tempFilePath);
|
||||
|
||||
await fs.writeFile(tempFilePath, originalContent);
|
||||
@@ -80,7 +76,7 @@ class Command extends BaseCommand {
|
||||
await app().gui().forceRender();
|
||||
const termState = app().gui().termSaveState();
|
||||
|
||||
const spawnSync = require('child_process').spawnSync;
|
||||
const spawnSync = require('child_process').spawnSync;
|
||||
const result = spawnSync(editorPath, editorArgs, { stdio: 'inherit' });
|
||||
|
||||
if (result.error) this.stdout(_('Error opening note in editor: %s', result.error.message));
|
||||
@@ -107,13 +103,11 @@ class Command extends BaseCommand {
|
||||
});
|
||||
|
||||
await onFinishedEditing();
|
||||
|
||||
} catch(error) {
|
||||
} catch (error) {
|
||||
await onFinishedEditing();
|
||||
throw error;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
module.exports = Command;
|
||||
module.exports = Command;
|
||||
|
@@ -3,7 +3,6 @@ const { app } = require('./app.js');
|
||||
const { _ } = require('lib/locale.js');
|
||||
|
||||
class Command extends BaseCommand {
|
||||
|
||||
usage() {
|
||||
return 'exit';
|
||||
}
|
||||
@@ -16,10 +15,9 @@ class Command extends BaseCommand {
|
||||
return ['gui'];
|
||||
}
|
||||
|
||||
async action(args) {
|
||||
async action() {
|
||||
await app().exit();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
module.exports = Command;
|
||||
module.exports = Command;
|
||||
|
@@ -1,13 +1,10 @@
|
||||
const { BaseCommand } = require('./base-command.js');
|
||||
const { Database } = require('lib/database.js');
|
||||
const { app } = require('./app.js');
|
||||
const Setting = require('lib/models/Setting.js');
|
||||
const { _ } = require('lib/locale.js');
|
||||
const { ReportService } = require('lib/services/report.js');
|
||||
const fs = require('fs-extra');
|
||||
|
||||
class Command extends BaseCommand {
|
||||
|
||||
usage() {
|
||||
return 'export-sync-status';
|
||||
}
|
||||
@@ -20,17 +17,20 @@ class Command extends BaseCommand {
|
||||
return true;
|
||||
}
|
||||
|
||||
async action(args) {
|
||||
async action() {
|
||||
const service = new ReportService();
|
||||
const csv = await service.basicItemList({ format: 'csv' });
|
||||
const filePath = Setting.value('profileDir') + '/syncReport-' + (new Date()).getTime() + '.csv';
|
||||
const filePath = `${Setting.value('profileDir')}/syncReport-${new Date().getTime()}.csv`;
|
||||
await fs.writeFileSync(filePath, csv);
|
||||
this.stdout('Sync status exported to ' + filePath);
|
||||
this.stdout(`Sync status exported to ${filePath}`);
|
||||
|
||||
app().gui().showConsole();
|
||||
app().gui().maximizeConsole();
|
||||
app()
|
||||
.gui()
|
||||
.showConsole();
|
||||
app()
|
||||
.gui()
|
||||
.maximizeConsole();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
module.exports = Command;
|
||||
module.exports = Command;
|
||||
|
@@ -1,14 +1,10 @@
|
||||
const { BaseCommand } = require('./base-command.js');
|
||||
const InteropService = require('lib/services/InteropService.js');
|
||||
const BaseModel = require('lib/BaseModel.js');
|
||||
const Note = require('lib/models/Note.js');
|
||||
const { reg } = require('lib/registry.js');
|
||||
const { app } = require('./app.js');
|
||||
const { _ } = require('lib/locale.js');
|
||||
const fs = require('fs-extra');
|
||||
|
||||
class Command extends BaseCommand {
|
||||
|
||||
usage() {
|
||||
return 'export <path>';
|
||||
}
|
||||
@@ -19,17 +15,14 @@ class Command extends BaseCommand {
|
||||
|
||||
options() {
|
||||
const service = new InteropService();
|
||||
const formats = service.modules()
|
||||
const formats = service
|
||||
.modules()
|
||||
.filter(m => m.type === 'exporter')
|
||||
.map(m => m.format + (m.description ? ' (' + m.description + ')' : ''));
|
||||
.map(m => m.format + (m.description ? ` (${m.description})` : ''));
|
||||
|
||||
return [
|
||||
['--format <format>', _('Destination format: %s', formats.join(', '))],
|
||||
['--note <note>', _('Exports only the given note.')],
|
||||
['--notebook <notebook>', _('Exports only the given notebook.')],
|
||||
];
|
||||
return [['--format <format>', _('Destination format: %s', formats.join(', '))], ['--note <note>', _('Exports only the given note.')], ['--notebook <notebook>', _('Exports only the given notebook.')]];
|
||||
}
|
||||
|
||||
|
||||
async action(args) {
|
||||
let exportOptions = {};
|
||||
exportOptions.path = args.path;
|
||||
@@ -37,25 +30,20 @@ class Command extends BaseCommand {
|
||||
exportOptions.format = args.options.format ? args.options.format : 'jex';
|
||||
|
||||
if (args.options.note) {
|
||||
|
||||
const notes = await app().loadItems(BaseModel.TYPE_NOTE, args.options.note, { parent: app().currentFolder() });
|
||||
if (!notes.length) throw new Error(_('Cannot find "%s".', args.options.note));
|
||||
exportOptions.sourceNoteIds = notes.map((n) => n.id);
|
||||
|
||||
exportOptions.sourceNoteIds = notes.map(n => n.id);
|
||||
} else if (args.options.notebook) {
|
||||
|
||||
const folders = await app().loadItems(BaseModel.TYPE_FOLDER, args.options.notebook);
|
||||
if (!folders.length) throw new Error(_('Cannot find "%s".', args.options.notebook));
|
||||
exportOptions.sourceFolderIds = folders.map((n) => n.id);
|
||||
|
||||
exportOptions.sourceFolderIds = folders.map(n => n.id);
|
||||
}
|
||||
|
||||
const service = new InteropService();
|
||||
const result = await service.export(exportOptions);
|
||||
|
||||
result.warnings.map((w) => this.stdout(w));
|
||||
result.warnings.map(w => this.stdout(w));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
module.exports = Command;
|
||||
module.exports = Command;
|
||||
|
@@ -2,11 +2,9 @@ const { BaseCommand } = require('./base-command.js');
|
||||
const { app } = require('./app.js');
|
||||
const { _ } = require('lib/locale.js');
|
||||
const BaseModel = require('lib/BaseModel.js');
|
||||
const Folder = require('lib/models/Folder.js');
|
||||
const Note = require('lib/models/Note.js');
|
||||
|
||||
class Command extends BaseCommand {
|
||||
|
||||
usage() {
|
||||
return 'geoloc <note>';
|
||||
}
|
||||
@@ -23,9 +21,10 @@ class Command extends BaseCommand {
|
||||
const url = Note.geolocationUrl(item);
|
||||
this.stdout(url);
|
||||
|
||||
app().gui().showConsole();
|
||||
app()
|
||||
.gui()
|
||||
.showConsole();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
module.exports = Command;
|
||||
module.exports = Command;
|
||||
|
@@ -1,14 +1,10 @@
|
||||
const { BaseCommand } = require('./base-command.js');
|
||||
const { app } = require('./app.js');
|
||||
const { renderCommandHelp } = require('./help-utils.js');
|
||||
const { Database } = require('lib/database.js');
|
||||
const Setting = require('lib/models/Setting.js');
|
||||
const { wrap } = require('lib/string-utils.js');
|
||||
const { _ } = require('lib/locale.js');
|
||||
const { cliUtils } = require('./cli-utils.js');
|
||||
|
||||
class Command extends BaseCommand {
|
||||
|
||||
usage() {
|
||||
return 'help [command]';
|
||||
}
|
||||
@@ -28,7 +24,7 @@ class Command extends BaseCommand {
|
||||
output.push(command);
|
||||
}
|
||||
|
||||
output.sort((a, b) => a.name() < b.name() ? -1 : +1);
|
||||
output.sort((a, b) => (a.name() < b.name() ? -1 : +1));
|
||||
|
||||
return output;
|
||||
}
|
||||
@@ -40,31 +36,37 @@ class Command extends BaseCommand {
|
||||
this.stdout(_('For information on how to customise the shortcuts please visit %s', 'https://joplinapp.org/terminal/#shortcuts'));
|
||||
this.stdout('');
|
||||
|
||||
if (app().gui().isDummy()) {
|
||||
if (
|
||||
app()
|
||||
.gui()
|
||||
.isDummy()
|
||||
) {
|
||||
throw new Error(_('Shortcuts are not available in CLI mode.'));
|
||||
}
|
||||
|
||||
const keymap = app().gui().keymap();
|
||||
const keymap = app()
|
||||
.gui()
|
||||
.keymap();
|
||||
|
||||
let rows = [];
|
||||
|
||||
for (let i = 0; i < keymap.length; i++) {
|
||||
const item = keymap[i];
|
||||
const keys = item.keys.map((k) => k === ' ' ? '(SPACE)' : k);
|
||||
const keys = item.keys.map(k => (k === ' ' ? '(SPACE)' : k));
|
||||
rows.push([keys.join(', '), item.command]);
|
||||
}
|
||||
|
||||
cliUtils.printArray(this.stdout.bind(this), rows);
|
||||
} else if (args.command === 'all') {
|
||||
const commands = this.allCommands();
|
||||
const output = commands.map((c) => renderCommandHelp(c));
|
||||
const output = commands.map(c => renderCommandHelp(c));
|
||||
this.stdout(output.join('\n\n'));
|
||||
} else if (args.command) {
|
||||
const command = app().findCommandByName(args['command']);
|
||||
if (!command) throw new Error(_('Cannot find "%s".', args.command));
|
||||
this.stdout(renderCommandHelp(command, stdoutWidth));
|
||||
} else {
|
||||
const commandNames = this.allCommands().map((a) => a.name());
|
||||
const commandNames = this.allCommands().map(a => a.name());
|
||||
|
||||
this.stdout(_('Type `help [command]` for more information about a command; or type `help all` for the complete usage information.'));
|
||||
this.stdout('');
|
||||
@@ -82,10 +84,13 @@ class Command extends BaseCommand {
|
||||
this.stdout(_('For the list of keyboard shortcuts and config options, type `help keymap`'));
|
||||
}
|
||||
|
||||
app().gui().showConsole();
|
||||
app().gui().maximizeConsole();
|
||||
app()
|
||||
.gui()
|
||||
.showConsole();
|
||||
app()
|
||||
.gui()
|
||||
.maximizeConsole();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
module.exports = Command;
|
||||
module.exports = Command;
|
||||
|
@@ -1,17 +1,11 @@
|
||||
const { BaseCommand } = require('./base-command.js');
|
||||
const InteropService = require('lib/services/InteropService.js');
|
||||
const BaseModel = require('lib/BaseModel.js');
|
||||
const Note = require('lib/models/Note.js');
|
||||
const { filename, basename, fileExtension } = require('lib/path-utils.js');
|
||||
const { importEnex } = require('lib/import-enex');
|
||||
const { cliUtils } = require('./cli-utils.js');
|
||||
const { reg } = require('lib/registry.js');
|
||||
const { app } = require('./app.js');
|
||||
const { _ } = require('lib/locale.js');
|
||||
const fs = require('fs-extra');
|
||||
|
||||
class Command extends BaseCommand {
|
||||
|
||||
usage() {
|
||||
return 'import <path> [notebook]';
|
||||
}
|
||||
@@ -22,14 +16,14 @@ class Command extends BaseCommand {
|
||||
|
||||
options() {
|
||||
const service = new InteropService();
|
||||
const formats = service.modules().filter(m => m.type === 'importer').map(m => m.format);
|
||||
const formats = service
|
||||
.modules()
|
||||
.filter(m => m.type === 'importer')
|
||||
.map(m => m.format);
|
||||
|
||||
return [
|
||||
['--format <format>', _('Source format: %s', (['auto'].concat(formats)).join(', '))],
|
||||
['-f, --force', _('Do not ask for confirmation.')],
|
||||
];
|
||||
return [['--format <format>', _('Source format: %s', ['auto'].concat(formats).join(', '))], ['-f, --force', _('Do not ask for confirmation.')]];
|
||||
}
|
||||
|
||||
|
||||
async action(args) {
|
||||
let folder = await app().loadItem(BaseModel.TYPE_FOLDER, args.notebook);
|
||||
|
||||
@@ -44,7 +38,7 @@ class Command extends BaseCommand {
|
||||
|
||||
// onProgress/onError supported by Enex import only
|
||||
|
||||
importOptions.onProgress = (progressState) => {
|
||||
importOptions.onProgress = progressState => {
|
||||
let line = [];
|
||||
line.push(_('Found: %d.', progressState.loaded));
|
||||
line.push(_('Created: %d.', progressState.created));
|
||||
@@ -56,20 +50,21 @@ class Command extends BaseCommand {
|
||||
cliUtils.redraw(lastProgress);
|
||||
};
|
||||
|
||||
importOptions.onError = (error) => {
|
||||
importOptions.onError = error => {
|
||||
let s = error.trace ? error.trace : error.toString();
|
||||
this.stdout(s);
|
||||
};
|
||||
|
||||
app().gui().showConsole();
|
||||
app()
|
||||
.gui()
|
||||
.showConsole();
|
||||
this.stdout(_('Importing notes...'));
|
||||
const service = new InteropService();
|
||||
const result = await service.import(importOptions);
|
||||
result.warnings.map((w) => this.stdout(w));
|
||||
result.warnings.map(w => this.stdout(w));
|
||||
cliUtils.redrawDone();
|
||||
if (lastProgress) this.stdout(_('The notes have been imported: %s', lastProgress));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
module.exports = Command;
|
||||
module.exports = Command;
|
||||
|
@@ -10,7 +10,6 @@ const { time } = require('lib/time-utils.js');
|
||||
const { cliUtils } = require('./cli-utils.js');
|
||||
|
||||
class Command extends BaseCommand {
|
||||
|
||||
usage() {
|
||||
return 'ls [note-pattern]';
|
||||
}
|
||||
@@ -24,14 +23,7 @@ class Command extends BaseCommand {
|
||||
}
|
||||
|
||||
options() {
|
||||
return [
|
||||
['-n, --limit <num>', _('Displays only the first top <num> notes.')],
|
||||
['-s, --sort <field>', _('Sorts the item by <field> (eg. title, updated_time, created_time).')],
|
||||
['-r, --reverse', _('Reverses the sorting order.')],
|
||||
['-t, --type <type>', _('Displays only the items of the specific type(s). Can be `n` for notes, `t` for to-dos, or `nt` for notes and to-dos (eg. `-tt` would display only the to-dos, while `-ttd` would display notes and to-dos.')],
|
||||
['-f, --format <format>', _('Either "text" or "json"')],
|
||||
['-l, --long', _('Use long list format. Format is ID, NOTE_COUNT (for notebook), DATE, TODO_CHECKED (for to-dos), TITLE')],
|
||||
];
|
||||
return [['-n, --limit <num>', _('Displays only the first top <num> notes.')], ['-s, --sort <field>', _('Sorts the item by <field> (eg. title, updated_time, created_time).')], ['-r, --reverse', _('Reverses the sorting order.')], ['-t, --type <type>', _('Displays only the items of the specific type(s). Can be `n` for notes, `t` for to-dos, or `nt` for notes and to-dos (eg. `-tt` would display only the to-dos, while `-ttd` would display notes and to-dos.')], ['-f, --format <format>', _('Either "text" or "json"')], ['-l, --long', _('Use long list format. Format is ID, NOTE_COUNT (for notebook), DATE, TODO_CHECKED (for to-dos), TITLE')]];
|
||||
}
|
||||
|
||||
async action(args) {
|
||||
@@ -98,14 +90,14 @@ class Command extends BaseCommand {
|
||||
|
||||
let title = item.title;
|
||||
if (!shortIdShown && (seenTitles.indexOf(item.title) >= 0 || !item.title)) {
|
||||
title += ' (' + BaseModel.shortId(item.id) + ')';
|
||||
title += ` (${BaseModel.shortId(item.id)})`;
|
||||
} else {
|
||||
seenTitles.push(item.title);
|
||||
}
|
||||
|
||||
if (hasTodos) {
|
||||
if (item.is_todo) {
|
||||
row.push(sprintf('[%s]', !!item.todo_completed ? 'X' : ' '));
|
||||
row.push(sprintf('[%s]', item.todo_completed ? 'X' : ' '));
|
||||
} else {
|
||||
row.push(' ');
|
||||
}
|
||||
@@ -118,9 +110,7 @@ class Command extends BaseCommand {
|
||||
|
||||
cliUtils.printArray(this.stdout.bind(this), rows);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
module.exports = Command;
|
||||
|
@@ -2,10 +2,8 @@ const { BaseCommand } = require('./base-command.js');
|
||||
const { app } = require('./app.js');
|
||||
const { _ } = require('lib/locale.js');
|
||||
const Folder = require('lib/models/Folder.js');
|
||||
const { reg } = require('lib/registry.js');
|
||||
|
||||
class Command extends BaseCommand {
|
||||
|
||||
usage() {
|
||||
return 'mkbook <new-notebook>';
|
||||
}
|
||||
@@ -15,10 +13,9 @@ class Command extends BaseCommand {
|
||||
}
|
||||
|
||||
async action(args) {
|
||||
let folder = await Folder.save({ title: args['new-notebook'] }, { userSideValidation: true });
|
||||
let folder = await Folder.save({ title: args['new-notebook'] }, { userSideValidation: true });
|
||||
app().switchCurrentFolder(folder);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
module.exports = Command;
|
||||
module.exports = Command;
|
||||
|
@@ -4,7 +4,6 @@ const { _ } = require('lib/locale.js');
|
||||
const Note = require('lib/models/Note.js');
|
||||
|
||||
class Command extends BaseCommand {
|
||||
|
||||
usage() {
|
||||
return 'mknote <new-note>';
|
||||
}
|
||||
@@ -26,7 +25,6 @@ class Command extends BaseCommand {
|
||||
|
||||
app().switchCurrentFolder(app().currentFolder());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
module.exports = Command;
|
||||
module.exports = Command;
|
||||
|
@@ -4,7 +4,6 @@ const { _ } = require('lib/locale.js');
|
||||
const Note = require('lib/models/Note.js');
|
||||
|
||||
class Command extends BaseCommand {
|
||||
|
||||
usage() {
|
||||
return 'mktodo <new-todo>';
|
||||
}
|
||||
@@ -27,7 +26,6 @@ class Command extends BaseCommand {
|
||||
|
||||
app().switchCurrentFolder(app().currentFolder());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
module.exports = Command;
|
||||
module.exports = Command;
|
||||
|
@@ -6,7 +6,6 @@ const Folder = require('lib/models/Folder.js');
|
||||
const Note = require('lib/models/Note.js');
|
||||
|
||||
class Command extends BaseCommand {
|
||||
|
||||
usage() {
|
||||
return 'mv <note> [notebook]';
|
||||
}
|
||||
@@ -18,7 +17,7 @@ class Command extends BaseCommand {
|
||||
async action(args) {
|
||||
const pattern = args['note'];
|
||||
const destination = args['notebook'];
|
||||
|
||||
|
||||
const folder = await Folder.loadByField('title', destination);
|
||||
if (!folder) throw new Error(_('Cannot find "%s".', destination));
|
||||
|
||||
@@ -29,7 +28,6 @@ class Command extends BaseCommand {
|
||||
await Note.moveToFolder(notes[i].id, folder.id);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
module.exports = Command;
|
||||
module.exports = Command;
|
||||
|
@@ -6,7 +6,6 @@ const Folder = require('lib/models/Folder.js');
|
||||
const Note = require('lib/models/Note.js');
|
||||
|
||||
class Command extends BaseCommand {
|
||||
|
||||
usage() {
|
||||
return 'ren <item> <name>';
|
||||
}
|
||||
@@ -35,7 +34,6 @@ class Command extends BaseCommand {
|
||||
await Note.save(newItem);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
module.exports = Command;
|
||||
module.exports = Command;
|
||||
|
@@ -1,14 +1,10 @@
|
||||
const { BaseCommand } = require('./base-command.js');
|
||||
const { app } = require('./app.js');
|
||||
const { _ } = require('lib/locale.js');
|
||||
const BaseItem = require('lib/models/BaseItem.js');
|
||||
const Folder = require('lib/models/Folder.js');
|
||||
const Note = require('lib/models/Note.js');
|
||||
const BaseModel = require('lib/BaseModel.js');
|
||||
const { cliUtils } = require('./cli-utils.js');
|
||||
|
||||
class Command extends BaseCommand {
|
||||
|
||||
usage() {
|
||||
return 'rmbook <notebook>';
|
||||
}
|
||||
@@ -18,9 +14,7 @@ class Command extends BaseCommand {
|
||||
}
|
||||
|
||||
options() {
|
||||
return [
|
||||
['-f, --force', _('Deletes the notebook without asking for confirmation.')],
|
||||
];
|
||||
return [['-f, --force', _('Deletes the notebook without asking for confirmation.')]];
|
||||
}
|
||||
|
||||
async action(args) {
|
||||
@@ -34,7 +28,6 @@ class Command extends BaseCommand {
|
||||
|
||||
await Folder.delete(folder.id);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
module.exports = Command;
|
||||
module.exports = Command;
|
||||
|
@@ -1,14 +1,10 @@
|
||||
const { BaseCommand } = require('./base-command.js');
|
||||
const { app } = require('./app.js');
|
||||
const { _ } = require('lib/locale.js');
|
||||
const BaseItem = require('lib/models/BaseItem.js');
|
||||
const Folder = require('lib/models/Folder.js');
|
||||
const Note = require('lib/models/Note.js');
|
||||
const BaseModel = require('lib/BaseModel.js');
|
||||
const { cliUtils } = require('./cli-utils.js');
|
||||
|
||||
class Command extends BaseCommand {
|
||||
|
||||
usage() {
|
||||
return 'rmnote <note-pattern>';
|
||||
}
|
||||
@@ -18,9 +14,7 @@ class Command extends BaseCommand {
|
||||
}
|
||||
|
||||
options() {
|
||||
return [
|
||||
['-f, --force', _('Deletes the notes without asking for confirmation.')],
|
||||
];
|
||||
return [['-f, --force', _('Deletes the notes without asking for confirmation.')]];
|
||||
}
|
||||
|
||||
async action(args) {
|
||||
@@ -32,10 +26,9 @@ class Command extends BaseCommand {
|
||||
|
||||
const ok = force ? true : await this.prompt(notes.length > 1 ? _('%d notes match this pattern. Delete them?', notes.length) : _('Delete note?'), { booleanAnswerDefault: 'n' });
|
||||
if (!ok) return;
|
||||
let ids = notes.map((n) => n.id);
|
||||
let ids = notes.map(n => n.id);
|
||||
await Note.batchDelete(ids);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
module.exports = Command;
|
||||
module.exports = Command;
|
||||
|
@@ -1,15 +1,10 @@
|
||||
const { BaseCommand } = require('./base-command.js');
|
||||
const { app } = require('./app.js');
|
||||
const { _ } = require('lib/locale.js');
|
||||
const BaseModel = require('lib/BaseModel.js');
|
||||
const Folder = require('lib/models/Folder.js');
|
||||
const Note = require('lib/models/Note.js');
|
||||
const { sprintf } = require('sprintf-js');
|
||||
const { time } = require('lib/time-utils.js');
|
||||
const { uuid } = require('lib/uuid.js');
|
||||
|
||||
class Command extends BaseCommand {
|
||||
|
||||
usage() {
|
||||
return 'search <pattern> [notebook]';
|
||||
}
|
||||
@@ -50,7 +45,6 @@ class Command extends BaseCommand {
|
||||
id: searchId,
|
||||
});
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
module.exports = Command;
|
||||
module.exports = Command;
|
||||
|
57
CliClient/app/command-server.js
Normal file
57
CliClient/app/command-server.js
Normal file
@@ -0,0 +1,57 @@
|
||||
const { BaseCommand } = require('./base-command.js');
|
||||
const { _ } = require('lib/locale.js');
|
||||
const Setting = require('lib/models/Setting.js');
|
||||
const { Logger } = require('lib/logger.js');
|
||||
const { shim } = require('lib/shim');
|
||||
|
||||
class Command extends BaseCommand {
|
||||
|
||||
usage() {
|
||||
return 'server <command>';
|
||||
}
|
||||
|
||||
description() {
|
||||
return `${_('Start, stop or check the API server. To specify on which port it should run, set the api.port config variable. Commands are (%s).', ['start', 'stop', 'status'].join('|'))} This is an experimental feature - use at your own risks! It is recommended that the server runs off its own separate profile so that no two CLI instances access that profile at the same time. Use --profile to specify the profile path.`;
|
||||
}
|
||||
|
||||
async action(args) {
|
||||
const command = args.command;
|
||||
|
||||
const ClipperServer = require('lib/ClipperServer');
|
||||
const stdoutFn = (s) => this.stdout(s);
|
||||
const clipperLogger = new Logger();
|
||||
clipperLogger.addTarget('file', { path: `${Setting.value('profileDir')}/log-clipper.txt` });
|
||||
clipperLogger.addTarget('console', { console: {
|
||||
info: stdoutFn,
|
||||
warn: stdoutFn,
|
||||
error: stdoutFn,
|
||||
}});
|
||||
ClipperServer.instance().setDispatch(() => {});
|
||||
ClipperServer.instance().setLogger(clipperLogger);
|
||||
|
||||
const pidPath = `${Setting.value('profileDir')}/clipper-pid.txt`;
|
||||
const runningOnPort = await ClipperServer.instance().isRunning();
|
||||
|
||||
if (command === 'start') {
|
||||
if (runningOnPort) {
|
||||
this.stdout(_('Server is already running on port %d', runningOnPort));
|
||||
} else {
|
||||
await shim.fsDriver().writeFile(pidPath, process.pid.toString(), 'utf-8');
|
||||
await ClipperServer.instance().start(); // Never exit
|
||||
}
|
||||
} else if (command === 'status') {
|
||||
this.stdout(runningOnPort ? _('Server is running on port %d', runningOnPort) : _('Server is not running.'));
|
||||
} else if (command === 'stop') {
|
||||
if (!runningOnPort) {
|
||||
this.stdout(_('Server is not running.'));
|
||||
return;
|
||||
}
|
||||
const pid = await shim.fsDriver().readFile(pidPath);
|
||||
if (!pid) return;
|
||||
process.kill(pid, 'SIGTERM');
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
module.exports = Command;
|
@@ -3,12 +3,9 @@ const { app } = require('./app.js');
|
||||
const { _ } = require('lib/locale.js');
|
||||
const BaseModel = require('lib/BaseModel.js');
|
||||
const { Database } = require('lib/database.js');
|
||||
const Folder = require('lib/models/Folder.js');
|
||||
const Note = require('lib/models/Note.js');
|
||||
const BaseItem = require('lib/models/BaseItem.js');
|
||||
|
||||
class Command extends BaseCommand {
|
||||
|
||||
usage() {
|
||||
return 'set <note> <name> [value]';
|
||||
}
|
||||
@@ -19,7 +16,7 @@ class Command extends BaseCommand {
|
||||
for (let i = 0; i < fields.length; i++) {
|
||||
const f = fields[i];
|
||||
if (f.name === 'id') continue;
|
||||
s.push(f.name + ' (' + Database.enumName('fieldType', f.type) + ')');
|
||||
s.push(`${f.name} (${Database.enumName('fieldType', f.type)})`);
|
||||
}
|
||||
|
||||
return _('Sets the property <name> of the given <note> to the given [value]. Possible properties are:\n\n%s', s.join(', '));
|
||||
@@ -42,10 +39,16 @@ class Command extends BaseCommand {
|
||||
type_: notes[i].type_,
|
||||
};
|
||||
newNote[propName] = propValue;
|
||||
await Note.save(newNote);
|
||||
|
||||
const timestamp = Date.now();
|
||||
|
||||
await Note.save(newNote, {
|
||||
autoTimestamp: false, // No auto-timestamp because user may have provided them
|
||||
updated_time: timestamp,
|
||||
created_time: timestamp,
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
module.exports = Command;
|
||||
module.exports = Command;
|
||||
|
@@ -1,12 +1,10 @@
|
||||
const { BaseCommand } = require('./base-command.js');
|
||||
const { Database } = require('lib/database.js');
|
||||
const { app } = require('./app.js');
|
||||
const Setting = require('lib/models/Setting.js');
|
||||
const { _ } = require('lib/locale.js');
|
||||
const { ReportService } = require('lib/services/report.js');
|
||||
|
||||
class Command extends BaseCommand {
|
||||
|
||||
usage() {
|
||||
return 'status';
|
||||
}
|
||||
@@ -15,7 +13,7 @@ class Command extends BaseCommand {
|
||||
return _('Displays summary about the notes and notebooks.');
|
||||
}
|
||||
|
||||
async action(args) {
|
||||
async action() {
|
||||
let service = new ReportService();
|
||||
let report = await service.status(Setting.value('sync.target'));
|
||||
|
||||
@@ -24,7 +22,7 @@ class Command extends BaseCommand {
|
||||
|
||||
if (i > 0) this.stdout('');
|
||||
|
||||
this.stdout('# ' + section.title);
|
||||
this.stdout(`# ${section.title}`);
|
||||
this.stdout('');
|
||||
|
||||
for (let n in section.body) {
|
||||
@@ -34,10 +32,13 @@ class Command extends BaseCommand {
|
||||
}
|
||||
}
|
||||
|
||||
app().gui().showConsole();
|
||||
app().gui().maximizeConsole();
|
||||
app()
|
||||
.gui()
|
||||
.showConsole();
|
||||
app()
|
||||
.gui()
|
||||
.maximizeConsole();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
module.exports = Command;
|
||||
module.exports = Command;
|
||||
|
@@ -3,7 +3,6 @@ const { app } = require('./app.js');
|
||||
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');
|
||||
@@ -14,7 +13,6 @@ const fs = require('fs-extra');
|
||||
const SyncTargetRegistry = require('lib/SyncTargetRegistry');
|
||||
|
||||
class Command extends BaseCommand {
|
||||
|
||||
constructor() {
|
||||
super();
|
||||
this.syncTargetId_ = null;
|
||||
@@ -31,9 +29,7 @@ class Command extends BaseCommand {
|
||||
}
|
||||
|
||||
options() {
|
||||
return [
|
||||
['--target <target>', _('Sync to provided target (defaults to sync.target config value)')],
|
||||
];
|
||||
return [['--target <target>', _('Sync to provided target (defaults to sync.target config value)')]];
|
||||
}
|
||||
|
||||
static lockFile(filePath) {
|
||||
@@ -66,21 +62,25 @@ class Command extends BaseCommand {
|
||||
const syncTarget = reg.syncTarget(this.syncTargetId_);
|
||||
const syncTargetMd = SyncTargetRegistry.idToMetadata(this.syncTargetId_);
|
||||
|
||||
if (this.syncTargetId_ === 3 || this.syncTargetId_ === 4) { // OneDrive
|
||||
if (this.syncTargetId_ === 3 || this.syncTargetId_ === 4) {
|
||||
// OneDrive
|
||||
this.oneDriveApiUtils_ = new OneDriveApiNodeUtils(syncTarget.api());
|
||||
const auth = await this.oneDriveApiUtils_.oauthDance({
|
||||
log: (...s) => { return this.stdout(...s); }
|
||||
log: (...s) => {
|
||||
return this.stdout(...s);
|
||||
},
|
||||
});
|
||||
this.oneDriveApiUtils_ = null;
|
||||
|
||||
Setting.setValue('sync.' + this.syncTargetId_ + '.auth', auth ? JSON.stringify(auth) : null);
|
||||
|
||||
Setting.setValue(`sync.${this.syncTargetId_}.auth`, auth ? JSON.stringify(auth) : null);
|
||||
if (!auth) {
|
||||
this.stdout(_('Authentication was not completed (did not receive an authentication token).'));
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
} else if (syncTargetMd.name === 'dropbox') { // Dropbox
|
||||
} else if (syncTargetMd.name === 'dropbox') {
|
||||
// Dropbox
|
||||
const api = await syncTarget.api();
|
||||
const loginUrl = api.loginUrl();
|
||||
this.stdout(_('To allow Joplin to synchronise with Dropbox, please follow the steps below:'));
|
||||
@@ -93,7 +93,7 @@ class Command extends BaseCommand {
|
||||
}
|
||||
|
||||
const response = await api.execAuthToken(authCode);
|
||||
Setting.setValue('sync.' + this.syncTargetId_ + '.auth', response.access_token);
|
||||
Setting.setValue(`sync.${this.syncTargetId_}.auth`, response.access_token);
|
||||
api.setAuthToken(response.access_token);
|
||||
return true;
|
||||
}
|
||||
@@ -117,8 +117,8 @@ class Command extends BaseCommand {
|
||||
this.releaseLockFn_ = null;
|
||||
|
||||
// Lock is unique per profile/database
|
||||
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');
|
||||
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');
|
||||
|
||||
try {
|
||||
if (await Command.isLocked(lockFilePath)) throw new Error(_('Synchronisation is already in progress.'));
|
||||
@@ -147,22 +147,26 @@ class Command extends BaseCommand {
|
||||
|
||||
const syncTarget = reg.syncTarget(this.syncTargetId_);
|
||||
|
||||
if (!await syncTarget.isAuthenticated()) {
|
||||
app().gui().showConsole();
|
||||
app().gui().maximizeConsole();
|
||||
if (!(await syncTarget.isAuthenticated())) {
|
||||
app()
|
||||
.gui()
|
||||
.showConsole();
|
||||
app()
|
||||
.gui()
|
||||
.maximizeConsole();
|
||||
|
||||
const authDone = await this.doAuth();
|
||||
if (!authDone) return cleanUp();
|
||||
}
|
||||
|
||||
|
||||
const sync = await syncTarget.synchronizer();
|
||||
|
||||
let options = {
|
||||
onProgress: (report) => {
|
||||
onProgress: report => {
|
||||
let lines = Synchronizer.reportToLines(report);
|
||||
if (lines.length) cliUtils.redraw(lines.join(' '));
|
||||
},
|
||||
onMessage: (msg) => {
|
||||
onMessage: msg => {
|
||||
cliUtils.redrawDone();
|
||||
this.stdout(msg);
|
||||
},
|
||||
@@ -174,7 +178,7 @@ class Command extends BaseCommand {
|
||||
|
||||
this.stdout(_('Starting synchronisation...'));
|
||||
|
||||
const contextKey = 'sync.' + this.syncTargetId_ + '.context';
|
||||
const contextKey = `sync.${this.syncTargetId_}.context`;
|
||||
let context = Setting.value(contextKey);
|
||||
|
||||
context = context ? JSON.parse(context) : {};
|
||||
@@ -193,7 +197,7 @@ 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.
|
||||
// explicitly downloaded below.
|
||||
if (!app().hasGui()) {
|
||||
this.stdout(_('Downloading resources...'));
|
||||
await ResourceFetcher.instance().fetchAll();
|
||||
@@ -237,7 +241,6 @@ class Command extends BaseCommand {
|
||||
cancellable() {
|
||||
return true;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
module.exports = Command;
|
||||
module.exports = Command;
|
||||
|
@@ -6,19 +6,16 @@ const BaseModel = require('lib/BaseModel.js');
|
||||
const { time } = require('lib/time-utils.js');
|
||||
|
||||
class Command extends BaseCommand {
|
||||
|
||||
usage() {
|
||||
return 'tag <tag-command> [tag] [note]';
|
||||
}
|
||||
|
||||
description() {
|
||||
return _('<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).');
|
||||
return _('<tag-command> can be "add", "remove", "list", or "notetags" to assign or remove [tag] from [note], to list notes associated with [tag], or to list tags associated with [note]. The command `tag list` can be used to list all the tags (use -l for long option).');
|
||||
}
|
||||
|
||||
options() {
|
||||
return [
|
||||
['-l, --long', _('Use long list format. Format is ID, NOTE_COUNT (for notebook), DATE, TODO_CHECKED (for to-dos), TITLE')],
|
||||
];
|
||||
return [['-l, --long', _('Use long list format. Format is ID, NOTE_COUNT (for notebook), DATE, TODO_CHECKED (for to-dos), TITLE')]];
|
||||
}
|
||||
|
||||
async action(args) {
|
||||
@@ -50,7 +47,7 @@ class Command extends BaseCommand {
|
||||
} else if (command == 'list') {
|
||||
if (tag) {
|
||||
let notes = await Tag.notes(tag.id);
|
||||
notes.map((note) => {
|
||||
notes.map(note => {
|
||||
let line = '';
|
||||
if (options.long) {
|
||||
line += BaseModel.shortId(note.id);
|
||||
@@ -61,7 +58,7 @@ class Command extends BaseCommand {
|
||||
if (note.is_todo) {
|
||||
line += '[';
|
||||
if (note.todo_completed) {
|
||||
line += 'X';
|
||||
line += 'X';
|
||||
} else {
|
||||
line += ' ';
|
||||
}
|
||||
@@ -74,13 +71,25 @@ class Command extends BaseCommand {
|
||||
});
|
||||
} else {
|
||||
let tags = await Tag.all();
|
||||
tags.map((tag) => { this.stdout(tag.title); });
|
||||
tags.map(tag => {
|
||||
this.stdout(tag.title);
|
||||
});
|
||||
}
|
||||
} else if (command == 'notetags') {
|
||||
if (args.tag) {
|
||||
const note = await app().loadItem(BaseModel.TYPE_NOTE, args.tag);
|
||||
if (!note) throw new Error(_('Cannot find "%s".', args.tag));
|
||||
const tags = await Tag.tagsByNoteId(note.id);
|
||||
tags.map(tag => {
|
||||
this.stdout(tag.title);
|
||||
});
|
||||
} else {
|
||||
throw new Error(_('Cannot find "%s".', ''));
|
||||
}
|
||||
} else {
|
||||
throw new Error(_('Invalid command: "%s"', command));
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
module.exports = Command;
|
||||
module.exports = Command;
|
||||
|
@@ -2,12 +2,10 @@ const { BaseCommand } = require('./base-command.js');
|
||||
const { app } = require('./app.js');
|
||||
const { _ } = require('lib/locale.js');
|
||||
const BaseModel = require('lib/BaseModel.js');
|
||||
const Folder = require('lib/models/Folder.js');
|
||||
const Note = require('lib/models/Note.js');
|
||||
const { time } = require('lib/time-utils.js');
|
||||
|
||||
class Command extends BaseCommand {
|
||||
|
||||
usage() {
|
||||
return 'todo <todo-command> <note-pattern>';
|
||||
}
|
||||
@@ -39,12 +37,11 @@ class Command extends BaseCommand {
|
||||
}
|
||||
} else if (action == 'clear') {
|
||||
toSave.is_todo = 0;
|
||||
}
|
||||
}
|
||||
|
||||
await Note.save(toSave);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
module.exports = Command;
|
||||
module.exports = Command;
|
||||
|
@@ -1,15 +1,9 @@
|
||||
const { BaseCommand } = require('./base-command.js');
|
||||
const { app } = require('./app.js');
|
||||
const { _ } = require('lib/locale.js');
|
||||
const BaseModel = require('lib/BaseModel.js');
|
||||
const Folder = require('lib/models/Folder.js');
|
||||
const Note = require('lib/models/Note.js');
|
||||
const { time } = require('lib/time-utils.js');
|
||||
|
||||
const CommandDone = require('./command-done.js');
|
||||
|
||||
class Command extends BaseCommand {
|
||||
|
||||
usage() {
|
||||
return 'undone <note>';
|
||||
}
|
||||
@@ -21,7 +15,6 @@ class Command extends BaseCommand {
|
||||
async action(args) {
|
||||
await CommandDone.handleAction(this, args, false);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
module.exports = Command;
|
||||
module.exports = Command;
|
||||
|
@@ -2,10 +2,8 @@ const { BaseCommand } = require('./base-command.js');
|
||||
const { app } = require('./app.js');
|
||||
const { _ } = require('lib/locale.js');
|
||||
const BaseModel = require('lib/BaseModel.js');
|
||||
const Folder = require('lib/models/Folder.js');
|
||||
|
||||
class Command extends BaseCommand {
|
||||
|
||||
usage() {
|
||||
return 'use <notebook>';
|
||||
}
|
||||
@@ -14,10 +12,6 @@ class Command extends BaseCommand {
|
||||
return _('Switches to [notebook] - all further operations will happen within this notebook.');
|
||||
}
|
||||
|
||||
autocomplete() {
|
||||
return { data: autocompleteFolders };
|
||||
}
|
||||
|
||||
compatibleUis() {
|
||||
return ['cli'];
|
||||
}
|
||||
@@ -27,7 +21,6 @@ class Command extends BaseCommand {
|
||||
if (!folder) throw new Error(_('Cannot find "%s".', args['notebook']));
|
||||
app().switchCurrentFolder(folder);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
module.exports = Command;
|
||||
module.exports = Command;
|
||||
|
@@ -3,7 +3,6 @@ const Setting = require('lib/models/Setting.js');
|
||||
const { _ } = require('lib/locale.js');
|
||||
|
||||
class Command extends BaseCommand {
|
||||
|
||||
usage() {
|
||||
return 'version';
|
||||
}
|
||||
@@ -12,11 +11,10 @@ class Command extends BaseCommand {
|
||||
return _('Displays version information');
|
||||
}
|
||||
|
||||
async action(args) {
|
||||
async action() {
|
||||
const p = require('./package.json');
|
||||
this.stdout(_('%s %s (%s)', p.name, p.version, Setting.value('env')));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
module.exports = Command;
|
||||
module.exports = Command;
|
||||
|
File diff suppressed because one or more lines are too long
@@ -1,7 +1,6 @@
|
||||
const TextWidget = require('tkwidgets/TextWidget.js');
|
||||
|
||||
class ConsoleWidget extends TextWidget {
|
||||
|
||||
constructor() {
|
||||
super();
|
||||
this.lines_ = [];
|
||||
@@ -16,7 +15,7 @@ class ConsoleWidget extends TextWidget {
|
||||
}
|
||||
|
||||
get lastLine() {
|
||||
return this.lines_.length ? this.lines_[this.lines_.length-1] : '';
|
||||
return this.lines_.length ? this.lines_[this.lines_.length - 1] : '';
|
||||
}
|
||||
|
||||
addLine(line) {
|
||||
@@ -40,13 +39,12 @@ class ConsoleWidget extends TextWidget {
|
||||
if (this.lines_.length > this.maxLines_) {
|
||||
this.lines_.splice(0, this.lines_.length - this.maxLines_);
|
||||
}
|
||||
this.text = this.lines_.join("\n");
|
||||
this.text = this.lines_.join('\n');
|
||||
this.updateText_ = false;
|
||||
}
|
||||
|
||||
super.render();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
module.exports = ConsoleWidget;
|
||||
module.exports = ConsoleWidget;
|
||||
|
@@ -5,7 +5,6 @@ const ListWidget = require('tkwidgets/ListWidget.js');
|
||||
const _ = require('lib/locale.js')._;
|
||||
|
||||
class FolderListWidget extends ListWidget {
|
||||
|
||||
constructor() {
|
||||
super();
|
||||
|
||||
@@ -20,19 +19,19 @@ class FolderListWidget extends ListWidget {
|
||||
this.updateItems_ = false;
|
||||
this.trimItemTitle = false;
|
||||
|
||||
this.itemRenderer = (item) => {
|
||||
this.itemRenderer = item => {
|
||||
let output = [];
|
||||
if (item === '-') {
|
||||
output.push('-'.repeat(this.innerWidth));
|
||||
} else if (item.type_ === Folder.modelType()) {
|
||||
output.push(' '.repeat(this.folderDepth(this.folders, item.id)) + Folder.displayTitle(item));
|
||||
} else if (item.type_ === Tag.modelType()) {
|
||||
output.push('[' + Folder.displayTitle(item) + ']');
|
||||
output.push(`[${Folder.displayTitle(item)}]`);
|
||||
} else if (item.type_ === BaseModel.TYPE_SEARCH) {
|
||||
output.push(_('Search:'));
|
||||
output.push(item.title);
|
||||
}
|
||||
|
||||
|
||||
return output.join(' ');
|
||||
};
|
||||
}
|
||||
@@ -45,7 +44,6 @@ class FolderListWidget extends ListWidget {
|
||||
output++;
|
||||
folderId = folder.parent_id;
|
||||
}
|
||||
throw new Error('unreachable');
|
||||
}
|
||||
|
||||
get selectedFolderId() {
|
||||
@@ -54,7 +52,7 @@ class FolderListWidget extends ListWidget {
|
||||
|
||||
set selectedFolderId(v) {
|
||||
this.selectedFolderId_ = v;
|
||||
this.updateIndexFromSelectedItemId()
|
||||
this.updateIndexFromSelectedItemId();
|
||||
this.invalidate();
|
||||
}
|
||||
|
||||
@@ -64,7 +62,7 @@ class FolderListWidget extends ListWidget {
|
||||
|
||||
set selectedSearchId(v) {
|
||||
this.selectedSearchId_ = v;
|
||||
this.updateIndexFromSelectedItemId()
|
||||
this.updateIndexFromSelectedItemId();
|
||||
this.invalidate();
|
||||
}
|
||||
|
||||
@@ -74,7 +72,7 @@ class FolderListWidget extends ListWidget {
|
||||
|
||||
set selectedTagId(v) {
|
||||
this.selectedTagId_ = v;
|
||||
this.updateIndexFromSelectedItemId()
|
||||
this.updateIndexFromSelectedItemId();
|
||||
this.invalidate();
|
||||
}
|
||||
|
||||
@@ -84,7 +82,7 @@ class FolderListWidget extends ListWidget {
|
||||
|
||||
set notesParentType(v) {
|
||||
this.notesParentType_ = v;
|
||||
this.updateIndexFromSelectedItemId()
|
||||
this.updateIndexFromSelectedItemId();
|
||||
this.invalidate();
|
||||
}
|
||||
|
||||
@@ -95,7 +93,7 @@ class FolderListWidget extends ListWidget {
|
||||
set searches(v) {
|
||||
this.searches_ = v;
|
||||
this.updateItems_ = true;
|
||||
this.updateIndexFromSelectedItemId()
|
||||
this.updateIndexFromSelectedItemId();
|
||||
this.invalidate();
|
||||
}
|
||||
|
||||
@@ -106,7 +104,7 @@ class FolderListWidget extends ListWidget {
|
||||
set tags(v) {
|
||||
this.tags_ = v;
|
||||
this.updateItems_ = true;
|
||||
this.updateIndexFromSelectedItemId()
|
||||
this.updateIndexFromSelectedItemId();
|
||||
this.invalidate();
|
||||
}
|
||||
|
||||
@@ -117,7 +115,7 @@ class FolderListWidget extends ListWidget {
|
||||
set folders(v) {
|
||||
this.folders_ = v;
|
||||
this.updateItems_ = true;
|
||||
this.updateIndexFromSelectedItemId()
|
||||
this.updateIndexFromSelectedItemId();
|
||||
this.invalidate();
|
||||
}
|
||||
|
||||
@@ -128,7 +126,7 @@ class FolderListWidget extends ListWidget {
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
render() {
|
||||
if (this.updateItems_) {
|
||||
this.logger().debug('Rebuilding items...', this.notesParentType, this.selectedJoplinItemId, this.selectedSearchId);
|
||||
@@ -136,7 +134,7 @@ class FolderListWidget extends ListWidget {
|
||||
const previousParentType = this.notesParentType;
|
||||
|
||||
let newItems = [];
|
||||
const orderFolders = (parentId) => {
|
||||
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 : '';
|
||||
@@ -145,7 +143,7 @@ class FolderListWidget extends ListWidget {
|
||||
if (this.folderHasChildren_(this.folders, f.id)) orderFolders(f.id);
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
orderFolders('');
|
||||
|
||||
@@ -162,7 +160,7 @@ class FolderListWidget extends ListWidget {
|
||||
this.items = newItems;
|
||||
|
||||
this.notesParentType = previousParentType;
|
||||
this.updateIndexFromSelectedItemId(wasSelectedItemId)
|
||||
this.updateIndexFromSelectedItemId(wasSelectedItemId);
|
||||
this.updateItems_ = false;
|
||||
}
|
||||
|
||||
@@ -174,7 +172,7 @@ class FolderListWidget extends ListWidget {
|
||||
if (this.notesParentType === 'Folder') return this.selectedFolderId;
|
||||
if (this.notesParentType === 'Tag') return this.selectedTagId;
|
||||
if (this.notesParentType === 'Search') return this.selectedSearchId;
|
||||
throw new Error('Unknown parent type: ' + this.notesParentType);
|
||||
throw new Error(`Unknown parent type: ${this.notesParentType}`);
|
||||
}
|
||||
|
||||
get selectedJoplinItem() {
|
||||
@@ -188,7 +186,6 @@ class FolderListWidget extends ListWidget {
|
||||
const index = this.itemIndexByKey('id', itemId);
|
||||
this.currentIndex = index >= 0 ? index : 0;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
module.exports = FolderListWidget;
|
||||
module.exports = FolderListWidget;
|
||||
|
@@ -2,17 +2,16 @@ const Note = require('lib/models/Note.js');
|
||||
const ListWidget = require('tkwidgets/ListWidget.js');
|
||||
|
||||
class NoteListWidget extends ListWidget {
|
||||
|
||||
constructor() {
|
||||
super();
|
||||
this.selectedNoteId_ = 0;
|
||||
|
||||
this.updateIndexFromSelectedNoteId_ = false;
|
||||
|
||||
this.itemRenderer = (note) => {
|
||||
this.itemRenderer = note => {
|
||||
let label = Note.displayTitle(note); // + ' ' + note.id;
|
||||
if (note.is_todo) {
|
||||
label = '[' + (note.todo_completed ? 'X' : ' ') + '] ' + label;
|
||||
label = `[${note.todo_completed ? 'X' : ' '}] ${label}`;
|
||||
}
|
||||
return label;
|
||||
};
|
||||
@@ -32,7 +31,6 @@ class NoteListWidget extends ListWidget {
|
||||
|
||||
super.render();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
module.exports = NoteListWidget;
|
||||
module.exports = NoteListWidget;
|
||||
|
@@ -2,7 +2,6 @@ const Note = require('lib/models/Note.js');
|
||||
const TextWidget = require('tkwidgets/TextWidget.js');
|
||||
|
||||
class NoteMetadataWidget extends TextWidget {
|
||||
|
||||
constructor() {
|
||||
super();
|
||||
this.noteId_ = 0;
|
||||
@@ -30,7 +29,6 @@ class NoteMetadataWidget extends TextWidget {
|
||||
this.text = this.note_ ? await Note.minimalSerializeForDisplay(this.note_) : '';
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
module.exports = NoteMetadataWidget;
|
||||
module.exports = NoteMetadataWidget;
|
||||
|
@@ -3,7 +3,6 @@ const TextWidget = require('tkwidgets/TextWidget.js');
|
||||
const { _ } = require('lib/locale.js');
|
||||
|
||||
class NoteWidget extends TextWidget {
|
||||
|
||||
constructor() {
|
||||
super();
|
||||
this.noteId_ = 0;
|
||||
@@ -44,11 +43,11 @@ class NoteWidget extends TextWidget {
|
||||
} else if (this.noteId_) {
|
||||
this.doAsync('loadNote', async () => {
|
||||
this.note_ = await Note.load(this.noteId_);
|
||||
|
||||
|
||||
if (this.note_ && this.note_.encryption_applied) {
|
||||
this.text = _('One or more items are currently encrypted and you may need to supply a master password. To do so please type `e2ee decrypt`. If you have already supplied the password, the encrypted items are being decrypted in the background and will be available soon.');
|
||||
} else {
|
||||
this.text = this.note_ ? this.note_.title + "\n\n" + this.note_.body : '';
|
||||
this.text = this.note_ ? `${this.note_.title}\n\n${this.note_.body}` : '';
|
||||
}
|
||||
|
||||
if (this.lastLoadedNoteId_ !== this.noteId_) this.scrollTop = 0;
|
||||
@@ -59,7 +58,6 @@ class NoteWidget extends TextWidget {
|
||||
this.scrollTop = 0;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
module.exports = NoteWidget;
|
||||
module.exports = NoteWidget;
|
||||
|
@@ -5,7 +5,6 @@ const stripAnsi = require('strip-ansi');
|
||||
const { handleAutocompletion } = require('../autocompletion.js');
|
||||
|
||||
class StatusBarWidget extends BaseWidget {
|
||||
|
||||
constructor() {
|
||||
super();
|
||||
|
||||
@@ -75,7 +74,7 @@ class StatusBarWidget extends BaseWidget {
|
||||
super.render();
|
||||
|
||||
const doSaveCursor = !this.promptActive;
|
||||
|
||||
|
||||
if (doSaveCursor) this.term.saveCursor();
|
||||
|
||||
this.innerClear();
|
||||
@@ -85,16 +84,15 @@ class StatusBarWidget extends BaseWidget {
|
||||
// On Windows, bgBlueBright is fine and looks dark enough (Windows is probably in the wrong though)
|
||||
// For now, just don't use any colour at all.
|
||||
|
||||
//const textStyle = this.promptActive ? (s) => s : chalk.bgBlueBright.white;
|
||||
//const textStyle = (s) => s;
|
||||
const textStyle = this.promptActive ? (s) => s : chalk.gray;
|
||||
// const textStyle = this.promptActive ? (s) => s : chalk.bgBlueBright.white;
|
||||
// const textStyle = (s) => s;
|
||||
const textStyle = this.promptActive ? s => s : chalk.gray;
|
||||
|
||||
this.term.drawHLine(this.absoluteInnerX, this.absoluteInnerY, this.innerWidth, textStyle(' '));
|
||||
|
||||
this.term.moveTo(this.absoluteInnerX, this.absoluteInnerY);
|
||||
|
||||
if (this.promptActive) {
|
||||
|
||||
this.term.write(textStyle(this.promptState_.promptString));
|
||||
|
||||
if (this.inputEventEmitter_) {
|
||||
@@ -113,8 +111,8 @@ class StatusBarWidget extends BaseWidget {
|
||||
history: this.history,
|
||||
default: this.promptState_.initialText,
|
||||
autoComplete: handleAutocompletion,
|
||||
autoCompleteHint : true,
|
||||
autoCompleteMenu : true,
|
||||
autoCompleteHint: true,
|
||||
autoCompleteMenu: true,
|
||||
};
|
||||
|
||||
if ('cursorPosition' in this.promptState_) options.cursorPosition = this.promptState_.cursorPosition;
|
||||
@@ -153,19 +151,15 @@ class StatusBarWidget extends BaseWidget {
|
||||
// Only callback once everything has been cleaned up and reset
|
||||
resolveFn(resolveResult);
|
||||
});
|
||||
|
||||
} else {
|
||||
|
||||
for (let i = 0; i < this.items_.length; i++) {
|
||||
const s = this.items_[i].substr(0, this.innerWidth - 1);
|
||||
this.term.write(textStyle(s));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if (doSaveCursor) this.term.restoreCursor();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
module.exports = StatusBarWidget;
|
||||
|
@@ -1,10 +1,7 @@
|
||||
const fs = require('fs-extra');
|
||||
const { wrap } = require('lib/string-utils.js');
|
||||
const Setting = require('lib/models/Setting.js');
|
||||
const { fileExtension, basename, dirname } = require('lib/path-utils.js');
|
||||
const { _, setLocale, languageCode } = require('lib/locale.js');
|
||||
const { _ } = require('lib/locale.js');
|
||||
|
||||
const rootDir = dirname(dirname(__dirname));
|
||||
const MAX_WIDTH = 78;
|
||||
const INDENT = ' ';
|
||||
|
||||
@@ -16,14 +13,14 @@ function renderTwoColumnData(options, baseIndent, width) {
|
||||
let option = options[i];
|
||||
const flag = option[0];
|
||||
const indent = baseIndent + INDENT + ' '.repeat(optionColWidth + 2);
|
||||
|
||||
|
||||
let r = wrap(option[1], indent, width);
|
||||
r = r.substr(flag.length + (baseIndent + INDENT).length);
|
||||
r = baseIndent + INDENT + flag + r;
|
||||
output.push(r);
|
||||
}
|
||||
|
||||
return output.join("\n");
|
||||
return output.join('\n');
|
||||
}
|
||||
|
||||
function renderCommandHelp(cmd, width = null) {
|
||||
@@ -44,7 +41,7 @@ function renderCommandHelp(cmd, width = null) {
|
||||
}
|
||||
|
||||
if (cmd.name() === 'config') {
|
||||
const renderMetadata = (md) => {
|
||||
const renderMetadata = md => {
|
||||
let desc = [];
|
||||
|
||||
if (md.label) {
|
||||
@@ -63,17 +60,17 @@ function renderCommandHelp(cmd, width = null) {
|
||||
|
||||
if ('value' in md) {
|
||||
if (md.type === Setting.TYPE_STRING) {
|
||||
defaultString = md.value ? '"' + md.value + '"' : null;
|
||||
defaultString = md.value ? `"${md.value}"` : null;
|
||||
} else if (md.type === Setting.TYPE_INT) {
|
||||
defaultString = (md.value ? md.value : 0).toString();
|
||||
} else if (md.type === Setting.TYPE_BOOL) {
|
||||
defaultString = (md.value === true ? 'true' : 'false');
|
||||
defaultString = md.value === true ? 'true' : 'false';
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (defaultString !== null) desc.push(_('Default: %s', defaultString));
|
||||
|
||||
return [md.key, desc.join("\n")];
|
||||
return [md.key, desc.join('\n')];
|
||||
};
|
||||
|
||||
output.push('');
|
||||
@@ -83,7 +80,7 @@ function renderCommandHelp(cmd, width = null) {
|
||||
let keysValues = [];
|
||||
const keys = Setting.keys(true, 'cli');
|
||||
for (let i = 0; i < keys.length; i++) {
|
||||
if (keysValues.length) keysValues.push(['','']);
|
||||
if (keysValues.length) keysValues.push(['', '']);
|
||||
const md = Setting.settingMetadata(keys[i]);
|
||||
if (!md.label) continue;
|
||||
keysValues.push(renderMetadata(md));
|
||||
@@ -91,8 +88,8 @@ function renderCommandHelp(cmd, width = null) {
|
||||
|
||||
output.push(renderTwoColumnData(keysValues, baseIndent, width));
|
||||
}
|
||||
|
||||
return output.join("\n");
|
||||
|
||||
return output.join('\n');
|
||||
}
|
||||
|
||||
function getOptionColWidth(options) {
|
||||
@@ -104,4 +101,4 @@ function getOptionColWidth(options) {
|
||||
return output;
|
||||
}
|
||||
|
||||
module.exports = { renderCommandHelp };
|
||||
module.exports = { renderCommandHelp };
|
||||
|
@@ -9,7 +9,7 @@ require('app-module-path').addPath(__dirname);
|
||||
const compareVersion = require('compare-version');
|
||||
const nodeVersion = process && process.versions && process.versions.node ? process.versions.node : '0.0.0';
|
||||
if (compareVersion(nodeVersion, '8.0.0') < 0) {
|
||||
console.error('Joplin requires Node 8+. Detected version ' + nodeVersion);
|
||||
console.error(`Joplin requires Node 8+. Detected version ${nodeVersion}`);
|
||||
process.exit(1);
|
||||
}
|
||||
|
||||
@@ -53,25 +53,25 @@ shimInit();
|
||||
|
||||
const application = app();
|
||||
|
||||
if (process.platform === "win32") {
|
||||
var rl = require("readline").createInterface({
|
||||
if (process.platform === 'win32') {
|
||||
var rl = require('readline').createInterface({
|
||||
input: process.stdin,
|
||||
output: process.stdout
|
||||
output: process.stdout,
|
||||
});
|
||||
|
||||
rl.on("SIGINT", function () {
|
||||
process.emit("SIGINT");
|
||||
rl.on('SIGINT', function() {
|
||||
process.emit('SIGINT');
|
||||
});
|
||||
}
|
||||
|
||||
process.stdout.on('error', function( err ) {
|
||||
process.stdout.on('error', function(err) {
|
||||
// https://stackoverflow.com/questions/12329816/error-write-epipe-when-piping-node-output-to-head#15884508
|
||||
if (err.code == "EPIPE") {
|
||||
if (err.code == 'EPIPE') {
|
||||
process.exit(0);
|
||||
}
|
||||
});
|
||||
|
||||
application.start(process.argv).catch((error) => {
|
||||
application.start(process.argv).catch(error => {
|
||||
if (error.code == 'flagError') {
|
||||
console.error(error.message);
|
||||
console.error(_('Type `joplin help` for usage information.'));
|
||||
@@ -81,4 +81,4 @@ application.start(process.argv).catch((error) => {
|
||||
}
|
||||
|
||||
process.exit(1);
|
||||
});
|
||||
});
|
||||
|
@@ -1,13 +1,11 @@
|
||||
const { _ } = require('lib/locale.js');
|
||||
const { netUtils } = require('lib/net-utils.js');
|
||||
|
||||
const http = require("http");
|
||||
const urlParser = require("url");
|
||||
const FormData = require('form-data');
|
||||
const http = require('http');
|
||||
const urlParser = require('url');
|
||||
const enableServerDestroy = require('server-destroy');
|
||||
|
||||
class OneDriveApiNodeUtils {
|
||||
|
||||
constructor(api) {
|
||||
this.api_ = api;
|
||||
this.oauthServer_ = null;
|
||||
@@ -46,9 +44,9 @@ class OneDriveApiNodeUtils {
|
||||
const port = await netUtils.findAvailablePort(this.possibleOAuthDancePorts(), 0);
|
||||
if (!port) throw new Error(_('All potential ports are in use - please report the issue at %s', 'https://github.com/laurent22/joplin'));
|
||||
|
||||
let authCodeUrl = this.api().authCodeUrl('http://localhost:' + port);
|
||||
let authCodeUrl = this.api().authCodeUrl(`http://localhost:${port}`);
|
||||
|
||||
return new Promise((resolve, reject) => {
|
||||
return new Promise((resolve, reject) => {
|
||||
this.oauthServer_ = http.createServer();
|
||||
let errorMessage = null;
|
||||
|
||||
@@ -56,7 +54,7 @@ class OneDriveApiNodeUtils {
|
||||
const url = urlParser.parse(request.url, true);
|
||||
|
||||
if (url.pathname === '/auth') {
|
||||
response.writeHead(302, { 'Location': authCodeUrl });
|
||||
response.writeHead(302, { Location: authCodeUrl });
|
||||
response.end();
|
||||
return;
|
||||
}
|
||||
@@ -64,10 +62,10 @@ class OneDriveApiNodeUtils {
|
||||
const query = url.query;
|
||||
|
||||
const writeResponse = (code, message) => {
|
||||
response.writeHead(code, {"Content-Type": "text/html"});
|
||||
response.writeHead(code, { 'Content-Type': 'text/html' });
|
||||
response.write(this.makePage(message));
|
||||
response.end();
|
||||
}
|
||||
};
|
||||
|
||||
// After the response has been received, don't destroy the server right
|
||||
// away or the browser might display a connection reset error (even
|
||||
@@ -77,21 +75,24 @@ class OneDriveApiNodeUtils {
|
||||
this.oauthServer_.destroy();
|
||||
this.oauthServer_ = null;
|
||||
}, 1000);
|
||||
}
|
||||
};
|
||||
|
||||
if (!query.code) return writeResponse(400, '"code" query parameter is missing');
|
||||
|
||||
this.api().execTokenRequest(query.code, 'http://localhost:' + port.toString()).then(() => {
|
||||
writeResponse(200, _('The application has been authorised - you may now close this browser tab.'));
|
||||
targetConsole.log('');
|
||||
targetConsole.log(_('The application has been successfully authorised.'));
|
||||
waitAndDestroy();
|
||||
}).catch((error) => {
|
||||
writeResponse(400, error.message);
|
||||
targetConsole.log('');
|
||||
targetConsole.log(error.message);
|
||||
waitAndDestroy();
|
||||
});
|
||||
this.api()
|
||||
.execTokenRequest(query.code, `http://localhost:${port.toString()}`)
|
||||
.then(() => {
|
||||
writeResponse(200, _('The application has been authorised - you may now close this browser tab.'));
|
||||
targetConsole.log('');
|
||||
targetConsole.log(_('The application has been successfully authorised.'));
|
||||
waitAndDestroy();
|
||||
})
|
||||
.catch(error => {
|
||||
writeResponse(400, error.message);
|
||||
targetConsole.log('');
|
||||
targetConsole.log(error.message);
|
||||
waitAndDestroy();
|
||||
});
|
||||
});
|
||||
|
||||
this.oauthServer_.on('close', () => {
|
||||
@@ -106,17 +107,16 @@ class OneDriveApiNodeUtils {
|
||||
|
||||
enableServerDestroy(this.oauthServer_);
|
||||
|
||||
// Rather than displaying authCodeUrl directly, we go throught the local
|
||||
// Rather than displaying authCodeUrl directly, we go through the local
|
||||
// server. This is just so that the URL being displayed is shorter and
|
||||
// doesn't get cut in terminals (especially those that don't handle multi
|
||||
// lines URLs).
|
||||
|
||||
targetConsole.log(_('Please open the following URL in your browser to authenticate the application. The application will create a directory in "Apps/Joplin" and will only read and write files in this directory. It will have no access to any files outside this directory nor to any other personal data. No data will be shared with any third party.'));
|
||||
targetConsole.log('');
|
||||
targetConsole.log('http://127.0.0.1:' + port + '/auth');
|
||||
targetConsole.log(`http://127.0.0.1:${port}/auth`);
|
||||
});
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
module.exports = { OneDriveApiNodeUtils };
|
||||
module.exports = { OneDriveApiNodeUtils };
|
||||
|
@@ -5,5 +5,6 @@ BUILD_DIR="$ROOT_DIR/build"
|
||||
|
||||
rsync -a --exclude "node_modules/" "$ROOT_DIR/app/" "$BUILD_DIR/"
|
||||
rsync -a --delete "$ROOT_DIR/../ReactNativeClient/lib/" "$BUILD_DIR/lib/"
|
||||
rsync -a --delete "$ROOT_DIR/../ReactNativeClient/locales/" "$BUILD_DIR/locales/"
|
||||
cp "$ROOT_DIR/package.json" "$BUILD_DIR"
|
||||
chmod 755 "$BUILD_DIR/main.js"
|
@@ -135,6 +135,14 @@ msgstr "أدخل كلمة المرور الرئيسة:"
|
||||
msgid "Operation cancelled"
|
||||
msgstr "ألغيت العملية"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Confirm password:"
|
||||
msgstr "أدخل كلمة المرور الرئيسة:"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Passwords do not match!"
|
||||
msgstr "لا يمكن أن تكون كلمة المرور فارغة"
|
||||
|
||||
msgid ""
|
||||
"Starting decryption... Please wait as it may take several minutes depending "
|
||||
"on how much there is to decrypt."
|
||||
@@ -169,16 +177,6 @@ msgstr "لا يوجد دفتر ملاحظات نشط."
|
||||
msgid "Note does not exist: \"%s\". Create it?"
|
||||
msgstr "الملاحظة: \"%s\" غير موجودة. تريد إنشائها؟"
|
||||
|
||||
msgid "Starting to edit note. Close the editor to get back to the prompt."
|
||||
msgstr "بدء تحرير الملاحظة. أغلق المحرر للعودة إلى المحث."
|
||||
|
||||
#, javascript-format
|
||||
msgid "Error opening note in editor: %s"
|
||||
msgstr "حدث خطأ أثناء فتح الملاحظة: %s في المحرر"
|
||||
|
||||
msgid "Note has been saved."
|
||||
msgstr "تم حفظ الملاحظة."
|
||||
|
||||
msgid "Exits the application."
|
||||
msgstr "الخروج من التطبيق."
|
||||
|
||||
@@ -385,6 +383,23 @@ msgstr "حذف الملاحظة؟"
|
||||
msgid "Searches for the given <pattern> in all the notes."
|
||||
msgstr "يبحث عن الـ <pattern> (نمط) المعطى في كل الملاحظات."
|
||||
|
||||
#, javascript-format
|
||||
msgid ""
|
||||
"Start, stop or check the API server. To specify on which port it should run, "
|
||||
"set the api.port config variable. Commands are (%s)."
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Server is already running on port %d"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Server is running on port %d"
|
||||
msgstr ""
|
||||
|
||||
msgid "Server is not running."
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid ""
|
||||
"Sets the property <name> of the given <note> to the given [value]. Possible "
|
||||
@@ -453,10 +468,12 @@ 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 "
|
||||
"`tag list` can be used to list all the tags (use -l for long option)."
|
||||
"<tag-command> can be \"add\", \"remove\", \"list\", or \"notetags\" to "
|
||||
"assign or remove [tag] from [note], to list notes associated with [tag], or "
|
||||
"to list tags associated with [note]. The command `tag list` can be used to "
|
||||
"list all the tags (use -l for long option)."
|
||||
msgstr ""
|
||||
"<tag-command> (أمر-وسم) يمكن أن يكون \"add\" (أضف) ، \"remove\" (أزل) أو "
|
||||
"\"list\" (أسرد) ، وذلك لإضافة [وسم] أو إزالته من [ملاحظة] أو لسرد الملاحظات "
|
||||
@@ -568,52 +585,9 @@ msgstr ""
|
||||
msgid "Exporting to \"%s\" as \"%s\" format. Please wait..."
|
||||
msgstr "التصدير إلى \"%s\" بتنسيق \"%s\". فضلاً انتظر..."
|
||||
|
||||
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 "الاستيراد من \"%s\" بتنسيق \"%s\". فضلاً انتظر..."
|
||||
|
||||
msgid "PDF File"
|
||||
msgstr "ملف PDF"
|
||||
|
||||
msgid "Synchronisation status"
|
||||
msgstr "حالة المزامنة"
|
||||
|
||||
msgid "New note"
|
||||
msgstr "ملاحظة جديدة"
|
||||
|
||||
msgid "New to-do"
|
||||
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)"
|
||||
msgid "Could not export notes: %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "&File"
|
||||
msgstr "&ملف"
|
||||
@@ -627,6 +601,9 @@ msgstr ""
|
||||
msgid "Check for updates..."
|
||||
msgstr "البحث جارٍ عن تحديثات..."
|
||||
|
||||
msgid "Templates"
|
||||
msgstr ""
|
||||
|
||||
msgid "Import"
|
||||
msgstr "استيراد"
|
||||
|
||||
@@ -670,12 +647,18 @@ msgstr "مائل"
|
||||
msgid "Link"
|
||||
msgstr "رابط"
|
||||
|
||||
msgid "Code"
|
||||
msgstr "رمز"
|
||||
|
||||
msgid "Insert Date Time"
|
||||
msgstr "إدراج التاريخ والوقت"
|
||||
|
||||
msgid "Edit in external editor"
|
||||
msgstr "التحرير في محرر خارجي"
|
||||
|
||||
msgid "Tags"
|
||||
msgstr "وسوم"
|
||||
|
||||
msgid "Search in all the notes"
|
||||
msgstr "البحث في كل الملاحظات"
|
||||
|
||||
@@ -688,6 +671,13 @@ msgstr "&عرض"
|
||||
msgid "Toggle sidebar"
|
||||
msgstr "تبديل الشريط الجانبي"
|
||||
|
||||
msgid "Layout button sequence"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Toggle note list"
|
||||
msgstr "قائمة ملاحظات"
|
||||
|
||||
msgid "Toggle editor layout"
|
||||
msgstr "تبديل تخطيط المحرّر"
|
||||
|
||||
@@ -703,9 +693,16 @@ msgstr "م&ساعدة"
|
||||
msgid "Website and documentation"
|
||||
msgstr "موقع الويب و التوثيق"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Joplin Forum"
|
||||
msgstr "Joplin نسخة %s"
|
||||
|
||||
msgid "Make a donation"
|
||||
msgstr "تبرَّع"
|
||||
|
||||
msgid "Toggle development tools"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Open %s"
|
||||
msgstr "افتح %s"
|
||||
@@ -743,6 +740,9 @@ msgstr "نعم"
|
||||
msgid "No"
|
||||
msgstr "لا"
|
||||
|
||||
msgid "Full Release Notes"
|
||||
msgstr ""
|
||||
|
||||
msgid "Token has been copied to the clipboard!"
|
||||
msgstr "تم نسخ الرمز المميز إلى الحافظة!"
|
||||
|
||||
@@ -808,6 +808,9 @@ msgstr ""
|
||||
"هذا الرمز المميز للتصريح مطلوب فقط للسماح لتطبيقات طرف ثالث للوصول إلى "
|
||||
"Joplin."
|
||||
|
||||
msgid "This will open a new screen. Save your current changes?"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Notes and settings are stored in: %s"
|
||||
msgstr "الملاحظات و الإعدادات مخزّنة في: %s"
|
||||
@@ -818,6 +821,9 @@ msgstr "فحص ضبط المزامنة"
|
||||
msgid "Browse..."
|
||||
msgstr "استعراض..."
|
||||
|
||||
msgid "Back"
|
||||
msgstr "عودة"
|
||||
|
||||
msgid "Apply"
|
||||
msgstr "تطبيق"
|
||||
|
||||
@@ -898,8 +904,8 @@ msgstr ""
|
||||
"فيما بعد عبر المزامنة."
|
||||
|
||||
msgid ""
|
||||
"For more information about End-To-End Encryption (E2EE) and advices on how "
|
||||
"to enable it please check the documentation:"
|
||||
"For more information about End-To-End Encryption (E2EE) and advice on how to "
|
||||
"enable it please check the documentation:"
|
||||
msgstr ""
|
||||
"يرجى الرجوع إلى التوثيق للمزيد من المعلومات عن التشفير من الطرف للطرف (E2EE) "
|
||||
"و طرق تفعيله."
|
||||
@@ -910,12 +916,18 @@ msgstr "الحالة"
|
||||
msgid "Encryption is:"
|
||||
msgstr "التشفير هو:"
|
||||
|
||||
msgid "Firefox Extension"
|
||||
msgstr ""
|
||||
|
||||
msgid "Chrome Web Store"
|
||||
msgstr ""
|
||||
|
||||
msgid "Get it now:"
|
||||
msgstr ""
|
||||
|
||||
msgid "Usage"
|
||||
msgstr "الاستخدام"
|
||||
|
||||
msgid "Back"
|
||||
msgstr "عودة"
|
||||
|
||||
#, javascript-format
|
||||
msgid ""
|
||||
"New notebook \"%s\" will be created and file \"%s\" will be imported into it"
|
||||
@@ -933,9 +945,6 @@ msgstr "عنوان دفتر الملاحظات:"
|
||||
msgid "Add or remove tags:"
|
||||
msgstr "إضافة أو حذف وسوم:"
|
||||
|
||||
msgid "Separate each tag by a comma."
|
||||
msgstr ""
|
||||
|
||||
msgid "Rename notebook:"
|
||||
msgstr "إعادة تسمية دفتر الملاحظات:"
|
||||
|
||||
@@ -945,6 +954,18 @@ msgstr "إعادة تسمية الوسم:"
|
||||
msgid "Set alarm:"
|
||||
msgstr "ضبط منبّه:"
|
||||
|
||||
msgid "Template file:"
|
||||
msgstr ""
|
||||
|
||||
msgid "New note"
|
||||
msgstr "ملاحظة جديدة"
|
||||
|
||||
msgid "New to-do"
|
||||
msgstr "قائمة جديدة للمهام"
|
||||
|
||||
msgid "New notebook"
|
||||
msgstr "دفتر ملاحظات جديد"
|
||||
|
||||
msgid "Layout"
|
||||
msgstr "تخطيط"
|
||||
|
||||
@@ -957,8 +978,9 @@ msgstr "لا يمكن مزامنة بعض العناصر."
|
||||
msgid "View them now"
|
||||
msgstr "عرضها الآن"
|
||||
|
||||
msgid "Some items cannot be decrypted."
|
||||
msgstr "لا يمكن فك تشفير بعض العناصر."
|
||||
#, fuzzy
|
||||
msgid "One or more master keys need a password."
|
||||
msgstr "أدخل كلمة المرور الرئيسة:"
|
||||
|
||||
msgid "Set the password"
|
||||
msgstr "ضبط كلمة المرور"
|
||||
@@ -981,6 +1003,9 @@ msgstr "عنوان URL"
|
||||
msgid "Note History"
|
||||
msgstr "قائمة ملاحظات"
|
||||
|
||||
msgid "Markup"
|
||||
msgstr ""
|
||||
|
||||
msgid "Previous versions of this note"
|
||||
msgstr ""
|
||||
|
||||
@@ -995,6 +1020,10 @@ msgstr ""
|
||||
msgid "This note has no history"
|
||||
msgstr "جرى تعديل هذه الملاحظة:"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Unsupported link or message: %s"
|
||||
msgstr "رابط أو رسالة غير مدعومان: %s"
|
||||
|
||||
msgid "Restore"
|
||||
msgstr ""
|
||||
|
||||
@@ -1023,10 +1052,6 @@ msgstr "نسخ عنوان الرابط"
|
||||
msgid "This attachment is not downloaded or not decrypted yet."
|
||||
msgstr "لم يجر تنزيل هذا المرفق أو فك تشفيره حتى الآن."
|
||||
|
||||
#, javascript-format
|
||||
msgid "Unsupported link or message: %s"
|
||||
msgstr "رابط أو رسالة غير مدعومان: %s"
|
||||
|
||||
#, javascript-format
|
||||
msgid ""
|
||||
"This note has no content. Click on \"%s\" to toggle the editor and edit the "
|
||||
@@ -1037,6 +1062,13 @@ msgstr ""
|
||||
msgid "Only one note can be printed or exported to PDF at a time."
|
||||
msgstr "يمكن طباعة ملاحظة واحدة فقط أو تصديرها إلى PDF كل مرة."
|
||||
|
||||
msgid "PDF File"
|
||||
msgstr "ملف PDF"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Error opening note in editor: %s"
|
||||
msgstr "حدث خطأ أثناء فتح الملاحظة: %s في المحرر"
|
||||
|
||||
msgid "strong text"
|
||||
msgstr "نص مشدَّد"
|
||||
|
||||
@@ -1052,9 +1084,6 @@ msgstr "إدراج ارتباط تشعبي"
|
||||
msgid "Attach file"
|
||||
msgstr "إرفاق ملف"
|
||||
|
||||
msgid "Tags"
|
||||
msgstr "وسوم"
|
||||
|
||||
msgid "Set alarm"
|
||||
msgstr "ضبط منبّه"
|
||||
|
||||
@@ -1065,9 +1094,6 @@ msgstr "في: %s"
|
||||
msgid "Hyperlink"
|
||||
msgstr "ارتباط تشعبي"
|
||||
|
||||
msgid "Code"
|
||||
msgstr "رمز"
|
||||
|
||||
msgid "Numbered List"
|
||||
msgstr "قائمة مرقّمة"
|
||||
|
||||
@@ -1117,11 +1143,9 @@ msgstr "خيارات"
|
||||
msgid "Synchronisation Status"
|
||||
msgstr "حالة المزامنة"
|
||||
|
||||
msgid "Encryption Options"
|
||||
msgstr "خيارات التشفير"
|
||||
|
||||
msgid "Clipper Options"
|
||||
msgstr "خيارات Clipper"
|
||||
#, fuzzy
|
||||
msgid "Remove"
|
||||
msgstr "إزالة ؟"
|
||||
|
||||
#, javascript-format
|
||||
msgid ""
|
||||
@@ -1133,6 +1157,9 @@ msgstr ""
|
||||
"\n"
|
||||
"سيتم حذف كل الملاحظات و دفاتر الملاحظات الفرعية ضمن هذا الدفتر أيضاً."
|
||||
|
||||
msgid "Delete"
|
||||
msgstr "حذف"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Remove tag \"%s\" from all notes?"
|
||||
msgstr "إزالة الوسم \"%s\" من كل الملاحظات؟"
|
||||
@@ -1140,8 +1167,9 @@ msgstr "إزالة الوسم \"%s\" من كل الملاحظات؟"
|
||||
msgid "Remove this search from the sidebar?"
|
||||
msgstr "حذف هذا البحث من الشريط الجانبي؟"
|
||||
|
||||
msgid "Delete"
|
||||
msgstr "حذف"
|
||||
#, fuzzy
|
||||
msgid "New sub-notebook"
|
||||
msgstr "دفتر ملاحظات جديد"
|
||||
|
||||
msgid "Rename"
|
||||
msgstr "إعادة تسمية"
|
||||
@@ -1154,12 +1182,15 @@ msgid "Decrypting items: %d/%d"
|
||||
msgstr "فك تشفير العناصر: %d/%d"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Fetching resources: %d"
|
||||
msgstr "جلب الموارد: %d"
|
||||
msgid "Fetching resources: %d/%d"
|
||||
msgstr "جلب الموارد: %d/%d"
|
||||
|
||||
msgid "Please select where the sync status should be exported to"
|
||||
msgstr "فضلاً اختر أين سيتم تصدير حالة المزامنة"
|
||||
|
||||
msgid "Retry"
|
||||
msgstr ""
|
||||
|
||||
msgid "Add or remove tags"
|
||||
msgstr "إضافة أو حذف وسوم"
|
||||
|
||||
@@ -1306,14 +1337,6 @@ msgstr "خامل"
|
||||
msgid "In progress"
|
||||
msgstr "قيد التقدم"
|
||||
|
||||
#, javascript-format
|
||||
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 "مشفّر"
|
||||
|
||||
@@ -1359,6 +1382,71 @@ msgstr ""
|
||||
"تنبيه: إذا غيرت هذا المكان ، تأكد من نسخ كافة المحتويات لديك إليه قبل البدء "
|
||||
"بالمزامنة ، وإلا فسيتم حذف كل الملفات! أنظر الأسئلة المتكررة لتفاصيل أكثر: %s"
|
||||
|
||||
msgid "Keyboard Mode"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Default"
|
||||
msgstr "التلقائية: %s"
|
||||
|
||||
msgid "Emacs"
|
||||
msgstr ""
|
||||
|
||||
msgid "Vim"
|
||||
msgstr ""
|
||||
|
||||
msgid "Synchronisation target"
|
||||
msgstr "وجهة المزامنة"
|
||||
|
||||
msgid ""
|
||||
"The target to synchonise to. Each sync target may have additional parameters "
|
||||
"which are named as `sync.NUM.NAME` (all documented below)."
|
||||
msgstr ""
|
||||
"الوجهة المستهدفة المزامنة إليها. كل وجهة مزامنة مستهدفة قد يكون لها معلمات "
|
||||
"إضافية تكون مسماة بـ `sync.NUM.NAME` (جميعها موثقة أدناه)."
|
||||
|
||||
msgid "Directory to synchronise with (absolute path)"
|
||||
msgstr "الدليل الذي تتم المزامنة معه (المسار المطلق)"
|
||||
|
||||
msgid "Nextcloud WebDAV URL"
|
||||
msgstr "عنوان URL لـ Nextcloud WebDAV"
|
||||
|
||||
msgid "Nextcloud username"
|
||||
msgstr "اسم مستخدم Nextcloud"
|
||||
|
||||
msgid "Nextcloud password"
|
||||
msgstr "كلمة مرور Nextcloud"
|
||||
|
||||
msgid "WebDAV URL"
|
||||
msgstr "عنوان URL لـ WebDAV"
|
||||
|
||||
msgid "WebDAV username"
|
||||
msgstr "اسم مستخدم WebDAV"
|
||||
|
||||
msgid "WebDAV password"
|
||||
msgstr "كلمة مرور WebDAV"
|
||||
|
||||
msgid "Attachment download behaviour"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"In \"Manual\" mode, attachments are downloaded only when you click on them. "
|
||||
"In \"Auto\", they are downloaded when you open the note. In \"Always\", all "
|
||||
"the attachments are downloaded whether you open the note or not."
|
||||
msgstr ""
|
||||
|
||||
msgid "Always"
|
||||
msgstr ""
|
||||
|
||||
msgid "Manual"
|
||||
msgstr ""
|
||||
|
||||
msgid "Auto"
|
||||
msgstr ""
|
||||
|
||||
msgid "Max concurrent connections"
|
||||
msgstr ""
|
||||
|
||||
msgid "Language"
|
||||
msgstr "اللغة"
|
||||
|
||||
@@ -1377,6 +1465,41 @@ msgstr "فاتحة"
|
||||
msgid "Dark"
|
||||
msgstr "غامقة"
|
||||
|
||||
msgid "Dracula"
|
||||
msgstr ""
|
||||
|
||||
msgid "Solarised Light"
|
||||
msgstr ""
|
||||
|
||||
msgid "Solarised Dark"
|
||||
msgstr ""
|
||||
|
||||
msgid "Nord"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Show note counts"
|
||||
msgstr "إظهار أيقونة لوحة النظام"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Editor"
|
||||
msgstr "تحرير"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Viewer"
|
||||
msgstr "&عرض"
|
||||
|
||||
msgid "Split View"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "%s / %s / %s"
|
||||
msgstr "%s = %s (%s)"
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s / %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Uncompleted to-dos on top"
|
||||
msgstr "قوائم المهام غير المكتملة في الأعلى"
|
||||
|
||||
@@ -1411,6 +1534,9 @@ msgstr "عند إنشاء ملاحظة جديدة:"
|
||||
msgid "Enable soft breaks"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable typographer support"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Enable math expressions"
|
||||
msgstr "تفعيل التشفير"
|
||||
@@ -1445,6 +1571,9 @@ msgstr ""
|
||||
msgid "Enable multimarkdown table extension"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable Fountain syntax support"
|
||||
msgstr ""
|
||||
|
||||
msgid "Show tray icon"
|
||||
msgstr "إظهار أيقونة لوحة النظام"
|
||||
|
||||
@@ -1468,6 +1597,10 @@ msgstr "نسبة التكبير العمومية"
|
||||
msgid "Editor font size"
|
||||
msgstr "حجم خط المحرّر"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Editor font"
|
||||
msgstr "حجم خط المحرّر"
|
||||
|
||||
msgid "Editor font family"
|
||||
msgstr "نوع خط المحرّر"
|
||||
|
||||
@@ -1513,39 +1646,35 @@ msgstr ""
|
||||
"أمر محرر النصوص (قد يتضمن معامِلات) الذي سيستخدم لفتح ملاحظة. إذا لم يجر "
|
||||
"التزويد بأي محرر فسيحاول التطبيق اكتشاف المحرِّر التلقائي آلياً."
|
||||
|
||||
msgid "Show advanced options"
|
||||
msgstr "إظهار خيارات متقدمة"
|
||||
|
||||
msgid "Synchronisation target"
|
||||
msgstr "وجهة المزامنة"
|
||||
|
||||
msgid ""
|
||||
"The target to synchonise to. Each sync target may have additional parameters "
|
||||
"which are named as `sync.NUM.NAME` (all documented below)."
|
||||
msgid "Page size for PDF export"
|
||||
msgstr ""
|
||||
"الوجهة المستهدفة المزامنة إليها. كل وجهة مزامنة مستهدفة قد يكون لها معلمات "
|
||||
"إضافية تكون مسماة بـ `sync.NUM.NAME` (جميعها موثقة أدناه)."
|
||||
|
||||
msgid "Directory to synchronise with (absolute path)"
|
||||
msgstr "الدليل الذي تتم المزامنة معه (المسار المطلق)"
|
||||
msgid "A4"
|
||||
msgstr ""
|
||||
|
||||
msgid "Nextcloud WebDAV URL"
|
||||
msgstr "عنوان URL لـ Nextcloud WebDAV"
|
||||
msgid "Letter"
|
||||
msgstr ""
|
||||
|
||||
msgid "Nextcloud username"
|
||||
msgstr "اسم مستخدم Nextcloud"
|
||||
msgid "A3"
|
||||
msgstr ""
|
||||
|
||||
msgid "Nextcloud password"
|
||||
msgstr "كلمة مرور Nextcloud"
|
||||
msgid "A5"
|
||||
msgstr ""
|
||||
|
||||
msgid "WebDAV URL"
|
||||
msgstr "عنوان URL لـ WebDAV"
|
||||
msgid "Tabloid"
|
||||
msgstr ""
|
||||
|
||||
msgid "WebDAV username"
|
||||
msgstr "اسم مستخدم WebDAV"
|
||||
msgid "Legal"
|
||||
msgstr ""
|
||||
|
||||
msgid "WebDAV password"
|
||||
msgstr "كلمة مرور WebDAV"
|
||||
msgid "Page orientation for PDF export"
|
||||
msgstr ""
|
||||
|
||||
msgid "Portrait"
|
||||
msgstr ""
|
||||
|
||||
msgid "Landscape"
|
||||
msgstr ""
|
||||
|
||||
msgid "Custom TLS certificates"
|
||||
msgstr "شهادات TLS خاصة"
|
||||
@@ -1564,6 +1693,16 @@ msgstr ""
|
||||
msgid "Ignore TLS certificate errors"
|
||||
msgstr "تجاهل أخطاء شهادات TLS"
|
||||
|
||||
msgid ""
|
||||
"Fail-safe: Do not wipe out local data when sync target is empty (often the "
|
||||
"result of a misconfiguration or bug)"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"Specify the port that should be used by the API server. If not set, a "
|
||||
"default will be used."
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Enable note history"
|
||||
msgstr "تفعيل التشفير"
|
||||
@@ -1600,6 +1739,14 @@ msgstr ""
|
||||
msgid "Application"
|
||||
msgstr "التطبيق"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Encryption"
|
||||
msgstr "التشفير هو:"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Web Clipper"
|
||||
msgstr "خيارات Web clipper"
|
||||
|
||||
#, javascript-format
|
||||
msgid "The tag \"%s\" already exists. Please choose a different name."
|
||||
msgstr "الوسم \"%s\" موجود بالفعل. فضلاً إختر اسماً مختلفاً."
|
||||
@@ -1613,7 +1760,12 @@ msgstr "تنسيق Markdown"
|
||||
msgid "Joplin Export Directory"
|
||||
msgstr "دليل تصدير بيانات Joplin"
|
||||
|
||||
msgid "Evernote Export File"
|
||||
#, fuzzy
|
||||
msgid "Evernote Export File (as Markdown)"
|
||||
msgstr "ملف Evernote المصدَّر"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Evernote Export File (as HTML)"
|
||||
msgstr "ملف Evernote المصدَّر"
|
||||
|
||||
msgid "Json Export Directory"
|
||||
@@ -1653,14 +1805,6 @@ msgstr ""
|
||||
msgid "Items that cannot be synchronised"
|
||||
msgstr "العناصر التي لا يمكن مزامنتها"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "%s (%s) could not be uploaded: %s"
|
||||
msgstr "لم نتمكن من فتح هذا الملف: %s"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Item \"%s\" could not be downloaded: %s"
|
||||
msgstr "لم نتمكن من فتح هذا الملف: %s"
|
||||
|
||||
msgid ""
|
||||
"These items will remain on the device but will not be uploaded to the sync "
|
||||
"target. In order to find these items, either search for the title or the ID "
|
||||
@@ -1670,6 +1814,24 @@ msgstr ""
|
||||
"تجد هذه العناصر ، عليك إما البحث عن العنوان أو المعرِّف (وهو معروض أعلاه بين "
|
||||
"قوسين)."
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "%s (%s) could not be uploaded: %s"
|
||||
msgstr "لم نتمكن من فتح هذا الملف: %s"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Item \"%s\" could not be downloaded: %s"
|
||||
msgstr "لم نتمكن من فتح هذا الملف: %s"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Items that cannot be decrypted"
|
||||
msgstr "العناصر التي لا يمكن مزامنتها"
|
||||
|
||||
msgid ""
|
||||
"Joplin failed to decrypt these items multiple times, possibly because they "
|
||||
"are corrupted or too large. These items will remain on the device but Joplin "
|
||||
"will no longer attempt to decrypt them."
|
||||
msgstr ""
|
||||
|
||||
msgid "Sync status (synced items / total items)"
|
||||
msgstr "حالة المزامنة (العناصر المنجزة / إجمالي العناصر)"
|
||||
|
||||
@@ -1709,24 +1871,20 @@ msgstr "الإذن باستخدام الكاميرا"
|
||||
msgid "Your permission to use your camera is required."
|
||||
msgstr "إذنك باستخدام كاميرا الجوال مطلوب."
|
||||
|
||||
#, fuzzy
|
||||
msgid "You currently have no notebooks."
|
||||
msgstr "لا يوجد دفتر ملاحظات نشط."
|
||||
|
||||
#, fuzzy
|
||||
msgid "Create a notebook"
|
||||
msgstr "ينشئ دفتر ملاحظات جديد."
|
||||
|
||||
msgid "There are currently no notes. Create one by clicking on the (+) button."
|
||||
msgstr "لا توجد ملاحظات حالياً. أنشئ واحدة بالضغط على زر (+)."
|
||||
|
||||
msgid "Delete these notes?"
|
||||
msgstr "حذف هذه الملاحظات؟"
|
||||
|
||||
msgid "Log"
|
||||
msgstr "السجل"
|
||||
|
||||
msgid "Export Debug Report"
|
||||
msgstr "تصدير تقرير إصلاح الأخطاء"
|
||||
|
||||
msgid "Encryption Config"
|
||||
msgstr "ضبط التشفير"
|
||||
|
||||
msgid "Configuration"
|
||||
msgstr "الضبط"
|
||||
|
||||
msgid "Move to notebook..."
|
||||
msgstr "النقل إلى دفتر ملاحظات..."
|
||||
|
||||
@@ -1749,8 +1907,24 @@ msgstr "إختر التاريخ"
|
||||
msgid "Confirm"
|
||||
msgstr "تأكيد"
|
||||
|
||||
msgid "Cancel synchronisation"
|
||||
msgstr "إلغاء المزامنة"
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Notebook: %s"
|
||||
msgstr "دفاتر ملاحظات"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Encrypted notebooks cannot be renamed"
|
||||
msgstr "لا يمكن تعديل العناصر المشفَّرة"
|
||||
|
||||
#, fuzzy
|
||||
msgid "New Notebook"
|
||||
msgstr "دفتر ملاحظات جديد"
|
||||
|
||||
msgid "Configuration"
|
||||
msgstr "الضبط"
|
||||
|
||||
#, fuzzy
|
||||
msgid "All notes"
|
||||
msgstr "ملاحظة"
|
||||
|
||||
msgid "Checking... Please wait."
|
||||
msgstr "التحقق جارٍ... فضلاً انتظر."
|
||||
@@ -1790,6 +1964,50 @@ msgstr "وسوم جديدة:"
|
||||
msgid "Type new tags or select from list"
|
||||
msgstr "أكتب وسوماً جديدة أو اخترها من القائمة"
|
||||
|
||||
msgid "Warning"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"In order to use file system synchronisation your permission to write to "
|
||||
"external storage is required."
|
||||
msgstr ""
|
||||
|
||||
msgid "Encryption Config"
|
||||
msgstr "ضبط التشفير"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Tools"
|
||||
msgstr "&أدوات"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Sync Status"
|
||||
msgstr "الحالة"
|
||||
|
||||
msgid "Log"
|
||||
msgstr "السجل"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Creating report..."
|
||||
msgstr "إنشاء %s جديد ..."
|
||||
|
||||
msgid "Export Debug Report"
|
||||
msgstr "تصدير تقرير إصلاح الأخطاء"
|
||||
|
||||
msgid "Fixing search index..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Fix search index"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"Use this to rebuild the search index if there is a problem with search. It "
|
||||
"may take a long time depending on the number of notes."
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "More information"
|
||||
msgstr "الضبط"
|
||||
|
||||
msgid ""
|
||||
"To work correctly, the app needs the following permissions. Please enable "
|
||||
"them in your phone settings, in Apps > Joplin > Permissions"
|
||||
@@ -1840,6 +2058,10 @@ msgstr "كلمة المرور:"
|
||||
msgid "Password cannot be empty"
|
||||
msgstr "لا يمكن أن تكون كلمة المرور فارغة"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Confirm password cannot be empty"
|
||||
msgstr "لا يمكن أن تكون كلمة المرور فارغة"
|
||||
|
||||
msgid "Enable"
|
||||
msgstr "تفعيل"
|
||||
|
||||
@@ -1850,6 +2072,10 @@ msgstr "لم يتم حفظ دفتر الملاحظات: %s"
|
||||
msgid "Edit notebook"
|
||||
msgstr "تحرير دفتر الملاحظات"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Enter notebook title"
|
||||
msgstr "عنوان دفتر الملاحظات:"
|
||||
|
||||
msgid "Show all"
|
||||
msgstr "إظهار الكل"
|
||||
|
||||
@@ -1873,10 +2099,32 @@ msgstr "لا يوجد عنصر بالمعرّف %s"
|
||||
msgid "The Joplin mobile app does not currently support this type of link: %s"
|
||||
msgstr "تطبيق Joplin على الهاتف الجوال لا يدعم حالياً هذا النوع من الربط : %s"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Links with protocol \"%s\" are not supported"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Unsupported image type: %s"
|
||||
msgstr "نوع صورة غير مدعوم: %s"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Updated: %s"
|
||||
msgstr "تم تحديثها: %d."
|
||||
|
||||
msgid "View on map"
|
||||
msgstr "عرض على الخريطة"
|
||||
|
||||
msgid "Go to source URL"
|
||||
msgstr "الذهاب إلى عنوان URL المصدر"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Attach..."
|
||||
msgstr "بحث..."
|
||||
|
||||
#, fuzzy
|
||||
msgid "Choose an option"
|
||||
msgstr "إظهار خيارات متقدمة"
|
||||
|
||||
msgid "Take photo"
|
||||
msgstr "التقاط صورة"
|
||||
|
||||
@@ -1895,23 +2143,19 @@ msgstr "تحويل إلى ملاحظة"
|
||||
msgid "Convert to todo"
|
||||
msgstr "تحويل إلى قائمة مهام"
|
||||
|
||||
msgid "Hide metadata"
|
||||
msgstr "إخفاء البيانات الوصفية"
|
||||
#, fuzzy
|
||||
msgid "Properties"
|
||||
msgstr "خصائص الملاحظة"
|
||||
|
||||
msgid "Show metadata"
|
||||
msgstr "إظهار البيانات الوصفية"
|
||||
|
||||
msgid "View on map"
|
||||
msgstr "عرض على الخريطة"
|
||||
|
||||
msgid "Go to source URL"
|
||||
msgstr "الذهاب إلى عنوان URL المصدر"
|
||||
msgid "Add body"
|
||||
msgstr ""
|
||||
|
||||
msgid "Edit"
|
||||
msgstr "تحرير"
|
||||
|
||||
msgid "Delete notebook"
|
||||
msgstr "حذف دفتر الملاحظات"
|
||||
#, fuzzy
|
||||
msgid "Add title"
|
||||
msgstr "العنوان"
|
||||
|
||||
msgid "Login with OneDrive"
|
||||
msgstr "تسجيل الدخول عبر OneDrive"
|
||||
@@ -1919,18 +2163,108 @@ msgstr "تسجيل الدخول عبر OneDrive"
|
||||
msgid "Search"
|
||||
msgstr "بحث"
|
||||
|
||||
msgid ""
|
||||
"Click on the (+) button to create a new note or notebook. Click on the side "
|
||||
"menu to access your existing notebooks."
|
||||
msgstr ""
|
||||
"اضغط على زر (+) لتنشئ ملاحظة أو دفتر ملاحظات جديداً. اضغط على القائمة "
|
||||
"الجانبية للوصول إلى دفاتر ملاحظاتك القائمة."
|
||||
#~ msgid "Synchronisation is already in progress. State: %s"
|
||||
#~ msgstr "المزامنة قيد التقدم بالفعل. الحال: %s"
|
||||
|
||||
msgid "You currently have no notebook. Create one by clicking on (+) button."
|
||||
msgstr "ليس لديك دفاتر ملاحظات حالياً. أنشئ واحدة بالضغط على زر (+)."
|
||||
#, fuzzy
|
||||
#~ msgid "Confirm master password:"
|
||||
#~ msgstr "أدخل كلمة المرور الرئيسة:"
|
||||
|
||||
msgid "Welcome"
|
||||
msgstr "مرحباً"
|
||||
#, fuzzy
|
||||
#~ msgid "Confirm password"
|
||||
#~ msgstr "أدخل كلمة المرور الرئيسة:"
|
||||
|
||||
#, fuzzy
|
||||
#~ msgid "Missing required argument: note"
|
||||
#~ msgstr "المعامل المطلوب %s مفقود"
|
||||
|
||||
#~ msgid "Starting to edit note. Close the editor to get back to the prompt."
|
||||
#~ msgstr "بدء تحرير الملاحظة. أغلق المحرر للعودة إلى المحث."
|
||||
|
||||
#~ msgid "Note has been saved."
|
||||
#~ msgstr "تم حفظ الملاحظة."
|
||||
|
||||
#~ msgid "Sidebar"
|
||||
#~ msgstr "الشريط الجانبي"
|
||||
|
||||
#~ msgid "Note title"
|
||||
#~ msgstr "عنوان الملاحظة"
|
||||
|
||||
#~ msgid "Note body"
|
||||
#~ msgstr "متن الملاحظة"
|
||||
|
||||
#~ msgid "Importing from \"%s\" as \"%s\" format. Please wait..."
|
||||
#~ msgstr "الاستيراد من \"%s\" بتنسيق \"%s\". فضلاً انتظر..."
|
||||
|
||||
#~ msgid "Synchronisation status"
|
||||
#~ msgstr "حالة المزامنة"
|
||||
|
||||
#~ msgid "Print"
|
||||
#~ msgstr "اطبع"
|
||||
|
||||
#~ msgid "General Options"
|
||||
#~ msgstr "الخيارات العامة"
|
||||
|
||||
#~ msgid "Encryption options"
|
||||
#~ msgstr "خيارات التشفير"
|
||||
|
||||
#, fuzzy
|
||||
#~ msgid "Insert template"
|
||||
#~ msgstr "إدراج التاريخ والوقت"
|
||||
|
||||
#, fuzzy
|
||||
#~ msgid "Open template directory"
|
||||
#~ msgstr "دليل تصدير بيانات Joplin"
|
||||
|
||||
#, fuzzy
|
||||
#~ msgid "Revision: %s (%s)"
|
||||
#~ msgstr "%s %s (%s)"
|
||||
|
||||
#~ msgid "%s %s (%s, %s)"
|
||||
#~ msgstr "%s %s (%s, %s)"
|
||||
|
||||
#~ msgid "Encryption Options"
|
||||
#~ msgstr "خيارات التشفير"
|
||||
|
||||
#~ msgid "Clipper Options"
|
||||
#~ msgstr "خيارات Clipper"
|
||||
|
||||
#, fuzzy
|
||||
#~ msgid "Information"
|
||||
#~ msgstr "الضبط"
|
||||
|
||||
#, fuzzy
|
||||
#~ msgid "Permission to write to external storage"
|
||||
#~ msgstr "الإذن باستخدام الكاميرا"
|
||||
|
||||
#~ msgid "Cancel synchronisation"
|
||||
#~ msgstr "إلغاء المزامنة"
|
||||
|
||||
#~ msgid "Hide metadata"
|
||||
#~ msgstr "إخفاء البيانات الوصفية"
|
||||
|
||||
#~ msgid "Show metadata"
|
||||
#~ msgstr "إظهار البيانات الوصفية"
|
||||
|
||||
#~ msgid "Delete notebook"
|
||||
#~ msgstr "حذف دفتر الملاحظات"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "Click on the (+) button to create a new note or notebook. Click on the "
|
||||
#~ "side menu to access your existing notebooks."
|
||||
#~ msgstr ""
|
||||
#~ "اضغط على زر (+) لتنشئ ملاحظة أو دفتر ملاحظات جديداً. اضغط على القائمة "
|
||||
#~ "الجانبية للوصول إلى دفاتر ملاحظاتك القائمة."
|
||||
|
||||
#~ msgid ""
|
||||
#~ "You currently have no notebook. Create one by clicking on (+) button."
|
||||
#~ msgstr "ليس لديك دفاتر ملاحظات حالياً. أنشئ واحدة بالضغط على زر (+)."
|
||||
|
||||
#~ msgid "Welcome"
|
||||
#~ msgstr "مرحباً"
|
||||
|
||||
#~ msgid "Some items cannot be decrypted."
|
||||
#~ msgstr "لا يمكن فك تشفير بعض العناصر."
|
||||
|
||||
#~ msgid "%s (%s): %s"
|
||||
#~ msgstr "%s (%s): %s"
|
||||
@@ -1941,9 +2275,3 @@ msgstr "مرحباً"
|
||||
#~ msgstr ""
|
||||
#~ "المسار الذي ستتم المزامنة معه عند تفعيل مزامنة نظام الملفات. أنظر `sync."
|
||||
#~ "target`."
|
||||
|
||||
#~ msgid "Remove?"
|
||||
#~ msgstr "إزالة ؟"
|
||||
|
||||
#~ msgid "Joplin v%s"
|
||||
#~ msgstr "Joplin نسخة %s"
|
||||
|
2319
CliClient/locales/bg_BG.po
Normal file
2319
CliClient/locales/bg_BG.po
Normal file
File diff suppressed because it is too large
Load Diff
2207
CliClient/locales/bs_BA.po
Normal file
2207
CliClient/locales/bs_BA.po
Normal file
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
2256
CliClient/locales/el_GR.po
Normal file
2256
CliClient/locales/el_GR.po
Normal file
File diff suppressed because it is too large
Load Diff
@@ -128,6 +128,12 @@ msgstr ""
|
||||
msgid "Operation cancelled"
|
||||
msgstr ""
|
||||
|
||||
msgid "Confirm password:"
|
||||
msgstr ""
|
||||
|
||||
msgid "Passwords do not match!"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"Starting decryption... Please wait as it may take several minutes depending "
|
||||
"on how much there is to decrypt."
|
||||
@@ -160,16 +166,6 @@ msgstr ""
|
||||
msgid "Note does not exist: \"%s\". Create it?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Starting to edit note. Close the editor to get back to the prompt."
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Error opening note in editor: %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Note has been saved."
|
||||
msgstr ""
|
||||
|
||||
msgid "Exits the application."
|
||||
msgstr ""
|
||||
|
||||
@@ -353,6 +349,23 @@ msgstr ""
|
||||
msgid "Searches for the given <pattern> in all the notes."
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid ""
|
||||
"Start, stop or check the API server. To specify on which port it should run, "
|
||||
"set the api.port config variable. Commands are (%s)."
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Server is already running on port %d"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Server is running on port %d"
|
||||
msgstr ""
|
||||
|
||||
msgid "Server is not running."
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid ""
|
||||
"Sets the property <name> of the given <note> to the given [value]. Possible "
|
||||
@@ -415,9 +428,10 @@ msgid "Cancelling... Please wait."
|
||||
msgstr ""
|
||||
|
||||
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)."
|
||||
"<tag-command> can be \"add\", \"remove\", \"list\", or \"notetags\" to "
|
||||
"assign or remove [tag] from [note], to list notes associated with [tag], or "
|
||||
"to list tags associated with [note]. The command `tag list` can be used to "
|
||||
"list all the tags (use -l for long option)."
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
@@ -508,51 +522,8 @@ 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 ""
|
||||
|
||||
msgid "PDF File"
|
||||
msgstr ""
|
||||
|
||||
msgid "Synchronisation status"
|
||||
msgstr ""
|
||||
|
||||
msgid "New note"
|
||||
msgstr ""
|
||||
|
||||
msgid "New to-do"
|
||||
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)"
|
||||
msgid "Could not export notes: %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "&File"
|
||||
@@ -567,6 +538,9 @@ msgstr ""
|
||||
msgid "Check for updates..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Templates"
|
||||
msgstr ""
|
||||
|
||||
msgid "Import"
|
||||
msgstr ""
|
||||
|
||||
@@ -610,12 +584,18 @@ msgstr ""
|
||||
msgid "Link"
|
||||
msgstr ""
|
||||
|
||||
msgid "Code"
|
||||
msgstr ""
|
||||
|
||||
msgid "Insert Date Time"
|
||||
msgstr ""
|
||||
|
||||
msgid "Edit in external editor"
|
||||
msgstr ""
|
||||
|
||||
msgid "Tags"
|
||||
msgstr ""
|
||||
|
||||
msgid "Search in all the notes"
|
||||
msgstr ""
|
||||
|
||||
@@ -628,6 +608,12 @@ msgstr ""
|
||||
msgid "Toggle sidebar"
|
||||
msgstr ""
|
||||
|
||||
msgid "Layout button sequence"
|
||||
msgstr ""
|
||||
|
||||
msgid "Toggle note list"
|
||||
msgstr ""
|
||||
|
||||
msgid "Toggle editor layout"
|
||||
msgstr ""
|
||||
|
||||
@@ -643,9 +629,15 @@ msgstr ""
|
||||
msgid "Website and documentation"
|
||||
msgstr ""
|
||||
|
||||
msgid "Joplin Forum"
|
||||
msgstr ""
|
||||
|
||||
msgid "Make a donation"
|
||||
msgstr ""
|
||||
|
||||
msgid "Toggle development tools"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Open %s"
|
||||
msgstr ""
|
||||
@@ -683,6 +675,9 @@ msgstr ""
|
||||
msgid "No"
|
||||
msgstr ""
|
||||
|
||||
msgid "Full Release Notes"
|
||||
msgstr ""
|
||||
|
||||
msgid "Token has been copied to the clipboard!"
|
||||
msgstr ""
|
||||
|
||||
@@ -743,6 +738,9 @@ msgid ""
|
||||
"access Joplin."
|
||||
msgstr ""
|
||||
|
||||
msgid "This will open a new screen. Save your current changes?"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Notes and settings are stored in: %s"
|
||||
msgstr ""
|
||||
@@ -753,6 +751,9 @@ msgstr ""
|
||||
msgid "Browse..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Back"
|
||||
msgstr ""
|
||||
|
||||
msgid "Apply"
|
||||
msgstr ""
|
||||
|
||||
@@ -821,8 +822,8 @@ msgid ""
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"For more information about End-To-End Encryption (E2EE) and advices on how "
|
||||
"to enable it please check the documentation:"
|
||||
"For more information about End-To-End Encryption (E2EE) and advice on how to "
|
||||
"enable it please check the documentation:"
|
||||
msgstr ""
|
||||
|
||||
msgid "Status"
|
||||
@@ -831,10 +832,16 @@ msgstr ""
|
||||
msgid "Encryption is:"
|
||||
msgstr ""
|
||||
|
||||
msgid "Usage"
|
||||
msgid "Firefox Extension"
|
||||
msgstr ""
|
||||
|
||||
msgid "Back"
|
||||
msgid "Chrome Web Store"
|
||||
msgstr ""
|
||||
|
||||
msgid "Get it now:"
|
||||
msgstr ""
|
||||
|
||||
msgid "Usage"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
@@ -854,9 +861,6 @@ msgstr ""
|
||||
msgid "Add or remove tags:"
|
||||
msgstr ""
|
||||
|
||||
msgid "Separate each tag by a comma."
|
||||
msgstr ""
|
||||
|
||||
msgid "Rename notebook:"
|
||||
msgstr ""
|
||||
|
||||
@@ -866,6 +870,18 @@ msgstr ""
|
||||
msgid "Set alarm:"
|
||||
msgstr ""
|
||||
|
||||
msgid "Template file:"
|
||||
msgstr ""
|
||||
|
||||
msgid "New note"
|
||||
msgstr ""
|
||||
|
||||
msgid "New to-do"
|
||||
msgstr ""
|
||||
|
||||
msgid "New notebook"
|
||||
msgstr ""
|
||||
|
||||
msgid "Layout"
|
||||
msgstr ""
|
||||
|
||||
@@ -878,7 +894,7 @@ msgstr ""
|
||||
msgid "View them now"
|
||||
msgstr ""
|
||||
|
||||
msgid "Some items cannot be decrypted."
|
||||
msgid "One or more master keys need a password."
|
||||
msgstr ""
|
||||
|
||||
msgid "Set the password"
|
||||
@@ -900,6 +916,9 @@ msgstr ""
|
||||
msgid "Note History"
|
||||
msgstr ""
|
||||
|
||||
msgid "Markup"
|
||||
msgstr ""
|
||||
|
||||
msgid "Previous versions of this note"
|
||||
msgstr ""
|
||||
|
||||
@@ -913,6 +932,10 @@ msgstr ""
|
||||
msgid "This note has no history"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Unsupported link or message: %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Restore"
|
||||
msgstr ""
|
||||
|
||||
@@ -941,10 +964,6 @@ msgstr ""
|
||||
msgid "This attachment is not downloaded or not decrypted yet."
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Unsupported link or message: %s"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid ""
|
||||
"This note has no content. Click on \"%s\" to toggle the editor and edit the "
|
||||
@@ -954,6 +973,13 @@ msgstr ""
|
||||
msgid "Only one note can be printed or exported to PDF at a time."
|
||||
msgstr ""
|
||||
|
||||
msgid "PDF File"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Error opening note in editor: %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "strong text"
|
||||
msgstr ""
|
||||
|
||||
@@ -969,9 +995,6 @@ msgstr ""
|
||||
msgid "Attach file"
|
||||
msgstr ""
|
||||
|
||||
msgid "Tags"
|
||||
msgstr ""
|
||||
|
||||
msgid "Set alarm"
|
||||
msgstr ""
|
||||
|
||||
@@ -982,9 +1005,6 @@ msgstr ""
|
||||
msgid "Hyperlink"
|
||||
msgstr ""
|
||||
|
||||
msgid "Code"
|
||||
msgstr ""
|
||||
|
||||
msgid "Numbered List"
|
||||
msgstr ""
|
||||
|
||||
@@ -1034,10 +1054,7 @@ msgstr ""
|
||||
msgid "Synchronisation Status"
|
||||
msgstr ""
|
||||
|
||||
msgid "Encryption Options"
|
||||
msgstr ""
|
||||
|
||||
msgid "Clipper Options"
|
||||
msgid "Remove"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
@@ -1047,6 +1064,9 @@ msgid ""
|
||||
"All notes and sub-notebooks within this notebook will also be deleted."
|
||||
msgstr ""
|
||||
|
||||
msgid "Delete"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Remove tag \"%s\" from all notes?"
|
||||
msgstr ""
|
||||
@@ -1054,7 +1074,7 @@ msgstr ""
|
||||
msgid "Remove this search from the sidebar?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Delete"
|
||||
msgid "New sub-notebook"
|
||||
msgstr ""
|
||||
|
||||
msgid "Rename"
|
||||
@@ -1068,12 +1088,15 @@ msgid "Decrypting items: %d/%d"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Fetching resources: %d"
|
||||
msgid "Fetching resources: %d/%d"
|
||||
msgstr ""
|
||||
|
||||
msgid "Please select where the sync status should be exported to"
|
||||
msgstr ""
|
||||
|
||||
msgid "Retry"
|
||||
msgstr ""
|
||||
|
||||
msgid "Add or remove tags"
|
||||
msgstr ""
|
||||
|
||||
@@ -1212,14 +1235,6 @@ msgstr ""
|
||||
msgid "In progress"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
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 ""
|
||||
|
||||
@@ -1263,6 +1278,68 @@ msgid ""
|
||||
"more details: %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Keyboard Mode"
|
||||
msgstr ""
|
||||
|
||||
msgid "Default"
|
||||
msgstr ""
|
||||
|
||||
msgid "Emacs"
|
||||
msgstr ""
|
||||
|
||||
msgid "Vim"
|
||||
msgstr ""
|
||||
|
||||
msgid "Synchronisation target"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"The target to synchonise to. Each sync target may have additional parameters "
|
||||
"which are named as `sync.NUM.NAME` (all documented below)."
|
||||
msgstr ""
|
||||
|
||||
msgid "Directory to synchronise with (absolute path)"
|
||||
msgstr ""
|
||||
|
||||
msgid "Nextcloud WebDAV URL"
|
||||
msgstr ""
|
||||
|
||||
msgid "Nextcloud username"
|
||||
msgstr ""
|
||||
|
||||
msgid "Nextcloud password"
|
||||
msgstr ""
|
||||
|
||||
msgid "WebDAV URL"
|
||||
msgstr ""
|
||||
|
||||
msgid "WebDAV username"
|
||||
msgstr ""
|
||||
|
||||
msgid "WebDAV password"
|
||||
msgstr ""
|
||||
|
||||
msgid "Attachment download behaviour"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"In \"Manual\" mode, attachments are downloaded only when you click on them. "
|
||||
"In \"Auto\", they are downloaded when you open the note. In \"Always\", all "
|
||||
"the attachments are downloaded whether you open the note or not."
|
||||
msgstr ""
|
||||
|
||||
msgid "Always"
|
||||
msgstr ""
|
||||
|
||||
msgid "Manual"
|
||||
msgstr ""
|
||||
|
||||
msgid "Auto"
|
||||
msgstr ""
|
||||
|
||||
msgid "Max concurrent connections"
|
||||
msgstr ""
|
||||
|
||||
msgid "Language"
|
||||
msgstr ""
|
||||
|
||||
@@ -1281,6 +1358,38 @@ msgstr ""
|
||||
msgid "Dark"
|
||||
msgstr ""
|
||||
|
||||
msgid "Dracula"
|
||||
msgstr ""
|
||||
|
||||
msgid "Solarised Light"
|
||||
msgstr ""
|
||||
|
||||
msgid "Solarised Dark"
|
||||
msgstr ""
|
||||
|
||||
msgid "Nord"
|
||||
msgstr ""
|
||||
|
||||
msgid "Show note counts"
|
||||
msgstr ""
|
||||
|
||||
msgid "Editor"
|
||||
msgstr ""
|
||||
|
||||
msgid "Viewer"
|
||||
msgstr ""
|
||||
|
||||
msgid "Split View"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s / %s / %s"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s / %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Uncompleted to-dos on top"
|
||||
msgstr ""
|
||||
|
||||
@@ -1314,6 +1423,9 @@ msgstr ""
|
||||
msgid "Enable soft breaks"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable typographer support"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable math expressions"
|
||||
msgstr ""
|
||||
|
||||
@@ -1347,6 +1459,9 @@ msgstr ""
|
||||
msgid "Enable multimarkdown table extension"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable Fountain syntax support"
|
||||
msgstr ""
|
||||
|
||||
msgid "Show tray icon"
|
||||
msgstr ""
|
||||
|
||||
@@ -1368,6 +1483,9 @@ msgstr ""
|
||||
msgid "Editor font size"
|
||||
msgstr ""
|
||||
|
||||
msgid "Editor font"
|
||||
msgstr ""
|
||||
|
||||
msgid "Editor font family"
|
||||
msgstr ""
|
||||
|
||||
@@ -1409,36 +1527,34 @@ msgid ""
|
||||
"If none is provided it will try to auto-detect the default editor."
|
||||
msgstr ""
|
||||
|
||||
msgid "Show advanced options"
|
||||
msgid "Page size for PDF export"
|
||||
msgstr ""
|
||||
|
||||
msgid "Synchronisation target"
|
||||
msgid "A4"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"The target to synchonise to. Each sync target may have additional parameters "
|
||||
"which are named as `sync.NUM.NAME` (all documented below)."
|
||||
msgid "Letter"
|
||||
msgstr ""
|
||||
|
||||
msgid "Directory to synchronise with (absolute path)"
|
||||
msgid "A3"
|
||||
msgstr ""
|
||||
|
||||
msgid "Nextcloud WebDAV URL"
|
||||
msgid "A5"
|
||||
msgstr ""
|
||||
|
||||
msgid "Nextcloud username"
|
||||
msgid "Tabloid"
|
||||
msgstr ""
|
||||
|
||||
msgid "Nextcloud password"
|
||||
msgid "Legal"
|
||||
msgstr ""
|
||||
|
||||
msgid "WebDAV URL"
|
||||
msgid "Page orientation for PDF export"
|
||||
msgstr ""
|
||||
|
||||
msgid "WebDAV username"
|
||||
msgid "Portrait"
|
||||
msgstr ""
|
||||
|
||||
msgid "WebDAV password"
|
||||
msgid "Landscape"
|
||||
msgstr ""
|
||||
|
||||
msgid "Custom TLS certificates"
|
||||
@@ -1454,6 +1570,16 @@ msgstr ""
|
||||
msgid "Ignore TLS certificate errors"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"Fail-safe: Do not wipe out local data when sync target is empty (often the "
|
||||
"result of a misconfiguration or bug)"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"Specify the port that should be used by the API server. If not set, a "
|
||||
"default will be used."
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable note history"
|
||||
msgstr ""
|
||||
|
||||
@@ -1489,6 +1615,12 @@ msgstr ""
|
||||
msgid "Application"
|
||||
msgstr ""
|
||||
|
||||
msgid "Encryption"
|
||||
msgstr ""
|
||||
|
||||
msgid "Web Clipper"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "The tag \"%s\" already exists. Please choose a different name."
|
||||
msgstr ""
|
||||
@@ -1502,7 +1634,10 @@ msgstr ""
|
||||
msgid "Joplin Export Directory"
|
||||
msgstr ""
|
||||
|
||||
msgid "Evernote Export File"
|
||||
msgid "Evernote Export File (as Markdown)"
|
||||
msgstr ""
|
||||
|
||||
msgid "Evernote Export File (as HTML)"
|
||||
msgstr ""
|
||||
|
||||
msgid "Json Export Directory"
|
||||
@@ -1540,6 +1675,12 @@ msgstr ""
|
||||
msgid "Items that cannot be synchronised"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"These items will remain on the device but will not be uploaded to the sync "
|
||||
"target. In order to find these items, either search for the title or the ID "
|
||||
"(which is displayed in brackets above)."
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s (%s) could not be uploaded: %s"
|
||||
msgstr ""
|
||||
@@ -1548,10 +1689,13 @@ msgstr ""
|
||||
msgid "Item \"%s\" could not be downloaded: %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Items that cannot be decrypted"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"These items will remain on the device but will not be uploaded to the sync "
|
||||
"target. In order to find these items, either search for the title or the ID "
|
||||
"(which is displayed in brackets above)."
|
||||
"Joplin failed to decrypt these items multiple times, possibly because they "
|
||||
"are corrupted or too large. These items will remain on the device but Joplin "
|
||||
"will no longer attempt to decrypt them."
|
||||
msgstr ""
|
||||
|
||||
msgid "Sync status (synced items / total items)"
|
||||
@@ -1593,24 +1737,18 @@ msgstr ""
|
||||
msgid "Your permission to use your camera is required."
|
||||
msgstr ""
|
||||
|
||||
msgid "You currently have no notebooks."
|
||||
msgstr ""
|
||||
|
||||
msgid "Create a notebook"
|
||||
msgstr ""
|
||||
|
||||
msgid "There are currently no notes. Create one by clicking on the (+) button."
|
||||
msgstr ""
|
||||
|
||||
msgid "Delete these notes?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Log"
|
||||
msgstr ""
|
||||
|
||||
msgid "Export Debug Report"
|
||||
msgstr ""
|
||||
|
||||
msgid "Encryption Config"
|
||||
msgstr ""
|
||||
|
||||
msgid "Configuration"
|
||||
msgstr ""
|
||||
|
||||
msgid "Move to notebook..."
|
||||
msgstr ""
|
||||
|
||||
@@ -1633,7 +1771,20 @@ msgstr ""
|
||||
msgid "Confirm"
|
||||
msgstr ""
|
||||
|
||||
msgid "Cancel synchronisation"
|
||||
#, javascript-format
|
||||
msgid "Notebook: %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Encrypted notebooks cannot be renamed"
|
||||
msgstr ""
|
||||
|
||||
msgid "New Notebook"
|
||||
msgstr ""
|
||||
|
||||
msgid "Configuration"
|
||||
msgstr ""
|
||||
|
||||
msgid "All notes"
|
||||
msgstr ""
|
||||
|
||||
msgid "Checking... Please wait."
|
||||
@@ -1669,6 +1820,46 @@ msgstr ""
|
||||
msgid "Type new tags or select from list"
|
||||
msgstr ""
|
||||
|
||||
msgid "Warning"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"In order to use file system synchronisation your permission to write to "
|
||||
"external storage is required."
|
||||
msgstr ""
|
||||
|
||||
msgid "Encryption Config"
|
||||
msgstr ""
|
||||
|
||||
msgid "Tools"
|
||||
msgstr ""
|
||||
|
||||
msgid "Sync Status"
|
||||
msgstr ""
|
||||
|
||||
msgid "Log"
|
||||
msgstr ""
|
||||
|
||||
msgid "Creating report..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Export Debug Report"
|
||||
msgstr ""
|
||||
|
||||
msgid "Fixing search index..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Fix search index"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"Use this to rebuild the search index if there is a problem with search. It "
|
||||
"may take a long time depending on the number of notes."
|
||||
msgstr ""
|
||||
|
||||
msgid "More information"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"To work correctly, the app needs the following permissions. Please enable "
|
||||
"them in your phone settings, in Apps > Joplin > Permissions"
|
||||
@@ -1716,6 +1907,9 @@ msgstr ""
|
||||
msgid "Password cannot be empty"
|
||||
msgstr ""
|
||||
|
||||
msgid "Confirm password cannot be empty"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable"
|
||||
msgstr ""
|
||||
|
||||
@@ -1726,6 +1920,9 @@ msgstr ""
|
||||
msgid "Edit notebook"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enter notebook title"
|
||||
msgstr ""
|
||||
|
||||
msgid "Show all"
|
||||
msgstr ""
|
||||
|
||||
@@ -1749,10 +1946,30 @@ msgstr ""
|
||||
msgid "The Joplin mobile app does not currently support this type of link: %s"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Links with protocol \"%s\" are not supported"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Unsupported image type: %s"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Updated: %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "View on map"
|
||||
msgstr ""
|
||||
|
||||
msgid "Go to source URL"
|
||||
msgstr ""
|
||||
|
||||
msgid "Attach..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Choose an option"
|
||||
msgstr ""
|
||||
|
||||
msgid "Take photo"
|
||||
msgstr ""
|
||||
|
||||
@@ -1771,22 +1988,16 @@ msgstr ""
|
||||
msgid "Convert to todo"
|
||||
msgstr ""
|
||||
|
||||
msgid "Hide metadata"
|
||||
msgid "Properties"
|
||||
msgstr ""
|
||||
|
||||
msgid "Show metadata"
|
||||
msgstr ""
|
||||
|
||||
msgid "View on map"
|
||||
msgstr ""
|
||||
|
||||
msgid "Go to source URL"
|
||||
msgid "Add body"
|
||||
msgstr ""
|
||||
|
||||
msgid "Edit"
|
||||
msgstr ""
|
||||
|
||||
msgid "Delete notebook"
|
||||
msgid "Add title"
|
||||
msgstr ""
|
||||
|
||||
msgid "Login with OneDrive"
|
||||
@@ -1794,14 +2005,3 @@ msgstr ""
|
||||
|
||||
msgid "Search"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"Click on the (+) button to create a new note or notebook. Click on the side "
|
||||
"menu to access your existing notebooks."
|
||||
msgstr ""
|
||||
|
||||
msgid "You currently have no notebook. Create one by clicking on (+) button."
|
||||
msgstr ""
|
||||
|
||||
msgid "Welcome"
|
||||
msgstr ""
|
||||
|
@@ -13,7 +13,7 @@ msgstr ""
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Generator: Poedit 2.2.1\n"
|
||||
"X-Generator: Poedit 2.2.3\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
|
||||
msgid "To delete a tag, untag the associated notes."
|
||||
@@ -129,6 +129,12 @@ msgstr ""
|
||||
msgid "Operation cancelled"
|
||||
msgstr ""
|
||||
|
||||
msgid "Confirm password:"
|
||||
msgstr ""
|
||||
|
||||
msgid "Passwords do not match!"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"Starting decryption... Please wait as it may take several minutes depending "
|
||||
"on how much there is to decrypt."
|
||||
@@ -161,16 +167,6 @@ msgstr ""
|
||||
msgid "Note does not exist: \"%s\". Create it?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Starting to edit note. Close the editor to get back to the prompt."
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Error opening note in editor: %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Note has been saved."
|
||||
msgstr ""
|
||||
|
||||
msgid "Exits the application."
|
||||
msgstr ""
|
||||
|
||||
@@ -354,6 +350,23 @@ msgstr ""
|
||||
msgid "Searches for the given <pattern> in all the notes."
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid ""
|
||||
"Start, stop or check the API server. To specify on which port it should run, "
|
||||
"set the api.port config variable. Commands are (%s)."
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Server is already running on port %d"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Server is running on port %d"
|
||||
msgstr ""
|
||||
|
||||
msgid "Server is not running."
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid ""
|
||||
"Sets the property <name> of the given <note> to the given [value]. Possible "
|
||||
@@ -420,9 +433,10 @@ msgid "Cancelling... Please wait."
|
||||
msgstr ""
|
||||
|
||||
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)."
|
||||
"<tag-command> can be \"add\", \"remove\", \"list\", or \"notetags\" to "
|
||||
"assign or remove [tag] from [note], to list notes associated with [tag], or "
|
||||
"to list tags associated with [note]. The command `tag list` can be used to "
|
||||
"list all the tags (use -l for long option)."
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
@@ -514,51 +528,8 @@ 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 ""
|
||||
|
||||
msgid "PDF File"
|
||||
msgstr ""
|
||||
|
||||
msgid "Synchronisation status"
|
||||
msgstr "Synchronization status"
|
||||
|
||||
msgid "New note"
|
||||
msgstr ""
|
||||
|
||||
msgid "New to-do"
|
||||
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)"
|
||||
msgid "Could not export notes: %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "&File"
|
||||
@@ -573,6 +544,9 @@ msgstr ""
|
||||
msgid "Check for updates..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Templates"
|
||||
msgstr ""
|
||||
|
||||
msgid "Import"
|
||||
msgstr ""
|
||||
|
||||
@@ -616,12 +590,18 @@ msgstr ""
|
||||
msgid "Link"
|
||||
msgstr ""
|
||||
|
||||
msgid "Code"
|
||||
msgstr ""
|
||||
|
||||
msgid "Insert Date Time"
|
||||
msgstr ""
|
||||
|
||||
msgid "Edit in external editor"
|
||||
msgstr ""
|
||||
|
||||
msgid "Tags"
|
||||
msgstr ""
|
||||
|
||||
msgid "Search in all the notes"
|
||||
msgstr "Search in all notes"
|
||||
|
||||
@@ -634,6 +614,12 @@ msgstr ""
|
||||
msgid "Toggle sidebar"
|
||||
msgstr ""
|
||||
|
||||
msgid "Layout button sequence"
|
||||
msgstr ""
|
||||
|
||||
msgid "Toggle note list"
|
||||
msgstr ""
|
||||
|
||||
msgid "Toggle editor layout"
|
||||
msgstr ""
|
||||
|
||||
@@ -649,9 +635,15 @@ msgstr ""
|
||||
msgid "Website and documentation"
|
||||
msgstr ""
|
||||
|
||||
msgid "Joplin Forum"
|
||||
msgstr ""
|
||||
|
||||
msgid "Make a donation"
|
||||
msgstr ""
|
||||
|
||||
msgid "Toggle development tools"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Open %s"
|
||||
msgstr ""
|
||||
@@ -689,6 +681,9 @@ msgstr ""
|
||||
msgid "No"
|
||||
msgstr ""
|
||||
|
||||
msgid "Full Release Notes"
|
||||
msgstr ""
|
||||
|
||||
msgid "Token has been copied to the clipboard!"
|
||||
msgstr ""
|
||||
|
||||
@@ -751,6 +746,9 @@ msgstr ""
|
||||
"This authorization token is only needed to allow third-party applications to "
|
||||
"access Joplin."
|
||||
|
||||
msgid "This will open a new screen. Save your current changes?"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Notes and settings are stored in: %s"
|
||||
msgstr ""
|
||||
@@ -761,6 +759,9 @@ msgstr "Check synchronization configuration"
|
||||
msgid "Browse..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Back"
|
||||
msgstr ""
|
||||
|
||||
msgid "Apply"
|
||||
msgstr ""
|
||||
|
||||
@@ -839,8 +840,8 @@ msgstr ""
|
||||
"they will eventually be downloaded via synchronization."
|
||||
|
||||
msgid ""
|
||||
"For more information about End-To-End Encryption (E2EE) and advices on how "
|
||||
"to enable it please check the documentation:"
|
||||
"For more information about End-To-End Encryption (E2EE) and advice on how to "
|
||||
"enable it please check the documentation:"
|
||||
msgstr ""
|
||||
|
||||
msgid "Status"
|
||||
@@ -849,10 +850,16 @@ msgstr ""
|
||||
msgid "Encryption is:"
|
||||
msgstr ""
|
||||
|
||||
msgid "Usage"
|
||||
msgid "Firefox Extension"
|
||||
msgstr ""
|
||||
|
||||
msgid "Back"
|
||||
msgid "Chrome Web Store"
|
||||
msgstr ""
|
||||
|
||||
msgid "Get it now:"
|
||||
msgstr ""
|
||||
|
||||
msgid "Usage"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
@@ -872,9 +879,6 @@ msgstr ""
|
||||
msgid "Add or remove tags:"
|
||||
msgstr ""
|
||||
|
||||
msgid "Separate each tag by a comma."
|
||||
msgstr ""
|
||||
|
||||
msgid "Rename notebook:"
|
||||
msgstr ""
|
||||
|
||||
@@ -884,6 +888,18 @@ msgstr ""
|
||||
msgid "Set alarm:"
|
||||
msgstr ""
|
||||
|
||||
msgid "Template file:"
|
||||
msgstr ""
|
||||
|
||||
msgid "New note"
|
||||
msgstr ""
|
||||
|
||||
msgid "New to-do"
|
||||
msgstr ""
|
||||
|
||||
msgid "New notebook"
|
||||
msgstr ""
|
||||
|
||||
msgid "Layout"
|
||||
msgstr ""
|
||||
|
||||
@@ -896,7 +912,7 @@ msgstr "Some items cannot be synchronized."
|
||||
msgid "View them now"
|
||||
msgstr ""
|
||||
|
||||
msgid "Some items cannot be decrypted."
|
||||
msgid "One or more master keys need a password."
|
||||
msgstr ""
|
||||
|
||||
msgid "Set the password"
|
||||
@@ -918,6 +934,9 @@ msgstr ""
|
||||
msgid "Note History"
|
||||
msgstr ""
|
||||
|
||||
msgid "Markup"
|
||||
msgstr ""
|
||||
|
||||
msgid "Previous versions of this note"
|
||||
msgstr ""
|
||||
|
||||
@@ -931,6 +950,10 @@ msgstr ""
|
||||
msgid "This note has no history"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Unsupported link or message: %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Restore"
|
||||
msgstr ""
|
||||
|
||||
@@ -959,10 +982,6 @@ msgstr ""
|
||||
msgid "This attachment is not downloaded or not decrypted yet."
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Unsupported link or message: %s"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid ""
|
||||
"This note has no content. Click on \"%s\" to toggle the editor and edit the "
|
||||
@@ -972,6 +991,13 @@ msgstr ""
|
||||
msgid "Only one note can be printed or exported to PDF at a time."
|
||||
msgstr ""
|
||||
|
||||
msgid "PDF File"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Error opening note in editor: %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "strong text"
|
||||
msgstr ""
|
||||
|
||||
@@ -987,9 +1013,6 @@ msgstr ""
|
||||
msgid "Attach file"
|
||||
msgstr ""
|
||||
|
||||
msgid "Tags"
|
||||
msgstr ""
|
||||
|
||||
msgid "Set alarm"
|
||||
msgstr ""
|
||||
|
||||
@@ -1000,9 +1023,6 @@ msgstr ""
|
||||
msgid "Hyperlink"
|
||||
msgstr ""
|
||||
|
||||
msgid "Code"
|
||||
msgstr ""
|
||||
|
||||
msgid "Numbered List"
|
||||
msgstr ""
|
||||
|
||||
@@ -1052,10 +1072,7 @@ msgstr ""
|
||||
msgid "Synchronisation Status"
|
||||
msgstr "Synchronization Status"
|
||||
|
||||
msgid "Encryption Options"
|
||||
msgstr ""
|
||||
|
||||
msgid "Clipper Options"
|
||||
msgid "Remove"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
@@ -1065,6 +1082,9 @@ msgid ""
|
||||
"All notes and sub-notebooks within this notebook will also be deleted."
|
||||
msgstr ""
|
||||
|
||||
msgid "Delete"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Remove tag \"%s\" from all notes?"
|
||||
msgstr ""
|
||||
@@ -1072,7 +1092,7 @@ msgstr ""
|
||||
msgid "Remove this search from the sidebar?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Delete"
|
||||
msgid "New sub-notebook"
|
||||
msgstr ""
|
||||
|
||||
msgid "Rename"
|
||||
@@ -1086,12 +1106,15 @@ msgid "Decrypting items: %d/%d"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Fetching resources: %d"
|
||||
msgid "Fetching resources: %d/%d"
|
||||
msgstr ""
|
||||
|
||||
msgid "Please select where the sync status should be exported to"
|
||||
msgstr ""
|
||||
|
||||
msgid "Retry"
|
||||
msgstr ""
|
||||
|
||||
msgid "Add or remove tags"
|
||||
msgstr ""
|
||||
|
||||
@@ -1232,14 +1255,6 @@ msgstr ""
|
||||
msgid "In progress"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Synchronisation is already in progress. State: %s"
|
||||
msgstr "Synchronization is already in progress. State: %s"
|
||||
|
||||
msgid ""
|
||||
"Unknown item type downloaded - please upgrade Joplin to the latest version"
|
||||
msgstr ""
|
||||
|
||||
msgid "Encrypted"
|
||||
msgstr ""
|
||||
|
||||
@@ -1283,6 +1298,70 @@ msgid ""
|
||||
"more details: %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Keyboard Mode"
|
||||
msgstr ""
|
||||
|
||||
msgid "Default"
|
||||
msgstr ""
|
||||
|
||||
msgid "Emacs"
|
||||
msgstr ""
|
||||
|
||||
msgid "Vim"
|
||||
msgstr ""
|
||||
|
||||
msgid "Synchronisation target"
|
||||
msgstr "Synchronization target"
|
||||
|
||||
msgid ""
|
||||
"The target to synchonise to. Each sync target may have additional parameters "
|
||||
"which are named as `sync.NUM.NAME` (all documented below)."
|
||||
msgstr ""
|
||||
"The target to synchonize to. Each sync target may have additional parameters "
|
||||
"which are named as `sync.NUM.NAME` (all documented below)."
|
||||
|
||||
msgid "Directory to synchronise with (absolute path)"
|
||||
msgstr "Directory to synchronize with (absolute path)"
|
||||
|
||||
msgid "Nextcloud WebDAV URL"
|
||||
msgstr ""
|
||||
|
||||
msgid "Nextcloud username"
|
||||
msgstr ""
|
||||
|
||||
msgid "Nextcloud password"
|
||||
msgstr ""
|
||||
|
||||
msgid "WebDAV URL"
|
||||
msgstr ""
|
||||
|
||||
msgid "WebDAV username"
|
||||
msgstr ""
|
||||
|
||||
msgid "WebDAV password"
|
||||
msgstr ""
|
||||
|
||||
msgid "Attachment download behaviour"
|
||||
msgstr "Attachment download behavior"
|
||||
|
||||
msgid ""
|
||||
"In \"Manual\" mode, attachments are downloaded only when you click on them. "
|
||||
"In \"Auto\", they are downloaded when you open the note. In \"Always\", all "
|
||||
"the attachments are downloaded whether you open the note or not."
|
||||
msgstr ""
|
||||
|
||||
msgid "Always"
|
||||
msgstr ""
|
||||
|
||||
msgid "Manual"
|
||||
msgstr ""
|
||||
|
||||
msgid "Auto"
|
||||
msgstr ""
|
||||
|
||||
msgid "Max concurrent connections"
|
||||
msgstr ""
|
||||
|
||||
msgid "Language"
|
||||
msgstr ""
|
||||
|
||||
@@ -1301,6 +1380,38 @@ msgstr ""
|
||||
msgid "Dark"
|
||||
msgstr ""
|
||||
|
||||
msgid "Dracula"
|
||||
msgstr ""
|
||||
|
||||
msgid "Solarised Light"
|
||||
msgstr "Solarized Light"
|
||||
|
||||
msgid "Solarised Dark"
|
||||
msgstr "Solarized Dark"
|
||||
|
||||
msgid "Nord"
|
||||
msgstr ""
|
||||
|
||||
msgid "Show note counts"
|
||||
msgstr ""
|
||||
|
||||
msgid "Editor"
|
||||
msgstr ""
|
||||
|
||||
msgid "Viewer"
|
||||
msgstr ""
|
||||
|
||||
msgid "Split View"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s / %s / %s"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s / %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Uncompleted to-dos on top"
|
||||
msgstr ""
|
||||
|
||||
@@ -1334,6 +1445,9 @@ msgstr ""
|
||||
msgid "Enable soft breaks"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable typographer support"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable math expressions"
|
||||
msgstr ""
|
||||
|
||||
@@ -1367,6 +1481,9 @@ msgstr ""
|
||||
msgid "Enable multimarkdown table extension"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable Fountain syntax support"
|
||||
msgstr ""
|
||||
|
||||
msgid "Show tray icon"
|
||||
msgstr ""
|
||||
|
||||
@@ -1391,6 +1508,9 @@ msgstr ""
|
||||
msgid "Editor font size"
|
||||
msgstr ""
|
||||
|
||||
msgid "Editor font"
|
||||
msgstr ""
|
||||
|
||||
msgid "Editor font family"
|
||||
msgstr ""
|
||||
|
||||
@@ -1432,38 +1552,34 @@ msgid ""
|
||||
"If none is provided it will try to auto-detect the default editor."
|
||||
msgstr ""
|
||||
|
||||
msgid "Show advanced options"
|
||||
msgid "Page size for PDF export"
|
||||
msgstr ""
|
||||
|
||||
msgid "Synchronisation target"
|
||||
msgstr "Synchronization target"
|
||||
|
||||
msgid ""
|
||||
"The target to synchonise to. Each sync target may have additional parameters "
|
||||
"which are named as `sync.NUM.NAME` (all documented below)."
|
||||
msgstr ""
|
||||
"The target to synchonize to. Each sync target may have additional parameters "
|
||||
"which are named as `sync.NUM.NAME` (all documented below)."
|
||||
|
||||
msgid "Directory to synchronise with (absolute path)"
|
||||
msgstr "Directory to synchronize with (absolute path)"
|
||||
|
||||
msgid "Nextcloud WebDAV URL"
|
||||
msgid "A4"
|
||||
msgstr ""
|
||||
|
||||
msgid "Nextcloud username"
|
||||
msgid "Letter"
|
||||
msgstr ""
|
||||
|
||||
msgid "Nextcloud password"
|
||||
msgid "A3"
|
||||
msgstr ""
|
||||
|
||||
msgid "WebDAV URL"
|
||||
msgid "A5"
|
||||
msgstr ""
|
||||
|
||||
msgid "WebDAV username"
|
||||
msgid "Tabloid"
|
||||
msgstr ""
|
||||
|
||||
msgid "WebDAV password"
|
||||
msgid "Legal"
|
||||
msgstr ""
|
||||
|
||||
msgid "Page orientation for PDF export"
|
||||
msgstr ""
|
||||
|
||||
msgid "Portrait"
|
||||
msgstr ""
|
||||
|
||||
msgid "Landscape"
|
||||
msgstr ""
|
||||
|
||||
msgid "Custom TLS certificates"
|
||||
@@ -1479,6 +1595,16 @@ msgstr ""
|
||||
msgid "Ignore TLS certificate errors"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"Fail-safe: Do not wipe out local data when sync target is empty (often the "
|
||||
"result of a misconfiguration or bug)"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"Specify the port that should be used by the API server. If not set, a "
|
||||
"default will be used."
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable note history"
|
||||
msgstr ""
|
||||
|
||||
@@ -1514,6 +1640,12 @@ msgstr ""
|
||||
msgid "Application"
|
||||
msgstr ""
|
||||
|
||||
msgid "Encryption"
|
||||
msgstr ""
|
||||
|
||||
msgid "Web Clipper"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "The tag \"%s\" already exists. Please choose a different name."
|
||||
msgstr ""
|
||||
@@ -1527,7 +1659,10 @@ msgstr ""
|
||||
msgid "Joplin Export Directory"
|
||||
msgstr ""
|
||||
|
||||
msgid "Evernote Export File"
|
||||
msgid "Evernote Export File (as Markdown)"
|
||||
msgstr ""
|
||||
|
||||
msgid "Evernote Export File (as HTML)"
|
||||
msgstr ""
|
||||
|
||||
msgid "Json Export Directory"
|
||||
@@ -1565,6 +1700,12 @@ msgstr ""
|
||||
msgid "Items that cannot be synchronised"
|
||||
msgstr "Items that cannot be synchronized"
|
||||
|
||||
msgid ""
|
||||
"These items will remain on the device but will not be uploaded to the sync "
|
||||
"target. In order to find these items, either search for the title or the ID "
|
||||
"(which is displayed in brackets above)."
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s (%s) could not be uploaded: %s"
|
||||
msgstr ""
|
||||
@@ -1573,10 +1714,13 @@ msgstr ""
|
||||
msgid "Item \"%s\" could not be downloaded: %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Items that cannot be decrypted"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"These items will remain on the device but will not be uploaded to the sync "
|
||||
"target. In order to find these items, either search for the title or the ID "
|
||||
"(which is displayed in brackets above)."
|
||||
"Joplin failed to decrypt these items multiple times, possibly because they "
|
||||
"are corrupted or too large. These items will remain on the device but Joplin "
|
||||
"will no longer attempt to decrypt them."
|
||||
msgstr ""
|
||||
|
||||
msgid "Sync status (synced items / total items)"
|
||||
@@ -1606,7 +1750,7 @@ msgid "%s: %d notes"
|
||||
msgstr ""
|
||||
|
||||
msgid "Coming alarms"
|
||||
msgstr ""
|
||||
msgstr "Scheduled alarms"
|
||||
|
||||
#, javascript-format
|
||||
msgid "On %s: %s"
|
||||
@@ -1618,24 +1762,18 @@ msgstr ""
|
||||
msgid "Your permission to use your camera is required."
|
||||
msgstr ""
|
||||
|
||||
msgid "You currently have no notebooks."
|
||||
msgstr ""
|
||||
|
||||
msgid "Create a notebook"
|
||||
msgstr ""
|
||||
|
||||
msgid "There are currently no notes. Create one by clicking on the (+) button."
|
||||
msgstr ""
|
||||
|
||||
msgid "Delete these notes?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Log"
|
||||
msgstr ""
|
||||
|
||||
msgid "Export Debug Report"
|
||||
msgstr ""
|
||||
|
||||
msgid "Encryption Config"
|
||||
msgstr ""
|
||||
|
||||
msgid "Configuration"
|
||||
msgstr ""
|
||||
|
||||
msgid "Move to notebook..."
|
||||
msgstr ""
|
||||
|
||||
@@ -1658,8 +1796,21 @@ msgstr ""
|
||||
msgid "Confirm"
|
||||
msgstr ""
|
||||
|
||||
msgid "Cancel synchronisation"
|
||||
msgstr "Cancel synchronization"
|
||||
#, javascript-format
|
||||
msgid "Notebook: %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Encrypted notebooks cannot be renamed"
|
||||
msgstr ""
|
||||
|
||||
msgid "New Notebook"
|
||||
msgstr ""
|
||||
|
||||
msgid "Configuration"
|
||||
msgstr ""
|
||||
|
||||
msgid "All notes"
|
||||
msgstr ""
|
||||
|
||||
msgid "Checking... Please wait."
|
||||
msgstr ""
|
||||
@@ -1699,6 +1850,46 @@ msgstr ""
|
||||
msgid "Type new tags or select from list"
|
||||
msgstr ""
|
||||
|
||||
msgid "Warning"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"In order to use file system synchronisation your permission to write to "
|
||||
"external storage is required."
|
||||
msgstr ""
|
||||
|
||||
msgid "Encryption Config"
|
||||
msgstr ""
|
||||
|
||||
msgid "Tools"
|
||||
msgstr ""
|
||||
|
||||
msgid "Sync Status"
|
||||
msgstr ""
|
||||
|
||||
msgid "Log"
|
||||
msgstr ""
|
||||
|
||||
msgid "Creating report..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Export Debug Report"
|
||||
msgstr ""
|
||||
|
||||
msgid "Fixing search index..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Fix search index"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"Use this to rebuild the search index if there is a problem with search. It "
|
||||
"may take a long time depending on the number of notes."
|
||||
msgstr ""
|
||||
|
||||
msgid "More information"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"To work correctly, the app needs the following permissions. Please enable "
|
||||
"them in your phone settings, in Apps > Joplin > Permissions"
|
||||
@@ -1748,6 +1939,9 @@ msgstr ""
|
||||
msgid "Password cannot be empty"
|
||||
msgstr ""
|
||||
|
||||
msgid "Confirm password cannot be empty"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable"
|
||||
msgstr ""
|
||||
|
||||
@@ -1758,6 +1952,9 @@ msgstr ""
|
||||
msgid "Edit notebook"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enter notebook title"
|
||||
msgstr ""
|
||||
|
||||
msgid "Show all"
|
||||
msgstr ""
|
||||
|
||||
@@ -1781,10 +1978,30 @@ msgstr ""
|
||||
msgid "The Joplin mobile app does not currently support this type of link: %s"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Links with protocol \"%s\" are not supported"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Unsupported image type: %s"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Updated: %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "View on map"
|
||||
msgstr ""
|
||||
|
||||
msgid "Go to source URL"
|
||||
msgstr ""
|
||||
|
||||
msgid "Attach..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Choose an option"
|
||||
msgstr ""
|
||||
|
||||
msgid "Take photo"
|
||||
msgstr ""
|
||||
|
||||
@@ -1803,22 +2020,16 @@ msgstr ""
|
||||
msgid "Convert to todo"
|
||||
msgstr ""
|
||||
|
||||
msgid "Hide metadata"
|
||||
msgid "Properties"
|
||||
msgstr ""
|
||||
|
||||
msgid "Show metadata"
|
||||
msgstr ""
|
||||
|
||||
msgid "View on map"
|
||||
msgstr ""
|
||||
|
||||
msgid "Go to source URL"
|
||||
msgid "Add body"
|
||||
msgstr ""
|
||||
|
||||
msgid "Edit"
|
||||
msgstr ""
|
||||
|
||||
msgid "Delete notebook"
|
||||
msgid "Add title"
|
||||
msgstr ""
|
||||
|
||||
msgid "Login with OneDrive"
|
||||
@@ -1827,13 +2038,11 @@ msgstr ""
|
||||
msgid "Search"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"Click on the (+) button to create a new note or notebook. Click on the side "
|
||||
"menu to access your existing notebooks."
|
||||
msgstr ""
|
||||
#~ msgid "Synchronisation is already in progress. State: %s"
|
||||
#~ msgstr "Synchronization is already in progress. State: %s"
|
||||
|
||||
msgid "You currently have no notebook. Create one by clicking on (+) button."
|
||||
msgstr ""
|
||||
#~ msgid "Synchronisation status"
|
||||
#~ msgstr "Synchronization status"
|
||||
|
||||
msgid "Welcome"
|
||||
msgstr ""
|
||||
#~ msgid "Cancel synchronisation"
|
||||
#~ msgstr "Cancel synchronization"
|
||||
|
2022
CliClient/locales/eo.po
Normal file
2022
CliClient/locales/eo.po
Normal file
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
2149
CliClient/locales/fa.po
Normal file
2149
CliClient/locales/fa.po
Normal file
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -136,6 +136,14 @@ msgstr "Introducir contrasinal mestre:"
|
||||
msgid "Operation cancelled"
|
||||
msgstr "Operación cancelada"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Confirm password:"
|
||||
msgstr "Introducir contrasinal mestre:"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Passwords do not match!"
|
||||
msgstr "O contrasinal non pode estar baleiro"
|
||||
|
||||
msgid ""
|
||||
"Starting decryption... Please wait as it may take several minutes depending "
|
||||
"on how much there is to decrypt."
|
||||
@@ -172,16 +180,6 @@ msgstr "Ningún caderno activo."
|
||||
msgid "Note does not exist: \"%s\". Create it?"
|
||||
msgstr "A nota non existe: «%s». Desexa creala?"
|
||||
|
||||
msgid "Starting to edit note. Close the editor to get back to the prompt."
|
||||
msgstr "Comezando a editar a nota. Peche o editor para volver ao diálogo."
|
||||
|
||||
#, javascript-format
|
||||
msgid "Error opening note in editor: %s"
|
||||
msgstr "Produciuse un erro abrindo a nota no editor: %s"
|
||||
|
||||
msgid "Note has been saved."
|
||||
msgstr "A nota foi gardada."
|
||||
|
||||
msgid "Exits the application."
|
||||
msgstr "Sae do aplicativo."
|
||||
|
||||
@@ -388,6 +386,23 @@ msgstr "Eliminar nota?"
|
||||
msgid "Searches for the given <pattern> in all the notes."
|
||||
msgstr "Busca o patrón <pattern> en todas as notas."
|
||||
|
||||
#, javascript-format
|
||||
msgid ""
|
||||
"Start, stop or check the API server. To specify on which port it should run, "
|
||||
"set the api.port config variable. Commands are (%s)."
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Server is already running on port %d"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Server is running on port %d"
|
||||
msgstr ""
|
||||
|
||||
msgid "Server is not running."
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid ""
|
||||
"Sets the property <name> of the given <note> to the given [value]. Possible "
|
||||
@@ -461,9 +476,10 @@ msgstr "Cancelando... Agarde."
|
||||
|
||||
#, 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)."
|
||||
"<tag-command> can be \"add\", \"remove\", \"list\", or \"notetags\" to "
|
||||
"assign or remove [tag] from [note], to list notes associated with [tag], or "
|
||||
"to list tags associated with [note]. The command `tag list` can be used to "
|
||||
"list all the tags (use -l for long option)."
|
||||
msgstr ""
|
||||
"<tag-command> pode ser «add», «remove» ou «list» para asignar ou eliminar "
|
||||
"[tag] da [note] ou para listar as notas asociadas con [tag]. A orde «list» "
|
||||
@@ -577,55 +593,10 @@ 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..."
|
||||
|
||||
msgid "PDF File"
|
||||
msgstr "Ficheiro PDF"
|
||||
|
||||
msgid "Synchronisation status"
|
||||
msgstr "Estado da sincronización"
|
||||
|
||||
msgid "New note"
|
||||
msgstr "Nova nota"
|
||||
|
||||
msgid "New to-do"
|
||||
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"
|
||||
msgid "Could not export notes: %s"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s %s (%s, %s)"
|
||||
msgstr "%s %s (%s, %s)"
|
||||
|
||||
#, fuzzy
|
||||
msgid "&File"
|
||||
msgstr "Ficheiro"
|
||||
@@ -639,6 +610,9 @@ msgstr ""
|
||||
msgid "Check for updates..."
|
||||
msgstr "Buscar actualizacións…"
|
||||
|
||||
msgid "Templates"
|
||||
msgstr ""
|
||||
|
||||
msgid "Import"
|
||||
msgstr "Importar"
|
||||
|
||||
@@ -684,12 +658,18 @@ msgstr ""
|
||||
msgid "Link"
|
||||
msgstr ""
|
||||
|
||||
msgid "Code"
|
||||
msgstr ""
|
||||
|
||||
msgid "Insert Date Time"
|
||||
msgstr ""
|
||||
|
||||
msgid "Edit in external editor"
|
||||
msgstr ""
|
||||
|
||||
msgid "Tags"
|
||||
msgstr "Etiquetas"
|
||||
|
||||
msgid "Search in all the notes"
|
||||
msgstr "Buscar en todas as notas"
|
||||
|
||||
@@ -704,6 +684,13 @@ msgstr "Vista"
|
||||
msgid "Toggle sidebar"
|
||||
msgstr ""
|
||||
|
||||
msgid "Layout button sequence"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Toggle note list"
|
||||
msgstr "Activar cifrado"
|
||||
|
||||
msgid "Toggle editor layout"
|
||||
msgstr "Cambiar a disposición do editor"
|
||||
|
||||
@@ -722,9 +709,16 @@ msgstr "Axuda"
|
||||
msgid "Website and documentation"
|
||||
msgstr "Sitio web e documentación"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Joplin Forum"
|
||||
msgstr "Sitio web de Joplin"
|
||||
|
||||
msgid "Make a donation"
|
||||
msgstr "Doar"
|
||||
|
||||
msgid "Toggle development tools"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Open %s"
|
||||
msgstr "Abrir %s"
|
||||
@@ -762,6 +756,9 @@ msgstr "Si"
|
||||
msgid "No"
|
||||
msgstr "Non"
|
||||
|
||||
msgid "Full Release Notes"
|
||||
msgstr ""
|
||||
|
||||
msgid "Token has been copied to the clipboard!"
|
||||
msgstr ""
|
||||
|
||||
@@ -823,6 +820,9 @@ msgid ""
|
||||
"access Joplin."
|
||||
msgstr ""
|
||||
|
||||
msgid "This will open a new screen. Save your current changes?"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Notes and settings are stored in: %s"
|
||||
msgstr "As notas e axustes gardáronse en: %s"
|
||||
@@ -833,6 +833,9 @@ msgstr "Comprobar a configuración da sincronización"
|
||||
msgid "Browse..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Back"
|
||||
msgstr "Anterior"
|
||||
|
||||
msgid "Apply"
|
||||
msgstr ""
|
||||
|
||||
@@ -914,8 +917,8 @@ msgstr ""
|
||||
"descargados pola sincronización."
|
||||
|
||||
msgid ""
|
||||
"For more information about End-To-End Encryption (E2EE) and advices on how "
|
||||
"to enable it please check the documentation:"
|
||||
"For more information about End-To-End Encryption (E2EE) and advice on how to "
|
||||
"enable it please check the documentation:"
|
||||
msgstr ""
|
||||
|
||||
msgid "Status"
|
||||
@@ -924,13 +927,19 @@ msgstr "Estado"
|
||||
msgid "Encryption is:"
|
||||
msgstr "O cifrado é:"
|
||||
|
||||
msgid "Firefox Extension"
|
||||
msgstr ""
|
||||
|
||||
msgid "Chrome Web Store"
|
||||
msgstr ""
|
||||
|
||||
msgid "Get it now:"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Usage"
|
||||
msgstr "Uso: %s"
|
||||
|
||||
msgid "Back"
|
||||
msgstr "Anterior"
|
||||
|
||||
#, javascript-format
|
||||
msgid ""
|
||||
"New notebook \"%s\" will be created and file \"%s\" will be imported into it"
|
||||
@@ -948,9 +957,6 @@ msgstr "Título do caderno:"
|
||||
msgid "Add or remove tags:"
|
||||
msgstr "Engadir ou eliminar etiquetas:"
|
||||
|
||||
msgid "Separate each tag by a comma."
|
||||
msgstr "Separar cada etiqueta por unha coma."
|
||||
|
||||
msgid "Rename notebook:"
|
||||
msgstr "Renomear caderno:"
|
||||
|
||||
@@ -961,6 +967,18 @@ msgstr "Renomear"
|
||||
msgid "Set alarm:"
|
||||
msgstr "Estabelecer alarma:"
|
||||
|
||||
msgid "Template file:"
|
||||
msgstr ""
|
||||
|
||||
msgid "New note"
|
||||
msgstr "Nova nota"
|
||||
|
||||
msgid "New to-do"
|
||||
msgstr "Nova tarefa"
|
||||
|
||||
msgid "New notebook"
|
||||
msgstr "Novo caderno"
|
||||
|
||||
msgid "Layout"
|
||||
msgstr "Disposición"
|
||||
|
||||
@@ -973,8 +991,9 @@ msgstr "Non é posíbel sincronizar algúns elementos."
|
||||
msgid "View them now"
|
||||
msgstr "Visualizar agora"
|
||||
|
||||
msgid "Some items cannot be decrypted."
|
||||
msgstr "Non é posíbel descifrar algúns elementos."
|
||||
#, fuzzy
|
||||
msgid "One or more master keys need a password."
|
||||
msgstr "Introducir contrasinal mestre:"
|
||||
|
||||
msgid "Set the password"
|
||||
msgstr "Estabelecer un contrasinal"
|
||||
@@ -996,6 +1015,9 @@ msgstr ""
|
||||
msgid "Note History"
|
||||
msgstr "Cadernos"
|
||||
|
||||
msgid "Markup"
|
||||
msgstr ""
|
||||
|
||||
msgid "Previous versions of this note"
|
||||
msgstr ""
|
||||
|
||||
@@ -1010,6 +1032,10 @@ msgstr ""
|
||||
msgid "This note has no history"
|
||||
msgstr "Esta nota foi modificada:"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Unsupported link or message: %s"
|
||||
msgstr "Ligazón ou mensaxe incompatíbeis: %s"
|
||||
|
||||
msgid "Restore"
|
||||
msgstr ""
|
||||
|
||||
@@ -1038,10 +1064,6 @@ 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"
|
||||
|
||||
#, javascript-format
|
||||
msgid ""
|
||||
"This note has no content. Click on \"%s\" to toggle the editor and edit the "
|
||||
@@ -1053,6 +1075,13 @@ msgstr ""
|
||||
msgid "Only one note can be printed or exported to PDF at a time."
|
||||
msgstr ""
|
||||
|
||||
msgid "PDF File"
|
||||
msgstr "Ficheiro PDF"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Error opening note in editor: %s"
|
||||
msgstr "Produciuse un erro abrindo a nota no editor: %s"
|
||||
|
||||
msgid "strong text"
|
||||
msgstr ""
|
||||
|
||||
@@ -1068,9 +1097,6 @@ msgstr ""
|
||||
msgid "Attach file"
|
||||
msgstr "Anexar un ficheiro"
|
||||
|
||||
msgid "Tags"
|
||||
msgstr "Etiquetas"
|
||||
|
||||
msgid "Set alarm"
|
||||
msgstr "Estabelecer alarma"
|
||||
|
||||
@@ -1081,9 +1107,6 @@ msgstr "%s: %s"
|
||||
msgid "Hyperlink"
|
||||
msgstr ""
|
||||
|
||||
msgid "Code"
|
||||
msgstr ""
|
||||
|
||||
msgid "Numbered List"
|
||||
msgstr ""
|
||||
|
||||
@@ -1134,12 +1157,8 @@ msgstr "Opcións"
|
||||
msgid "Synchronisation Status"
|
||||
msgstr "Estado da sincronización"
|
||||
|
||||
msgid "Encryption Options"
|
||||
msgstr "Opcións de cifrado"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Clipper Options"
|
||||
msgstr "Opcións xerais"
|
||||
msgid "Remove"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid ""
|
||||
@@ -1149,6 +1168,9 @@ msgid ""
|
||||
msgstr ""
|
||||
"Desexa eliminar o caderno? Tamén se eliminarán todas as notas deste caderno."
|
||||
|
||||
msgid "Delete"
|
||||
msgstr "Eliminar"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Remove tag \"%s\" from all notes?"
|
||||
msgstr "Desexa eliminar esta etiqueta de todas as notas?"
|
||||
@@ -1156,8 +1178,9 @@ 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"
|
||||
#, fuzzy
|
||||
msgid "New sub-notebook"
|
||||
msgstr "Novo caderno"
|
||||
|
||||
msgid "Rename"
|
||||
msgstr "Renomear"
|
||||
@@ -1167,15 +1190,18 @@ msgstr "Cadernos"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Decrypting items: %d/%d"
|
||||
msgstr "Elementos obtidos: %d/%d."
|
||||
msgstr "Elementos obtidos: %d/%d"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Fetching resources: %d"
|
||||
msgstr "Recursos: %d."
|
||||
msgid "Fetching resources: %d/%d"
|
||||
msgstr "Recursos: %d/%d"
|
||||
|
||||
msgid "Please select where the sync status should be exported to"
|
||||
msgstr "Seleccione onde exportar o estado da sincronización"
|
||||
|
||||
msgid "Retry"
|
||||
msgstr ""
|
||||
|
||||
msgid "Add or remove tags"
|
||||
msgstr "Engadir ou eliminar etiquetas"
|
||||
|
||||
@@ -1326,14 +1352,6 @@ msgstr "Inactivo"
|
||||
msgid "In progress"
|
||||
msgstr "En proceso"
|
||||
|
||||
#, javascript-format
|
||||
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"
|
||||
|
||||
@@ -1381,6 +1399,71 @@ msgid ""
|
||||
"more details: %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Keyboard Mode"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Default"
|
||||
msgstr "Predeterminado: %s"
|
||||
|
||||
msgid "Emacs"
|
||||
msgstr ""
|
||||
|
||||
msgid "Vim"
|
||||
msgstr ""
|
||||
|
||||
msgid "Synchronisation target"
|
||||
msgstr "Destino da sincronización"
|
||||
|
||||
msgid ""
|
||||
"The target to synchonise to. Each sync target may have additional parameters "
|
||||
"which are named as `sync.NUM.NAME` (all documented below)."
|
||||
msgstr ""
|
||||
"Destino co que sincronizar. Cada destino da sincronización pode ter "
|
||||
"parámetros adicionais que se chaman «sync.NUM.NAME» (documentados arriba)."
|
||||
|
||||
msgid "Directory to synchronise with (absolute path)"
|
||||
msgstr "Cartafol a sincronizar con (ruta absoluta)"
|
||||
|
||||
msgid "Nextcloud WebDAV URL"
|
||||
msgstr "URL de Nextcloud WebDAV"
|
||||
|
||||
msgid "Nextcloud username"
|
||||
msgstr "Usuario de Nextcloud"
|
||||
|
||||
msgid "Nextcloud password"
|
||||
msgstr "Contrasinal do Nextcloud"
|
||||
|
||||
msgid "WebDAV URL"
|
||||
msgstr "URL do WebDAV"
|
||||
|
||||
msgid "WebDAV username"
|
||||
msgstr "Usuario de WebDAV"
|
||||
|
||||
msgid "WebDAV password"
|
||||
msgstr "Contrasinal do WebDAV"
|
||||
|
||||
msgid "Attachment download behaviour"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"In \"Manual\" mode, attachments are downloaded only when you click on them. "
|
||||
"In \"Auto\", they are downloaded when you open the note. In \"Always\", all "
|
||||
"the attachments are downloaded whether you open the note or not."
|
||||
msgstr ""
|
||||
|
||||
msgid "Always"
|
||||
msgstr ""
|
||||
|
||||
msgid "Manual"
|
||||
msgstr ""
|
||||
|
||||
msgid "Auto"
|
||||
msgstr ""
|
||||
|
||||
msgid "Max concurrent connections"
|
||||
msgstr ""
|
||||
|
||||
msgid "Language"
|
||||
msgstr "Idioma"
|
||||
|
||||
@@ -1399,6 +1482,41 @@ msgstr "Claro"
|
||||
msgid "Dark"
|
||||
msgstr "Escuro"
|
||||
|
||||
msgid "Dracula"
|
||||
msgstr ""
|
||||
|
||||
msgid "Solarised Light"
|
||||
msgstr ""
|
||||
|
||||
msgid "Solarised Dark"
|
||||
msgstr ""
|
||||
|
||||
msgid "Nord"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Show note counts"
|
||||
msgstr "Mostrar a icona na bandexa"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Editor"
|
||||
msgstr "Edtar"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Viewer"
|
||||
msgstr "Vista"
|
||||
|
||||
msgid "Split View"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "%s / %s / %s"
|
||||
msgstr "%s = %s (%s)"
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s / %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Uncompleted to-dos on top"
|
||||
msgstr "Tarefas sen completar arriba"
|
||||
|
||||
@@ -1434,6 +1552,9 @@ msgstr "Cando se crea unha nova nota:"
|
||||
msgid "Enable soft breaks"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable typographer support"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Enable math expressions"
|
||||
msgstr "Activar cifrado"
|
||||
@@ -1468,6 +1589,9 @@ msgstr ""
|
||||
msgid "Enable multimarkdown table extension"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable Fountain syntax support"
|
||||
msgstr ""
|
||||
|
||||
msgid "Show tray icon"
|
||||
msgstr "Mostrar a icona na bandexa"
|
||||
|
||||
@@ -1490,6 +1614,10 @@ msgstr "Porcentaxe de ampliación"
|
||||
msgid "Editor font size"
|
||||
msgstr "Familia de tipos de letra do editor"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Editor font"
|
||||
msgstr "Familia de tipos de letra do editor"
|
||||
|
||||
msgid "Editor font family"
|
||||
msgstr "Familia de tipos de letra do editor"
|
||||
|
||||
@@ -1538,39 +1666,35 @@ msgstr ""
|
||||
"Editor a usar para abrir unha nota. Se non se indica ningún tentará detectar "
|
||||
"automaticamente o editor predeterminado."
|
||||
|
||||
msgid "Show advanced options"
|
||||
msgstr "Mostrar opcións avanzadas"
|
||||
|
||||
msgid "Synchronisation target"
|
||||
msgstr "Destino da sincronización"
|
||||
|
||||
msgid ""
|
||||
"The target to synchonise to. Each sync target may have additional parameters "
|
||||
"which are named as `sync.NUM.NAME` (all documented below)."
|
||||
msgid "Page size for PDF export"
|
||||
msgstr ""
|
||||
"Destino co que sincronizar. Cada destino da sincronización pode ter "
|
||||
"parámetros adicionais que se chaman «sync.NUM.NAME» (documentados arriba)."
|
||||
|
||||
msgid "Directory to synchronise with (absolute path)"
|
||||
msgstr "Cartafol a sincronizar con (ruta absoluta)"
|
||||
msgid "A4"
|
||||
msgstr ""
|
||||
|
||||
msgid "Nextcloud WebDAV URL"
|
||||
msgstr "URL de Nextcloud WebDAV"
|
||||
msgid "Letter"
|
||||
msgstr ""
|
||||
|
||||
msgid "Nextcloud username"
|
||||
msgstr "Usuario de Nextcloud"
|
||||
msgid "A3"
|
||||
msgstr ""
|
||||
|
||||
msgid "Nextcloud password"
|
||||
msgstr "Contrasinal do Nextcloud"
|
||||
msgid "A5"
|
||||
msgstr ""
|
||||
|
||||
msgid "WebDAV URL"
|
||||
msgstr "URL do WebDAV"
|
||||
msgid "Tabloid"
|
||||
msgstr ""
|
||||
|
||||
msgid "WebDAV username"
|
||||
msgstr "Usuario de WebDAV"
|
||||
msgid "Legal"
|
||||
msgstr ""
|
||||
|
||||
msgid "WebDAV password"
|
||||
msgstr "Contrasinal do WebDAV"
|
||||
msgid "Page orientation for PDF export"
|
||||
msgstr ""
|
||||
|
||||
msgid "Portrait"
|
||||
msgstr ""
|
||||
|
||||
msgid "Landscape"
|
||||
msgstr ""
|
||||
|
||||
msgid "Custom TLS certificates"
|
||||
msgstr ""
|
||||
@@ -1585,6 +1709,16 @@ msgstr ""
|
||||
msgid "Ignore TLS certificate errors"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"Fail-safe: Do not wipe out local data when sync target is empty (often the "
|
||||
"result of a misconfiguration or bug)"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"Specify the port that should be used by the API server. If not set, a "
|
||||
"default will be used."
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Enable note history"
|
||||
msgstr "Activar cifrado"
|
||||
@@ -1625,6 +1759,13 @@ msgstr ""
|
||||
msgid "Application"
|
||||
msgstr "Sae do aplicativo."
|
||||
|
||||
#, fuzzy
|
||||
msgid "Encryption"
|
||||
msgstr "O cifrado é:"
|
||||
|
||||
msgid "Web Clipper"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "The tag \"%s\" already exists. Please choose a different name."
|
||||
msgstr ""
|
||||
@@ -1638,7 +1779,12 @@ msgstr "Markdown"
|
||||
msgid "Joplin Export Directory"
|
||||
msgstr "Cartafol de exportación do Joplin"
|
||||
|
||||
msgid "Evernote Export File"
|
||||
#, fuzzy
|
||||
msgid "Evernote Export File (as Markdown)"
|
||||
msgstr "Ficheiro de exportación de Evernote"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Evernote Export File (as HTML)"
|
||||
msgstr "Ficheiro de exportación de Evernote"
|
||||
|
||||
#, fuzzy
|
||||
@@ -1679,14 +1825,6 @@ msgstr ""
|
||||
msgid "Items that cannot be synchronised"
|
||||
msgstr "Elementos que non se poden sincronizar"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "%s (%s) could not be uploaded: %s"
|
||||
msgstr "Non foi posíbel gardar o caderno: %s"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Item \"%s\" could not be downloaded: %s"
|
||||
msgstr "Non foi posíbel gardar o caderno: %s"
|
||||
|
||||
msgid ""
|
||||
"These items will remain on the device but will not be uploaded to the sync "
|
||||
"target. In order to find these items, either search for the title or the ID "
|
||||
@@ -1696,6 +1834,24 @@ msgstr ""
|
||||
"de sincronización. Co fin de atopar estes elementos pode buscalos polo "
|
||||
"título ou polo ID (mostrados entre corchetes arriba)."
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "%s (%s) could not be uploaded: %s"
|
||||
msgstr "Non foi posíbel gardar o caderno: %s"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Item \"%s\" could not be downloaded: %s"
|
||||
msgstr "Non foi posíbel gardar o caderno: %s"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Items that cannot be decrypted"
|
||||
msgstr "Elementos que non se poden sincronizar"
|
||||
|
||||
msgid ""
|
||||
"Joplin failed to decrypt these items multiple times, possibly because they "
|
||||
"are corrupted or too large. These items will remain on the device but Joplin "
|
||||
"will no longer attempt to decrypt them."
|
||||
msgstr ""
|
||||
|
||||
msgid "Sync status (synced items / total items)"
|
||||
msgstr "Estado da sincronización (elementos sincronizados / elementos totais)"
|
||||
|
||||
@@ -1735,24 +1891,20 @@ msgstr ""
|
||||
msgid "Your permission to use your camera is required."
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "You currently have no notebooks."
|
||||
msgstr "Ningún caderno activo."
|
||||
|
||||
#, fuzzy
|
||||
msgid "Create a notebook"
|
||||
msgstr "Crea un caderno novo."
|
||||
|
||||
msgid "There are currently no notes. Create one by clicking on the (+) button."
|
||||
msgstr "Non ten notas actualmente. Cree unha premendo no botón (+)."
|
||||
|
||||
msgid "Delete these notes?"
|
||||
msgstr "Desexa eliminar estas notas?"
|
||||
|
||||
msgid "Log"
|
||||
msgstr "Rexistro"
|
||||
|
||||
msgid "Export Debug Report"
|
||||
msgstr "Exportar informe de depuración"
|
||||
|
||||
msgid "Encryption Config"
|
||||
msgstr "Configuración de cifrado"
|
||||
|
||||
msgid "Configuration"
|
||||
msgstr "Configuración"
|
||||
|
||||
msgid "Move to notebook..."
|
||||
msgstr "Mover para o caderno..."
|
||||
|
||||
@@ -1777,8 +1929,24 @@ msgstr "Seleccionar data"
|
||||
msgid "Confirm"
|
||||
msgstr "Confirmar"
|
||||
|
||||
msgid "Cancel synchronisation"
|
||||
msgstr "Cancelar sincronización"
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Notebook: %s"
|
||||
msgstr "Cadernos"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Encrypted notebooks cannot be renamed"
|
||||
msgstr "Non é posíbel modificar elementos cifrados"
|
||||
|
||||
#, fuzzy
|
||||
msgid "New Notebook"
|
||||
msgstr "Novo caderno"
|
||||
|
||||
msgid "Configuration"
|
||||
msgstr "Configuración"
|
||||
|
||||
#, fuzzy
|
||||
msgid "All notes"
|
||||
msgstr "nota"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Checking... Please wait."
|
||||
@@ -1816,6 +1984,50 @@ msgstr "Etiquetas novas:"
|
||||
msgid "Type new tags or select from list"
|
||||
msgstr "Escriba etiquetas novas ou seleccione da lista"
|
||||
|
||||
msgid "Warning"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"In order to use file system synchronisation your permission to write to "
|
||||
"external storage is required."
|
||||
msgstr ""
|
||||
|
||||
msgid "Encryption Config"
|
||||
msgstr "Configuración de cifrado"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Tools"
|
||||
msgstr "Ferramentas"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Sync Status"
|
||||
msgstr "Estado"
|
||||
|
||||
msgid "Log"
|
||||
msgstr "Rexistro"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Creating report..."
|
||||
msgstr "Criando novo %s..."
|
||||
|
||||
msgid "Export Debug Report"
|
||||
msgstr "Exportar informe de depuración"
|
||||
|
||||
msgid "Fixing search index..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Fix search index"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"Use this to rebuild the search index if there is a problem with search. It "
|
||||
"may take a long time depending on the number of notes."
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "More information"
|
||||
msgstr "Configuración"
|
||||
|
||||
msgid ""
|
||||
"To work correctly, the app needs the following permissions. Please enable "
|
||||
"them in your phone settings, in Apps > Joplin > Permissions"
|
||||
@@ -1864,6 +2076,10 @@ msgstr "Contrasinal:"
|
||||
msgid "Password cannot be empty"
|
||||
msgstr "O contrasinal non pode estar baleiro"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Confirm password cannot be empty"
|
||||
msgstr "O contrasinal non pode estar baleiro"
|
||||
|
||||
msgid "Enable"
|
||||
msgstr "Activar"
|
||||
|
||||
@@ -1874,6 +2090,10 @@ msgstr "Non foi posíbel gardar o caderno: %s"
|
||||
msgid "Edit notebook"
|
||||
msgstr "Editar caderno"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Enter notebook title"
|
||||
msgstr "Título do caderno:"
|
||||
|
||||
msgid "Show all"
|
||||
msgstr "Mostrar todo"
|
||||
|
||||
@@ -1897,10 +2117,32 @@ msgstr ""
|
||||
msgid "The Joplin mobile app does not currently support this type of link: %s"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Links with protocol \"%s\" are not supported"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Unsupported image type: %s"
|
||||
msgstr "Tipo de imaxe incompatíbel: %s"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Updated: %s"
|
||||
msgstr "Actualizado: %d."
|
||||
|
||||
msgid "View on map"
|
||||
msgstr "Ver no mapa"
|
||||
|
||||
msgid "Go to source URL"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Attach..."
|
||||
msgstr "Buscar…"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Choose an option"
|
||||
msgstr "Mostrar opcións avanzadas"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Take photo"
|
||||
msgstr "Anexar foto"
|
||||
@@ -1920,23 +2162,18 @@ msgstr "Converter para nota"
|
||||
msgid "Convert to todo"
|
||||
msgstr "Converter para tarefa"
|
||||
|
||||
msgid "Hide metadata"
|
||||
msgstr "Ocultar metadados"
|
||||
msgid "Properties"
|
||||
msgstr ""
|
||||
|
||||
msgid "Show metadata"
|
||||
msgstr "Mostrar metadatos"
|
||||
|
||||
msgid "View on map"
|
||||
msgstr "Ver no mapa"
|
||||
|
||||
msgid "Go to source URL"
|
||||
msgid "Add body"
|
||||
msgstr ""
|
||||
|
||||
msgid "Edit"
|
||||
msgstr "Edtar"
|
||||
|
||||
msgid "Delete notebook"
|
||||
msgstr "Eliminar caderno"
|
||||
#, fuzzy
|
||||
msgid "Add title"
|
||||
msgstr "Sen título"
|
||||
|
||||
msgid "Login with OneDrive"
|
||||
msgstr "Acceder con OneDrive"
|
||||
@@ -1944,18 +2181,103 @@ msgstr "Acceder con OneDrive"
|
||||
msgid "Search"
|
||||
msgstr "Buscar"
|
||||
|
||||
msgid ""
|
||||
"Click on the (+) button to create a new note or notebook. Click on the side "
|
||||
"menu to access your existing notebooks."
|
||||
msgstr ""
|
||||
"Prema no botón (+) para crear unha nota ou caderno. Prema no menú lateral "
|
||||
"para acceder aos cadernos existentes."
|
||||
#~ msgid "Synchronisation is already in progress. State: %s"
|
||||
#~ msgstr "A sincronización xa está en proceso. Estado: %s"
|
||||
|
||||
msgid "You currently have no notebook. Create one by clicking on (+) button."
|
||||
msgstr "Non ten cadernos actualmente. Cree un premendo no botón (+)."
|
||||
#, fuzzy
|
||||
#~ msgid "Confirm master password:"
|
||||
#~ msgstr "Introducir contrasinal mestre:"
|
||||
|
||||
msgid "Welcome"
|
||||
msgstr "Benvido/a"
|
||||
#, fuzzy
|
||||
#~ msgid "Confirm password"
|
||||
#~ msgstr "Introducir contrasinal mestre:"
|
||||
|
||||
#, fuzzy
|
||||
#~ msgid "Missing required argument: note"
|
||||
#~ msgstr "Falta un argumento requirido: %s"
|
||||
|
||||
#~ msgid "Starting to edit note. Close the editor to get back to the prompt."
|
||||
#~ msgstr "Comezando a editar a nota. Peche o editor para volver ao diálogo."
|
||||
|
||||
#~ msgid "Note has been saved."
|
||||
#~ msgstr "A nota foi gardada."
|
||||
|
||||
#, fuzzy
|
||||
#~ msgid "Note title"
|
||||
#~ msgstr "Título do caderno:"
|
||||
|
||||
#, fuzzy
|
||||
#~ msgid "Note body"
|
||||
#~ msgstr "Cadernos"
|
||||
|
||||
#~ msgid "Importing from \"%s\" as \"%s\" format. Please wait..."
|
||||
#~ msgstr "Importando de «%s» como formato «%s». Agarde..."
|
||||
|
||||
#~ msgid "Synchronisation status"
|
||||
#~ msgstr "Estado da sincronización"
|
||||
|
||||
#~ msgid "Print"
|
||||
#~ msgstr "Imprimir"
|
||||
|
||||
#~ msgid "General Options"
|
||||
#~ msgstr "Opcións xerais"
|
||||
|
||||
#~ msgid "Encryption options"
|
||||
#~ msgstr "Opcións de cifrado"
|
||||
|
||||
#, fuzzy
|
||||
#~ msgid "Open template directory"
|
||||
#~ msgstr "Cartafol de exportación do Joplin"
|
||||
|
||||
#, fuzzy
|
||||
#~ msgid "Revision: %s (%s)"
|
||||
#~ msgstr "%s %s (%s)"
|
||||
|
||||
#~ msgid "%s %s (%s, %s)"
|
||||
#~ msgstr "%s %s (%s, %s)"
|
||||
|
||||
#~ msgid "Encryption Options"
|
||||
#~ msgstr "Opcións de cifrado"
|
||||
|
||||
#, fuzzy
|
||||
#~ msgid "Clipper Options"
|
||||
#~ msgstr "Opcións xerais"
|
||||
|
||||
#, fuzzy
|
||||
#~ msgid "Information"
|
||||
#~ msgstr "Configuración"
|
||||
|
||||
#~ msgid "Cancel synchronisation"
|
||||
#~ msgstr "Cancelar sincronización"
|
||||
|
||||
#~ msgid "Hide metadata"
|
||||
#~ msgstr "Ocultar metadados"
|
||||
|
||||
#~ msgid "Show metadata"
|
||||
#~ msgstr "Mostrar metadatos"
|
||||
|
||||
#~ msgid "Delete notebook"
|
||||
#~ msgstr "Eliminar caderno"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "Click on the (+) button to create a new note or notebook. Click on the "
|
||||
#~ "side menu to access your existing notebooks."
|
||||
#~ msgstr ""
|
||||
#~ "Prema no botón (+) para crear unha nota ou caderno. Prema no menú lateral "
|
||||
#~ "para acceder aos cadernos existentes."
|
||||
|
||||
#~ msgid ""
|
||||
#~ "You currently have no notebook. Create one by clicking on (+) button."
|
||||
#~ msgstr "Non ten cadernos actualmente. Cree un premendo no botón (+)."
|
||||
|
||||
#~ msgid "Welcome"
|
||||
#~ msgstr "Benvido/a"
|
||||
|
||||
#~ msgid "Separate each tag by a comma."
|
||||
#~ msgstr "Separar cada etiqueta por unha coma."
|
||||
|
||||
#~ msgid "Some items cannot be decrypted."
|
||||
#~ msgstr "Non é posíbel descifrar algúns elementos."
|
||||
|
||||
#~ msgid "%s (%s): %s"
|
||||
#~ msgstr "%s (%s): %s"
|
||||
@@ -1967,10 +2289,6 @@ msgstr "Benvido/a"
|
||||
#~ "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."
|
||||
|
||||
|
@@ -137,6 +137,12 @@ msgstr ""
|
||||
msgid "Operation cancelled"
|
||||
msgstr ""
|
||||
|
||||
msgid "Confirm password:"
|
||||
msgstr ""
|
||||
|
||||
msgid "Passwords do not match!"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"Starting decryption... Please wait as it may take several minutes depending "
|
||||
"on how much there is to decrypt."
|
||||
@@ -173,18 +179,6 @@ msgstr "Nema aktivne bilježnice."
|
||||
msgid "Note does not exist: \"%s\". Create it?"
|
||||
msgstr "Bilješka ne postoji: \"%s\". Napravi je?"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Starting to edit note. Close the editor to get back to the prompt."
|
||||
msgstr ""
|
||||
"Počinjem uređivati bilješku. Za povratak u naredbeni redak, zatvori uređivač."
|
||||
|
||||
#, javascript-format
|
||||
msgid "Error opening note in editor: %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Note has been saved."
|
||||
msgstr "Bilješka je spremljena."
|
||||
|
||||
msgid "Exits the application."
|
||||
msgstr "Izlaz iz aplikacije."
|
||||
|
||||
@@ -393,6 +387,23 @@ msgstr "Obrisati bilješku?"
|
||||
msgid "Searches for the given <pattern> in all the notes."
|
||||
msgstr "Pretražuje dati <pattern> u svim bilješkama."
|
||||
|
||||
#, javascript-format
|
||||
msgid ""
|
||||
"Start, stop or check the API server. To specify on which port it should run, "
|
||||
"set the api.port config variable. Commands are (%s)."
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Server is already running on port %d"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Server is running on port %d"
|
||||
msgstr ""
|
||||
|
||||
msgid "Server is not running."
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid ""
|
||||
"Sets the property <name> of the given <note> to the given [value]. Possible "
|
||||
@@ -463,9 +474,10 @@ msgstr "Prekidam... Pričekaj."
|
||||
|
||||
#, 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)."
|
||||
"<tag-command> can be \"add\", \"remove\", \"list\", or \"notetags\" to "
|
||||
"assign or remove [tag] from [note], to list notes associated with [tag], or "
|
||||
"to list tags associated with [note]. The command `tag list` can be used to "
|
||||
"list all the tags (use -l for long option)."
|
||||
msgstr ""
|
||||
"<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 "
|
||||
@@ -579,57 +591,10 @@ 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..."
|
||||
msgid "Could not export notes: %s"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "PDF File"
|
||||
msgstr "Datoteka"
|
||||
|
||||
msgid "Synchronisation status"
|
||||
msgstr "Status sinkronizacije"
|
||||
|
||||
msgid "New note"
|
||||
msgstr "Nova bilješka"
|
||||
|
||||
msgid "New to-do"
|
||||
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"
|
||||
@@ -643,6 +608,9 @@ msgstr ""
|
||||
msgid "Check for updates..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Templates"
|
||||
msgstr ""
|
||||
|
||||
msgid "Import"
|
||||
msgstr "Uvoz"
|
||||
|
||||
@@ -689,12 +657,18 @@ msgstr ""
|
||||
msgid "Link"
|
||||
msgstr ""
|
||||
|
||||
msgid "Code"
|
||||
msgstr ""
|
||||
|
||||
msgid "Insert Date Time"
|
||||
msgstr ""
|
||||
|
||||
msgid "Edit in external editor"
|
||||
msgstr ""
|
||||
|
||||
msgid "Tags"
|
||||
msgstr "Oznake"
|
||||
|
||||
msgid "Search in all the notes"
|
||||
msgstr "Pretraži u svim bilješkama"
|
||||
|
||||
@@ -708,6 +682,13 @@ msgstr ""
|
||||
msgid "Toggle sidebar"
|
||||
msgstr ""
|
||||
|
||||
msgid "Layout button sequence"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Toggle note list"
|
||||
msgstr "Bilješka je promijenjena:"
|
||||
|
||||
msgid "Toggle editor layout"
|
||||
msgstr ""
|
||||
|
||||
@@ -726,10 +707,17 @@ msgstr "Pomoć"
|
||||
msgid "Website and documentation"
|
||||
msgstr "Website i dokumentacija"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Joplin Forum"
|
||||
msgstr "Evernote izvozne datoteke"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Make a donation"
|
||||
msgstr "Website i dokumentacija"
|
||||
|
||||
msgid "Toggle development tools"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Open %s"
|
||||
msgstr "On %s: %s"
|
||||
@@ -768,6 +756,10 @@ msgstr ""
|
||||
msgid "No"
|
||||
msgstr "N"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Full Release Notes"
|
||||
msgstr "Obriši bilješke?"
|
||||
|
||||
msgid "Token has been copied to the clipboard!"
|
||||
msgstr ""
|
||||
|
||||
@@ -829,6 +821,9 @@ msgid ""
|
||||
"access Joplin."
|
||||
msgstr ""
|
||||
|
||||
msgid "This will open a new screen. Save your current changes?"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Notes and settings are stored in: %s"
|
||||
msgstr "Bilješke i postavke su pohranjene u: %s"
|
||||
@@ -840,6 +835,9 @@ msgstr "Prekini sinkronizaciju"
|
||||
msgid "Browse..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Back"
|
||||
msgstr "Natrag"
|
||||
|
||||
msgid "Apply"
|
||||
msgstr ""
|
||||
|
||||
@@ -908,8 +906,8 @@ msgid ""
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"For more information about End-To-End Encryption (E2EE) and advices on how "
|
||||
"to enable it please check the documentation:"
|
||||
"For more information about End-To-End Encryption (E2EE) and advice on how to "
|
||||
"enable it please check the documentation:"
|
||||
msgstr ""
|
||||
|
||||
msgid "Status"
|
||||
@@ -918,13 +916,19 @@ msgstr "Status"
|
||||
msgid "Encryption is:"
|
||||
msgstr ""
|
||||
|
||||
msgid "Firefox Extension"
|
||||
msgstr ""
|
||||
|
||||
msgid "Chrome Web Store"
|
||||
msgstr ""
|
||||
|
||||
msgid "Get it now:"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Usage"
|
||||
msgstr "Korištenje: %s"
|
||||
|
||||
msgid "Back"
|
||||
msgstr "Natrag"
|
||||
|
||||
#, javascript-format
|
||||
msgid ""
|
||||
"New notebook \"%s\" will be created and file \"%s\" will be imported into it"
|
||||
@@ -944,9 +948,6 @@ msgstr "Naslov bilježnice:"
|
||||
msgid "Add or remove tags:"
|
||||
msgstr "Dodaj ili makni oznake:"
|
||||
|
||||
msgid "Separate each tag by a comma."
|
||||
msgstr "Odvoji oznake zarezom."
|
||||
|
||||
msgid "Rename notebook:"
|
||||
msgstr "Preimenuj bilježnicu:"
|
||||
|
||||
@@ -957,6 +958,18 @@ msgstr "Preimenuj"
|
||||
msgid "Set alarm:"
|
||||
msgstr "Postavi upozorenje:"
|
||||
|
||||
msgid "Template file:"
|
||||
msgstr ""
|
||||
|
||||
msgid "New note"
|
||||
msgstr "Nova bilješka"
|
||||
|
||||
msgid "New to-do"
|
||||
msgstr "Novi zadatak"
|
||||
|
||||
msgid "New notebook"
|
||||
msgstr "Nova bilježnica"
|
||||
|
||||
msgid "Layout"
|
||||
msgstr "Izgled"
|
||||
|
||||
@@ -970,9 +983,8 @@ msgstr "Neke stavke se ne mogu sinkronizirati."
|
||||
msgid "View them now"
|
||||
msgstr "Pogledaj ih sada"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Some items cannot be decrypted."
|
||||
msgstr "Neke stavke se ne mogu sinkronizirati."
|
||||
msgid "One or more master keys need a password."
|
||||
msgstr ""
|
||||
|
||||
msgid "Set the password"
|
||||
msgstr ""
|
||||
@@ -994,6 +1006,9 @@ msgstr ""
|
||||
msgid "Note History"
|
||||
msgstr "Bilježnice"
|
||||
|
||||
msgid "Markup"
|
||||
msgstr ""
|
||||
|
||||
msgid "Previous versions of this note"
|
||||
msgstr ""
|
||||
|
||||
@@ -1008,6 +1023,10 @@ msgstr ""
|
||||
msgid "This note has no history"
|
||||
msgstr "Bilješka je promijenjena:"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Unsupported link or message: %s"
|
||||
msgstr "Nepodržana poveznica ili poruka: %s"
|
||||
|
||||
msgid "Restore"
|
||||
msgstr ""
|
||||
|
||||
@@ -1037,10 +1056,6 @@ 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"
|
||||
|
||||
#, javascript-format
|
||||
msgid ""
|
||||
"This note has no content. Click on \"%s\" to toggle the editor and edit the "
|
||||
@@ -1050,6 +1065,14 @@ msgstr ""
|
||||
msgid "Only one note can be printed or exported to PDF at a time."
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "PDF File"
|
||||
msgstr "Datoteka"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Error opening note in editor: %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "strong text"
|
||||
msgstr ""
|
||||
|
||||
@@ -1065,9 +1088,6 @@ msgstr ""
|
||||
msgid "Attach file"
|
||||
msgstr "Priloži datoteku"
|
||||
|
||||
msgid "Tags"
|
||||
msgstr "Oznake"
|
||||
|
||||
msgid "Set alarm"
|
||||
msgstr "Postavi upozorenje"
|
||||
|
||||
@@ -1078,9 +1098,6 @@ msgstr "%s: %s"
|
||||
msgid "Hyperlink"
|
||||
msgstr ""
|
||||
|
||||
msgid "Code"
|
||||
msgstr ""
|
||||
|
||||
msgid "Numbered List"
|
||||
msgstr ""
|
||||
|
||||
@@ -1133,13 +1150,9 @@ msgstr "Opcije"
|
||||
msgid "Synchronisation Status"
|
||||
msgstr "Status Sinkronizacije"
|
||||
|
||||
msgid "Encryption Options"
|
||||
msgid "Remove"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Clipper Options"
|
||||
msgstr "Opcije"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid ""
|
||||
"Delete notebook \"%s\"?\n"
|
||||
@@ -1148,6 +1161,9 @@ msgid ""
|
||||
msgstr ""
|
||||
"Obrisati bilježnicu? Sve bilješke u toj bilježnici će također biti obrisane."
|
||||
|
||||
msgid "Delete"
|
||||
msgstr "Obriši"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Remove tag \"%s\" from all notes?"
|
||||
msgstr "Makni ovu oznaku iz svih bilješki?"
|
||||
@@ -1155,8 +1171,9 @@ 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"
|
||||
#, fuzzy
|
||||
msgid "New sub-notebook"
|
||||
msgstr "Nova bilježnica"
|
||||
|
||||
msgid "Rename"
|
||||
msgstr "Preimenuj"
|
||||
@@ -1166,15 +1183,18 @@ msgstr "Bilježnice"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Decrypting items: %d/%d"
|
||||
msgstr "Stvorene lokalne stavke: %d."
|
||||
msgstr "Stvorene lokalne stavke: %d/%d"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Fetching resources: %d"
|
||||
msgstr "Resursi: %d."
|
||||
msgid "Fetching resources: %d/%d"
|
||||
msgstr "Resursi: %d/%d"
|
||||
|
||||
msgid "Please select where the sync status should be exported to"
|
||||
msgstr "Odaberi lokaciju za izvoz statusa sinkronizacije"
|
||||
|
||||
msgid "Retry"
|
||||
msgstr ""
|
||||
|
||||
msgid "Add or remove tags"
|
||||
msgstr "Dodaj ili makni oznake"
|
||||
|
||||
@@ -1322,14 +1342,6 @@ msgstr ""
|
||||
msgid "In progress"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
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 ""
|
||||
|
||||
@@ -1378,6 +1390,69 @@ msgid ""
|
||||
"more details: %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Keyboard Mode"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Default"
|
||||
msgstr "Default: %s"
|
||||
|
||||
msgid "Emacs"
|
||||
msgstr ""
|
||||
|
||||
msgid "Vim"
|
||||
msgstr ""
|
||||
|
||||
msgid "Synchronisation target"
|
||||
msgstr "Sinkroniziraj sa"
|
||||
|
||||
msgid ""
|
||||
"The target to synchonise to. Each sync target may have additional parameters "
|
||||
"which are named as `sync.NUM.NAME` (all documented below)."
|
||||
msgstr ""
|
||||
|
||||
msgid "Directory to synchronise with (absolute path)"
|
||||
msgstr "Direktorij za sinkroniziranje (apsolutna putanja)"
|
||||
|
||||
msgid "Nextcloud WebDAV URL"
|
||||
msgstr ""
|
||||
|
||||
msgid "Nextcloud username"
|
||||
msgstr ""
|
||||
|
||||
msgid "Nextcloud password"
|
||||
msgstr ""
|
||||
|
||||
msgid "WebDAV URL"
|
||||
msgstr ""
|
||||
|
||||
msgid "WebDAV username"
|
||||
msgstr ""
|
||||
|
||||
msgid "WebDAV password"
|
||||
msgstr ""
|
||||
|
||||
msgid "Attachment download behaviour"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"In \"Manual\" mode, attachments are downloaded only when you click on them. "
|
||||
"In \"Auto\", they are downloaded when you open the note. In \"Always\", all "
|
||||
"the attachments are downloaded whether you open the note or not."
|
||||
msgstr ""
|
||||
|
||||
msgid "Always"
|
||||
msgstr ""
|
||||
|
||||
msgid "Manual"
|
||||
msgstr ""
|
||||
|
||||
msgid "Auto"
|
||||
msgstr ""
|
||||
|
||||
msgid "Max concurrent connections"
|
||||
msgstr ""
|
||||
|
||||
msgid "Language"
|
||||
msgstr "Jezik"
|
||||
|
||||
@@ -1396,6 +1471,39 @@ msgstr "Svijetla"
|
||||
msgid "Dark"
|
||||
msgstr "Tamna"
|
||||
|
||||
msgid "Dracula"
|
||||
msgstr ""
|
||||
|
||||
msgid "Solarised Light"
|
||||
msgstr ""
|
||||
|
||||
msgid "Solarised Dark"
|
||||
msgstr ""
|
||||
|
||||
msgid "Nord"
|
||||
msgstr ""
|
||||
|
||||
msgid "Show note counts"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Editor"
|
||||
msgstr "Uredi"
|
||||
|
||||
msgid "Viewer"
|
||||
msgstr ""
|
||||
|
||||
msgid "Split View"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "%s / %s / %s"
|
||||
msgstr "%s = %s (%s)"
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s / %s"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Uncompleted to-dos on top"
|
||||
msgstr "Prikaži nezavršene zadatke na vrhu liste"
|
||||
@@ -1436,6 +1544,9 @@ msgstr "Stvara novu bilješku."
|
||||
msgid "Enable soft breaks"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable typographer support"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable math expressions"
|
||||
msgstr ""
|
||||
|
||||
@@ -1469,6 +1580,9 @@ msgstr ""
|
||||
msgid "Enable multimarkdown table extension"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable Fountain syntax support"
|
||||
msgstr ""
|
||||
|
||||
msgid "Show tray icon"
|
||||
msgstr ""
|
||||
|
||||
@@ -1491,6 +1605,10 @@ msgstr ""
|
||||
msgid "Editor font size"
|
||||
msgstr "Uredi bilješku."
|
||||
|
||||
#, fuzzy
|
||||
msgid "Editor font"
|
||||
msgstr "Uredi bilješku."
|
||||
|
||||
msgid "Editor font family"
|
||||
msgstr ""
|
||||
|
||||
@@ -1536,36 +1654,34 @@ msgstr ""
|
||||
"Program za uređivanje koji će biti korišten za uređivanje bilješki. Ako ni "
|
||||
"jedan nije odabran, pokušati će se sa default programom."
|
||||
|
||||
msgid "Show advanced options"
|
||||
msgstr "Prikaži napredne opcije"
|
||||
|
||||
msgid "Synchronisation target"
|
||||
msgstr "Sinkroniziraj sa"
|
||||
|
||||
msgid ""
|
||||
"The target to synchonise to. Each sync target may have additional parameters "
|
||||
"which are named as `sync.NUM.NAME` (all documented below)."
|
||||
msgid "Page size for PDF export"
|
||||
msgstr ""
|
||||
|
||||
msgid "Directory to synchronise with (absolute path)"
|
||||
msgstr "Direktorij za sinkroniziranje (apsolutna putanja)"
|
||||
|
||||
msgid "Nextcloud WebDAV URL"
|
||||
msgid "A4"
|
||||
msgstr ""
|
||||
|
||||
msgid "Nextcloud username"
|
||||
msgid "Letter"
|
||||
msgstr ""
|
||||
|
||||
msgid "Nextcloud password"
|
||||
msgid "A3"
|
||||
msgstr ""
|
||||
|
||||
msgid "WebDAV URL"
|
||||
msgid "A5"
|
||||
msgstr ""
|
||||
|
||||
msgid "WebDAV username"
|
||||
msgid "Tabloid"
|
||||
msgstr ""
|
||||
|
||||
msgid "WebDAV password"
|
||||
msgid "Legal"
|
||||
msgstr ""
|
||||
|
||||
msgid "Page orientation for PDF export"
|
||||
msgstr ""
|
||||
|
||||
msgid "Portrait"
|
||||
msgstr ""
|
||||
|
||||
msgid "Landscape"
|
||||
msgstr ""
|
||||
|
||||
msgid "Custom TLS certificates"
|
||||
@@ -1581,6 +1697,16 @@ msgstr ""
|
||||
msgid "Ignore TLS certificate errors"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"Fail-safe: Do not wipe out local data when sync target is empty (often the "
|
||||
"result of a misconfiguration or bug)"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"Specify the port that should be used by the API server. If not set, a "
|
||||
"default will be used."
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Enable note history"
|
||||
msgstr "Bilješka je promijenjena:"
|
||||
@@ -1621,6 +1747,12 @@ msgstr ""
|
||||
msgid "Application"
|
||||
msgstr "Izađi iz aplikacije."
|
||||
|
||||
msgid "Encryption"
|
||||
msgstr ""
|
||||
|
||||
msgid "Web Clipper"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "The tag \"%s\" already exists. Please choose a different name."
|
||||
msgstr ""
|
||||
@@ -1636,7 +1768,11 @@ msgid "Joplin Export Directory"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Evernote Export File"
|
||||
msgid "Evernote Export File (as Markdown)"
|
||||
msgstr "Evernote izvozne datoteke"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Evernote Export File (as HTML)"
|
||||
msgstr "Evernote izvozne datoteke"
|
||||
|
||||
#, fuzzy
|
||||
@@ -1676,6 +1812,12 @@ msgstr ""
|
||||
msgid "Items that cannot be synchronised"
|
||||
msgstr "Stavke koje se ne mogu sinkronizirati"
|
||||
|
||||
msgid ""
|
||||
"These items will remain on the device but will not be uploaded to the sync "
|
||||
"target. In order to find these items, either search for the title or the ID "
|
||||
"(which is displayed in brackets above)."
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "%s (%s) could not be uploaded: %s"
|
||||
msgstr "Bilježnicu nije moguće snimiti: %s"
|
||||
@@ -1684,10 +1826,14 @@ msgstr "Bilježnicu nije moguće snimiti: %s"
|
||||
msgid "Item \"%s\" could not be downloaded: %s"
|
||||
msgstr "Bilježnicu nije moguće snimiti: %s"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Items that cannot be decrypted"
|
||||
msgstr "Stavke koje se ne mogu sinkronizirati"
|
||||
|
||||
msgid ""
|
||||
"These items will remain on the device but will not be uploaded to the sync "
|
||||
"target. In order to find these items, either search for the title or the ID "
|
||||
"(which is displayed in brackets above)."
|
||||
"Joplin failed to decrypt these items multiple times, possibly because they "
|
||||
"are corrupted or too large. These items will remain on the device but Joplin "
|
||||
"will no longer attempt to decrypt them."
|
||||
msgstr ""
|
||||
|
||||
msgid "Sync status (synced items / total items)"
|
||||
@@ -1729,24 +1875,20 @@ msgstr ""
|
||||
msgid "Your permission to use your camera is required."
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "You currently have no notebooks."
|
||||
msgstr "Obriši odabranu bilješku ili bilježnicu."
|
||||
|
||||
#, fuzzy
|
||||
msgid "Create a notebook"
|
||||
msgstr "Stvara novu bilježnicu."
|
||||
|
||||
msgid "There are currently no notes. Create one by clicking on the (+) button."
|
||||
msgstr "Trenutno nema bilješki. Stvori novu klikom na (+) gumb."
|
||||
|
||||
msgid "Delete these notes?"
|
||||
msgstr "Obriši ove bilješke?"
|
||||
|
||||
msgid "Log"
|
||||
msgstr "Log"
|
||||
|
||||
msgid "Export Debug Report"
|
||||
msgstr "Izvezi Debug izvještaj"
|
||||
|
||||
msgid "Encryption Config"
|
||||
msgstr ""
|
||||
|
||||
msgid "Configuration"
|
||||
msgstr "Konfiguracija"
|
||||
|
||||
msgid "Move to notebook..."
|
||||
msgstr "Premjesti u bilježnicu..."
|
||||
|
||||
@@ -1771,8 +1913,24 @@ msgstr "Odaberi datum"
|
||||
msgid "Confirm"
|
||||
msgstr "Potvrdi"
|
||||
|
||||
msgid "Cancel synchronisation"
|
||||
msgstr "Prekini sinkronizaciju"
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Notebook: %s"
|
||||
msgstr "Bilježnice"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Encrypted notebooks cannot be renamed"
|
||||
msgstr "Neke stavke se ne mogu sinkronizirati."
|
||||
|
||||
#, fuzzy
|
||||
msgid "New Notebook"
|
||||
msgstr "Nova bilježnica"
|
||||
|
||||
msgid "Configuration"
|
||||
msgstr "Konfiguracija"
|
||||
|
||||
#, fuzzy
|
||||
msgid "All notes"
|
||||
msgstr "Nova bilješka"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Checking... Please wait."
|
||||
@@ -1810,6 +1968,50 @@ msgstr ""
|
||||
msgid "Type new tags or select from list"
|
||||
msgstr ""
|
||||
|
||||
msgid "Warning"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"In order to use file system synchronisation your permission to write to "
|
||||
"external storage is required."
|
||||
msgstr ""
|
||||
|
||||
msgid "Encryption Config"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Tools"
|
||||
msgstr "Alati"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Sync Status"
|
||||
msgstr "Status"
|
||||
|
||||
msgid "Log"
|
||||
msgstr "Log"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Creating report..."
|
||||
msgstr "Uvozim bilješke..."
|
||||
|
||||
msgid "Export Debug Report"
|
||||
msgstr "Izvezi Debug izvještaj"
|
||||
|
||||
msgid "Fixing search index..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Fix search index"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"Use this to rebuild the search index if there is a problem with search. It "
|
||||
"may take a long time depending on the number of notes."
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "More information"
|
||||
msgstr "Konfiguracija"
|
||||
|
||||
msgid ""
|
||||
"To work correctly, the app needs the following permissions. Please enable "
|
||||
"them in your phone settings, in Apps > Joplin > Permissions"
|
||||
@@ -1859,6 +2061,9 @@ msgstr ""
|
||||
msgid "Password cannot be empty"
|
||||
msgstr ""
|
||||
|
||||
msgid "Confirm password cannot be empty"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Enable"
|
||||
msgstr "Onemogućeno"
|
||||
@@ -1870,6 +2075,10 @@ msgstr "Bilježnicu nije moguće snimiti: %s"
|
||||
msgid "Edit notebook"
|
||||
msgstr "Uredi bilježnicu"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Enter notebook title"
|
||||
msgstr "Naslov bilježnice:"
|
||||
|
||||
msgid "Show all"
|
||||
msgstr ""
|
||||
|
||||
@@ -1893,10 +2102,32 @@ msgstr ""
|
||||
msgid "The Joplin mobile app does not currently support this type of link: %s"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Links with protocol \"%s\" are not supported"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Unsupported image type: %s"
|
||||
msgstr "Nepodržana vrsta slike: %s"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Updated: %s"
|
||||
msgstr "Ažurirano: %d."
|
||||
|
||||
msgid "View on map"
|
||||
msgstr "Vidi na karti"
|
||||
|
||||
msgid "Go to source URL"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Attach..."
|
||||
msgstr "Traži"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Choose an option"
|
||||
msgstr "Prikaži napredne opcije"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Take photo"
|
||||
msgstr "Priloži sliku"
|
||||
@@ -1916,23 +2147,18 @@ msgstr "Pretvori u bilješku"
|
||||
msgid "Convert to todo"
|
||||
msgstr "Pretvori u zadatak"
|
||||
|
||||
msgid "Hide metadata"
|
||||
msgstr "Sakrij metapodatke"
|
||||
msgid "Properties"
|
||||
msgstr ""
|
||||
|
||||
msgid "Show metadata"
|
||||
msgstr "Prikaži metapodatke"
|
||||
|
||||
msgid "View on map"
|
||||
msgstr "Vidi na karti"
|
||||
|
||||
msgid "Go to source URL"
|
||||
msgid "Add body"
|
||||
msgstr ""
|
||||
|
||||
msgid "Edit"
|
||||
msgstr "Uredi"
|
||||
|
||||
msgid "Delete notebook"
|
||||
msgstr "Obriši bilježnicu"
|
||||
#, fuzzy
|
||||
msgid "Add title"
|
||||
msgstr "Nenaslovljen"
|
||||
|
||||
msgid "Login with OneDrive"
|
||||
msgstr "Prijavi se u OneDrive"
|
||||
@@ -1940,18 +2166,88 @@ msgstr "Prijavi se u OneDrive"
|
||||
msgid "Search"
|
||||
msgstr "Traži"
|
||||
|
||||
msgid ""
|
||||
"Click on the (+) button to create a new note or notebook. Click on the side "
|
||||
"menu to access your existing notebooks."
|
||||
msgstr ""
|
||||
"Klikni (+) gumb za dodavanje nove bilješke ili bilježnice ili odaberi "
|
||||
"postojeću bilježnicu iz izbornika."
|
||||
#~ msgid "Synchronisation is already in progress. State: %s"
|
||||
#~ msgstr "Sinkronizacija je već u toku. Stanje: %s"
|
||||
|
||||
msgid "You currently have no notebook. Create one by clicking on (+) button."
|
||||
msgstr "Trenutno nemaš nijednu bilježnicu. Stvori novu klikom na (+) gumb."
|
||||
#, fuzzy
|
||||
#~ msgid "Confirm password"
|
||||
#~ msgstr "Potvrdi"
|
||||
|
||||
msgid "Welcome"
|
||||
msgstr "Dobro došli"
|
||||
#, fuzzy
|
||||
#~ msgid "Missing required argument: note"
|
||||
#~ msgstr "Nedostaje obavezni argument: %s"
|
||||
|
||||
#, fuzzy
|
||||
#~ msgid "Starting to edit note. Close the editor to get back to the prompt."
|
||||
#~ msgstr ""
|
||||
#~ "Počinjem uređivati bilješku. Za povratak u naredbeni redak, zatvori "
|
||||
#~ "uređivač."
|
||||
|
||||
#~ msgid "Note has been saved."
|
||||
#~ msgstr "Bilješka je spremljena."
|
||||
|
||||
#, fuzzy
|
||||
#~ msgid "Note title"
|
||||
#~ msgstr "Naslov bilježnice:"
|
||||
|
||||
#, fuzzy
|
||||
#~ msgid "Note body"
|
||||
#~ msgstr "Bilježnice"
|
||||
|
||||
#~ msgid "Synchronisation status"
|
||||
#~ msgstr "Status sinkronizacije"
|
||||
|
||||
#, fuzzy
|
||||
#~ msgid "General Options"
|
||||
#~ msgstr "Opcije"
|
||||
|
||||
#, fuzzy
|
||||
#~ msgid "Revision: %s (%s)"
|
||||
#~ msgstr "%s %s (%s)"
|
||||
|
||||
#~ msgid "%s %s (%s, %s)"
|
||||
#~ msgstr "%s %s (%s, %s)"
|
||||
|
||||
#, fuzzy
|
||||
#~ msgid "Clipper Options"
|
||||
#~ msgstr "Opcije"
|
||||
|
||||
#, fuzzy
|
||||
#~ msgid "Information"
|
||||
#~ msgstr "Konfiguracija"
|
||||
|
||||
#~ msgid "Cancel synchronisation"
|
||||
#~ msgstr "Prekini sinkronizaciju"
|
||||
|
||||
#~ msgid "Hide metadata"
|
||||
#~ msgstr "Sakrij metapodatke"
|
||||
|
||||
#~ msgid "Show metadata"
|
||||
#~ msgstr "Prikaži metapodatke"
|
||||
|
||||
#~ msgid "Delete notebook"
|
||||
#~ msgstr "Obriši bilježnicu"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "Click on the (+) button to create a new note or notebook. Click on the "
|
||||
#~ "side menu to access your existing notebooks."
|
||||
#~ msgstr ""
|
||||
#~ "Klikni (+) gumb za dodavanje nove bilješke ili bilježnice ili odaberi "
|
||||
#~ "postojeću bilježnicu iz izbornika."
|
||||
|
||||
#~ msgid ""
|
||||
#~ "You currently have no notebook. Create one by clicking on (+) button."
|
||||
#~ msgstr "Trenutno nemaš nijednu bilježnicu. Stvori novu klikom na (+) gumb."
|
||||
|
||||
#~ msgid "Welcome"
|
||||
#~ msgstr "Dobro došli"
|
||||
|
||||
#~ msgid "Separate each tag by a comma."
|
||||
#~ msgstr "Odvoji oznake zarezom."
|
||||
|
||||
#, fuzzy
|
||||
#~ msgid "Some items cannot be decrypted."
|
||||
#~ msgstr "Neke stavke se ne mogu sinkronizirati."
|
||||
|
||||
#, fuzzy
|
||||
#~ msgid "%s (%s): %s"
|
||||
@@ -1974,13 +2270,6 @@ msgstr "Dobro došli"
|
||||
#~ msgid "Searches"
|
||||
#~ msgstr "Pretraživanja"
|
||||
|
||||
#, fuzzy
|
||||
#~ msgid ""
|
||||
#~ "Release notes:\n"
|
||||
#~ "\n"
|
||||
#~ "%s"
|
||||
#~ msgstr "Obriši bilješke?"
|
||||
|
||||
#~ msgid "Imports an Evernote notebook file (.enex file)."
|
||||
#~ msgstr "Uvozi Evernote bilježnicu (.enex datoteku)."
|
||||
|
||||
@@ -2014,9 +2303,6 @@ msgstr "Dobro došli"
|
||||
#~ msgid "Cancel the current command."
|
||||
#~ msgstr "Prekini trenutnu naredbu."
|
||||
|
||||
#~ msgid "Delete the currently selected note or notebook."
|
||||
#~ msgstr "Obriši odabranu bilješku ili bilježnicu."
|
||||
|
||||
#~ msgid "Set a to-do as completed / not completed"
|
||||
#~ msgstr "Postavi zadatak kao završen/nezavršen"
|
||||
|
||||
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -128,6 +128,12 @@ msgstr ""
|
||||
msgid "Operation cancelled"
|
||||
msgstr ""
|
||||
|
||||
msgid "Confirm password:"
|
||||
msgstr ""
|
||||
|
||||
msgid "Passwords do not match!"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"Starting decryption... Please wait as it may take several minutes depending "
|
||||
"on how much there is to decrypt."
|
||||
@@ -160,16 +166,6 @@ msgstr ""
|
||||
msgid "Note does not exist: \"%s\". Create it?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Starting to edit note. Close the editor to get back to the prompt."
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Error opening note in editor: %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Note has been saved."
|
||||
msgstr ""
|
||||
|
||||
msgid "Exits the application."
|
||||
msgstr ""
|
||||
|
||||
@@ -353,6 +349,23 @@ msgstr ""
|
||||
msgid "Searches for the given <pattern> in all the notes."
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid ""
|
||||
"Start, stop or check the API server. To specify on which port it should run, "
|
||||
"set the api.port config variable. Commands are (%s)."
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Server is already running on port %d"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Server is running on port %d"
|
||||
msgstr ""
|
||||
|
||||
msgid "Server is not running."
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid ""
|
||||
"Sets the property <name> of the given <note> to the given [value]. Possible "
|
||||
@@ -415,9 +428,10 @@ msgid "Cancelling... Please wait."
|
||||
msgstr ""
|
||||
|
||||
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)."
|
||||
"<tag-command> can be \"add\", \"remove\", \"list\", or \"notetags\" to "
|
||||
"assign or remove [tag] from [note], to list notes associated with [tag], or "
|
||||
"to list tags associated with [note]. The command `tag list` can be used to "
|
||||
"list all the tags (use -l for long option)."
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
@@ -508,51 +522,8 @@ 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 ""
|
||||
|
||||
msgid "PDF File"
|
||||
msgstr ""
|
||||
|
||||
msgid "Synchronisation status"
|
||||
msgstr ""
|
||||
|
||||
msgid "New note"
|
||||
msgstr ""
|
||||
|
||||
msgid "New to-do"
|
||||
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)"
|
||||
msgid "Could not export notes: %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "&File"
|
||||
@@ -567,6 +538,9 @@ msgstr ""
|
||||
msgid "Check for updates..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Templates"
|
||||
msgstr ""
|
||||
|
||||
msgid "Import"
|
||||
msgstr ""
|
||||
|
||||
@@ -610,12 +584,18 @@ msgstr ""
|
||||
msgid "Link"
|
||||
msgstr ""
|
||||
|
||||
msgid "Code"
|
||||
msgstr ""
|
||||
|
||||
msgid "Insert Date Time"
|
||||
msgstr ""
|
||||
|
||||
msgid "Edit in external editor"
|
||||
msgstr ""
|
||||
|
||||
msgid "Tags"
|
||||
msgstr ""
|
||||
|
||||
msgid "Search in all the notes"
|
||||
msgstr ""
|
||||
|
||||
@@ -628,6 +608,12 @@ msgstr ""
|
||||
msgid "Toggle sidebar"
|
||||
msgstr ""
|
||||
|
||||
msgid "Layout button sequence"
|
||||
msgstr ""
|
||||
|
||||
msgid "Toggle note list"
|
||||
msgstr ""
|
||||
|
||||
msgid "Toggle editor layout"
|
||||
msgstr ""
|
||||
|
||||
@@ -643,9 +629,15 @@ msgstr ""
|
||||
msgid "Website and documentation"
|
||||
msgstr ""
|
||||
|
||||
msgid "Joplin Forum"
|
||||
msgstr ""
|
||||
|
||||
msgid "Make a donation"
|
||||
msgstr ""
|
||||
|
||||
msgid "Toggle development tools"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Open %s"
|
||||
msgstr ""
|
||||
@@ -683,6 +675,9 @@ msgstr ""
|
||||
msgid "No"
|
||||
msgstr ""
|
||||
|
||||
msgid "Full Release Notes"
|
||||
msgstr ""
|
||||
|
||||
msgid "Token has been copied to the clipboard!"
|
||||
msgstr ""
|
||||
|
||||
@@ -743,6 +738,9 @@ msgid ""
|
||||
"access Joplin."
|
||||
msgstr ""
|
||||
|
||||
msgid "This will open a new screen. Save your current changes?"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Notes and settings are stored in: %s"
|
||||
msgstr ""
|
||||
@@ -753,6 +751,9 @@ msgstr ""
|
||||
msgid "Browse..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Back"
|
||||
msgstr ""
|
||||
|
||||
msgid "Apply"
|
||||
msgstr ""
|
||||
|
||||
@@ -821,8 +822,8 @@ msgid ""
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"For more information about End-To-End Encryption (E2EE) and advices on how "
|
||||
"to enable it please check the documentation:"
|
||||
"For more information about End-To-End Encryption (E2EE) and advice on how to "
|
||||
"enable it please check the documentation:"
|
||||
msgstr ""
|
||||
|
||||
msgid "Status"
|
||||
@@ -831,10 +832,16 @@ msgstr ""
|
||||
msgid "Encryption is:"
|
||||
msgstr ""
|
||||
|
||||
msgid "Usage"
|
||||
msgid "Firefox Extension"
|
||||
msgstr ""
|
||||
|
||||
msgid "Back"
|
||||
msgid "Chrome Web Store"
|
||||
msgstr ""
|
||||
|
||||
msgid "Get it now:"
|
||||
msgstr ""
|
||||
|
||||
msgid "Usage"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
@@ -854,9 +861,6 @@ msgstr ""
|
||||
msgid "Add or remove tags:"
|
||||
msgstr ""
|
||||
|
||||
msgid "Separate each tag by a comma."
|
||||
msgstr ""
|
||||
|
||||
msgid "Rename notebook:"
|
||||
msgstr ""
|
||||
|
||||
@@ -866,6 +870,18 @@ msgstr ""
|
||||
msgid "Set alarm:"
|
||||
msgstr ""
|
||||
|
||||
msgid "Template file:"
|
||||
msgstr ""
|
||||
|
||||
msgid "New note"
|
||||
msgstr ""
|
||||
|
||||
msgid "New to-do"
|
||||
msgstr ""
|
||||
|
||||
msgid "New notebook"
|
||||
msgstr ""
|
||||
|
||||
msgid "Layout"
|
||||
msgstr ""
|
||||
|
||||
@@ -878,7 +894,7 @@ msgstr ""
|
||||
msgid "View them now"
|
||||
msgstr ""
|
||||
|
||||
msgid "Some items cannot be decrypted."
|
||||
msgid "One or more master keys need a password."
|
||||
msgstr ""
|
||||
|
||||
msgid "Set the password"
|
||||
@@ -900,6 +916,9 @@ msgstr ""
|
||||
msgid "Note History"
|
||||
msgstr ""
|
||||
|
||||
msgid "Markup"
|
||||
msgstr ""
|
||||
|
||||
msgid "Previous versions of this note"
|
||||
msgstr ""
|
||||
|
||||
@@ -913,6 +932,10 @@ msgstr ""
|
||||
msgid "This note has no history"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Unsupported link or message: %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Restore"
|
||||
msgstr ""
|
||||
|
||||
@@ -941,10 +964,6 @@ msgstr ""
|
||||
msgid "This attachment is not downloaded or not decrypted yet."
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Unsupported link or message: %s"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid ""
|
||||
"This note has no content. Click on \"%s\" to toggle the editor and edit the "
|
||||
@@ -954,6 +973,13 @@ msgstr ""
|
||||
msgid "Only one note can be printed or exported to PDF at a time."
|
||||
msgstr ""
|
||||
|
||||
msgid "PDF File"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Error opening note in editor: %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "strong text"
|
||||
msgstr ""
|
||||
|
||||
@@ -969,9 +995,6 @@ msgstr ""
|
||||
msgid "Attach file"
|
||||
msgstr ""
|
||||
|
||||
msgid "Tags"
|
||||
msgstr ""
|
||||
|
||||
msgid "Set alarm"
|
||||
msgstr ""
|
||||
|
||||
@@ -982,9 +1005,6 @@ msgstr ""
|
||||
msgid "Hyperlink"
|
||||
msgstr ""
|
||||
|
||||
msgid "Code"
|
||||
msgstr ""
|
||||
|
||||
msgid "Numbered List"
|
||||
msgstr ""
|
||||
|
||||
@@ -1034,10 +1054,7 @@ msgstr ""
|
||||
msgid "Synchronisation Status"
|
||||
msgstr ""
|
||||
|
||||
msgid "Encryption Options"
|
||||
msgstr ""
|
||||
|
||||
msgid "Clipper Options"
|
||||
msgid "Remove"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
@@ -1047,6 +1064,9 @@ msgid ""
|
||||
"All notes and sub-notebooks within this notebook will also be deleted."
|
||||
msgstr ""
|
||||
|
||||
msgid "Delete"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Remove tag \"%s\" from all notes?"
|
||||
msgstr ""
|
||||
@@ -1054,7 +1074,7 @@ msgstr ""
|
||||
msgid "Remove this search from the sidebar?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Delete"
|
||||
msgid "New sub-notebook"
|
||||
msgstr ""
|
||||
|
||||
msgid "Rename"
|
||||
@@ -1068,12 +1088,15 @@ msgid "Decrypting items: %d/%d"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Fetching resources: %d"
|
||||
msgid "Fetching resources: %d/%d"
|
||||
msgstr ""
|
||||
|
||||
msgid "Please select where the sync status should be exported to"
|
||||
msgstr ""
|
||||
|
||||
msgid "Retry"
|
||||
msgstr ""
|
||||
|
||||
msgid "Add or remove tags"
|
||||
msgstr ""
|
||||
|
||||
@@ -1212,14 +1235,6 @@ msgstr ""
|
||||
msgid "In progress"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
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 ""
|
||||
|
||||
@@ -1263,6 +1278,68 @@ msgid ""
|
||||
"more details: %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Keyboard Mode"
|
||||
msgstr ""
|
||||
|
||||
msgid "Default"
|
||||
msgstr ""
|
||||
|
||||
msgid "Emacs"
|
||||
msgstr ""
|
||||
|
||||
msgid "Vim"
|
||||
msgstr ""
|
||||
|
||||
msgid "Synchronisation target"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"The target to synchonise to. Each sync target may have additional parameters "
|
||||
"which are named as `sync.NUM.NAME` (all documented below)."
|
||||
msgstr ""
|
||||
|
||||
msgid "Directory to synchronise with (absolute path)"
|
||||
msgstr ""
|
||||
|
||||
msgid "Nextcloud WebDAV URL"
|
||||
msgstr ""
|
||||
|
||||
msgid "Nextcloud username"
|
||||
msgstr ""
|
||||
|
||||
msgid "Nextcloud password"
|
||||
msgstr ""
|
||||
|
||||
msgid "WebDAV URL"
|
||||
msgstr ""
|
||||
|
||||
msgid "WebDAV username"
|
||||
msgstr ""
|
||||
|
||||
msgid "WebDAV password"
|
||||
msgstr ""
|
||||
|
||||
msgid "Attachment download behaviour"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"In \"Manual\" mode, attachments are downloaded only when you click on them. "
|
||||
"In \"Auto\", they are downloaded when you open the note. In \"Always\", all "
|
||||
"the attachments are downloaded whether you open the note or not."
|
||||
msgstr ""
|
||||
|
||||
msgid "Always"
|
||||
msgstr ""
|
||||
|
||||
msgid "Manual"
|
||||
msgstr ""
|
||||
|
||||
msgid "Auto"
|
||||
msgstr ""
|
||||
|
||||
msgid "Max concurrent connections"
|
||||
msgstr ""
|
||||
|
||||
msgid "Language"
|
||||
msgstr ""
|
||||
|
||||
@@ -1281,6 +1358,38 @@ msgstr ""
|
||||
msgid "Dark"
|
||||
msgstr ""
|
||||
|
||||
msgid "Dracula"
|
||||
msgstr ""
|
||||
|
||||
msgid "Solarised Light"
|
||||
msgstr ""
|
||||
|
||||
msgid "Solarised Dark"
|
||||
msgstr ""
|
||||
|
||||
msgid "Nord"
|
||||
msgstr ""
|
||||
|
||||
msgid "Show note counts"
|
||||
msgstr ""
|
||||
|
||||
msgid "Editor"
|
||||
msgstr ""
|
||||
|
||||
msgid "Viewer"
|
||||
msgstr ""
|
||||
|
||||
msgid "Split View"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s / %s / %s"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s / %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Uncompleted to-dos on top"
|
||||
msgstr ""
|
||||
|
||||
@@ -1314,6 +1423,9 @@ msgstr ""
|
||||
msgid "Enable soft breaks"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable typographer support"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable math expressions"
|
||||
msgstr ""
|
||||
|
||||
@@ -1347,6 +1459,9 @@ msgstr ""
|
||||
msgid "Enable multimarkdown table extension"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable Fountain syntax support"
|
||||
msgstr ""
|
||||
|
||||
msgid "Show tray icon"
|
||||
msgstr ""
|
||||
|
||||
@@ -1368,6 +1483,9 @@ msgstr ""
|
||||
msgid "Editor font size"
|
||||
msgstr ""
|
||||
|
||||
msgid "Editor font"
|
||||
msgstr ""
|
||||
|
||||
msgid "Editor font family"
|
||||
msgstr ""
|
||||
|
||||
@@ -1409,36 +1527,34 @@ msgid ""
|
||||
"If none is provided it will try to auto-detect the default editor."
|
||||
msgstr ""
|
||||
|
||||
msgid "Show advanced options"
|
||||
msgid "Page size for PDF export"
|
||||
msgstr ""
|
||||
|
||||
msgid "Synchronisation target"
|
||||
msgid "A4"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"The target to synchonise to. Each sync target may have additional parameters "
|
||||
"which are named as `sync.NUM.NAME` (all documented below)."
|
||||
msgid "Letter"
|
||||
msgstr ""
|
||||
|
||||
msgid "Directory to synchronise with (absolute path)"
|
||||
msgid "A3"
|
||||
msgstr ""
|
||||
|
||||
msgid "Nextcloud WebDAV URL"
|
||||
msgid "A5"
|
||||
msgstr ""
|
||||
|
||||
msgid "Nextcloud username"
|
||||
msgid "Tabloid"
|
||||
msgstr ""
|
||||
|
||||
msgid "Nextcloud password"
|
||||
msgid "Legal"
|
||||
msgstr ""
|
||||
|
||||
msgid "WebDAV URL"
|
||||
msgid "Page orientation for PDF export"
|
||||
msgstr ""
|
||||
|
||||
msgid "WebDAV username"
|
||||
msgid "Portrait"
|
||||
msgstr ""
|
||||
|
||||
msgid "WebDAV password"
|
||||
msgid "Landscape"
|
||||
msgstr ""
|
||||
|
||||
msgid "Custom TLS certificates"
|
||||
@@ -1454,6 +1570,16 @@ msgstr ""
|
||||
msgid "Ignore TLS certificate errors"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"Fail-safe: Do not wipe out local data when sync target is empty (often the "
|
||||
"result of a misconfiguration or bug)"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"Specify the port that should be used by the API server. If not set, a "
|
||||
"default will be used."
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable note history"
|
||||
msgstr ""
|
||||
|
||||
@@ -1489,6 +1615,12 @@ msgstr ""
|
||||
msgid "Application"
|
||||
msgstr ""
|
||||
|
||||
msgid "Encryption"
|
||||
msgstr ""
|
||||
|
||||
msgid "Web Clipper"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "The tag \"%s\" already exists. Please choose a different name."
|
||||
msgstr ""
|
||||
@@ -1502,7 +1634,10 @@ msgstr ""
|
||||
msgid "Joplin Export Directory"
|
||||
msgstr ""
|
||||
|
||||
msgid "Evernote Export File"
|
||||
msgid "Evernote Export File (as Markdown)"
|
||||
msgstr ""
|
||||
|
||||
msgid "Evernote Export File (as HTML)"
|
||||
msgstr ""
|
||||
|
||||
msgid "Json Export Directory"
|
||||
@@ -1540,6 +1675,12 @@ msgstr ""
|
||||
msgid "Items that cannot be synchronised"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"These items will remain on the device but will not be uploaded to the sync "
|
||||
"target. In order to find these items, either search for the title or the ID "
|
||||
"(which is displayed in brackets above)."
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s (%s) could not be uploaded: %s"
|
||||
msgstr ""
|
||||
@@ -1548,10 +1689,13 @@ msgstr ""
|
||||
msgid "Item \"%s\" could not be downloaded: %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Items that cannot be decrypted"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"These items will remain on the device but will not be uploaded to the sync "
|
||||
"target. In order to find these items, either search for the title or the ID "
|
||||
"(which is displayed in brackets above)."
|
||||
"Joplin failed to decrypt these items multiple times, possibly because they "
|
||||
"are corrupted or too large. These items will remain on the device but Joplin "
|
||||
"will no longer attempt to decrypt them."
|
||||
msgstr ""
|
||||
|
||||
msgid "Sync status (synced items / total items)"
|
||||
@@ -1593,24 +1737,18 @@ msgstr ""
|
||||
msgid "Your permission to use your camera is required."
|
||||
msgstr ""
|
||||
|
||||
msgid "You currently have no notebooks."
|
||||
msgstr ""
|
||||
|
||||
msgid "Create a notebook"
|
||||
msgstr ""
|
||||
|
||||
msgid "There are currently no notes. Create one by clicking on the (+) button."
|
||||
msgstr ""
|
||||
|
||||
msgid "Delete these notes?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Log"
|
||||
msgstr ""
|
||||
|
||||
msgid "Export Debug Report"
|
||||
msgstr ""
|
||||
|
||||
msgid "Encryption Config"
|
||||
msgstr ""
|
||||
|
||||
msgid "Configuration"
|
||||
msgstr ""
|
||||
|
||||
msgid "Move to notebook..."
|
||||
msgstr ""
|
||||
|
||||
@@ -1633,7 +1771,20 @@ msgstr ""
|
||||
msgid "Confirm"
|
||||
msgstr ""
|
||||
|
||||
msgid "Cancel synchronisation"
|
||||
#, javascript-format
|
||||
msgid "Notebook: %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Encrypted notebooks cannot be renamed"
|
||||
msgstr ""
|
||||
|
||||
msgid "New Notebook"
|
||||
msgstr ""
|
||||
|
||||
msgid "Configuration"
|
||||
msgstr ""
|
||||
|
||||
msgid "All notes"
|
||||
msgstr ""
|
||||
|
||||
msgid "Checking... Please wait."
|
||||
@@ -1669,6 +1820,46 @@ msgstr ""
|
||||
msgid "Type new tags or select from list"
|
||||
msgstr ""
|
||||
|
||||
msgid "Warning"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"In order to use file system synchronisation your permission to write to "
|
||||
"external storage is required."
|
||||
msgstr ""
|
||||
|
||||
msgid "Encryption Config"
|
||||
msgstr ""
|
||||
|
||||
msgid "Tools"
|
||||
msgstr ""
|
||||
|
||||
msgid "Sync Status"
|
||||
msgstr ""
|
||||
|
||||
msgid "Log"
|
||||
msgstr ""
|
||||
|
||||
msgid "Creating report..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Export Debug Report"
|
||||
msgstr ""
|
||||
|
||||
msgid "Fixing search index..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Fix search index"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"Use this to rebuild the search index if there is a problem with search. It "
|
||||
"may take a long time depending on the number of notes."
|
||||
msgstr ""
|
||||
|
||||
msgid "More information"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"To work correctly, the app needs the following permissions. Please enable "
|
||||
"them in your phone settings, in Apps > Joplin > Permissions"
|
||||
@@ -1716,6 +1907,9 @@ msgstr ""
|
||||
msgid "Password cannot be empty"
|
||||
msgstr ""
|
||||
|
||||
msgid "Confirm password cannot be empty"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable"
|
||||
msgstr ""
|
||||
|
||||
@@ -1726,6 +1920,9 @@ msgstr ""
|
||||
msgid "Edit notebook"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enter notebook title"
|
||||
msgstr ""
|
||||
|
||||
msgid "Show all"
|
||||
msgstr ""
|
||||
|
||||
@@ -1749,10 +1946,30 @@ msgstr ""
|
||||
msgid "The Joplin mobile app does not currently support this type of link: %s"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Links with protocol \"%s\" are not supported"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Unsupported image type: %s"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Updated: %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "View on map"
|
||||
msgstr ""
|
||||
|
||||
msgid "Go to source URL"
|
||||
msgstr ""
|
||||
|
||||
msgid "Attach..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Choose an option"
|
||||
msgstr ""
|
||||
|
||||
msgid "Take photo"
|
||||
msgstr ""
|
||||
|
||||
@@ -1771,22 +1988,16 @@ msgstr ""
|
||||
msgid "Convert to todo"
|
||||
msgstr ""
|
||||
|
||||
msgid "Hide metadata"
|
||||
msgid "Properties"
|
||||
msgstr ""
|
||||
|
||||
msgid "Show metadata"
|
||||
msgstr ""
|
||||
|
||||
msgid "View on map"
|
||||
msgstr ""
|
||||
|
||||
msgid "Go to source URL"
|
||||
msgid "Add body"
|
||||
msgstr ""
|
||||
|
||||
msgid "Edit"
|
||||
msgstr ""
|
||||
|
||||
msgid "Delete notebook"
|
||||
msgid "Add title"
|
||||
msgstr ""
|
||||
|
||||
msgid "Login with OneDrive"
|
||||
@@ -1794,14 +2005,3 @@ msgstr ""
|
||||
|
||||
msgid "Search"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"Click on the (+) button to create a new note or notebook. Click on the side "
|
||||
"menu to access your existing notebooks."
|
||||
msgstr ""
|
||||
|
||||
msgid "You currently have no notebook. Create one by clicking on (+) button."
|
||||
msgstr ""
|
||||
|
||||
msgid "Welcome"
|
||||
msgstr ""
|
||||
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
2334
CliClient/locales/pl_PL.po
Normal file
2334
CliClient/locales/pl_PL.po
Normal file
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -132,6 +132,14 @@ msgstr ""
|
||||
msgid "Operation cancelled"
|
||||
msgstr "Operațiunea a fost amânată"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Confirm password:"
|
||||
msgstr "Parolă:"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Passwords do not match!"
|
||||
msgstr "Parolă nu poate fi un câmp gol"
|
||||
|
||||
msgid ""
|
||||
"Starting decryption... Please wait as it may take several minutes depending "
|
||||
"on how much there is to decrypt."
|
||||
@@ -164,16 +172,6 @@ msgstr "Niciun caiet de notițe activ."
|
||||
msgid "Note does not exist: \"%s\". Create it?"
|
||||
msgstr "Notița nu există: \"%s\". Doriți să o creați?"
|
||||
|
||||
msgid "Starting to edit note. Close the editor to get back to the prompt."
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Error opening note in editor: %s"
|
||||
msgstr "Eroare deschidere notiță în editor: %s"
|
||||
|
||||
msgid "Note has been saved."
|
||||
msgstr "Notița a fost salvată."
|
||||
|
||||
msgid "Exits the application."
|
||||
msgstr ""
|
||||
|
||||
@@ -357,6 +355,23 @@ msgstr "Ștergeți notița?"
|
||||
msgid "Searches for the given <pattern> in all the notes."
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid ""
|
||||
"Start, stop or check the API server. To specify on which port it should run, "
|
||||
"set the api.port config variable. Commands are (%s)."
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Server is already running on port %d"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Server is running on port %d"
|
||||
msgstr ""
|
||||
|
||||
msgid "Server is not running."
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid ""
|
||||
"Sets the property <name> of the given <note> to the given [value]. Possible "
|
||||
@@ -421,9 +436,10 @@ msgid "Cancelling... Please wait."
|
||||
msgstr "Se anulează... Vă rugăm să așteptați."
|
||||
|
||||
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)."
|
||||
"<tag-command> can be \"add\", \"remove\", \"list\", or \"notetags\" to "
|
||||
"assign or remove [tag] from [note], to list notes associated with [tag], or "
|
||||
"to list tags associated with [note]. The command `tag list` can be used to "
|
||||
"list all the tags (use -l for long option)."
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
@@ -521,55 +537,10 @@ 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..."
|
||||
msgid "Could not export notes: %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "PDF File"
|
||||
msgstr "Fișier PDF"
|
||||
|
||||
msgid "Synchronisation status"
|
||||
msgstr "Statusul sincronizării"
|
||||
|
||||
msgid "New note"
|
||||
msgstr "Adăugați o nouă notiță"
|
||||
|
||||
msgid "New to-do"
|
||||
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"
|
||||
@@ -583,6 +554,9 @@ msgstr ""
|
||||
msgid "Check for updates..."
|
||||
msgstr "Verificați actualizările..."
|
||||
|
||||
msgid "Templates"
|
||||
msgstr ""
|
||||
|
||||
msgid "Import"
|
||||
msgstr "Importați"
|
||||
|
||||
@@ -628,12 +602,18 @@ msgstr ""
|
||||
msgid "Link"
|
||||
msgstr ""
|
||||
|
||||
msgid "Code"
|
||||
msgstr "Cod"
|
||||
|
||||
msgid "Insert Date Time"
|
||||
msgstr ""
|
||||
|
||||
msgid "Edit in external editor"
|
||||
msgstr "Editați într-un editor extern"
|
||||
|
||||
msgid "Tags"
|
||||
msgstr "Etichete"
|
||||
|
||||
msgid "Search in all the notes"
|
||||
msgstr "Căutați în toate notițele"
|
||||
|
||||
@@ -648,6 +628,13 @@ msgstr "Vizualizați"
|
||||
msgid "Toggle sidebar"
|
||||
msgstr ""
|
||||
|
||||
msgid "Layout button sequence"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Toggle note list"
|
||||
msgstr "Activați criptarea"
|
||||
|
||||
msgid "Toggle editor layout"
|
||||
msgstr ""
|
||||
|
||||
@@ -665,9 +652,16 @@ msgstr "Ajutor"
|
||||
msgid "Website and documentation"
|
||||
msgstr "Website și documentație"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Joplin Forum"
|
||||
msgstr "Website Joplin"
|
||||
|
||||
msgid "Make a donation"
|
||||
msgstr "Faceți o donație"
|
||||
|
||||
msgid "Toggle development tools"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Open %s"
|
||||
msgstr "Deschideți %s"
|
||||
@@ -705,6 +699,9 @@ msgstr "Da"
|
||||
msgid "No"
|
||||
msgstr "Nu"
|
||||
|
||||
msgid "Full Release Notes"
|
||||
msgstr ""
|
||||
|
||||
msgid "Token has been copied to the clipboard!"
|
||||
msgstr ""
|
||||
|
||||
@@ -766,6 +763,9 @@ msgid ""
|
||||
"access Joplin."
|
||||
msgstr ""
|
||||
|
||||
msgid "This will open a new screen. Save your current changes?"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Notes and settings are stored in: %s"
|
||||
msgstr ""
|
||||
@@ -776,6 +776,9 @@ msgstr ""
|
||||
msgid "Browse..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Back"
|
||||
msgstr "Înapoi"
|
||||
|
||||
msgid "Apply"
|
||||
msgstr "Aplicați"
|
||||
|
||||
@@ -844,8 +847,8 @@ msgid ""
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"For more information about End-To-End Encryption (E2EE) and advices on how "
|
||||
"to enable it please check the documentation:"
|
||||
"For more information about End-To-End Encryption (E2EE) and advice on how to "
|
||||
"enable it please check the documentation:"
|
||||
msgstr ""
|
||||
|
||||
msgid "Status"
|
||||
@@ -854,13 +857,19 @@ msgstr "Status"
|
||||
msgid "Encryption is:"
|
||||
msgstr "Criptarea este:"
|
||||
|
||||
msgid "Firefox Extension"
|
||||
msgstr ""
|
||||
|
||||
msgid "Chrome Web Store"
|
||||
msgstr ""
|
||||
|
||||
msgid "Get it now:"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Usage"
|
||||
msgstr "Utilizare: %s"
|
||||
|
||||
msgid "Back"
|
||||
msgstr "Înapoi"
|
||||
|
||||
#, javascript-format
|
||||
msgid ""
|
||||
"New notebook \"%s\" will be created and file \"%s\" will be imported into it"
|
||||
@@ -878,9 +887,6 @@ msgstr "Titlul caietului de notițe:"
|
||||
msgid "Add or remove tags:"
|
||||
msgstr "Adăugați ori eliminați etichete:"
|
||||
|
||||
msgid "Separate each tag by a comma."
|
||||
msgstr "Separați fiecare etichetă printr-o virgulă."
|
||||
|
||||
msgid "Rename notebook:"
|
||||
msgstr "Redenumiți caietul de notițe:"
|
||||
|
||||
@@ -890,6 +896,18 @@ msgstr "Redenumiți eticheta:"
|
||||
msgid "Set alarm:"
|
||||
msgstr "Setați alarma:"
|
||||
|
||||
msgid "Template file:"
|
||||
msgstr ""
|
||||
|
||||
msgid "New note"
|
||||
msgstr "Adăugați o nouă notiță"
|
||||
|
||||
msgid "New to-do"
|
||||
msgstr "Adăugați o nouă sarcină"
|
||||
|
||||
msgid "New notebook"
|
||||
msgstr "Adăugați un nou caiet de notițe"
|
||||
|
||||
msgid "Layout"
|
||||
msgstr ""
|
||||
|
||||
@@ -902,8 +920,8 @@ msgstr "Câțiva itemi nu pot fi sincronizați."
|
||||
msgid "View them now"
|
||||
msgstr "Vizualizați-le acum"
|
||||
|
||||
msgid "Some items cannot be decrypted."
|
||||
msgstr "Câțiva itemi nu pot fi descriptați."
|
||||
msgid "One or more master keys need a password."
|
||||
msgstr ""
|
||||
|
||||
msgid "Set the password"
|
||||
msgstr "Setați parola"
|
||||
@@ -925,6 +943,9 @@ msgstr ""
|
||||
msgid "Note History"
|
||||
msgstr "Caiete de notițe"
|
||||
|
||||
msgid "Markup"
|
||||
msgstr ""
|
||||
|
||||
msgid "Previous versions of this note"
|
||||
msgstr ""
|
||||
|
||||
@@ -939,6 +960,10 @@ msgstr ""
|
||||
msgid "This note has no history"
|
||||
msgstr "Această notiță a fost modificată:"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Unsupported link or message: %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Restore"
|
||||
msgstr ""
|
||||
|
||||
@@ -967,10 +992,6 @@ 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 ""
|
||||
|
||||
#, javascript-format
|
||||
msgid ""
|
||||
"This note has no content. Click on \"%s\" to toggle the editor and edit the "
|
||||
@@ -980,6 +1001,13 @@ msgstr ""
|
||||
msgid "Only one note can be printed or exported to PDF at a time."
|
||||
msgstr ""
|
||||
|
||||
msgid "PDF File"
|
||||
msgstr "Fișier PDF"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Error opening note in editor: %s"
|
||||
msgstr "Eroare deschidere notiță în editor: %s"
|
||||
|
||||
msgid "strong text"
|
||||
msgstr ""
|
||||
|
||||
@@ -995,9 +1023,6 @@ msgstr "Introduceți hyperlink"
|
||||
msgid "Attach file"
|
||||
msgstr "Atașați fișier"
|
||||
|
||||
msgid "Tags"
|
||||
msgstr "Etichete"
|
||||
|
||||
msgid "Set alarm"
|
||||
msgstr "Setați alarma"
|
||||
|
||||
@@ -1008,9 +1033,6 @@ msgstr "În: %s"
|
||||
msgid "Hyperlink"
|
||||
msgstr "Hyperlink"
|
||||
|
||||
msgid "Code"
|
||||
msgstr "Cod"
|
||||
|
||||
msgid "Numbered List"
|
||||
msgstr "Listă numerotată"
|
||||
|
||||
@@ -1060,11 +1082,8 @@ msgstr "Opțiuni"
|
||||
msgid "Synchronisation Status"
|
||||
msgstr "Statutul sincronizării"
|
||||
|
||||
msgid "Encryption Options"
|
||||
msgstr "Opțiuni de criptare"
|
||||
|
||||
msgid "Clipper Options"
|
||||
msgstr "Opțiuni Clipper"
|
||||
msgid "Remove"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid ""
|
||||
@@ -1073,6 +1092,9 @@ msgid ""
|
||||
"All notes and sub-notebooks within this notebook will also be deleted."
|
||||
msgstr ""
|
||||
|
||||
msgid "Delete"
|
||||
msgstr "Ștergeți"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Remove tag \"%s\" from all notes?"
|
||||
msgstr ""
|
||||
@@ -1080,8 +1102,9 @@ msgstr ""
|
||||
msgid "Remove this search from the sidebar?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Delete"
|
||||
msgstr "Ștergeți"
|
||||
#, fuzzy
|
||||
msgid "New sub-notebook"
|
||||
msgstr "Adăugați un nou caiet de notițe"
|
||||
|
||||
msgid "Rename"
|
||||
msgstr "Redenumiți"
|
||||
@@ -1094,12 +1117,15 @@ msgid "Decrypting items: %d/%d"
|
||||
msgstr "Se decriptează itemi: %d/%d"
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Fetching resources: %d"
|
||||
msgstr "Resurse: %d."
|
||||
msgid "Fetching resources: %d/%d"
|
||||
msgstr "Resurse: %d/%d"
|
||||
|
||||
msgid "Please select where the sync status should be exported to"
|
||||
msgstr ""
|
||||
|
||||
msgid "Retry"
|
||||
msgstr ""
|
||||
|
||||
msgid "Add or remove tags"
|
||||
msgstr "Adăugați ori eliminați etichete"
|
||||
|
||||
@@ -1241,14 +1267,6 @@ msgstr ""
|
||||
msgid "In progress"
|
||||
msgstr "În progres"
|
||||
|
||||
#, javascript-format
|
||||
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"
|
||||
|
||||
@@ -1292,6 +1310,69 @@ msgid ""
|
||||
"more details: %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Keyboard Mode"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Default"
|
||||
msgstr "Modul implicit: %s"
|
||||
|
||||
msgid "Emacs"
|
||||
msgstr ""
|
||||
|
||||
msgid "Vim"
|
||||
msgstr ""
|
||||
|
||||
msgid "Synchronisation target"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"The target to synchonise to. Each sync target may have additional parameters "
|
||||
"which are named as `sync.NUM.NAME` (all documented below)."
|
||||
msgstr ""
|
||||
|
||||
msgid "Directory to synchronise with (absolute path)"
|
||||
msgstr ""
|
||||
|
||||
msgid "Nextcloud WebDAV URL"
|
||||
msgstr "URL NextCloud WebDAV"
|
||||
|
||||
msgid "Nextcloud username"
|
||||
msgstr "Nume utilizator Nextcloud"
|
||||
|
||||
msgid "Nextcloud password"
|
||||
msgstr "Parolă Nextcloud"
|
||||
|
||||
msgid "WebDAV URL"
|
||||
msgstr "URL-ul WebDAV"
|
||||
|
||||
msgid "WebDAV username"
|
||||
msgstr "Nume utilizator WebDAV"
|
||||
|
||||
msgid "WebDAV password"
|
||||
msgstr "Parolă WebDAV"
|
||||
|
||||
msgid "Attachment download behaviour"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"In \"Manual\" mode, attachments are downloaded only when you click on them. "
|
||||
"In \"Auto\", they are downloaded when you open the note. In \"Always\", all "
|
||||
"the attachments are downloaded whether you open the note or not."
|
||||
msgstr ""
|
||||
|
||||
msgid "Always"
|
||||
msgstr ""
|
||||
|
||||
msgid "Manual"
|
||||
msgstr ""
|
||||
|
||||
msgid "Auto"
|
||||
msgstr ""
|
||||
|
||||
msgid "Max concurrent connections"
|
||||
msgstr ""
|
||||
|
||||
msgid "Language"
|
||||
msgstr "Limbă"
|
||||
|
||||
@@ -1310,6 +1391,41 @@ msgstr "Deschisă"
|
||||
msgid "Dark"
|
||||
msgstr "Închisă"
|
||||
|
||||
msgid "Dracula"
|
||||
msgstr ""
|
||||
|
||||
msgid "Solarised Light"
|
||||
msgstr ""
|
||||
|
||||
msgid "Solarised Dark"
|
||||
msgstr ""
|
||||
|
||||
msgid "Nord"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Show note counts"
|
||||
msgstr "Afișați iconița coșul de gunoi"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Editor"
|
||||
msgstr "Editați"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Viewer"
|
||||
msgstr "Vizualizați"
|
||||
|
||||
msgid "Split View"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "%s / %s / %s"
|
||||
msgstr "%s = %s (%s)"
|
||||
|
||||
#, javascript-format
|
||||
msgid "%s / %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Uncompleted to-dos on top"
|
||||
msgstr ""
|
||||
|
||||
@@ -1344,6 +1460,9 @@ msgstr "Când este creată o nouă notiță:"
|
||||
msgid "Enable soft breaks"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable typographer support"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Enable math expressions"
|
||||
msgstr "Activați criptarea"
|
||||
@@ -1378,6 +1497,9 @@ msgstr ""
|
||||
msgid "Enable multimarkdown table extension"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable Fountain syntax support"
|
||||
msgstr ""
|
||||
|
||||
msgid "Show tray icon"
|
||||
msgstr "Afișați iconița coșul de gunoi"
|
||||
|
||||
@@ -1400,6 +1522,10 @@ msgstr ""
|
||||
msgid "Editor font size"
|
||||
msgstr "Editează notiță."
|
||||
|
||||
#, fuzzy
|
||||
msgid "Editor font"
|
||||
msgstr "Editează notiță."
|
||||
|
||||
msgid "Editor font family"
|
||||
msgstr ""
|
||||
|
||||
@@ -1441,37 +1567,35 @@ msgid ""
|
||||
"If none is provided it will try to auto-detect the default editor."
|
||||
msgstr ""
|
||||
|
||||
msgid "Show advanced options"
|
||||
msgstr "Afișați opțiunile avansate"
|
||||
|
||||
msgid "Synchronisation target"
|
||||
msgid "Page size for PDF export"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"The target to synchonise to. Each sync target may have additional parameters "
|
||||
"which are named as `sync.NUM.NAME` (all documented below)."
|
||||
msgid "A4"
|
||||
msgstr ""
|
||||
|
||||
msgid "Directory to synchronise with (absolute path)"
|
||||
msgid "Letter"
|
||||
msgstr ""
|
||||
|
||||
msgid "Nextcloud WebDAV URL"
|
||||
msgstr "URL NextCloud WebDAV"
|
||||
msgid "A3"
|
||||
msgstr ""
|
||||
|
||||
msgid "Nextcloud username"
|
||||
msgstr "Nume utilizator Nextcloud"
|
||||
msgid "A5"
|
||||
msgstr ""
|
||||
|
||||
msgid "Nextcloud password"
|
||||
msgstr "Parolă Nextcloud"
|
||||
msgid "Tabloid"
|
||||
msgstr ""
|
||||
|
||||
msgid "WebDAV URL"
|
||||
msgstr "URL-ul WebDAV"
|
||||
msgid "Legal"
|
||||
msgstr ""
|
||||
|
||||
msgid "WebDAV username"
|
||||
msgstr "Nume utilizator WebDAV"
|
||||
msgid "Page orientation for PDF export"
|
||||
msgstr ""
|
||||
|
||||
msgid "WebDAV password"
|
||||
msgstr "Parolă WebDAV"
|
||||
msgid "Portrait"
|
||||
msgstr ""
|
||||
|
||||
msgid "Landscape"
|
||||
msgstr ""
|
||||
|
||||
msgid "Custom TLS certificates"
|
||||
msgstr "Certificate TLS cusomizate"
|
||||
@@ -1486,6 +1610,16 @@ msgstr ""
|
||||
msgid "Ignore TLS certificate errors"
|
||||
msgstr "Ignoră erorile de certificat TLS"
|
||||
|
||||
msgid ""
|
||||
"Fail-safe: Do not wipe out local data when sync target is empty (often the "
|
||||
"result of a misconfiguration or bug)"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"Specify the port that should be used by the API server. If not set, a "
|
||||
"default will be used."
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Enable note history"
|
||||
msgstr "Activați criptarea"
|
||||
@@ -1526,6 +1660,13 @@ msgstr ""
|
||||
msgid "Application"
|
||||
msgstr "Duplicați"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Encryption"
|
||||
msgstr "Criptarea este:"
|
||||
|
||||
msgid "Web Clipper"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "The tag \"%s\" already exists. Please choose a different name."
|
||||
msgstr ""
|
||||
@@ -1539,7 +1680,10 @@ msgstr "Markdown"
|
||||
msgid "Joplin Export Directory"
|
||||
msgstr ""
|
||||
|
||||
msgid "Evernote Export File"
|
||||
msgid "Evernote Export File (as Markdown)"
|
||||
msgstr ""
|
||||
|
||||
msgid "Evernote Export File (as HTML)"
|
||||
msgstr ""
|
||||
|
||||
msgid "Json Export Directory"
|
||||
@@ -1577,6 +1721,12 @@ msgstr ""
|
||||
msgid "Items that cannot be synchronised"
|
||||
msgstr "Itemii nu pot fi sincronizați"
|
||||
|
||||
msgid ""
|
||||
"These items will remain on the device but will not be uploaded to the sync "
|
||||
"target. In order to find these items, either search for the title or the ID "
|
||||
"(which is displayed in brackets above)."
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "%s (%s) could not be uploaded: %s"
|
||||
msgstr "Acest fișier nu a putut fi deschis: %s"
|
||||
@@ -1585,10 +1735,14 @@ msgstr "Acest fișier nu a putut fi deschis: %s"
|
||||
msgid "Item \"%s\" could not be downloaded: %s"
|
||||
msgstr "Acest fișier nu a putut fi deschis: %s"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Items that cannot be decrypted"
|
||||
msgstr "Itemii nu pot fi sincronizați"
|
||||
|
||||
msgid ""
|
||||
"These items will remain on the device but will not be uploaded to the sync "
|
||||
"target. In order to find these items, either search for the title or the ID "
|
||||
"(which is displayed in brackets above)."
|
||||
"Joplin failed to decrypt these items multiple times, possibly because they "
|
||||
"are corrupted or too large. These items will remain on the device but Joplin "
|
||||
"will no longer attempt to decrypt them."
|
||||
msgstr ""
|
||||
|
||||
msgid "Sync status (synced items / total items)"
|
||||
@@ -1630,24 +1784,20 @@ msgstr ""
|
||||
msgid "Your permission to use your camera is required."
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "You currently have no notebooks."
|
||||
msgstr "Niciun caiet de notițe activ."
|
||||
|
||||
#, fuzzy
|
||||
msgid "Create a notebook"
|
||||
msgstr "Creați caiet de notițe."
|
||||
|
||||
msgid "There are currently no notes. Create one by clicking on the (+) button."
|
||||
msgstr ""
|
||||
|
||||
msgid "Delete these notes?"
|
||||
msgstr "Ștergeți aceste notițe?"
|
||||
|
||||
msgid "Log"
|
||||
msgstr ""
|
||||
|
||||
msgid "Export Debug Report"
|
||||
msgstr ""
|
||||
|
||||
msgid "Encryption Config"
|
||||
msgstr ""
|
||||
|
||||
msgid "Configuration"
|
||||
msgstr "Configurare"
|
||||
|
||||
msgid "Move to notebook..."
|
||||
msgstr "Mutați în caietul de notițe..."
|
||||
|
||||
@@ -1671,8 +1821,24 @@ msgstr "Selectați data"
|
||||
msgid "Confirm"
|
||||
msgstr "Confirmați"
|
||||
|
||||
msgid "Cancel synchronisation"
|
||||
msgstr "Amânați sincronizarea"
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Notebook: %s"
|
||||
msgstr "Caiete de notițe"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Encrypted notebooks cannot be renamed"
|
||||
msgstr "Itemii criptați nu pot fi editați"
|
||||
|
||||
#, fuzzy
|
||||
msgid "New Notebook"
|
||||
msgstr "Adăugați un nou caiet de notițe"
|
||||
|
||||
msgid "Configuration"
|
||||
msgstr "Configurare"
|
||||
|
||||
#, fuzzy
|
||||
msgid "All notes"
|
||||
msgstr "notiță"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Checking... Please wait."
|
||||
@@ -1708,6 +1874,50 @@ msgstr "Etichete noi:"
|
||||
msgid "Type new tags or select from list"
|
||||
msgstr ""
|
||||
|
||||
msgid "Warning"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"In order to use file system synchronisation your permission to write to "
|
||||
"external storage is required."
|
||||
msgstr ""
|
||||
|
||||
msgid "Encryption Config"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Tools"
|
||||
msgstr "Unelte"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Sync Status"
|
||||
msgstr "Status"
|
||||
|
||||
msgid "Log"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Creating report..."
|
||||
msgstr "Se crează un %s..."
|
||||
|
||||
msgid "Export Debug Report"
|
||||
msgstr ""
|
||||
|
||||
msgid "Fixing search index..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Fix search index"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"Use this to rebuild the search index if there is a problem with search. It "
|
||||
"may take a long time depending on the number of notes."
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "More information"
|
||||
msgstr "Configurare"
|
||||
|
||||
msgid ""
|
||||
"To work correctly, the app needs the following permissions. Please enable "
|
||||
"them in your phone settings, in Apps > Joplin > Permissions"
|
||||
@@ -1755,6 +1965,10 @@ msgstr "Parolă:"
|
||||
msgid "Password cannot be empty"
|
||||
msgstr "Parolă nu poate fi un câmp gol"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Confirm password cannot be empty"
|
||||
msgstr "Parolă nu poate fi un câmp gol"
|
||||
|
||||
msgid "Enable"
|
||||
msgstr "Activați"
|
||||
|
||||
@@ -1765,6 +1979,10 @@ msgstr "Caietul de notițe nu a puut fi salvat: %s"
|
||||
msgid "Edit notebook"
|
||||
msgstr "Editați caietul de notițe"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Enter notebook title"
|
||||
msgstr "Titlul caietului de notițe:"
|
||||
|
||||
msgid "Show all"
|
||||
msgstr "Afișați tot"
|
||||
|
||||
@@ -1788,10 +2006,32 @@ msgstr "Niciun item cu ID-ul %s"
|
||||
msgid "The Joplin mobile app does not currently support this type of link: %s"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Links with protocol \"%s\" are not supported"
|
||||
msgstr ""
|
||||
|
||||
#, javascript-format
|
||||
msgid "Unsupported image type: %s"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy, javascript-format
|
||||
msgid "Updated: %s"
|
||||
msgstr "Actualizat: %d."
|
||||
|
||||
msgid "View on map"
|
||||
msgstr "Vizualizați pe hartă"
|
||||
|
||||
msgid "Go to source URL"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Attach..."
|
||||
msgstr "Caută..."
|
||||
|
||||
#, fuzzy
|
||||
msgid "Choose an option"
|
||||
msgstr "Afișați opțiunile avansate"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Take photo"
|
||||
msgstr "Atașează imagine"
|
||||
@@ -1811,23 +2051,18 @@ msgstr ""
|
||||
msgid "Convert to todo"
|
||||
msgstr ""
|
||||
|
||||
msgid "Hide metadata"
|
||||
msgstr "Ascundeți metadatele"
|
||||
msgid "Properties"
|
||||
msgstr ""
|
||||
|
||||
msgid "Show metadata"
|
||||
msgstr "Afișați metadatele"
|
||||
|
||||
msgid "View on map"
|
||||
msgstr "Vizualizați pe hartă"
|
||||
|
||||
msgid "Go to source URL"
|
||||
msgid "Add body"
|
||||
msgstr ""
|
||||
|
||||
msgid "Edit"
|
||||
msgstr "Editați"
|
||||
|
||||
msgid "Delete notebook"
|
||||
msgstr "Ștergeți caiet de notițe"
|
||||
#, fuzzy
|
||||
msgid "Add title"
|
||||
msgstr "titlu"
|
||||
|
||||
# vezi context
|
||||
msgid "Login with OneDrive"
|
||||
@@ -1836,26 +2071,88 @@ msgstr "Autentificare prin OneDrive"
|
||||
msgid "Search"
|
||||
msgstr "Caută"
|
||||
|
||||
msgid ""
|
||||
"Click on the (+) button to create a new note or notebook. Click on the side "
|
||||
"menu to access your existing notebooks."
|
||||
msgstr ""
|
||||
#, fuzzy
|
||||
#~ msgid "Confirm master password:"
|
||||
#~ msgstr "Setați parola"
|
||||
|
||||
msgid "You currently have no notebook. Create one by clicking on (+) button."
|
||||
msgstr ""
|
||||
"Nu aveți niciun caiet de notițe creat. Creați unul făcând click pe butonnul "
|
||||
"(+)."
|
||||
#, fuzzy
|
||||
#~ msgid "Confirm password"
|
||||
#~ msgstr "Confirmați"
|
||||
|
||||
msgid "Welcome"
|
||||
msgstr "Bine ați venit"
|
||||
#, fuzzy
|
||||
#~ msgid "Missing required argument: note"
|
||||
#~ msgstr "Lipsește argumentul necesar: %s"
|
||||
|
||||
#~ msgid "Note has been saved."
|
||||
#~ msgstr "Notița a fost salvată."
|
||||
|
||||
#, fuzzy
|
||||
#~ msgid "Note title"
|
||||
#~ msgstr "Titlul caietului de notițe:"
|
||||
|
||||
#, fuzzy
|
||||
#~ msgid "Note body"
|
||||
#~ msgstr "Caiete de notițe"
|
||||
|
||||
#~ msgid "Synchronisation status"
|
||||
#~ msgstr "Statusul sincronizării"
|
||||
|
||||
#~ msgid "Print"
|
||||
#~ msgstr "Printați"
|
||||
|
||||
#~ msgid "General Options"
|
||||
#~ msgstr "Opțiuni Generale"
|
||||
|
||||
#~ msgid "Encryption options"
|
||||
#~ msgstr "Opțiuni de criptare"
|
||||
|
||||
#, fuzzy
|
||||
#~ msgid "Revision: %s (%s)"
|
||||
#~ msgstr "%s %s (%s)"
|
||||
|
||||
#~ msgid "%s %s (%s, %s)"
|
||||
#~ msgstr "%s %s (%s, %s)"
|
||||
|
||||
#~ msgid "Encryption Options"
|
||||
#~ msgstr "Opțiuni de criptare"
|
||||
|
||||
#~ msgid "Clipper Options"
|
||||
#~ msgstr "Opțiuni Clipper"
|
||||
|
||||
#, fuzzy
|
||||
#~ msgid "Information"
|
||||
#~ msgstr "Configurare"
|
||||
|
||||
#~ msgid "Cancel synchronisation"
|
||||
#~ msgstr "Amânați sincronizarea"
|
||||
|
||||
#~ msgid "Hide metadata"
|
||||
#~ msgstr "Ascundeți metadatele"
|
||||
|
||||
#~ msgid "Show metadata"
|
||||
#~ msgstr "Afișați metadatele"
|
||||
|
||||
#~ msgid "Delete notebook"
|
||||
#~ msgstr "Ștergeți caiet de notițe"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "You currently have no notebook. Create one by clicking on (+) button."
|
||||
#~ msgstr ""
|
||||
#~ "Nu aveți niciun caiet de notițe creat. Creați unul făcând click pe "
|
||||
#~ "butonnul (+)."
|
||||
|
||||
#~ msgid "Welcome"
|
||||
#~ msgstr "Bine ați venit"
|
||||
|
||||
#~ msgid "Separate each tag by a comma."
|
||||
#~ msgstr "Separați fiecare etichetă printr-o virgulă."
|
||||
|
||||
#~ msgid "Some items cannot be decrypted."
|
||||
#~ msgstr "Câțiva itemi nu pot fi descriptați."
|
||||
|
||||
#~ msgid "%s (%s): %s"
|
||||
#~ msgstr "%s (%s): %s"
|
||||
|
||||
#, fuzzy
|
||||
#~ msgid "Joplin v%s"
|
||||
#~ msgstr "Website Joplin"
|
||||
|
||||
#~ msgid "State: %s."
|
||||
#~ msgstr "Statut: %s."
|
||||
|
||||
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
2313
CliClient/locales/sr_RS.po
Normal file
2313
CliClient/locales/sr_RS.po
Normal file
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user